From cpetro at VERISIGN.com Fri Apr 8 23:37:44 2005 From: cpetro at VERISIGN.com (Petro, Christopher) Date: Fri, 8 Apr 2005 19:37:44 -0400 Subject: [cvsspam-devel] a few improvements Message-ID: <42B81EACB912434982BA0873DACC013003856D@PRO1WNEXCB02.vcorp.ad.vrsn.com> This is a multi-part message in MIME format. ------=_NextPart_000_0678_01C53C72.6F9521F0 Content-Type: multipart/mixed; boundary="----=_NextPart_001_0679_01C53C72.6F9521F0" ------=_NextPart_001_0679_01C53C72.6F9521F0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Thanks for the great software. I would have wasted quite a bit of time duplicating all of the effort you put into cvsspam if I hadn't found it. I made a few changes (I'd like to think of them as improvements, but I'll let you decide for yourself). First, I made it possible to use nil to unlimit $maxLinesPerDiff, in the same way that it works for $maxDiffLineLength. The default value is still 1000. It's probably not something useful in most environments, but we're using cvsspam internally and truncated diffs are more of a hassle than long emails. Second, I added a new way of including information about the committing user in the email. In our environment, we wanted to have the emails all come from a single email address (for filtering convenience) but still have the user who made the commit easily available. So I added a --user option which sets a $cvs_user variable which is independent of $from_address. If you also set $user_in_subject to true, then the user name is included at the beginning of the message subject. (It seems like it might be worth re-working the subject-creation code to let one use variables to configure exactly how the email subjects are formatted. Right now there are several conditional blocks that assemble the subject in pieces but there's no way to control the use of brackets or the order the pieces appear in.) Finally, I added a workaround for the not-much-documented CVS "feature" of checking out the "." module. If you check out ".", you get a copy of all modules in the repository. Some of our developers do this, and because of the way cvsspam parses the module name, we were getting emails with a subject of "[CVS .]"--not very helpful. I solved this by modifying the path-parsing regex to ignore an initial component of ".". I've attached a diff against 0.2.11. Let me know what you think. If there are some features you'd like to see implemented differently, I'll be happy to rework the code if we can get it added into the main tree. Also, I've never used ruby before, so I apologize in advance for any violations of strongly-held convictions about ruby code style or failures to take unexpected semantics of particular language features into account. :) ------=_NextPart_001_0679_01C53C72.6F9521F0 Content-Type: application/octet-stream; name="cvsspam.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="cvsspam.diff" --- ../cvsspam-0.2.11/cvsspam.rb 2004-12-09 18:51:22.000000000 -0500=0A= +++ cvsspam.rb 2005-04-08 19:20:22.000000000 -0400=0A= @@ -22,7 +22,7 @@=0A= =0A= =0A= $maxSubjectLength =3D 200=0A= -$maxLinesPerDiff =3D 1000=0A= +$maxLinesPerDiff =3D 1000 # may be set to nil for no limit=0A= $maxDiffLineLength =3D 1000 # may be set to nil for no limit=0A= $charset =3D nil # nil implies 'don't specify a charset'=0A= $mailSubject =3D ''=0A= @@ -314,8 +314,8 @@=0A= =0A= # gets the Repository object for the first component of the given path=0A= def Repository.get(name)=0A= - name =3D~ /^[^\/]+/=0A= - name =3D $&=0A= + name =3D~ /^(?:\.\/)?([^\/]+)/=0A= + name =3D $1=0A= rep =3D @@repositories[name]=0A= if rep.nil?=0A= rep =3D Repository.new(name)=0A= @@ -1020,7 +1020,7 @@=0A= else=0A= @stats.consume(line)=0A= if $file.wants_diff_in_mail?=0A= - if @stats.diffLines < $maxLinesPerDiff=0A= + if $maxLinesPerDiff && @stats.diffLines < $maxLinesPerDiff=0A= @colour.consume(line)=0A= elsif @stats.diffLines =3D=3D $maxLinesPerDiff=0A= @colour.consume(line)=0A= @@ -1037,7 +1037,7 @@=0A= $file.isBinary =3D true=0A= else=0A= if $file.wants_diff_in_mail?=0A= - if @stats.diffLines > $maxLinesPerDiff=0A= + if $maxLinesPerDiff && @stats.diffLines > $maxLinesPerDiff=0A= println("")=0A= println("[truncated at = #{$maxLinesPerDiff} lines; #{@stats.diffLines-$maxLinesPerDiff} more = skipped]")=0A= else=0A= @@ -1164,8 +1164,10 @@=0A= $choraURL =3D nil=0A= $cvswebURL =3D nil=0A= $from_address =3D nil=0A= +$cvs_user =3D nil=0A= $subjectPrefix =3D nil=0A= $files_in_subject =3D false;=0A= +$user_in_subject =3D false;=0A= $smtp_host =3D nil=0A= $repository_name =3D nil=0A= # 2MiB limit on attached diffs,=0A= @@ -1177,7 +1179,8 @@=0A= [ "--to", "-t", GetoptLong::REQUIRED_ARGUMENT ],=0A= [ "--config", "-c", GetoptLong::REQUIRED_ARGUMENT ],=0A= [ "--debug", "-d", GetoptLong::NO_ARGUMENT ],=0A= - [ "--from", "-u", GetoptLong::REQUIRED_ARGUMENT ]=0A= + [ "--from", "-u", GetoptLong::REQUIRED_ARGUMENT ],=0A= + [ "--user", "-U", GetoptLong::REQUIRED_ARGUMENT ]=0A= )=0A= =0A= opts.each do |opt, arg|=0A= @@ -1185,6 +1188,7 @@=0A= $config =3D arg if opt=3D=3D"--config"=0A= $debug =3D true if opt=3D=3D"--debug"=0A= $from_address =3D arg if opt=3D=3D"--from"=0A= + $cvs_user =3D arg if opt=3D=3D"--user"=0A= end=0A= =0A= =0A= @@ -1319,6 +1323,10 @@=0A= $mailSubject =3D all_files + ":" + $mailSubject=0A= end=0A= =0A= +if $user_in_subject && $cvs_user=0A= + $mailSubject =3D "[" + $cvs_user + "] " + $mailSubject=0A= +end=0A= +=0A= mailSubject =3D "#{$subjectPrefix} #{$mailSubject}"=0A= if mailSubject.length > $maxSubjectLength=0A= mailSubject =3D mailSubject[0, $maxSubjectLength]=0A= --- ../cvsspam-0.2.11/collect_diffs.rb 2004-12-09 18:51:22.000000000 = -0500=0A= +++ collect_diffs.rb 2005-04-08 18:52:30.000000000 -0400=0A= @@ -357,13 +357,14 @@=0A= [ "--to", "-t", GetoptLong::REQUIRED_ARGUMENT ],=0A= [ "--config", "-c", GetoptLong::REQUIRED_ARGUMENT ],=0A= [ "--debug", "-d", GetoptLong::NO_ARGUMENT ],=0A= - [ "--from", "-u", GetoptLong::REQUIRED_ARGUMENT ]=0A= + [ "--from", "-u", GetoptLong::REQUIRED_ARGUMENT ],=0A= + [ "--user", "-U", GetoptLong::REQUIRED_ARGUMENT ]=0A= )=0A= =0A= # arguments to pass though to 'cvsspam.rb'=0A= $passthroughArgs =3D Array.new=0A= opts.each do |opt, arg|=0A= - if ["--to", "--config", "--from"].include?(opt)=0A= + if ["--to", "--config", "--from", "--user"].include?(opt)=0A= $passthroughArgs << opt << arg=0A= end=0A= if ["--debug"].include?(opt)=0A= ------=_NextPart_001_0679_01C53C72.6F9521F0-- ------=_NextPart_000_0678_01C53C72.6F9521F0 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIOnzCCAwMw ggJsAhEAuS9gzIifoXpGCbhbcGyKrzANBgkqhkiG9w0BAQUFADCBwTELMAkGA1UEBhMCVVMxFzAV BgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENl cnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5l dHdvcmswHhcNOTgwNTE4MDAwMDAwWhcNMjgwODAxMjM1OTU5WjCBwTELMAkGA1UEBhMCVVMxFzAV BgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENl cnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5l dHdvcmswgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKeIASF0LOcaA/CY4Zc8DyEI8Zzbl+ma /MIEBhO+X1LIzB4sElYsuAFpLMyZH62wlq55BPITOcF7mLoILOjChBMsqmnpCfTHqQKkQsIjT0rY 8A6i+zFsyeZvmScH9eb0THiebetGhvq5hslU8rLEr9RGHFrJFTD/DWz1LQ5tzn93AgMBAAEwDQYJ KoZIhvcNAQEFBQADgYEAci75f9HxcfvEnvbFXlGKQJi4aPibHIPY4p29/+2h5mbqLwn0ytfqpSuV 9iRghk1ELoOlxC2g0654aW9y2myuCPBjkjfmu8QwF613zEk1qs/Yj9G+txiWR3NqVCI0ZC22FptZ W7RRWTqzCxT0Et9noPStMmResUZyJ4wSe8VEtK4wggOmMIIDD6ADAgECAhB1jYKLFwIGqnrNp5q9 I7AoMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIElu Yy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXpl ZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAeFw05OTAyMjUwMDAw MDBaFw0wOTAyMjQyMzU5NTlaMIGtMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMW VmVyaVNpZ24gVHJ1c3QgTmV0d29yazFJMEcGA1UECxNAVXNlIGlzIHN1YmplY3QgdG8gdGVybXMg YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYS1rciAoYyk5OTEmMCQGA1UEAxMdVmVyaVNp Z24gQ2xhc3MgMiBQZXJzb25uZWwgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKcEbA+i crdKBi741yksNJ2CvEiRSses+en8uVl4sVXAU1ixz28WO8FJ1cv0bszhzMu1xy5OiKo06bbQW3w+ FVc04Ri8/931r2dZIArlPeqIikDSmokTKam21dunfuHnNyST/ZR0TXrkMm1M6FwWl6/dktlmihRm 5OpaA6g9X/sLAgMBAAGjgbAwga0wEQYJYIZIAYb4QgEBBAQDAgEGMA8GA1UdEwQIMAYBAf8CAQEw CwYDVR0PBAQDAgEGMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHFwIwKjAoBggrBgEFBQcCARYcaHR0 cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTA0BgNVHR8ELTArMCmgJ6AlhiNodHRwOi8vY3JsLnZl cmlzaWduLmNvbS9wY2EyLWcyLmNybDANBgkqhkiG9w0BAQUFAAOBgQBSXraV2298pn4F9lSFO9ka ikVZX3zCZe75QN5UbseQEoAkPECjY+yFH/UeG4nKPY7jSy7fnBvujudUuVaT/tvRxET4y5xAnZKs xc4E8RFG7Ii8mMiMIX03nMxrvTSlk4y9nDkd6qecGs31R20scxNjaiEuWn2HfbxMvvLHA8KMtjCC A8AwggMpoAMCAQICEErIAANjYdQVAxbxhjabt80wDQYJKoZIhvcNAQEFBQAwga0xFzAVBgNVBAoT DlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMUkwRwYDVQQL E0BVc2UgaXMgc3ViamVjdCB0byB0ZXJtcyBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBh LWtyIChjKTk5MSYwJAYDVQQDEx1WZXJpU2lnbiBDbGFzcyAyIFBlcnNvbm5lbCBDQTAeFw05OTAy MjUwMDAwMDBaFw0wOTAyMjMyMzU5NTlaMIGsMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0G A1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazFJMEcGA1UECxNAVXNlIGlzIHN1YmplY3QgdG8g dGVybXMgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYS1rciAoYyk5OTElMCMGA1UEAxMc VmVyaVNpZ24gQ2xhc3MgMiBFbXBsb3llZSBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA wIrRh2Gi6jADVWsINvCX+hpUNSQf6H2dyMNz09hG9ZEt2TjtlNewJnMq3pdQTf8iHL1wAJgMWCqx pHKPpbn3LXxg47Xf6X1OISFh1fw7VMmkCZy7IvmiunBhT4ZGov0FZOwKP6ZYdle7FnNEfPClDZfA bKbxYwglsQQXlaCN/n8CAwEAAaOB3zCB3DApBgNVHREEIjAgpB4wHDEaMBgGA1UEAxMRUHJpdmF0 ZUxhYmVsMS0xMTgwEQYJYIZIAYb4QgEBBAQDAgEGMA8GA1UdEwQIMAYBAf8CAQAwCwYDVR0PBAQD AgEGMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHFwIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cu dmVyaXNpZ24uY29tL3JwYTA4BgNVHR8EMTAvMC2gK6AphidodHRwOi8vY3JsLnZlcmlzaWduLmNv bS9WU0NsYXNzMkludC5jcmwwDQYJKoZIhvcNAQEFBQADgYEANhj9M2DWF9MEtdhUX1Ia5ZIIKPSi QNrDW4wahpfvrqIV/mzEzi/IAcozvvJ5WDOXl5JFcFpOKB3d98GIThuHVwI9kyXZfk5yNYlJF7O5 dy9tDvmkiCXBznZzZWkFk3fn/ZOWGDhNWGx6nejSm+jQ24n9ScJ1BAOXpdSWgdgjQfAwggQmMIID j6ADAgECAhBMPDddQ/iAVwQzQwYCuexqMA0GCSqGSIb3DQEBBAUAMIGsMRcwFQYDVQQKEw5WZXJp U2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazFJMEcGA1UECxNAVXNl IGlzIHN1YmplY3QgdG8gdGVybXMgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYS1rciAo Yyk5OTElMCMGA1UEAxMcVmVyaVNpZ24gQ2xhc3MgMiBFbXBsb3llZSBDQTAeFw0wNTAzMjUwMDAw MDBaFw0wNjAzMjUyMzU5NTlaMHoxETAPBgNVBAoTCFZFUklTSUdOMRAwDgYDVQQLEwdWUy1QUk8x MRMwEQYDVQQDEwpSZWNpcGllbnRzMT4wPAYDVQQDEzVDaHJpc3RvcGhlci5QZXRybyAoUGV0cm8g Q2hyaXN0b3BoZXIsIFZlcmlTaWduLCBJbmMuKTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA rJFxaGFhNpUagIqCDg3yzkA+sZmsSBhUJjUj9EwNMUxmTD1jdvQfNUJvMlhMxQG5ET/L2BjHNr5m iL2tyb4OiZMQHJcRyTFBi1bMaUMnlwS4Sh22fBERUVOGqlANy0KVDFux5DrlApeaNs3vzVCJfUZi PYuqU7Hb4inb0nSXHS8CAwEAAaOCAXgwggF0MAkGA1UdEwQCMAAwWQYDVR0fBFIwUDBOoEygSoZI aHR0cDovL29uc2l0ZWNybC52ZXJpc2lnbi5jb20vVmVyaVNpZ25JbmNFeGNoYW5nZUVtcGxveWVl cy9MYXRlc3RDUkwuY3JsMAsGA1UdDwQEAwIFoDAeBgNVHREEFzAVgRNjcGV0cm9AdmVyaXNpZ24u Y29tMIGsBgNVHSAEgaQwgaEwgZ4GC2CGSAGG+EUBBwEBMIGOMCgGCCsGAQUFBwIBFhxodHRwczov L3d3dy52ZXJpc2lnbi5jb20vQ1BTMGIGCCsGAQUFBwICMFYwFRYOVmVyaVNpZ24sIEluYy4wAwIB ARo9VmVyaVNpZ24ncyBDUFMgaW5jb3JwLiBieSByZWZlcmVuY2UgbGlhYi4gbHRkLiAoYyk5NyBW ZXJpU2lnbjARBglghkgBhvhCAQEEBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMC MA0GCSqGSIb3DQEBBAUAA4GBADJMqZGwc5AWX+Sk1jviMpDjZ6YB2iWX2AVBwqW4QCesc+w6GDFS QfT6auY+njrdt/1+NlrEFRqt0Pbk0NvsigCI+ioK2ExretubKCXMYVAMgN6PD24RruBXf37eH9qE uJbx9d7Ws1tU/PZc/e8a7tKS0kYxYGHBTqrqWWN1vbcpMYID3jCCA9oCAQEwgcEwgawxFzAVBgNV BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMUkwRwYD VQQLE0BVc2UgaXMgc3ViamVjdCB0byB0ZXJtcyBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20v cnBhLWtyIChjKTk5MSUwIwYDVQQDExxWZXJpU2lnbiBDbGFzcyAyIEVtcGxveWVlIENBAhBMPDdd Q/iAVwQzQwYCuexqMAkGBSsOAwIaBQCgggJyMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJ KoZIhvcNAQkFMQ8XDTA1MDQwODIzMzc0NFowIwYJKoZIhvcNAQkEMRYEFNNvt2ldHFWGg8paGdeZ BrQ2+QkAMGcGCSqGSIb3DQEJDzFaMFgwCgYIKoZIhvcNAwcwBwYFKw4DAhowDgYIKoZIhvcNAwIC AgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMAoGCCqGSIb3DQIFMIHS BgkrBgEEAYI3EAQxgcQwgcEwgawxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMUkwRwYDVQQLE0BVc2UgaXMgc3ViamVjdCB0byB0ZXJtcyBh dCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhLWtyIChjKTk5MSUwIwYDVQQDExxWZXJpU2ln biBDbGFzcyAyIEVtcGxveWVlIENBAhBMPDddQ/iAVwQzQwYCuexqMIHUBgsqhkiG9w0BCRACCzGB xKCBwTCBrDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 IE5ldHdvcmsxSTBHBgNVBAsTQFVzZSBpcyBzdWJqZWN0IHRvIHRlcm1zIGF0IGh0dHBzOi8vd3d3 LnZlcmlzaWduLmNvbS9ycGEta3IgKGMpOTkxJTAjBgNVBAMTHFZlcmlTaWduIENsYXNzIDIgRW1w bG95ZWUgQ0ECEEw8N11D+IBXBDNDBgK57GowDQYJKoZIhvcNAQEBBQAEgYCmaqFKJ5d6/iSsTGhX P9p/WM+ZzQYnv6e1+uN6BNaBQQX2h91SzOFQTCxZYxJvHf0jD0yQvaPf6xTpdnh88Q6OKxaXfA1j 19l2nWuyPOZ9kA8kkBd1KTtrwc7T58iheaSa6ANRw/W7C0C510WTFECf3Iu7bCHHMmQyVVr861oG MgAAAAAAAA== ------=_NextPart_000_0678_01C53C72.6F9521F0-- From cpetro at verisign.com Fri Apr 8 23:52:59 2005 From: cpetro at verisign.com (Petro, Christopher) Date: Fri, 8 Apr 2005 19:52:59 -0400 Subject: [cvsspam-devel] a few improvements Message-ID: <42B81EACB912434982BA0873DACC013003856E@PRO1WNEXCB02.vcorp.ad.vrsn.com> This is a multi-part message in MIME format. ------=_NextPart_000_06A7_01C53C74.90CE76D0 Content-Type: multipart/mixed; boundary="----=_NextPart_001_06A8_01C53C74.90CE76D0" ------=_NextPart_001_06A8_01C53C74.90CE76D0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit > I've attached a diff against 0.2.11. Let me know what you think. Oops. The diff I just sent was against an old version and had a bug. There was an inverted condition that caused it to discard all diff bodies when maxLinesPerDiff was set to nil. This is a clean diff against 0.2.11 with the fix. ------=_NextPart_001_06A8_01C53C74.90CE76D0 Content-Type: application/octet-stream; name="cvsspam.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="cvsspam.diff" --- ../cvsspam-0.2.11/cvsspam.rb 2004-12-09 18:51:22.000000000 -0500=0A= +++ cvsspam.rb 2005-04-08 19:47:06.000000000 -0400=0A= @@ -22,7 +22,7 @@=0A= =0A= =0A= $maxSubjectLength =3D 200=0A= -$maxLinesPerDiff =3D 1000=0A= +$maxLinesPerDiff =3D 1000 # may be set to nil for no limit=0A= $maxDiffLineLength =3D 1000 # may be set to nil for no limit=0A= $charset =3D nil # nil implies 'don't specify a charset'=0A= $mailSubject =3D ''=0A= @@ -314,8 +314,8 @@=0A= =0A= # gets the Repository object for the first component of the given path=0A= def Repository.get(name)=0A= - name =3D~ /^[^\/]+/=0A= - name =3D $&=0A= + name =3D~ /^(?:\.\/)?([^\/]+)/=0A= + name =3D $1=0A= rep =3D @@repositories[name]=0A= if rep.nil?=0A= rep =3D Repository.new(name)=0A= @@ -1020,7 +1020,7 @@=0A= else=0A= @stats.consume(line)=0A= if $file.wants_diff_in_mail?=0A= - if @stats.diffLines < $maxLinesPerDiff=0A= + if $maxLinesPerDiff =3D=3D nil || @stats.diffLines < = $maxLinesPerDiff=0A= @colour.consume(line)=0A= elsif @stats.diffLines =3D=3D $maxLinesPerDiff=0A= @colour.consume(line)=0A= @@ -1037,7 +1037,7 @@=0A= $file.isBinary =3D true=0A= else=0A= if $file.wants_diff_in_mail?=0A= - if @stats.diffLines > $maxLinesPerDiff=0A= + if $maxLinesPerDiff && @stats.diffLines > $maxLinesPerDiff=0A= println("")=0A= println("[truncated at = #{$maxLinesPerDiff} lines; #{@stats.diffLines-$maxLinesPerDiff} more = skipped]")=0A= else=0A= @@ -1164,8 +1164,10 @@=0A= $choraURL =3D nil=0A= $cvswebURL =3D nil=0A= $from_address =3D nil=0A= +$cvs_user =3D nil=0A= $subjectPrefix =3D nil=0A= $files_in_subject =3D false;=0A= +$user_in_subject =3D false;=0A= $smtp_host =3D nil=0A= $repository_name =3D nil=0A= # 2MiB limit on attached diffs,=0A= @@ -1177,7 +1179,8 @@=0A= [ "--to", "-t", GetoptLong::REQUIRED_ARGUMENT ],=0A= [ "--config", "-c", GetoptLong::REQUIRED_ARGUMENT ],=0A= [ "--debug", "-d", GetoptLong::NO_ARGUMENT ],=0A= - [ "--from", "-u", GetoptLong::REQUIRED_ARGUMENT ]=0A= + [ "--from", "-u", GetoptLong::REQUIRED_ARGUMENT ],=0A= + [ "--user", "-U", GetoptLong::REQUIRED_ARGUMENT ]=0A= )=0A= =0A= opts.each do |opt, arg|=0A= @@ -1185,6 +1188,7 @@=0A= $config =3D arg if opt=3D=3D"--config"=0A= $debug =3D true if opt=3D=3D"--debug"=0A= $from_address =3D arg if opt=3D=3D"--from"=0A= + $cvs_user =3D arg if opt=3D=3D"--user"=0A= end=0A= =0A= =0A= @@ -1319,6 +1323,10 @@=0A= $mailSubject =3D all_files + ":" + $mailSubject=0A= end=0A= =0A= +if $user_in_subject && $cvs_user=0A= + $mailSubject =3D "[" + $cvs_user + "] " + $mailSubject=0A= +end=0A= +=0A= mailSubject =3D "#{$subjectPrefix} #{$mailSubject}"=0A= if mailSubject.length > $maxSubjectLength=0A= mailSubject =3D mailSubject[0, $maxSubjectLength]=0A= --- ../cvsspam-0.2.11/collect_diffs.rb 2004-12-09 18:51:22.000000000 = -0500=0A= +++ collect_diffs.rb 2005-04-08 18:52:30.000000000 -0400=0A= @@ -357,13 +357,14 @@=0A= [ "--to", "-t", GetoptLong::REQUIRED_ARGUMENT ],=0A= [ "--config", "-c", GetoptLong::REQUIRED_ARGUMENT ],=0A= [ "--debug", "-d", GetoptLong::NO_ARGUMENT ],=0A= - [ "--from", "-u", GetoptLong::REQUIRED_ARGUMENT ]=0A= + [ "--from", "-u", GetoptLong::REQUIRED_ARGUMENT ],=0A= + [ "--user", "-U", GetoptLong::REQUIRED_ARGUMENT ]=0A= )=0A= =0A= # arguments to pass though to 'cvsspam.rb'=0A= $passthroughArgs =3D Array.new=0A= opts.each do |opt, arg|=0A= - if ["--to", "--config", "--from"].include?(opt)=0A= + if ["--to", "--config", "--from", "--user"].include?(opt)=0A= $passthroughArgs << opt << arg=0A= end=0A= if ["--debug"].include?(opt)=0A= ------=_NextPart_001_06A8_01C53C74.90CE76D0-- ------=_NextPart_000_06A7_01C53C74.90CE76D0 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIOnzCCAwMw ggJsAhEAuS9gzIifoXpGCbhbcGyKrzANBgkqhkiG9w0BAQUFADCBwTELMAkGA1UEBhMCVVMxFzAV BgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENl cnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5l dHdvcmswHhcNOTgwNTE4MDAwMDAwWhcNMjgwODAxMjM1OTU5WjCBwTELMAkGA1UEBhMCVVMxFzAV BgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENl cnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5l dHdvcmswgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKeIASF0LOcaA/CY4Zc8DyEI8Zzbl+ma /MIEBhO+X1LIzB4sElYsuAFpLMyZH62wlq55BPITOcF7mLoILOjChBMsqmnpCfTHqQKkQsIjT0rY 8A6i+zFsyeZvmScH9eb0THiebetGhvq5hslU8rLEr9RGHFrJFTD/DWz1LQ5tzn93AgMBAAEwDQYJ KoZIhvcNAQEFBQADgYEAci75f9HxcfvEnvbFXlGKQJi4aPibHIPY4p29/+2h5mbqLwn0ytfqpSuV 9iRghk1ELoOlxC2g0654aW9y2myuCPBjkjfmu8QwF613zEk1qs/Yj9G+txiWR3NqVCI0ZC22FptZ W7RRWTqzCxT0Et9noPStMmResUZyJ4wSe8VEtK4wggOmMIIDD6ADAgECAhB1jYKLFwIGqnrNp5q9 I7AoMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIElu Yy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXpl ZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAeFw05OTAyMjUwMDAw MDBaFw0wOTAyMjQyMzU5NTlaMIGtMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMW VmVyaVNpZ24gVHJ1c3QgTmV0d29yazFJMEcGA1UECxNAVXNlIGlzIHN1YmplY3QgdG8gdGVybXMg YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYS1rciAoYyk5OTEmMCQGA1UEAxMdVmVyaVNp Z24gQ2xhc3MgMiBQZXJzb25uZWwgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKcEbA+i crdKBi741yksNJ2CvEiRSses+en8uVl4sVXAU1ixz28WO8FJ1cv0bszhzMu1xy5OiKo06bbQW3w+ FVc04Ri8/931r2dZIArlPeqIikDSmokTKam21dunfuHnNyST/ZR0TXrkMm1M6FwWl6/dktlmihRm 5OpaA6g9X/sLAgMBAAGjgbAwga0wEQYJYIZIAYb4QgEBBAQDAgEGMA8GA1UdEwQIMAYBAf8CAQEw CwYDVR0PBAQDAgEGMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHFwIwKjAoBggrBgEFBQcCARYcaHR0 cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTA0BgNVHR8ELTArMCmgJ6AlhiNodHRwOi8vY3JsLnZl cmlzaWduLmNvbS9wY2EyLWcyLmNybDANBgkqhkiG9w0BAQUFAAOBgQBSXraV2298pn4F9lSFO9ka ikVZX3zCZe75QN5UbseQEoAkPECjY+yFH/UeG4nKPY7jSy7fnBvujudUuVaT/tvRxET4y5xAnZKs xc4E8RFG7Ii8mMiMIX03nMxrvTSlk4y9nDkd6qecGs31R20scxNjaiEuWn2HfbxMvvLHA8KMtjCC A8AwggMpoAMCAQICEErIAANjYdQVAxbxhjabt80wDQYJKoZIhvcNAQEFBQAwga0xFzAVBgNVBAoT DlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMUkwRwYDVQQL E0BVc2UgaXMgc3ViamVjdCB0byB0ZXJtcyBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBh LWtyIChjKTk5MSYwJAYDVQQDEx1WZXJpU2lnbiBDbGFzcyAyIFBlcnNvbm5lbCBDQTAeFw05OTAy MjUwMDAwMDBaFw0wOTAyMjMyMzU5NTlaMIGsMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0G A1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazFJMEcGA1UECxNAVXNlIGlzIHN1YmplY3QgdG8g dGVybXMgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYS1rciAoYyk5OTElMCMGA1UEAxMc VmVyaVNpZ24gQ2xhc3MgMiBFbXBsb3llZSBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA wIrRh2Gi6jADVWsINvCX+hpUNSQf6H2dyMNz09hG9ZEt2TjtlNewJnMq3pdQTf8iHL1wAJgMWCqx pHKPpbn3LXxg47Xf6X1OISFh1fw7VMmkCZy7IvmiunBhT4ZGov0FZOwKP6ZYdle7FnNEfPClDZfA bKbxYwglsQQXlaCN/n8CAwEAAaOB3zCB3DApBgNVHREEIjAgpB4wHDEaMBgGA1UEAxMRUHJpdmF0 ZUxhYmVsMS0xMTgwEQYJYIZIAYb4QgEBBAQDAgEGMA8GA1UdEwQIMAYBAf8CAQAwCwYDVR0PBAQD AgEGMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHFwIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cu dmVyaXNpZ24uY29tL3JwYTA4BgNVHR8EMTAvMC2gK6AphidodHRwOi8vY3JsLnZlcmlzaWduLmNv bS9WU0NsYXNzMkludC5jcmwwDQYJKoZIhvcNAQEFBQADgYEANhj9M2DWF9MEtdhUX1Ia5ZIIKPSi QNrDW4wahpfvrqIV/mzEzi/IAcozvvJ5WDOXl5JFcFpOKB3d98GIThuHVwI9kyXZfk5yNYlJF7O5 dy9tDvmkiCXBznZzZWkFk3fn/ZOWGDhNWGx6nejSm+jQ24n9ScJ1BAOXpdSWgdgjQfAwggQmMIID j6ADAgECAhBMPDddQ/iAVwQzQwYCuexqMA0GCSqGSIb3DQEBBAUAMIGsMRcwFQYDVQQKEw5WZXJp U2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazFJMEcGA1UECxNAVXNl IGlzIHN1YmplY3QgdG8gdGVybXMgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYS1rciAo Yyk5OTElMCMGA1UEAxMcVmVyaVNpZ24gQ2xhc3MgMiBFbXBsb3llZSBDQTAeFw0wNTAzMjUwMDAw MDBaFw0wNjAzMjUyMzU5NTlaMHoxETAPBgNVBAoTCFZFUklTSUdOMRAwDgYDVQQLEwdWUy1QUk8x MRMwEQYDVQQDEwpSZWNpcGllbnRzMT4wPAYDVQQDEzVDaHJpc3RvcGhlci5QZXRybyAoUGV0cm8g Q2hyaXN0b3BoZXIsIFZlcmlTaWduLCBJbmMuKTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA rJFxaGFhNpUagIqCDg3yzkA+sZmsSBhUJjUj9EwNMUxmTD1jdvQfNUJvMlhMxQG5ET/L2BjHNr5m iL2tyb4OiZMQHJcRyTFBi1bMaUMnlwS4Sh22fBERUVOGqlANy0KVDFux5DrlApeaNs3vzVCJfUZi PYuqU7Hb4inb0nSXHS8CAwEAAaOCAXgwggF0MAkGA1UdEwQCMAAwWQYDVR0fBFIwUDBOoEygSoZI aHR0cDovL29uc2l0ZWNybC52ZXJpc2lnbi5jb20vVmVyaVNpZ25JbmNFeGNoYW5nZUVtcGxveWVl cy9MYXRlc3RDUkwuY3JsMAsGA1UdDwQEAwIFoDAeBgNVHREEFzAVgRNjcGV0cm9AdmVyaXNpZ24u Y29tMIGsBgNVHSAEgaQwgaEwgZ4GC2CGSAGG+EUBBwEBMIGOMCgGCCsGAQUFBwIBFhxodHRwczov L3d3dy52ZXJpc2lnbi5jb20vQ1BTMGIGCCsGAQUFBwICMFYwFRYOVmVyaVNpZ24sIEluYy4wAwIB ARo9VmVyaVNpZ24ncyBDUFMgaW5jb3JwLiBieSByZWZlcmVuY2UgbGlhYi4gbHRkLiAoYyk5NyBW ZXJpU2lnbjARBglghkgBhvhCAQEEBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMC MA0GCSqGSIb3DQEBBAUAA4GBADJMqZGwc5AWX+Sk1jviMpDjZ6YB2iWX2AVBwqW4QCesc+w6GDFS QfT6auY+njrdt/1+NlrEFRqt0Pbk0NvsigCI+ioK2ExretubKCXMYVAMgN6PD24RruBXf37eH9qE uJbx9d7Ws1tU/PZc/e8a7tKS0kYxYGHBTqrqWWN1vbcpMYID3jCCA9oCAQEwgcEwgawxFzAVBgNV BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMUkwRwYD VQQLE0BVc2UgaXMgc3ViamVjdCB0byB0ZXJtcyBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20v cnBhLWtyIChjKTk5MSUwIwYDVQQDExxWZXJpU2lnbiBDbGFzcyAyIEVtcGxveWVlIENBAhBMPDdd Q/iAVwQzQwYCuexqMAkGBSsOAwIaBQCgggJyMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJ KoZIhvcNAQkFMQ8XDTA1MDQwODIzNTI1OVowIwYJKoZIhvcNAQkEMRYEFMDVFn3IW0YF0/KCZNB4 G5qjoyRtMGcGCSqGSIb3DQEJDzFaMFgwCgYIKoZIhvcNAwcwBwYFKw4DAhowDgYIKoZIhvcNAwIC AgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMAoGCCqGSIb3DQIFMIHS BgkrBgEEAYI3EAQxgcQwgcEwgawxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMUkwRwYDVQQLE0BVc2UgaXMgc3ViamVjdCB0byB0ZXJtcyBh dCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhLWtyIChjKTk5MSUwIwYDVQQDExxWZXJpU2ln biBDbGFzcyAyIEVtcGxveWVlIENBAhBMPDddQ/iAVwQzQwYCuexqMIHUBgsqhkiG9w0BCRACCzGB xKCBwTCBrDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 IE5ldHdvcmsxSTBHBgNVBAsTQFVzZSBpcyBzdWJqZWN0IHRvIHRlcm1zIGF0IGh0dHBzOi8vd3d3 LnZlcmlzaWduLmNvbS9ycGEta3IgKGMpOTkxJTAjBgNVBAMTHFZlcmlTaWduIENsYXNzIDIgRW1w bG95ZWUgQ0ECEEw8N11D+IBXBDNDBgK57GowDQYJKoZIhvcNAQEBBQAEgYBvbHu+SHEQsO9qNV6R V2m0IxKkJqXiDuCgfs4AbiDb+YoHDq1v6yWpYxs7N0fA12E344ecfYZO1+A3JIDoSBbAzKQvYLdi XBGaG19G5E6FC+fGZCCh8Xr2L1EV+XTJ45LKxhr1QMdHJpmle22jUuGDxb6Rs6qT7NToPawOImwb KgAAAAAAAA== ------=_NextPart_000_06A7_01C53C74.90CE76D0-- From dave at badgers-in-foil.co.uk Sun Apr 10 00:15:27 2005 From: dave at badgers-in-foil.co.uk (David Holroyd) Date: Sun, 10 Apr 2005 00:15:27 +0000 Subject: [cvsspam-devel] a few improvements In-Reply-To: <42B81EACB912434982BA0873DACC013003856D@PRO1WNEXCB02.vcorp.ad.vrsn.com> References: <42B81EACB912434982BA0873DACC013003856D@PRO1WNEXCB02.vcorp.ad.vrsn.com> Message-ID: <20050410001526.GD15175@vhost.badgers-in-foil.co.uk> On Fri, Apr 08, 2005 at 07:37:44PM -0400, Petro, Christopher wrote: > Thanks for the great software. I would have wasted quite a bit of time > duplicating all of the effort you put into cvsspam if I hadn't found it. Well, thanks for getting in touch! > First, I made it possible to use nil to unlimit $maxLinesPerDiff, in the > same way that it works for $maxDiffLineLength. The default value is still > 1000. It's probably not something useful in most environments, but we're > using cvsspam internally and truncated diffs are more of a hassle than > long emails. I've added that in. Note that it might still be resonable to put some (larger) limit in there -- maybe after 1,000,000 lines you'll be bored of reading? I implemented this feature because sometimes 'diff' is fooled into outputting changes to files that, by rights, should be treated as binary. Of course, maybe a 100Mb .hqx file shouldn't have been added to the repository in the first place :S > Second, I added a new way of including information about the committing > user in the email. In our environment, we wanted to have the emails all > come from a single email address (for filtering convenience) but still > have the user who made the commit easily available. So I added a --user > option which sets a $cvs_user variable which is independent of > $from_address. If you also set $user_in_subject to true, then the user > name is included at the beginning of the message subject. This is not a bad feature per se, but, - I want to avoid the complexity of extra options unless there really is no sensible default. - The committer appearing as the sender of the email is such a great 'fit'. It seems it will obviously be the right thing for most people. - You say you don't want that "for filtering convenience", but couldn't you filter CVSspams based on Subject (starts with '[CVS '), or some other header (the existing 'X-Mailer: CVSspam ...', or another abritrary pair given with cvsspam.conf's 'addHeader' directive)? Can you really only filter based on From header? > (It seems like it might be worth re-working the subject-creation code to > let one use variables to configure exactly how the email subjects are > formatted. Right now there are several conditional blocks that assemble > the subject in pieces but there's no way to control the use of brackets or > the order the pieces appear in.) Yeah, you're right. I've made a note of that in the TODO list. > Finally, I added a workaround for the not-much-documented CVS "feature" of > checking out the "." module. If you check out ".", you get a copy of all > modules in the repository. Some of our developers do this, and because of > the way cvsspam parses the module name, we were getting emails with a > subject of "[CVS .]"--not very helpful. I solved this by modifying the > path-parsing regex to ignore an initial component of ".". Hmmm, a new trick. I've added your suggested change to the regex. > I've attached a diff against 0.2.11. Let me know what you think. [I _did_ look instead at the diff in your follow-up.] I made a few little tweaks before applying the first and third of your changes, not least because the code has other alterations, post 0.2.11. Many thanks for your suggestions, and the patch! Most of this will be in the next release. dave -- http://david.holroyd.me.uk/ From cpetro at verisign.com Sun Apr 10 13:47:17 2005 From: cpetro at verisign.com (Petro, Christopher) Date: Sun, 10 Apr 2005 09:47:17 -0400 Subject: [cvsspam-devel] a few improvements Message-ID: <42B81EACB912434982BA0873DACC0130038575@PRO1WNEXCB02.vcorp.ad.vrsn.com> This is a multi-part message in MIME format. ------=_NextPart_000_0737_01C53DB2.4781D050 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit > I've added that in. Note that it might still be resonable to put some > (larger) limit in there -- maybe after 1,000,000 lines you'll be bored > of reading? Point taken. I should probably just make the limit absurdly large. > - The committer appearing as the sender of the email is such a great > 'fit'. It seems it will obviously be the right thing for most > people. I really like it that way. With the users map in CVSROOT it worked great. > - You say you don't want that "for filtering convenience", but > couldn't > you filter CVSspams based on Subject (starts with '[CVS '), or some > other header (the existing 'X-Mailer: CVSspam ...', or another > abritrary pair given with cvsspam.conf's 'addHeader' directive)? > > Can you really only filter based on From header? Outlook lets you filter by substrings, but I've yet to find any way of anchoring the substring to the beginning of the subject. One of the biggest complaints I got from users was that they wanted to send notifications to a separate folder but have questions about diffs (which would appear as "RE: [CVS..." show up in their inbox. Without being able to anchor a substring at the start of the subject, there's no way to differentiate. Obviously, the problem is that the email client is terrible, but it's also fairly common. > Many thanks for your suggestions, and the patch! Most of this will be > in the next release. Thanks. ------=_NextPart_000_0737_01C53DB2.4781D050 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIOnzCCAwMw ggJsAhEAuS9gzIifoXpGCbhbcGyKrzANBgkqhkiG9w0BAQUFADCBwTELMAkGA1UEBhMCVVMxFzAV BgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENl cnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5l dHdvcmswHhcNOTgwNTE4MDAwMDAwWhcNMjgwODAxMjM1OTU5WjCBwTELMAkGA1UEBhMCVVMxFzAV BgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENl cnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5l dHdvcmswgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKeIASF0LOcaA/CY4Zc8DyEI8Zzbl+ma /MIEBhO+X1LIzB4sElYsuAFpLMyZH62wlq55BPITOcF7mLoILOjChBMsqmnpCfTHqQKkQsIjT0rY 8A6i+zFsyeZvmScH9eb0THiebetGhvq5hslU8rLEr9RGHFrJFTD/DWz1LQ5tzn93AgMBAAEwDQYJ KoZIhvcNAQEFBQADgYEAci75f9HxcfvEnvbFXlGKQJi4aPibHIPY4p29/+2h5mbqLwn0ytfqpSuV 9iRghk1ELoOlxC2g0654aW9y2myuCPBjkjfmu8QwF613zEk1qs/Yj9G+txiWR3NqVCI0ZC22FptZ W7RRWTqzCxT0Et9noPStMmResUZyJ4wSe8VEtK4wggOmMIIDD6ADAgECAhB1jYKLFwIGqnrNp5q9 I7AoMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIElu Yy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXpl ZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAeFw05OTAyMjUwMDAw MDBaFw0wOTAyMjQyMzU5NTlaMIGtMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMW VmVyaVNpZ24gVHJ1c3QgTmV0d29yazFJMEcGA1UECxNAVXNlIGlzIHN1YmplY3QgdG8gdGVybXMg YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYS1rciAoYyk5OTEmMCQGA1UEAxMdVmVyaVNp Z24gQ2xhc3MgMiBQZXJzb25uZWwgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKcEbA+i crdKBi741yksNJ2CvEiRSses+en8uVl4sVXAU1ixz28WO8FJ1cv0bszhzMu1xy5OiKo06bbQW3w+ FVc04Ri8/931r2dZIArlPeqIikDSmokTKam21dunfuHnNyST/ZR0TXrkMm1M6FwWl6/dktlmihRm 5OpaA6g9X/sLAgMBAAGjgbAwga0wEQYJYIZIAYb4QgEBBAQDAgEGMA8GA1UdEwQIMAYBAf8CAQEw CwYDVR0PBAQDAgEGMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHFwIwKjAoBggrBgEFBQcCARYcaHR0 cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTA0BgNVHR8ELTArMCmgJ6AlhiNodHRwOi8vY3JsLnZl cmlzaWduLmNvbS9wY2EyLWcyLmNybDANBgkqhkiG9w0BAQUFAAOBgQBSXraV2298pn4F9lSFO9ka ikVZX3zCZe75QN5UbseQEoAkPECjY+yFH/UeG4nKPY7jSy7fnBvujudUuVaT/tvRxET4y5xAnZKs xc4E8RFG7Ii8mMiMIX03nMxrvTSlk4y9nDkd6qecGs31R20scxNjaiEuWn2HfbxMvvLHA8KMtjCC A8AwggMpoAMCAQICEErIAANjYdQVAxbxhjabt80wDQYJKoZIhvcNAQEFBQAwga0xFzAVBgNVBAoT DlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMUkwRwYDVQQL E0BVc2UgaXMgc3ViamVjdCB0byB0ZXJtcyBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBh LWtyIChjKTk5MSYwJAYDVQQDEx1WZXJpU2lnbiBDbGFzcyAyIFBlcnNvbm5lbCBDQTAeFw05OTAy MjUwMDAwMDBaFw0wOTAyMjMyMzU5NTlaMIGsMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0G A1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazFJMEcGA1UECxNAVXNlIGlzIHN1YmplY3QgdG8g dGVybXMgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYS1rciAoYyk5OTElMCMGA1UEAxMc VmVyaVNpZ24gQ2xhc3MgMiBFbXBsb3llZSBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA wIrRh2Gi6jADVWsINvCX+hpUNSQf6H2dyMNz09hG9ZEt2TjtlNewJnMq3pdQTf8iHL1wAJgMWCqx pHKPpbn3LXxg47Xf6X1OISFh1fw7VMmkCZy7IvmiunBhT4ZGov0FZOwKP6ZYdle7FnNEfPClDZfA bKbxYwglsQQXlaCN/n8CAwEAAaOB3zCB3DApBgNVHREEIjAgpB4wHDEaMBgGA1UEAxMRUHJpdmF0 ZUxhYmVsMS0xMTgwEQYJYIZIAYb4QgEBBAQDAgEGMA8GA1UdEwQIMAYBAf8CAQAwCwYDVR0PBAQD AgEGMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHFwIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cu dmVyaXNpZ24uY29tL3JwYTA4BgNVHR8EMTAvMC2gK6AphidodHRwOi8vY3JsLnZlcmlzaWduLmNv bS9WU0NsYXNzMkludC5jcmwwDQYJKoZIhvcNAQEFBQADgYEANhj9M2DWF9MEtdhUX1Ia5ZIIKPSi QNrDW4wahpfvrqIV/mzEzi/IAcozvvJ5WDOXl5JFcFpOKB3d98GIThuHVwI9kyXZfk5yNYlJF7O5 dy9tDvmkiCXBznZzZWkFk3fn/ZOWGDhNWGx6nejSm+jQ24n9ScJ1BAOXpdSWgdgjQfAwggQmMIID j6ADAgECAhBMPDddQ/iAVwQzQwYCuexqMA0GCSqGSIb3DQEBBAUAMIGsMRcwFQYDVQQKEw5WZXJp U2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazFJMEcGA1UECxNAVXNl IGlzIHN1YmplY3QgdG8gdGVybXMgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYS1rciAo Yyk5OTElMCMGA1UEAxMcVmVyaVNpZ24gQ2xhc3MgMiBFbXBsb3llZSBDQTAeFw0wNTAzMjUwMDAw MDBaFw0wNjAzMjUyMzU5NTlaMHoxETAPBgNVBAoTCFZFUklTSUdOMRAwDgYDVQQLEwdWUy1QUk8x MRMwEQYDVQQDEwpSZWNpcGllbnRzMT4wPAYDVQQDEzVDaHJpc3RvcGhlci5QZXRybyAoUGV0cm8g Q2hyaXN0b3BoZXIsIFZlcmlTaWduLCBJbmMuKTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA rJFxaGFhNpUagIqCDg3yzkA+sZmsSBhUJjUj9EwNMUxmTD1jdvQfNUJvMlhMxQG5ET/L2BjHNr5m iL2tyb4OiZMQHJcRyTFBi1bMaUMnlwS4Sh22fBERUVOGqlANy0KVDFux5DrlApeaNs3vzVCJfUZi PYuqU7Hb4inb0nSXHS8CAwEAAaOCAXgwggF0MAkGA1UdEwQCMAAwWQYDVR0fBFIwUDBOoEygSoZI aHR0cDovL29uc2l0ZWNybC52ZXJpc2lnbi5jb20vVmVyaVNpZ25JbmNFeGNoYW5nZUVtcGxveWVl cy9MYXRlc3RDUkwuY3JsMAsGA1UdDwQEAwIFoDAeBgNVHREEFzAVgRNjcGV0cm9AdmVyaXNpZ24u Y29tMIGsBgNVHSAEgaQwgaEwgZ4GC2CGSAGG+EUBBwEBMIGOMCgGCCsGAQUFBwIBFhxodHRwczov L3d3dy52ZXJpc2lnbi5jb20vQ1BTMGIGCCsGAQUFBwICMFYwFRYOVmVyaVNpZ24sIEluYy4wAwIB ARo9VmVyaVNpZ24ncyBDUFMgaW5jb3JwLiBieSByZWZlcmVuY2UgbGlhYi4gbHRkLiAoYyk5NyBW ZXJpU2lnbjARBglghkgBhvhCAQEEBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMC MA0GCSqGSIb3DQEBBAUAA4GBADJMqZGwc5AWX+Sk1jviMpDjZ6YB2iWX2AVBwqW4QCesc+w6GDFS QfT6auY+njrdt/1+NlrEFRqt0Pbk0NvsigCI+ioK2ExretubKCXMYVAMgN6PD24RruBXf37eH9qE uJbx9d7Ws1tU/PZc/e8a7tKS0kYxYGHBTqrqWWN1vbcpMYID3jCCA9oCAQEwgcEwgawxFzAVBgNV BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMUkwRwYD VQQLE0BVc2UgaXMgc3ViamVjdCB0byB0ZXJtcyBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20v cnBhLWtyIChjKTk5MSUwIwYDVQQDExxWZXJpU2lnbiBDbGFzcyAyIEVtcGxveWVlIENBAhBMPDdd Q/iAVwQzQwYCuexqMAkGBSsOAwIaBQCgggJyMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJ KoZIhvcNAQkFMQ8XDTA1MDQxMDEzNDcxNlowIwYJKoZIhvcNAQkEMRYEFLhz3iazDg5FosP8AYDN F/RiPoxcMGcGCSqGSIb3DQEJDzFaMFgwCgYIKoZIhvcNAwcwBwYFKw4DAhowDgYIKoZIhvcNAwIC AgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMAoGCCqGSIb3DQIFMIHS BgkrBgEEAYI3EAQxgcQwgcEwgawxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMUkwRwYDVQQLE0BVc2UgaXMgc3ViamVjdCB0byB0ZXJtcyBh dCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhLWtyIChjKTk5MSUwIwYDVQQDExxWZXJpU2ln biBDbGFzcyAyIEVtcGxveWVlIENBAhBMPDddQ/iAVwQzQwYCuexqMIHUBgsqhkiG9w0BCRACCzGB xKCBwTCBrDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 IE5ldHdvcmsxSTBHBgNVBAsTQFVzZSBpcyBzdWJqZWN0IHRvIHRlcm1zIGF0IGh0dHBzOi8vd3d3 LnZlcmlzaWduLmNvbS9ycGEta3IgKGMpOTkxJTAjBgNVBAMTHFZlcmlTaWduIENsYXNzIDIgRW1w bG95ZWUgQ0ECEEw8N11D+IBXBDNDBgK57GowDQYJKoZIhvcNAQEBBQAEgYCG0ma+mVjNTiOjOh0l /uAYSClgiO6DQ5S+6cf9n+5W2Q2vhYO9JgZCrW1P6DedMZ+z+tN5vOEZXIbRieob3hfNUFeMxPLl 1i6Z9Xy4qZimcQT2EZSsNsSizQTGEETI3/01FR+Uq4X76V4X/KGnvOrqeFe+t7sRLJ7MrvUchp9T pwAAAAAAAA== ------=_NextPart_000_0737_01C53DB2.4781D050-- From dave at badgers-in-foil.co.uk Sun Apr 10 00:39:37 2005 From: dave at badgers-in-foil.co.uk (David Holroyd) Date: Sun, 10 Apr 2005 00:39:37 +0000 Subject: [cvsspam-devel] cvsnt support Message-ID: <20050410003937.GE15175@vhost.badgers-in-foil.co.uk> --J5MfuwkIyy7RmF4Q Content-Type: text/plain; charset=us-ascii Content-Disposition: inline I dug out the off-list message I got from Angus Mezick when he was working on this. I think that the changes were against version 0.2.7 (very old). The code here is unsupported. I didn't merge the changes at the time (as I recall) because the result doesn't work any more under a unix setup. If you are *really* motivated, maybe you could investigate porting the changes to the latest CVSspam? ;) good luck, dave --J5MfuwkIyy7RmF4Q Content-Type: message/rfc822 Content-Disposition: inline Return-path: Envelope-to: dave@badgers-in-foil.co.uk Delivery-date: Wed, 23 Jul 2003 15:13:29 +0000 Received: from proxysvr.guidestar.org ([209.96.199.2] helo=wbmail.guidestar.org) by vhost.badgers-in-foil.co.uk with esmtp (Exim 3.35 #1 (Debian)) id 19fLJ2-0003wf-00 for ; Wed, 23 Jul 2003 15:13:28 +0000 content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C3512C.E45343E8" X-MimeOLE: Produced By Microsoft Exchange V6.0.6249.0 Subject: FW: [CVS TomcatSetup] test YES YES YES! Date: Wed, 23 Jul 2003 11:12:54 -0400 Message-ID: <24A8596C44DF4F4DA442CBE269C351BD012DB01A@wbmail.guidestar.net> X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: [CVS TomcatSetup] test YES YES YES! Thread-Index: AcNRLKHwnLBrxNcNTeqfaKCMlKKNhQAAAzHw From: "Angus Mezick" To: "David Holroyd" This is a multi-part message in MIME format. ------_=_NextPart_001_01C3512C.E45343E8 Content-Type: multipart/alternative; boundary="----_=_NextPart_002_01C3512C.E45343E8" ------_=_NextPart_002_01C3512C.E45343E8 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Here are all of my changes! -----Original Message----- From: S-1-5-18 [mailto:SYSTEM@wbutil.guidestar.net]=20 Sent: Wednesday, July 23, 2003 11:11 AM To: Angus Mezick Subject: [CVS TomcatSetup] test =09 =09 Commit in TomcatSetup on MAIN=09 dummy.txt +3 -1 1.14 -> 1.15=09 test _____ =20 =09 TomcatSetup =09 dummy.txt 1.14 -> 1.15 diff -u -r1.14 -r1.15 =09 --- dummy.txt 23 Jul 2003 15:10:07 -0000 1.14 =09 +++ dummy.txt 23 Jul 2003 15:11:01 -0000 1.15 =09 @@ -2,4 +2,6 @@ =09 =09 asdfasdf =09 asdfasdf =09 asdfasdf =09 -asdfasdfasdf =09 \ No newline at end of file =09 =09 +asdfasdf =09 +asdfasdf =09 +qwerqwer =09 \ No newline at end of file =09 =09 CVSspam 0.2.7 ------_=_NextPart_002_01C3512C.E45343E8 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Message
Here are all of my=20 changes!
-----Original Message-----
From: = S-1-5-18=20 [mailto:SYSTEM@wbutil.guidestar.net]
Sent: Wednesday, July = 23, 2003=20 11:11 AM
To: Angus Mezick
Subject: [CVS = TomcatSetup]=20 test

Commit in TomcatSetup on=20 MAIN
dummy.txt +3 -1 1.14 -> = 1.15
test

TomcatSetup
dummy.txt 1.14 ->=20 1.15
diff -u -r1.14 =
-r1.15

--- dummy.txt	23 Jul 2003 15:10:07 -0000	1.14

+++ dummy.txt	23 Jul 2003 15:11:01 -0000	1.15

@@ -2,4 +2,6 @@

 asdfasdf

 asdfasdf

 asdfasdf

-asdfasdfasdf

\ No newline at end of file

+asdfasdf

+asdfasdf

+qwerqwer

\ No newline at end of file

email"=20 = href=3D"http://www.badgers-in-foil.co.uk/projects/cvsspam/">CVSspam=20 0.2.7
=00 ------_=_NextPart_002_01C3512C.E45343E8-- ------_=_NextPart_001_01C3512C.E45343E8 Content-Type: application/octet-stream; name="commitinfo" Content-Transfer-Encoding: base64 Content-Description: commitinfo Content-Disposition: attachment; filename="commitinfo" IyBUaGUgImNvbW1pdGluZm8iIGZpbGUgaXMgdXNlZCB0byBjb250cm9sIHByZS1jb21taXQgY2hl Y2tzLg0KIyBUaGUgZmlsdGVyIG9uIHRoZSByaWdodCBpcyBpbnZva2VkIHdpdGggdGhlIHJlcG9z aXRvcnkgYW5kIGEgbGlzdCANCiMgb2YgZmlsZXMgdG8gY2hlY2suICBBIG5vbi16ZXJvIGV4aXQg b2YgdGhlIGZpbHRlciBwcm9ncmFtIHdpbGwgDQojIGNhdXNlIHRoZSBjb21taXQgdG8gYmUgYWJv cnRlZC4NCiMNCiMgVGhlIGZpcnN0IGVudHJ5IG9uIGEgbGluZSBpcyBhIHJlZ3VsYXIgZXhwcmVz c2lvbiB3aGljaCBpcyB0ZXN0ZWQNCiMgYWdhaW5zdCB0aGUgZGlyZWN0b3J5IHRoYXQgdGhlIGNo YW5nZSBpcyBiZWluZyBjb21taXR0ZWQgdG8sIHJlbGF0aXZlDQojIHRvIHRoZSAkQ1ZTUk9PVC4g IEZvciB0aGUgZmlyc3QgbWF0Y2ggdGhhdCBpcyBmb3VuZCwgdGhlbiB0aGUgcmVtYWluZGVyDQoj IG9mIHRoZSBsaW5lIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWx0ZXIgdG8gcnVuLg0KIw0KIyBJZiB0 aGUgcmVwb3NpdG9yeSBuYW1lIGRvZXMgbm90IG1hdGNoIGFueSBvZiB0aGUgcmVndWxhciBleHBy ZXNzaW9ucyBpbiB0aGlzDQojIGZpbGUsIHRoZSAiREVGQVVMVCIgbGluZSBpcyB1c2VkLCBpZiBp dCBpcyBzcGVjaWZpZWQuDQojDQojIElmIHRoZSBuYW1lICJBTEwiIGFwcGVhcnMgYXMgYSByZWd1 bGFyIGV4cHJlc3Npb24gaXQgaXMgYWx3YXlzIHVzZWQNCiMgaW4gYWRkaXRpb24gdG8gdGhlIGZp cnN0IG1hdGNoaW5nIHJlZ2V4IG9yICJERUZBVUxUIi4NClRvbWNhdFNldHVwIHJ1YnkgJENWU1JP T1QvQ1ZTUk9PVC9yZWNvcmRfbGFzdGRpci5yYg0KI1RvbWNhdFNldHVwICRDVlNST09UL0NWU1JP T1QvYWN0aXZpdHltYWlsLnBsIC1sZw== ------_=_NextPart_001_01C3512C.E45343E8 Content-Type: application/octet-stream; name="collect_diffs.rb" Content-Transfer-Encoding: base64 Content-Description: collect_diffs.rb Content-Disposition: attachment; filename="collect_diffs.rb" IyEvdXNyL2Jpbi9ydWJ5IC13DQoNCiMgUGFydCBvZiBDVlNzcGFtDQojICAgaHR0cDovL3d3dy5i YWRnZXJzLWluLWZvaWwuY28udWsvcHJvamVjdHMvY3Zzc3BhbS8NCiMgQ29weXJpZ2h0IChjKSBE YXZpZCBIb2xyb3lkDQoNCiMgIENWU1JPT1QgaXMgL3Zhci9saWIvY3ZzDQojICBBUkdWIGlzICdD VlNST09UL2Zvby9zcGFjZSBkaXIgc3BhY2UgZmlsZSxOT05FLDEuMSBzb21lLGZpbGUsMS40LDEu NScNCiMgIC0tLS0NCiMgIFVwZGF0ZSBvZiAvdmFyL2xpYi9jdnMvQ1ZTUk9PVC9mb28vc3BhY2Ug ZGlyDQojICBJbiBkaXJlY3RvcnkgZm9pbDovdG1wL2N2cy1zZXJ2MTMwNTkNCiMgIA0KIyAgTW9k aWZpZWQgRmlsZXM6DQojICAJc29tZSxmaWxlIA0KIyAgQWRkZWQgRmlsZXM6DQojICAJc3BhY2Ug ZmlsZSANCiMgIExvZyBNZXNzYWdlOg0KIyAgbXNnDQojICANCg0KDQojIEFzc3VtcHRpb25zDQoj IC0gZmlsZSBuYW1lcyBkbyBub3QgY29udGFpbiBuZXdsaW5lcyBvciBzaW5nbGUgcXVvdGVzDQoN Cg0KJHRtcGRpciA9ICAiL2N5Z2RyaXZlL2YvQ1ZTL2N2c3NwYW0iDQoNCiRkaXJ0ZW1wbGF0ZSA9 ICIjY3Zzc3BhbS4je1Byb2Nlc3MucHBpZH0uI3tQcm9jZXNzLnVpZH0iDQokc3Rkb3V0LnByaW50 KCJkaXIgdGVtcGxhdGUgaXMgIiwkZGlydGVtcGxhdGUsIlxuIikNCmRlZiBmaW5kX2RhdGFfZGly DQogIERpclsiI3skdG1wZGlyfS8jeyRkaXJ0ZW1wbGF0ZX0tKiJdLmVhY2ggZG8gfGRpcnwNCiAg ICBzdGF0ID0gRmlsZS5zdGF0KGRpcikNCiAgICByZXR1cm4gZGlyIGlmIHN0YXQub3duZWQ/DQog IGVuZA0KICBuaWwNCmVuZA0KDQoNCmRlZiBibGFoKG1zZykNCiAgaWYgJGRlYnVnDQogICAgcHV0 cyAiY29sbGVjdF9kaWZmcy5yYjogI3ttc2d9Ig0KICBlbmQNCmVuZA0KDQoNCiMgTGlrZSBJTy5w b3BlbiwgYnV0IGFjY2VwdHMgbXVsdGlwbGUgYXJndW1lbnRzIGxpa2UgS2VybmVsLmV4ZWMNCiMg KFNvIG5vIG5lZWQgdG8gZXNjYXBlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKQ0KZGVmIHNhZmVyX3Bv cGVuKCphcmdzKQ0KICBJTy5wb3BlbigiLSIpIGRvIHxwaXBlfA0KICAgIGlmIHBpcGU9PW5pbA0K ICAgICAgZXhlYygqYXJncykNCiAgICBlbHNlDQogICAgICB5aWVsZCBwaXBlDQogICAgZW5kDQog IGVuZA0KZW5kDQoNCmNsYXNzIENoYW5nZUluZm8NCiAgZGVmIGluaXRpYWxpemUoZmlsZSwgZnJv bVZlciwgdG9WZXIpDQogICAgQGZpbGUsIEBmcm9tVmVyLCBAdG9WZXIgPSBmaWxlLCBmcm9tVmVy LCB0b1Zlcg0KICAgIGlmIGZyb21WZXIgPT0gdG9WZXINCiAgICAgIGZhaWwgIidmcm9tJyBhbmQg J3RvJyB2ZXJzaW9ucyBzaG91bGQgYmUgZGlmZmVyZW50ICgnI3tmcm9tVmVyfScpIg0KICAgIGVu ZA0KICBlbmQNCiAgYXR0cl9yZWFkZXIgOmZpbGUsIDpmcm9tVmVyLCA6dG9WZXINCiAgZGVmIHRv X3MNCiAgICAiPENoYW5nZUluZm8gXCIje0BmaWxlfVwiICN7QHRvVmVyfTwtLSN7QGZyb21WZXJ9 PiINCiAgZW5kDQoNCiAgZGVmIGlzQWRkaXRpb24gOyBmcm9tVmVyID09ICdOT05FJyBlbmQNCg0K ICBkZWYgaXNSZW1vdmFsIDsgdG9WZXIgPT0gJ05PTkUnIGVuZA0KDQogICNkZWYgaXNNb2RpZmlj YXRpb24gOyAhKGlzQWRkaXRpb24gfHwgaXNSZW1vdmFsKSBlbmQNCmVuZA0KDQokY29tbWl0aW5m b190YWdzID0gbmlsDQoNCmRlZiBnZXRfY29tbWl0aW5mb190YWcoZmlsZW5hbWUpDQogIGlmICRj b21taXRpbmZvX3RhZ3MubmlsPw0KICAgIHJldHVybiBuaWwgdW5sZXNzIEZpbGVUZXN0LmV4aXN0 cz8oIiN7JGRhdGFkaXJ9L2NvbW1pdGluZm8tdGFncyIpDQogICAgRmlsZS5vcGVuKCIjeyRkYXRh ZGlyfS9jb21taXRpbmZvLXRhZ3MiKSBkbyB8ZmlsZXwNCiAgICAgICRjb21taXRpbmZvX3RhZ3Mg PSBIYXNoLm5ldw0KICAgICAgZmlsZS5lYWNoX2xpbmUgZG8gfGxpbmV8DQoJbGluZSA9fiAvKFte XHRdKylcdCguKykvDQoJa2V5ID0gJDINCgl2YWwgPSAkMQ0KCWtleS5zdWIhKC9eI3tFTlZbJ0NW U1JPT1QnXX1cLy8sICcnKQ0KCSRjb21taXRpbmZvX3RhZ3Nba2V5XSA9IHZhbA0KICAgICAgZW5k DQogICAgZW5kDQogIGVuZA0KICByZXR1cm4gJGNvbW1pdGluZm9fdGFnc1tmaWxlbmFtZV0NCmVu ZA0KDQpkZWYgcHJvY2Vzc19sb2coY3ZzX2luZm8pDQogIGN2c3Jvb3QgPSBFTlZbJ0NWU1JPT1Qn XQ0KDQogICRkYXRhZGlyID0gZmluZF9kYXRhX2RpcigpDQoNCiAgcmFpc2UgIm1pc3NpbmcgZGF0 YSBkaXIgKCN7JHRtcGRpcn0vI3skZGlydGVtcGxhdGV9LVhYWFhYWCkiIGlmICRkYXRhZGlyPT1u aWwNCg0KICBsaW5lID0gJHN0ZGluLmdldHMNCiAgdW5sZXNzIGxpbmUgPX4gL15VcGRhdGUgb2Yg KC4rKS8NCiAgICBmYWlsICJMb2cgcHJlYW1ibGUgbG9va3Mgc3VzcGVjdCAoZG9lc24ndCBzdGFy dCAnVXBkYXRlIG9mIC4uLicpIg0KICBlbmQNCg0KICAjIGN2c19pbmZvIGNvbWVzIGZyb20gdGhl IGNvbW1hbmQgbGluZSwgdWx0aW1hdGVseSBhcyB0aGUgZXhwYW5zaW9uIG9mIHRoZQ0KICAjICV7 c1Z2fSBpbiAkQ1ZTUk9PVC9sb2dpbmZvLiAgSXQgaXNuJ3QgcG9zc2libGUgdG8gcGFyc2UgdGhp cyB2YWx1ZQ0KICAjIHVuYW1iaWd1b3VzbHksIGJ1dCB3ZSBtYWtlIGFuIGVmZm9ydCB0byBnZXQg aXQgcmlnaHQgaW4gYXMgbWFueSBjYXNlcyBhcw0KICAjIHBvc3NpYmxlLg0KDQogICRwYXRoID0g JDENCiAgdW5sZXNzICRwYXRoLnNsaWNlKDAsY3Zzcm9vdC5sZW5ndGgpID09IGN2c3Jvb3QNCiAg ICBmYWlsICJDVlNST09UICgnI3tjdnNyb290fScpIGRvZXNuJ3QgbWF0Y2ggbG9nIHByZWFtYmxl ICgnI3skcGF0aH0nKSINCiAgZW5kDQoNCiAgJHJlcG9zaXRvcnlfcGF0aCA9ICRwYXRoLnNsaWNl KGN2c3Jvb3QubGVuZ3RoKzEsICRwYXRoLmxlbmd0aC1jdnNyb290Lmxlbmd0aC0xKQ0KICB1bmxl c3MgY3ZzX2luZm8uc2xpY2UoMCwgJHJlcG9zaXRvcnlfcGF0aC5sZW5ndGgrMSkgPT0gIiN7JHJl cG9zaXRvcnlfcGF0aH0gIg0KICAgIGZhaWwgImNhbGN1bGF0ZWQgcmVwb3NpdG9yeSBwYXRoICgn I3skcmVwb3NpdG9yeV9wYXRofScpIGRvZXNuJ3QgbWF0Y2ggc3RhcnQgb2YgY29tbWFuZCBsaW5l IGFyZyAoJyN7Y3ZzX2luZm99JykiDQogIGVuZA0KDQogIHZlcnNpb25faW5mbyA9IGN2c19pbmZv LnNsaWNlKCRyZXBvc2l0b3J5X3BhdGgubGVuZ3RoLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjdnNfaW5mby5sZW5ndGgtJHJlcG9zaXRvcnlfcGF0aC5sZW5ndGgpDQoNCiAgY2hh bmdlcyA9IEFycmF5Lm5ldw0KICAjIG1ha2UgYSBsaXN0IG9mIGNoYW5nZWQgZmlsZXMgZ2l2ZW4g b24gdGhlIGNvbW1hbmQgbGluZQ0KICB3aGlsZSB2ZXJzaW9uX2luZm8ubGVuZ3RoPjANCiAgICBp ZiB2ZXJzaW9uX2luZm8uc3ViISgvXiAoLis/KSwoTk9ORXxbLjAtOV0rKSwoTk9ORXxbLjAtOV0r KS8sICcnKSA9PSBuaWwNCiAgICAgIGZhaWwgIicje3ZlcnNpb25faW5mb30nIGRvZXNuJ3QgbWF0 Y2ggJyA8bmFtZT4sPHZlcj4sPHZlcj4gLi4uJyINCiAgICBlbmQNCiAgICBjaGFuZ2VzIDw8IENo YW5nZUluZm8ubmV3KCQxLCAkMiwgJDMpDQogIGVuZA0KDQogICMgbG9vayBmb3IgdGhlIHN0YXJ0 IG9mIHRoZSB1c2VyJ3MgY29tbWVudA0KICAkc3RkaW4uZWFjaCBkbyB8bGluZXwNCiAgICBicmVh ayBpZiBsaW5lID1+IC9eTG9nIE1lc3NhZ2UvDQogIGVuZA0KDQogIHVubGVzcyBsaW5lID1+IC9e TG9nIE1lc3NhZ2UvDQogICAgZmFpbCAiSW5wdXQgZGlkIG5vdCBjb250YWluIGEgJ0xvZyBNZXNz YWdlOicgZW50cnkiDQogIGVuZA0KDQogIEZpbGUub3BlbigiI3skZGF0YWRpcn0vbG9nZmlsZSIs IEZpbGU6OldST05MWXxGaWxlOjpDUkVBVHxGaWxlOjpBUFBFTkQpIGRvIHxmaWxlfA0KICAgICRz dGRpbi5lYWNoIGRvIHxsaW5lfA0KICAgICAgZmlsZS5wdXRzICIjPiAje2xpbmV9Ig0KICAgIGVu ZA0KDQogICAgY2hhbmdlcy5lYWNoIGRvIHxjaGFuZ2V8DQoNCiAgICAgICMgcmVjb3JkIHZlcnNp b24gaW5mb3JtYXRpb24NCiAgICAgIGZpbGUucHV0cyAiI1YgI3tjaGFuZ2UuZnJvbVZlcn0sI3tj aGFuZ2UudG9WZXJ9Ig0KDQogICAgICAjIG5vdGUgaWYgdGhlIGZpbGUgaXMgb24gYSBicmFuY2gN CiAgICAgIHRhZyA9IG5pbA0KICAgICAgaWYgY2hhbmdlLmlzUmVtb3ZhbA0KCXRhZyA9IGdldF9j b21taXRpbmZvX3RhZygiI3skcmVwb3NpdG9yeV9wYXRofS8je2NoYW5nZS5maWxlfSIpDQogICAg ICBlbHNlDQogICAgICAgIHN0YXR1cyA9IG5pbA0KICAgICAgICAkc3Rkb3V0LnByaW50KCJjdnMg cHJvZyA9ICIsJGN2c19wcm9nLCJcbiIpDQogICAgICAgICRzdGRvdXQucHJpbnQoIkZpbGUgaXMg PSAiLGNoYW5nZS5maWxlLCJcbiIpDQogICAgICAgIHNhZmVyX3BvcGVuKCRjdnNfcHJvZywgIi1u cSIsICJzdGF0dXMiLCBjaGFuZ2UuZmlsZSkgZG8gfGlvfA0KICAgICAgICAgIHN0YXR1cyA9IGlv LnJlYWQNCiAgICAgICAgZW5kDQogICAgICAgIGZhaWwgImNvdWxkbid0IGdldCBjdnMgc3RhdHVz OiAjeyQhfSIgdW5sZXNzICgkPz4+OCk9PTANCg0KCWlmIHN0YXR1cyA9fiAvXlxzKlN0aWNreSBU YWc6XHMqKC4rKSBcKGJyYW5jaDogKy9tDQoJICB0YWcgPSAkMQ0KCWVuZA0KICAgICAgZW5kDQog ICAgICBmaWxlLnB1dHMgIiNUICN7dGFnfSIgdW5sZXNzIHRhZy5uaWw/DQoNCiAgICAgIGRpZmZf Y21kID0gQXJyYXkubmV3IDw8ICRjdnNfcHJvZyA8PCAiLW5xIiA8PCAiZGlmZiIgPDwgIi1OdSIN CiAgICAgIGRpZmZfY21kIDw8ICIta2siIGlmICRkaWZmX2lnbm9yZV9rZXl3b3Jkcw0KDQogICAg ICBpZiBjaGFuZ2UuaXNBZGRpdGlvbg0KICAgICAgICBmaWxlLndyaXRlICIjQSAiDQogICAgICAg ICMgY3J1ZnQgdXAgYSBkYXRlIGluIHRoZSBkaXN0YW50IHBhc3QsIHdoZW4gdGhlIGZpbGUgd291 bGQgbm90IGhhdmUNCiAgICAgICAgIyBleGlzdGVkLCBzbyB0aGF0IHRoZSBkaWZmIHdpbGwgc2hv dyBhbGwgbGluZXMgYXMgYWRkZWQNCiAgICAgICAgZGlmZl9jbWQgPDwgIi1EMS8yNi8xOTc3IiA8 PCAiLXIje2NoYW5nZS50b1Zlcn0iDQogICAgICBlbHNpZiBjaGFuZ2UuaXNSZW1vdmFsDQogICAg ICAgIGZpbGUud3JpdGUgIiNSICINCiAgICAgICAgIyBqdXN0IHNwZWNpZnlpbmcgb25lIHZlcnNp b24sIGN2cyB3aWxsIGRpZmYgYmV0d2VlbiB0aGF0IHZlcnNpb24gYW5kDQogICAgICAgICMgdGhl IGN1cnJlbnQgdmVyc2lvbiAod2lsbCBzaG93IGFsbCBsaW5lcyByZW1vdmVkKQ0KICAgICAgICBk aWZmX2NtZCA8PCAiLXIje2NoYW5nZS5mcm9tVmVyfSINCiAgICAgIGVsc2UNCiAgICAgICAgZmls ZS53cml0ZSAiI00gIg0KICAgICAgICBkaWZmX2NtZCA8PCAiLXIje2NoYW5nZS5mcm9tVmVyfSIg PDwgIi1yI3tjaGFuZ2UudG9WZXJ9Ig0KICAgICAgZW5kDQogICAgICBmaWxlLnB1dHMgIiN7JHJl cG9zaXRvcnlfcGF0aH0vI3tjaGFuZ2UuZmlsZX0iDQogICAgICBkaWZmX2NtZCA8PCBjaGFuZ2Uu ZmlsZQ0KICAgICAgIyBkbyBhIGN2cyBkaWZmIGFuZCBwbGFjZSB0aGUgb3V0cHV0IGludG8gb3Vy IHRlbXAgZmlsZQ0KICAgICAgYmxhaCgiYWJvdXQgdG8gcnVuICN7ZGlmZl9jbWQuam9pbignICcp fSIpDQogICAgICBzYWZlcl9wb3BlbigqZGlmZl9jbWQpIGRvIHxwaXBlfA0KICAgICAgICAjIHNr aXAgb3ZlciBjdnMtZGlmZidzIHByZWFtYmxlDQogICAgICAgIHBpcGUuZWFjaCBkbyB8bGluZXwN CiAgICAgICAgICBicmVhayBpZiBsaW5lID1+IC9eZGlmZiAvDQogICAgICAgIGVuZA0KICAgICAg ICBmaWxlLnB1dHMgIiNVICN7bGluZX0iDQogICAgICAgIHBpcGUuZWFjaCBkbyB8bGluZXwNCiAg ICAgICAgICBmaWxlLnB1dHMgIiNVICN7bGluZX0iDQogICAgICAgIGVuZA0KICAgICAgZW5kDQog ICAgICAjIFRPRE86IGRvbid0IGhvdyB0byBkbyB0aGlzIHJlbGlhYmx5IG9uIGRpZmZlcmVudCBz eXN0ZW1zLi4uDQogICAgICAjZmFpbCAiY3ZzZGlmZiBkaWQgbm90IGdpdmUgZXhpdCBzdGF0dXMg MSBmb3IgaW52b2NhdGlvbjogI3tkaWZmX2NtZC5qb2luKCcgJyl9IiB1bmxlc3MgKCQ/Pj44KT09 MQ0KICAgIGVuZA0KICBlbmQNCg0KZW5kDQoNCg0KZGVmIGNob29zZV9vcGVyYXRpb24ob3ApDQog IGlmIG9wID1+IC8gLSBOZXcgZGlyZWN0b3J5JC8NCiAgICBibGFoKCJObyBhY3Rpb24gdGFrZW4g b24gZGlyZWN0b3J5IGNyZWF0aW9uIikNCiAgZWxzaWYgb3AgPX4gLyAtIEltcG9ydGVkIHNvdXJj ZXMkLw0KICAgIGJsYWgoIkltcG9ydGVkIG5vdCBoYW5kbGVkIikNCiAgZWxzZQ0KICAgIHByb2Nl c3NfbG9nKG9wKQ0KICAgIG1haWx0ZXN0DQogIGVuZA0KZW5kDQoNCmRlZiBtYWlsdGVzdA0KICBs YXN0ZGlyID0gbmlsDQogIEZpbGUub3BlbigiI3skZGF0YWRpcn0vbGFzdGRpciIpIGRvIHxmaWxl fA0KICAgIGxhc3RkaXIgPSBmaWxlLmdldHMNCiAgZW5kDQogIGlmICRwYXRoID09IGxhc3RkaXIN CiAgICBibGFoKCJzZW5kaW5nIHNwYW0uICAoSSBhbSAjeyQwfSkiKQ0KICAgICMgUkVWSVNJVDog JDAgd2lsbCBub3QgY29udGFpbiB0aGUgcGF0aCB0byB0aGlzIHNjcmlwdCBvbiBhbGwgc3lzdGVt cw0KICAgIGNtZCA9IEZpbGUuZGlybmFtZSgkMCkgKyAiL2N2c3NwYW0ucmIiDQogICAgdW5sZXNz IHN5c3RlbShjbWQsICIjeyRkYXRhZGlyfS9sb2dmaWxlIiwgKiRwYXNzdGhvdWdoQXJncykNCiAg ICAgIGZhaWwgInByb2JsZW0gcnVubmluZyAnI3tjbWR9JyINCiAgICBlbmQNCiAgICBpZiAkZGVi dWcNCiAgICAgIGJsYWgoImxlYXZpbmcgZmlsZSAjeyRkYXRhZGlyfS9sb2dmaWxlIikNCiAgICBl bHNlIA0KICAgICAgRmlsZS51bmxpbmsoIiN7JGRhdGFkaXJ9L2xvZ2ZpbGUiKQ0KICAgIGVuZA0K ICAgIEZpbGUudW5saW5rKCIjeyRkYXRhZGlyfS9sYXN0ZGlyIikNCiAgICBGaWxlLnVubGluaygi I3skZGF0YWRpcn0vY29tbWl0aW5mby10YWdzIikgaWYgRmlsZVRlc3QuZXhpc3RzPygiI3skZGF0 YWRpcn0vY29tbWl0aW5mby10YWdzIikNCiAgICBEaXIucm1kaXIoJGRhdGFkaXIpIHVubGVzcyAk ZGVidWcNCiAgZWxzZQ0KICAgIGJsYWgoIm5vdCBzcGFtIHRpbWUgeWV0LCAjeyRwYXRofSE9I3ts YXN0ZGlyfSIpDQogIGVuZA0KZW5kDQoNCiRjb25maWcgPSAiL2N5Z2RyaXZlL2YvQ1ZTL0NWU1JP T1QvY3Zzc3BhbS5jb25mIg0KJGN2c19wcm9nID0gIi9jeWdkcml2ZS9mL2N2c250L2N2cy5leGUi DQokZGVidWcgPSBmYWxzZQ0KJGRpZmZfaWdub3JlX2tleXdvcmRzID0gZmFsc2UNCiR0YXNrX2tl eXdvcmRzID0gW10NCg0KdW5sZXNzIEVOVi5oYXNfa2V5PygnQ1ZTUk9PVCcpDQogIGZhaWwgIiRD VlNST09UIG5vdCBkZWZpbmVkLiAgSXQgc2hvdWxkIGJlIHdoZW4gSSBhbSBpbnZva2VkIGZyb20g Q1ZTUk9PVC9sb2dpbmZvIg0KZW5kDQoNCg0KcmVxdWlyZSAnZ2V0b3B0bG9uZycNCg0Kb3B0cyA9 IEdldG9wdExvbmcubmV3KA0KICBbICItLXRvIiwgICAgICItdCIsIEdldG9wdExvbmc6OlJFUVVJ UkVEX0FSR1VNRU5UIF0sDQogIFsgIi0tY29uZmlnIiwgIi1jIiwgR2V0b3B0TG9uZzo6UkVRVUlS RURfQVJHVU1FTlQgXSwNCiAgWyAiLS1kZWJ1ZyIsICAiLWQiLCBHZXRvcHRMb25nOjpOT19BUkdV TUVOVCBdLA0KICBbICItLWZyb20iLCAgICItdSIsIEdldG9wdExvbmc6OlJFUVVJUkVEX0FSR1VN RU5UIF0NCikNCg0KIyBhcmd1bWVudHMgdG8gcGFzcyB0aG91Z2ggdG8gJ2N2c3NwYW0ucmInDQok cGFzc3Rob3VnaEFyZ3MgPSBBcnJheS5uZXcNCm9wdHMuZWFjaCBkbyB8b3B0LCBhcmd8DQogIGlm IFsiLS10byIsICItLWNvbmZpZyIsICItLWZyb20iXS5pbmNsdWRlPyhvcHQpDQogICAgJHBhc3N0 aG91Z2hBcmdzIDw8IG9wdCA8PCBhcmcNCiAgZW5kDQogIGlmIFsiLS1kZWJ1ZyJdLmluY2x1ZGU/ KG9wdCkNCiAgICAkcGFzc3Rob3VnaEFyZ3MgPDwgb3B0DQogIGVuZA0KICAkY29uZmlnID0gYXJn IGlmIG9wdD09Ii0tY29uZmlnIg0KICAkZGVidWcgPSB0cnVlIGlmIG9wdCA9PSAiLS1kZWJ1ZyIN CmVuZA0KDQpibGFoKCJDVlNST09UIGlzICN7RU5WWydDVlNST09UJ119IikNCmJsYWgoIkFSR1Yg aXMgJyN7QVJHVi5qb2luKCcsICcpfSciKQ0KDQppZiBGaWxlVGVzdC5leGlzdHM/KCRjb25maWcp DQogIGRlZiBhZGRIZWFkZXIobmFtZSx2YWwpDQogIGVuZA0KICBkZWYgYWRkUmVjaXBpZW50KHdo bykNCiAgZW5kDQogIGxvYWQgJGNvbmZpZw0KZWxzZQ0KICBibGFoKCJDb25maWcgZmlsZSAnI3sk Y29uZmlnfScgbm90IGZvdW5kLCBpZ25vcmluZyIpDQplbmQNCg0KDQppZiBBUkdWLmxlbmd0aCAh PSAxDQogICRzdGRlcnIucHV0cyAiRXhwZWN0ZWQgYXJndW1lbnRzIG1pc3NpbmciDQogICRzdGRl cnIucHV0cyAiKiBZb3Ugc2hvdWxkbid0IHJ1biBjb2xsZWN0X2RpZmZzIGJ5IGhhbmQsIGJ1dCBm cm9tIGEgQ1ZTUk9PVC9sb2dpbmZvIGVudHJ5ICoiDQogICRzdGRlcnIucHV0cyAiVXNhZ2U6IGNv bGxlY3RfZGlmZnMucmIgWyAtLXRvIDxlbWFpbD4gXSBbIC0tY29uZmlnIDxmaWxlPiBdICV7c1Z2 fSINCiAgJHN0ZGVyci5wdXRzICIgICAgICAgKHRoZSBzZXF1ZW5jZSAnJXtzVnZ9JyBpcyBleHBh bmRlZCBieSBDVlMsIHdoZW4gZm91bmQgaW4gQ1ZTUk9PVC9sb2dpbmZvKSINCiAgZXhpdA0KZW5k DQpjaG9vc2Vfb3BlcmF0aW9uKEFSR1ZbMF0pDQo= ------_=_NextPart_001_01C3512C.E45343E8 Content-Type: application/octet-stream; name="cvsspam.conf" Content-Transfer-Encoding: base64 Content-Description: cvsspam.conf Content-Disposition: attachment; filename="cvsspam.conf" IyAtKi0gUnVieSAtKi0gQ29uZmlndXJhdGlvbiBmb3IgQ1ZTc3BhbSBjb21taXQtbWFpbCBnZW5l cmF0aW9uIHN5c3RlbQ0KDQojIFBhcnQgb2YgQ1ZTc3BhbQ0KIyAgIGh0dHA6Ly93d3cuYmFkZ2Vy cy1pbi1mb2lsLmNvLnVrL3Byb2plY3RzL2N2c3NwYW0vDQojIENvcHlyaWdodCAoYykgRGF2aWQg SG9scm95ZA0KDQoNCiMgICAgIFBsYWNlIHRoaXMgZmlsZSBpbiB5b3VyIENWU1JPT1QvLCBvciBz cGVjaWZ5IGl0cyBsb2NhdGlvbiB3aXRoDQojICAgY29sbGVjdF9kaWZmcy5yYidzIC0tY29uZmln IGFyZ3VtZW50Lg0KDQoNCg0KIyBXaG8gc2hvdWxkIGJlIG1haWxlZD8gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE9wdGlvbmFsKQ0KIw0KIyAgICAgTXVsdGlw bGUgYWRkcmVzc2VzIG1heSBzcGVjaWZpZWQuICBUaGVzZSB3aWxsIGJlIHVzZWQgaW4gYWRkaXRp b24gdG8gYW55DQojICAgLS10byBhcmd1ZW1udHMgZ2l2ZW4gdG8gY29sbGVjdF9kaWZmcy5yYiBv biB0aGUgY29tbWFuZGxpbmUgKGkuZS4gaW4NCiMgICAnQ1ZTUk9PVC9sb2dpbmZvJykuDQojDQoj ICAgICBJZiB5b3UgbmVlZCBsb3RzIG9mIGNvbW1pdC1tYWlsIHJlY2lwaWVudHMsIGNvbnNpZGVy IHNldHRpbmcgdXAgYSBtYWlsaW5nDQojICAgbGlzdCB0byBwcm9wb2dhdGUgdGhlIG1lc3NhZ2Vz Lg0KDQojYWRkUmVjaXBpZW50ICJnbG9iYWwtY29kZS1yZXZpZXdAc29tZXdoZXJlLmludmFsaWQi DQphZGRSZWNpcGllbnQgImFtZXppY2tAZ3VpZGVzdGFyLm9yZyINCg0KDQojIExpbmsgdG8gQnVn L0lzc3VlIFRyYWNraW5nIHN5c3RlbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo T3B0aW9uYWwpDQojDQojICAgICBJZiB5b3Ugd2FudCBjb21tZW50cyB0byBpbmNsdWRlIGxpbmtz IHRvIGEgQnVnemlsbGEgaW5zdGFsbGF0aW9uLCBnaXZlDQojICAgJGJ1Z3ppbGxhVVJMIG9mIHRo ZSBwYWdlIGZvciB2aWV3aW5nIGJ1Z3MgKHVzdWFsbHkgc2hvd19idWcuY2dpKSB1c2luZyB0aGUN CiMgICBzdHJpbmcgJyVzJyB0byBzcGVjaWZ5IHdoZXJlIHRoZSBidWdJZCBzaG91bGQgYmUgc3Vi c3RpdHV0ZWQuDQojDQojICAgICBJZiB5b3Ugc3BlY2lmeSBhIFVSTCwgdGV4dCB3aXRoaW4gbG9n LWNvbW1lbnRzIG9mIHRoZSBmb3JtICdidWcgMTIzNCcNCiMgICB3aWxsIGJlIG1hZGUgaW50byBo eXBlcmxpbmtzIGluIHRoZSBnZW5lcmF0ZWQgZW1haWwuDQojDQojICAgICBXaGVuICRqaXJhVVJM IGlzIGdpdmVuLCB0ZXh0IG9mIHRoZSBmb3JtICdwcm9qZWN0LTEyMzQnIHdpbGwgYmUgbGlua2Vk DQojICAgdG8gdGhpcyBpc3N1ZSBpbiBKSVJBLg0KDQojJGJ1Z3ppbGxhVVJMID0gImh0dHA6Ly9i dWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9JXMiDQoNCiRqaXJhVVJMID0gImh0 dHA6Ly93YmRldndlYjQ6ODA4MC9qaXJhL3NlY3VyZS9WaWV3SXNzdWUuanNwYT9rZXk9JXMiDQoN Cg0KDQoNCiMgTGluayB0byBDVlMgd2ViIGZyb250ZW5kcyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChPcHRpb25hbCkNCiMNCiMgICAgIFRoZSBnZW5lcmF0ZWQgbWFp bCBjYW4gY29udGFpbiBsaW5rcyB0byB0aGUgbmV3L29yaWdpbmFsIHZlcnNpb25zIG9mIGENCiMg ICBjaGFuZ2VkIGZpbGUuICBUaGlzIGNhbiBiZSBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciB2aWV3 aW5nIGJpbmFyeSBmaWxlcw0KIyAgIChpLmUuIGltYWdlcykgYmVmb3JlIGFuIGFmdGVyIGEgY2hh bmdlLCBhcyBubyBkaWZmIGlzIGluY2x1ZGVkIGZvciB0aGVzZS4NCiMNCiMgICAgIFNwZWNpZnkg b25lIG9mIGVpdGhlciAkdmlld2N2c1VSTCBvciAkY2hvcmFVUkwgKG9yIG5laXRoZXIgaWYgeW91 IGRvbid0DQojICAgaGF2ZSB0aGVtLCBhbmQgZG9uJ3Qgd2FudCBsaW5rcykuICBGb3IgVmlld0NW UywgdGhlIFVSTCB1c3VhbGx5IGVuZHMgd2l0aA0KIyAgICd2aWV3Y3ZzLmNnaScuICBGb3IgQ2hv cmEsIHRoZSBVUkwgdXN1YWx5IGVuZHMgd2l0aCB0aGUgZGlyZWN0b3J5IHRoYXQNCiMgICBjb250 YWlucyBjdnMucGhwL2RpZmYucGhwL2V0Yy4NCg0KIyR2aWV3Y3ZzVVJMID0gImh0dHA6Ly9sb2Nh bGhvc3QvY2dpLWJpbi92aWV3Y3ZzLmNnaSINCg0KIyRjaG9yYVVSTCA9ICJodHRwOi8vbG9jYWxo b3N0L2hvcmQvY2hvcmEvIg0KDQojJGN2c3dlYlVSTCA9ICJodHRwOi8vbG9jYWxob3N0L2NnaS1i aW4vY3Zzd2ViLmNnaSINCg0KDQoNCiMgQWRkaXRpb25hbCBTTVRQIEhlYWRlcnMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChPcHRpb25hbCkNCiMNCiMgICAgIFlv dSBjYW4gc3BlY2lmeSBhZGRpdGlvbmFsIGhlYWRlcnMgdG8gYWRkIHRvIHRoZSBnZW5lcmF0ZWQg ZW1haWwuICAoRm9yDQojICAgaW5zdGFuY2UsIHlvdSBjb3VsZCBmbGFnIG1haWxzLCBhbmQgdGVs bCBTcGFtQXNzYXNpbiB0byBiZSBraW5kIHRvIHRoZW0uKQ0KDQojYWRkSGVhZGVyICJSZXBseS1U byIsICJkZXYtbGlzdEBzb21ld2hlcmUuaW52YWxpZCINCiNhZGRIZWFkZXIgIlgtQmVlbi1UaGVy ZSIsICJjcmFja21vbmtleS5vcmciDQoNCg0KDQojIHNlbmRtYWlsIGxvY2F0aW9uICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogJy91c3Ivc2Jpbi9zZW5kbWFpbCcpDQojDQoj ICAgICBJZiB5b3VyIHNlbmRtYWlsIHByb2dyYW0gaXMgaW5zdGFsbGVkIHNvbWV3aGVyZSBvdGhl ciB0aGFuIHRoZSBkZWZhdWx0LA0KIyAgIHNwZWNpZnkgdGhlIGxvY2F0aW9uIGhlcmUuICBUaGUg cHJvZ3JhbSBzcGVjaWZpZWQgbXVzdCBhY2NlcHQgdGhlIC10IG9wdGlvbg0KIyAgICh0byBtYWtl IGl0IGFjY2VwdCBtYWlsIGhlYWRlcnMgb24gc3RkaW4pLg0KDQokc2VuZG1haWxfcHJvZyA9ICIv dXNyL3NiaW4vc3NtdHAuZXhlIg0KDQoNCg0KIyBjdnMgbG9jYXRpb24gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IHN0YW5kYXJkICRQQVRIKQ0KIw0KIyAg ICAgSWYgeW91ciBjdnMgcHJvZ3JhbSBpcyBpbnN0YWxsZWQgc29tZXdoZXJlIG91dHNpZGUgdGhl IHN0YW5kYXJkICRQQVRILA0KIyAgIHNwZWNpZnkgdGhlIGxvY2F0aW9uIGhlcmUuDQoNCiRjdnNf cHJvZyA9ICIvY3lnZHJpdmUvZi9jdnNudC9jdnMuZXhlIg0KDQoNCg0KIyBjdnNkaWZmIGtleXdv cmQgaWdub3JpbmcgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogc2hvdyBjaGFuZ2VzIGluIGtl eXdvcmRzKQ0KIw0KIyAgICAgQ2hhbmdlcyBpbiBDVlMga2V5d29yZHMgY2FuIGJlIGRpc3RyYWN0 aW5nLiAgRm9yIGluc3RhbmNlLCB0aGUNCiMgICAkUmV2aXNpb246IDEuOSAkIGtleXdvcmQgd2ls bCBjaGFuZ2Ugb24gZWFjaCBjb21taXQuICBTZXQgdGhpcyB2YWx1ZSB0byB0cnVlDQojICAgdG8g ZXhjbHVkZSBjaGFuZ2VzIGluIGtleXdvcmQgZmllbGRzIChhZGRzIHRoZSAta2sgb3B0aW9uIHRv IGN2cyBkaWZmKS4NCg0KIyRkaWZmX2lnbm9yZV9rZXl3b3JkcyA9IHRydWUNCg0KDQoNCiMgRG9u J3Qgc2hvdyBkaWZmIGZvciByZW1vdmVkIGZpbGVzICAgICAgICAgICAgIChEZWZhdWx0OiBzaG93 IGZpbGUncyBjb250ZW50cykNCiMNCiMgICAgIElmIHlvdSBhcmVuJ3QgaW50ZXJlc3RlZCBpbiBz ZWVpbmcgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSB0aGF0IHdhcw0KIyAgIHJlbW92ZWQgc2V0IHRo aXMgb3B0aW9uIHRvIHRydWUuICBUaGUgZmlsZXMgd2lsbCBzdGlsbCBhcHBlYXIgaW4gdGhlIGlu ZGV4DQojICAgYXQgdGhlIHRvcCBvZiB0aGUgZW1haWwuDQoNCiMkbm9fcmVtb3ZlZF9maWxlX2Rp ZmYgPSB0cnVlDQoNCg0KDQojIEVtYWlsIGNoYXJhY3RlciBzZXQgICAgICAgICAgICAgICAgICAg ICAgIChEZWZhdWx0OiBubyBjaGFyc2V0IHNwZWNpZmljYXRpb24pDQojDQojICAgICBBbGxvd3Mg dGhlIHNwZWNpZmljYXRpb24gb2YgYSBjaGFyYWN0ZXIgc2V0IGZvciBhbGwgZ2VuZXJhdGVkIGVt YWlscy4NCiMgICBUaGUgZmlsZXMgQ1ZTIGlzIGRlYWxpbmcgd2l0aCBzaG91bGQgYWxyZWFkeSBi ZSBpbiB0aGUgY2hhcmFjdGVyIHNldCB5b3UNCiMgICBzcGVjaWZ5IC0tIG5vIHRyYW5zY29kaW5n IGlzIGRvbmUuDQoNCiMkY2hhcnNldD0iSVNPLTg4NTktMSINCg0KDQoNCiMgRmlsZSBuYW1lcyBp biBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBubyBmaWxlbmFtZXMgaW4g U3ViamVjdCkNCiMNCiMgICAgIFNvbWUgcGVvcGxlIGxpa2UgZmlsZSBuYW1lcyB0byBhcHBlYXIg aW4gdGhlIGVtYWlsIHN1YmplY3QuICBUbyBtYWtlDQojICAgdGhlbSBoYXBweSwgeW91IGNhbiBz YXkgJGZpbGVzX2luX3N1YmplY3QgPSB0cnVlIGhlcmUuDQoNCiMkZmlsZXNfaW5fc3ViamVjdCA9 IGZhbHNlDQo= ------_=_NextPart_001_01C3512C.E45343E8 Content-Type: application/octet-stream; name="cvsspam.rb" Content-Transfer-Encoding: base64 Content-Description: cvsspam.rb Content-Disposition: attachment; filename="cvsspam.rb" IyEvdXNyL2Jpbi9ydWJ5IC13DQoNCiMgUGFydCBvZiBDVlNzcGFtDQojICAgaHR0cDovL3d3dy5i YWRnZXJzLWluLWZvaWwuY28udWsvcHJvamVjdHMvY3Zzc3BhbS8NCiMgQ29weXJpZ2h0IChjKSBE YXZpZCBIb2xyb3lkDQoNCiMgY29sbGVjdF9kaWZmcy5yYiBleHBlY3RzIHRvIGZpbmQgdGhpcyBz Y3JpcHQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGl0DQojDQoNCiMgVE9ETzogZXhlbXBsaWZ5 IHN5bnRheCBmb3IgJ2N2cyBhZG1pbiAtbScgd2hlbiBsb2cgbWVzc2FnZSBpcyBtaXNzaW5nDQoj IFRPRE86IG1ha2UgbWF4LWxpbmUgbGltaXQgb24gZGlmZiBvdXRwdXQgY29uZmlndXJhYmxlDQoj IFRPRE86IHB1dCBtYXggc2l6ZSBsaW1pdCBvbiB3aG9sZSBlbWFpbA0KIyBUT0RPOiBzdXBwb3J0 IG5vbi1odG1sIG1haWwgdG9vICh0ZXh0L3BsYWluLCBtdWx0aXBhcnQvYWx0ZXJuYXRpdmUpDQoN CiMgSWYgeW91IHdhbnQgYW5vdGhlciAndG9kbyBrZXl3b3JkJyAoVE9ETyAmIEZJWE1FIGFyZSBo aWdobGlnaHRlZCBieSBkZWZhdWx0KQ0KIyB5b3UgY291bGQgYWRkDQojICAgJHRhc2tfa2V5d29y ZHMgPDwgIktFWVdPUkQiIDw8ICJNQVlCRUFOT1RIRVJXT1JEIg0KIyB0byB5b3VyIGN2c3NwcGFt LmNvbmYNCg0KDQokdmVyc2lvbiA9ICIwLjIuNyINCg0KDQokbWF4U3ViamVjdExlbmd0aCA9IDIw MA0KJG1heExpbmVzUGVyRGlmZiA9IDEwMDANCiRjaGFyc2V0ID0gbmlsCQkJIyBuaWwgaW1wbGll cyAnZG9uJ3Qgc3BlY2lmeSBhIGNoYXJzZXQnDQokbWFpbFN1YmplY3QgPSBuaWwNCg0KZGVmIGJs YWgodGV4dCkNCiAgcHV0cygiY3Zzc3BhbS5yYjogI3t0ZXh0fSIpIGlmICRkZWJ1Zw0KZW5kDQoN CmRlZiBtaW4oYSwgYikNCiAgYTxiID8gYSA6IGINCmVuZA0KDQoNCiMgdGhlIHJlZ2V4cHMgZ2l2 ZW4gYXMga2V5cyBtdXN0IG5vdCB1c2UgY2FwdHVyaW5nIHN1YmV4cHJlc3Npb25zICcoLi4uKScN CmNsYXNzIE11bHRpU3ViDQogIGRlZiBpbml0aWFsaXplKGhhc2gpDQogICAgQG1hc2ggPSBBcnJh eS5uZXcNCiAgICBleHByID0gbmlsDQogICAgaGFzaC5lYWNoIGRvIHxrZXksdmFsfA0KICAgICAg aWYgZXhwciA9PSBuaWwgOyBleHByPSIoIiBlbHNlIGV4cHI8PCJ8KCIgZW5kDQogICAgICBleHBy IDw8IGtleSA8PCAiKSINCiAgICAgIEBtYXNoIDw8IHZhbA0KICAgIGVuZA0KICAgIEByZSA9IFJl Z2V4cC5uZXcoZXhwcikNCiAgZW5kDQoNCiAgZGVmIGdzdWIhKHRleHQpDQogICAgdGV4dC5nc3Vi IShAcmUpIHsgfG1hdGNofA0KICAgICAgaWR4ID0gLTENCiAgICAgICR+LnRvX2EuZWFjaCB7IHxz dWJleHB8DQogICAgICAgIGJyZWFrIHVubGVzcyBpZHg9PS0xIHx8IHN1YmV4cD09bmlsDQogICAg ICAgIGlkeCArPSAxDQogICAgICB9DQogICAgICBpZHg9PS0xID8gbWF0Y2ggOiBAbWFzaFtpZHhd LmNhbGwobWF0Y2gpDQogICAgfQ0KICBlbmQNCmVuZA0KDQojIExpbWl0ZWQgc3VwcG9ydCBmb3Ig ZW5jb2Rpbmcgbm9uLVVTX0FTQ0lJIGNoYXJhY3RlcnMgaW4gbWFpbCBoZWFkZXJzDQpjbGFzcyBI ZWFkZXJFbmNvZGVyDQogIGRlZiBpbml0aWFsaXplDQogICAgQHJpZ2h0X21hcmdpbiA9IDc4DQog ICAgQGVuY29kaW5nID0gJ3EnICMgcXVvdGVkLXByaW50YWJsZSwgYmFzZTY0IG5vdCBzdXBwb3J0 ZWQNCiAgICBAY2hhcnNldCA9IG5pbCAjIFRPRE86IHNvbWUgYmV0dGVyIGRlZmF1bHQ/DQogIGVu ZA0KDQogIGF0dHJfYWNjZXNzb3IgOmNoYXJzZXQNCg0KICBkZWYgZW5jb2RlX2hlYWRlcihpbywg bmFtZSwgdmFsdWUpDQogICAgbmFtZSA9IG5hbWUgKyAiOiAiDQogICAgaWYgcmVxdWlyZXNfcmZj MjA0Nz8odmFsdWUpDQogICAgICByZmMyMDQ3X2VuY29kZV9xdW90ZWQoaW8sIG5hbWUsIHZhbHVl KQ0KICAgIGVsc2UNCiAgICAgIHdyYXBfYmFzaWNfaGVhZGVyKGlvLCBuYW1lLCB2YWx1ZSkNCiAg ICBlbmQNCiAgZW5kDQoNCg0KICBkZWYgd3JhcF9iYXNpY19oZWFkZXIoaW8sIHN0YXJ0LCByZXN0 KQ0KICAgIHJlc3Quc2NhbigvXHMqXFMrLykgZG8gfG1hdGNofA0KICAgICAgaWYgc3RhcnQubGVu Z3RoPjAgJiYgc3RhcnQubGVuZ3RoK21hdGNoLmxlbmd0aD5AcmlnaHRfbWFyZ2luDQogICAgICAg IGlvLnB1dHMoc3RhcnQpDQogICAgICAgIHN0YXJ0ID0gIiAiDQogICAgICAgIG1hdGNoLnN1YiEo L15ccysvLCAiIikgIyBzdHJpcCBleGlzdGluZyBsZWFkaW5nLXdoaXRlc3BhY2UNCiAgICAgIGVu ZA0KICAgICAgc3RhcnQgPDwgbWF0Y2gNCiAgICBlbmQNCiAgICBpby5wdXRzKHN0YXJ0KQ0KICBl bmQNCg0KICBVTkRFUlNDT1JFID0gIl8iWzBdDQogIFNQQUNFID0gIiAiWzBdDQogIFRBQiA9ICJc dCJbMF0NCg0KICBkZWYgcmZjMjA0N19lbmNvZGVfcXVvdGVkKGlvLCBzdGFydCwgcmVzdCkNCiAg ICByYWlzZSAibm8gY2hhcnNldCIgaWYgQGNoYXJzZXQubmlsPw0KICAgIGNvZGVfYmVnaW4gPSAi PT8je0BjaGFyc2V0fT8je0BlbmNvZGluZ30/Ig0KICAgIHN0YXJ0IDw8IGNvZGVfYmVnaW4NCiAg ICByZXN0LmVhY2hfYnl0ZSBkbyB8YnwNCiAgICAgIGNvZGUgPSBpZiBiPjEyNiB8fCBiPT1VTkRF UlNDT1JFIHx8IGI9PVRBQg0KICAgICAgICBzcHJpbnRmKCI9JTAyeCIsIGIpDQogICAgICBlbHNp ZiBiID09IFNQQUNFDQogICAgICAgICJfIg0KICAgICAgZWxzZQ0KICAgICAgICBiLmNocg0KICAg ICAgZW5kDQoNCiAgICAgIGlmIHN0YXJ0Lmxlbmd0aCtjb2RlLmxlbmd0aCsyID4gQHJpZ2h0X21h cmdpbg0KICAgICAgICBpby5wdXRzKHN0YXJ0ICsgIj89IikNCiAgICAgICAgc3RhcnQgPSAiICIg KyBjb2RlX2JlZ2luDQogICAgICBlbmQNCiAgICAgIHN0YXJ0IDw8IGNvZGUNCiAgICBlbmQNCiAg ICBpby5wdXRzKHN0YXJ0ICsgIj89IikNCiAgZW5kDQoNCiBwcml2YXRlDQogIGRlZiByZXF1aXJl c19yZmMyMDQ3Pyh3b3JkKQ0KICAgICh3b3JkID1+IC9bXDE3Ny1cMzc3XS8pICE9IG5pbA0KICBl bmQNCmVuZA0KDQoNCmNsYXNzIExvZ1JlYWRlcg0KICBkZWYgaW5pdGlhbGl6ZShsb2dJTykNCiAg ICBAaW8gPSBsb2dJTw0KICAgIGFkdmFuY2UNCiAgZW5kDQoNCiAgZGVmIGN1cnJlbnRMaW5lQ29k ZSA7IEBsaW5lWzEsMV0gIGVuZA0KDQoNCiAgY2xhc3MgQ29uc3RyYWluZWRJTw0KICAgIGRlZiBp bml0aWFsaXplKHJlYWRlcikNCiAgICAgIEByZWFkZXIgPSByZWFkZXINCiAgICAgIEBsaW5lY29k ZSA9IHJlYWRlci5jdXJyZW50TGluZUNvZGUNCiAgICBlbmQNCg0KICAgIGRlZiBlYWNoDQogICAg ICByZXR1cm4gaWYgQHJlYWRlciA9PSBuaWwNCiAgICAgIHdoaWxlIHRydWUNCiAgICAgICAgeWll bGQgQHJlYWRlci5jdXJyZW50TGluZQ0KICAgICAgICBicmVhayB1bmxlc3MgQHJlYWRlci5hZHZh bmNlICYmIGN1cnJlbnRWYWxpZD8NCiAgICAgIGVuZA0KICAgICAgQHJlYWRlciA9IG5pbA0KICAg IGVuZA0KDQogICAgZGVmIGdldHMNCiAgICAgIHJldHVybiBuaWwgaWYgQHJlYWRlciA9PSBuaWwN CiAgICAgIGxpbmUgPSBAcmVhZGVyLmN1cnJlbnRMaW5lDQogICAgICByZXR1cm4gbmlsIGlmIGxp bmU9PW5pbCB8fCAhY3VycmVudFZhbGlkPw0KICAgICAgQHJlYWRlci5hZHZhbmNlDQogICAgICBy ZXR1cm4gbGluZQ0KICAgIGVuZA0KDQogICAgZGVmIGN1cnJlbnRWYWxpZD8NCiAgICAgIEBsaW5l Y29kZSA9PSBAcmVhZGVyLmN1cnJlbnRMaW5lQ29kZQ0KICAgIGVuZA0KICBlbmQNCg0KICBkZWYg Z2V0TGluZXMNCiAgICBDb25zdHJhaW5lZElPLm5ldyhzZWxmKQ0KICBlbmQNCg0KICBkZWYgZW9m IDsgQGxpbmU9PW5pbCAgZW5kDQoNCiAgZGVmIGFkdmFuY2UNCiAgICBAbGluZSA9IEBpby5nZXRz DQogICAgcmV0dXJuIGZhbHNlIGlmIEBsaW5lID09IG5pbA0KICAgIHVubGVzcyBAbGluZVswLDFd ID09ICIjIg0KICAgICAgcmFpc2UgIiN7JGxvZ2ZpbGV9OiN7QGlvLmxpbmVub30gbGluZSBkaWQg bm90IGJlZ2luIHdpdGggJyMnOiAje0BsaW5lfSINCiAgICBlbmQNCiAgICByZXR1cm4gdHJ1ZQ0K ICBlbmQNCg0KICBkZWYgY3VycmVudExpbmUNCiAgICBAbGluZT09bmlsID8gbmlsIDogQGxpbmVb MywgQGxpbmUubGVuZ3RoLTRdDQogIGVuZA0KZW5kDQoNCg0KZGVmIGh0bWxFbmNvZGUodGV4dCkN CiAgdGV4dC5nc3ViKC8uLykgZG8NCiAgICBjYXNlICQmDQogICAgICB3aGVuICImIiB0aGVuICIm YW1wOyINCiAgICAgIHdoZW4gIjwiIHRoZW4gIiZsdDsiDQogICAgICB3aGVuICI+IiB0aGVuICIm Z3Q7Ig0KICAgICAgZWxzZSAkJg0KICAgIGVuZA0KICBlbmQNCmVuZA0KDQojIGFjdHVhbGx5LCBh bGxvd3MgJy8nIHRvIGFwcGVhcg0KZGVmIHVybEVuY29kZSh0ZXh0KQ0KICB0ZXh0LnN1YigvW15h LXpBLVowLTlcLSwuKl9cL10vKSBkbw0KICAgICIlI3tzcHJpbnRmKCclMlgnLCAkJlswXSl9Ig0K ICBlbmQNCmVuZA0KDQojIGEgdG9wLWxldmVsIGRpcmVjdG9yeSB1bmRlciB0aGUgJENWU1JPT1QN CmNsYXNzIFJlcG9zaXRvcnkNCiAgQEByZXBvc2l0b3JpZXMgPSBIYXNoLm5ldw0KDQogIGRlZiBp bml0aWFsaXplKG5hbWUpDQogICAgQG5hbWUgPSBuYW1lDQogICAgQGNvbW1vbl9wcmVmaXggPSBu aWwNCiAgICBAYWxsX3RhZ3MgPSBIYXNoLm5ldw0KICBlbmQNCg0KICBkZWYgYWRkX3RhZyh0YWdf bmFtZSkNCiAgICBpZiBAYWxsX3RhZ3NbdGFnX25hbWVdDQogICAgICBAYWxsX3RhZ3NbdGFnX25h bWVdICs9IDENCiAgICBlbHNlDQogICAgICBAYWxsX3RhZ3NbdGFnX25hbWVdID0gMQ0KICAgIGVu ZCANCiAgZW5kDQoNCiAgZGVmIGhhc19tdWx0aXBsZV90YWdzDQogICAgQGFsbF90YWdzLmxlbmd0 aCA+IDENCiAgZW5kDQoNCiAgZGVmIGVhY2hfdGFnDQogICAgQGFsbF90YWdzLmVhY2hfa2V5IGRv IHx0YWd8DQogICAgICB5aWVsZCB0YWcNCiAgICBlbmQNCiAgZW5kDQoNCiAgZGVmIHRydW5rX29u bHk/DQogICAgQGFsbF90YWdzLmxlbmd0aD09MSAmJiBAYWxsX3RhZ3NbbmlsXSE9bmlsDQogIGVu ZA0KDQogIGRlZiBtaXhlZF90YWdzPw0KICAgIEBhbGxfdGFncy5sZW5ndGg+MQ0KICBlbmQNCg0K ICBkZWYgdGFnX2NvdW50DQogICAgQGFsbF90YWdzLmxlbmd0aA0KICBlbmQNCg0KICAjIGNhbGN1 bGF0ZSB0aGUgcGF0aCBwcmVmaXggc2hhcmVkIGJ5IGFsbCBmaWxlcyBjb21taXRlZCB0byB0aGlz DQogICMgcmVwb3NvdG9yeQ0KICBkZWYgbWVyZ2VfY29tbW9uX3ByZWZpeChwYXRoKQ0KICAgIGlm IEBjb21tb25fcHJlZml4ID09IG5pbA0KICAgICAgQGNvbW1vbl9wcmVmaXggPSBwYXRoLmR1cA0K ICAgIGVsc2UNCiAgICAgIHBhdGggPSBwYXRoLmR1cA0KICAgICAgdW50aWwgQGNvbW1vbl9wcmVm aXggPT0gcGF0aA0KICAgICAgICBpZiBAY29tbW9uX3ByZWZpeC5zaXplPnBhdGguc2l6ZQ0KICAg ICAgICAgIGlmIEBjb21tb25fcHJlZml4LnN1YiEoLyguKilcLy4qJC8sICdcMScpLm5pbD8NCiAg ICAgICAgICAgIHJhaXNlICJ1bmFibGUgdG8gbWVyZ2UgJyN7cGF0aH0nIGluIHRvICcje0Bjb21t b25fcHJlZml4fSc6IHByZWZpeCB0b3RhbGx5IGRpZmZlcmVudCINCiAgICAgICAgICBlbmQNCiAg ICAgICAgZWxzZQ0KICAgICAgICAgIGlmIHBhdGguc3ViISgvKC4qKVwvLiokLywgJ1wxJykubmls Pw0KICAgICAgICAgICAgcmFpc2UgInVuYWJsZSB0byBtZXJnZSAnI3twYXRofScgaW4gdG8gJyN7 QGNvbW1vbl9wcmVmaXh9JzogcHJlZml4IHRvdGFsbHkgZGlmZmVyZW50Ig0KICAgICAgICAgIGVu ZA0KICAgICAgICBlbmQNCiAgICAgIGVuZA0KICAgIGVuZA0KICBlbmQNCg0KICBhdHRyX3JlYWRl ciA6bmFtZSwgOmNvbW1vbl9wcmVmaXgNCg0KICBkZWYgUmVwb3NpdG9yeS5nZXQobmFtZSkNCiAg ICBuYW1lID1+IC9eW15cL10rLw0KICAgIG5hbWUgPSAkJg0KICAgIHJlcCA9IEBAcmVwb3NpdG9y aWVzW25hbWVdDQogICAgaWYgcmVwLm5pbD8NCiAgICAgIHJlcCA9ICBSZXBvc2l0b3J5Lm5ldyhu YW1lKQ0KICAgICAgQEByZXBvc2l0b3JpZXNbbmFtZV0gPSByZXANCiAgICBlbmQNCiAgICByZXAN CiAgZW5kDQoNCiAgZGVmIFJlcG9zaXRvcnkuY291bnQNCiAgICBAQHJlcG9zaXRvcmllcy5zaXpl DQogIGVuZA0KDQogIGRlZiBSZXBvc2l0b3J5LmVhY2gNCiAgICBAQHJlcG9zaXRvcmllcy5lYWNo X3ZhbHVlIGRvIHxyZXB8DQogICAgICB5aWVsZCByZXANCiAgICBlbmQNCiAgZW5kDQoNCiAgZGVm IFJlcG9zaXRvcnkuYXJyYXkNCiAgICBAQHJlcG9zaXRvcmllcy52YWx1ZXMNCiAgZW5kDQoNCiAg ZGVmIHRvX3MNCiAgICBpZiB0cnVua19vbmx5Pw0KICAgICAgQG5hbWUNCiAgICBlbHNpZiBtaXhl ZF90YWdzPw0KICAgICAgIiN7QG5hbWV9QC4uIg0KICAgIGVsc2UNCiAgICAgICIje0BuYW1lfUAj e0BhbGxfdGFncy5rZXlzWzBdfSINCiAgICBlbmQNCiAgZW5kDQplbmQNCg0KY2xhc3MgRmlsZUVu dHJ5DQogIGRlZiBpbml0aWFsaXplKHBhdGgpDQogICAgQHBhdGggPSBwYXRoDQogICAgQGxpbmVB ZGRpdGlvbnMgPSBAbGluZVJlbW92YWxzID0gMA0KICAgIEByZXBvc2l0b3J5ID0gUmVwb3NpdG9y eS5nZXQocGF0aCkNCiAgICBAcmVwb3NpdG9yeS5tZXJnZV9jb21tb25fcHJlZml4KGJhc2VkaXIo KSkNCiAgICBAaXNFbXB0eSA9IEBpc0JpbmFyeSA9IGZhbHNlDQogIGVuZA0KDQogIGF0dHJfYWNj ZXNzb3IgOnBhdGgsIDp0eXBlLCA6bGluZUFkZGl0aW9ucywgOmxpbmVSZW1vdmFscywgOmlzQmlu YXJ5LCA6aXNFbXB0eSwgOmZyb21WZXIsIDp0b1Zlcg0KDQogIGRlZiBmaWxlDQogICAgQHBhdGgg PX4gLy4qXC8oLiopLw0KICAgICQxDQogIGVuZA0KDQogIGRlZiB0YWc9KG5hbWUpDQogICAgQHRh ZyA9IG5hbWUNCiAgICBAcmVwb3NpdG9yeS5hZGRfdGFnKG5hbWUpDQogIGVuZA0KDQogIGRlZiB0 YWcNCiAgICBAdGFnDQogIGVuZA0KDQogIGRlZiBiYXNlZGlyDQogICAgQHBhdGggPX4gLyguKilc Ly4qLw0KICAgICQxDQogIGVuZA0KDQogIGRlZiByZXBvc2l0b3J5DQogICAgQHJlcG9zaXRvcnkN CiAgZW5kDQoNCiAgZGVmIG5hbWVfYWZ0ZXJfY29tbW9uX3ByZWZpeA0KICAgIEBwYXRoLnNsaWNl KEByZXBvc2l0b3J5LmNvbW1vbl9wcmVmaXguc2l6ZSsxLEBwYXRoLnNpemUtQHJlcG9zaXRvcnku Y29tbW9uX3ByZWZpeC5zaXplLTEpDQogIGVuZA0KDQogIGRlZiByZW1vdmFsPw0KICAgIEB0eXBl ID09ICJSIg0KICBlbmQNCg0KICBkZWYgYWRkaXRpb24/DQogICAgQHR5cGUgPT0gIkEiDQogIGVu ZA0KDQogIGRlZiBtb2RpZmljYXRpb24/DQogICAgQHR5cGUgPT0gIk0iDQogIGVuZA0KZW5kDQoN Cg0KY2xhc3MgTGluZUNvbnN1bWVyDQogIGRlZiBoYW5kbGVMaW5lcyhsaW5lcywgZW1haWxJTykN CiAgICBAZW1haWxJTyA9IGVtYWlsSU8NCiAgICBAbGluZUNvdW50ID0gMA0KICAgIHNldHVwDQog ICAgbGluZXMuZWFjaCBkbyB8bGluZXwNCiAgICAgIEBsaW5lQ291bnQgKz0gMQ0KICAgICAgY29u c3VtZShsaW5lKQ0KICAgIGVuZA0KICAgIHRlYXJkb3duDQogIGVuZA0KDQogIGRlZiBzZXR1cA0K ICBlbmQNCg0KICBkZWYgdGVhcmRvd24NCiAgZW5kDQoNCiAgZGVmIGxpbmVubw0KICAgIEBsaW5l Q291bnQNCiAgZW5kDQoNCiAgZGVmIHByaW50bG4odGV4dCkNCiAgICBAZW1haWxJTy5wdXRzKHRl eHQpDQogIGVuZA0KDQogIGRlZiBwcmludCh0ZXh0KQ0KICAgIEBlbWFpbElPLnByaW50KHRleHQp DQogIGVuZA0KZW5kDQoNCg0KIyBUT0RPOiBjb25zb2xpZGF0ZSB0aGVzZSBpbnRvIGEgbmljZXIg ZnJhbWV3b3JrLA0KbWFpbFN1YiA9IHByb2MgeyB8bWF0Y2h8ICI8YSBocmVmPVwibWFpbHRvOiN7 bWF0Y2h9XCI+I3ttYXRjaH08L2E+IiB9DQp1cmxTdWIgPSBwcm9jIHsgfG1hdGNofCAiPGEgaHJl Zj1cIiN7bWF0Y2h9XCI+I3ttYXRjaH08L2E+IiB9DQpidWd6aWxsYVN1YiA9IHByb2MgeyB8bWF0 Y2h8DQogIG1hdGNoID1+IC8oWzAtOV0rKS8NCiAgIjxhIGhyZWY9XCIjeyRidWd6aWxsYVVSTC5z dWIoLyVzLywgJDEpfVwiPiN7bWF0Y2h9PC9hPiINCn0NCmppcmFTdWIgPSBwcm9jIHsgfG1hdGNo fA0KICAiPGEgaHJlZj1cIiN7JGppcmFVUkwuc3ViKC8lcy8sIG1hdGNoKX1cIj4je21hdGNofTwv YT4iDQp9DQp0aWNrZXRTdWIgPSBwcm9jIHsgfG1hdGNofA0KICBtYXRjaCA9fiAvKFswLTldKykv DQogICI8YSBocmVmPVwiI3skdGlja2V0VVJMLnN1YigvJXMvLCAkMSl9XCI+I3ttYXRjaH08L2E+ Ig0KfQ0KY29tbWVudFN1YnN0aXR1dGlvbnMgPSB7DQoJCScoPzptYWlsdG86KT9bXHdcLlwtXCtc PV0rXEBbXHdcLV0rKD86XC5bXHdcLV0rKStcYicgPT4gbWFpbFN1YiwNCgkJJ1xiKD86aHR0cHxo dHRwc3xmdHApOlteIFx0XG48PiJdK1tcdy9dJyA9PiB1cmxTdWJ9DQoNCg0KY2xhc3MgQ29tbWVu dEhhbmRsZXIgPCBMaW5lQ29uc3VtZXINCiAgZGVmIGluaXRpYWxpemUNCiAgICBAbGFzdENvbW1l bnQgPSBuaWwNCiAgZW5kDQoNCiAgZGVmIHNldHVwDQogICAgQGhhdmVCbGFuayA9IGZhbHNlDQog ICAgQGNvbW1lbnQgPSAiIg0KICBlbmQNCg0KICBkZWYgY29uc3VtZShsaW5lKQ0KICAgIGlmIGxp bmUgPX4gL15ccyokLw0KICAgICAgQGhhdmVCbGFuayA9IHRydWUNCiAgICBlbHNlDQogICAgICBp ZiBAaGF2ZUJsYW5rDQogICAgICAgIEBjb21tZW50ICs9ICJcbiINCiAgICAgICAgQGhhdmVCbGFu ayA9IGZhbHNlDQogICAgICBlbmQNCiAgICAgICRtYWlsU3ViamVjdCA9IGxpbmUgaWYgJG1haWxT dWJqZWN0ID09IG5pbA0KICAgICAgQGNvbW1lbnQgKz0gbGluZSArPSAiXG4iDQogICAgZW5kDQog IGVuZA0KDQogIGRlZiB0ZWFyZG93bg0KICAgIHVubGVzcyBAY29tbWVudCA9PSBAbGFzdENvbW1l bnQNCiAgICAgIHByaW50bG4oIjxwcmUgY2xhc3M9XCJjb21tZW50XCI+IikNCiAgICAgIGVuY29k ZWQgPSBodG1sRW5jb2RlKEBjb21tZW50KQ0KICAgICAgJGNvbW1lbnRFbmNvZGVyLmdzdWIhKGVu Y29kZWQpDQogICAgICBwcmludGxuKGVuY29kZWQpDQogICAgICBwcmludGxuKCI8L3ByZT4iKQ0K ICAgICAgQGxhc3RDb21tZW50ID0gQGNvbW1lbnQNCiAgICBlbmQNCiAgZW5kDQplbmQNCg0KDQpj bGFzcyBUYWdIYW5kbGVyIDwgTGluZUNvbnN1bWVyDQogIGRlZiBpbml0aWFsaXplDQogICAgQHRh ZyA9IG5pbA0KICBlbmQNCg0KICBkZWYgY29uc3VtZShsaW5lKQ0KICAgICMgVE9ETzogY2hlY2sg dGhlcmUgaXMgb25seSBvbmUgbGluZQ0KICAgIEB0YWcgPSBsaW5lDQogIGVuZA0KDQogIGRlZiBn ZXRMYXN0VGFnDQogICAgdG1wID0gQHRhZw0KICAgIEB0YWcgPSBuaWwNCiAgICB0bXANCiAgZW5k DQplbmQNCg0KY2xhc3MgVmVyc2lvbkhhbmRsZXIgPCBMaW5lQ29uc3VtZXINCiAgZGVmIGNvbnN1 bWUobGluZSkNCiAgICAjIFRPRE86IGNoZWNrIHRoZXJlIGlzIG9ubHkgb25lIGxpbmUNCiAgICAk ZnJvbVZlciwkdG9WZXIgPSBsaW5lLnNwbGl0KC8sLykNCiAgZW5kDQplbmQNCg0KDQpjbGFzcyBG aWxlSGFuZGxlciA8IExpbmVDb25zdW1lcg0KICBkZWYgc2V0VGFnSGFuZGxlcihoYW5kbGVyKQ0K ICAgIEB0YWdIYW5kbGVyID0gaGFuZGxlcg0KICBlbmQNCg0KICBkZWYgc2V0dXANCiAgICAkZmls ZUhlYWRlckh0bWwgPSAnJw0KICAgIHByaW50bG4oIjxociAvPjxhIG5hbWU9XCJmaWxlI3skZmls ZUVudHJpZXMuc2l6ZSsxfVwiIC8+PGRpdiBjbGFzcz1cImZpbGVcIj4iKQ0KICBlbmQNCg0KICBk ZWYgY29uc3VtZShsaW5lKQ0KICAgICRmaWxlID0gRmlsZUVudHJ5Lm5ldyhsaW5lKQ0KICAgICRm aWxlRW50cmllcyA8PCAkZmlsZQ0KICAgICRmaWxlLnRhZyA9IGdldFRhZw0KICAgIGhhbmRsZUZp bGUoJGZpbGUpDQogIGVuZA0KDQogcHJvdGVjdGVkDQogIGRlZiBnZXRUYWcNCiAgICBAdGFnSGFu ZGxlci5nZXRMYXN0VGFnDQogIGVuZA0KDQogIGRlZiBwcmludGxuKHRleHQpDQogICAgJGZpbGVI ZWFkZXJIdG1sIDw8IHRleHQgPDwgIlxuIg0KICBlbmQNCg0KICBkZWYgcHJpbnQodGV4dCkNCiAg ICAkZmlsZUhlYWRlckh0bWwgPDwgdGV4dA0KICBlbmQNCmVuZA0KDQoNCiMgZG9uJ3QgbWFrZSBh bnkgbGlua3MNCmNsYXNzIE5vRnJvbnRlbmQNCiAgZGVmIHBhdGgocGF0aCwgdGFnKQ0KICAgIGh0 bWxFbmNvZGUocGF0aCkNCiAgZW5kDQoNCiAgZGVmIHZlcnNpb24ocGF0aCwgdmVyc2lvbikNCiAg ICB2ZXJzaW9uDQogIGVuZA0KDQogIGRlZiBkaWZmKGZpbGUpDQogICAgJy0mZ3Q7Jw0KICBlbmQN CmVuZA0KDQojIFN1cGVyY2xhc3MgZm9yIG9iamVjdHMgdGhhdCBjYW4gbGluayB0byBDVlMgZnJv bnRlbmRzIG9uIHRoZSB3ZWIgKFZpZXdDVlMsDQojIENob3JhLCBldGMuKS4NCmNsYXNzIFdlYkZy b250ZW5kIDwgTm9Gcm9udGVuZA0KICBkZWYgaW5pdGlhbGl6ZShiYXNlX3VybCkNCiAgICBAYmFz ZV91cmwgPSBiYXNlX3VybA0KICBlbmQNCg0KICBkZWYgcGF0aChwYXRoLCB0YWcpDQogICAgcGF0 aF9mb3JfaHJlZiA9ICIiDQogICAgcmVzdWx0ID0gIiINCiAgICBwYXRoLnNwbGl0KCIvIikuZWFj aCBkbyB8Y29tcG9uZW50fA0KICAgICAgdW5sZXNzIHJlc3VsdCA9PSAiIg0KICAgICAgICByZXN1 bHQgPDwgIi8iDQogICAgICAgIHBhdGhfZm9yX2hyZWYgPDwgIi8iDQogICAgICBlbmQNCiAgICAg IHBhdGhfZm9yX2hyZWYgPDwgY29tcG9uZW50DQogICAgICByZXN1bHQgPDwgIjxhIGhyZWY9XCIj e3BhdGhfdXJsKHBhdGhfZm9yX2hyZWYsIHRhZyl9XCI+I3todG1sRW5jb2RlKGNvbXBvbmVudCl9 PC9hPiINCiAgICBlbmQNCiAgICByZXN1bHQNCiAgZW5kDQoNCiAgZGVmIHZlcnNpb24ocGF0aCwg dmVyc2lvbikNCiAgICAiPGEgaHJlZj1cIiN7dmVyc2lvbl91cmwocGF0aCwgdmVyc2lvbil9XCI+ I3t2ZXJzaW9ufTwvYT4iDQogIGVuZA0KDQogIGRlZiBkaWZmKGZpbGUpDQogICAgIjxhIGhyZWY9 XCIje2RpZmZfdXJsKGZpbGUpfVwiPiN7c3VwZXIoZmlsZSl9PC9hPiINCiAgZW5kDQplbmQNCg0K IyBMaW5rIHRvIFZpZXdDVlMNCmNsYXNzIFZpZXdDVlNGcm9udGVuZCA8IFdlYkZyb250ZW5kDQog IGRlZiBwYXRoX3VybChwYXRoLCB0YWcpDQogICAgaWYgdGFnID09IG5pbA0KICAgICAgQGJhc2Vf dXJsICsgdXJsRW5jb2RlKHBhdGgpDQogICAgZWxzZQ0KICAgICAgIiN7QGJhc2VfdXJsfSN7dXJs RW5jb2RlKHBhdGgpfT9vbmx5X3dpdGhfdGFnPSN7dXJsRW5jb2RlKHRhZyl9Ig0KICAgIGVuZA0K ICBlbmQNCg0KICBkZWYgdmVyc2lvbl91cmwocGF0aCwgdmVyc2lvbikNCiAgICAiI3tAYmFzZV91 cmx9I3t1cmxFbmNvZGUocGF0aCl9P3Jldj0je3ZlcnNpb259JmFtcDtjb250ZW50LXR5cGU9dGV4 dC92bmQudmlld2N2cy1tYXJrdXAiDQogIGVuZA0KDQogIGRlZiBkaWZmX3VybChmaWxlKQ0KICAg ICIje0BiYXNlX3VybH0je3VybEVuY29kZShmaWxlLnBhdGgpfS5kaWZmP3IxPSN7ZmlsZS5mcm9t VmVyfSZhbXA7cjI9I3tmaWxlLnRvVmVyfSINCiAgZW5kDQplbmQNCg0KIyBMaW5rIHRvIENob3Jh LCBmcm9tIHRoZSBIb2FyZCBmcmFtZXdvcmsNCmNsYXNzIENob3JhRnJvbnRlbmQgPCBXZWJGcm9u dGVuZA0KICBkZWYgcGF0aF91cmwocGF0aCwgdGFnKQ0KICAgICMgVE9ETzogY2FuIHdlIHBhc3Mg dGhlIHRhZyBzb21laG93Pw0KICAgICIje0BiYXNlX3VybH0vY3ZzLnBocC8je3VybEVuY29kZShw YXRoKX0iDQogIGVuZA0KDQogIGRlZiB2ZXJzaW9uX3VybChwYXRoLCB2ZXJzaW9uKQ0KICAgICIj e0BiYXNlX3VybH0vY28ucGhwLyN7dXJsRW5jb2RlKHBhdGgpfT9yPSN7dmVyc2lvbn0iDQogIGVu ZA0KDQogIGRlZiBkaWZmX3VybChmaWxlKQ0KICAgICIje0BiYXNlX3VybH0vZGlmZi5waHAvI3t1 cmxFbmNvZGUoZmlsZS5wYXRoKX0/cjE9I3tmaWxlLmZyb21WZXJ9JnIyPSN7ZmlsZS50b1Zlcn0i DQogIGVuZA0KZW5kDQoNCiMgTGluayB0byBDVlN3ZWINCmNsYXNzIENWU3dlYkZyb250ZW5kIDwg V2ViRnJvbnRlbmQNCiAgZGVmIHBhdGhfdXJsKHBhdGgsIHRhZykNCiAgICBpZiB0YWcgPT0gbmls DQogICAgICBAYmFzZV91cmwgKyB1cmxFbmNvZGUocGF0aCkNCiAgICBlbHNlDQogICAgICAiI3tA YmFzZV91cmx9I3t1cmxFbmNvZGUocGF0aCl9P29ubHlfd2l0aF90YWc9I3t1cmxFbmNvZGUodGFn KX0iDQogICAgZW5kDQogIGVuZA0KDQogIGRlZiB2ZXJzaW9uX3VybChwYXRoLCB2ZXJzaW9uKQ0K ICAgICIje0BiYXNlX3VybH0je3VybEVuY29kZShwYXRoKX0/cmV2PSN7dmVyc2lvbn0mYW1wO2Nv bnRlbnQtdHlwZT10ZXh0L3gtY3Zzd2ViLW1hcmt1cCINCiAgZW5kDQoNCiAgZGVmIGRpZmZfdXJs KGZpbGUpDQogICAgIiN7QGJhc2VfdXJsfSN7dXJsRW5jb2RlKGZpbGUucGF0aCl9LmRpZmY/cjE9 dGV4dCZhbXA7dHIxPSN7ZmlsZS5mcm9tVmVyfSZhbXA7cjI9dGV4dCZhbXA7dHIyPSN7ZmlsZS50 b1Zlcn0mYW1wO2Y9aCINCiAgZW5kDQplbmQNCg0KDQojIGluIG5lZWQgb2YgcmVmYWN0b3Jpbmcu Li4NCg0KY2xhc3MgQWRkZWRGaWxlSGFuZGxlciA8IEZpbGVIYW5kbGVyDQogIGRlZiBoYW5kbGVG aWxlKGZpbGUpDQogICAgZmlsZS50eXBlPSJBIg0KICAgIGZpbGUudG9WZXI9JHRvVmVyDQogICAg cHJpbnQoIjxzcGFuIGNsYXNzPVwicGF0aG5hbWVcIiBpZD1cImFkZGVkXCI+IikNCiAgICBwcmlu dCgkZnJvbnRlbmQucGF0aChmaWxlLmJhc2VkaXIsIGZpbGUudGFnKSkNCiAgICBwcmludGxuKCI8 YnIgLz48L3NwYW4+IikNCiAgICBwcmludGxuKCI8ZGl2IGNsYXNzPVwiZmlsZWhlYWRlclwiIGlk PVwiYWRkZWRcIj48YmlnPjxiPiN7aHRtbEVuY29kZShmaWxlLmZpbGUpfTwvYj48L2JpZz4gPHNt YWxsIGlkPVwiaW5mb1wiPmFkZGVkIGF0ICN7JGZyb250ZW5kLnZlcnNpb24oZmlsZS5wYXRoLGZp bGUudG9WZXIpfTwvc21hbGw+PC9kaXY+IikNCiAgZW5kDQplbmQNCg0KY2xhc3MgUmVtb3ZlZEZp bGVIYW5kbGVyIDwgRmlsZUhhbmRsZXINCiAgZGVmIGhhbmRsZUZpbGUoZmlsZSkNCiAgICBmaWxl LnR5cGU9IlIiDQogICAgZmlsZS5mcm9tVmVyPSRmcm9tVmVyDQogICAgcHJpbnQoIjxzcGFuIGNs YXNzPVwicGF0aG5hbWVcIiBpZD1cInJlbW92ZWRcIj4iKQ0KICAgIHByaW50KCRmcm9udGVuZC5w YXRoKGZpbGUuYmFzZWRpciwgZmlsZS50YWcpKQ0KICAgIHByaW50bG4oIjxiciAvPjwvc3Bhbj4i KQ0KICAgIHByaW50bG4oIjxkaXYgY2xhc3M9XCJmaWxlaGVhZGVyXCIgaWQ9XCJyZW1vdmVkXCI+ PGJpZz48Yj4je2h0bWxFbmNvZGUoZmlsZS5maWxlKX08L2I+PC9iaWc+IDxzbWFsbCBpZD1cImlu Zm9cIj5yZW1vdmVkIGFmdGVyICN7JGZyb250ZW5kLnZlcnNpb24oZmlsZS5wYXRoLGZpbGUuZnJv bVZlcil9PC9zbWFsbD48L2Rpdj4iKQ0KICBlbmQNCmVuZA0KDQpjbGFzcyBNb2RpZmllZEZpbGVI YW5kbGVyIDwgRmlsZUhhbmRsZXINCiAgZGVmIGhhbmRsZUZpbGUoZmlsZSkNCiAgICBmaWxlLnR5 cGU9Ik0iDQogICAgZmlsZS5mcm9tVmVyPSRmcm9tVmVyDQogICAgZmlsZS50b1Zlcj0kdG9WZXIN CiAgICBwcmludCgiPHNwYW4gY2xhc3M9XCJwYXRobmFtZVwiPiIpDQogICAgcHJpbnQoJGZyb250 ZW5kLnBhdGgoZmlsZS5iYXNlZGlyLCBmaWxlLnRhZykpDQogICAgcHJpbnRsbigiPGJyIC8+PC9z cGFuPiIpDQogICAgcHJpbnRsbigiPGRpdiBjbGFzcz1cImZpbGVoZWFkZXJcIj48YmlnPjxiPiN7 aHRtbEVuY29kZShmaWxlLmZpbGUpfTwvYj48L2JpZz4gPHNtYWxsIGlkPVwiaW5mb1wiPiN7JGZy b250ZW5kLnZlcnNpb24oZmlsZS5wYXRoLGZpbGUuZnJvbVZlcil9ICN7JGZyb250ZW5kLmRpZmYo ZmlsZSl9ICN7JGZyb250ZW5kLnZlcnNpb24oZmlsZS5wYXRoLGZpbGUudG9WZXIpfTwvc21hbGw+ PC9kaXY+IikNCiAgZW5kDQplbmQNCg0KDQpjbGFzcyBVbmlmaWVkRGlmZlN0YXRzDQogIGRlZiBp bml0aWFsaXplDQogICAgQGRpZmZMaW5lcz0zICAjIHRoZSB0aHJlZSBpbml0aWFsIGxpbmVzIGlu IHRoZSB1bmlkaWZmDQogIGVuZA0KDQogIGRlZiBkaWZmTGluZXMNCiAgICBAZGlmZkxpbmVzDQog IGVuZA0KDQogIGRlZiBjb25zdW1lKGxpbmUpDQogICAgQGRpZmZMaW5lcyArPSAxDQogICAgY2Fz ZSBsaW5lWzAsMV0NCiAgICAgIHdoZW4gIisiIHRoZW4gJGZpbGUubGluZUFkZGl0aW9ucyArPSAx DQogICAgICB3aGVuICItIiB0aGVuICRmaWxlLmxpbmVSZW1vdmFscyArPSAxDQogICAgZW5kDQog IGVuZA0KZW5kDQoNCiMgVE9ETzogY2hhbmdlLXdpdGhpbi1saW5lIGNvbG91cmlzYXRpb24gc2hv dWxkIHJlYWxseSBiZSBjb21wYXJpbmcgdGhlDQojICAgICAgIHNldCBvZiBsaW5lcyBqdXN0IHJl bW92ZWQgd2l0aCB0aGUgc2V0IG9mIGxpbmVzIGp1c3QgYWRkZWQsIGJ1dA0KIyAgICAgICBpdCBj dXJyZW50bHkgY29uc2lkZXJzIGp1c3QgYSBzaW5nbGUgbGluZQ0KDQpjbGFzcyBVbmlmaWVkRGlm ZkNvbG91cmlzZXIgPCBMaW5lQ29uc3VtZXINCiAgZGVmIGluaXRpYWxpemUNCiAgICBAY3VycmVu dFN0YXRlID0gIkAiDQogICAgQGN1cnJlbnRTdHlsZSA9ICJpbmZvIg0KICAgIEBsaW5lSnVzdERl bGV0ZWQgPSBuaWwNCiAgZW5kDQoNCiAgZGVmIG91dHB1dD0oaW8pDQogICAgQGVtYWlsSU8gPSBp bw0KICBlbmQNCg0KICBkZWYgY29uc3VtZShsaW5lKQ0KICAgIGluaXRpYWwgPSBsaW5lWzAsMV0N CiAgICBpZiBpbml0aWFsICE9IEBjdXJyZW50U3RhdGUNCiAgICAgIHByZWZpeExlbiA9IDENCiAg ICAgIHN1ZmZpeExlbiA9IDANCiAgICAgIGlmIGluaXRpYWw9PSIrIiAmJiBAY3VycmVudFN0YXRl PT0iLSIgJiYgQGxpbmVKdXN0RGVsZXRlZCE9bmlsDQogICAgICAgICMgbWF5IGJlIGFuIGVkaXQs IHRyeSB0byBoaWdobGlnaHQgdGhlIGNoYW5nZXMgcGFydCBvZiB0aGUgbGluZQ0KICAgICAgICBh ID0gbGluZVsxLGxpbmUubGVuZ3RoLTFdDQogICAgICAgIGIgPSBAbGluZUp1c3REZWxldGVkWzEs QGxpbmVKdXN0RGVsZXRlZC5sZW5ndGgtMV0NCiAgICAgICAgcHJlZml4TGVuID0gY29tbW9uUHJl Zml4TGVuZ3RoKGEsIGIpKzENCiAgICAgICAgc3VmZml4TGVuID0gY29tbW9uUHJlZml4TGVuZ3Ro KGEucmV2ZXJzZSwgYi5yZXZlcnNlKQ0KICAgICAgICAjIHByZXZlbnQgcHJlZml4L3N1ZmZ1eCBo YXZpbmcgb3ZlcmxhcCwNCiAgICAgICAgc3VmZml4TGVuID0gbWluKHN1ZmZpeExlbiwgbWluKGxp bmUubGVuZ3RoLEBsaW5lSnVzdERlbGV0ZWQubGVuZ3RoKS1wcmVmaXhMZW4pDQogICAgICAgIGRl bGV0ZUluZml4U2l6ZSA9IEBsaW5lSnVzdERlbGV0ZWQubGVuZ3RoIC0gKHByZWZpeExlbitzdWZm aXhMZW4pDQogICAgICAgIGFkZEluZml4U2l6ZSA9IGxpbmUubGVuZ3RoIC0gKHByZWZpeExlbitz dWZmaXhMZW4pDQogICAgICAgIG92ZXJzaXplX2NoYW5nZSA9IGRlbGV0ZUluZml4U2l6ZSoxMDAv QGxpbmVKdXN0RGVsZXRlZC5sZW5ndGg+MzMgfHwgYWRkSW5maXhTaXplKjEwMC9saW5lLmxlbmd0 aD4zMw0KDQogICAgICAgIGlmIHByZWZpeExlbj09MSAmJiBzdWZmaXhMZW49PTAgfHwgZGVsZXRl SW5maXhTaXplPD0wIHx8IG92ZXJzaXplX2NoYW5nZQ0KICAgICAgICAgIHByaW50bG4oaHRtbEVu Y29kZShAbGluZUp1c3REZWxldGVkKSkNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHByaW50KGh0 bWxFbmNvZGUoQGxpbmVKdXN0RGVsZXRlZFswLHByZWZpeExlbl0pKQ0KICAgICAgICAgIHByaW50 KCI8c3BhbiBpZD1cInJlbW92ZWRjaGFyc1wiPiIpDQogICAgICAgICAgcHJpbnQoZm9ybWF0Q2hh bmdlKEBsaW5lSnVzdERlbGV0ZWRbcHJlZml4TGVuLGRlbGV0ZUluZml4U2l6ZV0pKQ0KICAgICAg ICAgIHByaW50KCI8L3NwYW4+IikNCiAgICAgICAgICBwcmludGxuKGh0bWxFbmNvZGUoQGxpbmVK dXN0RGVsZXRlZFtAbGluZUp1c3REZWxldGVkLmxlbmd0aC1zdWZmaXhMZW4sc3VmZml4TGVuXSkp DQogICAgICAgIGVuZA0KICAgICAgICBAbGluZUp1c3REZWxldGVkID0gbmlsDQogICAgICBlbmQN CiAgICAgIGlmIGluaXRpYWw9PSItIg0KICAgICAgICBAbGluZUp1c3REZWxldGVkPWxpbmUNCiAg ICAgICAgc2hpZnQoaW5pdGlhbCkNCiAgICAgICAgIyB3ZSdsbCBwcmludCBpdCBuZXh0IHRpbWUg KGZpbmdlcnMgY3Jvc3NlZCkNCiAgICAgICAgcmV0dXJuDQogICAgICBlbHNpZiBAbGluZUp1c3RE ZWxldGVkIT1uaWwNCiAgICAgICAgcHJpbnRsbihodG1sRW5jb2RlKEBsaW5lSnVzdERlbGV0ZWQp KQ0KICAgICAgICBAbGluZUp1c3REZWxldGVkID0gbmlsDQogICAgICBlbmQNCiAgICAgIHNoaWZ0 KGluaXRpYWwpDQogICAgICBpZiBwcmVmaXhMZW49PTEgJiYgc3VmZml4TGVuPT0wIHx8IGFkZElu Zml4U2l6ZTw9MCB8fCBvdmVyc2l6ZV9jaGFuZ2UNCiAgICAgICAgZW5jb2RlZCA9IGh0bWxFbmNv ZGUobGluZSkNCiAgICAgIGVsc2UNCiAgICAgICAgZW5jb2RlZCA9IGh0bWxFbmNvZGUobGluZVsw LHByZWZpeExlbl0pICsNCiAgICAgICAgIjxzcGFuIGlkPVwiYWRkZWRjaGFyc1wiPiIgKw0KICAg ICAgICBmb3JtYXRDaGFuZ2UobGluZVtwcmVmaXhMZW4sYWRkSW5maXhTaXplXSkgKw0KICAgICAg ICAiPC9zcGFuPiIgKw0KICAgICAgICBodG1sRW5jb2RlKGxpbmVbbGluZS5sZW5ndGgtc3VmZml4 TGVuLHN1ZmZpeExlbl0pDQogICAgICBlbmQNCiAgICBlbHNlDQogICAgICBlbmNvZGVkID0gaHRt bEVuY29kZShsaW5lKQ0KICAgIGVuZA0KICAgIGlmIGluaXRpYWw9PSItIg0KICAgICAgdW5sZXNz IEBsaW5lSnVzdERlbGV0ZWQ9PW5pbA0KICAgICAgICBwcmludGxuKGh0bWxFbmNvZGUoQGxpbmVK dXN0RGVsZXRlZCkpDQogICAgICAgIEBsaW5lSnVzdERlbGV0ZWQ9bmlsDQogICAgICBlbmQNCiAg ICBlbmQNCiAgICBpZiBpbml0aWFsPT0iKyINCiAgICAgICR0YXNrX2tleXdvcmRzLmVhY2ggZG8g fHRhc2t8DQogICAgICAgIGlmIGxpbmUgPX4gL1xiKCN7dGFza31cYi4qKS8NCiAgICAgICAgICAk dGFza19saXN0IDw8ICQxDQogICAgICAgICAgZW5jb2RlZC5zdWIhKC9cYiN7dGFza31cYi8sICI8 c3BhbiBjbGFzcz1cInRhc2tcIj4je3Rhc2t9PC9zcGFuPiIpDQogICAgICAgICAgZW5jb2RlZCA9 ICI8YSBuYW1lPVwidGFzayN7JHRhc2tfbGlzdC5zaXplfVwiIC8+IiArIGVuY29kZWQNCiAgICAg ICAgICBicmVhaw0KICAgICAgICBlbmQNCiAgICAgIGVuZA0KICAgIGVuZA0KICAgIHByaW50bG4o ZW5jb2RlZCkNCiAgZW5kDQoNCiAgZGVmIHRlYXJkb3duDQogICAgdW5sZXNzIEBsaW5lSnVzdERl bGV0ZWQ9PW5pbA0KICAgICAgcHJpbnRsbihodG1sRW5jb2RlKEBsaW5lSnVzdERlbGV0ZWQpKQ0K ICAgICAgQGxpbmVKdXN0RGVsZXRlZCA9IG5pbA0KICAgIGVuZA0KICAgIHNoaWZ0KG5pbCkNCiAg ZW5kDQoNCiBwcml2YXRlDQoNCiAgZGVmIGZvcm1hdENoYW5nZSh0ZXh0KQ0KICAgIHJldHVybiAn PHNtYWxsIGlkPSJpbmZvIj5eTTwvc21hbGw+JyBpZiB0ZXh0PT0iXHIiDQogICAgaHRtbEVuY29k ZSh0ZXh0KS5nc3ViKC8gLywgJyZuYnNwOycpDQogIGVuZA0KDQogIGRlZiBzaGlmdChuZXh0U3Rh dGUpDQogICAgdW5sZXNzIEBjdXJyZW50U3RhdGUgPT0gbmlsDQogICAgICBpZiBAY3VycmVudFN0 eWxlID09ICJpbmZvIg0KICAgICAgICBwcmludCgiPC9zbWFsbD48L3ByZT4iKQ0KICAgICAgZWxz ZQ0KICAgICAgICBwcmludCgiPC9wcmU+IikNCiAgICAgIGVuZA0KICAgICAgQGN1cnJlbnRTdHls ZSA9IGNhc2UgbmV4dFN0YXRlDQogICAgICAgIHdoZW4gIlxcIiB0aGVuICJpbmZvIiAjIGFzIGlu ICdcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnDQogICAgICAgIHdoZW4gIkAiIHRoZW4gImlu Zm8iDQogICAgICAgIHdoZW4gIiAiIHRoZW4gImNvbnRleHQiDQogICAgICAgIHdoZW4gIisiIHRo ZW4gImFkZGVkIg0KICAgICAgICB3aGVuICItIiB0aGVuICJyZW1vdmVkIg0KICAgICAgZW5kDQog ICAgICB1bmxlc3MgbmV4dFN0YXRlID09IG5pbA0KICAgICAgICBpZiBAY3VycmVudFN0eWxlPT0n aW5mbycNCiAgICAgICAgICBwcmludCgiPHByZSBjbGFzcz1cImRpZmZcIj48c21hbGwgaWQ9XCJp bmZvXCI+IikNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHByaW50KCI8cHJlIGNsYXNzPVwiZGlm ZlwiIGlkPVwiI3tAY3VycmVudFN0eWxlfVwiPiIpDQogICAgICAgIGVuZA0KICAgICAgZW5kDQog ICAgZW5kDQogICAgQGN1cnJlbnRTdGF0ZSA9IG5leHRTdGF0ZQ0KICBlbmQNCg0KICBkZWYgY29t bW9uUHJlZml4TGVuZ3RoKGEsIGIpDQogICAgbGVuZ3RoID0gMA0KICAgIGEuZWFjaF9ieXRlIGRv IHxjaGFyfA0KICAgICAgYnJlYWsgdW5sZXNzIGJbbGVuZ3RoXT09Y2hhcg0KICAgICAgbGVuZ3Ro ID0gbGVuZ3RoICsgMQ0KICAgIGVuZA0KICAgIHJldHVybiBsZW5ndGgNCiAgZW5kDQplbmQNCg0K DQpjbGFzcyBVbmlmaWVkRGlmZkhhbmRsZXIgPCBMaW5lQ29uc3VtZXINCiAgZGVmIHNldHVwDQog ICAgQHN0YXRzID0gVW5pZmllZERpZmZTdGF0cy5uZXcNCiAgICBAY29sb3VyID0gVW5pZmllZERp ZmZDb2xvdXJpc2VyLm5ldw0KICAgIEBjb2xvdXIub3V0cHV0ID0gQGVtYWlsSU8NCiAgICBAbG9v a2FoZWFkID0gbmlsDQogIGVuZA0KDQogIGRlZiBjb25zdW1lKGxpbmUpDQogICAgY2FzZSBsaW5l bm8oKQ0KICAgICB3aGVuIDENCiAgICAgIEBkaWZmbGluZSA9IGxpbmUNCiAgICAgd2hlbiAyDQog ICAgICBAbG9va2FoZWFkID0gbGluZQ0KICAgICB3aGVuIDMNCiAgICAgIHByaW50bG4oJGZpbGVI ZWFkZXJIdG1sKQ0KICAgICAgIyBUT0RPOiBtb3ZlIHRvIFVuaWZpZWREaWZmQ29sb3VyaXNlcg0K ICAgICAgcHJpbnQoIjxwcmUgY2xhc3M9XCJkaWZmXCI+PHNtYWxsIGlkPVwiaW5mb1wiPiIpDQog ICAgICBwcmludGxuKGh0bWxFbmNvZGUoQGRpZmZsaW5lKSkgICMgJ2RpZmYgLi4uJw0KICAgICAg cHJpbnRsbihodG1sRW5jb2RlKEBsb29rYWhlYWQpKSAjICctLS0gLi4uJw0KICAgICAgcHJpbnRs bihodG1sRW5jb2RlKGxpbmUpKSAgICAgICMgJysrKyAuLi4nDQogICAgIGVsc2UNCiAgICAgIHVu bGVzcyAkZmlsZS5yZW1vdmFsPyAmJiAkbm9fcmVtb3ZlZF9maWxlX2RpZmYNCiAgICAgICAgQHN0 YXRzLmNvbnN1bWUobGluZSkNCiAgICAgIGVuZA0KICAgICAgaWYgQHN0YXRzLmRpZmZMaW5lcyA8 ICRtYXhMaW5lc1BlckRpZmYNCiAgICAgICAgQGNvbG91ci5jb25zdW1lKGxpbmUpDQogICAgICBl bHNpZiBAc3RhdHMuZGlmZkxpbmVzID09ICRtYXhMaW5lc1BlckRpZmYNCiAgICAgICAgQGNvbG91 ci5jb25zdW1lKGxpbmUpDQogICAgICAgIEBjb2xvdXIudGVhcmRvd24NCiAgICAgIGVuZA0KICAg IGVuZA0KICBlbmQNCg0KICBkZWYgdGVhcmRvd24NCiAgICBpZiBAbG9va2FoZWFkID09IG5pbA0K ICAgICAgJGZpbGUuaXNFbXB0eSA9IHRydWUNCiAgICBlbHNpZiBAbG9va2FoZWFkICA9fiAvQmlu YXJ5IGZpbGVzIC4qIGFuZCAuKiBkaWZmZXIvDQogICAgICAkZmlsZS5pc0JpbmFyeSA9IHRydWUN CiAgICBlbHNlDQogICAgICB1bmxlc3MgJGZpbGUucmVtb3ZhbD8gJiYgJG5vX3JlbW92ZWRfZmls ZV9kaWZmDQogICAgICAgIGlmIEBzdGF0cy5kaWZmTGluZXMgPiAkbWF4TGluZXNQZXJEaWZmDQog ICAgICAgICAgcHJpbnRsbigiPC9wcmU+IikNCiAgICAgICAgICBwcmludGxuKCI8c3Ryb25nIGNs YXNzPVwiZXJyb3JcIj5bdHJ1bmNhdGVkIGF0ICN7JG1heExpbmVzUGVyRGlmZn0gbGluZXM7ICN7 QHN0YXRzLmRpZmZMaW5lcy0kbWF4TGluZXNQZXJEaWZmfSBtb3JlIHNraXBwZWRdPC9zdHJvbmc+ IikNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIEBjb2xvdXIudGVhcmRvd24NCiAgICAgICAgZW5k DQogICAgICAgIHByaW50bG4oIjwvZGl2PiIpICMgZW5kIG9mICJmaWxlIiBkaXYNCiAgICAgIGVu ZA0KICAgIGVuZA0KICBlbmQNCmVuZA0KDQoNCg0KDQoNCg0KDQoNCg0KJGNvbmZpZyA9ICIvY3ln ZHJpdmUvZi9DVlMvQ1ZTUk9PVC9jdnNzcGFtLmNvbmYiDQoNCiRkZWJ1ZyA9IGZhbHNlDQokcmVj aXBpZW50cyA9IEFycmF5Lm5ldw0KJHNlbmRtYWlsX3Byb2cgPSAiL2N5Z2RyaXZlL2YvY3lnd2lu L3Vzci9zYmluL3NzbXRwLmV4ZSAtdCINCiRub19yZW1vdmVkX2ZpbGVfZGlmZiA9IGZhbHNlDQok dGFza19rZXl3b3JkcyA9IFsnVE9ETycsICdGSVhNRSddDQokYnVnemlsbGFVUkwgPSBuaWwNCiRq aXJhVVJMID0gbmlsDQokdGlja2V0VVJMID0gbmlsDQokZnJvbV9hZGRyZXNzID0gbmlsDQokc3Vi amVjdFByZWZpeCA9IG5pbA0KJGZpbGVzX2luX3N1YmplY3QgPSBmYWxzZTsNCg0KcmVxdWlyZSAn Z2V0b3B0bG9uZycNCg0Kb3B0cyA9IEdldG9wdExvbmcubmV3KA0KICBbICItLXRvIiwgICAgICIt dCIsIEdldG9wdExvbmc6OlJFUVVJUkVEX0FSR1VNRU5UIF0sDQogIFsgIi0tY29uZmlnIiwgIi1j IiwgR2V0b3B0TG9uZzo6UkVRVUlSRURfQVJHVU1FTlQgXSwNCiAgWyAiLS1kZWJ1ZyIsICAiLWQi LCBHZXRvcHRMb25nOjpOT19BUkdVTUVOVCBdLA0KICBbICItLWZyb20iLCAgICItdSIsIEdldG9w dExvbmc6OlJFUVVJUkVEX0FSR1VNRU5UIF0NCikNCg0Kb3B0cy5lYWNoIGRvIHxvcHQsIGFyZ3wN CiAgJHJlY2lwaWVudHMgPDwgYXJnIGlmIG9wdD09Ii0tdG8iDQogICRjb25maWcgPSBhcmcgaWYg b3B0PT0iLS1jb25maWciDQogICRkZWJ1ZyA9IHRydWUgaWYgb3B0PT0iLS1kZWJ1ZyINCiAgJGZy b21fYWRkcmVzcyA9IGFyZyBpZiBvcHQ9PSItLWZyb20iDQplbmQNCg0KDQppZiBBUkdWLmxlbmd0 aCAhPSAxDQogIGlmIEFSR1YubGVuZ3RoID4gMQ0KICAgICRzdGRlcnIucHV0cyAiZXh0cmEgYXJn dW1lbnRzIG5vdCBuZWVkZWQ6ICN7QVJHVlsxLCBBUkdWLmxlbmd0aC0xXS5qb2luKCcsICcpfSIN CiAgZWxzZQ0KICAgICRzdGRlcnIucHV0cyAibWlzc2luZyByZXF1aXJlZCBmaWxlIGFyZ3VtZW50 Ig0KICBlbmQNCiAgcHV0cyAiVXNhZ2U6IGN2c3NwYW0ucmIgWyAtLXRvIDxlbWFpbD4gXSBbIC0t Y29uZmlnIDxmaWxlPiBdIDxjb2xsZWN0X2RpZmZzIGZpbGU+Ig0KICBleGl0KC0xKQ0KZW5kDQoN CiRsb2dmaWxlID0gQVJHVlswXQ0KDQoNCiRhZGRpdGlvbmFsSGVhZGVycyA9IEFycmF5Lm5ldw0K JHByb2JsZW1IZWFkZXJzID0gQXJyYXkubmV3DQoNCiMgaGVscGVyIGZ1bmN0aW9ucyBjYWxsZWQg ZnJvbSB0aGUgJ2NvbmZpZyBmaWxlJw0KZGVmIGFkZEhlYWRlcihuYW1lLCB2YWx1ZSkNCiAgaWYg bmFtZSA9fiAvXlshLTk7LX5dKyQvDQogICAgJGFkZGl0aW9uYWxIZWFkZXJzIDw8IFtuYW1lLCB2 YWx1ZV0NCiAgZWxzZQ0KICAgICRwcm9ibGVtSGVhZGVycyA8PCBbbmFtZSwgdmFsdWVdDQogIGVu ZA0KZW5kDQpkZWYgYWRkUmVjaXBpZW50KGVtYWlsKQ0KICAkcmVjaXBpZW50cyA8PCBlbWFpbA0K ZW5kDQoNCmlmIEZpbGVUZXN0LmV4aXN0cz8oJGNvbmZpZykNCiAgbG9hZCAkY29uZmlnDQplbHNl DQogIGJsYWgoIkNvbmZpZyBmaWxlICcjeyRjb25maWd9JyBub3QgZm91bmQsIGlnbm9yaW5nIikN CmVuZA0KDQppZiAkcmVjaXBpZW50cy5lbXB0eT8NCiAgZmFpbCAiTm8gZW1haWwgcmVjaXBpZW50 cyBkZWZpbmVkIg0KZW5kDQoNCmlmICR2aWV3Y3ZzVVJMICE9IG5pbA0KICAkdmlld2N2c1VSTCA8 PCAiLyIgdW5sZXNzICR2aWV3Y3ZzVVJMID1+IC9cLyQvDQogICRmcm9udGVuZCA9IFZpZXdDVlNG cm9udGVuZC5uZXcoJHZpZXdjdnNVUkwpDQplbHNpZiAkY2hvcmFVUkwgIT1uaWwNCiAgJGZyb250 ZW5kID0gQ2hvcmFGcm9udGVuZC5uZXcoJGNob3JhVVJMKQ0KZWxzaWYgJGN2c3dlYlVSTCAhPW5p bA0KICAkY3Zzd2ViVVJMIDw8ICIvIiB1bmxlc3MgJGN2c3dlYlVSTCA9fiAvXC8kLw0KICAkZnJv bnRlbmQgPSBDVlN3ZWJGcm9udGVuZC5uZXcoJGN2c3dlYlVSTCkNCmVsc2UNCiAgJGZyb250ZW5k ID0gTm9Gcm9udGVuZC5uZXcNCmVuZA0KDQppZiAkYnVnemlsbGFVUkwgIT0gbmlsDQogIGNvbW1l bnRTdWJzdGl0dXRpb25zWydcYltCYl1bVXVdW0dnXVxzKiM/WzAtOV0rJ10gPSBidWd6aWxsYVN1 Yg0KZW5kDQppZiAkamlyYVVSTCAhPSBuaWwNCiAgY29tbWVudFN1YnN0aXR1dGlvbnNbJ1xiW2Et ekEtWl0rLVswLTldK1xiJ10gPSBqaXJhU3ViDQplbmQNCmlmICR0aWNrZXRVUkwgIT0gbmlsDQog IGNvbW1lbnRTdWJzdGl0dXRpb25zWydcYltUdF1bSWldW0NjXVtLa11bRWVdW1R0XVxzKiM/WzAt OV0rXGInXSA9IHRpY2tldFN1Yg0KZW5kDQokY29tbWVudEVuY29kZXIgPSBNdWx0aVN1Yi5uZXco Y29tbWVudFN1YnN0aXR1dGlvbnMpDQoNCg0KdGFnSGFuZGxlciA9IFRhZ0hhbmRsZXIubmV3DQoN CiRoYW5kbGVycyA9IEhhc2hbIj4iID0+IENvbW1lbnRIYW5kbGVyLm5ldywNCgkJICJVIiA9PiBV bmlmaWVkRGlmZkhhbmRsZXIubmV3LA0KCQkgIlQiID0+IHRhZ0hhbmRsZXIsDQoJCSAiQSIgPT4g QWRkZWRGaWxlSGFuZGxlci5uZXcsDQoJCSAiUiIgPT4gUmVtb3ZlZEZpbGVIYW5kbGVyLm5ldywN CgkJICJNIiA9PiBNb2RpZmllZEZpbGVIYW5kbGVyLm5ldywNCgkJICJWIiA9PiBWZXJzaW9uSGFu ZGxlci5uZXddDQoNCiRoYW5kbGVyc1siQSJdLnNldFRhZ0hhbmRsZXIodGFnSGFuZGxlcikNCiRo YW5kbGVyc1siUiJdLnNldFRhZ0hhbmRsZXIodGFnSGFuZGxlcikNCiRoYW5kbGVyc1siTSJdLnNl dFRhZ0hhbmRsZXIodGFnSGFuZGxlcikNCg0KJGZpbGVFbnRyaWVzID0gQXJyYXkubmV3DQokdGFz a19saXN0ID0gQXJyYXkubmV3DQokYWxsVGFncyA9IEhhc2gubmV3DQoNCkZpbGUub3BlbigiI3sk bG9nZmlsZX0uZW1haWx0bXAiLCBGaWxlOjpSRFdSfEZpbGU6OkNSRUFUfEZpbGU6OlRSVU5DKSBk byB8bWFpbHwNCg0KICBGaWxlLm9wZW4oJGxvZ2ZpbGUpIGRvIHxsb2d8DQogICAgcmVhZGVyID0g TG9nUmVhZGVyLm5ldyhsb2cpDQoNCiAgICB1bnRpbCByZWFkZXIuZW9mDQogICAgICBoYW5kbGVy ID0gJGhhbmRsZXJzW3JlYWRlci5jdXJyZW50TGluZUNvZGVdDQogICAgICBpZiBoYW5kbGVyID09 IG5pbA0KICAgICAgICByYWlzZSAiTm8gaGFuZGxlciBmaWxlIGxpbmVzIG1hcmtlZCAnIyN7cmVh ZGVyLmN1cnJlbnRMaW5lQ29kZX0nIg0KICAgICAgZW5kDQogICAgICBoYW5kbGVyLmhhbmRsZUxp bmVzKHJlYWRlci5nZXRMaW5lcywgbWFpbCkNCiAgICBlbmQNCiAgZW5kDQplbmQNCg0KaWYgJHN1 YmplY3RQcmVmaXggPT0gbmlsDQogICRzdWJqZWN0UHJlZml4ID0gIltDVlMgI3tSZXBvc2l0b3J5 LmFycmF5LmpvaW4oJywnKX1dIg0KZW5kDQoNCmlmICRmaWxlc19pbl9zdWJqZWN0DQogIGFsbF9m aWxlcyA9ICIiDQogICRmaWxlRW50cmllcy5lYWNoIGRvIHxmaWxlfA0KICAgIG5hbWUgPSBodG1s RW5jb2RlKGZpbGUubmFtZV9hZnRlcl9jb21tb25fcHJlZml4KQ0KICAgIGlmIGFsbF9maWxlcyAh PSAiIg0KICAgICAgYWxsX2ZpbGVzID0gYWxsX2ZpbGVzICsgIjsiICsgbmFtZQ0KICAgIGVsc2UN CiAgICAgIGFsbF9maWxlcyA9IG5hbWUNCiAgICBlbmQNCiAgZW5kDQogICRtYWlsU3ViamVjdCA9 IGFsbF9maWxlcyArICI6IiArICRtYWlsU3ViamVjdA0KZW5kDQoNCm1haWxTdWJqZWN0ID0gIiN7 JHN1YmplY3RQcmVmaXh9ICN7JG1haWxTdWJqZWN0fSINCmlmIG1haWxTdWJqZWN0Lmxlbmd0aCA+ ICRtYXhTdWJqZWN0TGVuZ3RoDQogIG1haWxTdWJqZWN0ID0gbWFpbFN1YmplY3RbMCwgJG1heFN1 YmplY3RMZW5ndGhdDQplbmQNCg0KZW5jb2RlciA9IEhlYWRlckVuY29kZXIubmV3DQplbmNvZGVy LmNoYXJzZXQgPSAkY2hhcnNldC5uaWw/ID8gIklTTy04ODU5LTEiIDogJGNoYXJzZXQNCg0KDQpi bGFoKCJpbnZva2luZyAjeyRzZW5kbWFpbF9wcm9nfSIpDQpJTy5wb3BlbigiI3skc2VuZG1haWxf cHJvZ30iLCAidyIpIGRvIHxtYWlsfA0KICBtYWlsLnB1dHMoIlRvOiAjeyRyZWNpcGllbnRzLmpv aW4oJywnKX0iKQ0KICBlbmNvZGVyLmVuY29kZV9oZWFkZXIobWFpbCwgIlN1YmplY3QiLCBtYWls U3ViamVjdCkNCiAgbWFpbC5wdXRzKCJGcm9tOiAjeyRmcm9tX2FkZHJlc3N9IikgaWYgJGZyb21f YWRkcmVzcw0KICBtYWlsLnB1dHMoIk1JTUUtVmVyc2lvbjogMS4wIikNCiAgbWFpbC5wdXRzKCJD b250ZW50LVR5cGU6IHRleHQvaHRtbCIgKyAoJGNoYXJzZXQubmlsPyA/ICIiIDogIjsgY2hhcnNl dD1cIiN7JGNoYXJzZXR9XCIiKSkNCiAgaWYgRU5WWydSRU1PVEVfSE9TVCddDQogICAgIyBUT0RP OiBJIHRoaW5rIHRoaXMgd2lsbCBhbHdheXMgYmUgYW4gSVAgYWRkcmVzcy4gIElmIGEgaG9zdG5h bWUgaXMNCiAgICAjIHBvc3NpYmxlLCBpdCBtYXkgbmVlZCBlbmNvZGluZyBvZiBzb21lIGtpbmQs DQogICAgbWFpbC5wdXRzKCJYLU9yaWdpbmF0aW5nLUlQOiBbI3tFTlZbJ1JFTU9URV9IT1NUJ119 XSIpDQogIGVuZA0KICB1bmxlc3MgKCRhZGRpdGlvbmFsSGVhZGVycy5lbXB0eT8pDQogICAgJGFk ZGl0aW9uYWxIZWFkZXJzLmVhY2ggZG8gfGhlYWRlcnwNCiAgICAgIG1haWwucHV0cygiI3toZWFk ZXJbMF19OiAje2hlYWRlclsxXX0iKQ0KICAgIGVuZA0KICBlbmQNCiAgbWFpbC5wdXRzKCJYLUNW U3NwYW0tVmVyc2lvbjogI3skdmVyc2lvbn0gKGh0dHA6Ly93d3cuYmFkZ2Vycy1pbi1mb2lsLmNv LnVrL3Byb2plY3RzL2N2c3NwYW0vKSIpDQogIG1haWwucHV0cyAgIyBlbmQtb2YtaGVhZGVycw0K DQogIG1haWwucHV0cyg8PEhFQUQpDQo8aHRtbD4NCjxoZWFkPg0KPHN0eWxlPjwhLS0NCiAgYm9k eSB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO30NCiAgLmZpbGUge2JvcmRlcjoxcHggc29saWQg I2VlZWVlZTttYXJnaW4tdG9wOjFlbTttYXJnaW4tYm90dG9tOjFlbTt9DQogIC5wYXRobmFtZSB7 Zm9udC1mYW1pbHk6bW9ub3NwYWNlOyBmbG9hdDpyaWdodDt9DQogIC5maWxlaGVhZGVyIHttYXJn aW4tYm90dG9tOi41ZW07fQ0KICAuZGlmZiB7bWFyZ2luOjA7fQ0KICAudGFza2xpc3Qge3BhZGRp bmc6NHB4O2JvcmRlcjoxcHggZGFzaGVkICMwMDAwMDA7bWFyZ2luLXRvcDoxZW07fQ0KICAudGFz a2xpc3QgdWwge21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7fQ0KICB0ci5hbHQge2JhY2tn cm91bmQtY29sb3I6I2VlZWVlZX0NCiAgI2FkZGVkIHtiYWNrZ3JvdW5kLWNvbG9yOiNkZGZmZGQ7 fQ0KICAjYWRkZWRjaGFycyB7YmFja2dyb3VuZC1jb2xvcjojOTlmZjk5O2ZvbnQtd2VpZ2h0OmJv bGRlcjt9DQogIHRyLmFsdCAjYWRkZWQge2JhY2tncm91bmQtY29sb3I6I2NjZjdjYzt9DQogICNy ZW1vdmVkIHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmRkZGQ7fQ0KICAjcmVtb3ZlZGNoYXJzIHtiYWNr Z3JvdW5kLWNvbG9yOiNmZjk5OTk7Zm9udC13ZWlnaHQ6Ym9sZGVyO30NCiAgdHIuYWx0ICNyZW1v dmVkIHtiYWNrZ3JvdW5kLWNvbG9yOiNmN2NjY2M7fQ0KICAjaW5mbyB7Y29sb3I6Izg4ODg4ODt9 DQogICNjb250ZXh0IHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWVlZWU7fQ0KICB0ZCB7cGFkZGluZy1s ZWZ0Oi4zZW07cGFkZGluZy1yaWdodDouM2VtO30NCiAgdHIuaGVhZCB7Ym9yZGVyLWJvdHRvbS13 aWR0aDoxcHg7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDt9DQogIHRyLmhlYWQgdGQge3BhZGRp bmc6MDtwYWRkaW5nLXRvcDouMmVtO30NCiAgLnRhc2sge2JhY2tncm91bmQtY29sb3I6I2ZmZmYw MDt9DQogIC5jb21tZW50IHtwYWRkaW5nOjRweDtib3JkZXI6MXB4IGRhc2hlZCAjMDAwMDAwO2Jh Y2tncm91bmQtY29sb3I6I2ZmZmZkZH0NCiAgLmVycm9yIHtjb2xvcjpyZWQ7fQ0KICBociB7Ym9y ZGVyLXdpZHRoOjBweDtoZWlnaHQ6MnB4O2JhY2tncm91bmQ6YmxhY2s7fQ0KLS0+PC9zdHlsZT4N CjwvaGVhZD4NCjxib2R5Pg0KSEVBRA0KDQogIHVubGVzcyAoJHByb2JsZW1IZWFkZXJzLmVtcHR5 PykNCiAgICBtYWlsLnB1dHMoIjxzdHJvbmcgY2xhc3M9XCJlcnJvclwiPkJhZCBoZWFkZXIgZm9y bWF0IGluICcjeyRjb25maWd9Jzo8dWw+IikNCiAgICAkc3RkZXJyLnB1dHMoIkJhZCBoZWFkZXIg Zm9ybWF0IGluICcjeyRjb25maWd9JzoiKQ0KICAgICRwcm9ibGVtSGVhZGVycy5lYWNoIGRvIHxo ZWFkZXJ8DQogICAgICBtYWlsLnB1dHMoIjxsaT48cHJlPiN7aHRtbEVuY29kZShoZWFkZXJbMF0p fTwvcHJlPjwvbGk+IikNCiAgICAgICRzdGRlcnIucHV0cygiIC0gI3toZWFkZXJbMF19IikNCiAg ICBlbmQNCiAgICBtYWlsLnB1dHMoIjwvdWw+PC9zdHJvbmc+IikNCiAgZW5kDQogIG1haWwucHV0 cygiPHRhYmxlIGNlbGxzcGFjaW5nPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiIGJvcmRlcj1cIjBc IiBydWxlcz1cImNvbHNcIj4iKQ0KDQogIGhhdmVUYWdzID0gZmFsc2UNCiAgUmVwb3NpdG9yeS5l YWNoIGRvIHxyZXBvc2l0b3J5fA0KICAgIGhhdmVUYWdzIHw9IHJlcG9zaXRvcnkuaGFzX211bHRp cGxlX3RhZ3MNCiAgZW5kDQoNCiAgZmlsZXNBZGRlZCA9IDANCiAgZmlsZXNSZW1vdmVkID0gMA0K ICBmaWxlc01vZGlmaWVkICA9IDANCiAgdG90YWxMaW5lc0FkZGVkID0gMA0KICB0b3RhbExpbmVz UmVtb3ZlZCA9IDANCiAgZmlsZV9jb3VudCA9IDANCiAgbGFzdFBhdGggPSAiIg0KICBsYXN0X3Jl cG9zaXRvcnkgPSBuaWwNCiAgJGZpbGVFbnRyaWVzLmVhY2ggZG8gfGZpbGV8DQogICAgdW5sZXNz IGZpbGUucmVwb3NpdG9yeSA9PSBsYXN0X3JlcG9zaXRvcnkNCiAgICAgIGxhc3RfcmVwb3NpdG9y eSA9IGZpbGUucmVwb3NpdG9yeQ0KICAgICAgbWFpbC5wcmludCgiPHRyIGNsYXNzPVwiaGVhZFwi Pjx0ZCBjb2xzcGFuPVwiI3tsYXN0X3JlcG9zaXRvcnkuaGFzX211bHRpcGxlX3RhZ3MgPyA1IDog NH1cIj4iKQ0KICAgICAgaWYgbGFzdF9yZXBvc2l0b3J5Lmhhc19tdWx0aXBsZV90YWdzDQogICAg ICAgIG1haWwucHJpbnQoIk1peGVkLXRhZyBjb21taXQiKQ0KICAgICAgZWxzZQ0KICAgICAgICBt YWlsLnByaW50KCJDb21taXQiKQ0KICAgICAgZW5kDQogICAgICBtYWlsLnByaW50KCIgaW4gPGI+ PHR0PiN7aHRtbEVuY29kZShsYXN0X3JlcG9zaXRvcnkuY29tbW9uX3ByZWZpeCl9PC90dD48L2I+ IikNCiAgICAgIGlmIGxhc3RfcmVwb3NpdG9yeS50cnVua19vbmx5Pw0KICAgICAgICBtYWlsLnBy aW50KCI8c3BhbiBpZD1cImluZm9cIj4gb24gTUFJTjwvc3Bhbj4iKQ0KICAgICAgZWxzZQ0KICAg ICAgICBtYWlsLnByaW50KCIgb24gIikNCiAgICAgICAgdGFnQ291bnQgPSAwDQogICAgICAgIGxh c3RfcmVwb3NpdG9yeS5lYWNoX3RhZyBkbyB8dGFnfA0KICAgICAgICAgIHRhZ0NvdW50ICs9IDEN CiAgICAgICAgICBpZiB0YWdDb3VudCA+IDENCiAgICAgICAgICAgIG1haWwucHJpbnQgdGFnQ291 bnQ8bGFzdF9yZXBvc2l0b3J5LnRhZ19jb3VudCA/ICIsICIgOiAiICYgIg0KICAgICAgICAgIGVu ZA0KICAgICAgICAgIG1haWwucHJpbnQgdGFnID8gaHRtbEVuY29kZSh0YWcpIDogIjxzcGFuIGlk PVwiaW5mb1wiPk1BSU48L3NwYW4+Ig0KICAgICAgICBlbmQNCiAgICAgIGVuZA0KICAgICAgbWFp bC5wdXRzKCI8L3RkPjwvdHI+IikNCiAgICBlbmQNCiAgICBmaWxlX2NvdW50ICs9IDENCiAgICBp ZiAoZmlsZV9jb3VudCUyPT0wKQ0KICAgICAgbWFpbC5wcmludCgiPHRyIGNsYXNzPVwiYWx0XCI+ IikNCiAgICBlbHNlDQogICAgICBtYWlsLnByaW50KCI8dHI+IikNCiAgICBlbmQNCiAgICBpZiBm aWxlLmFkZGl0aW9uPw0KICAgICAgZmlsZXNBZGRlZCArPSAxDQogICAgZWxzaWYgZmlsZS5yZW1v dmFsPw0KICAgICAgZmlsZXNSZW1vdmVkICs9IDENCiAgICBlbHNpZiBmaWxlLm1vZGlmaWNhdGlv bj8NCiAgICAgIGZpbGVzTW9kaWZpZWQgKz0gMQ0KICAgIGVuZA0KICAgIG5hbWUgPSBodG1sRW5j b2RlKGZpbGUubmFtZV9hZnRlcl9jb21tb25fcHJlZml4KQ0KICAgIHNsYXNoUG9zID0gbmFtZS5y aW5kZXgoIi8iKQ0KICAgIGlmIHNsYXNoUG9zPT1uaWwNCiAgICAgIHByZWZpeCA9ICIiDQogICAg ZWxzZQ0KICAgICAgdGhpc1BhdGggPSBuYW1lWzAsc2xhc2hQb3NdDQogICAgICBuYW1lID0gbmFt ZVtzbGFzaFBvcysxLG5hbWUubGVuZ3RoXQ0KICAgICAgaWYgdGhpc1BhdGggPT0gbGFzdFBhdGgN CiAgICAgICAgcHJlZml4ID0gIiZuYnNwOyIqKHNsYXNoUG9zKSArICIvIg0KICAgICAgZWxzZSAN CiAgICAgICAgcHJlZml4ID0gdGhpc1BhdGggKyAiLyINCiAgICAgIGVuZA0KICAgICAgbGFzdFBh dGggPSB0aGlzUGF0aA0KICAgIGVuZA0KICAgIGlmIGZpbGUuYWRkaXRpb24/DQogICAgICBuYW1l ID0gIjxzcGFuIGlkPVwiYWRkZWRcIj4je25hbWV9PC9zcGFuPiINCiAgICBlbHNpZiBmaWxlLnJl bW92YWw/DQogICAgICBuYW1lID0gIjxzcGFuIGlkPVwicmVtb3ZlZFwiPiN7bmFtZX08L3NwYW4+ Ig0KICAgIGVuZA0KICAgIGlmIGZpbGUuaXNFbXB0eSB8fCBmaWxlLmlzQmluYXJ5IHx8IChmaWxl LnJlbW92YWw/ICYmICRub19yZW1vdmVkX2ZpbGVfZGlmZikNCiAgICAgIG1haWwucHJpbnQoIjx0 ZD48dHQ+I3twcmVmaXh9I3tuYW1lfTwvdHQ+PC90ZD4iKQ0KICAgIGVsc2UNCiAgICAgIG1haWwu cHJpbnQoIjx0ZD48dHQ+I3twcmVmaXh9PGEgaHJlZj1cIiNmaWxlI3tmaWxlX2NvdW50fVwiPiN7 bmFtZX08L2E+PC90dD48L3RkPiIpDQogICAgZW5kDQogICAgaWYgZmlsZS5pc0VtcHR5DQogICAg ICBtYWlsLnByaW50KCI8dGQgY29sc3Bhbj1cIjJcIiBhbGlnbj1cImNlbnRlclwiPjxzbWFsbCBp ZD1cImluZm9cIj5bZW1wdHldPC9zbWFsbD48L3RkPiIpDQogICAgZWxzaWYgZmlsZS5pc0JpbmFy eQ0KICAgICAgbWFpbC5wcmludCgiPHRkIGNvbHNwYW49XCIyXCIgYWxpZ249XCJjZW50ZXJcIj48 c21hbGwgaWQ9XCJpbmZvXCI+W2JpbmFyeV08L3NtYWxsPjwvdGQ+IikNCiAgICBlbHNlDQogICAg ICBpZiBmaWxlLmxpbmVBZGRpdGlvbnM+MA0KICAgICAgICB0b3RhbExpbmVzQWRkZWQgKz0gZmls ZS5saW5lQWRkaXRpb25zDQogICAgICAgIG1haWwucHJpbnQoIjx0ZCBhbGlnbj1cInJpZ2h0XCIg aWQ9XCJhZGRlZFwiPisje2ZpbGUubGluZUFkZGl0aW9uc308L3RkPiIpDQogICAgICBlbHNlDQog ICAgICAgIG1haWwucHJpbnQoIjx0ZD48L3RkPiIpDQogICAgICBlbmQNCiAgICAgIGlmIGZpbGUu bGluZVJlbW92YWxzPjANCiAgICAgICAgdG90YWxMaW5lc1JlbW92ZWQgKz0gZmlsZS5saW5lUmVt b3ZhbHMNCiAgICAgICAgbWFpbC5wcmludCgiPHRkIGFsaWduPVwicmlnaHRcIiBpZD1cInJlbW92 ZWRcIj4tI3tmaWxlLmxpbmVSZW1vdmFsc308L3RkPiIpDQogICAgICBlbHNlDQogICAgICAgIG1h aWwucHJpbnQoIjx0ZD48L3RkPiIpDQogICAgICBlbmQNCiAgICBlbmQNCiAgICBpZiBsYXN0X3Jl cG9zaXRvcnkuaGFzX211bHRpcGxlX3RhZ3MNCiAgICAgIGlmIGZpbGUudGFnDQogICAgICAgIG1h aWwucHJpbnQoIjx0ZD4je2h0bWxFbmNvZGUoZmlsZS50YWcpfTwvdGQ+IikNCiAgICAgIGVsc2UN CiAgICAgICAgbWFpbC5wcmludCgiPHRkPjxzcGFuIGlkPVwiaW5mb1wiPk1BSU48L3NwYW4+PC90 ZD4iKQ0KICAgICAgZW5kDQogICAgZWxzaWYgaGF2ZVRhZ3MNCiAgICAgIG1haWwucHJpbnQoIjx0 ZD48L3RkPiIpDQogICAgZW5kDQogICAgaWYgZmlsZS5hZGRpdGlvbj8NCiAgICAgIG1haWwucHJp bnQoIjx0ZCBub3dyYXA9XCJub3dyYXBcIiBhbGlnbj1cInJpZ2h0XCI+YWRkZWQgI3skZnJvbnRl bmQudmVyc2lvbihmaWxlLnBhdGgsZmlsZS50b1Zlcil9PC90ZD4iKQ0KICAgIGVsc2lmIGZpbGUu cmVtb3ZhbD8NCiAgICAgIG1haWwucHJpbnQoIjx0ZCBub3dyYXA9XCJub3dyYXBcIj4jeyRmcm9u dGVuZC52ZXJzaW9uKGZpbGUucGF0aCxmaWxlLmZyb21WZXIpfSByZW1vdmVkPC90ZD4iKQ0KICAg IGVsc2lmIGZpbGUubW9kaWZpY2F0aW9uPw0KICAgICAgbWFpbC5wcmludCgiPHRkIG5vd3JhcD1c Im5vd3JhcFwiIGFsaWduPVwiY2VudGVyXCI+I3skZnJvbnRlbmQudmVyc2lvbihmaWxlLnBhdGgs ZmlsZS5mcm9tVmVyKX0gI3skZnJvbnRlbmQuZGlmZihmaWxlKX0gI3skZnJvbnRlbmQudmVyc2lv bihmaWxlLnBhdGgsZmlsZS50b1Zlcil9PC90ZD4iKQ0KICAgIGVuZA0KDQogICAgbWFpbC5wdXRz KCI8L3RyPiIpDQogIGVuZA0KICBpZiAkZmlsZUVudHJpZXMuc2l6ZT4xICYmICh0b3RhbExpbmVz QWRkZWQrdG90YWxMaW5lc1JlbW92ZWQpPjANCiAgICAjIGdpdmUgdG90YWwgbnVtYmVyIG9mIGxp bmVzIGFkZGVkL3JlbW92ZWQgYWNjcm9zcyBhbGwgZmlsZXMNCiAgICBtYWlsLnByaW50KCI8dHI+ PHRkPjwvdGQ+IikNCiAgICBpZiB0b3RhbExpbmVzQWRkZWQ+MA0KICAgICAgbWFpbC5wcmludCgi PHRkIGFsaWduPVwicmlnaHRcIiBpZD1cImFkZGVkXCI+KyN7dG90YWxMaW5lc0FkZGVkfTwvdGQ+ IikNCiAgICBlbHNlDQogICAgICBtYWlsLnByaW50KCI8dGQ+PC90ZD4iKQ0KICAgIGVuZA0KICAg IGlmIHRvdGFsTGluZXNSZW1vdmVkPjANCiAgICAgIG1haWwucHJpbnQoIjx0ZCBhbGlnbj1cInJp Z2h0XCIgaWQ9XCJyZW1vdmVkXCI+LSN7dG90YWxMaW5lc1JlbW92ZWR9PC90ZD4iKQ0KICAgIGVs c2UNCiAgICAgIG1haWwucHJpbnQoIjx0ZD48L3RkPiIpDQogICAgZW5kDQogICAgbWFpbC5wcmlu dCgiPHRkPjwvdGQ+IikgaWYgaGF2ZVRhZ3MNCiAgICBtYWlsLnB1dHMoIjx0ZD48L3RkPjwvdHI+ IikNCiAgZW5kDQogIA0KICBtYWlsLnB1dHMoIjwvdGFibGU+IikNCg0KICB0b3RhbEZpbGVzQ2hh bmdlZCA9IGZpbGVzQWRkZWQrZmlsZXNSZW1vdmVkK2ZpbGVzTW9kaWZpZWQNCiAgaWYgdG90YWxG aWxlc0NoYW5nZWQgPiAxDQogICAgbWFpbC5wcmludCgiPHNtYWxsIGlkPVwiaW5mb1wiPiIpDQog ICAgY2hhbmdlS2luZCA9IDANCiAgICBpZiBmaWxlc0FkZGVkPjANCiAgICAgIG1haWwucHJpbnQo IiN7ZmlsZXNBZGRlZH0gYWRkZWQiKQ0KICAgICAgY2hhbmdlS2luZCArPSAxDQogICAgZW5kDQog ICAgaWYgZmlsZXNSZW1vdmVkPjANCiAgICAgIG1haWwucHJpbnQoIiArICIpIGlmIGNoYW5nZUtp bmQ+MA0KICAgICAgbWFpbC5wcmludCgiI3tmaWxlc1JlbW92ZWR9IHJlbW92ZWQiKQ0KICAgICAg Y2hhbmdlS2luZCArPSAxDQogICAgZW5kDQogICAgaWYgZmlsZXNNb2RpZmllZD4wDQogICAgICBt YWlsLnByaW50KCIgKyAiKSBpZiBjaGFuZ2VLaW5kPjANCiAgICAgIG1haWwucHJpbnQoIiN7Zmls ZXNNb2RpZmllZH0gbW9kaWZpZWQiKQ0KICAgICAgY2hhbmdlS2luZCArPSAxDQogICAgZW5kDQog ICAgbWFpbC5wcmludCgiLCB0b3RhbCAje3RvdGFsRmlsZXNDaGFuZ2VkfSIpIGlmIGNoYW5nZUtp bmQgPiAxDQogICAgbWFpbC5wdXRzKCIgZmlsZXM8L3NtYWxsPjxiciAvPiIpDQogIGVuZA0KDQog IGlmICR0YXNrX2xpc3Quc2l6ZSA+IDANCiAgICB0YXNrX2NvdW50ID0gMA0KICAgIG1haWwucHV0 cygiPGRpdiBjbGFzcz1cInRhc2tsaXN0XCI+PHVsPiIpDQogICAgJHRhc2tfbGlzdC5lYWNoIGRv IHxpdGVtfA0KICAgICAgdGFza19jb3VudCArPSAxDQogICAgICBpdGVtID0gaHRtbEVuY29kZShp dGVtKQ0KICAgICAgbWFpbC5wdXRzKCI8bGk+PGEgaHJlZj1cIiN0YXNrI3t0YXNrX2NvdW50fVwi PiN7aXRlbX08L2E+PC9saT4iKQ0KICAgIGVuZA0KICAgIG1haWwucHV0cygiPC91bD48L2Rpdj4i KQ0KICBlbmQNCg0KDQogIEZpbGUub3BlbigiI3skbG9nZmlsZX0uZW1haWx0bXAiKSBkbyB8aW5w dXR8DQogICAgaW5wdXQuZWFjaCBkbyB8bGluZXwNCiAgICAgIG1haWwucHV0cyhsaW5lKQ0KICAg IGVuZA0KICBlbmQNCiAgaWYgJGRlYnVnDQogICAgYmxhaCgibGVhdmluZyBmaWxlICN7JGxvZ2Zp bGV9LmVtYWlsdG1wIikNCiAgZWxzZQ0KICAgIEZpbGUudW5saW5rKCIjeyRsb2dmaWxlfS5lbWFp bHRtcCIpDQogIGVuZA0KDQogIG1haWwucHV0cygiPGNlbnRlcj48c21hbGw+PGEgaHJlZj1cImh0 dHA6Ly93d3cuYmFkZ2Vycy1pbi1mb2lsLmNvLnVrL3Byb2plY3RzL2N2c3NwYW0vXCIgdGl0bGU9 XCJjb21taXQgLSZndDsgZW1haWxcIj5DVlNzcGFtPC9hPiAjeyR2ZXJzaW9ufTwvc21hbGw+PC9j ZW50ZXI+IikNCg0KICBtYWlsLnB1dHMoIjwvYm9keT48L2h0bWw+IikNCg0KZW5kDQo= ------_=_NextPart_001_01C3512C.E45343E8 Content-Type: application/octet-stream; name="loginfo" Content-Transfer-Encoding: base64 Content-Description: loginfo Content-Disposition: attachment; filename="loginfo" IyBUaGUgImxvZ2luZm8iIGZpbGUgY29udHJvbHMgd2hlcmUgImN2cyBjb21taXQiIGxvZyBpbmZv cm1hdGlvbg0KIyBpcyBzZW50LiAgVGhlIGZpcnN0IGVudHJ5IG9uIGEgbGluZSBpcyBhIHJlZ3Vs YXIgZXhwcmVzc2lvbiB3aGljaCBtdXN0IG1hdGNoDQojIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGUg Y2hhbmdlIGlzIGJlaW5nIG1hZGUgdG8sIHJlbGF0aXZlIHRvIHRoZQ0KIyAkQ1ZTUk9PVC4gIElm IGEgbWF0Y2ggaXMgZm91bmQsIHRoZW4gdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSBpcyBhIGZp bHRlcg0KIyBwcm9ncmFtIHRoYXQgc2hvdWxkIGV4cGVjdCBsb2cgaW5mb3JtYXRpb24gb24gaXRz IHN0YW5kYXJkIGlucHV0Lg0KIw0KIyBJZiB0aGUgcmVwb3NpdG9yeSBuYW1lIGRvZXMgbm90IG1h dGNoIGFueSBvZiB0aGUgcmVndWxhciBleHByZXNzaW9ucyBpbiB0aGlzDQojIGZpbGUsIHRoZSAi REVGQVVMVCIgbGluZSBpcyB1c2VkLCBpZiBpdCBpcyBzcGVjaWZpZWQuDQojDQojIElmIHRoZSBu YW1lIEFMTCBhcHBlYXJzIGFzIGEgcmVndWxhciBleHByZXNzaW9uIGl0IGlzIGFsd2F5cyB1c2Vk DQojIGluIGFkZGl0aW9uIHRvIHRoZSBmaXJzdCBtYXRjaGluZyByZWdleCBvciBERUZBVUxULg0K Iw0KIyBZb3UgbWF5IHNwZWNpZnkgYSBmb3JtYXQgc3RyaW5nIGFzIHBhcnQgb2YgdGhlDQojIGZp bHRlci4gIFRoZSBzdHJpbmcgaXMgY29tcG9zZWQgb2YgYSBgJScgZm9sbG93ZWQNCiMgYnkgYSBz aW5nbGUgZm9ybWF0IGNoYXJhY3Rlciwgb3IgZm9sbG93ZWQgYnkgYSBzZXQgb2YgZm9ybWF0DQoj IGNoYXJhY3RlcnMgc3Vycm91bmRlZCBieSBgeycgYW5kIGB9JyBhcyBzZXBhcmF0b3JzLiAgVGhl IGZvcm1hdA0KIyBjaGFyYWN0ZXJzIGFyZToNCiMNCiMgICBzID0gZmlsZSBuYW1lDQojICAgViA9 IG9sZCB2ZXJzaW9uIG51bWJlciAocHJlLWNoZWNraW4pDQojICAgdiA9IG5ldyB2ZXJzaW9uIG51 bWJlciAocG9zdC1jaGVja2luKQ0KIw0KIyBGb3IgZXhhbXBsZToNCiNERUZBVUxUIChlY2hvICIi OyBpZDsgZWNobyAlczsgZGF0ZTsgY2F0KSA+PiAkQ1ZTUk9PVC9DVlNST09UL2NvbW1pdGxvZw0K IyBvcg0KI0RFRkFVTFQgKGVjaG8gIiI7IGlkOyBlY2hvICV7c1Z2fTsgZGF0ZTsgY2F0KSA+PiAk Q1ZTUk9PVC9DVlNST09UL2NvbW1pdGxvZw0KVG9tY2F0U2V0dXAgcnVieSAkQ1ZTUk9PVC9DVlNS T09UL2NvbGxlY3RfZGlmZnMucmIgLS10byBhbWV6aWNrQGd1aWRlc3Rhci5vcmcgJXtzVnZ9DQoj VG9tY2F0U2V0dXAgJENWU1JPT1QvQ1ZTUk9PVC9hY3Rpdml0eW1haWwucGwgLWRjZ2YgJXtzVnZ9 IC10IGFtZXppY2tAZ3VpZGVzdGFyLm9yZw== ------_=_NextPart_001_01C3512C.E45343E8 Content-Type: application/octet-stream; name="record_lastdir.rb" Content-Transfer-Encoding: base64 Content-Description: record_lastdir.rb Content-Disposition: attachment; filename="record_lastdir.rb" IyEvdXNyL2Jpbi9ydWJ5IC13DQoNCiMgUGFydCBvZiBDVlNzcGFtDQojICAgaHR0cDovL3d3dy5i YWRnZXJzLWluLWZvaWwuY28udWsvcHJvamVjdHMvY3Zzc3BhbS8NCiMgQ29weXJpZ2h0IChjKSBE YXZpZCBIb2xyb3lkDQoNCiRyZXBvc2l0b3J5ZGlyID0gQVJHVi5zaGlmdA0KDQokdG1wZGlyID0g ICIvY3lnZHJpdmUvZi9DVlMvY3Zzc3BhbSINCiMgdHJ5IHRvIHBpY2sgYSBuYW1lIHRvIGF2b2lk IGNvbGxpc2lvbnMgd2l0aCBvdGhlciBwZW9wbGUncyBjb21taXRzDQokZGlydGVtcGxhdGUgPSAi I2N2c3NwYW0uI3tQcm9jZXNzLnBwaWR9LiN7UHJvY2Vzcy51aWR9Ig0KJHN0ZG91dC5wcmludCgi ZGlyIHRlbXBsYXRlIGlzICIsJGRpcnRlbXBsYXRlLCJcbiIpDQpkZWYgZmluZF9kYXRhX2Rpcg0K ICBEaXJbIiN7JHRtcGRpcn0vI3skZGlydGVtcGxhdGV9LSoiXS5lYWNoIGRvIHxkaXJ8DQogICAg c3RhdCA9IEZpbGUuc3RhdChkaXIpDQogICAgcmV0dXJuIGRpciBpZiBzdGF0Lm93bmVkPw0KICBl bmQNCiAgbmlsDQplbmQNCg0KJGRhdGFkaXIgPSBmaW5kX2RhdGFfZGlyKCkNCg0KaWYgJGRhdGFk aXI9PW5pbA0KICAkZGF0YWRpciA9ICIjeyR0bXBkaXJ9LyN7JGRpcnRlbXBsYXRlfS0je3JhbmQo OTk5OTk5OTkpfSINCiAgRGlyLm1rZGlyKCRkYXRhZGlyLCAwNzc3KQ0KZW5kDQoNCiR0YWdzID0g bmlsDQoNCiMgUmVjb3JkIGFueSB0YWcgbmFtZSBmb3VuZCBpbiAnRW50cmllcycgZm9yIGZpbGVz IGJlaW5nIGNvbW1pdGVkLiAgVGhpcyBpcw0KIyByZXF1aXJlZCBhdCBwcmUtY29tbWl0LXRpbWUg YXMgd2UgaGF2ZSBubyBvdGhlciB3YXkgb2YgZGVydGVybWluaW5nIHdoYXQNCiMgYnJhbmNoIGEg ZmlsZSB3YXMgb24gaWYgaXQncyBiZWVuIHJlbW92ZWQuDQojDQojIElmIHRoZSBjb21taXRpbmZv LXRhZ3MgZmlsZSBleGlzdHMgZnJvbSBhIHByZXZpb3VzLCB1bnN1Y2Nlc3NmdWwgY29tbWl0LA0K IyB0aGVuIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGNvbnRhaW4gbXVsdGlwbGUgZW50cmllcyBm b3IgYSBwYXJ0aWN1bGFyIGZpbGUuDQojIFRoZSBjb25zdW1lciBvZiBjb21taXRpbmZvLXRhZ3Mg bXVzdCB0YWtlIGNhcmUgdG8gb25seSB1c2UgdGhlIGxhc3QgZW50cnkNCiMgZm9yIGEgZ2l2ZW4g ZmlsZW5hbWUuDQoNCmRlZiB3cml0ZV90YWcobmFtZSwgZmlsZSkNCiAgaWYgJHRhZ3MubmlsPw0K ICAgICR0YWdzID0gRmlsZS5uZXcoIiN7JGRhdGFkaXJ9L2NvbW1pdGluZm8tdGFncyIsIEZpbGU6 OldST05MWXxGaWxlOjpDUkVBVHxGaWxlOjpBUFBFTkQpOw0KICAgIHJldHVybiBpZiAkdGFncy5u aWw/DQogIGVuZA0KICAkdGFncy5wdXRzKCIje25hbWV9XHQje2ZpbGV9IikNCmVuZA0KDQpGaWxl Lm9wZW4oIkNWUy9FbnRyaWVzIikgZG8gfGZpbGV8DQogIGZpbGUuZWFjaF9saW5lIGRvIHxsaW5l fA0KICAgIG5leHQgaWYgbGluZSA9fiAvXkQvDQogICAgaW5mbyA9IGxpbmUuc3BsaXQoL1wvLykN CiAgICAjIHNraXAgZW50cmllcyBub3QgY29tbWl0ZWQgdGhpcyBpbnZvY2F0aW9uLA0KICAgIGlm IEFSR1YuZGVsZXRlKGluZm9bMV0pLm5pbD8NCiAgICAgIG5leHQNCiAgICBlbmQNCiAgICBpZiBp bmZvWzVdID1+IC9eVCguKykvDQogICAgICB3cml0ZV90YWcoJDEsICIjeyRyZXBvc2l0b3J5ZGly fS8je2luZm9bMV19IikNCiAgICBlbmQNCiAgZW5kDQplbmQNCg0KJHRhZ3MuY2xvc2UgdW5sZXNz ICR0YWdzLm5pbD8NCg0KdW5sZXNzIEFSR1YuZW1wdHk/DQogICRzdGRlcnIucHV0cyAiTm90aGlu ZyBpbiBDVlMvRW50cmllcyBmb3IgIitBUkdWLmpvaW4oIiwgIikNCmVuZA0KDQoNCiMgUmVjb3Jk IHRoZSBkaXJlY3RvcnkgY3VycmVudGx5IGJlaW5nIGNvbW1pdGVkIHRvLg0KIyANCiMgVGhpcyBz Y3JpcHQgKGFuZCBjb2xsZWN0X2RpZmZzLnJiKSB3aWxsIGJlIHJ1biBqdXN0IGZvciB0aGUgZmls ZXMgaW4gYQ0KIyBzaW5nbGUgZGlyZWN0b3J5Lg0KIyANCiMgQSBjb21taXQgdG8gZmlsZXMgaW4g bXVsdGlwbGUgZGlyZWN0b3JpZXMgd2lsbCB0aGVyZWZvcmUgcHJvZHVjZSBtdWx0aXBsZQ0KIyBp bnZvY2F0aW9ucyBvZiB0aGVzZSBzY3JpcHRzLiAgVG8gc2VuZCB0aGUgZW1haWwgb25seSB3aGVu IHRoZSB3aG9sZSBjb21taXQNCiMgaXMgZG9uZSwgZWFjaCBydW4gb3ZlcndyaXRlcyB0aGUgJ2xh c3RkaXInIGZpbGU7IGNvbGxlY3RfZGlmZnMucmIgd2lsbA0KIyBsYXRlciBpbnNwZWN0IHRoZSB2 YWx1ZSBpdCBjb250YWlucyB0byB3b3JrIG91dCBpZiBpdCBuZWVkcyB0byBnZW5lcmF0ZSB0aGUN CiMgZW1haWwgeWV0Lg0KDQpGaWxlLm9wZW4oIiN7JGRhdGFkaXJ9L2xhc3RkaXIiLCAidyIpIHsg fGZpbGV8DQoJZmlsZS53cml0ZSAkcmVwb3NpdG9yeWRpcg0KfQ0K ------_=_NextPart_001_01C3512C.E45343E8-- --J5MfuwkIyy7RmF4Q-- From webmaster at bopos.net Tue Apr 12 18:43:18 2005 From: webmaster at bopos.net (Boris Penchev) Date: Tue, 12 Apr 2005 14:43:18 -0400 Subject: [cvsspam-devel] Cvs/cvsspam bug has been found Message-ID: This is a multi-part message in MIME format. ------=_NextPart_000_001C_01C53F6D.F76454E0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Hello, I was in big trouble with cvsspan in one of my gentoo servers. I was having this problem problem and I have not receive any type of email: root@devel1.500 test # cvs ci -m'test' cvs commit: Examining . Nothing in CVS/Entries for %s, /cvsroot/test Checking in test.pl; /cvsroot/test/Attic/test.pl,v <-- test.pl new revision: 1.1.2.60; previous revision: 1.1.2.59 done After a lot of thing in order to try to debug this think I found that new version (or the oldest) do not need %s or other argument. I have checked script record_lastdir.rb and add some debug lines and I see that params comming like: 1. ARGV --> %r/%p 2. ARGV --> %s 3. ARGV --> /cvsroot/test 4. ARGV --> test.pl Solution: Change in file CVSROOT/commitinfo row DEFAULT /usr/bin/record_lastdir.rb %r/%p %s with: DEFAULT /usr/bin/record_lastdir.rb (no arguments to the new one) Regards, Boris Penchev ------=_NextPart_000_001C_01C53F6D.F76454E0 Content-Type: application/ms-tnef; name="winmail.dat" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="winmail.dat" eJ8+IhISAQaQCAAEAAAAAAABAAEAAQeQBgAIAAAA5AQAAAAAAADoAAEIgAcAGAAAAElQTS5NaWNy b3NvZnQgTWFpbC5Ob3RlADEIAQ2ABAACAAAAAgACAAEGgAMADgAAANUHBAAMAA4AKwAAAAIAJwEB A5AGACQHAAAiAAAACwACAAEAAAALACMAAAAAAAMAJgAAAAAACwApAAAAAAADADYAAAAAAB4AcAAB AAAAHwAAAEN2cy9jdnNzcGFtIGJ1ZyBoYXMgYmVlbiBmb3VuZAAAAgFxAAEAAAAWAAAAAcU/j34K HEm2+M0OSKSbFAqRp0fJogAAAgEdDAEAAAAZAAAAU01UUDpXRUJNQVNURVJAQk9QT1MuTkVUAAAA AAsAAQ4AAAAAQAAGDgBSd3OPP8UBAgEKDgEAAAAYAAAAAAAAAHz58Q4dZa9EvCNSXvZskuLCgAAA CwAfDgEAAAACAQkQAQAAACYDAAAiAwAA/wQAAExaRnVifTcMAwAKAHJjcGcxMjUWMgD4C2BuDhAw MzNPAfcCpARkAgBjaArAc/BldDAgCFUHsgKDAFCvA9QQ2QcTAoB9CoF2CJCkd2sLgGQ0DGBjAFBD CwMLtSBIZWwJACyHCqIKhAqASSB3YQQggQuAIGJpZyB0A2AKdQJgZRdAaXRoIPxjdgQQCrADoBeR AiAYYIBvZiBteSBnCfCQdG9vIBEwcnYEkPRzLhZ/IBEAFGAPIBfwsmgEACBwA2AYQW0c5zkAcGQg FzAcMRhgbm/jBUAJcGNlaR5xAHAaAHh0eXAZohsUHUALcGyeOhsVAZEe0BpgdEABAEEawGwxLjUw EWB0GweQBUAjGMIYwGkgLXRtJyKCJyDZIvMDcG3BGJA6IEV4YSUAAwD3HHEbBiFCTh6wHLAccReR 4ENWUy9FAjAIgQQggwIQBcAlcywgLxjRzSGCLyKCINlDaAWQFKFrJxMigi4LUDsg2SirLx5BAkAN 4CkjKyEsdiDwIDwtLS3gKuUg2RmQ/wfgCXAUYACQAiAlMCIgIiDgMi42MDsc4S/BCGDTBCAvvjU5 INlkGYEbGuZBAYAR0WEgCQAFQBnB/ybXBbAEgRfwGnAYAB+BGnDZAQBidRyFJtJrHiECEPZ1HgEY oGEpZS9yGsIwAdwgKAWxGKAZoWwBACKg/ikzQR6TGZAJgChRNcEZcOM6ATSRcmd1B4ACMBsNfx5T EPAqQTtRBPUe4TXRX4MLYCKgZGlyLnIhYHkd8mFkPmEDcBhgNtRs/wuAB5Ed8xsUETAYYDhiHOD/ CsAlcCS1HHFBQD5AIMUiIJEToFJHViNQLT4oUPByLyVwGxQwkESpEvDdGyMzRJkorwqANESZLlz1 GyNTBvB1LRAwESl7DxE7GGAXkWYDEBhgJ2FST/xPVEfwJOMLgAIQIXEH4AMg2CEzREVGQVVMnlRH 4DFQRVAXwG4vPv//RTRGpyEzGIIgyU9fUG8/s/0bGigeoDw3N2E2QToRL3LFGYEpGxpSZWcLEShw bRsUQgWwHMFQCfA+AXZfGxgVcRUjCoAUIQBc4AAACwABgAggBgAAAAAAwAAAAAAAAEYAAAAAA4UA AAAAAAADABCACCAGAAAAAADAAAAAAAAARgAAAABShQAAc3kBAB4AEoAIIAYAAAAAAMAAAAAAAABG AAAAAFSFAAABAAAABAAAADkuMAALABaACCAGAAAAAADAAAAAAAAARgAAAACChQAAAQAAAAsAQ4AI IAYAAAAAAMAAAAAAAABGAAAAAA6FAAAAAAAAAwBFgAggBgAAAAAAwAAAAAAAAEYAAAAAEIUAAAAA AAADAEaACCAGAAAAAADAAAAAAAAARgAAAAARhQAAAAAAAAMAR4AIIAYAAAAAAMAAAAAAAABGAAAA ABiFAAAAAAAAAwBbgAggBgAAAAAAwAAAAAAAAEYAAAAAAYUAAAAAAAALAGuACCAGAAAAAADAAAAA AAAARgAAAAAGhQAAAAAAAAIB+A8BAAAAEAAAAHz58Q4dZa9EvCNSXvZskuICAfoPAQAAABAAAAB8 +fEOHWWvRLwjUl72bJLiAgH7DwEAAACbAAAAAAAAADihuxAF5RAaobsIACsqVsIAAFBTVFBSWC5E TEwAAAAAAAAAAE5JVEH5v7gBAKoAN9luAAAAQzpcRG9jdW1lbnRzIGFuZCBTZXR0aW5nc1xhdXRv bG9naW5cTG9jYWwgU2V0dGluZ3NcQXBwbGljYXRpb24gRGF0YVxNaWNyb3NvZnRcT3V0bG9va1xv dXRsb29rLnBzdAAAAwD+DwUAAAADAA00/TcAAAIBfwABAAAAMwAAADxLUEVFTE1DRENPS0hBSEdD SVBJSENFTkhDQUFBLndlYm1hc3RlckBib3Bvcy5uZXQ+AAADAAYQo/hPyAMABxC9AgAAAwAQEAAA AAADABEQAAAAAB4ACBABAAAAZQAAAEhFTExPLElXQVNJTkJJR1RST1VCTEVXSVRIQ1ZTU1BBTklO T05FT0ZNWUdFTlRPT1NFUlZFUlNJV0FTSEFWSU5HVEhJU1BST0JMRU1QUk9CTEVNQU5ESUhBVkVO T1RSRUNFSVYAAAAAX74= ------=_NextPart_000_001C_01C53F6D.F76454E0-- From nemeth at wongfaye.com Wed Apr 13 04:27:11 2005 From: nemeth at wongfaye.com (Cloudless J. Retrospectively) Date: Tue, 12 Apr 2005 21:27:11 -0700 Subject: [cvsspam-devel] You have recived greeting card from Ashley. Message-ID: <011001c53fe1$c67df78d$92a4f71f@wongfaye.com> This is a multi-part message in MIME format. ------=_NextPart_000_0002_CD24AB64.F5B041EE Content-Type: text/plain Content-Transfer-Encoding: 7bit Allow me :) Please :) You have been just received an electronic greeting card from Gerald (corrivl@telefilm.gc.ca). It is waiting for you at our card site, go ahead and see it! ================================================= Visit Us At: http://eraser.no-fat-chicks.biz/?XkCEHyT ================================================= To view your card, choose from any of the following options which works best for you. ------------- Method 1 ------------- Just click on the following Internet address (if that doesn't work for you, copy & paste the address onto your browser's address box.) http://eraser.no-fat-chicks.biz/?6b5aDKC ------------- Method 2 ------------- Copy & paste your card number in the view card box at http://eraser.no-fat-chicks.biz/?L98B4XH Your card number is ZBB8041112493345 ------------- Method 3 ------------- Click on the link below to view your card ( Recommended for AOL Users ) http://eraser.no-fat-chicks.biz/?QmbPFfC (For your convenience, the greeting card will be available for the next 30 days) Webmaster, http://eraser.no-fat-chicks.biz/?6G242FT was it possible for me to know the thoughts of most that hear ------=_NextPart_000_0002_CD24AB64.F5B041EE Content-Type: text/html Content-Transfer-Encoding: quoted-printable
Oops=2e=2e=2e :)
 
You have been just received an electroni= c greeting card from Ashley (customerservice@spectrumed=2ecom)=2e
It is waiting for you at our card site, go ahead and see it!
=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d= =3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d= =3d
Visit Us At: htt= p://www=2e123christmascards=2ecom
=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d= =3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d= =3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d=3d
 
To view your card, choose from any of th= e following=20 options
which works best for you=2e
 
-------------
Method=20 1
-------------
 
Just click on the following Internet add= ress (if=20 that doesn't work for
you, copy & paste the address onto your brow= ser's=20 address box=2e)
 
http://cards=2e123c= hristmascards=2ecom/cgi-bin/cards/showcard=2epl?cardnum=3dZBB804111249334= 5&log=3dchrist123card
 
-------------
Method=20 2
-------------
 
Copy & paste your card number in the= view card=20 box at
http://www=2e123chr= istmascards=2ecom
 
Your card number=20 is
ZBB8041112493345
 
-------------
Method=20 3
-------------
 
Click on the link below to view your car= d (=20 Recommended for AOL Users )
 
http://cards=2e123c= hristmascards=2ecom/cgi-bin/cards/showcard=2epl?cardnum=3dZBB804111249334= 5&log=3dchrist123card
 
(For your convenience, the greeting card= will be=20 available for the next
30 days)
 
Webmaster,
http://www=2e123chr= istmascards=2ecom
 
difference between us and others; and, w= as God to leave us to
------=_NextPart_000_0002_CD24AB64.F5B041EE-- From dave at badgers-in-foil.co.uk Wed Apr 13 09:16:24 2005 From: dave at badgers-in-foil.co.uk (David Holroyd) Date: Wed, 13 Apr 2005 09:16:24 +0000 Subject: [cvsspam-devel] Spam In-Reply-To: <011001c53fe1$c67df78d$92a4f71f@wongfaye.com> References: <011001c53fe1$c67df78d$92a4f71f@wongfaye.com> Message-ID: <20050413091623.GA18881@vhost.badgers-in-foil.co.uk> On Tue, Apr 12, 2005 at 09:27:11PM -0700, Cloudless J. Retrospectively wrote: > Allow me :) Please :) I've restricted posting to list members only, to prevent any more spam getting thorough. Sorry about that. dave -- http://david.holroyd.me.uk/ From dave at badgers-in-foil.co.uk Wed Apr 13 09:30:27 2005 From: dave at badgers-in-foil.co.uk (David Holroyd) Date: Wed, 13 Apr 2005 09:30:27 +0000 Subject: [cvsspam-devel] Cvs/cvsspam bug has been found In-Reply-To: References: Message-ID: <20050413093027.GB18881@vhost.badgers-in-foil.co.uk> Hi there, On Tue, Apr 12, 2005 at 02:43:18PM -0400, Boris Penchev wrote: > I was having this problem problem and I have not receive any type of > email: > root@devel1.500 test # cvs ci -m'test' > cvs commit: Examining . > Nothing in CVS/Entries for %s, /cvsroot/test > Checking in test.pl; > /cvsroot/test/Attic/test.pl,v <-- test.pl > new revision: 1.1.2.60; previous revision: 1.1.2.59 > done > > After a lot of thing in order to try to debug this think I found that > new version (or the oldest) do not need %s or other argument. What version of CVS is installed on the server? > Change in file CVSROOT/commitinfo row > DEFAULT /usr/bin/record_lastdir.rb %r/%p %s ...is the syntax used by newer versions of CVS (1.12.x series) > with: > DEFAULT /usr/bin/record_lastdir.rb > > (no arguments to the new one) ...is the syntax required by older versions of CVS Also, note that newer versions of CVS understand the keyword 'UseNewInfoFmtStrings', when seen in 'CVSROOT/config', to control the use of these parameters: https://www.cvshome.org/docs/manual/cvs-1.12.8/cvs_18.html#SEC173 I hope that helps, dave -- http://david.holroyd.me.uk/ From glen at delfi.ee Fri Apr 15 12:09:37 2005 From: glen at delfi.ee (Elan =?iso-8859-1?q?Ruusam=E4e?=) Date: Fri, 15 Apr 2005 15:09:37 +0300 Subject: [cvsspam-devel] gpg signing/crypting Message-ID: <200504151509.37559.glen@delfi.ee> hi is there way to gpg sign/crypt mails sent out by cvsspam? i guess easiest way is to create sendmail wrapper? ps: david how's going with the treading mails feature? -- glen From dave at badgers-in-foil.co.uk Tue Apr 19 13:26:38 2005 From: dave at badgers-in-foil.co.uk (David Holroyd) Date: Tue, 19 Apr 2005 13:26:38 +0000 Subject: [cvsspam-devel] gpg signing/crypting In-Reply-To: <200504151509.37559.glen@delfi.ee> References: <200504151509.37559.glen@delfi.ee> Message-ID: <20050419132638.GB9211@vhost.badgers-in-foil.co.uk> Hi. Sorry for the delayed reply, On Fri, Apr 15, 2005 at 03:09:37PM +0300, Elan Ruusam?e wrote: > is there way to gpg sign/crypt mails sent out by cvsspam? > i guess easiest way is to create sendmail wrapper? Depends what you want this for, I guess. I think you're going to have problems if you need outboud emails to be signed or encrypted by the private key of the committing user: How will they enter their passphrase? The server will need the private key of every user (!) etc. If you just want a sort of 'server key' (presumably without passphrase), then I don't think it's really any of CVSspam's business, and a sendmail wrapper should do just fine. > ps: david how's going with the treading mails feature? Sorry :( I've not got around to it yet. dave -- http://david.holroyd.me.uk/