--Boundary_(ID_TlmLM4p4p0SqxQgU8NofSQ)
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT

OK, this is my updated version of the chart producing script that is in 
full compliance with the rules...those pesky things.  All byes will be 
in the first round.  The file is attached as the wrapping is messing it 
up.  My other submission, that is 56 lines compared to this 463-liner, 
does not have the problem that was fixed in this version.

The sample output from the quiz examples (with 2 FREE!):
daniel@daniel-desktop:~$ ./tournie.rb -n 6 -c
   1
  -----+
       |---+
  -----+   |  1
   bye     +----+
           |    |---+
   4       +----+   |
  -----+   |  4     |
       |---+        |
  -----+            |  1
   5                +----+
                    |    |---> 1
   2                +----+
  -----+            |  2
       |---+        |
  -----+   |  2     |
   bye     +----+   |
           |    |---+
   3       +----+
  -----+   |  3
       |---+
  -----+
   6

daniel@daniel-desktop:~$ ./tournie.rb -n 8 -c
   1
  ---+
     |---+
  ---+   |  1
   8     +----+
         |    |---+
   4     +----+   |
  ---+   |  4     |
     |---+        |
  ---+            |  1
   5              +----+
                  |    |---> 1
   2              +----+
  ---+            |  2
     |---+        |
  ---+   |  2     |
   7     +----+   |
         |    |---+
   3     +----+
  ---+   |  3
     |---+
  ---+
   6


daniel@daniel-desktop:~$ ./tournie.rb -f tournie.csv -c
   Red Devils
  ------------+
              |---+
  ------------+   |  Red Devils
   Underdogs      +-------------+
                  |             |---+
   Metrostart     +-------------+   |
  ------------+   |  Metrostart     |
              |---+                 |
  ------------+                     |  Red Devils
   Giants                           +-------------+
                                    |             |---> Red Devils
   Mets                             +-------------+
  ------------+                     |  Mets
              |---+                 |
  ------------+   |  Mets           |
   Jets           +-------------+   |
                  |             |---+
   Yankees        +-------------+
  ------------+   |  Yankees
              |---+
  ------------+
   Red Sox

daniel@daniel-desktop:~$ ./tournie.rb -f tournie.csv -c -5 c
   Red Devils
  ------------+
              |---+
  ------------+   |  Red Devils
    Underdogs     +-------------+
                  |             |---+
   Metrostart     +-------------+   |
  ------------+   |  Metrostart     |
              |---+                 |
  ------------+                     |  Red Devils
     Giants                         +-------------+
                                    |             |---> Red Devils
      Mets                          +-------------+
  ------------+                     |     Mets
              |---+                 |
  ------------+   |     Mets        |
      Jets        +-------------+   |
                  |             |---+
     Yankees      +-------------+
  ------------+   |    Yankees
              |---+
  ------------+
     Red Sox

--Boundary_(ID_TlmLM4p4p0SqxQgU8NofSQ)
Content-type: text/x-comma-separated-values; name=tournie.csv
Content-transfer-encoding: 7BIT
Content-disposition: inline; filename=tournie.csv

5,Metrostart
4,Yankees
8,Red Sox
7,Giants
2,Red Devils
9,Jets
3,Mets
56,Underdogs

--Boundary_(ID_TlmLM4p4p0SqxQgU8NofSQ)
Content-type: application/x-ruby; name=tournie.rb
Content-transfer-encoding: base64
Content-disposition: inline; filename=tournie.rb

IyEgL3Vzci9iaW4vcnVieQpyZXF1aXJlICdlbnVtZXJhdG9yJwpyZXF1aXJlICdvcHRwYXJz
ZScKcmVxdWlyZSAnb3N0cnVjdCcKCmNsYXNzIFN0cmluZwoJIyBBbGlhcyBmb3IgU3RyaW5n
I2NlbnRlciB0aGF0IGZpdHMgaW50byB0aGUgbGp1c3QsIHJqdXN0IG5hbWluZyBzY2hlbWUu
CglkZWYgY2p1c3QoKmFyZ3MpCgkJc2VsZi5jZW50ZXIoKmFyZ3MpCgllbmQKCQoJIyBhbGln
big6ciwgNSkgLS0+IHJqdXN0KDUpLiAgQWxpZ25tZW50IGNhbiBiZSA6ciwgOmwsIDpjCglk
ZWYgYWxpZ24oYWxpZ25tZW50LCAqYXJncykKCQlzZWxmLnNlbmQoKGFsaWdubWVudC50b19z
ICsgImp1c3QiKS50b19zeW0sICphcmdzKQoJZW5kCmVuZAkKCmNsYXNzIE51bWVyaWMKCSMg
SXMgdGhlIGdpdmVuIG51bWJlciBhIHBvd2VyIG9mIHNlbGY/CgkjIDE2LmlzUG93ZXJPZigy
KSA9PSB0cnVlCgkjIDEwMC5pc1Bvd2VyT2YoMikgPT0gZmFsc2UKCWRlZiBpc1Bvd2VyT2Yo
b3RoZXIpCgkJaSA9IDAKCQl3aGlsZSAob3RoZXIgKiogaSA8PSBzZWxmKQoJCQlyZXR1cm4g
dHJ1ZSBpZiBvdGhlciAqKiBpID09IHNlbGYKCQkJaSArPSAxCgkJZW5kCgkJZmFsc2UKCWVu
ZAoJCglkZWYgYXZlcmFnZShvdGhlcikKCQkoc2VsZiArIG90aGVyKSAvIDIKCWVuZAplbmQK
CiMgUm91bmRzIGhhdmUgbWF0Y2hlcyB3aGljaCBoYXZlIGEgd2lubmluZyBhbmQgbG9vc2lu
ZyB0ZWFtLgpjbGFzcyBNYXRjaAoJZGVmIGluaXRpYWxpemUoKnRlYW1zKQoJCUB0ZWFtcyA9
IHRlYW1zLnNvcnQKCQlzZXRMb3NlcgoJZW5kCgkKCSMgVGhlIGxvc2VyIGlzIGRlZmluZWQg
YXMgdGhlIHRlYW0gd2l0aCB0aGUgbG93ZXN0IHJhbmtpbmcgYmVmb3JlIHRoZSB0b3VybmFt
ZW50LgoJZGVmIHNldExvc2VyCgkJQHRlYW1zLmxhc3QuZWxpbWluYXRlCgllbmQKCQoJZGVm
IHdpbm5lcgoJCUB0ZWFtcy5maW5ke3x4fCAheC5lbGltaW5hdGVkP30KCWVuZAoJCglkZWYg
bG9zZXIKCQlAdGVhbXMuZmluZHt8eHwgeC5lbGltaW5hdGVkPyB9CgllbmQKCQoJIyBSZXR1
cm4gaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6IDx3aW5uZXI+IHZzLiA8bG9vc2VyPgoJZGVm
IHRvX3MKCQlAdGVhbXMuY29sbGVjdHt8dGVhbXwgdGVhbS50b19zfS5qb2luKCIgdnMuICIp
CgllbmQKCQoJYXR0cl9yZWFkZXIgOnRlYW1zCmVuZAoKIyBUb3VybmFtZW50cyBoYXZlIHJv
dW5kcywgd2hpY2ggaGF2ZSBtYXRjaGVzLgpjbGFzcyBSb3VuZAoJQEB0b3RhbFJvdW5kcyA9
IDAKCQoJZGVmIGluaXRpYWxpemUoKQoJCUBtYXRjaGVzID0gW10KCQlAcm91bmROdW0gPSBA
QHRvdGFsUm91bmRzICs9IDEKCWVuZAoJCglkZWYgYWRkTWF0Y2gobWF0Y2gpCgkJQG1hdGNo
ZXMucHVzaChtYXRjaCkKCWVuZAoKCSMgUHJpbnRzIHRoZSByb3VuZCBpbiAiUm91bmQgeDog
PG1hdGNoPiwgPG1hdGNoPiwgZXRjLiIgZm9ybWF0LgoJZGVmIHRvX3MKCQkiUm91bmQgI3tA
cm91bmROdW19OiAiICsgQG1hdGNoZXMuam9pbigiLCAiKSArICIuIgoJZW5kCgkKCSMgVGhp
cyBjaGFuZ2VzIHRoZSBvcmRlciBvZiB0aGUgbWF0Y2hlcyBzbyB0aGF0IGluIHRoZSBuZXh0
IHJvdW5kLCB0aGUgbW9zdCBleHRyZW1lIHRlYW1zIHdpbGwgZmFjZSBvZmYuCgkjIEFzc3Vt
ZXMgdGhhdCB0aGUgbWF0Y2hlcyB3ZXJlIHByZXZpb3VzbHkgc29ydGVkIGJ5IGZhdm9yYWJp
bGl0eSAoYXNjIG9yIGRlc2MpCglkZWYgc29ydCEKCQlzb3J0ZWQgPSBbXQoJCXdoaWxlIEBt
YXRjaGVzLmxlbmd0aCA+IDAKCQkJc29ydGVkIDw8IEBtYXRjaGVzLnNoaWZ0IDw8IEBtYXRj
aGVzLnBvcAoJCWVuZAoJCUBtYXRjaGVzID0gc29ydGVkLmNvbXBhY3QKCQlzZWxmCgllbmQK
CQoJYXR0cl9yZWFkZXIgOnJvdW5kTnVtLCA6bWF0Y2hlcwplbmQKCiMgTWF0Y2hlcyBoYXZl
IHRlYW1zIHdoaWNoIGhhdmUgaW5mbyBhYm91dCB0aGVtc2VsdmVzLgpjbGFzcyBUZWFtCglA
QGZhdm9yZWQgPSBbXQoJQEBjdXJyZW50Um91bmQgPSBuaWwKCUBAdG90YWwgPSAwCgkKCWRl
ZiBpbml0aWFsaXplKG5hbWUpCgkJQG5hbWUgPSBuYW1lCgkJQGVsaW1pbmF0ZWQgPSBmYWxz
ZQoJCUByb3VuZHMgPSBbXQoJCUBAZmF2b3JlZC5wdXNoKHNlbGYpCgkJQEB0b3RhbCArPSAx
CgkJc2VsZgoJZW5kCgkKCSMgUmVtb3ZlIGEgdGVhbSBmcm9tIGZ1dHVyZSByb3VuZHMgaWYg
dGhleSBsb3N0LgoJZGVmIGVsaW1pbmF0ZQoJCUBlbGltaW5hdGVkID0gdHJ1ZQoJCUBAZmF2
b3JlZC5kZWxldGUoc2VsZikKCWVuZAoJCgkjIElmIGEgdGVhbSBoYXMgcGxheWVkIGluIGEg
Y2VydGFpbiByb3VuZC4KCWRlZiBpblJvdW5kPygpCgkJQHJvdW5kcy5pbmNsdWRlPyBAQGN1
cnJlbnRSb3VuZAoJZW5kCgkKCSMgQWRkIGEgcm91bmQgYSB0ZWFtIGhhcyBwbGF5ZWQgaW4K
CWRlZiBhZGRQbGF5ZWRSb3VuZCgpCgkJQHJvdW5kcyA8PCBAQGN1cnJlbnRSb3VuZAoJCXNl
bGYKCWVuZAoJCgkjIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0ZWFtcyBub3QgaW4gdGhlIGN1
cnJlbnQgcm91bmQgYnkgZmF2b3JhYmlsaXR5LgoJZGVmIHNlbGYuZWxpZ2libGVUZWFtcygp
CgkJQEBmYXZvcmVkLnNlbGVjdHt8eHwgIXguaW5Sb3VuZD99LnNvcnQKCWVuZAoJCglkZWYg
PD0+KG90aGVyKQoJCUBAZmF2b3JlZC5pbmRleChzZWxmKSA8PT4gQEBmYXZvcmVkLmluZGV4
KG90aGVyKQoJZW5kCgkKCWRlZiBzZWxmLmN1cnJlbnRSb3VuZD0ocm91bmQpCgkJQEBjdXJy
ZW50Um91bmQgPSByb3VuZAoJZW5kCgkKCWRlZiBzZWxmLnRvdGFsCgkJQEB0b3RhbAoJZW5k
CgkKCWF0dHJfcmVhZGVyIDpuYW1lLCA6ZWxpbWluYXRlZAoJYWxpYXNfbWV0aG9kIDoiZWxp
bWluYXRlZD8iLCA6ZWxpbWluYXRlZAoJYWxpYXNfbWV0aG9kIDoidG9fcyIsIDpuYW1lCmVu
ZAoKY2xhc3MgVG91cm5hbWVudAoJIyBSZWNpZXZlcyBhbiBhcmF5IG9mIHRlYW0gbmFtZXMg
aW4gb3JkZXIgb2YgcmFua2luZyB3aXRoIHRoZSBiZXN0IGZpcnN0LgoJZGVmIGluaXRpYWxp
emUodGVhbXMpCgkJQHRlYW1zID0gdGVhbXMuY29sbGVjdCB7fHRlYW18IFRlYW0ubmV3KHRl
YW0udG9fcykgfQoJCUByb3VuZHMgPSBbXQoJZW5kCgkKCWRlZiBjcmVhdGVOZXh0Um91bmQK
CQljdXJyZW50Um91bmQgPSBSb3VuZC5uZXcoKQoJCVRlYW0uY3VycmVudFJvdW5kID0gY3Vy
cmVudFJvdW5kCgkJCgkJIyBUaGUgdG9wIHRlYW1zIGhhdmUgYSAiYnllIiBvcHBvbmVudCBp
ZiB0aGUgbnVtYmVyIG9mIHRlYW1zIGlzbid0IGEgcG93ZXIgb2YgdHdvLiAgQnllIG9wcG9u
ZW50cyBhbHdheXMgbG9zZS4KCQl1bnRpbCAoVGVhbS50b3RhbC5pc1Bvd2VyT2YoMikpCgkJ
CWN1cnJlbnRSb3VuZC5hZGRNYXRjaCggTWF0Y2gubmV3KAoJCQkJVGVhbS5lbGlnaWJsZVRl
YW1zLmZpcnN0LmFkZFBsYXllZFJvdW5kLAoJCQkJVGVhbS5uZXcoImJ5ZSIpLmFkZFBsYXll
ZFJvdW5kCgkJCSkgKQoJCWVuZAoJCQoJCSMgQXNzaWduIHRoZSByZXN0IG9mIHRoZSB0ZWFt
cyB0byBwbGF5IHRoZWlyIGV4dHJlbWUgb3Bwb3NpdGVzLgoJCXdoaWxlKFRlYW0uZWxpZ2li
bGVUZWFtcy5sZW5ndGggPiAxKQoJCQljdXJyZW50Um91bmQuYWRkTWF0Y2goIE1hdGNoLm5l
dygKCQkJCVRlYW0uZWxpZ2libGVUZWFtcy5sYXN0LmFkZFBsYXllZFJvdW5kLAoJCQkJVGVh
bS5lbGlnaWJsZVRlYW1zLmZpcnN0LmFkZFBsYXllZFJvdW5kCgkJCSkgKQoJCWVuZAoJCQoJ
CWN1cnJlbnRSb3VuZC5zb3J0ISBpZiBjdXJyZW50Um91bmQucm91bmROdW0gPT0gMQoJCUBy
b3VuZHMucHVzaChjdXJyZW50Um91bmQpCgllbmQKCQoJZGVmIGNyZWF0ZUFsbFJvdW5kcwoJ
CXVudGlsIChAdGVhbXMuZmluZF9hbGx7fHh8ICF4LmVsaW1pbmF0ZWQ/fS5sZW5ndGggPT0g
MSkKCQkJY3JlYXRlTmV4dFJvdW5kCgkJZW5kCgllbmQKCQoJZGVmIHRvX3MKCQlAcm91bmRz
LmpvaW4oIlxuIikKCWVuZAoJCglkZWYgdG9BU0NJSUNoYXJ0KGNoYXJ0SGVpZ2h0TW9kaWZp
ZXIsIHNwYWNpbmdMZWZ0LCBzcGFjaW5nUmlnaHQsIGFsaWdubWVudCkKCQkjIEV2ZXJ5dGhp
bmcgZ29lcyBpbnRvIHRoaXMgYXJyYXkgaW4gb3V0cHV0W3hdW3ldIGZvcm1hdCwgd2hpY2gg
aXMgdGhlbiBwcmludGVkLiAgVGhlIG9yaWdpbiBpcyBpbiB0aGUgdG9wIGxlZnQuCgkJb3V0
cHV0ID0gQVNDSUlDb29yZGluYXRlUGxhbmUubmV3CgkJCgkJIyBUaGlzIHN0b3JlcyB0aGUg
bWlkcG9pbnRzIG9mIHRoZSBleGlzdGluZyBnYW1lcyBvdXRwdXR0ZWQgc28gdGhhdCB0aGUg
bmV4dCByb3VuZCdzIG1hdGNoZXMgd2lsbCBiZSBhbGlnbmVkIGluIGJldHdlZW4gdGhpcyBy
b3VuZCdzIG1hdGNoZXMuCgkJbWlkcG9pbnRzID0gSGFzaC5uZXcoIEFycmF5Lm5ldyApCgkJ
bWlkcG9pbnRzWzFdID0gW2NoYXJ0SGVpZ2h0TW9kaWZpZXJdCgkJQHJvdW5kcy5maXJzdC5t
YXRjaGVzLmVhY2gge21pZHBvaW50c1sxXS51bnNoaWZ0KCBtaWRwb2ludHNbMV0uZmlyc3Qg
LSAoY2hhcnRIZWlnaHRNb2RpZmllciArIDIpICl9CgkJCgkJeCA9IDIKCQkKCQkjIEV2ZXJ5
IHJvdW5kIGlzIG9uZSBjb2x1bW4uCgkJQHJvdW5kcy5lYWNoIGRvIHxyb3VuZHwKCQkJIyBU
aGUgbG9uZ2VzdCB0ZWFtIG5hbWUuCgkJCWNvbHVtbldpZHRoID0gcm91bmQubWF0Y2hlcy5j
b2xsZWN0e3xtYXRjaHwgbWF0Y2gudGVhbXN9LmZsYXR0ZW4uY29sbGVjdHt8dGVhbXwgdGVh
bS5uYW1lfS5tYXh7fGEsIGJ8IGEubGVuZ3RoIDw9PiBiLmxlbmd0aH0ubGVuZ3RoICsgc3Bh
Y2luZ1JpZ2h0CgkJCQoJCQljb25uZWN0VGhlRG90cyA9IFtdCgkJCWluc2VydE1pZHBvaW50
ID0gdHJ1ZQoJCQkKCQkJIyBFdmVyeSBpdGVyYXRpb24gbWFrZXMgMSBtYXRjaCBhcHBlYXIu
CgkJCXJvdW5kLm1hdGNoZXMucmV2ZXJzZS5lYWNoIGRvIHxtYXRjaHwKCQkJCXkgPSBtaWRw
b2ludHNbcm91bmQucm91bmROdW1dLnNoaWZ0ICsgMgoJCQkJCgkJCQkjIFRoZSBmaXJzdCB0
ZWFtJ3MgbmFtZS4KCQkJCW91dHB1dC5zZXQoeCwgeSwgbWF0Y2gudGVhbXNbMF0ubmFtZS50
b19zLmFsaWduKGFsaWdubWVudCwgY29sdW1uV2lkdGgpKQoJCQkJCgkJCQkjIFRoZSBsaW5l
IHVuZGVyIHRoYXQgdGVhbSdzIG5hbWUuCgkJCQlvdXRwdXQuZmlsbCh4IC0gc3BhY2luZ0xl
ZnQsIHkgLT0gMSwgeCArIGNvbHVtbldpZHRoLCB5LCAiLSIpCgkJCQlvdXRwdXQuc2V0KHgg
LSBzcGFjaW5nTGVmdCwgeSwgIisiKQoJCQkJb3V0cHV0LmZpbGwoMCwgeSwgeCAtIDEsIHks
ICIgIikgaWYgcm91bmQucm91bmROdW0gPT0gMQoJCQkJCgkJCQkjIFRoZSBjb25uZWN0b3Ig
dG8gdGhlIG5leHQgcm91bmQuCgkJCQlvdXRwdXQuc2V0KHggKyBjb2x1bW5XaWR0aCArIDEs
IHkgLT0gMSwgIi0iICogMykKCQkJCQoJCQkJIyBEZWFscyB3aXRoIHRoZSBtaWRwb2ludHMu
CgkJCQlpZiBpbnNlcnRNaWRwb2ludAoJCQkJCW1pZHBvaW50c1tyb3VuZC5yb3VuZE51bSAr
IDFdLnB1c2goeSkKCQkJCWVsc2UKCQkJCQltaWRwb2ludHNbcm91bmQucm91bmROdW0gKyAx
XS5wdXNoKCBtaWRwb2ludHNbcm91bmQucm91bmROdW0gKyAxXS5wb3AuYXZlcmFnZSh5KSAp
CgkJCQllbmQKCQkJCWluc2VydE1pZHBvaW50ID0gIWluc2VydE1pZHBvaW50CgkJCQkKCQkJ
CSMgVGhlIGxpbmUgYWJvdmUgdGhlIG5leHQgdGVhbSdzIG5hbWUuCgkJCQlvdXRwdXQuZmls
bCh4IC0gc3BhY2luZ0xlZnQsIHkgLT0gMSwgeCArIGNvbHVtbldpZHRoLCB5LCAiLSIpCgkJ
CQlvdXRwdXQuc2V0KHggLSBzcGFjaW5nTGVmdCwgeSwgIisiKQoJCQkJb3V0cHV0LmZpbGwo
MCwgeSwgeCAtIDEsIHksICIgIikgaWYgcm91bmQucm91bmROdW0gPT0gMQoJCQkJCgkJCQkj
IFRoZSBuZXh0IHRlYW0ncyBuYW1lLgoJCQkJb3V0cHV0LnNldCh4LCB5IC09IDEsIG1hdGNo
LnRlYW1zWzFdLm5hbWUudG9fcy5hbGlnbihhbGlnbm1lbnQsIGNvbHVtbldpZHRoKSkKCQkJ
CQoJCQkJIyBUaGUgbGluZSBvbiB0aGUgcmlnaHQgb2YgdGhlIG1hdGNoIGdvaW5nIHZlcnRp
Y2FsbHkuCgkJCQlvdXRwdXQudmVydExpbmUoeCArIGNvbHVtbldpZHRoLCB5ICsgMywgeSsx
KQoJCQkJCgkJCQkjIFRvIGNvbm5lY3QgdGhlIG1hdGNoIGFuZCB0aGUgbmV4dCBtYXRjaCB0
byBlYWNoIG90aGVyLgoJCQkJY29ubmVjdFRoZURvdHMucHVzaCh5KzIpCgkJCWVuZAoJCQl4
ICs9IGNvbHVtbldpZHRoICsgNAoJCQkKCQkJIyBNYWtlcyB0aGUgbGluZXMgdmVydGljYWxs
eSBiZXR3ZWVuIG1hdGNoZXMuCgkJCWNvbm5lY3RUaGVEb3RzLmVhY2hfc2xpY2UoMikgZG8g
fHl2YWx1ZXN8CgkJCQlzdGFydGluZyA9IHl2YWx1ZXNbMF0KCQkJCWlmIHl2YWx1ZXNbMV0K
CQkJCQllbmRpbmcgPSB5dmFsdWVzWzFdCgkJCQllbHNlCgkJCQkJZW5kaW5nID0gc3RhcnRp
bmcKCQkJCWVuZAoJCQkJCgkJCQlvdXRwdXQudmVydExpbmUoeCwgc3RhcnRpbmcsIGVuZGlu
ZykKCQkJZW5kCgkJCQoJCQl4ICs9IHNwYWNpbmdMZWZ0CgkJZW5kCgkJCgkJIyBQcmludCB0
aGUgd2lubmluZyB0ZWFtLgoJCW91dHB1dC5zZXQoeCAtIHNwYWNpbmdMZWZ0LCBtaWRwb2lu
dHNbQHJvdW5kcy5sZW5ndGhdLmxhc3QsICI+ICIgKyBAcm91bmRzLmxhc3QubWF0Y2hlc1sw
XS53aW5uZXIubmFtZSkKCQlvdXRwdXQKCWVuZAoJCglhdHRyX3JlYWRlciA6cm91bmRzCmVu
ZAoKIyBSZXByZXNlbnRzIGEgY29vcmRpbmF0ZSBwbGFuZSB3aXRoIHRoZSBvcmlnaW4gaW4g
dGhlIHRvcCBsZWZ0LiAgRXZlcnkgcG9zaXRpb24gY2FuIHN0b3JlIGEgY2hhcmFjdGVyLgpj
bGFzcyBBU0NJSUNvb3JkaW5hdGVQbGFuZQoJZGVmIGluaXRpYWxpemUKCQkjIFRoYW5rIHlv
dSBKb2VsIFZhbmRlcldlcmYhCgkJQHZhbHVlID0gSGFzaC5uZXcge3xoLGt8IGhba10gPSBI
YXNoLm5ldyB7IiAifX0KCQkKCQlAbWF4eCA9IDEwCgkJQG1pbnkgPSAtMTAKCWVuZAoJCgkj
IFNldHMgYSBzcGVjaWZpYyBjaGFyYWN0ZXIgdG8gYSBwb2ludCwgb3ZlcmZsb3dpbmcgb250
byBwb2ludHMgdG8gdGhlIHJpZ2h0IGlmIG5lY2Nlc3NhcnkuCglkZWYgc2V0KHgsIHksIHN0
cmluZykKCQkwLnVwdG8oc3RyaW5nLmxlbmd0aC0xKSBkbyB8aW5kZXh8CgkJCUB2YWx1ZVt4
XVt5XSA9IHN0cmluZ1tpbmRleF0uY2hyCQoJCQl4ICs9IDEKCQllbmQKCQkKCQlAbWlueSA9
IHkgaWYgeSA8IEBtaW55CgkJQG1heHggPSB4IGlmIHggPiBAbWF4eAoJZW5kCgkKCSMgRmls
bCBhIGhvcml6b250YWwgbGluZSB3aXRoIGEgcmVwZWF0aW5nIGNoYXJhY3Rlci4KCWRlZiBm
aWxsSG9yeihvcHRzKQoJCXNldChvcHRzWzpzdGFydHhdLCBvcHRzWzpzdGFydHldLCBvcHRz
WzpzdHJpbmcgXSAqIChvcHRzWzplbmR4XSAtIG9wdHNbOnN0YXJ0eF0pLmFicykKCWVuZAoJ
CgkjIEZpbGwgYSB2ZXJ0aWNhbCBsaW5lIHdpdGggYSByZXBlYXRpbmcgY2hhcmFjdGVyLgoJ
ZGVmIGZpbGxWZXJ0KG9wdHMpCgkJeXZhbHVlcyA9IFtvcHRzWzpzdGFydHldLCBvcHRzWzpl
bmR5XV0KCQl5ID0geXZhbHVlcy5tYXgKCQkKCQl1bnRpbCAoeSA8IHl2YWx1ZXMubWluKQoJ
CQlzZXQob3B0c1s6c3RhcnR4XSwgeSwgb3B0c1s6c3RyaW5nXSkKCQkJeSAtPSAxCgkJZW5k
CgllbmQKCQoJIyBGaWxscyBhIHN0cmFpZ2h0LCBub24tZGlhZ29uYWwgbGluZSB3aXRoIGEg
cmVwZWF0aW5nIGNoYXJhY3RlcgoJZGVmIGZpbGwoc3RhcnR4LCBzdGFydHksIGVuZHgsIGVu
ZHksIHN0cmluZykKCQlpZiBzdGFydHggPT0gZW5keAoJCQlmaWxsVmVydCh7OnN0YXJ0eCA9
PiBzdGFydHgsIDplbmR4ID0+IGVuZHgsIDpzdGFydHkgPT4gc3RhcnR5LCA6ZW5keSA9PiBl
bmR5LCA6c3RyaW5nID0+IHN0cmluZ30pCgkJZWxzZQoJCQlmaWxsSG9yeih7OnN0YXJ0eCA9
PiBzdGFydHgsIDplbmR4ID0+IGVuZHgsIDpzdGFydHkgPT4gc3RhcnR5LCA6ZW5keSA9PiBl
bmR5LCA6c3RyaW5nID0+IHN0cmluZ30pCgkJZW5kCgllbmQKCQoJIyBDcmVhdGVzIGEgdmVy
dGljYWwgbGluZSB3aXRoICsncyBmb3IgdGhlIGxpbmUgZW5kaW5ncy4KCWRlZiB2ZXJ0TGlu
ZSh4LCBzdGFydHksIGVuZHkpCgkJZmlsbCh4LCBzdGFydHksIHgsIGVuZHksICJ8IikKCQlb
c3RhcnR5LCBlbmR5XS5lYWNoIHt8eXwgc2V0KHgsIHksICIrIikgfQoJZW5kCgkKCSMgT3V0
cHV0cyB0aGUgY29vcmRpbmF0ZSBwbGFuZSB0byBhIHN0cmluZyB3aXRoIHNwYWNlcyB3aGVy
ZSBubyBjaGFyYWN0ZXIgd2FzIGVudGVyZWQuCglkZWYgdG9fcwoJCW91dHB1dCA9ICIiCgkJ
MC5kb3dudG8oQG1pbnkpIGRvIHx5fAoJCQkwLnVwdG8oQG1heHgpIGRvIHx4fAoJCQkJb3V0
cHV0ICs9IEB2YWx1ZVt4XVt5XQoJCQllbmQKCQkJb3V0cHV0ICs9ICJcbiIKCQllbmQKCQlv
dXRwdXQKCWVuZAplbmQKCmNsYXNzIE9wdFBhcnNlcgoJZGVmIHNlbGYucGFyc2UoYXJncykK
CQlvcHRpb25zID0gT3BlblN0cnVjdC5uZXcKCQlvcHRpb25zLmNzdiA9IG5pbAoJCW9wdGlv
bnMubnVtZXJpY2FsID0gbmlsCgkJb3B0aW9ucy5sZWFndWUgPSBuaWwKCQlvcHRpb25zLmNo
YXJ0ID0gZmFsc2UKCQlvcHRpb25zLmNoYXJ0aGVpZ2h0ID0gNAoJCW9wdGlvbnMuc3BhY2lu
Z2xlZnQgPSAzCgkJb3B0aW9ucy5zcGFjaW5ncmlnaHQgPSAxCgkJb3B0aW9ucy5hbGlnbm1l
bnQgPSA6bAoJCW9wdGlvbnMudGV4dHVhbCA9IGZhbHNlCgkJCgkJIyBXaGVuIGNhbGxlZCB3
aXRoIG5vIG9wdGlvbnMsIHNob3cgdGhlIGhlbHAuCgkJYXJncyA9IFsiLT8iXSBpZiBhcmdz
LmVtcHR5PwoJCQoJCW9wdHMgPSBPcHRpb25QYXJzZXIubmV3IGRvIHxvcHRzfAoJCQlvcHRz
LmJhbm5lciA9ICJVc2FnZTogdG91cm5pZS5yYiBbb3B0aW9uc10iCgkJCW9wdHMuc2VwYXJh
dG9yICIiCgkJCW9wdHMuc2VwYXJhdG9yICJVc2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0
aW9ucyB0byBkZXRlcm1pbmUgdGhlIHRlYW1zOiIKCQkJCgkJCSMgRnJvbSAxIHRvIGEgbnVt
ZXJpY2FsIHZhbHVlLgoJCQlvcHRzLm9uKCItbiIsICItLW51bWVyaWNhbCBURUFNUyIsCgkJ
CQkJIlRFQU1TIG51bWJlciBvZiB0ZWFtcyB3aGVyZSAxIGlzIHRoZSBiZXN0IiwKCQkJCQki
YW5kIFRFQU1TIGlzIHRoZSB3b3JzdC4iKSBkbyB8bnwKCQkJCQkJb3B0aW9ucy5udW1lcmlj
YWwgPSBuCgkJCWVuZAoJCQkKCQkJIyBGcm9tIGEgQ1NWIGZpbGUKCQkJb3B0cy5vbigiLWYi
LCAiLS1mcm9tLWNzdiBGSUxFIiwKCQkJCQkiQ1NWIGZpbGUgRklMRSB0byBnZXQgdGVhbSBk
YXRhIGZyb20uIiwKCQkJCQkiPHJhbms+LDxuYW1lPlxcbiBmb3JtYXQiKSBkbyB8ZmlsZXwK
CQkJCQkJb3B0aW9ucy5jc3YgPSBmaWxlCgkJCWVuZAoJCQkKCQkJb3B0cy5zZXBhcmF0b3Ig
IiIKCQkJb3B0cy5zZXBhcmF0b3IgIkFuZCBhbnkgbnVtYmVyIG9mIHRoZXNlIHRvIGRldGVy
bWluZSB0aGUgb3V0cHV0IGZvcm1hdChzKToiCgkJCQoJCQkjIENoYXJ0IGJhc2VkIHJlcHJl
c2VudGF0aW9uCgkJCW9wdHMub24oIi1jIiwgIi0tW25vLV1jaGFydCIsCgkJCQkJIkRpc3Bs
YXkgYW4gQVNDSUkgYmFzZWQgY2hhcnQgb2Ygcm91bmRzIikgZG8gfGNoYXJ0WWVzTm9NYXli
ZU5hTnwKCQkJCQkJb3B0aW9ucy5jaGFydCA9IGNoYXJ0WWVzTm9NYXliZU5hTgoJCQllbmQK
CQkJCgkJCSMgVGV4dHVhbCByZXByZXNlbnRhdGlvbgoJCQlvcHRzLm9uKCItdCIsICItLVtu
by1ddGV4dCIsCgkJCQkJIkRpc3BsYXkgdGhlIHJvdW5kcyBpbiBhIHRleHR1YWwgZm9ybWF0
LCIsCgkJCQkJImZvciBleGFtcGxlOiIsCgkJCQkJIlJvdW5kIDE6IDEgdnMuIDgsIDQgdnMu
IDUuLi4iKSBkbyB8dGV4dHwKCQkJCQkJb3B0aW9ucy50ZXh0dWFsID0gdGV4dAoJCQllbmQK
CQkJCgkJCW9wdHMuc2VwYXJhdG9yICIiCgkJCW9wdHMuc2VwYXJhdG9yICJUaGUgZm9sbG93
aW5nIGFyZSBjb21wbGV0ZWx5IG9wdGlvbmFsOiIKCQkJb3B0cy5zZXBhcmF0b3IgIih0aGUg
c2hvcnQgbmFtZXMgY29ycmVzcG9uZCB3aXRoIHBvc2l0aW9ucyBvbiB0aGUgbnVtLXBhZCki
CgkJCQoJCQkjIENoYXJ0IGhlaWdodCBtb2RpZmllcgoJCQlvcHRzLm9uKCItOCIsICItLWNo
YXJ0LWhlaWdodCBIRUlHSFQiLAoJCQkJCSJDb250cm9scyB0aGUgdmVydGljYWwgc3BhY2lu
ZyBvbiB0aGUgY2hhcnQsIiwKCQkJCQkid2l0aCBhIGhpZ2hlciBIRUlHSFQgbWVhbmluZyBt
b3JlIHNwYWNpbmcuIiwgCgkJCQkJIkRlZmF1bHRzIHRvIDQsIG11c3QgYmUgYW4gaW50ZWdl
ciBhYm92ZSAyLiIpIGRvIHxoZWlnaHwKCQkJCQkJb3B0aW9ucy5jaGFydGhlaWdodCA9IGhl
aWdoLnRvX2kKCQkJZW5kCgkJCQkKCQkJIyBTcGFjaW5nIHRvIHRoZSBsZWZ0IG9mIHRlYW0g
bmFtZXMuCgkJCW9wdHMub24oIi00IiwgIi0tc3BhY2luZy1sZWZ0IFNQQUNFIiwKCQkJCQki
Q29udHJvbHMgdGhlIHNwYWNlIHRvIHRoZSBsZWZ0IG9mIHRoZSB0ZWFtIG5hbWVzLiIsCgkJ
CQkJIkRlZmF1bHRzIHRvIDMsIG11c3QgYmUgYSBwb3NpdGl2ZSwgbm9uLW5lZ2F0aXZlIGlu
dGVnZXIuIikgZG8gfHN8CgkJCQkJCW9wdGlvbnMuc3BhY2luZ2xlZnQgPSBzLnRvX2kKCQkJ
ZW5kCgkJCQoJCQkjIFNwYWNpbmcgdG8gdGhlIHJpZ2h0IG9mIHRlYW0gbmFtZXMuCgkJCW9w
dHMub24oIi02IiwgIi0tc3BhY2luZy1yaWdodCBTUEFDRSIsCgkJCQkJIkNvbnRyb2xzIHRo
ZSBzcGFjZSB0byB0aGUgcmlnaHQgb2YgdGhlIHRlYW0gbmFtZXMuIiwKCQkJCQkiRGVmYXVs
dHMgdG8gMSwgbXVzdCBiZSBhIHBvc2l0aXZlLCBub24tbmVnYXRpdmUgaW50ZWdlci4iKSBk
byB8c3wKCQkJCQkJb3B0aW9ucy5zcGFjaW5ncmlnaHQgPSBzLnRvX2kKCQkJZW5kCgkJCQoJ
CQkjIEFsaWdubWVudCBvZiB0ZWFtIG5hbWVzLgoJCQlvcHRzLm9uKCItNSIsICItLXRlYW0t
YWxpZ25tZW50IEFMSUdOTUVOVCIsCgkJCQkJIlRoZSBhbGlnbm1lbnQgb2YgdGVhbSBuYW1l
cyBvbiB0aGVpciBsaW5lcy4iLAoJCQkJCSJEZWZhdWx0cyB0byBbbF1lZnQsIGNhbiBiZSBb
cl1pZ2h0IG9yIFtjXWVudGVyZWQuIiwKCQkJCQkiVGFrZXMgLTYgYnV0IG5vdCAtNCBpbnRv
IGFjY291bnQuIikgZG8gfHN8CgkJCQkJCW9wdGlvbnMuYWxpZ25tZW50ID0gcy50b19zeW0K
CQkJZW5kCgkJCQoJCQlvcHRzLm9uKCItPyIsICItaCIsICItLWhlbHAiLCAiU2hvdyB0aGlz
IG1lc3NhZ2UiKSBkbwoJCQkJcHV0cyBvcHRzCgkJCQlleGl0CgkJCWVuZAoJCWVuZAoJCQoJ
CW9wdHMucGFyc2UhKGFyZ3MpCgkJb3B0aW9ucwoJZW5kCmVuZAoKIyBQYXJzZSBjb21tYW5k
IGxpbmUgYXJndW1lbnRzCm9wdHMgPSBPcHRQYXJzZXIucGFyc2UoQVJHVikKCiMgQ3JlYXRl
IHRoZSB0b3VybmFtZW50LgppZiAob3B0cy5udW1lcmljYWwpCgl0b3VybmllID0gVG91cm5h
bWVudC5uZXcoKDEuLihvcHRzLm51bWVyaWNhbC50b19pKSkudG9fYSkKZWxzZQoJdGVhbXMg
PSBIYXNoLm5ldwoJb3JkZXJlZFRlYW1zID0gQXJyYXkubmV3CglmID0gRmlsZS5uZXcob3B0
cy5jc3YpCgkKCWYuZWFjaF9saW5lIGRvIHxsaW5lfAoJCWxpbmUuY2hvbXAhCgkJbGluZSA9
fiAvXihbMC05XSspLCAqKC4qKSQvCgkJdGVhbXNbJDEudG9faV0gPSAkMgoJZW5kCgkKCXRl
YW1zLmtleXMuc29ydC5lYWNoIGRvIHxyYW5rfAoJCW9yZGVyZWRUZWFtcy5wdXNoKHRlYW1z
W3JhbmtdKQoJZW5kCgkKCXRvdXJuaWUgPSBUb3VybmFtZW50Lm5ldyhvcmRlcmVkVGVhbXMp
CmVuZAoKIyBEbyB0aGUgbG9naWMKdG91cm5pZS5jcmVhdGVBbGxSb3VuZHMKCiMgRGlzcGxh
eSB0aGUgdG91cm5hbWVudApwdXRzIHRvdXJuaWUudG9fcyBpZiBvcHRzLnRleHR1YWwKcHV0
cyB0b3VybmllLnRvQVNDSUlDaGFydChvcHRzLmNoYXJ0aGVpZ2h0LCBvcHRzLnNwYWNpbmds
ZWZ0LCBvcHRzLnNwYWNpbmdyaWdodCwgb3B0cy5hbGlnbm1lbnQpLnRvX3MgaWYgb3B0cy5j
aGFydA
--Boundary_(ID_TlmLM4p4p0SqxQgU8NofSQ)--