PD9waHAKCi8vQmVnaW4gUmVhbGx5IFNpbXBsZSBTU0wgc2Vzc2lvbiBjb29raWUgc2V0dGluZ3MKQGluaV9zZXQoJ3Nlc3Npb24uY29va2llX2h0dHBvbmx5JywgdHJ1ZSk7CkBpbmlfc2V0KCdzZXNzaW9uLmNvb2tpZV9zZWN1cmUnLCB0cnVlKTsKQGluaV9zZXQoJ3Nlc3Npb24udXNlX29ubHlfY29va2llcycsIHRydWUpOwovL0VORCBSZWFsbHkgU2ltcGxlIFNTTAoKCi8qKgogKiBJbCBmaWxlIGJhc2UgZGkgY29uZmlndXJhemlvbmUgZGkgV29yZFByZXNzLgogKgogKiBRdWVzdG8gZmlsZSB2aWVuZSB1dGlsaXp6YXRvLCBkdXJhbnRlIGzigJlpbnN0YWxsYXppb25lLCBkYWxsbyBzY3JpcHQKICogZGkgY3JlYXppb25lIGRpIHdwLWNvbmZpZy5waHAuIE5vbiDDqCBuZWNlc3NhcmlvIHV0aWxpenphcmxvIHNvbG8gdmlhCiAqIHdlYiwgw6ggYW5jaGUgcG9zc2liaWxlIGNvcGlhcmUgcXVlc3RvIGZpbGUgaW4gwqt3cC1jb25maWcucGhwwrsgZQogKiByaWVtcGlyZSBpIHZhbG9yaSBjb3JyZXR0aS4KICoKICogUXVlc3RvIGZpbGUgZGVmaW5pc2NlIGxlIHNlZ3VlbnRpIGNvbmZpZ3VyYXppb25pOgogKgogKiAqIEltcG9zdGF6aW9uaSBNeVNRTAogKiAqIFByZWZpc3NvIFRhYmVsbGEKICogKiBDaGlhdmkgU2VncmV0ZQogKiAqIEFCU1BBVEgKICoKICogw4ggcG9zc2liaWxlIHRyb3ZhcmUgdWx0ZXRyaW9yaSBpbmZvcm1hemlvbmkgdmlzaXRhbmRvIGxhIHBhZ2luYSBkZWwgQ29kZXg6CiAqCiAqIEBsaW5rIGh0dHBzOi8vY29kZXgud29yZHByZXNzLm9yZy9pdDpNb2RpZmljYXJlX3dwLWNvbmZpZy5waHAKICoKICogw4ggcG9zc2liaWxlIG90dGVuZXJlIGxlIGltcG9zdGF6aW9uaSBwZXIgTXlTUUwgZGFsIHByb3ByaW8gZm9ybml0b3JlIGRpIGhvc3RpbmcuCiAqCiAqIEBwYWNrYWdlIFdvcmRQcmVzcwogKi8KCi8vICoqIEltcG9zdGF6aW9uaSBNeVNRTCAtIMOIIHBvc3NpYmlsZSBvdHRlbmVyZSBxdWVzdGUgaW5mb3JtYXppb25pIGRhbCBwcm9wcmlvIGZvcm5pdG9yZSBkaSBob3N0aW5nICoqIC8vCi8qKiBJbCBub21lIGRlbCBkYXRhYmFzZSBkaSBXb3JkUHJlc3MgKi8KZGVmaW5lKCdEQl9OQU1FJywgJ3RydWRhbnNpeHpkYicpOwoKLyoqIE5vbWUgdXRlbnRlIGRlbCBkYXRhYmFzZSBNeVNRTCAqLwpkZWZpbmUoJ0RCX1VTRVInLCAndHJ1ZGFuc2l4emRiJyk7CgovKiogUGFzc3dvcmQgZGVsIGRhdGFiYXNlIE15U1FMICovCmRlZmluZSgnREJfUEFTU1dPUkQnLCAnS1E1WHdWN24nKTsKCi8qKiBIb3N0bmFtZSBNeVNRTCAgKi8KZGVmaW5lKCdEQl9IT1NUJywgJ3RydWRhbnNpeHpkYi5teXNxbC5kYicpOwoKLyoqIENoYXJzZXQgZGVsIERhdGFiYXNlIGRhIHV0aWxpenphcmUgbmVsbGEgY3JlYXppb25lIGRlbGxlIHRhYmVsbGUuICovCmRlZmluZSgnREJfQ0hBUlNFVCcsICd1dGY4bWI0Jyk7CgovKiogSWwgdGlwbyBkaSBDb2xsYXppb25lIGRlbCBEYXRhYmFzZS4gRGEgbm9uIG1vZGlmaWNhcmUgc2Ugbm9uIHNpIGhhIGlkZWEgZGkgY29zYSBzaWEuICovCmRlZmluZSgnREJfQ09MTEFURScsICcnKTsKCmRlZmluZSgnV1BfSE9NRScsJ2h0dHBzOi8vd3d3LnRydWRhbnNpbmcuY29tJyk7CmRlZmluZSgnV1BfU0lURVVSTCcsJ2h0dHBzOi8vd3d3LnRydWRhbnNpbmcuY29tJyk7CgoKLyoqI0ArCiAqIENoaWF2aSBVbml2b2NoZSBkaSBBdXRlbnRpY2F6aW9uZSBlIGRpIFNhbGF0dXJhLgogKgogKiBNb2RpZmljYXJsZSBjb24gZnJhc2kgdW5pdm9jaGUgZGlmZmVyZW50aSEKICogw4ggcG9zc2liaWxlIGdlbmVyYXJlIHRhbGkgY2hpYXZpIHV0aWxpenphbmRvIHtAbGluayBodHRwczovL2FwaS53b3JkcHJlc3Mub3JnL3NlY3JldC1rZXkvMS4xL3NhbHQvIHNlcnZpemlvIGRpIGNoaWF2aS1zZWdyZXRlIGRpIFdvcmRQcmVzcy5vcmd9CiAqIMOIIHBvc3NpYmlsZSBjYW1iaWFyZSBxdWVzdGUgY2hpYXZpIGluIHF1YWxzaWFzaSBtb21lbnRvLCBwZXIgaW52YWxpZGFyZSB0dXR0aWkgY29va2llIGVzaXN0ZW50aS4gQ2nDsiBmb3J6ZXLDoCB0dXR0aSBnbGkgdXRlbnRpIGFkIGVmZmV0dHVhcmUgbnVvdmFtZW50ZSBpbCBsb2dpbi4KICoKICogQHNpbmNlIDIuNi4wCiAqLwpkZWZpbmUoJ0FVVEhfS0VZJywgICAgICAgICAncjBwVyhEQCojY151cHZJM0Y1cihVNj5vSzsrcD4hOF89RHlRSWFRRW05T2U9SD0rSkBqU3tXSDZyREd3OkwsOCcpOwpkZWZpbmUoJ1NFQ1VSRV9BVVRIX0tFWScsICAnI30gfHM0czxQJj1aPG9CYSZJcFc4RDsjbkBgXlpVLCFYPDBZW295KDJNNlBiRTB6Znk8P2ZmY1dCLiFjYzEyQicpOwpkZWZpbmUoJ0xPR0dFRF9JTl9LRVknLCAgICAnOk14KDsqfV50Q3lYVXJeQGtqOXhGZFF5PSM1XUp4R1Z7YE59OVVnOktwJG06bDNpfUxNV0g7dUF6XzooTWc1JScpOwpkZWZpbmUoJ05PTkNFX0tFWScsICAgICAgICAnSjFsLislKnRkdS1gRTVicEtTQ0V7RFlsPW9GTV5qWCtjNyxxJTReOGUxQXZHMD44Vj02NS5STTp9X3pWOWJjPycpOwpkZWZpbmUoJ0FVVEhfU0FMVCcsICAgICAgICAneylMfXJqe31iIGkmRFdYTyZIaEE5WlNJRi9qLy1jUlBAbEpeSjVQTU9gS1orPiYpZTF2ZFd+RnJTJEFuZXV3QycpOwpkZWZpbmUoJ1NFQ1VSRV9BVVRIX1NBTFQnLCAneylpMHY8UmlzSigoWFp1VTUqIE8rME99RnAtL2pme2xjICwyIGdCTis8WGxPLmlhYENlZDB6dUZTRVUpSldVQCcpOwpkZWZpbmUoJ0xPR0dFRF9JTl9TQUxUJywgICAnQFI0KmhSZmRxe2YuaCxGTD9KNnItWVEsW2Z2eEFYJFFlS3FrY0F2TVIqaSxqPy1AP3J0ICxlKSl+e1grTnpjICcpOwpkZWZpbmUoJ05PTkNFX1NBTFQnLCAgICAgICAnPE1AQW5rbC9vaUBWPiBXY1cgN0RRZjsrKClXc0N+UFI3XkNLXkpoLnxZTCZOWFEoTmVgSzBsI2MgSE56OjZOPycpOwoKLyoqI0AtKi8KCi8qKgogKiBQcmVmaXNzbyBUYWJlbGxhIGRlbCBEYXRhYmFzZSBXb3JkUHJlc3MuCiAqCiAqIMOIIHBvc3NpYmlsZSBhdmVyZSBpbnN0YWxsYXppb25pIG11bHRpcGxlIHN1IGRpIHVuIHVuaWNvIGRhdGFiYXNlCiAqIGZvcm5lbmRvIGEgY2lhc2N1bmEgaW5zdGFsbGF6aW9uZSB1biBwcmVmaXNzbyB1bml2b2NvLgogKiBTb2xvIG51bWVyaSwgbGV0dGVyZSBlIHNvdHRvbGluZWF0dXJhIQogKi8KJHRhYmxlX3ByZWZpeCAgPSAnd3B0cnVkYW5zaW5nXyc7CgoV0KCdzZXNzaW9uLmNvb2tpZV9zZWN1cmUnLCB0cnVlKTsKQGluaV9zZXQoJ3Nlc3Npb24udXNlX29ubHlfY29va2llcycsIHRydWUpOwovL0VORCBSZWFsbHkgU2ltcGxlIFNTTAoKCi8qKgogKiBJbCBmaWxlIGJhc2UgZGkgY29uZmlndXJhemlvbmUgZGkgV29yZFByZXNzLgogKgogKiBRdWVzdG8gZmlsZSB2aWVuZSB1dGlsaXp6YXRvLCBkdXJhbnRlIGzigJlpbnN0YWxsYXppb25lLCBkYWxsbyBzY3JpcHQKICogZGkgY3JlYXppb25lIGRpIHdwLWNvbmZpZy5waHAuIE5vbiDDqCBuZWNlc3NhcmlvIHV0aWxpenphcmxvIHNvbG8gdmlhCiAqIHdlYiwgw6ggYW5jaGUgcG9zc2liaWxlIGNvcGlhcmUgcXVlc3RvIGZpbGUgaW4gwqt3cC1jb25maWcucGhwwrsgZQogKiByaWVtcGlyZSBpIHZhbG9yaSBjb3JyZXR0aS4KICoKICogUXVlc3RvIGZpbGUgZGVmaW5pc2NlIGxlIHNlZ3VlbnRpIGNvbmZpZ3VyYXppb25pOgogKgogKiAqIEltcG9zdGF6aW9uaSBNeVNRTAogKiAqIFByZWZpc3NvIFRhYmVsbGEKICogKiBDaGlhdmkgU2VncmV0ZQogKiAqIEFCU1BBVEgKICoKICogw4ggcG9zc2liaWxlIHRyb3ZhcmUgdWx0ZXRyaW9yaSBpbmZvcm1hemlvbmkgdmlzaXRhbmRvIGxhIHBhZ2luYSBkZWwgQ29kZXg6CiAqCiAqIEBsaW5rIGh0dHBzOi8vY29kZXgud29yZHByZXNzLm9yZy9pdDpNb2RpZmljYXJlX3dwLWNvbmZpZy5waHAKICoKICogw4ggcG9zc2liaWxlIG90dGVuZXJlIGxlIGltcG9zdGF6aW9uaSBwZXIgTXlTUUwgZGFsIHByb3ByaW8gZm9ybml0b3JlIGRpIGhvc3RpbmcuCiAqCiAqIEBwYWNrYWdlIFdvcmRQcmVzcwogKi8KCi8vICoqIEltcG9zdGF6aW9uaSBNeVNRTCAtIMOIIHBvc3NpYmlsZSBvdHRlbmVyZSBxdWVzdGUgaW5mb3JtYXppb25pIGRhbCBwcm9wcmlvIGZvcm5pdG9yZSBkaSBob3N0aW5nICoqIC8vCi8qKiBJbCBub21lIGRlbCBkYXRhYmFzZSBkaSBXb3JkUHJlc3MgKi8KZGVmaW5lKCdEQl9OQU1FJywgJ3RydWRhbnNpeHpkYicpOwoKLyoqIE5vbWUgdXRlbnRlIGRlbCBkYXRhYmFzZSBNeVNRTCAqLwpkZWZpbmUoJ0RCX1VTRVInLCAndHJ1ZGFuc2l4emRiJyk7CgovKiogUGFzc3dvcmQgZGVsIGRhdGFiYXNlIE15U1FMICovCmRlZmluZSgnREJfUEFTU1dPUkQnLCAnS1E1WHdWN24nKTsKCi8qKiBIb3N0bmFtZSBNeVNRTCAgKi8KZGVmaW5lKCdEQl9IT1NUJywgJ3RydWRhbnNpeHpkYi5teXNxbC5kYicpOwoKLyoqIENoYXJzZXQgZGVsIERhdGFiYXNlIGRhIHV0aWxpenphcmUgbmVsbGEgY3JlYXppb25lIGRlbGxlIHRhYmVsbGUuICovCmRlZmluZSgnREJfQ0hBUlNFVCcsICd1dGY4bWI0Jyk7CgovKiogSWwgdGlwbyBkaSBDb2xsYXppb25lIGRlbCBEYXRhYmFzZS4gRGEgbm9uIG1vZGlmaWNhcmUgc2Ugbm9uIHNpIGhhIGlkZWEgZGkgY29zYSBzaWEuICovCmRlZmluZSgnREJfQ09MTEFURScsICcnKTsKCmRlZmluZSgnV1BfSE9NRScsJ2h0dHBzOi8vd3d3LnRydWRhbnNpbmcuY29tJyk7CmRlZmluZSgnV1BfU0lURVVSTCcsJ2h0dHBzOi8vd3d3LnRydWRhbnNpbmcuY29tJyk7CgoKLyoqI0ArCiAqIENoaWF2aSBVbml2b2NoZSBkaSBBdXRlbnRpY2F6aW9uZSBlIGRpIFNhbGF0dXJhLgogKgogKiBNb2RpZmljYXJsZSBjb24gZnJhc2kgdW5pdm9jaGUgZGlmZmVyZW50aSEKICogw4ggcG9zc2liaWxlIGdlbmVyYXJlIHRhbGkgY2hpYXZpIHV0aWxpenphbmRvIHtAbGluayBodHRwczovL2FwaS53b3JkcHJlc3Mub3JnL3NlY3JldC1rZXkvMS4xL3NhbHQvIHNlcnZpemlvIGRpIGNoaWF2aS1zZWdyZXRlIGRpIFdvcmRQcmVzcy5vcmd9CiAqIMOIIHBvc3NpYmlsZSBjYW1iaWFyZSBxdWVzdGUgY2hpYXZpIGluIHF1YWxzaWFzaSBtb21lbnRvLCBwZXIgaW52YWxpZGFyZSB0dXR0aWkgY29va2llIGVzaXN0ZW50aS4gQ2nDsiBmb3J6ZXLDoCB0dXR0aSBnbGkgdXRlbnRpIGFkIGVmZmV0dHVhcmUgbnVvdmFtZW50ZSBpbCBsb2dpbi4KICoKICogQHNpbmNlIDIuNi4wCiAqLwpkZWZpbmUoJ0FVVEhfS0VZJywgICAgICAgICAncjBwVyhEQCojY151cHZJM0Y1cihVNj5vSzsrcD4hOF89RHlRSWFRRW05T2U9SD0rSkBqU3tXSDZyREd3OkwsOCcpOwpkZWZpbmUoJ1NFQ1VSRV9BVVRIX0tFWScsICAnI30gfHM0czxQJj1aPG9CYSZJcFc4RDsjbkBgXlpVLCFYPDBZW2