JavaScript must be enabled to play.
Browser lacks capabilities required to play.
Upgrade or switch to another browser.
Loading…
PHR3LXN0b3J5ZGF0YSBuYW1lPSJEdXN0IG9mIEVjaG9lcyIgc3RhcnRub2RlPSIxIiBjcmVhdG9yPSJUd2luZSIgY3JlYXRvci12ZXJzaW9uPSIyLjEyLjAiIGZvcm1hdD0iU3VnYXJDdWJlIiBmb3JtYXQtdmVyc2lvbj0iMi4zNy4zIiBpZmlkPSIyOTA5MDZFRS02NzMxLTRCMzQtQkE4Qi05MTQ2MDAzRjUwRDUiIG9wdGlvbnM9IiIgdGFncz0iIiB6b29tPSIxIiBoaWRkZW4+PHN0eWxlIHJvbGU9InN0eWxlc2hlZXQiIGlkPSJ0d2luZS11c2VyLXN0eWxlc2hlZXQiIHR5cGU9InRleHQvdHdpbmUtY3NzIj4uc3RvcnktcGFuZWwgewogICAgcGFkZGluZzogMC43NWVtOwogICAgY29sb3I6ICNlOGRjYzQ7CiAgICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIHNlcmlmOwogICAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKLnN0b3J5LXRpdGxlIHsKICAgIG1hcmdpbi1ib3R0b206IDFlbTsKICAgIGNvbG9yOiAjZDBhNDVjOwogICAgZm9udC1zaXplOiAxLjE1ZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5zdG9yeS1zdGF0dXMsCi5zdG9yeS1yZXNvdXJjZXMgewogICAgZm9udC1zaXplOiAwLjllbTsKfQoKLnN0b3J5LXBhbmVsIGhyIHsKICAgIG1hcmdpbjogMWVtIDA7CiAgICBib3JkZXI6IDA7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgIzcwNWIzYzsKfTwvc3R5bGU+PHNjcmlwdCByb2xlPSJzY3JpcHQiIGlkPSJ0d2luZS11c2VyLXNjcmlwdCIgdHlwZT0idGV4dC90d2luZS1qYXZhc2NyaXB0Ij4vKgogKiBEdXN0IG9mIEVjaG9lcwogKiBBbiBJbnRlcmFjdGl2ZSBTdXBlcm5hdHVyYWwgV2VzdGVybgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMjYgVG9ueSBNb3JlaXJhCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFZlcnNpb24gMC4xLjAKICoKICogVGhlIG9yaWdpbmFsIG5hcnJhdGl2ZSwgY2hhcmFjdGVycywgZGlhbG9ndWUsIGdhbWUgc3RydWN0dXJlLAogKiBhbmQgYXNzb2NpYXRlZCBjcmVhdGl2ZSBjb250ZW50IG1heSBub3QgYmUgcmVwcm9kdWNlZCwKICogcmVkaXN0cmlidXRlZCwgbW9kaWZpZWQsIG9yIHJlcHVibGlzaGVkIHdpdGhvdXQgd3JpdHRlbgogKiBwZXJtaXNzaW9uIGZyb20gdGhlIGF1dGhvci4KICovPC9zY3JpcHQ+PHR3LXRhZyBuYW1lPSJzY3JpcHQiIGNvbG9yPSJwdXJwbGUiPjwvdHctdGFnPjx0dy10YWcgbmFtZT0ib3BlbmluZyIgY29sb3I9Im9yYW5nZSI+PC90dy10YWc+PHR3LXRhZyBuYW1lPSJhY3QxIiBjb2xvcj0icmVkIj48L3R3LXRhZz48dHctdGFnIG5hbWU9ImRlc2VydCIgY29sb3I9InB1cnBsZSI+PC90dy10YWc+PHR3LXRhZyBuYW1lPSJ0b3duIiBjb2xvcj0iZ3JlZW4iPjwvdHctdGFnPjx0dy10YWcgbmFtZT0iaHViIiBjb2xvcj0icHVycGxlIj48L3R3LXRhZz48dHctdGFnIG5hbWU9InRvd24tc2Fsb29uIiBjb2xvcj0ieWVsbG93Ij48L3R3LXRhZz48dHctdGFnIG5hbWU9InNhbG9vbiIgY29sb3I9InB1cnBsZSI+PC90dy10YWc+PHR3LXRhZyBuYW1lPSJiYWRnZSIgY29sb3I9ImdyZWVuIj48L3R3LXRhZz48dHctdGFnIG5hbWU9Im1lbW9yeSIgY29sb3I9InB1cnBsZSI+PC90dy10YWc+PHR3LXRhZyBuYW1lPSJjaG9pY2UiIGNvbG9yPSJibHVlIj48L3R3LXRhZz48dHctdGFnIG5hbWU9InNoZXJpZmYiIGNvbG9yPSJvcmFuZ2UiPjwvdHctdGFnPjx0dy10YWcgbmFtZT0iY2x1ZSIgY29sb3I9InllbGxvdyI+PC90dy10YWc+PHR3LXRhZyBuYW1lPSJzeXN0ZW0iIGNvbG9yPSJwdXJwbGUiPjwvdHctdGFnPjx0dy10YWcgbmFtZT0iY2h1cmNoIiBjb2xvcj0icHVycGxlIj48L3R3LXRhZz48dHctdGFnIG5hbWU9InN0dWRpbyIgY29sb3I9InB1cnBsZSI+PC90dy10YWc+PHR3LXRhZyBuYW1lPSJzdG9yZSIgY29sb3I9ImJsdWUiPjwvdHctdGFnPjx0dy10YWcgbmFtZT0ianVkZ21lbnQiIGNvbG9yPSJncmVlbiI+PC90dy10YWc+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMSIgbmFtZT0iUHJvbG9ndWUgLSBEdXN0IG9mIEVjaG9lcyIgdGFncz0ib3BlbmluZyIgcG9zaXRpb249IjgwMCwzMjUiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O1NvbWV3aGVyZSB3ZXN0IG9mIFR1Y3NvbiZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRvYmplY3RpdmUgPSAmcXVvdDtSZW1lbWJlciBob3cgeW91IGFycml2ZWQgaGVyZSZxdW90OyZndDsmZ3Q7CgombHQ7ZGl2IGNsYXNzPSZxdW90O3NjZW5lLWhlYWRpbmcmcXVvdDsmZ3Q7QXJpem9uYSBUZXJyaXRvcnksIDE4ODcmbHQ7L2RpdiZndDsKClRoZSBzdG9ybSBoYWQgc3dhbGxvd2VkIHRoZSB0cmFpbCB0aHJlZSBob3VycyBhZ28uCgpTaWxhcyBXYXJkIHJlbWVtYmVyZWQgdGhhdCBtdWNoLgoKSGUgcmVtZW1iZXJlZCB0aGUgc2t5IHR1cm5pbmcgdGhlIGNvbG9yIG9mIG9sZCBibG9vZC4gSGUgcmVtZW1iZXJlZCBwdWxsaW5nIGhpcyBoYXQgbG93IGFuZCB3cmFwcGluZyBhIGJhbmRhbm5hIGFjcm9zcyBoaXMgbW91dGguIEhlIHJlbWVtYmVyZWQgdGVsbGluZyBoaXMgaG9yc2UgdGhhdCB0aGV5IGhhZCBzdXJ2aXZlZCB3b3JzZS4KClRoZSBob3JzZSBoYWQgbm90IGxvb2tlZCBjb252aW5jZWQuCgpBZnRlciB0aGF0IGNhbWUgb25seSBwaWVjZXMuCgpBIGZsYXNoIG9mIHdoaXRlIGZpcmUgYWNyb3NzIHRoZSBtb3VudGFpbnMuCgpUaGUgZ3JvdW5kIHZhbmlzaGluZyBiZW5lYXRoIGEgd2FsbCBvZiBkdXN0LgoKQSB2b2ljZSBjYWxsaW5nIFNpbGFzIGJ5IGEgbmFtZSBoZSBoYWQgbm90IHVzZWQgc2luY2UgaGUgd29yZSBhIGJhZGdlLgoKTm93IHRoZXJlIHdhcyBkYXJrbmVzcywgdGhlIHRhc3RlIG9mIHNhbmQsIGFuZCBzb21ldGhpbmcgaGVhdnkgcHJlc3NpbmcgYWdhaW5zdCBoaXMgcmlicy4KCkZvciBzZXZlcmFsIHNlY29uZHMsIFNpbGFzIGxpc3RlbmVkIGZvciB0aGUgc3Rvcm0uCgpXaGF0IGFuc3dlcmVkIHNvdW5kZWQgYWxtb3N0IGxpa2UgYnJlYXRoaW5nLgoKW1tPcGVuIHlvdXIgZXllcy0mZ3Q7RGVzZXJ0IC0gV2FrZV1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSIyIiBuYW1lPSJTdG9yeUluaXQiIHRhZ3M9InNjcmlwdCIgcG9zaXRpb249IjkyNSwzMjUiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRhY3QgPSAxJmd0OyZndDsKCiZsdDsmbHQ7c2V0ICRnYW1lVmVyc2lvbiA9ICZxdW90OzAuMS4wJnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJGJ1aWxkRGF0ZSA9ICZxdW90O1NlcHRlbWJlciAyMCwgMjAyNiZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRjb3B5cmlnaHRZZWFyID0gJnF1b3Q7MjAyNiZxdW90OyZndDsmZ3Q7CgombHQ7Jmx0O3NldCAkbG9jYXRpb24gPSAmcXVvdDtUaGUgQXJpem9uYSBEZXNlcnQmcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkb2JqZWN0aXZlID0gJnF1b3Q7U3Vydml2ZSB0aGUgc3Rvcm0mcXVvdDsmZ3Q7Jmd0OwoKJmx0OyZsdDtzZXQgJGNvbXBhc3Npb24gPSAwJmd0OyZndDsKJmx0OyZsdDtzZXQgJHJpZ2lkaXR5ID0gMCZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICR0cnV0aCA9IDAmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkZmVhciA9IDAmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkZWNobyA9IDAmZ3Q7Jmd0OwoKJmx0OyZsdDtzZXQgJGhlYWx0aCA9IDUmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkbWF4SGVhbHRoID0gNSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRhbW1vID0gNiZndDsmZ3Q7CgombHQ7Jmx0O3NldCAkY2x1ZXNGb3VuZCA9IDAmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkbmFtZXNSZW1lbWJlcmVkID0gMCZndDsmZ3Q7CgombHQ7Jmx0O3NldCAkdmlzaXRlZFNhbG9vbiA9IGZhbHNlJmd0OyZndDsKJmx0OyZsdDtzZXQgJHZpc2l0ZWRTaGVyaWZmID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkdmlzaXRlZENodXJjaCA9IGZhbHNlJmd0OyZndDsKJmx0OyZsdDtzZXQgJHZpc2l0ZWRTdHVkaW8gPSBmYWxzZSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICR2aXNpdGVkR3JhdmV5YXJkID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkdmlzaXRlZFN0b3JlID0gZmFsc2UmZ3Q7Jmd0OwoKJmx0OyZsdDtzZXQgJGpvbmFzS25vd24gPSBmYWxzZSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRsaWxhS25vd24gPSBmYWxzZSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRncmF2ZXNLbm93biA9IGZhbHNlJmd0OyZndDsKJmx0OyZsdDtzZXQgJGp1ZGdlU2VlbiA9IGZhbHNlJmd0OyZndDsKCiZsdDsmbHQ7c2V0ICRmb2xsb3dlZExpZ2h0cyA9IGZhbHNlJmd0OyZndDsKJmx0OyZsdDtzZXQgJGZvbGxvd2VkVHJhY2tzID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkdHJ1c3RlZEhvcnNlID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkaGVhcmRGaXJzdEVjaG8gPSBmYWxzZSZndDsmZ3Q7CgombHQ7Jmx0O3NldCAkYWN0T25lQ29tcGxldGUgPSBmYWxzZSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRlbmRpbmcgPSAmcXVvdDsmcXVvdDsmZ3Q7Jmd0OwoKJmx0OyZsdDtzZXQgJHNhbG9vbkNsdWUgPSBmYWxzZSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRzaGVyaWZmQ2x1ZSA9IGZhbHNlJmd0OyZndDsKJmx0OyZsdDtzZXQgJGNodXJjaENsdWUgPSBmYWxzZSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRzdHVkaW9DbHVlID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkc3RvcmVDbHVlID0gZmFsc2UmZ3Q7Jmd0OwoKJmx0OyZsdDtzZXQgJHNhbG9vblVubG9ja2VkID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkc2hlcmlmZlVubG9ja2VkID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkY2h1cmNoVW5sb2NrZWQgPSBmYWxzZSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRzdHVkaW9VbmxvY2tlZCA9IGZhbHNlJmd0OyZndDsKJmx0OyZsdDtzZXQgJHN0b3JlVW5sb2NrZWQgPSBmYWxzZSZndDsmZ3Q7CgombHQ7Jmx0O3NldCAkdG93blZpc2l0cyA9IDAmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkZmFjZVRoZVRydXRoVW5sb2NrZWQgPSBmYWxzZSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRzYWxvb25Kb25hc05hbWVkID0gZmFsc2UmZ3Q7Jmd0OwoKJmx0OyZsdDtzZXQgJGFsdGFyRXhhbWluZWQgPSBmYWxzZSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRjaGlsZE5hbWVLbm93biA9IGZhbHNlJmd0OyZndDsKJmx0OyZsdDtzZXQgJGNvbmZlc3Npb25NYWRlID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkY29uZmVzc2lvblJlZnVzZWQgPSBmYWxzZSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICR2ZWlsVG91Y2hlZCA9IGZhbHNlJmd0OyZndDsKCiZsdDsmbHQ7c2V0ICRwb3J0cmFpdEV4YW1pbmVkID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkcG9ydHJhaXRDaG9pY2UgPSAmcXVvdDsmcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkZGFya3Jvb21FbnRlcmVkID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkbGlsYU5hbWVkID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkZ2xhc3NOZWdhdGl2ZUZvdW5kID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkZmluYWxQaG90b2dyYXBoU2VlbiA9IGZhbHNlJmd0OyZndDsKJmx0OyZsdDtzZXQgJGFza2VkV2h5TGlsYVN0YXllZCA9IGZhbHNlJmd0OyZndDsKJmx0OyZsdDtzZXQgJGdyYXZlc1Bob3RvUXVlc3Rpb25lZCA9IGZhbHNlJmd0OyZndDsKJmx0OyZsdDtzZXQgJGFza2VkQWJvdXRKdWRnZSA9IGZhbHNlJmd0OyZndDsKCiZsdDsmbHQ7c2V0ICR3YXRlckRlY2lzaW9uID0gJnF1b3Q7JnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJHdhdGVyUmVjZWl2ZWQgPSBmYWxzZSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRjdXBSZXR1cm5lZCA9IGZhbHNlJmd0OyZndDsKJmx0OyZsdDtzZXQgJGFtbW9EZWNpc2lvbiA9ICZxdW90OyZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRzdG9yZUFtbW9UYWtlbiA9IGZhbHNlJmd0OyZndDsKJmx0OyZsdDtzZXQgJG1lbW9yeVN1cnJlbmRlcmVkID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkbG9zdE1lbW9yeSA9ICZxdW90OyZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRyZWdpc3Rlckluc3BlY3RlZCA9IGZhbHNlJmd0OyZndDsKJmx0OyZsdDtzZXQgJGFwb2xvZ3lEZWNpc2lvbiA9ICZxdW90OyZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRhcG9sb2d5QWNjZXB0ZWQgPSBmYWxzZSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRzdG9yZWtlZXBlck5hbWVkID0gZmFsc2UmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkZXBocmFpbVRydXRoS25vd24gPSBmYWxzZSZndDsmZ3Q7CgombHQ7Jmx0O3NldCAkcGlhbm9DbG9zZWQgPSBmYWxzZSZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICR3YXJkRW50cnlEZWNpc2lvbiA9ICZxdW90OyZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRlbXB0eUNoYWlyRGVjaXNpb24gPSAmcXVvdDsmcXVvdDsmZ3Q7Jmd0OzwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMyIgbmFtZT0iU3RvcnlDYXB0aW9uIiB0YWdzPSIiIHBvc2l0aW9uPSI4MDAsNDUwIiBzaXplPSIxMDAsMTAwIj4mbHQ7ZGl2IGNsYXNzPSZxdW90O3N0b3J5LXBhbmVsJnF1b3Q7Jmd0OwoKJmx0O2RpdiBjbGFzcz0mcXVvdDtzdG9yeS10aXRsZSZxdW90OyZndDtEVVNUIE9GIEVDSE9FUyZsdDsvZGl2Jmd0OwoKJmx0O2RpdiBjbGFzcz0mcXVvdDtzdG9yeS1zdGF0dXMmcXVvdDsmZ3Q7CiZsdDtzdHJvbmcmZ3Q7QWN0OiZsdDsvc3Ryb25nJmd0OyAkYWN0Jmx0O2JyJmd0OwombHQ7c3Ryb25nJmd0O0xvY2F0aW9uOiZsdDsvc3Ryb25nJmd0OyAkbG9jYXRpb24mbHQ7YnImZ3Q7CiZsdDtzdHJvbmcmZ3Q7T2JqZWN0aXZlOiZsdDsvc3Ryb25nJmd0OyAkb2JqZWN0aXZlCiZsdDsvZGl2Jmd0OwoKJmx0O2hyJmd0OwoKJmx0O2RpdiBjbGFzcz0mcXVvdDtzdG9yeS1yZXNvdXJjZXMmcXVvdDsmZ3Q7CiZsdDtzdHJvbmcmZ3Q7SGVhbHRoOiZsdDsvc3Ryb25nJmd0OyAkaGVhbHRoIC8gJG1heEhlYWx0aCZsdDticiZndDsKJmx0O3N0cm9uZyZndDtBbW11bml0aW9uOiZsdDsvc3Ryb25nJmd0OyAkYW1tbyZsdDticiZndDsKJmx0O3N0cm9uZyZndDtDbHVlczombHQ7L3N0cm9uZyZndDsgJGNsdWVzRm91bmQmbHQ7YnImZ3Q7CiZsdDtzdHJvbmcmZ3Q7TmFtZXMgUmVtZW1iZXJlZDombHQ7L3N0cm9uZyZndDsgJG5hbWVzUmVtZW1iZXJlZAombHQ7L2RpdiZndDsKCiZsdDtociZndDsKCiZsdDtkaXYgY2xhc3M9JnF1b3Q7c3RvcnktYnVpbGQmcXVvdDsmZ3Q7ClZlcnNpb24gJGdhbWVWZXJzaW9uJmx0O2JyJmd0OwpDb3B5cmlnaHQgwqkgJGNvcHlyaWdodFllYXImbHQ7YnImZ3Q7ClRvbnkgTW9yZWlyYQombHQ7L2RpdiZndDsKCiZsdDsvZGl2Jmd0OzwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iNCIgbmFtZT0iRGVzZXJ0IC0gV2FrZSIgdGFncz0iYWN0MSBkZXNlcnQiIHBvc2l0aW9uPSI5MjUsNDUwIiBzaXplPSIxMDAsMTAwIj4mbHQ7Jmx0O3NldCAkbG9jYXRpb24gPSAmcXVvdDtUaGUgQXJpem9uYSBEZXNlcnQmcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkb2JqZWN0aXZlID0gJnF1b3Q7RmluZCBzaGVsdGVyJnF1b3Q7Jmd0OyZndDsKClNpbGFzIG9wZW5lZCBoaXMgZXllcyBiZW5lYXRoIGEgc2t5IGNob2tlZCBicm93biB3aXRoIGR1c3QuCgpIZSBsYXkgaGFsZiBidXJpZWQgYmVzaWRlIGEgZHJ5IHdhc2guIFNhbmQgaGFkIGNvbGxlY3RlZCBhZ2FpbnN0IGhpcyBjb2F0IGFuZCBmaWxsZWQgb25lIGJvb3QuIEhpcyBoYXQgd2FzIGdvbmUuIEhpcyBtb3V0aCB0YXN0ZWQgbGlrZSBpcm9uLCBhbHRob3VnaCBoZSBjb3VsZCBub3QgZmluZCBhbnkgYmxvb2QuCgpIZSBwdXNoZWQgaGltc2VsZiB1cHJpZ2h0LgoKUGFpbiB0cmF2ZWxlZCBhbG9uZyBoaXMgcmlicyBidXQgc3RvcHBlZCBzaG9ydCBvZiBhbnl0aGluZyBicm9rZW4uIFRoYXQgd2FzIGVuY291cmFnaW5nLiBOb3QgcGxlYXNhbnQsIGV4YWN0bHksIGJ1dCBTaWxhcyBoYWQgbGVhcm5lZCB0byBhY2NlcHQgZW5jb3VyYWdlbWVudCBpbiB3aGF0ZXZlciBtaXNlcmFibGUgZm9ybSBpdCBjaG9zZS4KCkhpcyByZXZvbHZlciByZW1haW5lZCBpbiBpdHMgaG9sc3Rlci4KCkhlIGNoZWNrZWQgdGhlIGN5bGluZGVyLgoKU2l4IHJvdW5kcy4KClRoYXQgbWFkZSB0aGUgZ3VuIGJldHRlciBwcmVwYXJlZCB0aGFuIGhlIHdhcy4KCkEgZmV3IHlhcmRzIGF3YXksIGhpcyBob3JzZSBzdG9vZCB3aXRoIGl0cyBoZWFkIGxvd2VyZWQgYWdhaW5zdCB0aGUgd2luZC4gVGhlIGFuaW1hbCYjMzk7cyByZWlucyBkcmFnZ2VkIHRocm91Z2ggdGhlIHNhbmQuIEJleW9uZCBpdCwgdGhlIGRlc2VydCBkaXNhcHBlYXJlZCBiZWhpbmQgY3VydGFpbnMgb2YgYmxvd2luZyBkdXN0LgoKVGhlbiBTaWxhcyBzYXcgdGhyZWUgdGhpbmdzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gdGhlcmUuCgpUbyB0aGUgbm9ydGgsIGEgcm93IG9mIHllbGxvdyBsaWdodHMgZmxpY2tlcmVkIHRocm91Z2ggdGhlIHN0b3JtLgoKVG8gdGhlIGVhc3QsIGJvb3QgcHJpbnRzIGNyb3NzZWQgdGhlIHdhc2ggYW5kIGNvbnRpbnVlZCB0b3dhcmQgdGhlIHJvY2tzLgoKRGlyZWN0bHkgYWhlYWQsIGhpcyBob3JzZSBzdGFyZWQgaW50byB0aGUgZHVzdCBhcyBpZiBpdCBjb3VsZCBzZWUgc29tZXRoaW5nIHdhaXRpbmcgdGhlcmUuCgpTaWxhcyByZXN0ZWQgb25lIGhhbmQgbmVhciBoaXMgcmV2b2x2ZXIuCgpUaGUgd2luZCBjYXJyaWVkIHRoZSB2b2ljZSBhZ2Fpbi4KCiZxdW90O01hcnNoYWwuJnF1b3Q7CgpIZSBoYWQgbm90IGJlZW4gYSBtYXJzaGFsIGluIGVsZXZlbiB5ZWFycy4KCiZsdDsmbHQ7aWYgbm90ICRoZWFyZEZpcnN0RWNobyZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkaGVhcmRGaXJzdEVjaG8gPSB0cnVlJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRlY2hvICs9IDEmZ3Q7Jmd0OwombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgpbW0ZvbGxvdyB0aGUgZGlzdGFudCBsaWdodHMtJmd0O0Rlc2VydCAtIEZvbGxvdyB0aGUgTGlnaHRzXV0KCltbRXhhbWluZSB0aGUgYm9vdCBwcmludHMtJmd0O0Rlc2VydCAtIEV4YW1pbmUgdGhlIFRyYWNrc11dCgpbW1RydXN0IHRoZSBob3JzZSYjMzk7cyBpbnN0aW5jdHMtJmd0O0Rlc2VydCAtIFRydXN0IHRoZSBIb3JzZV1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSI1IiBuYW1lPSJEZXNlcnQgLSBGb2xsb3cgdGhlIExpZ2h0cyIgdGFncz0iYWN0MSBkZXNlcnQiIHBvc2l0aW9uPSI4MDAsNTc1IiBzaXplPSIxMDAsMTAwIj4mbHQ7Jmx0O3NldCAkbG9jYXRpb24gPSAmcXVvdDtUaGUgTm9ydGhlcm4gRmxhdHMmcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkb2JqZWN0aXZlID0gJnF1b3Q7UmVhY2ggdGhlIGxpZ2h0cyZxdW90OyZndDsmZ3Q7CgombHQ7Jmx0O2lmIG5vdCAkZm9sbG93ZWRMaWdodHMmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGZvbGxvd2VkTGlnaHRzID0gdHJ1ZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkcmlnaWRpdHkgKz0gMSZndDsmZ3Q7CiZsdDsmbHQ7L2lmJmd0OyZndDsKClNpbGFzIHRvb2sgdGhlIGhvcnNlIGJ5IHRoZSByZWlucyBhbmQgaGVhZGVkIG5vcnRoLgoKVGhlIGxpZ2h0cyByZW1haW5lZCBldmVubHkgc3BhY2VkIGRlc3BpdGUgdGhlIHN0b3JtLiBUaGV5IGxvb2tlZCBsaWtlIGxhbnRlcm5zIGhhbmdpbmcgYWxvbmcgYSBzdHJlZXQsIGJ1dCB0aGVyZSB3YXMgbm8gdG93biBvbiBTaWxhcyYjMzk7cyBtYXAuIFRoZXJlIHdhcyBub3Qgc3VwcG9zZWQgdG8gYmUgYW55dGhpbmcgZm9yIGZvcnR5IG1pbGVzIGV4Y2VwdCByb2NrLCBzY3J1YiwgYW5kIHNldmVyYWwgdmFyaWV0aWVzIG9mIHJlZ3JldHRhYmxlIGRlY2lzaW9uLgoKSGUgd2Fsa2VkIGZvciB3aGF0IGZlbHQgbGlrZSBoYWxmIGFuIGhvdXIuCgpUaGUgbGlnaHRzIG5ldmVyIGFwcGVhcmVkIGNsb3Nlci4KClNpbGFzIHN0b3BwZWQuCgpUaGUgbGFudGVybnMgc3RvcHBlZCBtb3ZpbmcuCgpIZSBuYXJyb3dlZCBoaXMgZXllcy4KCiZxdW90O1RoYXQmIzM5O3MgYSBmaW5lIHRyaWNrLiZxdW90OwoKT25lIG9mIHRoZSBsaWdodHMgd2VudCBkYXJrLgoKVGhlbiBhbm90aGVyLgoKVGhleSBleHRpbmd1aXNoZWQgdGhlbXNlbHZlcyBvbmUgYXQgYSB0aW1lIHVudGlsIG9ubHkgdGhlIGZpbmFsIGxhbnRlcm4gcmVtYWluZWQuCgpCZW5lYXRoIGl0IHN0b29kIHRoZSBvdXRsaW5lIG9mIGEgbWFuIHdlYXJpbmcgYSBsb25nIGNvYXQgYW5kIGEgbGF3bWFuJiMzOTtzIGhhdC4KClNpbGFzIHJlYWNoZWQgZm9yIGhpcyByZXZvbHZlci4KClRoZSBmaWd1cmUgcmFpc2VkIG9uZSBlbXB0eSBoYW5kLgoKVGhlIHN0b3JtIHN1cmdlZCBiZXR3ZWVuIHRoZW0uCgpXaGVuIHRoZSBkdXN0IGNsZWFyZWQsIHRoZSBtYW4gd2FzIGdvbmUuCgpJbiBoaXMgcGxhY2Ugc3Rvb2QgYSB3ZWF0aGVyZWQgd29vZGVuIHNpZ24uCgpUaGUgbGV0dGVyaW5nIHdhcyBuZWFybHkgZXJhc2VkLCBidXQgU2lsYXMgY291bGQgc3RpbGwgcmVhZCB0aGUgbmFtZToKClBFUkRJVElPTiBHVUxDSAoKUG9wdWxhdGlvbjogMzE3CgpTb21lb25lIGhhZCBjYXJ2ZWQgYSBzZWNvbmQgbnVtYmVyIGJlbmVhdGggaXQuCgozMTguCgpbW1Bhc3MgdGhlIHRvd24gc2lnbi0mZ3Q7VG93biAtIEFycml2YWxdXTwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iNiIgbmFtZT0iRGVzZXJ0IC0gRXhhbWluZSB0aGUgVHJhY2tzIiB0YWdzPSJhY3QxIGRlc2VydCIgcG9zaXRpb249IjkyNSw1NzUiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O1RoZSBEcnkgV2FzaCZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRvYmplY3RpdmUgPSAmcXVvdDtJZGVudGlmeSB0aGUgdHJhY2tzJnF1b3Q7Jmd0OyZndDsKCiZsdDsmbHQ7aWYgbm90ICRmb2xsb3dlZFRyYWNrcyZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkZm9sbG93ZWRUcmFja3MgPSB0cnVlJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICR0cnV0aCArPSAxJmd0OyZndDsKJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKU2lsYXMgY3JvdWNoZWQgYmVzaWRlIHRoZSBib290IHByaW50cy4KClRoZSBzdG9ybSBzaG91bGQgaGF2ZSBlcmFzZWQgdGhlbSB3aXRoaW4gc2Vjb25kcy4gSW5zdGVhZCwgZXZlcnkgaGVlbCBhbmQgdG9lIHJlbWFpbmVkIHNoYXJwbHkgcHJlc3NlZCBpbnRvIHRoZSBzYW5kLgoKVGhlIHByaW50cyBiZWxvbmdlZCB0byBhIG1hbiB3ZWFyaW5nIHdvcm4gcmlkaW5nIGJvb3RzLgoKU2lsYXMgbG9va2VkIGRvd24gYXQgaGlzIG93bi4KClNhbWUgc2l6ZS4KClNhbWUgc3BsaXQgYWxvbmcgdGhlIHJpZ2h0IGhlZWwuCgpIZSBwbGFjZWQgaGlzIGJvb3QgYmVzaWRlIHRoZSBuZWFyZXN0IHByaW50LgoKSXQgbWF0Y2hlZCBwZXJmZWN0bHkuCgpUaGUgdHJhaWwgbGVkIGVhc3QgdGhyb3VnaCB0aGUgd2FzaCwgYWx0aG91Z2ggU2lsYXMgaGFkIG5vIG1lbW9yeSBvZiB3YWxraW5nIGluIHRoYXQgZGlyZWN0aW9uLiBIZSBmb2xsb3dlZCBpdCBiZXR3ZWVuIHR3byB3YWxscyBvZiByZWRkaXNoIHN0b25lLgoKVGhlIHRyYWNrcyBjb250aW51ZWQgYWhlYWQgb2YgaGltLgoKVGhlbiB0aGV5IHN0b3BwZWQuCgpTaWxhcyBzdHVkaWVkIHRoZSB1bmRpc3R1cmJlZCBzYW5kIGJleW9uZCB0aGUgZmluYWwgcHJpbnQuCgpCZWhpbmQgaGltLCBhbm90aGVyIGZvb3RwcmludCBhcHBlYXJlZC4KClRoZW4gYW5vdGhlci4KClNvbWV0aGluZyB3YXMgZm9sbG93aW5nIHRoZSBwYXRoIGluIHJldmVyc2UuCgpTaWxhcyBzdG9vZCBhbmQgZHJldyBoaXMgcmV2b2x2ZXIuCgpUaGUgaW52aXNpYmxlIHN0ZXBzIGNvbnRpbnVlZCB0b3dhcmQgaGltLgoKVGhleSBzdG9wcGVkIGRpcmVjdGx5IGJlaGluZCBoaXMgYm9vdHMuCgpBIG1hbiYjMzk7cyB2b2ljZSB3aGlzcGVyZWQgYmVzaWRlIGhpcyBlYXIuCgomcXVvdDtZb3UgYWx3YXlzIGRpZCBhcnJpdmUgYWZ0ZXIgdGhlIHNob290aW5nLiZxdW90OwoKU2lsYXMgdHVybmVkLgoKVGhlcmUgd2FzIG5vIG9uZSB0aGVyZS4KClRoZSBjYW55b24gb3BlbmVkIGJlaGluZCBoaW0gb250byBhIGRlc2VydGVkIHN0cmVldC4gQnVpbGRpbmdzIHN0b29kIG9uIGJvdGggc2lkZXMsIHRoZWlyIHdpbmRvd3MgZGFyayBhbmQgdGhlaXIgZG9vcnMgc2lsdmVyZWQgYnkgYWdlLgoKQSB3ZWF0aGVyZWQgc2lnbiBsZWFuZWQgYmVzaWRlIHRoZSByb2FkLgoKUEVSRElUSU9OIEdVTENICgpQb3B1bGF0aW9uOiAzMTcKClRoZSBmaW5hbCBudW1iZXIgaGFkIGJlZW4gY3Jvc3NlZCBvdXQuCgpbW0VudGVyIHRoZSBkZXNlcnRlZCB0b3duLSZndDtUb3duIC0gQXJyaXZhbF1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSI3IiBuYW1lPSJEZXNlcnQgLSBUcnVzdCB0aGUgSG9yc2UiIHRhZ3M9ImFjdDEgZGVzZXJ0IiBwb3NpdGlvbj0iMTA1MCw1NzUiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O1RoZSBTb3V0aGVybiBSaWRnZSZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRvYmplY3RpdmUgPSAmcXVvdDtGb2xsb3cgdGhlIGhvcnNlJnF1b3Q7Jmd0OyZndDsKCiZsdDsmbHQ7aWYgbm90ICR0cnVzdGVkSG9yc2UmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJHRydXN0ZWRIb3JzZSA9IHRydWUmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGNvbXBhc3Npb24gKz0gMSZndDsmZ3Q7CiZsdDsmbHQ7L2lmJmd0OyZndDsKClNpbGFzIGxvd2VyZWQgaGlzIGhhbmQgZnJvbSB0aGUgcmV2b2x2ZXIuCgomcXVvdDtBbGwgcmlnaHQsJnF1b3Q7IGhlIHRvbGQgdGhlIGhvcnNlLiAmcXVvdDtZb3VyIGp1ZGdtZW50IGhhcyBnZW5lcmFsbHkgYmVlbiBiZXR0ZXIgdGhhbiBtaW5lLiZxdW90OwoKVGhlIGhvcnNlIHNub3J0ZWQuCgpTaWxhcyBjaG9zZSB0byBpbnRlcnByZXQgdGhhdCBhcyBtb2Rlc3R5LgoKSGUgbG9vc2VuZWQgaGlzIGhvbGQgb24gdGhlIHJlaW5zLgoKVGhlIGFuaW1hbCB0dXJuZWQgc291dGgsIGF3YXkgZnJvbSB0aGUgbGlnaHRzIGFuZCB0aGUgYm9vdCBwcmludHMuIEl0IG1vdmVkIHNsb3dseSBhdCBmaXJzdCwgdGVzdGluZyB0aGUgc2FuZCwgdGhlbiBjbGltYmVkIHRvd2FyZCBhIG5hcnJvdyByaWRnZSBoaWRkZW4gYmVoaW5kIGEgY3VydGFpbiBvZiBkdXN0LgoKTmVhciB0aGUgdG9wLCB0aGUgaG9yc2Ugc3RvcHBlZC4KCkEgbGVuZ3RoIG9mIGZyYXllZCByb3BlIHN0cmV0Y2hlZCBhY3Jvc3MgdGhlIHRyYWlsLgoKU21hbGwgYm9uZXMgYW5kIHNjcmFwcyBvZiByZWQgY2xvdGggaHVuZyBmcm9tIGl0LCBjbGlja2luZyB0b2dldGhlciBpbiB0aGUgd2luZC4KClNpbGFzIHJlY29nbml6ZWQgdGhlIHdhcm5pbmcuCgpHcmF2ZXMgaGFkIHRhdWdodCBoaXMgZGVwdXRpZXMgdG8gbWFyayBkYW5nZXJvdXMgZ3JvdW5kIHRoYXQgd2F5LgoKTm8gb25lIG91dHNpZGUgdGhlaXIgdGVycml0b3J5IHNob3VsZCBoYXZlIGtub3duIGl0LgoKU2lsYXMgcmVhY2hlZCB0b3dhcmQgdGhlIG5lYXJlc3Qgc2NyYXAgb2YgY2xvdGguCgpUaGUgaW5zdGFudCBoZSB0b3VjaGVkIGl0LCB0aGUgc3Rvcm0gZmVsbCBzaWxlbnQuCgpBIGNoaWxkIGxhdWdoZWQgc29tZXdoZXJlIGJleW9uZCB0aGUgcmlkZ2UuCgpUaGVuIHRoZSByb3BlIHNuYXBwZWQuCgpUaGUgYm9uZXMgc3RydWNrIHRoZSBncm91bmQgYW5kIHNjYXR0ZXJlZCBhdCBTaWxhcyYjMzk7cyBmZWV0LiBXaGVuIGhlIGxvb2tlZCB1cCwgdGhlIHN0b3JtIGhhZCBvcGVuZWQgYmVmb3JlIGhpbS4KCkJlbG93IHRoZSByaWRnZSBzdG9vZCBhbiBhYmFuZG9uZWQgdG93bi4KCkEgd2VhdGhlcmVkIHNpZ24gYW5ub3VuY2VkIGl0cyBuYW1lOgoKUEVSRElUSU9OIEdVTENICgpQb3B1bGF0aW9uOiAzMTcKClNvbWVvbmUgaGFkIHdyaXR0ZW4gYSBtZXNzYWdlIGJlbmVhdGggaXQgaW4gZnJlc2ggYmxhY2sgcGFpbnQuCgpXRSBSRU1FTUJFUiBZT1UuCgpbW0xlYWQgdGhlIGhvcnNlIGRvd24gdG93YXJkIHRvd24tJmd0O1Rvd24gLSBBcnJpdmFsXV08L3R3LXBhc3NhZ2VkYXRhPjx0dy1wYXNzYWdlZGF0YSBwaWQ9IjgiIG5hbWU9IlRvd24gLSBBcnJpdmFsIiB0YWdzPSJhY3QxIHRvd24iIHBvc2l0aW9uPSI5MjUsNzUwIiBzaXplPSIxMDAsMTAwIj4mbHQ7Jmx0O3NldCAkbG9jYXRpb24gPSAmcXVvdDtQZXJkaXRpb24gR3VsY2gmcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkb2JqZWN0aXZlID0gJnF1b3Q7RmluZCBzaGVsdGVyIGFuZCB3YXRlciZxdW90OyZndDsmZ3Q7CgpUaGUgc3Rvcm0gc3RvcHBlZCBhdCB0aGUgZWRnZSBvZiBQZXJkaXRpb24gR3VsY2guCgpJdCBkaWQgbm90IHdlYWtlbiBvciBwYXNzLgoKSXQgc3RvcHBlZC4KCkJlaGluZCBTaWxhcywgZHVzdCBjaHVybmVkIGFjcm9zcyB0aGUgZGVzZXJ0IGluIGEgdG93ZXJpbmcgYnJvd24gd2FsbC4gQWhlYWQgb2YgaGltLCB0aGUgYWlyIHJlbWFpbmVkIHBlcmZlY3RseSBzdGlsbC4KClRoZSB0b3duIGNvbnNpc3RlZCBvZiBvbmUgYnJvYWQgc3RyZWV0IGxpbmVkIHdpdGggZmFsc2UtZnJvbnQgYnVpbGRpbmdzLiBBIHNhbG9vbiBsZWFuZWQgYmVzaWRlIGEgc2hlcmlmZiYjMzk7cyBvZmZpY2UuIEZhcnRoZXIgZG93biBzdG9vZCBhIGNodXJjaCwgYSBwaG90b2dyYXBoZXImIzM5O3Mgc3R1ZGlvLCBhbmQgYSBnZW5lcmFsIHN0b3JlLiBBIHJhaWxyb2FkIGRlcG90IHdhaXRlZCBhdCB0aGUgZW5kIG9mIHRyYWNrcyBoYWxmIGJ1cmllZCBiZW5lYXRoIHRoZSBzYW5kLgoKTm8gc21va2Ugcm9zZSBmcm9tIHRoZSBjaGltbmV5cy4KCk5vIGhvcnNlcyBzdG9vZCBhdCB0aGUgaGl0Y2hpbmcgcmFpbHMuCgpObyB2b2ljZXMgZHJpZnRlZCBmcm9tIGJlaGluZCB0aGUgd2luZG93cy4KClN0aWxsLCB0aGUgdG93biBkaWQgbm90IGZlZWwgZW1wdHkuCgpBIHBpYW5vIHBsYXllZCBhIHNpbmdsZSBub3RlIGluc2lkZSB0aGUgc2Fsb29uLgoKVGhlIGNodXJjaCBiZWxsIGFuc3dlcmVkLgoKVGhlbiB0aGUgZG9vciBvZiB0aGUgc2hlcmlmZiYjMzk7cyBvZmZpY2Ugc3d1bmcgb3Blbi4KClNpbGFzJiMzOTtzIGhvcnNlIGJhY2tlZCBhd2F5LgoKU29tZXRoaW5nIG1vdmVkIGJlaGluZCB0aGUgdXBwZXIgd2luZG93IG9mIHRoZSBwaG90b2dyYXBoZXImIzM5O3Mgc3R1ZGlvLiBGb3IgYW4gaW5zdGFudCwgU2lsYXMgc2F3IHRoZSBwYWxlIG92YWwgb2YgYSBmYWNlLgoKVGhlbiBpdCB3YXMgZ29uZS4KCkhlIGxvb2tlZCBiYWNrIHRvd2FyZCB0aGUgZGVzZXJ0LgoKVGhlIHN0b3JtIGhhZCBjbG9zZWQgYWNyb3NzIHRoZSByb2FkLgoKUGVyZGl0aW9uIEd1bGNoIGFwcGVhcmVkIHdpbGxpbmcgdG8gbGV0IGhpbSBlbnRlci4KCkxlYXZpbmcgd291bGQgcmVxdWlyZSBmdXJ0aGVyIG5lZ290aWF0aW9uLgoKW1tTdGVwIG9udG8gTWFpbiBTdHJlZXQtJmd0O01haW4gU3RyZWV0XV08L3R3LXBhc3NhZ2VkYXRhPjx0dy1wYXNzYWdlZGF0YSBwaWQ9IjkiIG5hbWU9Ik1haW4gU3RyZWV0IiB0YWdzPSJhY3QxIGh1YiIgcG9zaXRpb249IjkyNSw4NzUiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O01haW4gU3RyZWV0JnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJG9iamVjdGl2ZSA9ICZxdW90O0V4cGxvcmUgUGVyZGl0aW9uIEd1bGNoJnF1b3Q7Jmd0OyZndDsKClNpbGFzIHN0ZXBwZWQgb250byBNYWluIFN0cmVldC4KClRoZSBidWlsZGluZ3Mgd2F0Y2hlZCBoaW0gdGhyb3VnaCBkYXJrIHdpbmRvd3MuCgpEdXN0IG1vdmVkIGFsb25nIHRoZSByb2FkIGluIHRoaW4sIHR3aXN0aW5nIGxpbmVzLCBhbHRob3VnaCB0aGUgYWlyIGluc2lkZSB0aGUgdG93biByZW1haW5lZCBzdGlsbC4gU29tZXdoZXJlIG5lYXJieSwgd29vZCBjcmVha2VkIGJlbmVhdGggYSBjYXJlZnVsIGZvb3RzdGVwLgoKVG8gdGhlIHdlc3Qgc3Rvb2QgdGhlIExhc3QgQ2hhbmNlIFNhbG9vbi4gSXRzIGJhdHdpbmcgZG9vcnMgc2hpZnRlZCBnZW50bHksIGFuZCBhIHBpYW5vIG5vdGUgcmVwZWF0ZWQgZnJvbSBzb21ld2hlcmUgd2l0aGluLgoKQWNyb3NzIHRoZSBzdHJlZXQsIHRoZSBzaGVyaWZmJiMzOTtzIG9mZmljZSB3YWl0ZWQgd2l0aCBpdHMgZnJvbnQgZG9vciBvcGVuLiBBIHRhcm5pc2hlZCBiYWRnZSBoYWQgYmVlbiBuYWlsZWQgYWJvdmUgdGhlIGVudHJhbmNlLgoKRmFydGhlciBkb3duLCB0aGUgY2h1cmNoIGJlbGwgZ2F2ZSBvbmUgcXVpZXQgY2hpbWUuCgpUaGUgcGhvdG9ncmFwaGVyJiMzOTtzIHN0dWRpbyBzdG9vZCBiZXNpZGUgaXQsIGl0cyB1cHBlciB3aW5kb3cgY292ZXJlZCBieSBhIGRhcmsgY3VydGFpbi4gU29tZXRoaW5nIGJyaWVmbHkgcHJlc3NlZCBhZ2FpbnN0IHRoZSBmYWJyaWMgZnJvbSBpbnNpZGUuCgpBdCB0aGUgZWFzdGVybiBlbmQgb2YgdGhlIHN0cmVldCwgdGhlIGdlbmVyYWwgc3RvcmUgZGlzcGxheWVkIGEgaGFuZC1wYWludGVkIHNpZ246CgpDUkVESVQgRVhURU5ERUQgVE8gVEhFIExJVklORyBPTkxZCgpTaWxhcyByZWFkIGl0IHR3aWNlLgoKJnF1b3Q7T3B0aW1pc3RpYyBidXNpbmVzcyBtb2RlbC4mcXVvdDsKCiZsdDsmbHQ7aWYgJGNsdWVzRm91bmQgJmd0Oz0gMyZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkZmFjZVRoZVRydXRoVW5sb2NrZWQgPSB0cnVlJmd0OyZndDsKCiAgICBUaGUgY2h1cmNoIGJlbGwgcmFuZyBhZ2Fpbi4KCiAgICBUaGlzIHRpbWUsIHRoZSBzb3VuZCBkaWQgbm90IGNvbWUgZnJvbSB0aGUgY2h1cmNoLgoKICAgIEl0IGNhbWUgZnJvbSBiZW5lYXRoIHRoZSBzdHJlZXQuCgogICAgRm9yIGFuIGluc3RhbnQsIGEgc2l4dGggZG9vcndheSBhcHBlYXJlZCBiZXR3ZWVuIHRoZSBzaGVyaWZmJiMzOTtzIG9mZmljZSBhbmQgdGhlIHNhbG9vbi4gV2hpdGUgbGlnaHQgc2hvbmUgYXJvdW5kIGl0cyBmcmFtZS4KCiAgICBUaGVuIFNpbGFzIGJsaW5rZWQsIGFuZCB0aGUgZG9vcndheSB3YXMgZ29uZS4KJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKJmx0O2RpdiBjbGFzcz0mcXVvdDtsb2NhdGlvbi1saXN0JnF1b3Q7Jmd0OwoKW1tFbnRlciB0aGUgTGFzdCBDaGFuY2UgU2Fsb29uLSZndDtTYWxvb24gLSBFbnRyYW5jZV1dCgpbW0V4YW1pbmUgdGhlIFNoZXJpZmYmIzM5O3MgT2ZmaWNlLSZndDtTaGVyaWZmIE9mZmljZSAtIEVudHJhbmNlXV0KCltbQXBwcm9hY2ggdGhlIENodXJjaC0mZ3Q7Q2h1cmNoIC0gRW50cmFuY2VdXQoKW1tWaXNpdCB0aGUgUGhvdG9ncmFwaGVyJiMzOTtzIFN0dWRpby0mZ3Q7U3R1ZGlvIC0gRW50cmFuY2VdXQoKW1tTZWFyY2ggdGhlIEdlbmVyYWwgU3RvcmUtJmd0O0dlbmVyYWwgU3RvcmUgLSBFbnRyYW5jZV1dCgombHQ7L2RpdiZndDsKCiZsdDsmbHQ7aWYgJGZhY2VUaGVUcnV0aFVubG9ja2VkJmd0OyZndDsKCiZsdDtociZndDsKClRoZSB0b3duIGhhZCBiZWd1biByZXBlYXRpbmcgaXRzZWxmLiBOYW1lcywgc3ltYm9scywgYW5kIGZyYWdtZW50cyBvZiBtZW1vcnkgYXBwZWFyZWQgaW4gcGxhY2VzIHdoZXJlIHRoZXkgZGlkIG5vdCBiZWxvbmcuCgpXaGF0ZXZlciBQZXJkaXRpb24gR3VsY2ggd2FudGVkIGZyb20gU2lsYXMsIGl0IGhhZCBsZWZ0IGVub3VnaCBldmlkZW5jZSBmb3IgaGltIHRvIGJlZ2luIGFza2luZyB0aGUgd3JvbmcgcXVlc3Rpb25zLgoKT3IgcGVyaGFwcyB0aGUgcmlnaHQgb25lLgoKW1tUcnkgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSB0b3duIHdhbnRzLSZndDtGYWNlIHRoZSBUcnV0aCAtIEZpcnN0IEF0dGVtcHRdXQoKJmx0OyZsdDsvaWYmZ3Q7Jmd0OzwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMTAiIG5hbWU9IlNhbG9vbiAtIEVudHJhbmNlIiB0YWdzPSJhY3QxIHRvd24gc2Fsb29uIiBwb3NpdGlvbj0iNjEyLjUsMTAwMCIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7VGhlIExhc3QgQ2hhbmNlIFNhbG9vbiZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRvYmplY3RpdmUgPSAmcXVvdDtJbnZlc3RpZ2F0ZSB0aGUgc2Fsb29uJnF1b3Q7Jmd0OyZndDsKCiZsdDsmbHQ7aWYgbm90ICR2aXNpdGVkU2Fsb29uJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICR2aXNpdGVkU2Fsb29uID0gdHJ1ZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkdG93blZpc2l0cyArPSAxJmd0OyZndDsKJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKVGhlIGJhdHdpbmcgZG9vcnMgb3BlbmVkIGJlZm9yZSBTaWxhcyB0b3VjaGVkIHRoZW0uCgpUaGF0IHdhcyBjb25zaWRlcmF0ZS4KCkhlIGVudGVyZWQgYW55d2F5LgoKVGhlIHNhbG9vbiBzbWVsbGVkIG9mIG9sZCB3aGlza2V5LCBsYW1wIG9pbCwgYW5kIHdvb2Qgc2VhbGVkIGJlbmVhdGggeWVhcnMgb2YgZHVzdC4gUm91bmQgdGFibGVzIGZpbGxlZCB0aGUgcm9vbSwgZWFjaCBzdXJyb3VuZGVkIGJ5IGNoYWlycyBhcnJhbmdlZCBhcyBpZiB0aGVpciBvY2N1cGFudHMgaGFkIHN0b29kIHVwIHNpbXVsdGFuZW91c2x5IGFuZCBuZXZlciByZXR1cm5lZC4KCkJlaGluZCB0aGUgYmFyLCByb3dzIG9mIGVtcHR5IGJvdHRsZXMgcmVmbGVjdGVkIGxpZ2h0IGZyb20gbm8gdmlzaWJsZSBzb3VyY2UuCgpUaGUgcGlhbm8gc3Rvb2QgYWdhaW5zdCB0aGUgZmFyIHdhbGwuCgpPbmUgaXZvcnkga2V5IGxvd2VyZWQgYnkgaXRzZWxmLgoKQSBzaW5nbGUgbm90ZSBzb3VuZGVkLgoKU2lsYXMgd2FpdGVkLgoKVGhlIHNhbWUga2V5IHJvc2UgYW5kIGxvd2VyZWQgYWdhaW4uCgomcXVvdDtPbmx5IGtub3cgdGhlIG9uZSBzb25nPyZxdW90OwoKQSBzZWNvbmQga2V5IGRlcHJlc3NlZC4KClRoZW4gYSB0aGlyZC4KClRoZSBub3RlcyBmb3JtZWQgdGhlIGJlZ2lubmluZyBvZiBhIHR1bmUgU2lsYXMgcmVjb2duaXplZCBidXQgY291bGQgbm90IGltbWVkaWF0ZWx5IG5hbWUuCgpUaGUgcmVhbGl6YXRpb24gY2FtZSBzbG93bHkuCgpJdCB3YXMgdGhlIHNvbmcgcGxheWVkIGF0IEpvbmFzIEhhcnQmIzM5O3MgZnVuZXJhbC4KClNpbGFzIGhhZCByZW1haW5lZCBvdXRzaWRlIHRoZSBjaHVyY2ggZHVyaW5nIHRoZSBzZXJ2aWNlLgoKSGUgaGFkIHRvbGQgaGltc2VsZiBpdCB3YXMgYmVjYXVzZSB0aGUgZGVhZCBtYW4mIzM5O3MgZmFtaWx5IHdvdWxkIG5vdCB3YW50IGhpbSB0aGVyZS4KClRoYXQgaGFkIGJlZW4gb25lIG9mIHRoZSBraW5kZXIgbGllcy4KCk9uIHRoZSBiYXIgcmVzdGVkIGEgd2hpc2tleSBnbGFzcyBjb250YWluaW5nIGEgZnJlc2ggbWVhc3VyZSBvZiBhbWJlciBsaXF1aWQuIEJlc2lkZSBpdCBsYXkgYSB0YXJuaXNoZWQgZGVwdXR5JiMzOTtzIGJhZGdlLgoKVGhlIG51bWJlciBvbiBpdCB3YXMgdGhpcnRlZW4uCgpTaWxhcyBoYWQgb25jZSB3b3JuIGJhZGdlIG51bWJlciB0aGlydGVlbi4KCiZsdDsmbHQ7aWYgbm90ICRzYWxvb25DbHVlJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRzYWxvb25DbHVlID0gdHJ1ZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkY2x1ZXNGb3VuZCArPSAxJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRlY2hvICs9IDEmZ3Q7Jmd0OwoKICAgIFRoZSBtb21lbnQgU2lsYXMgc2F3IHRoZSBudW1iZXIsIHRoZSBwaWFubyBzdG9wcGVkLgoKICAgIFNvbWV3aGVyZSBhYm92ZSBoaW0sIGEgY2hhaXIgc2NyYXBlZCBhY3Jvc3MgdGhlIGZsb29yLgombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgpbW0V4YW1pbmUgdGhlIGJhZGdlLSZndDtTYWxvb24gLSBCYWRnZV1dCgpbW0xvb2sgYmVoaW5kIHRoZSBiYXItJmd0O1NhbG9vbiAtIEJlaGluZCB0aGUgQmFyXV0KCltbUmV0dXJuIHRvIE1haW4gU3RyZWV0LSZndDtNYWluIFN0cmVldF1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSIxMSIgbmFtZT0iU2hlcmlmZiBPZmZpY2UgLSBFbnRyYW5jZSIgdGFncz0iYWN0MSB0b3duIHNoZXJpZmYiIHBvc2l0aW9uPSI4NTAsMTIwMCIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7U2hlcmlmZiYjMzk7cyBPZmZpY2UmcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkb2JqZWN0aXZlID0gJnF1b3Q7SW52ZXN0aWdhdGUgdGhlIHNoZXJpZmYmIzM5O3Mgb2ZmaWNlJnF1b3Q7Jmd0OyZndDsKCiZsdDsmbHQ7aWYgbm90ICR2aXNpdGVkU2hlcmlmZiZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkdmlzaXRlZFNoZXJpZmYgPSB0cnVlJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICR0b3duVmlzaXRzICs9IDEmZ3Q7Jmd0OwombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgpUaGUgc2hlcmlmZiYjMzk7cyBvZmZpY2UgZG9vciBzdG9vZCBvcGVuLgoKU2lsYXMgcGF1c2VkIGJlbmVhdGggdGhlIGJhZGdlIG5haWxlZCBhYm92ZSBpdC4KClRoZSBiYWRnZSB3YXMgdG9vIGxhcmdlIHRvIGhhdmUgYmVlbiB3b3JuLiBJdCBhcHBlYXJlZCBjZXJlbW9uaWFsLCB0aG91Z2ggd2VhdGhlciBhbmQgdGltZSBoYWQgc3RyaXBwZWQgYXdheSBtb3N0IG9mIGl0cyBzaGluZS4KCk9uZSB3b3JkIHJlbWFpbmVkIGVuZ3JhdmVkIGFjcm9zcyBpdHMgY2VudGVyOgoKTUVBU1VSRS4KCkluc2lkZSwgYSBkZXNrIGZhY2VkIHR3byBpcm9uLWJhcnJlZCBjZWxscy4gV2FudGVkIHBvc3RlcnMgY292ZXJlZCBvbmUgd2FsbC4gRXZlcnkgZmFjZSBoYWQgYmVlbiBzY3JhdGNoZWQgYXdheSBleGNlcHQgZm9yIHRoZSBleWVzLgoKQSByaWZsZSByYWNrIHN0b29kIGVtcHR5LgoKQSBjb2ZmZWVwb3QgcmVzdGVkIG9uIHRoZSBzdG92ZS4KClN0ZWFtIGN1cmxlZCBmcm9tIGl0cyBzcG91dC4KClNpbGFzIHRvdWNoZWQgdGhlIHN0b3ZlLgoKQ29sZCBpcm9uLgoKJnF1b3Q7TmF0dXJhbGx5LiZxdW90OwoKQW4gb3BlbiBsZWRnZXIgd2FpdGVkIG9uIHRoZSBkZXNrLgoKQSBwZW4gc3Rvb2QgdXByaWdodCBpbiB0aGUgaW5rd2VsbCwgbW92aW5nIGdlbnRseSBhcyBpZiBhbiB1bnNlZW4gaGFuZCBoYWQganVzdCByZWxlYXNlZCBpdC4KCiZsdDsmbHQ7aWYgbm90ICRzaGVyaWZmQ2x1ZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkc2hlcmlmZkNsdWUgPSB0cnVlJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRjbHVlc0ZvdW5kICs9IDEmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJHRydXRoICs9IDEmZ3Q7Jmd0OwoKICAgIEluayBzcHJlYWQgYWNyb3NzIHRoZSBvcGVuIHBhZ2UuCgogICAgVGhlIGxldHRlcnMgZm9ybWVkIHNsb3dseToKCiAgICBXQVJELCBTSUxBUyAgCiAgICBGT1JNRVIgT0ZGSUNFOiBNQVJTSEFMICAKICAgIENIQVJHRTogQUJBTkRPTk1FTlQgT0YgRFVUWSAgCiAgICBWRVJESUNUOiBQRU5ESU5HCiZsdDsmbHQ7L2lmJmd0OyZndDsKCltbUmVhZCB0aGUgbGVkZ2VyLSZndDtTaGVyaWZmIE9mZmljZSAtIExlZGdlcl1dCgpbW0V4YW1pbmUgdGhlIGphaWwgY2VsbHMtJmd0O1NoZXJpZmYgT2ZmaWNlIC0gQ2VsbHNdXQoKW1tSZXR1cm4gdG8gTWFpbiBTdHJlZXQtJmd0O01haW4gU3RyZWV0XV08L3R3LXBhc3NhZ2VkYXRhPjx0dy1wYXNzYWdlZGF0YSBwaWQ9IjEyIiBuYW1lPSJDaHVyY2ggLSBFbnRyYW5jZSIgdGFncz0iYWN0MSB0b3duIGNodXJjaCIgcG9zaXRpb249IjE1NzUsMTI1MCIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7Q2h1cmNoIG9mIFNhaW50IE1lcmN5JnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJG9iamVjdGl2ZSA9ICZxdW90O0ludmVzdGlnYXRlIHRoZSBjaHVyY2gmcXVvdDsmZ3Q7Jmd0OwoKJmx0OyZsdDtpZiBub3QgJHZpc2l0ZWRDaHVyY2gmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJHZpc2l0ZWRDaHVyY2ggPSB0cnVlJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICR0b3duVmlzaXRzICs9IDEmZ3Q7Jmd0OwombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgpUaGUgY2h1cmNoIGRvb3JzIHN0b29kIG9wZW4uCgpBYm92ZSB0aGVtLCBzb21lb25lIGhhZCBjYXJ2ZWQgYSBuYW1lIGludG8gdGhlIGxpbnRlbDoKClNBSU5UIE1FUkNZCgpCZWxvdyBpdCwgYW5vdGhlciBoYW5kIGhhZCBhZGRlZDoKClNFUlZJQ0VTIFNVQkpFQ1QgVE8gQVZBSUxBQklMSVRZCgpTaWxhcyByZW1vdmVkIGhpcyBoYXQgYmVmb3JlIHJlbWVtYmVyaW5nIHRoYXQgdGhlIHN0b3JtIGhhZCBhbHJlYWR5IHRha2VuIGl0LgoKSW5zaWRlLCBuYXJyb3cgcGV3cyBmYWNlZCBhIHBsYWluIHdvb2RlbiBhbHRhci4gRHVzdCBjb3ZlcmVkIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBjZW50ZXIgYWlzbGUsIHdoZXJlIHNtYWxsIGZvb3RwcmludHMgbGVkIHRvd2FyZCB0aGUgZnJvbnQuCgpUaGV5IGJlbG9uZ2VkIHRvIGEgYmFyZWZvb3QgY2hpbGQuCgpUaGUgcHJpbnRzIGVuZGVkIGF0IHRoZSBhbHRhci4KCkEgd2hpdGUgdmVpbCBoYWQgYmVlbiBmb2xkZWQgY2FyZWZ1bGx5IGJlc2lkZSBhbiB1bmxpdCBjYW5kbGUuCgpTaWxhcyBoZWFyZCBhIHdvbWFuIHdoaXNwZXIgZnJvbSBiZWhpbmQgdGhlIGNvbmZlc3Npb25hbCBzY3JlZW4uCgomcXVvdDtTb21lIG1lbiBjb25mZXNzIGJlY2F1c2UgdGhleSB3YW50IGZvcmdpdmVuZXNzLiZxdW90OwoKQSBwYXVzZSBmb2xsb3dlZC4KCiZxdW90O090aGVycyBvbmx5IHdhbnQgYSB3aXRuZXNzLiZxdW90OwoKJmx0OyZsdDtpZiBub3QgJGNodXJjaENsdWUmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGNodXJjaENsdWUgPSB0cnVlJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRjbHVlc0ZvdW5kICs9IDEmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGNvbXBhc3Npb24gKz0gMSZndDsmZ3Q7CgogICAgVGhlIGNhbmRsZSBsaXQgaXRzZWxmLgoKICAgIEZvciBhbiBpbnN0YW50LCB0aGUgZmxhbWUgY2FzdCB0aGUgc2hhZG93IG9mIGEgd29tYW4gd2VhcmluZyBhIHZlaWwuCiZsdDsmbHQ7L2lmJmd0OyZndDsKCltbRm9sbG93IHRoZSBjaGlsZCYjMzk7cyBmb290cHJpbnRzLSZndDtDaHVyY2ggLSBBbHRhcl1dCgpbW0FwcHJvYWNoIHRoZSBjb25mZXNzaW9uYWwtJmd0O0NodXJjaCAtIENvbmZlc3Npb25hbF1dCgpbW1JldHVybiB0byBNYWluIFN0cmVldC0mZ3Q7TWFpbiBTdHJlZXRdXTwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMTMiIG5hbWU9IlN0dWRpbyAtIEVudHJhbmNlIiB0YWdzPSJhY3QxIHRvd24gc3R1ZGlvIiBwb3NpdGlvbj0iOTg3LjUsMTAwMCIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7Q3JhbmUgUGhvdG9ncmFwaGljIFN0dWRpbyZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRvYmplY3RpdmUgPSAmcXVvdDtJbnZlc3RpZ2F0ZSB0aGUgc3R1ZGlvJnF1b3Q7Jmd0OyZndDsKCiZsdDsmbHQ7aWYgbm90ICR2aXNpdGVkU3R1ZGlvJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICR2aXNpdGVkU3R1ZGlvID0gdHJ1ZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkdG93blZpc2l0cyArPSAxJmd0OyZndDsKJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKVGhlIHBob3RvZ3JhcGhlciYjMzk7cyBzdHVkaW8gZG9vciBib3JlIGEgcGFpbnRlZCBzaWduOgoKTElMQSBDUkFORSAgClBPUlRSQUlUUywgTUVNT1JJQUxTLCBBTkQgT0NDQVNJT05BTCBNSVJBQ0xFUyAgClBBWU1FTlQgUkVRVUlSRUQgRk9SIFRIRSBGSVJTVCBUV08KClNpbGFzIHRyaWVkIHRoZSBoYW5kbGUuCgpUaGUgZG9vciBvcGVuZWQuCgpEb3plbnMgb2YgZnJhbWVkIHBob3RvZ3JhcGhzIGNvdmVyZWQgdGhlIHdhbGxzLiBGYW1pbGllcywgbWluZXJzLCBsYXdtZW4sIG1lcmNoYW50cywgY2hpbGRyZW4sIGFuZCBzb2xkaWVycyBzdGFyZWQgb3V0IHRocm91Z2ggc2lsdmVyZWQgZ2xhc3MuCgpFdmVyeSBwaG90b2dyYXBoIGhhZCBmYWRlZCBleGNlcHQgb25lLgoKSXQgc2hvd2VkIFNpbGFzIHN0YW5kaW5nIG91dHNpZGUgdGhlIHNoZXJpZmYmIzM5O3Mgb2ZmaWNlLgoKSGUgYXBwZWFyZWQgcGVyaGFwcyB0d2VudHkgeWVhcnMgeW91bmdlci4gQSBiYWRnZSByZXN0ZWQgb24gaGlzIHZlc3QuIE1hcnNoYWwgR3JhdmVzIHN0b29kIGJlc2lkZSBoaW0uCgpCZXR3ZWVuIHRoZW0gd2FzIEpvbmFzIEhhcnQuCgpBbGl2ZS4KClNpbGFzIGxpZnRlZCB0aGUgZnJhbWUuCgpUaGUgcGhvdG9ncmFwaCBjaGFuZ2VkLgoKSm9uYXMgZGlzYXBwZWFyZWQuCgpUaGVuIEdyYXZlcy4KCkZpbmFsbHksIG9ubHkgU2lsYXMgcmVtYWluZWQuCgombHQ7Jmx0O2lmIG5vdCAkc3R1ZGlvQ2x1ZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkc3R1ZGlvQ2x1ZSA9IHRydWUmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGNsdWVzRm91bmQgKz0gMSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkZWNobyArPSAxJmd0OyZndDsKCiAgICBCbGFjayBpbmsgc2VlcGVkIGZyb20gU2lsYXMmIzM5O3MgZXllcyBpbiB0aGUgcGhvdG9ncmFwaC4KCiAgICBUd28gd29yZHMgYXBwZWFyZWQgYmVuZWF0aCB0aGUgaW1hZ2U6CgogICAgV0hPIFJFTUFJTkVEPwombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgpbW0V4YW1pbmUgdGhlIGNoYW5naW5nIHBvcnRyYWl0LSZndDtTdHVkaW8gLSBTaWxhcyBQb3J0cmFpdF1dCgpbW0xvb2sgYmVoaW5kIHRoZSBkYXJrIGN1cnRhaW4tJmd0O1N0dWRpbyAtIERhcmtyb29tXV0KCltbUmV0dXJuIHRvIE1haW4gU3RyZWV0LSZndDtNYWluIFN0cmVldF1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSIxNCIgbmFtZT0iR2VuZXJhbCBTdG9yZSAtIEVudHJhbmNlIiB0YWdzPSJhY3QxIHRvd24gc3RvcmUiIHBvc2l0aW9uPSIxMTEyLjUsMTAwMCIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7UGVyZGl0aW9uIEdlbmVyYWwgU3RvcmUmcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkb2JqZWN0aXZlID0gJnF1b3Q7U2VhcmNoIGZvciBzdXBwbGllcyZxdW90OyZndDsmZ3Q7CgombHQ7Jmx0O2lmIG5vdCAkc3RvcmVDbHVlJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRzdG9yZUNsdWUgPSB0cnVlJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRjbHVlc0ZvdW5kICs9IDEmZ3Q7Jmd0OwombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgpUaGUgZ2VuZXJhbCBzdG9yZSB3YXMgYmV0dGVyIHN0b2NrZWQgdGhhbiBpdCBoYWQgYW55IHJpZ2h0IHRvIGJlLgoKQ2FubmVkIGJlYW5zIGxpbmVkIG9uZSBzaGVsZi4gUm9wZSBodW5nIGZyb20gaG9va3MgbmVhciB0aGUgY291bnRlci4gQm94ZXMgb2YgYW1tdW5pdGlvbiBzYXQgYmVoaW5kIGR1c3R5IGdsYXNzLgoKQSB3YXRlciBiYXJyZWwgc3Rvb2QgaW4gdGhlIGNvcm5lci4KClNpbGFzIGNyb3NzZWQgdGhlIHJvb20gYW5kIGxpZnRlZCBpdHMgbGlkLgoKVGhlIGJhcnJlbCB3YXMgZnVsbC4KCkhlIHJlYWNoZWQgZm9yIHRoZSBkaXBwZXIuCgpXb3JkcyBhcHBlYXJlZCBhY3Jvc3MgdGhlIHN1cmZhY2Ugb2YgdGhlIHdhdGVyOgoKRVZFUllUSElORyBIRVJFIEhBUyBBIFBSSUNFLgoKQSBicmFzcyBjYXNoIHJlZ2lzdGVyIHNhdCBvbiB0aGUgY291bnRlci4gSXRzIGRpc3BsYXkgc2hvd2VkIG5vIGRvbGxhciBhbW91bnQuCgpJbnN0ZWFkLCBpdCByZWFkOgoKT05FIEFQT0xPR1kKClNpbGFzIGluc3BlY3RlZCB0aGUgYW1tdW5pdGlvbiBiZWhpbmQgdGhlIGNvdW50ZXIuCgpIaXMgcmV2b2x2ZXIgYWNjZXB0ZWQgdGhlIGNhcnRyaWRnZXMuCgpBIGhhbmR3cml0dGVuIHByaWNlIGNhcmQgc3Rvb2QgYmVzaWRlIHRoZSBib3hlczoKClNJWCBST1VORFMgIApPTkUgTUVNT1JZCgomcXVvdDtDb21wZXRpdGl2ZSByYXRlcywmcXVvdDsgU2lsYXMgc2FpZCwgJnF1b3Q7Y29uc2lkZXJpbmcgdGhlIG1hbmFnZW1lbnQgYXBwZWFycyB0byBiZSBkZWFkLiZxdW90OwoKJmx0OyZsdDtpZiBub3QgJHZpc2l0ZWRTdG9yZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkdmlzaXRlZFN0b3JlID0gdHJ1ZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkdG93blZpc2l0cyArPSAxJmd0OyZndDsKJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKW1tBc2sgZm9yIHdhdGVyLSZndDtHZW5lcmFsIFN0b3JlIC0gV2F0ZXJdXQoKW1tFeGFtaW5lIHRoZSBhbW11bml0aW9uLSZndDtHZW5lcmFsIFN0b3JlIC0gQW1tdW5pdGlvbl1dCgpbW0luc3BlY3QgdGhlIGNhc2ggcmVnaXN0ZXItJmd0O0dlbmVyYWwgU3RvcmUgLSBSZWdpc3Rlcl1dCgpbW1JldHVybiB0byBNYWluIFN0cmVldC0mZ3Q7TWFpbiBTdHJlZXRdXTwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMTUiIG5hbWU9IkZhY2UgdGhlIFRydXRoIC0gRmlyc3QgQXR0ZW1wdCIgdGFncz0iYWN0MSBqdWRnbWVudCIgcG9zaXRpb249IjE0NTAsMTAwMCIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7TWFpbiBTdHJlZXQmcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkb2JqZWN0aXZlID0gJnF1b3Q7VW5kZXJzdGFuZCB0aGUgdG93biYjMzk7cyBqdWRnbWVudCZxdW90OyZndDsmZ3Q7CgpTaWxhcyByZXR1cm5lZCB0byB0aGUgY2VudGVyIG9mIE1haW4gU3RyZWV0LgoKVGhlIGNsdWVzIGRpZCBub3QgZml0IHRvZ2V0aGVyIG5lYXRseS4KClBlcmRpdGlvbiBHdWxjaCBrbmV3IGhpcyBuYW1lLgoKSXQga25ldyBKb25hcyBIYXJ0LgoKSXQga25ldyBNYXJzaGFsIEdyYXZlcy4KCkl0IHBvc3Nlc3NlZCByZWNvcmRzIHdyaXR0ZW4gaW4gU2lsYXMmIzM5O3MgaGFuZCBhbmQgcGhvdG9ncmFwaHMgb2YgZXZlbnRzIGhlIGRpZCBub3QgcmVtZW1iZXIgb2NjdXJyaW5nIGhlcmUuCgpUaGUgdG93biBkaWQgbm90IHNlZW0gaW50ZXJlc3RlZCBpbiBraWxsaW5nIGhpbS4KCk5vdCB5ZXQuCgpJdCB3YW50ZWQgc29tZXRoaW5nIG1vcmUgZGlmZmljdWx0LgoKSXQgd2FudGVkIGhpbSB0byByZW1lbWJlciBhY2N1cmF0ZWx5LgoKQSBzb3VuZCBtb3ZlZCBiZW5lYXRoIHRoZSBzdHJlZXQuCgpOb3QgZm9vdHN0ZXBzLgoKQSBnYXZlbCBzdHJpa2luZyB3b29kLgoKT25jZS4KClR3aWNlLgoKT24gdGhlIHRoaXJkIHN0cmlrZSwgZXZlcnkgZG9vciBpbiB0b3duIG9wZW5lZC4KCkEgdGFsbCBzaGFkb3cgYXBwZWFyZWQgaW5zaWRlIHRoZSBjaHVyY2guCgpUaGUgZmlndXJlIHdvcmUgbm8gaGF0LCBubyBiYWRnZSwgYW5kIG5vIHZpc2libGUgd2VhcG9uLiBJdHMgb3V0bGluZSB3YXZlcmVkIGxpa2UgaGVhdCBhYm92ZSBkZXNlcnQgc3RvbmUuCgpTaWxhcyBjb3VsZCBub3Qgc2VlIGl0cyBmYWNlLgoKU3RpbGwsIGhlIHVuZGVyc3Rvb2QgdGhhdCBpdCB3YXMgbG9va2luZyBkaXJlY3RseSBhdCBoaW0uCgpPbmUgd29yZCBhcnJpdmVkIGZyb20gZXZlcnkgYnVpbGRpbmcgYXQgb25jZS4KCiZxdW90O0luc3VmZmljaWVudC4mcXVvdDsKClRoZSBkb29ycyBzbGFtbWVkIHNodXQuCgombHQ7Jmx0O2lmICRjbHVlc0ZvdW5kICZsdDsgNSZndDsmZ3Q7CiAgICBTaWxhcyBoYWQgdW5jb3ZlcmVkIHBhcnQgb2YgdGhlIHRvd24mIzM5O3MgYWNjdXNhdGlvbiwgYnV0IG5vdCBlbm91Z2ggdG8gdW5kZXJzdGFuZCB0aGUgdmVyZGljdCB3YWl0aW5nIGJlbmVhdGggaXQuCiZsdDsmbHQ7L2lmJmd0OyZndDsKCiZsdDsmbHQ7aWYgJGNsdWVzRm91bmQgJmd0Oz0gNSZndDsmZ3Q7CiAgICBUaGUgZml2ZSBjbHVlcyBmb3JtZWQgdGhlIGVkZ2VzIG9mIHNvbWV0aGluZyBsYXJnZXIuCgogICAgVGhlIEp1ZGdlIGhhZCBub3QgcmVqZWN0ZWQgaGltLgoKICAgIEl0IGhhZCBzdW1tb25lZCBoaW0uCiZsdDsmbHQ7L2lmJmd0OyZndDsKCltbQ29udGludWUgaW52ZXN0aWdhdGluZyBNYWluIFN0cmVldC0mZ3Q7TWFpbiBTdHJlZXRdXTwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMTYiIG5hbWU9IlNhbG9vbiAtIEJhZGdlIiB0YWdzPSJhY3QxIHRvd24gc2Fsb29uIGJhZGdlIiBwb3NpdGlvbj0iMzc1LDExNzUiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O1RoZSBMYXN0IENoYW5jZSBTYWxvb24mcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkb2JqZWN0aXZlID0gJnF1b3Q7RXhhbWluZSB0aGUgYmFkZ2UmcXVvdDsmZ3Q7Jmd0OwoKU2lsYXMgcGlja2VkIHVwIHRoZSBiYWRnZS4KClRoZSBtZXRhbCB3YXMgd2FybS4KCk5vdCBzdW4td2FybWVkLiBOb3QgZmlyZS13YXJtZWQuCgpCb2R5LXdhcm0uCgpIZSB0dXJuZWQgaXQgb3Zlci4KCldvcmRzIGhhZCBiZWVuIHNjcmF0Y2hlZCBpbnRvIHRoZSBiYWNrIHdpdGggdGhlIHBvaW50IG9mIGEga25pZmU6CgpZT1UgTEVGVCBCRUZPUkUgVEhFIFZFUkRJQ1QuCgpTaWxhcyBjbG9zZWQgaGlzIGZpbmdlcnMgYXJvdW5kIHRoZSBiYWRnZS4KCkEgbWVtb3J5IHN0aXJyZWQgYmVoaW5kIGhpcyBleWVzLgoKQSBjb3VydHJvb20gZmlsbGVkIGJleW9uZCBjYXBhY2l0eS4KCkpvbmFzIEhhcnQgc2l0dGluZyBhbG9uZSBhdCB0aGUgZGVmZW5zZSB0YWJsZS4KCk1hcnNoYWwgR3JhdmVzIHN0YW5kaW5nIGJlc2lkZSB0aGUganVkZ2UuCgpTaWxhcyBvdXRzaWRlIGluIHRoZSBjb3JyaWRvciwgbGlzdGVuaW5nIHRvIG1lbiBkZWNpZGUgYW5vdGhlciBtYW4mIzM5O3MgbGlmZSB3aGlsZSB0ZWxsaW5nIGhpbXNlbGYgdGhhdCBoaXMgdGVzdGltb255IHdvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZS4KClRoZSBtZW1vcnkgdmFuaXNoZWQuCgpTaWxhcyBvcGVuZWQgaGlzIGhhbmQuCgpUaGUgYmFkZ2Ugd2FzIGNvbGQgbm93LgoKJmx0OyZsdDtpZiAkdHJ1dGggJmd0OyAkZmVhciZndDsmZ3Q7CiAgICBUaGUgc2NyYXRjaGVkIHdvcmRzIHJlbWFpbmVkIGNsZWFybHkgdmlzaWJsZS4KJmx0OyZsdDtlbHNlJmd0OyZndDsKICAgIEZvciBhIG1vbWVudCwgU2lsYXMgd29uZGVyZWQgd2hldGhlciB0aGUgd29yZHMgaGFkIGV2ZXIgYmVlbiB0aGVyZSBhdCBhbGwuCiZsdDsmbHQ7L2lmJmd0OyZndDsKCltbU3R1ZHkgdGhlIHBpYW5vLSZndDtTYWxvb24gLSBQaWFub11dCgpbW0xvb2sgYmVoaW5kIHRoZSBiYXItJmd0O1NhbG9vbiAtIEJlaGluZCB0aGUgQmFyXV0KCltbUmV0dXJuIHRvIE1haW4gU3RyZWV0LSZndDtNYWluIFN0cmVldF1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSIxNyIgbmFtZT0iU2Fsb29uIC0gQmVoaW5kIHRoZSBCYXIiIHRhZ3M9ImFjdDEgdG93biBzYWxvb24iIHBvc2l0aW9uPSI3MDAsMTIwMCIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7VGhlIExhc3QgQ2hhbmNlIFNhbG9vbiZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRvYmplY3RpdmUgPSAmcXVvdDtTZWFyY2ggYmVoaW5kIHRoZSBiYXImcXVvdDsmZ3Q7Jmd0OwoKU2lsYXMgd2Fsa2VkIGJlaGluZCB0aGUgYmFyLgoKQSBzaG90Z3VuIHJlc3RlZCBiZW5lYXRoIHRoZSBjb3VudGVyLiBJdHMgc3RvY2sgaGFkIHNwbGl0IHdpdGggYWdlLCBhbmQgcnVzdCBzZWFsZWQgdGhlIGFjdGlvbiBzaHV0LiBTb21lb25lIGhhZCB0aWVkIGEgYmxhY2sgcmliYm9uIGFyb3VuZCB0aGUgYmFycmVsLgoKQmVzaWRlIGl0IHN0b29kIGEgbGVkZ2VyLgoKTW9zdCBvZiB0aGUgcGFnZXMgaGFkIGJlZW4gdG9ybiBvdXQuIFRoZSByZW1haW5pbmcgZW50cmllcyBsaXN0ZWQgZHJpbmtzIHB1cmNoYXNlZCBkdXJpbmcgdGhlIGZpbmFsIHdlZWsgb2YgdGhlIHRvd24mIzM5O3MgZXhpc3RlbmNlLgoKV2hpc2tleS4KCkJlZXIuCgpDb2ZmZWUuCgpXaGlza2V5LgoKU29tZXRoaW5nIGNhbGxlZCBhIFdpZG93JiMzOTtzIE1lcmN5LCB3aGljaCBTaWxhcyBzdXNwZWN0ZWQgaGFkIGJlZW4gbmFtZWQgYnkgYSBiYXJ0ZW5kZXIgd2l0aCBlaXRoZXIgYSBjcnVlbCBzZW5zZSBvZiBodW1vciBvciBhIHZlcnkgc3BlY2lmaWMgY2xpZW50ZWxlLgoKVGhlIGZpbmFsIGVudHJ5IHJlYWQ6CgpPTkUgR0xBU1MgT0YgV0FURVIgIApQQUlEIEJZIFNJTEFTIFdBUkQgIApERUxJVkVSIFRPIEpPTkFTIEhBUlQKClNpbGFzIHN0YXJlZCBhdCB0aGUgbGluZS4KCkhlIGhhZCBuZXZlciBiZWVuIHRvIFBlcmRpdGlvbiBHdWxjaC4KCkF0IGxlYXN0LCBoZSBoYWQgbm8gbWVtb3J5IG9mIGl0LgoKJmx0OyZsdDtpZiAkZm9sbG93ZWRUcmFja3MmZ3Q7Jmd0OwogICAgVGhlIGhhbmR3cml0aW5nIHJlc2VtYmxlZCB0aGUgYm9vdCBwcmludHMgaW4gdGhlIHdhc2guIEZhbWlsaWFyIGluIGEgd2F5IHRoYXQgbWFkZSBubyByZWFzb25hYmxlIHNlbnNlLgombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgombHQ7Jmx0O2lmICR0cnVzdGVkSG9yc2UmZ3Q7Jmd0OwogICAgQmVoaW5kIGhpbSwgdGhlIGhvcnNlIHN0YW1wZWQgb25jZSBvdXRzaWRlLCBhcyBpZiBvYmplY3RpbmcgdG8gdGhlIGRpcmVjdGlvbiBvZiBTaWxhcyYjMzk7cyB0aG91Z2h0cy4KJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKW1tFeGFtaW5lIHRoZSBiYWRnZS0mZ3Q7U2Fsb29uIC0gQmFkZ2VdXQoKW1tTdHVkeSB0aGUgcGlhbm8tJmd0O1NhbG9vbiAtIFBpYW5vXV0KCltbUmV0dXJuIHRvIE1haW4gU3RyZWV0LSZndDtNYWluIFN0cmVldF1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSIxOCIgbmFtZT0iU2Fsb29uIC0gUGlhbm8iIHRhZ3M9ImFjdDEgdG93biBzYWxvb24gbWVtb3J5IiBwb3NpdGlvbj0iNTAwLDEzNTAiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O1RoZSBMYXN0IENoYW5jZSBTYWxvb24mcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkb2JqZWN0aXZlID0gJnF1b3Q7TGlzdGVuIHRvIHRoZSBwaWFubyZxdW90OyZndDsmZ3Q7CgpTaWxhcyBhcHByb2FjaGVkIHRoZSBwaWFuby4KCkR1c3QgY292ZXJlZCBldmVyeSBrZXkgZXhjZXB0IHRocmVlLgoKSGUgcHJlc3NlZCB0aGUgZmlyc3QuCgpBIGNodXJjaCBiZWxsIGFuc3dlcmVkIGZyb20gb3V0c2lkZS4KCkhlIHByZXNzZWQgdGhlIHNlY29uZC4KCkEgZ3Vuc2hvdCBlY2hvZWQgc29tZXdoZXJlIGFib3ZlIHRoZSBzYWxvb24uCgpIZSBwcmVzc2VkIHRoZSB0aGlyZC4KCkEgbWFuJiMzOTtzIHZvaWNlIHdoaXNwZXJlZCBmcm9tIGJlbmVhdGggdGhlIGNsb3NlZCBsaWQuCgomcXVvdDtTYXkgbXkgbmFtZS4mcXVvdDsKClNpbGFzIHN0ZXBwZWQgYmFjay4KClRoZSBsaWQgcm9zZSBoYWxmIGFuIGluY2guCgpDb2xkIGFpciBlc2NhcGVkIGZyb20gd2l0aGluLgoKJmx0OyZsdDtpZiAkam9uYXNLbm93biZndDsmZ3Q7CiAgICBbW1NheSAmcXVvdDtKb25hcyBIYXJ0LiZxdW90Oy0mZ3Q7U2Fsb29uIC0gU3BlYWsgSm9uYXNdXQombHQ7Jmx0O2Vsc2UmZ3Q7Jmd0OwogICAgU2lsYXMga25ldyB0aGUgdm9pY2UgYmVsb25nZWQgdG8gc29tZW9uZSBmcm9tIGhpcyBwYXN0LCBidXQgdGhlIG5hbWUgcmVmdXNlZCB0byByaXNlIHdpdGggaXQuCiZsdDsmbHQ7L2lmJmd0OyZndDsKCltbQ2xvc2UgdGhlIHBpYW5vIGxpZC0mZ3Q7U2Fsb29uIC0gQ2xvc2UgUGlhbm9dXQoKW1tSZXR1cm4gdG8gdGhlIHNhbG9vbiBlbnRyYW5jZS0mZ3Q7U2Fsb29uIC0gRW50cmFuY2VdXTwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMTkiIG5hbWU9IlNhbG9vbiAtIFNwZWFrIEpvbmFzIiB0YWdzPSJhY3QxIHRvd24gc2Fsb29uIG1lbW9yeSIgcG9zaXRpb249IjM1MCwxNTAwIiBzaXplPSIxMDAsMTAwIj4mbHQ7Jmx0O3NldCAkbG9jYXRpb24gPSAmcXVvdDtUaGUgTGFzdCBDaGFuY2UgU2Fsb29uJnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJG9iamVjdGl2ZSA9ICZxdW90O0Fuc3dlciB0aGUgdm9pY2UmcXVvdDsmZ3Q7Jmd0OwoKJnF1b3Q7Sm9uYXMgSGFydCwmcXVvdDsgU2lsYXMgc2FpZC4KClRoZSBzYWxvb24gY2hhbmdlZC4KCk5vdCBkcmFtYXRpY2FsbHkuCgpUaGUgbGFtcHMgYnVybmVkIGEgbGl0dGxlIHdhcm1lci4gVGhlIHdhbGxzIHNlZW1lZCBmYXJ0aGVyIGFwYXJ0LiBUaGUgYWlyIGxvc3QgaXRzIHRhc3RlIG9mIGR1c3QuCgpUaGUgcGlhbm8gbGlkIGxvd2VyZWQgYnkgaXRzZWxmLgoKT25lIGNsZWFyIG5vdGUgc291bmRlZC4KClRoZW4gYW5vdGhlci4KClRoZSBmdW5lcmFsIHNvbmcgYmVnYW4gYWdhaW4sIGJ1dCB0aGlzIHRpbWUgaXQgZGlkIG5vdCBzdG9wIGFmdGVyIHRoZSBvcGVuaW5nIG1lYXN1cmUuCgombHQ7Jmx0O2lmIG5vdCAkc2Fsb29uSm9uYXNOYW1lZCZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkc2Fsb29uSm9uYXNOYW1lZCA9IHRydWUmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJG5hbWVzUmVtZW1iZXJlZCArPSAxJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRjb21wYXNzaW9uICs9IDEmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJHRydXRoICs9IDEmZ3Q7Jmd0OwombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgpBIG1hbiYjMzk7cyByZWZsZWN0aW9uIGFwcGVhcmVkIGluIHRoZSBtaXJyb3IgYmVoaW5kIHRoZSBiYXIuCgpIZSBzdG9vZCBkaXJlY3RseSBiZWhpbmQgU2lsYXMuCgpTaWxhcyBkaWQgbm90IHR1cm4uCgpUaGUgcmVmbGVjdGlvbiB3b3JlIG5vIGd1bi4gQSBkYXJrIHN0YWluIHNwcmVhZCBhY3Jvc3MgdGhlIGZyb250IG9mIGhpcyBzaGlydC4KCiZxdW90O1lvdSByZW1lbWJlcmVkIHRoZSBuYW1lLCZxdW90OyB0aGUgbWFuIHNhaWQuCgomcXVvdDtJIG5ldmVyIGZvcmdvdCBpdC4mcXVvdDsKCiZxdW90O1RoYXQgaXNuJiMzOTt0IHRoZSBzYW1lIHRoaW5nLiZxdW90OwoKVGhlIHJlZmxlY3Rpb24gZGlzYXBwZWFyZWQuCgpbW1JldHVybiB0byB0aGUgc2Fsb29uIGVudHJhbmNlLSZndDtTYWxvb24gLSBFbnRyYW5jZV1dCgpbW0xlYXZlIGZvciBNYWluIFN0cmVldC0mZ3Q7TWFpbiBTdHJlZXRdXTwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMjAiIG5hbWU9IlNhbG9vbiAtIENsb3NlIFBpYW5vIiB0YWdzPSJhY3QxIHRvd24gc2Fsb29uIGNob2ljZSIgcG9zaXRpb249IjU3NSwxNDc1IiBzaXplPSIxMDAsMTAwIj4mbHQ7Jmx0O3NldCAkbG9jYXRpb24gPSAmcXVvdDtUaGUgTGFzdCBDaGFuY2UgU2Fsb29uJnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJG9iamVjdGl2ZSA9ICZxdW90O0RlY2lkZSBob3cgdG8gcmVzcG9uZCZxdW90OyZndDsmZ3Q7CgpTaWxhcyBsb3dlcmVkIHRoZSBwaWFubyBsaWQuCgpUaGUgdm9pY2Ugc3RvcHBlZC4KClRoZSByb29tIHNlZW1lZCB0byByZWxheCBhcm91bmQgaGltLiBGbG9vcmJvYXJkcyBzZXR0bGVkLiBCb3R0bGVzIGNlYXNlZCB0aGVpciBmYWludCB0cmVtYmxpbmcgYmVoaW5kIHRoZSBiYXIuCgpUaGVuIHRoZSBwaWFubyBiZWdhbiBwbGF5aW5nIGJlbmVhdGggdGhlIGNsb3NlZCBsaWQuCgpFdmVyeSBrZXkgbW92ZWQgYXQgb25jZS4KClRoZSByZXN1bHQgd2FzIGxlc3MgYSBzb25nIHRoYW4gYSBtdXNpY2FsIGFyZ3VtZW50IGNvbmR1Y3RlZCB3aXRoIGZ1cm5pdHVyZS4KClNpbGFzIGJhY2tlZCB0b3dhcmQgdGhlIGRvb3JzLgoKJnF1b3Q7SSBsaWtlZCBpdCBiZXR0ZXIgd2hlbiB5b3Ugb25seSBrbmV3IG9uZSBub3RlLiZxdW90OwoKJmx0OyZsdDtpZiBub3QgJHBpYW5vQ2xvc2VkJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRwaWFub0Nsb3NlZCA9IHRydWUmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGZlYXIgKz0gMSZndDsmZ3Q7CgogICAgU29tZXRoaW5nIHN0cnVjayB0aGUgdW5kZXJzaWRlIG9mIHRoZSBsaWQuCgogICAgT25jZS4KCiAgICBUd2ljZS4KCiAgICBPbiB0aGUgdGhpcmQgaW1wYWN0LCB0aGUgbGlkIHJvc2Ugc2xpZ2h0bHkgZGVzcGl0ZSBTaWxhcyBwcmVzc2luZyBvbmUgaGFuZCBhZ2FpbnN0IGl0LgoKICAgICZxdW90O1lvdSYjMzk7cmUgZ29pbmcgdG8gaGF2ZSB0byB3YWl0IHlvdXIgdHVybiwmcXVvdDsgaGUgc2FpZC4KCiAgICBUaGUgcGlhbm8gcmVzcG9uZGVkIHdpdGggYSBsb3csIG9mZmVuZGVkIGNob3JkLgoKICAgIEFwcGFyZW50bHksIHBhdGllbmNlIHdhcyBub3QgYW1vbmcgaXRzIG11c2ljYWwgdGFsZW50cy4KJmx0OyZsdDtlbHNlJmd0OyZndDsKICAgIFRoZSBwaWFubyBjb250aW51ZWQgcGxheWluZyBiZW5lYXRoIHRoZSBjbG9zZWQgbGlkLgoKICAgIFNpbGFzIGhhZCBhbHJlYWR5IG1hZGUgaGlzIGFuc3dlciBjbGVhci4KCiAgICBUaGUgaW5zdHJ1bWVudCBhcHBlYXJlZCBkZXRlcm1pbmVkIHRvIHN1Ym1pdCBhbiBhcHBlYWwuCiZsdDsmbHQ7L2lmJmd0OyZndDsKCltbUmV0dXJuIHRvIHRoZSBzYWxvb24gZW50cmFuY2UtJmd0O1NhbG9vbiAtIEVudHJhbmNlXV0KCltbTGVhdmUgZm9yIE1haW4gU3RyZWV0LSZndDtNYWluIFN0cmVldF1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSIyMSIgbmFtZT0iU2hlcmlmZiBPZmZpY2UgLSBMZWRnZXIiIHRhZ3M9ImFjdDEgdG93biBzaGVyaWZmIGNsdWUiIHBvc2l0aW9uPSI3MjUsMTYyNSIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7U2hlcmlmZiYjMzk7cyBPZmZpY2UmcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkb2JqZWN0aXZlID0gJnF1b3Q7UmVhZCB0aGUgbGVkZ2VyJnF1b3Q7Jmd0OyZndDsKClNpbGFzIHR1cm5lZCB0aGUgbGVkZ2VyIHRvd2FyZCBoaW1zZWxmLgoKTW9zdCBvZiBpdHMgcGFnZXMgY29udGFpbmVkIGFycmVzdCByZWNvcmRzIHdyaXR0ZW4gaW4gTWFyc2hhbCBBbGRlbiBHcmF2ZXMmIzM5O3MgaGFuZC4KClNpbGFzIHJlY29nbml6ZWQgaXQgaW1tZWRpYXRlbHkuCgpHcmF2ZXMgd3JvdGUgZXZlcnkgbGV0dGVyIGFzIGlmIGl0IHdlcmUgc3RhbmRpbmcgYXQgYXR0ZW50aW9uLgoKVGhlIGVudHJpZXMgZG9jdW1lbnRlZCBkaXN0dXJiYW5jZXMsIHRoZWZ0cywgYXNzYXVsdHMsIGFuZCBzaG9vdGluZ3MuIEVhY2ggcmVjb3JkIGluY2x1ZGVkIHRoZSBhY2N1c2VkLCB0aGUgb2ZmZW5zZSwgYW5kIHRoZSBzZW50ZW5jZS4KCk9uZSBjb2x1bW4gYXBwZWFyZWQgaW4gZXZlcnkgZW50cnk6CgpJTlRFTlQuCgpBbm90aGVyIGFwcGVhcmVkIGJlc2lkZSBpdDoKCk9VVENPTUUuCgpJbiBzb21lIGNhc2VzLCB0aGUgdHdvIGNvbHVtbnMgY29udHJhZGljdGVkIG9uZSBhbm90aGVyLgoKQSBmYXJtZXIgZmlyZWQgYSB3YXJuaW5nIHNob3QuIFRoZSBidWxsZXQga2lsbGVkIGEgYm95IGJlaGluZCBhIGZlbmNlLgoKQSBkZXB1dHkgc3RydWNrIGEgcHJpc29uZXIgdG8gcHJldmVudCBhbiBlc2NhcGUuIFRoZSBwcmlzb25lciBoYWQgb25seSBiZWVuIHJlYWNoaW5nIGZvciB3YXRlci4KCkEgZnJpZ2h0ZW5lZCBzaG9wa2VlcGVyIGtpbGxlZCBhbiB1bmFybWVkIG1hbiBiZWNhdXNlIHNvbWVvbmUgb3V0c2lkZSBzaG91dGVkIHRoYXQgdGhlIG1hbiBjYXJyaWVkIGEgZ3VuLgoKQXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSwgR3JhdmVzIGhhZCB3cml0dGVuOgoKVEhFIExBVyBXRUlHSFMgV0hBVCBBIE1BTiBET0VTLiAgCkdPRCBNQVkgQ09OQ0VSTiBISU1TRUxGIFdJVEggV0hZLgoKQmVuZWF0aCBpdCwgaW4gZGlmZmVyZW50IGhhbmR3cml0aW5nOgoKVEhFTiBHT0QgSEFTIFRIRSBIQVJERVIgSk9CLgoKU2lsYXMga25ldyB0aGUgc2Vjb25kIGhhbmR3cml0aW5nLgoKSXQgd2FzIGhpcyBvd24uCgpbW1R1cm4gdGhlIHBhZ2UtJmd0O1NoZXJpZmYgT2ZmaWNlIC0gV2FyZCBFbnRyeV1dCgpbW0V4YW1pbmUgdGhlIGphaWwgY2VsbHMtJmd0O1NoZXJpZmYgT2ZmaWNlIC0gQ2VsbHNdXQoKW1tSZXR1cm4gdG8gTWFpbiBTdHJlZXQtJmd0O01haW4gU3RyZWV0XV08L3R3LXBhc3NhZ2VkYXRhPjx0dy1wYXNzYWdlZGF0YSBwaWQ9IjIyIiBuYW1lPSJTaGVyaWZmIE9mZmljZSAtIENlbGxzIiB0YWdzPSJhY3QxIHRvd24gc2hlcmlmZiIgcG9zaXRpb249IjE0MDAsMTQ1MCIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7U2hlcmlmZiYjMzk7cyBPZmZpY2UgSmFpbCZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRvYmplY3RpdmUgPSAmcXVvdDtFeGFtaW5lIHRoZSBjZWxscyZxdW90OyZndDsmZ3Q7CgpUaGUgZmlyc3QgY2VsbCBzdG9vZCBlbXB0eS4KClRoZSBzZWNvbmQgY29udGFpbmVkIGEgd29vZGVuIGNoYWlyIGZhY2luZyB0aGUgd2FsbC4KClNpbGFzIGFwcHJvYWNoZWQgdGhlIGJhcnMuCgpOYW1lcyBoYWQgYmVlbiBjYXJ2ZWQgaW50byB0aGUgcGxhc3Rlci4gU29tZSB3ZXJlIGRlZXAgYW5kIGRlbGliZXJhdGUuIE90aGVycyBsb29rZWQgYXMgdGhvdWdoIHRoZXkgaGFkIGJlZW4gc2NyYXRjaGVkIHRoZXJlIHdpdGggZmluZ2VybmFpbHMuCgpKT05BUyBIQVJUIGFwcGVhcmVkIG5lYXIgdGhlIGZsb29yLgoKQmVuZWF0aCBpdDoKCklOTk9DRU5UIElTIE5PVCBUSEUgU0FNRSBBUyBVTkhBUk1FRC4KClNpbGFzIGNyb3VjaGVkLgoKJmx0OyZsdDtpZiBub3QgJGpvbmFzS25vd24mZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGpvbmFzS25vd24gPSB0cnVlJmd0OyZndDsKCiAgICBUaGUgbmFtZSBzdHJ1Y2sgc29tZXRoaW5nIGxvb3NlIGluIGhpcyBtZW1vcnkuCgogICAgSm9uYXMgSGFydC4KCiAgICBUd2VudHktdGhyZWUgeWVhcnMgb2xkLiBTdGFibGUgaGFuZC4gT2NjYXNpb25hbCBnYW1ibGVyLiBBY2N1c2VkIG9mIGFzc2lzdGluZyBtZW4gd2hvIHJvYmJlZCBhIHRlcnJpdG9yaWFsIHBheXJvbGwuCgogICAgU2lsYXMgaGFkIHRlc3RpZmllZCBhZ2FpbnN0IGhpbS4KCiAgICBKb25hcyBoYWQgaW5zaXN0ZWQgdGhhdCBoZSB3YXMgaW5ub2NlbnQuCgogICAgU2lsYXMgaGFkIGJlbGlldmVkIHRoZSBldmlkZW5jZS4KCiAgICBBdCBsZWFzdCwgdGhhdCB3YXMgd2hhdCBoZSBoYWQgdG9sZCBoaW1zZWxmIGFmdGVyd2FyZC4KJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKVGhlIGNoYWlyIGluc2lkZSB0aGUgY2VsbCB0dXJuZWQgdG93YXJkIGhpbS4KCk5vIG9uZSBzYXQgaW4gaXQuCgpbW0VudGVyIHRoZSBjZWxsLSZndDtTaGVyaWZmIE9mZmljZSAtIEVtcHR5IENoYWlyXV0KCltbUmV0dXJuIHRvIHRoZSBzaGVyaWZmJiMzOTtzIG9mZmljZSBlbnRyYW5jZS0mZ3Q7U2hlcmlmZiBPZmZpY2UgLSBFbnRyYW5jZV1dCgpbW1JldHVybiB0byBNYWluIFN0cmVldC0mZ3Q7TWFpbiBTdHJlZXRdXTwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMjMiIG5hbWU9IlNoZXJpZmYgT2ZmaWNlIC0gV2FyZCBFbnRyeSIgdGFncz0iYWN0MSB0b3duIHNoZXJpZmYgbWVtb3J5IiBwb3NpdGlvbj0iOTAwLDE3MDAiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O1NoZXJpZmYmIzM5O3MgT2ZmaWNlJnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJG9iamVjdGl2ZSA9ICZxdW90O1JlYWQgU2lsYXMgV2FyZCYjMzk7cyByZWNvcmQmcXVvdDsmZ3Q7Jmd0OwoKU2lsYXMgdHVybmVkIHRoZSBwYWdlLgoKSGlzIG93biBuYW1lIGFwcGVhcmVkIGF0IHRoZSB0b3AuCgpXQVJELCBTSUxBUyAgCkFQUE9JTlRFRCBERVBVVFk6IDE4NzEgIApBUFBPSU5URUQgTUFSU0hBTDogMTg3MyAgClJFU0lHTkVEOiAxODc2CgpUaGUgbmV4dCBsaW5lIGhhZCBiZWVuIHdyaXR0ZW4gaW4gcmVkIGluay4KCkNBVVNFIE9GIFJFU0lHTkFUSU9OOgoKVGhlIHNwYWNlIGJlc2lkZSBpdCByZW1haW5lZCBibGFuay4KClRoZSBwZW4gbGlmdGVkIGZyb20gdGhlIGlua3dlbGwuCgpTaWxhcyB3YXRjaGVkIGl0IG1vdmUgYWNyb3NzIHRoZSBwYWdlLgoKQ0FVU0UgT0YgUkVTSUdOQVRJT046IENPV0FSRElDRQoKSGlzIGphdyB0aWdodGVuZWQuCgombHQ7Jmx0O2lmICR3YXJkRW50cnlEZWNpc2lvbiBpcyAmcXVvdDtjcm9zc2VkJnF1b3Q7Jmd0OyZndDsKCkEgZGFyayBsaW5lIHJlbWFpbmVkIHRocm91Z2ggdGhlIGFjY3VzYXRpb24uCgpCZW5lYXRoIGl0LCB0aGUgbGVkZ2VyIGhhZCB3cml0dGVuIHRoZSB3b3JkIGFnYWluOgoKQ09XQVJESUNFCgpTaWxhcyByZWFjaGVkIHRvd2FyZCB0aGUgcGVuLgoKVGhlIGxlZGdlciBzbmFwcGVkIHNodXQgYmVmb3JlIGhlIGNvdWxkIHRvdWNoIGl0LgoKJnF1b3Q7RmluZSwmcXVvdDsgaGUgc2FpZC4gJnF1b3Q7S2VlcCB5b3VyIGVkaXRvcmlhbCBvcGluaW9uLiZxdW90OwoKVGhlIGNvdmVyIGNyZWFrZWQuCgpTb21laG93LCBpdCBzb3VuZGVkIHNhdGlzZmllZC4KCiZsdDsmbHQ7ZWxzZWlmICR3YXJkRW50cnlEZWNpc2lvbiBpcyAmcXVvdDt1bnRvdWNoZWQmcXVvdDsmZ3Q7Jmd0OwoKVGhlIGFjY3VzYXRpb24gcmVtYWluZWQgb24gdGhlIHBhZ2Ugd2l0aCB0aGUgcXVlc3Rpb24gbWFyayB0aGUgbGVkZ2VyIGhhZCBhZGRlZDoKCkNPV0FSRElDRT8KClRoZSBwZW4gcmVzdGVkIGJlc2lkZSB0aGUgd29yZC4KClNpbGFzIHN1c3BlY3RlZCB0aGUgbGVkZ2VyIHdhcyB3YWl0aW5nIGZvciBhIG1vcmUgY29tcGxldGUgYW5zd2VyLgoKJmx0OyZsdDtlbHNlJmd0OyZndDsKCiZsdDtkaXYgaWQ9JnF1b3Q7bGVkZ2VyLWNob2ljZXMmcXVvdDsmZ3Q7CgombHQ7Jmx0O2xpbmsgJnF1b3Q7Q3Jvc3Mgb3V0IHRoZSBhY2N1c2F0aW9uJnF1b3Q7Jmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICR3YXJkRW50cnlEZWNpc2lvbiA9ICZxdW90O2Nyb3NzZWQmcXVvdDsmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJHJpZ2lkaXR5ICs9IDEmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGZlYXIgKz0gMSZndDsmZ3Q7CgogICAgJmx0OyZsdDtyZXBsYWNlICZxdW90OyNsZWRnZXItY2hvaWNlcyZxdW90OyZndDsmZ3Q7Jmx0OyZsdDsvcmVwbGFjZSZndDsmZ3Q7CgogICAgJmx0OyZsdDtyZXBsYWNlICZxdW90OyNsZWRnZXItcmVzdWx0JnF1b3Q7Jmd0OyZndDsKU2lsYXMgZHJhZ2dlZCB0aGUgcGVuIHRocm91Z2ggdGhlIHdvcmQuCgpUaGUgcmVkIGluayByZWFwcGVhcmVkIGJlbmVhdGggdGhlIGxpbmUuCgpDT1dBUkRJQ0UKCkhlIGNyb3NzZWQgaXQgb3V0IGFnYWluLgoKSXQgcmV0dXJuZWQuCgomcXVvdDtQZXJzaXN0ZW50IGxpdHRsZSBib29rLiZxdW90OwoKVGhlIGxlZGdlciBzbmFwcGVkIHNodXQgb24gaGlzIGhhbmQuCgpTaWxhcyBwdWxsZWQgaGlzIGZpbmdlcnMgZnJlZS4KCkFjcm9zcyB0aGUgY292ZXIsIHJlZCBsZXR0ZXJzIGFwcGVhcmVkOgoKREVOSUFMIElTIE5PVCBBIENPUlJFQ1RJT04uCiAgICAmbHQ7Jmx0Oy9yZXBsYWNlJmd0OyZndDsKJmx0OyZsdDsvbGluayZndDsmZ3Q7CgombHQ7YnImZ3Q7Jmx0O2JyJmd0OwoKJmx0OyZsdDtsaW5rICZxdW90O0xlYXZlIHRoZSBhY2N1c2F0aW9uIHVudG91Y2hlZCZxdW90OyZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkd2FyZEVudHJ5RGVjaXNpb24gPSAmcXVvdDt1bnRvdWNoZWQmcXVvdDsmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJHRydXRoICs9IDEmZ3Q7Jmd0OwoKICAgICZsdDsmbHQ7cmVwbGFjZSAmcXVvdDsjbGVkZ2VyLWNob2ljZXMmcXVvdDsmZ3Q7Jmd0OyZsdDsmbHQ7L3JlcGxhY2UmZ3Q7Jmd0OwoKICAgICZsdDsmbHQ7cmVwbGFjZSAmcXVvdDsjbGVkZ2VyLXJlc3VsdCZxdW90OyZndDsmZ3Q7ClNpbGFzIGxlZnQgdGhlIHdvcmQgdW50b3VjaGVkLgoKVGhlIHBlbiBob3ZlcmVkIGFib3ZlIHRoZSBwYWdlLgoKQWZ0ZXIgc2V2ZXJhbCBzZWNvbmRzLCBpdCBhZGRlZCBhIHF1ZXN0aW9uIG1hcmsuCgpDT1dBUkRJQ0U/CgpTb21laG93LCB0aGF0IGZlbHQgbGVzcyBsaWtlIG1lcmN5IHRoYW4gYW4gaW52aXRhdGlvbi4KClRoZSBwZW4gdGFwcGVkIHR3aWNlIGJlc2lkZSB0aGUgd29yZC4KCiZxdW90O0kmIzM5O20gdGhpbmtpbmcsJnF1b3Q7IFNpbGFzIHNhaWQuCgpUaGUgcGVuIHRhcHBlZCBhZ2Fpbi4KCiZxdW90O0ltcGF0aWVudCBsaXR0bGUgYm9vay4mcXVvdDsKICAgICZsdDsmbHQ7L3JlcGxhY2UmZ3Q7Jmd0OwombHQ7Jmx0Oy9saW5rJmd0OyZndDsKCiZsdDsvZGl2Jmd0OwoKJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKJmx0O2RpdiBpZD0mcXVvdDtsZWRnZXItcmVzdWx0JnF1b3Q7Jmd0OyZsdDsvZGl2Jmd0OwoKJmx0O2JyJmd0OwoKW1tFeGFtaW5lIHRoZSBqYWlsIGNlbGxzLSZndDtTaGVyaWZmIE9mZmljZSAtIENlbGxzXV0KCltbUmV0dXJuIHRvIHRoZSBzaGVyaWZmJiMzOTtzIG9mZmljZSBlbnRyYW5jZS0mZ3Q7U2hlcmlmZiBPZmZpY2UgLSBFbnRyYW5jZV1dCgpbW1JldHVybiB0byBNYWluIFN0cmVldC0mZ3Q7TWFpbiBTdHJlZXRdXTwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMjQiIG5hbWU9IlNoZXJpZmYgT2ZmaWNlIC0gRW1wdHkgQ2hhaXIiIHRhZ3M9ImFjdDEgdG93biBzaGVyaWZmIG1lbW9yeSIgcG9zaXRpb249IjEyMjUsMTY3NSIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7U2hlcmlmZiYjMzk7cyBPZmZpY2UgSmFpbCBDZWxsJnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJG9iamVjdGl2ZSA9ICZxdW90O0NvbmZyb250IHRoZSBtZW1vcnkmcXVvdDsmZ3Q7Jmd0OwoKVGhlIGNlbGwgZG9vciBvcGVuZWQgd2l0aG91dCByZXNpc3RhbmNlLgoKU2lsYXMgc3RlcHBlZCBpbnNpZGUuCgpUaGUgZG9vciBjbG9zZWQgYmVoaW5kIGhpbS4KCkhlIGRpZCBub3QgdHVybiBhcm91bmQuIEEgbWFuIHdobyBoYWQgc3BlbnQgeWVhcnMgYXJvdW5kIGphaWwgY2VsbHMgZGV2ZWxvcGVkIGEgcHJvZmVzc2lvbmFsIGRpc2xpa2Ugb2YgaGVhcmluZyBvbmUgbG9jayBiZWhpbmQgaGltLgoKVGhlIGNoYWlyIHdhaXRlZCBpbiB0aGUgY2VudGVyIG9mIHRoZSBmbG9vci4KCkEgcm9wZSBsYXkgY29pbGVkIGFjcm9zcyBpdHMgc2VhdC4KCk9uZSBlbmQgcm9zZSBpbnRvIHRoZSBkYXJrbmVzcyBhYm92ZS4KClRoZSBvdGhlciBlbmQgZm9ybWVkIGEgbm9vc2UuCgpBIHZvaWNlIHNwb2tlIGZyb20gdGhlIGNvcnJpZG9yLgoKJnF1b3Q7RGlkIHlvdSBiZWxpZXZlIG1lPyZxdW90OwoKU2lsYXMgZ3JpcHBlZCB0aGUgYmFycy4KCkpvbmFzIHN0b29kIG9uIHRoZSBvcHBvc2l0ZSBzaWRlLgoKSGUgbG9va2VkIHlvdW5nZXIgdGhhbiBTaWxhcyByZW1lbWJlcmVkLiBUaGVyZSB3YXMgbm8gYW5nZXIgaW4gaGlzIGV4cHJlc3Npb24sIHdoaWNoIHNvbWVob3cgbWFkZSB0aGUgYWNjdXNhdGlvbiBtb3JlIGRpZmZpY3VsdCB0byBiZWFyLgoKJmx0OyZsdDtpZiAkZW1wdHlDaGFpckRlY2lzaW9uIGlzICZxdW90O2RvdWJ0cyZxdW90OyZndDsmZ3Q7CgogICAgVGhlIG5vb3NlIGxheSBsb29zZSBiZXNpZGUgdGhlIGNoYWlyLgoKICAgIEpvbmFzIHJlbWFpbmVkIGJleW9uZCB0aGUgYmFycy4KCiAgICAmcXVvdDtZb3UgYWRtaXR0ZWQgdGhhdCB5b3UgZG91YnRlZCB0aGUgZXZpZGVuY2UsJnF1b3Q7IGhlIHNhaWQuCgogICAgJnF1b3Q7SSBkaWQuJnF1b3Q7CgogICAgJnF1b3Q7WW91IGtlZXAgc2F5aW5nIGl0IGFzIHRob3VnaCBhZG1pdHRpbmcgaXQgbm93IGNoYW5nZXMgd2hhdCB5b3UgZGlkIHRoZW4uJnF1b3Q7CgogICAgU2lsYXMgbG9va2VkIHRvd2FyZCB0aGUgb3BlbiBjZWxsIGRvb3IuCgogICAgJnF1b3Q7Tm8sJnF1b3Q7IGhlIHNhaWQuICZxdW90O0J1dCBkZW55aW5nIGl0IHdvdWxkIGFkZCBhbm90aGVyIGxpZS4mcXVvdDsKCiAgICBKb25hcyBzdGVwcGVkIGF3YXkgZnJvbSB0aGUgYmFycy4KCiAgICAmcXVvdDtUaGVuIHN0b3AgYWRkaW5nIHRoZW0uJnF1b3Q7CgombHQ7Jmx0O2Vsc2VpZiAkZW1wdHlDaGFpckRlY2lzaW9uIGlzICZxdW90O2V2aWRlbmNlJnF1b3Q7Jmd0OyZndDsKCiAgICBUaGUgbm9vc2UgcmVtYWluZWQgZHJhd24gdGlnaHQgYWJvdmUgdGhlIGNoYWlyLgoKICAgIEpvbmFzIHN0b29kIGJleW9uZCB0aGUgYmFycyB3aXRoIG9uZSBoYW5kIHJlc3RpbmcgYWdhaW5zdCB0aGUgaXJvbi4KCiAgICAmcXVvdDtUaGUgZXZpZGVuY2Ugd2FzIGNsZWFyLCZxdW90OyBTaWxhcyBzYWlkIGFnYWluLgoKICAgIEpvbmFzIGxvb2tlZCB0b3dhcmQgdGhlIHJvcGUuCgogICAgJnF1b3Q7VGhlbiB5b3Ugc2hvdWxkIGhhdmUgbm8gcmVhc29uIHRvIGtlZXAgcmV0dXJuaW5nLiZxdW90OwoKICAgIFRoZSBjZWxsIGRvb3Igb3BlbmVkLgoKICAgIFNpbGFzIGRpZCBub3QgZmluZCB0aGUgaW52aXRhdGlvbiByZWFzc3VyaW5nLgoKJmx0OyZsdDtlbHNlJmd0OyZndDsKCiAgICAmbHQ7ZGl2IGlkPSZxdW90O2NlbGwtY2hvaWNlcyZxdW90OyZndDsKCiAgICAmbHQ7Jmx0O2xpbmsgJnF1b3Q7QWRtaXQgdGhhdCB5b3UgaGFkIGRvdWJ0cyZxdW90OyZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJGVtcHR5Q2hhaXJEZWNpc2lvbiA9ICZxdW90O2RvdWJ0cyZxdW90OyZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJHRydXRoICs9IDEmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRjb21wYXNzaW9uICs9IDEmZ3Q7Jmd0OwoKICAgICAgICAmbHQ7Jmx0O3JlcGxhY2UgJnF1b3Q7I2NlbGwtY2hvaWNlcyZxdW90OyZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDsvcmVwbGFjZSZndDsmZ3Q7CgogICAgICAgICZsdDsmbHQ7cmVwbGFjZSAmcXVvdDsjY2VsbC1yZXN1bHQmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICAgICAmcXVvdDtJIGhhZCBkb3VidHMsJnF1b3Q7IFNpbGFzIHNhaWQuCgogICAgICAgICAgICBKb25hcyBub2RkZWQgb25jZS4KCiAgICAgICAgICAgIFRoZSBub29zZSBsb29zZW5lZCBhbmQgZHJvcHBlZCBmcm9tIHRoZSBjaGFpci4KCiAgICAgICAgICAgICZxdW90O1lvdSBoYWQgZW5vdWdoIGRvdWJ0IHRvIHJlbWVtYmVyLCZxdW90OyBKb25hcyBzYWlkLiAmcXVvdDtOb3QgZW5vdWdoIHRvIHN0YXkuJnF1b3Q7CgogICAgICAgICAgICBTaWxhcyBsb29rZWQgYXQgdGhlIHJvcGUgb24gdGhlIGZsb29yLgoKICAgICAgICAgICAgJnF1b3Q7Tm8uJnF1b3Q7CgogICAgICAgICAgICAmcXVvdDtEbyB5b3Uga25vdyB3aGljaCBvZiB1cyBwYWlkIGZvciB0aGF0IGRvdWJ0PyZxdW90OwoKICAgICAgICAgICAgU2lsYXMgbWV0IGhpcyBleWVzLgoKICAgICAgICAgICAgJnF1b3Q7WW91IGRpZC4mcXVvdDsKCiAgICAgICAgICAgIFRoZSBjZWxsIGRvb3Igb3BlbmVkIGJlaGluZCBTaWxhcy4KICAgICAgICAmbHQ7Jmx0Oy9yZXBsYWNlJmd0OyZndDsKICAgICZsdDsmbHQ7L2xpbmsmZ3Q7Jmd0OwoKICAgICZsdDticiZndDsmbHQ7YnImZ3Q7CgogICAgJmx0OyZsdDtsaW5rICZxdW90O0luc2lzdCB0aGF0IHRoZSBldmlkZW5jZSB3YXMgY2xlYXImcXVvdDsmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRlbXB0eUNoYWlyRGVjaXNpb24gPSAmcXVvdDtldmlkZW5jZSZxdW90OyZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJHJpZ2lkaXR5ICs9IDEmZ3Q7Jmd0OwoKICAgICAgICAmbHQ7Jmx0O3JlcGxhY2UgJnF1b3Q7I2NlbGwtY2hvaWNlcyZxdW90OyZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDsvcmVwbGFjZSZndDsmZ3Q7CgogICAgICAgICZsdDsmbHQ7cmVwbGFjZSAmcXVvdDsjY2VsbC1yZXN1bHQmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICAgICAmcXVvdDtUaGUgZXZpZGVuY2Ugd2FzIGNsZWFyLiZxdW90OwoKICAgICAgICAgICAgSm9uYXMgbG9va2VkIHRvd2FyZCB0aGUgY2hhaXIuCgogICAgICAgICAgICAmcXVvdDtUaGVuIHdoeSBhcmUgeW91IHN0aWxsIHRyeWluZyB0aGUgY2FzZT8mcXVvdDsKCiAgICAgICAgICAgIFRoZSBub29zZSB0aWdodGVuZWQgaXRzZWxmLgoKICAgICAgICAgICAgVGhlIHJvcGUgY3JlYWtlZCBhYm92ZSB0aGVtLgoKICAgICAgICAgICAgJnF1b3Q7QmVjYXVzZSB0aGlzIHRvd24gd29uJiMzOTt0IGxldCBpdCByZXN0LCZxdW90OyBTaWxhcyBzYWlkLgoKICAgICAgICAgICAgJnF1b3Q7VGhlIHRvd24gZGlkIG5vdCBicmluZyB0aGUgY2FzZSBoZXJlLiZxdW90OwoKICAgICAgICAgICAgSm9uYXMgbG9va2VkIGRpcmVjdGx5IGF0IGhpbS4KCiAgICAgICAgICAgICZxdW90O1lvdSBkaWQuJnF1b3Q7CgogICAgICAgICAgICBUaGUgY2VsbCBkb29yIG9wZW5lZCBiZWhpbmQgU2lsYXMuCiAgICAgICAgJmx0OyZsdDsvcmVwbGFjZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0Oy9saW5rJmd0OyZndDsKCiAgICAmbHQ7L2RpdiZndDsKCiZsdDsmbHQ7L2lmJmd0OyZndDsKCiZsdDtkaXYgaWQ9JnF1b3Q7Y2VsbC1yZXN1bHQmcXVvdDsmZ3Q7Jmx0Oy9kaXYmZ3Q7CgombHQ7YnImZ3Q7CgpbW0xlYXZlIHRoZSBjZWxsLSZndDtTaGVyaWZmIE9mZmljZSAtIEVudHJhbmNlXV0KCltbUmV0dXJuIHRvIE1haW4gU3RyZWV0LSZndDtNYWluIFN0cmVldF1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSIyNSIgbmFtZT0iU3RvcnlNZW51IiB0YWdzPSIiIHBvc2l0aW9uPSIzMjUsMjc1IiBzaXplPSIxMDAsMTAwIj5bW0Fib3V0IHRoZSBHYW1lLSZndDtBYm91dCBEdXN0IG9mIEVjaG9lc11dCltbVmVyc2lvbiBIaXN0b3J5LSZndDtWZXJzaW9uIEhpc3RvcnldXTwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMjYiIG5hbWU9IkFib3V0IER1c3Qgb2YgRWNob2VzIiB0YWdzPSJzeXN0ZW0iIHBvc2l0aW9uPSIyNjIuNSw0MDAiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O0Fib3V0IHRoZSBHYW1lJnF1b3Q7Jmd0OyZndDsKCiZsdDtkaXYgY2xhc3M9JnF1b3Q7c3lzdGVtLXBhZ2UmcXVvdDsmZ3Q7CgombHQ7aDImZ3Q7RHVzdCBvZiBFY2hvZXMmbHQ7L2gyJmd0OwoKJmx0O3AmZ3Q7Jmx0O2VtJmd0O0R1c3Qgb2YgRWNob2VzJmx0Oy9lbSZndDsgaXMgYW4gaW50ZXJhY3RpdmUgc3VwZXJuYXR1cmFsIFdlc3Rlcm4gY3JlYXRlZCB3aXRoIFR3aW5lIGFuZCB0aGUgU3VnYXJDdWJlIHN0b3J5IGZvcm1hdC4mbHQ7L3AmZ3Q7CgombHQ7cCZndDtBcml6b25hIFRlcnJpdG9yeSwgMTg4Ny4gU2lsYXMgV2FyZCwgYSBmb3JtZXIgbGF3bWFuIHR1cm5lZCBndW4tZm9yLWhpcmUsIGJlY29tZXMgbG9zdCBpbiBhIHZpb2xlbnQgZGVzZXJ0IHN0b3JtIGFuZCBkaXNjb3ZlcnMgUGVyZGl0aW9uIEd1bGNoLCBhbiBhYmFuZG9uZWQgc2V0dGxlbWVudCB0aGF0IHNob3VsZCBub3QgZXhpc3QuJmx0Oy9wJmd0OwoKJmx0O3AmZ3Q7VGhlIHRvd24ga25vd3MgaGlzIG5hbWUuJmx0Oy9wJmd0OwoKJmx0O3AmZ3Q7QXMgU2lsYXMgc2VhcmNoZXMgZm9yIHNoZWx0ZXIgYW5kIGEgcGF0aCBiYWNrIHRvIHRoZSBsaXZpbmcgd29ybGQsIGhlIG11c3QgY29uZnJvbnQgdGhlIHBlb3BsZSBoZSBmYWlsZWQsIHRoZSBtZW1vcmllcyBoZSBidXJpZWQsIGFuZCB0aGUgdHJ1dGggYmVoaW5kIHRoZSBkZWNpc2lvbiB0aGF0IGNhdXNlZCBoaW0gdG8gYWJhbmRvbiBoaXMgYmFkZ2UuJmx0Oy9wJmd0OwoKJmx0O2hyJmd0OwoKJmx0O3AmZ3Q7Jmx0O3N0cm9uZyZndDtDcmVhdGVkIGFuZCB3cml0dGVuIGJ5OiZsdDsvc3Ryb25nJmd0OyZsdDticiZndDsKVG9ueSBNb3JlaXJhJmx0Oy9wJmd0OwoKJmx0O3AmZ3Q7Jmx0O3N0cm9uZyZndDtDdXJyZW50IHZlcnNpb246Jmx0Oy9zdHJvbmcmZ3Q7Jmx0O2JyJmd0OwokZ2FtZVZlcnNpb24mbHQ7L3AmZ3Q7CgombHQ7cCZndDsmbHQ7c3Ryb25nJmd0O0J1aWxkIGRhdGU6Jmx0Oy9zdHJvbmcmZ3Q7Jmx0O2JyJmd0OwokYnVpbGREYXRlJmx0Oy9wJmd0OwoKJmx0O3AmZ3Q7Jmx0O3N0cm9uZyZndDtTdG9yeSBlbmdpbmU6Jmx0Oy9zdHJvbmcmZ3Q7Jmx0O2JyJmd0OwpUd2luZSB3aXRoIFN1Z2FyQ3ViZSZsdDsvcCZndDsKCiZsdDtociZndDsKCiZsdDtwIGNsYXNzPSZxdW90O2NvcHlyaWdodC1ub3RpY2UmcXVvdDsmZ3Q7CkNvcHlyaWdodCDCqSAkY29weXJpZ2h0WWVhciBUb255IE1vcmVpcmEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiZsdDsvcCZndDsKCiZsdDtwIGNsYXNzPSZxdW90O2NvcHlyaWdodC1kZXRhaWxzJnF1b3Q7Jmd0OwpUaGlzIGludGVyYWN0aXZlIHN0b3J5LCBpbmNsdWRpbmcgaXRzIG9yaWdpbmFsIG5hcnJhdGl2ZSwgY2hhcmFjdGVycywgc2V0dGluZywgZGlhbG9ndWUsIGdhbWUgc3RydWN0dXJlLCBhbmQgYXNzb2NpYXRlZCBzb3VyY2UgbWF0ZXJpYWwsIG1heSBub3QgYmUgcmVwcm9kdWNlZCwgZGlzdHJpYnV0ZWQsIG1vZGlmaWVkLCByZXB1Ymxpc2hlZCwgb3IgaW5jb3Jwb3JhdGVkIGludG8gYW5vdGhlciBwcm9qZWN0IHdpdGhvdXQgdGhlIGF1dGhvciYjMzk7cyB3cml0dGVuIHBlcm1pc3Npb24uCiZsdDsvcCZndDsKCiZsdDtwIGNsYXNzPSZxdW90O2NvcHlyaWdodC1kZXRhaWxzJnF1b3Q7Jmd0OwpUd2luZSBhbmQgU3VnYXJDdWJlIGFyZSBzZXBhcmF0ZSBzb2Z0d2FyZSBwcm9qZWN0cyBhbmQgcmVtYWluIHN1YmplY3QgdG8gdGhlaXIgcmVzcGVjdGl2ZSBsaWNlbnNlcy4KJmx0Oy9wJmd0OwoKJmx0Oy9kaXYmZ3Q7CgombHQ7Jmx0O2JhY2sgJnF1b3Q7UmV0dXJuIHRvIHRoZSBnYW1lJnF1b3Q7Jmd0OyZndDs8L3R3LXBhc3NhZ2VkYXRhPjx0dy1wYXNzYWdlZGF0YSBwaWQ9IjI3IiBuYW1lPSJWZXJzaW9uIEhpc3RvcnkiIHRhZ3M9InN5c3RlbSIgcG9zaXRpb249IjM4Ny41LDQwMCIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7VmVyc2lvbiBIaXN0b3J5JnF1b3Q7Jmd0OyZndDsKCiZsdDtkaXYgY2xhc3M9JnF1b3Q7c3lzdGVtLXBhZ2UmcXVvdDsmZ3Q7CgombHQ7aDImZ3Q7VmVyc2lvbiBIaXN0b3J5Jmx0Oy9oMiZndDsKCiZsdDtkaXYgY2xhc3M9JnF1b3Q7dmVyc2lvbi1lbnRyeSZxdW90OyZndDsKCiZsdDtoMyZndDtWZXJzaW9uIDAuMS4wJmx0Oy9oMyZndDsKCiZsdDtwIGNsYXNzPSZxdW90O3ZlcnNpb24tZGF0ZSZxdW90OyZndDtTZXB0ZW1iZXIgMjAsIDIwMjYmbHQ7L3AmZ3Q7CgombHQ7dWwmZ3Q7CiZsdDtsaSZndDtDcmVhdGVkIHRoZSBpbml0aWFsIFN1Z2FyQ3ViZSBwcm9qZWN0IHN0cnVjdHVyZS4mbHQ7L2xpJmd0OwombHQ7bGkmZ3Q7QWRkZWQgU2lsYXMgV2FyZCBhbmQgdGhlIG9wZW5pbmcgQXJpem9uYSBkZXNlcnQgc3Rvcm0gc2VxdWVuY2UuJmx0Oy9saSZndDsKJmx0O2xpJmd0O0FkZGVkIHRocmVlIG9wZW5pbmcgYXBwcm9hY2hlczogZm9sbG93aW5nIHRoZSBsaWdodHMsIGV4YW1pbmluZyB0aGUgdHJhY2tzLCBhbmQgdHJ1c3RpbmcgdGhlIGhvcnNlLiZsdDsvbGkmZ3Q7CiZsdDtsaSZndDtBZGRlZCB0aGUgZmlyc3QgaGlkZGVuIGNoYXJhY3Rlci1hbGlnbm1lbnQgdmFyaWFibGVzLiZsdDsvbGkmZ3Q7CiZsdDtsaSZndDtBZGRlZCBQZXJkaXRpb24gR3VsY2ggYW5kIHRoZSBNYWluIFN0cmVldCBleHBsb3JhdGlvbiBodWIuJmx0Oy9saSZndDsKJmx0O2xpJmd0O0FkZGVkIHRoZSBpbml0aWFsIHNpZGViYXIgc3RhdHVzIGRpc3BsYXkuJmx0Oy9saSZndDsKJmx0O2xpJmd0O0FkZGVkIGhlYWx0aCwgYW1tdW5pdGlvbiwgY2x1ZXMsIGFuZCByZW1lbWJlcmVkLW5hbWUgdHJhY2tpbmcuJmx0Oy9saSZndDsKJmx0O2xpJmd0O0FkZGVkIEdpdCBzb3VyY2UtY29udHJvbCBzdXBwb3J0IGZvciBwcm9qZWN0IGRldmVsb3BtZW50LiZsdDsvbGkmZ3Q7CiZsdDtsaSZndDtBZGRlZCBjb3B5cmlnaHQsIHByb2plY3QgaW5mb3JtYXRpb24sIGFuZCB2ZXJzaW9uLWhpc3RvcnkgcGFzc2FnZXMuJmx0Oy9saSZndDsKJmx0Oy91bCZndDsKCiZsdDsvZGl2Jmd0OwoKJmx0O2hyJmd0OwoKJmx0O3AmZ3Q7Jmx0O3N0cm9uZyZndDtDdXJyZW50IGJ1aWxkOiZsdDsvc3Ryb25nJmd0OyAkZ2FtZVZlcnNpb24mbHQ7L3AmZ3Q7CgombHQ7cCBjbGFzcz0mcXVvdDtjb3B5cmlnaHQtbm90aWNlJnF1b3Q7Jmd0OwpDb3B5cmlnaHQgwqkgJGNvcHlyaWdodFllYXIgVG9ueSBNb3JlaXJhLiBBbGwgcmlnaHRzIHJlc2VydmVkLgombHQ7L3AmZ3Q7CgombHQ7L2RpdiZndDsKCiZsdDsmbHQ7YmFjayAmcXVvdDtSZXR1cm4gdG8gdGhlIGdhbWUmcXVvdDsmZ3Q7Jmd0OzwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMjgiIG5hbWU9IlN0b3J5QXV0aG9yIiB0YWdzPSIiIHBvc2l0aW9uPSIxNDAwLDcyNSIgc2l6ZT0iMTAwLDEwMCI+VG9ueSBNb3JlaXJhPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSIyOSIgbmFtZT0iQ2h1cmNoIC0gQWx0YXIiIHRhZ3M9ImFjdDEgdG93biBjaHVyY2ggbWVtb3J5IiBwb3NpdGlvbj0iMTUxMi41LDEzNzUiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O0NodXJjaCBvZiBTYWludCBNZXJjeSZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRvYmplY3RpdmUgPSAmcXVvdDtGb2xsb3cgdGhlIGNoaWxkJiMzOTtzIGZvb3RwcmludHMmcXVvdDsmZ3Q7Jmd0OwoKU2lsYXMgZm9sbG93ZWQgdGhlIGZvb3RwcmludHMgZG93biB0aGUgY2VudGVyIGFpc2xlLgoKVGhleSB3ZXJlIHRvbyBzbWFsbCB0byBiZWxvbmcgdG8gYW55b25lIG9sZGVyIHRoYW4gZWlnaHQgb3IgbmluZS4gRWFjaCBiYXJlIGhlZWwgYW5kIHRvZSByZW1haW5lZCBwZXJmZWN0bHkgZGVmaW5lZCBpbiB0aGUgZHVzdC4KClRoZSBwcmludHMgc3RvcHBlZCBiZWZvcmUgdGhlIGFsdGFyLgoKU2lsYXMgZXhhbWluZWQgdGhlIGZsb29yLgoKTm8gcmV0dXJuIHRyYWlsLgoKTm8gaGlkZGVuIGRvb3IuCgpObyBjaGlsZCBjcm91Y2hpbmcgYmVuZWF0aCBhIHBldyBhbmQgZW5qb3lpbmcgYW4gdW51c3VhbGx5IGVsYWJvcmF0ZSBqb2tlLgoKT24gdGhlIGFsdGFyIHJlc3RlZCB0aGUgZm9sZGVkIHdoaXRlIHZlaWwgYW5kIGEgbmFycm93IHN0cmlwIG9mIHJlZCBjbG90aC4gVGhlIGNsb3RoIHJlc2VtYmxlZCB0aGUgd2FybmluZyBtYXJrZXJzIEdyYXZlcyBoYWQgb25jZSB0YXVnaHQgaGlzIGRlcHV0aWVzIHRvIHVzZS4KCiZsdDsmbHQ7aWYgJHRydXN0ZWRIb3JzZSZndDsmZ3Q7CiAgICBJdCB3YXMgdGhlIHNhbWUgbWF0ZXJpYWwgU2lsYXMgaGFkIGZvdW5kIGhhbmdpbmcgZnJvbSB0aGUgcm9wZSBvdXRzaWRlIHRvd24uCiZsdDsmbHQ7L2lmJmd0OyZndDsKCkEgbmFtZSBoYWQgYmVlbiBlbWJyb2lkZXJlZCBhbG9uZyB0aGUgdmVpbCYjMzk7cyBlZGdlOgoKRUxJWkEgSEFSVAoKU2lsYXMga25ldyB0aGUgc3VybmFtZS4KCkpvbmFzIGhhZCBzcG9rZW4gb2YgYSB5b3VuZ2VyIHNpc3RlciBkdXJpbmcgaGlzIGNvbmZpbmVtZW50LiBTaWxhcyByZW1lbWJlcmVkIHRoZSBkZXRhaWxzIG9ubHkgaW4gcGllY2VzLiBBIGdpcmwgd2l0aCBhIGZldmVyLiBBIGZhbWlseSB3aXRob3V0IG1vbmV5IGZvciBtZWRpY2luZS4gSm9uYXMgaW5zaXN0aW5nIHRoYXQgZXZlcnl0aGluZyBoZSBoYWQgZG9uZSBoYWQgYmVlbiBmb3IgaGVyLgoKVGhlIGNhbmRsZSBiZXNpZGUgdGhlIHZlaWwgYnVybmVkIHdpdGhvdXQgc2hvcnRlbmluZy4KCiZsdDsmbHQ7aWYgbm90ICRhbHRhckV4YW1pbmVkJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRhbHRhckV4YW1pbmVkID0gdHJ1ZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkY2hpbGROYW1lS25vd24gPSB0cnVlJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRuYW1lc1JlbWVtYmVyZWQgKz0gMSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkY29tcGFzc2lvbiArPSAxJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICR0cnV0aCArPSAxJmd0OyZndDsKCiAgICBBcyBTaWxhcyByZWFkIHRoZSBuYW1lLCB0aGUgc21hbGwgZm9vdHByaW50cyBhcHBlYXJlZCBhZ2Fpbi4KCiAgICBUaGlzIHRpbWUgdGhleSBiZWdhbiBhdCB0aGUgYWx0YXIgYW5kIGNvbnRpbnVlZCB0b3dhcmQgaGltLgoKICAgIFRoZXkgc3RvcHBlZCBiZXR3ZWVuIGhpcyBib290cy4KJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKQSBjaGlsZCYjMzk7cyB2b2ljZSBzcG9rZSBmcm9tIHNvbWV3aGVyZSBuZWFyIGhpcyBzaG91bGRlci4KCiZxdW90O1lvdSByZW1lbWJlcmVkIEpvbmFzIGZpcnN0LiZxdW90OwoKU2lsYXMgZGlkIG5vdCBtb3ZlLgoKJnF1b3Q7TW9zdCBwZW9wbGUgZGlkLCZxdW90OyB0aGUgdm9pY2UgYWRkZWQuCgpbW1RvdWNoIHRoZSB3aGl0ZSB2ZWlsLSZndDtDaHVyY2ggLSBUb3VjaCB0aGUgVmVpbF1dCgpbW1NwZWFrIEVsaXphJiMzOTtzIG5hbWUtJmd0O0NodXJjaCAtIFNwZWFrIEVsaXphXV0KCltbQXBwcm9hY2ggdGhlIGNvbmZlc3Npb25hbC0mZ3Q7Q2h1cmNoIC0gQ29uZmVzc2lvbmFsXV0KCltbUmV0dXJuIHRvIHRoZSBjaHVyY2ggZW50cmFuY2UtJmd0O0NodXJjaCAtIEVudHJhbmNlXV0KCltbUmV0dXJuIHRvIE1haW4gU3RyZWV0LSZndDtNYWluIFN0cmVldF1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSIzMCIgbmFtZT0iQ2h1cmNoIC0gQ29uZmVzc2lvbmFsIiB0YWdzPSJhY3QxIHRvd24gY2h1cmNoIGNob2ljZSIgcG9zaXRpb249IjE3NzUsMTEwMCIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7Q2h1cmNoIG9mIFNhaW50IE1lcmN5JnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJG9iamVjdGl2ZSA9ICZxdW90O0VudGVyIHRoZSBjb25mZXNzaW9uYWwmcXVvdDsmZ3Q7Jmd0OwoKU2lsYXMgYXBwcm9hY2hlZCB0aGUgY29uZmVzc2lvbmFsLgoKVGhlIHdvb2RlbiBib290aCBsZWFuZWQgc2xpZ2h0bHkgdG8gb25lIHNpZGUuIEl0cyBjdXJ0YWluIHdhcyBmYWRlZCBwdXJwbGUsIHRob3VnaCB0aW1lIGhhZCByZWR1Y2VkIG1vc3Qgb2YgdGhlIGNvbG9yIHRvIGdyYXkuCgpIZSBwdWxsZWQgdGhlIGN1cnRhaW4gYXNpZGUuCgpUaGUgY29tcGFydG1lbnQgd2FzIGVtcHR5LgoKU2lsYXMgc2F0LgoKVGhlIGJlbmNoIGNyZWFrZWQgYmVuZWF0aCBoaW0uIEEgbmFycm93IHNjcmVlbiBzZXBhcmF0ZWQgaGlzIGNvbXBhcnRtZW50IGZyb20gdGhlIHByaWVzdCYjMzk7cyBzaWRlLgoKU29tZW9uZSBicmVhdGhlZCBiZWhpbmQgaXQuCgpTaWxhcyBsZWFuZWQgY2xvc2VyLgoKJnF1b3Q7QXJlIHlvdSBhIHByaWVzdD8mcXVvdDsKCiZxdW90O05vLiZxdW90OwoKVGhlIHZvaWNlIGJlbG9uZ2VkIHRvIGEgd29tYW4uCgomcXVvdDtUaGF0IHNpbXBsaWZpZXMgbWF0dGVycy4mcXVvdDsKCiZxdW90O0RvZXMgaXQ/JnF1b3Q7CgomcXVvdDtOby4gQnV0IEkgaG9wZWQgc2F5aW5nIHNvIG1pZ2h0IGhlbHAuJnF1b3Q7CgpBIGZhaW50IG91dGxpbmUgYXBwZWFyZWQgYmVoaW5kIHRoZSBzY3JlZW4uIFNpbGFzIGNvdWxkIG1ha2Ugb3V0IHRoZSBlZGdlIG9mIGEgd2hpdGUgdmVpbCBhbmQgdHdvIGhhbmRzIGZvbGRlZCB0b2dldGhlci4KClRoZSB3b21hbiBzcG9rZS4KCiZxdW90O1RlbGwgbWUgd2h5IHlvdSBsZWZ0IGJlZm9yZSBKb25hcyBIYXJ0JiMzOTtzIHZlcmRpY3QuJnF1b3Q7CgpTaWxhcyByZXN0ZWQgaGlzIGZvcmVhcm1zIGFnYWluc3QgaGlzIGtuZWVzLgoKSGUgaGFkIGNhcnJpZWQgc2V2ZXJhbCBhbnN3ZXJzIGZvciBlbGV2ZW4geWVhcnMuCgpOb25lIG9mIHRoZW0gaGFkIGltcHJvdmVkIHdpdGggYWdlLgoKJmx0OyZsdDtpZiBub3QgJGNvbmZlc3Npb25NYWRlIGFuZCBub3QgJGNvbmZlc3Npb25SZWZ1c2VkJmd0OyZndDsKCiAgICAmbHQ7Jmx0O2xpbmsgJnF1b3Q7QWRtaXQgdGhhdCB5b3Ugd2VyZSBhZnJhaWQmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRjb25mZXNzaW9uTWFkZSA9IHRydWUmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICR0cnV0aCArPSAyJmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkY29tcGFzc2lvbiArPSAxJmd0OyZndDsKCiAgICAgICAgJmx0OyZsdDtyZXBsYWNlICZxdW90OyNjb25mZXNzaW9uLXJlc3VsdCZxdW90OyZndDsmZ3Q7CiAgICAgICAgICAgICZxdW90O0kgd2FzIGFmcmFpZCwmcXVvdDsgU2lsYXMgc2FpZC4KCiAgICAgICAgICAgIFRoZSB3b3JkcyBzb3VuZGVkIHNtYWxsZXIgYWZ0ZXIgYmVpbmcgc3Bva2VuIGFsb3VkLgoKICAgICAgICAgICAgJnF1b3Q7T2YgR3JhdmVzPyZxdW90OwoKICAgICAgICAgICAgJnF1b3Q7T2Ygd2hhdCB0aGUgY291cnQgd291bGQgZGVjaWRlLiBPZiB3aGF0IEkgaGFkIGhlbHBlZCBwdXQgaW4gbW90aW9uLiBPZiBkaXNjb3ZlcmluZyB0aGF0IEkgaGFkIGJlZW4gd3JvbmcgYWZ0ZXIgaXQgd2FzIHRvbyBsYXRlIHRvIGNvcnJlY3QgYW55dGhpbmcuJnF1b3Q7CgogICAgICAgICAgICBUaGUgd29tYW4gcmVtYWluZWQgc2lsZW50LgoKICAgICAgICAgICAgJnF1b3Q7SSB0b2xkIG15c2VsZiB0aGUgdmVyZGljdCBubyBsb25nZXIgZGVwZW5kZWQgb24gbWUsJnF1b3Q7IFNpbGFzIGNvbnRpbnVlZC4gJnF1b3Q7VGhhdCB3YXMgZWFzaWVyIHRoYW4gYWRtaXR0aW5nIEkgY291bGRuJiMzOTt0IGJlYXIgdG8gaGVhciBpdC4mcXVvdDsKCiAgICAgICAgICAgIEEgaGFuZCBwcmVzc2VkIGFnYWluc3QgdGhlIHNjcmVlbiBmcm9tIHRoZSBvdGhlciBzaWRlLgoKICAgICAgICAgICAgJnF1b3Q7RmVhciBleHBsYWlucyB0aGUgZG9vciwmcXVvdDsgdGhlIHdvbWFuIHNhaWQuICZxdW90O0l0IGRvZXMgbm90IGV4Y3VzZSB3YWxraW5nIHRocm91Z2ggaXQuJnF1b3Q7CgogICAgICAgICAgICAmcXVvdDtJIGtub3cuJnF1b3Q7CgogICAgICAgICAgICBUaGUgY2h1cmNoIGJlbGwgcmFuZyBvbmNlLgoKICAgICAgICAgICAgRm9yIHRoZSBmaXJzdCB0aW1lIHNpbmNlIGVudGVyaW5nIFBlcmRpdGlvbiBHdWxjaCwgdGhlIHNvdW5kIGNhbWUgZnJvbSBhYm92ZS4KICAgICAgICAmbHQ7Jmx0Oy9yZXBsYWNlJmd0OyZndDsKICAgICZsdDsmbHQ7L2xpbmsmZ3Q7Jmd0OwoKICAgICZsdDticiZndDsmbHQ7YnImZ3Q7CgogICAgJmx0OyZsdDtsaW5rICZxdW90O0luc2lzdCB0aGF0IHN0YXlpbmcgd291bGQgaGF2ZSBjaGFuZ2VkIG5vdGhpbmcmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRjb25mZXNzaW9uUmVmdXNlZCA9IHRydWUmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRyaWdpZGl0eSArPSAyJmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkZmVhciArPSAxJmd0OyZndDsKCiAgICAgICAgJmx0OyZsdDtyZXBsYWNlICZxdW90OyNjb25mZXNzaW9uLXJlc3VsdCZxdW90OyZndDsmZ3Q7CiAgICAgICAgICAgICZxdW90O1N0YXlpbmcgd291bGQgaGF2ZSBjaGFuZ2VkIG5vdGhpbmcuJnF1b3Q7CgogICAgICAgICAgICBUaGUgYnJlYXRoaW5nIGJlaGluZCB0aGUgc2NyZWVuIHN0b3BwZWQuCgogICAgICAgICAgICAmcXVvdDtZb3UgaGF2ZSByZXBlYXRlZCB0aGF0IHNlbnRlbmNlIGZvciBlbGV2ZW4geWVhcnMsJnF1b3Q7IHRoZSB3b21hbiBzYWlkLgoKICAgICAgICAgICAgJnF1b3Q7QmVjYXVzZSBpdCYjMzk7cyB0cnVlLiZxdW90OwoKICAgICAgICAgICAgJnF1b3Q7Tm8uIEJlY2F1c2UgaXQgaXMgZmFtaWxpYXIuJnF1b3Q7CgogICAgICAgICAgICBBIHNoYXJwIGNyYWNrIHNwbGl0IHRoZSBzY3JlZW4gZnJvbSB0b3AgdG8gYm90dG9tLgoKICAgICAgICAgICAgVGhyb3VnaCB0aGUgb3BlbmluZywgU2lsYXMgc2F3IHRoZSBvdGhlciBjb21wYXJ0bWVudC4KCiAgICAgICAgICAgIEl0IHdhcyBlbXB0eS4KCiAgICAgICAgICAgIFdyaXR0ZW4gYWNyb3NzIHRoZSByZWFyIHdhbGwgd2VyZSB0aGUgd29yZHM6CgogICAgICAgICAgICBZT1UgTkVWRVIgV0FJVEVEIFRPIEZJTkQgT1VULgogICAgICAgICZsdDsmbHQ7L3JlcGxhY2UmZ3Q7Jmd0OwogICAgJmx0OyZsdDsvbGluayZndDsmZ3Q7CgombHQ7Jmx0O2Vsc2VpZiAkY29uZmVzc2lvbk1hZGUmZ3Q7Jmd0OwoKICAgIFRoZSBjb25mZXNzaW9uYWwgcmVtYWluZWQgZW1wdHksIGJ1dCBTaWxhcyBjb3VsZCBzdGlsbCBmZWVsIHRoZSB3ZWlnaHQgb2YgdGhlIGFkbWlzc2lvbiBoZSBoYWQgbWFkZSB0aGVyZS4KCiAgICBTcGVha2luZyB0aGUgdHJ1dGggaGFkIG5vdCBtYWRlIGl0IGxpZ2h0ZXIuCgogICAgSXQgaGFkIG9ubHkgbWFkZSB0aGUgd2VpZ2h0IGVhc2llciB0byBpZGVudGlmeS4KCiZsdDsmbHQ7ZWxzZSZndDsmZ3Q7CgogICAgVGhlIHNwbGl0IGluIHRoZSBzY3JlZW4gcmVtYWluZWQuCgogICAgU2lsYXMgY291bGQgbm8gbG9uZ2VyIHNlZSB0aGUgd3JpdGluZyBvbiB0aGUgb3Bwb3NpdGUgd2FsbC4KCiAgICBIZSBkaWQgbm90IG5lZWQgdG8uCgombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgombHQ7ZGl2IGlkPSZxdW90O2NvbmZlc3Npb24tcmVzdWx0JnF1b3Q7Jmd0OyZsdDsvZGl2Jmd0OwoKJmx0O2JyJmd0OwoKW1tGb2xsb3cgdGhlIGNoaWxkJiMzOTtzIGZvb3RwcmludHMtJmd0O0NodXJjaCAtIEFsdGFyXV0KCltbUmV0dXJuIHRvIHRoZSBjaHVyY2ggZW50cmFuY2UtJmd0O0NodXJjaCAtIEVudHJhbmNlXV0KCltbUmV0dXJuIHRvIE1haW4gU3RyZWV0LSZndDtNYWluIFN0cmVldF1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSIzMSIgbmFtZT0iU3R1ZGlvIC0gU2lsYXMgUG9ydHJhaXQiIHRhZ3M9ImFjdDEgdG93biBzdHVkaW8gbWVtb3J5IiBwb3NpdGlvbj0iMTA1MCwxMTI1IiBzaXplPSIxMDAsMTAwIj4mbHQ7Jmx0O3NldCAkbG9jYXRpb24gPSAmcXVvdDtDcmFuZSBQaG90b2dyYXBoaWMgU3R1ZGlvJnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJG9iamVjdGl2ZSA9ICZxdW90O0V4YW1pbmUgdGhlIGNoYW5naW5nIHBvcnRyYWl0JnF1b3Q7Jmd0OyZndDsKClNpbGFzIGNhcnJpZWQgdGhlIHBob3RvZ3JhcGggdG93YXJkIHRoZSBmcm9udCB3aW5kb3cuCgpUaGUgaW1hZ2UgY2hhbmdlZCBhcyB0aGUgbGlnaHQgdG91Y2hlZCBpdC4KCkZpcnN0LCBpdCBzaG93ZWQgU2lsYXMgc3RhbmRpbmcgb3V0c2lkZSB0aGUgc2hlcmlmZiYjMzk7cyBvZmZpY2Ugd2l0aCBNYXJzaGFsIEdyYXZlcyBhbmQgSm9uYXMgSGFydC4KClRoZW4gSm9uYXMgZGlzYXBwZWFyZWQuCgpHcmF2ZXMgZm9sbG93ZWQuCgpTaWxhcyByZW1haW5lZCBhbG9uZS4KCkhlIHR1cm5lZCB0aGUgZnJhbWUgb3Zlci4KCkEgbWVzc2FnZSBoYWQgYmVlbiB3cml0dGVuIGFjcm9zcyB0aGUgYmFja2luZyBwYXBlcjoKCkEgUEhPVE9HUkFQSCBET0VTIE5PVCBTSE9XIFdITyBMRUZULgoKQmVsb3cgaXQsIGluIHNtYWxsZXIgaGFuZHdyaXRpbmc6CgpJVCBTSE9XUyBXSE8gUkVNQUlORUQuCgpTaWxhcyBsb29rZWQgYWdhaW4gYXQgdGhlIHBpY3R1cmUuCgpUaGUgeW91bmdlciB2ZXJzaW9uIG9mIGhpbXNlbGYgbm8gbG9uZ2VyIGZhY2VkIHRoZSBjYW1lcmEuCgpIZSBoYWQgdHVybmVkIHRvd2FyZCB0aGUgc2hlcmlmZiYjMzk7cyBvZmZpY2UgZG9vci4KCkJlaGluZCBpdHMgd2luZG93IHN0b29kIGEgd29tYW4gd2VhcmluZyBhIGRhcmsgZHJlc3MuIEhlciBmYWNlIHdhcyBwYXJ0aWFsbHkgb2JzY3VyZWQgYnkgdGhlIHJlZmxlY3Rpb24gb24gdGhlIGdsYXNzLCBidXQgb25lIGhhbmQgcmVzdGVkIGFnYWluc3QgdGhlIHdpbmRvdy4KClNoZSBhcHBlYXJlZCB0byBiZSB3YXRjaGluZyBTaWxhcyBsZWF2ZS4KCiZsdDsmbHQ7aWYgbm90ICRwb3J0cmFpdEV4YW1pbmVkJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRwb3J0cmFpdEV4YW1pbmVkID0gdHJ1ZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkZWNobyArPSAxJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICR0cnV0aCArPSAxJmd0OyZndDsKCiAgICBBIG5hbWUgc2xvd2x5IGRldmVsb3BlZCBiZW5lYXRoIHRoZSBpbWFnZToKCiAgICBMSUxBIENSQU5FCgogICAgJmx0OyZsdDtzZXQgJGxpbGFLbm93biA9IHRydWUmZ3Q7Jmd0OwombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgpUaGUgd29tYW4gaW4gdGhlIHBob3RvZ3JhcGggbW92ZWQuCgpIZXIgaGFuZCBsb3dlcmVkIGZyb20gdGhlIHdpbmRvdy4KClNoZSBzdGVwcGVkIG91dCB0aHJvdWdoIHRoZSBzaGVyaWZmJiMzOTtzIG9mZmljZSBkb29yIGFuZCBvbnRvIHRoZSBzdHJlZXQuCgpTaWxhcyBuZWFybHkgZHJvcHBlZCB0aGUgZnJhbWUuCgpUaGUgcGhvdG9ncmFwaGVkIHdvbWFuIGNyb3NzZWQgdGhlIGltYWdlIHVudGlsIHNoZSBzdG9vZCBiZXNpZGUgaGlzIHlvdW5nZXIgc2VsZi4KClNoZSBsZWFuZWQgY2xvc2UgdG8gaGlzIGVhci4KClRoZSByZWFsIHN0dWRpbyByZW1haW5lZCBzaWxlbnQsIGJ1dCBTaWxhcyBoZWFyZCBoZXIgdm9pY2UgY2xlYXJseS4KCiZxdW90O1lvdSB3ZXJlIG5vdCB0aGUgb25seSBvbmUgd2hvIGRvdWJ0ZWQgdGhlIHZlcmRpY3QuJnF1b3Q7CgpUaGUgcGhvdG9ncmFwaCBjaGFuZ2VkIGFnYWluLgoKTm93IExpbGEgc3Rvb2QgYWxvbmUuCgpTaWxhcyB3YXMgZ29uZS4KCiZsdDsmbHQ7aWYgJHBvcnRyYWl0Q2hvaWNlIGlzICZxdW90O2hlbGQmcXVvdDsmZ3Q7Jmd0OwogICAgVGhlIGltYWdlIHJlbWFpbmVkIHN0ZWFkeSBpbiBTaWxhcyYjMzk7cyBoYW5kcy4KCiAgICBMaWxhIGxvb2tlZCBkaXJlY3RseSB0b3dhcmQgaGltLCB3YWl0aW5nIHRvIHNlZSB3aGV0aGVyIGhlIHdvdWxkIGNvbnRpbnVlLgombHQ7Jmx0O2Vsc2VpZiAkcG9ydHJhaXRDaG9pY2UgaXMgJnF1b3Q7dHVybmVkJnF1b3Q7Jmd0OyZndDsKICAgIERhcmsgZmluZ2VycHJpbnRzIG1hcmtlZCB0aGUgZWRnZSBvZiB0aGUgZnJhbWUgd2hlcmUgU2lsYXMgaGFkIHByZXZpb3VzbHkgdHVybmVkIGl0IG92ZXIuCiZsdDsmbHQ7ZWxzZSZndDsmZ3Q7CgogICAgJmx0OyZsdDtsaW5rICZxdW90O0hvbGQgdGhlIHBob3RvZ3JhcGggYW5kIGtlZXAgd2F0Y2hpbmcmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRwb3J0cmFpdENob2ljZSA9ICZxdW90O2hlbGQmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICR0cnV0aCArPSAxJmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkZWNobyArPSAxJmd0OyZndDsKCiAgICAgICAgJmx0OyZsdDtyZXBsYWNlICZxdW90OyNwb3J0cmFpdC1yZXN1bHQmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICAgICBTaWxhcyB0aWdodGVuZWQgaGlzIGdyaXAgb24gdGhlIGZyYW1lLgoKICAgICAgICAgICAgJnF1b3Q7QWxsIHJpZ2h0LCZxdW90OyBoZSBzYWlkLiAmcXVvdDtTaG93IG1lLiZxdW90OwoKICAgICAgICAgICAgVGhlIHBob3RvZ3JhcGhlZCBMaWxhIG5vZGRlZC4KCiAgICAgICAgICAgIEJlaGluZCBoZXIsIHRoZSBkb29yIG9mIHRoZSBzaGVyaWZmJiMzOTtzIG9mZmljZSBvcGVuZWQuCgogICAgICAgICAgICBKb25hcyBlbWVyZ2VkIHdpdGggaGlzIGhhbmRzIGJvdW5kLgoKICAgICAgICAgICAgTWFyc2hhbCBHcmF2ZXMgZm9sbG93ZWQuCgogICAgICAgICAgICBBIGNyb3dkIHdhaXRlZCBpbiB0aGUgc3RyZWV0LgoKICAgICAgICAgICAgTmVhciB0aGUgZWRnZSBvZiB0aGUgcGhvdG9ncmFwaCBzdG9vZCBTaWxhcyYjMzk7cyBob3JzZSwgc2FkZGxlZCBhbmQgZmFjaW5nIGF3YXkgZnJvbSB0b3duLgoKICAgICAgICAgICAgU2lsYXMgcmVtZW1iZXJlZCBjbGltYmluZyBpbnRvIHRoYXQgc2FkZGxlLgoKICAgICAgICAgICAgSGUgcmVtZW1iZXJlZCBoZWFyaW5nIHRoZSBjb3VydGhvdXNlIGJlbGwuCgogICAgICAgICAgICBIZSByZW1lbWJlcmVkIHJpZGluZyBiZWZvcmUgaXQgc3RvcHBlZCByaW5naW5nLgoKICAgICAgICAgICAgVGhlIGltYWdlIGZhZGVkIGJlZm9yZSByZXZlYWxpbmcgd2hhdCBoYXBwZW5lZCBuZXh0LgogICAgICAgICZsdDsmbHQ7L3JlcGxhY2UmZ3Q7Jmd0OwogICAgJmx0OyZsdDsvbGluayZndDsmZ3Q7CgogICAgJmx0O2JyJmd0OyZsdDticiZndDsKCiAgICAmbHQ7Jmx0O2xpbmsgJnF1b3Q7VHVybiB0aGUgcGhvdG9ncmFwaCBmYWNlIGRvd24mcXVvdDsmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRwb3J0cmFpdENob2ljZSA9ICZxdW90O3R1cm5lZCZxdW90OyZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJGZlYXIgKz0gMSZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJHJpZ2lkaXR5ICs9IDEmZ3Q7Jmd0OwoKICAgICAgICAmbHQ7Jmx0O3JlcGxhY2UgJnF1b3Q7I3BvcnRyYWl0LXJlc3VsdCZxdW90OyZndDsmZ3Q7CiAgICAgICAgICAgIFNpbGFzIHBsYWNlZCB0aGUgcGhvdG9ncmFwaCBmYWNlIGRvd24gb24gdGhlIGNvdW50ZXIuCgogICAgICAgICAgICBUaGUgY291bnRlciBpbW1lZGlhdGVseSBiZWdhbiBrbm9ja2luZyBiZW5lYXRoIGl0LgoKICAgICAgICAgICAgVGhyZWUgc2xvdyBrbm9ja3MuCgogICAgICAgICAgICBBIHBhdXNlLgoKICAgICAgICAgICAgVGhyZWUgbW9yZS4KCiAgICAgICAgICAgICZxdW90O1BlcnNpc3RlbnQgbGl0dGxlIHRvd24sJnF1b3Q7IFNpbGFzIHNhaWQuCgogICAgICAgICAgICBUaGUgcGhvdG9ncmFwaCBrbm9ja2VkIGFnYWluLgoKICAgICAgICAgICAgVGhpcyB0aW1lLCBpdCBtYW5hZ2VkIHRvIHNvdW5kIG9mZmVuZGVkLgogICAgICAgICZsdDsmbHQ7L3JlcGxhY2UmZ3Q7Jmd0OwogICAgJmx0OyZsdDsvbGluayZndDsmZ3Q7CgombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgombHQ7ZGl2IGlkPSZxdW90O3BvcnRyYWl0LXJlc3VsdCZxdW90OyZndDsmbHQ7L2RpdiZndDsKCiZsdDticiZndDsKCltbTG9vayBiZWhpbmQgdGhlIGRhcmsgY3VydGFpbi0mZ3Q7U3R1ZGlvIC0gRGFya3Jvb21dXQoKJmx0OyZsdDtpZiAkbGlsYUtub3duJmd0OyZndDsKICAgIFtbQ2FsbCBMaWxhIENyYW5lIGJ5IG5hbWUtJmd0O1N0dWRpbyAtIENhbGwgTGlsYV1dCiZsdDsmbHQ7L2lmJmd0OyZndDsKCltbUmV0dXJuIHRvIHRoZSBzdHVkaW8gZW50cmFuY2UtJmd0O1N0dWRpbyAtIEVudHJhbmNlXV0KCltbUmV0dXJuIHRvIE1haW4gU3RyZWV0LSZndDtNYWluIFN0cmVldF1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSIzMiIgbmFtZT0iU3R1ZGlvIC0gRGFya3Jvb20iIHRhZ3M9ImFjdDEgdG93biBzdHVkaW8gY2x1ZSIgcG9zaXRpb249IjExNzUsMTEyNSIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7Q3JhbmUgUGhvdG9ncmFwaGljIFN0dWRpbyBEYXJrcm9vbSZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRvYmplY3RpdmUgPSAmcXVvdDtTZWFyY2ggdGhlIGRhcmtyb29tJnF1b3Q7Jmd0OyZndDsKClNpbGFzIHB1bGxlZCBhc2lkZSB0aGUgZGFyayBjdXJ0YWluLgoKVGhlIHJvb20gYmV5b25kIHdhcyBpbGx1bWluYXRlZCBieSBhIHNpbmdsZSByZWQtZ2xhc3MgbGFtcC4KClRyYXlzIG9mIGNoZW1pY2FsIHNvbHV0aW9uIGNvdmVyZWQgYSBsb25nIHdvcmt0YWJsZS4gUGhvdG9ncmFwaGljIHBsYXRlcyBzdG9vZCBpbiB3b29kZW4gcmFja3MgYWxvbmcgdGhlIHdhbGwuIFRoZSBhaXIgc21lbGxlZCBzaGFycCBlbm91Z2ggdG8gbWFrZSBTaWxhcyByZWNvbnNpZGVyIGJyZWF0aGluZyBhcyBhIGxvbmctdGVybSBoYWJpdC4KCiZsdDsmbHQ7aWYgbm90ICRkYXJrcm9vbUVudGVyZWQmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGRhcmtyb29tRW50ZXJlZCA9IHRydWUmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGVjaG8gKz0gMSZndDsmZ3Q7CiZsdDsmbHQ7L2lmJmd0OyZndDsKCk9uZSB0cmF5IGNvbnRhaW5lZCBhIGJsYW5rIHNoZWV0IG9mIHBob3RvZ3JhcGhpYyBwYXBlci4KCkFzIFNpbGFzIGFwcHJvYWNoZWQsIHNoYWRvd3MgYmVnYW4gZm9ybWluZyBhY3Jvc3MgaXRzIHN1cmZhY2UuCgpBIHN0cmVldC4KCkEgY3Jvd2QuCgpBIHNjYWZmb2xkLgoKVGhlIGltYWdlIGRldmVsb3BlZCB3aXRob3V0IGFueW9uZSB0b3VjaGluZyBpdC4KCkpvbmFzIEhhcnQgc3Rvb2QgYXQgdGhlIGNlbnRlciB3aXRoIGhpcyBoYW5kcyB0aWVkLiBNYXJzaGFsIEdyYXZlcyB3YWl0ZWQgYmVzaWRlIGhpbS4gVGhlIGNyb3dkIGZpbGxlZCB0aGUgc3RyZWV0IGluIGZyb250IG9mIHRoZSBjb3VydGhvdXNlLgoKU2lsYXMgc2VhcmNoZWQgdGhlIHBob3RvZ3JhcGggZm9yIGhpbXNlbGYuCgpIZSB3YXMgbm90IHRoZXJlLgoKQSB3b21hbiBzdG9vZCBuZWFyIHRoZSBiYXNlIG9mIHRoZSBzY2FmZm9sZCBpbnN0ZWFkLgoKTGlsYSBDcmFuZS4KClNoZSBoZWxkIGEgY2FtZXJhIGJlbmVhdGggb25lIGFybSBhbmQgYSBmb2xkZWQgZG9jdW1lbnQgaW4gdGhlIG90aGVyIGhhbmQuCgpTb21lb25lIGhhZCB3cml0dGVuIGJlbmVhdGggdGhlIHBpY3R1cmU6CgpFVklERU5DRSBERUxJVkVSRUQgQUZURVIgREVQQVJUVVJFIE9GIE1BUlNIQUwgV0FSRC4KClNpbGFzIHJlYWQgdGhlIHNlbnRlbmNlIHR3aWNlLgoKTGlsYSBoYWQgcG9zc2Vzc2VkIGV2aWRlbmNlLgoKRXZpZGVuY2UgdGhhdCBoYWQgYXJyaXZlZCBhZnRlciBoZSBsZWZ0LgoKT24gdGhlIGZhciBzaWRlIG9mIHRoZSBkYXJrcm9vbSwgc29tZXRoaW5nIHNjcmF0Y2hlZCBhZ2FpbnN0IGEgd29vZGVuIGNhYmluZXQuCgpTaWxhcyBvcGVuZWQgaXQuCgpJbnNpZGUgc3Rvb2QgYSBnbGFzcyBwaG90b2dyYXBoaWMgbmVnYXRpdmUgd3JhcHBlZCBpbiBibGFjayBjbG90aC4KCiZsdDsmbHQ7aWYgbm90ICRnbGFzc05lZ2F0aXZlRm91bmQmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGdsYXNzTmVnYXRpdmVGb3VuZCA9IHRydWUmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJHRydXRoICs9IDEmZ3Q7Jmd0OwombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgpIZSBoZWxkIHRoZSBnbGFzcyBwbGF0ZSB0b3dhcmQgdGhlIHJlZCBsYW1wLgoKVGhlIG5lZ2F0aXZlIHNob3dlZCBhIHBheXJvbGwgd2Fnb24gc3RvcHBlZCBvbiBhIGRlc2VydCByb2FkLiBUd28gbWFza2VkIHJpZGVycyBzdG9vZCBuZWFyYnkuCgpBIHRoaXJkIG1hbiB3YWl0ZWQgYmVoaW5kIHRoZW0uCgpIZSB3YXMgbm90IG1hc2tlZC4KClNpbGFzIHJlY29nbml6ZWQgdGhlIHJpZ2lkIHBvc3R1cmUgYmVmb3JlIGhlIHJlY29nbml6ZWQgdGhlIGZhY2UuCgpNYXJzaGFsIEFsZGVuIEdyYXZlcy4KClRoZSBnbGFzcyBwbGF0ZSBjcmFja2VkIGJldHdlZW4gU2lsYXMmIzM5O3MgZmluZ2Vycy4KCkhlIG5lYXJseSBkcm9wcGVkIGl0LgoKJnF1b3Q7VGhhdCwmcXVvdDsgaGUgc2FpZCBxdWlldGx5LCAmcXVvdDt3b3VsZCBoYXZlIGJlZW4gdXNlZnVsIGVsZXZlbiB5ZWFycyBhZ28uJnF1b3Q7CgpBIHdvbWFuJiMzOTtzIHZvaWNlIGFuc3dlcmVkIGZyb20gYmVoaW5kIHRoZSBjdXJ0YWluLgoKJnF1b3Q7SXQgd2FzLiZxdW90OwoKU2lsYXMgdHVybmVkLgoKTm8gb25lIHN0b29kIHRoZXJlLgoKJnF1b3Q7SXQgc2ltcGx5IHdhc24mIzM5O3QgdXNlZnVsIHRvIHRoZSByaWdodCBtYW4uJnF1b3Q7CgombHQ7Jmx0O2lmICRncmF2ZXNLbm93biZndDsmZ3Q7CiAgICBTaWxhcyBhbHJlYWR5IGtuZXcgR3JhdmVzJiMzOTtzIG1ldGhvZHMuCgogICAgSGUgd2FzIGJlZ2lubmluZyB0byB1bmRlcnN0YW5kIHRoZWlyIGNvc3QuCiZsdDsmbHQ7ZWxzZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkZ3JhdmVzS25vd24gPSB0cnVlJmd0OyZndDsKCiAgICBUaGUgbWVtb3J5IG9mIEdyYXZlcyBhcnJpdmVkIHdpdGggdW5jb21mb3J0YWJsZSBjbGFyaXR5OiBpbW1hY3VsYXRlIGNvYXQsIHBvbGlzaGVkIGJhZGdlLCBzdGVhZHkgdm9pY2UsIGFuZCB0aGUgY2VydGFpbnR5IG9mIGEgbWFuIHdobyBuZXZlciBwZXJtaXR0ZWQgZG91YnQgdG8gc3Vydml2ZSBsb25nIGVub3VnaCB0byBiZWNvbWUgZXZpZGVuY2UuCiZsdDsmbHQ7L2lmJmd0OyZndDsKCltbRXhhbWluZSB0aGUgY3JhY2tlZCBuZWdhdGl2ZS0mZ3Q7U3R1ZGlvIC0gR2xhc3MgTmVnYXRpdmVdXQoKJmx0OyZsdDtpZiAkbGlsYUtub3duJmd0OyZndDsKICAgIFtbQ2FsbCBMaWxhIENyYW5lIGJ5IG5hbWUtJmd0O1N0dWRpbyAtIENhbGwgTGlsYV1dCiZsdDsmbHQ7L2lmJmd0OyZndDsKCltbUmV0dXJuIHRvIHRoZSBjaGFuZ2luZyBwb3J0cmFpdC0mZ3Q7U3R1ZGlvIC0gU2lsYXMgUG9ydHJhaXRdXQoKW1tSZXR1cm4gdG8gdGhlIHN0dWRpbyBlbnRyYW5jZS0mZ3Q7U3R1ZGlvIC0gRW50cmFuY2VdXTwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMzMiIG5hbWU9IkdlbmVyYWwgU3RvcmUgLSBXYXRlciIgdGFncz0iYWN0MSB0b3duIHN0b3JlIGNob2ljZSIgcG9zaXRpb249Ijk4Ny41LDEyNTAiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O1BlcmRpdGlvbiBHZW5lcmFsIFN0b3JlJnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJG9iamVjdGl2ZSA9ICZxdW90O0RldGVybWluZSB0aGUgcHJpY2Ugb2Ygd2F0ZXImcXVvdDsmZ3Q7Jmd0OwoKU2lsYXMgc3Rvb2QgYmVzaWRlIHRoZSB3YXRlciBiYXJyZWwuCgpUaGUgbWVzc2FnZSByZW1haW5lZCBhY3Jvc3MgaXRzIHN1cmZhY2U6CgpFVkVSWVRISU5HIEhFUkUgSEFTIEEgUFJJQ0UuCgpIZSBsb3dlcmVkIHRoZSBkaXBwZXIuCgpJdCBzdHJ1Y2sgdGhlIHdhdGVyIHdpdGggdGhlIGhhcmQgY2xpY2sgb2YgbWV0YWwgYWdhaW5zdCBnbGFzcy4KClRoZSBzdXJmYWNlIGRpZCBub3QgYnJlYWsuCgpTaWxhcyBwcmVzc2VkIGhhcmRlci4KCk5vdGhpbmcuCgomcXVvdDtXYXRlciB3aXRoIG9waW5pb25zLCZxdW90OyBoZSBzYWlkLiAmcXVvdDtUaGF0JiMzOTtzIG5ldy4mcXVvdDsKCkEgc21hbGxlciBsaW5lIGFwcGVhcmVkIGJlbmVhdGggdGhlIGZpcnN0OgoKTkFNRSBUSEUgVEhJUlNUWS4KCiZsdDsmbHQ7aWYgJGNoaWxkTmFtZUtub3duJmd0OyZndDsKICAgIFNpbGFzIHRob3VnaHQgb2YgRWxpemEgSGFydCBseWluZyBiZW5lYXRoIHRoZSBwYXRjaGVkIGJsYW5rZXQgd2hpbGUgSm9uYXMgaGVsZCBhIGN1cCBzaGUgd2FzIHRvbyB3ZWFrIHRvIGRyaW5rLgombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgombHQ7Jmx0O2lmICRqb25hc0tub3duJmd0OyZndDsKICAgIEhlIHJlbWVtYmVyZWQgdGhlIHNhbG9vbiBsZWRnZXI6CgogICAgT05FIEdMQVNTIE9GIFdBVEVSICAKICAgIFBBSUQgQlkgU0lMQVMgV0FSRCAgCiAgICBERUxJVkVSIFRPIEpPTkFTIEhBUlQKJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKVGhlIGJhcnJlbCB3YXMgbm90IGFza2luZyB3aGV0aGVyIFNpbGFzIHdhbnRlZCB3YXRlci4KCkl0IHdhcyBhc2tpbmcgd2hldGhlciBoZSByZW1lbWJlcmVkIHdobyBoYWQgZ29uZSB3aXRob3V0IGl0LgoKJmx0OyZsdDtpZiAkd2F0ZXJEZWNpc2lvbiBpcyAmcXVvdDtlbGl6YSZxdW90OyZndDsmZ3Q7CgogICAgU2lsYXMgaGFkIGFscmVhZHkgbmFtZWQgRWxpemEgSGFydC4KCiAgICBUaGUgd2F0ZXIgcmVtYWluZWQgY2xlYXIgYW5kIHN0aWxsLiBUaGUgdGluIGN1cCByZXN0ZWQgYmVzaWRlIHRoZSBiYXJyZWwsIGNvbGQgZW5vdWdoIHRvIGdhdGhlciBmcm9zdCBkZXNwaXRlIHRoZSBkZXNlcnQgaGVhdC4KCiZsdDsmbHQ7ZWxzZWlmICR3YXRlckRlY2lzaW9uIGlzICZxdW90O2pvbmFzJnF1b3Q7Jmd0OyZndDsKCiAgICBTaWxhcyBoYWQgYWxyZWFkeSBuYW1lZCBKb25hcyBIYXJ0LgoKICAgIFRoZSBkaXBwZXIgZmxvYXRlZCBvbiB0aGUgc3VyZmFjZSwgYWx0aG91Z2ggaXRzIGlyb24gaGFuZGxlIHNob3VsZCBoYXZlIHB1bGxlZCBpdCB1bmRlci4KCiZsdDsmbHQ7ZWxzZWlmICR3YXRlckRlY2lzaW9uIGlzICZxdW90O3NlbGYmcXVvdDsmZ3Q7Jmd0OwoKICAgIFNpbGFzIGhhZCBhbHJlYWR5IGNsYWltZWQgdGhlIHdhdGVyIGZvciBoaW1zZWxmLgoKICAgIFRoZSB3b3JkcyBiZWFyaW5nIGhpcyBuYW1lIHJlbWFpbmVkIHZpc2libGUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgYmFycmVsLgoKJmx0OyZsdDtlbHNlJmd0OyZndDsKCiAgICAmbHQ7Jmx0O2lmICRjaGlsZE5hbWVLbm93biZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtsaW5rICZxdW90O1NheSB0aGF0IEVsaXphIEhhcnQgd2FzIHRoaXJzdHkmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICAgICAmbHQ7Jmx0O3NldCAkd2F0ZXJEZWNpc2lvbiA9ICZxdW90O2VsaXphJnF1b3Q7Jmd0OyZndDsKICAgICAgICAgICAgJmx0OyZsdDtzZXQgJHdhdGVyUmVjZWl2ZWQgPSB0cnVlJmd0OyZndDsKICAgICAgICAgICAgJmx0OyZsdDtzZXQgJGN1cFJldHVybmVkID0gdHJ1ZSZndDsmZ3Q7CiAgICAgICAgICAgICZsdDsmbHQ7c2V0ICRjb21wYXNzaW9uICs9IDImZ3Q7Jmd0OwoKICAgICAgICAgICAgJmx0OyZsdDtyZXBsYWNlICZxdW90OyN3YXRlci1yZXN1bHQmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICAgICAgICAgJnF1b3Q7RWxpemEgSGFydCwmcXVvdDsgU2lsYXMgc2FpZC4KCiAgICAgICAgICAgICAgICBUaGUgdGluIGN1cCBmcm9tIHRoZSBjaHVyY2ggYXBwZWFyZWQgYmVzaWRlIHRoZSBiYXJyZWwuCgogICAgICAgICAgICAgICAgU2lsYXMgZGlkIG5vdCBzZWUgaXQgYXJyaXZlLiBPbmUgbW9tZW50IHRoZSBjb3VudGVyIHdhcyBlbXB0eS4gVGhlIG5leHQsIHRoZSBjdXAgcmVzdGVkIHRoZXJlIHdpdGggZnJvc3QgZm9ybWluZyBhcm91bmQgaXRzIHJpbS4KCiAgICAgICAgICAgICAgICBUaGUgd29yZHMgc2NyYXRjaGVkIGludG8gaXRzIGJvdHRvbSBoYWQgY2hhbmdlZC4KCiAgICAgICAgICAgICAgICBNRVJDWSBSRU1FTUJFUlMgTkVFRC4KCiAgICAgICAgICAgICAgICBUaGUgd2F0ZXImIzM5O3Mgc3VyZmFjZSBzb2Z0ZW5lZC4KCiAgICAgICAgICAgICAgICBTaWxhcyBsb3dlcmVkIHRoZSBjdXAgYW5kIGZpbGxlZCBpdC4KCiAgICAgICAgICAgICAgICBIZSBleHBlY3RlZCB0aGUgd2F0ZXIgdG8gdmFuaXNoIGFzIGl0IGhhZCBpbiB0aGUgY2h1cmNoLgoKICAgICAgICAgICAgICAgIEl0IHJlbWFpbmVkLgoKICAgICAgICAgICAgICAgIFNpbGFzIGRyYW5rIG9ubHkgZW5vdWdoIHRvIGVhc2UgdGhlIHdvcnN0IG9mIGhpcyB0aGlyc3QuIFRoZW4gaGUgZmlsbGVkIHRoZSBjdXAgYWdhaW4gYW5kIHBsYWNlZCBpdCBvbiB0aGUgY291bnRlci4KCiAgICAgICAgICAgICAgICAmcXVvdDtGb3IgRWxpemEuJnF1b3Q7CgogICAgICAgICAgICAgICAgQSBjaGlsZCYjMzk7cyBoYW5kIGJyaWVmbHkgYXBwZWFyZWQgYmVzaWRlIHRoZSBjdXAuCgogICAgICAgICAgICAgICAgV2hlbiBpdCB2YW5pc2hlZCwgdGhlIGN1cCB3YXMgZW1wdHkuCgogICAgICAgICAgICAgICAgJmx0OyZsdDtpZiAkaGVhbHRoICZsdDsgJG1heEhlYWx0aCZndDsmZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0OyZsdDtzZXQgJGhlYWx0aCArPSAxJmd0OyZndDsKICAgICAgICAgICAgICAgICZsdDsmbHQ7L2lmJmd0OyZndDsKCiAgICAgICAgICAgICAgICBUaGUgbWVzc2FnZSBhY3Jvc3MgdGhlIHdhdGVyIGZhZGVkLgogICAgICAgICAgICAmbHQ7Jmx0Oy9yZXBsYWNlJmd0OyZndDsKICAgICAgICAmbHQ7Jmx0Oy9saW5rJmd0OyZndDsKCiAgICAgICAgJmx0O2JyJmd0OyZsdDticiZndDsKICAgICZsdDsmbHQ7L2lmJmd0OyZndDsKCiAgICAmbHQ7Jmx0O2lmICRqb25hc0tub3duJmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O2xpbmsgJnF1b3Q7U2F5IHRoYXQgSm9uYXMgSGFydCB3YXMgdGhpcnN0eSZxdW90OyZndDsmZ3Q7CiAgICAgICAgICAgICZsdDsmbHQ7c2V0ICR3YXRlckRlY2lzaW9uID0gJnF1b3Q7am9uYXMmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICAgICAmbHQ7Jmx0O3NldCAkd2F0ZXJSZWNlaXZlZCA9IHRydWUmZ3Q7Jmd0OwogICAgICAgICAgICAmbHQ7Jmx0O3NldCAkdHJ1dGggKz0gMSZndDsmZ3Q7CiAgICAgICAgICAgICZsdDsmbHQ7c2V0ICRjb21wYXNzaW9uICs9IDEmZ3Q7Jmd0OwoKICAgICAgICAgICAgJmx0OyZsdDtyZXBsYWNlICZxdW90OyN3YXRlci1yZXN1bHQmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICAgICAgICAgJnF1b3Q7Sm9uYXMgSGFydCwmcXVvdDsgU2lsYXMgc2FpZC4KCiAgICAgICAgICAgICAgICBUaGUgd2F0ZXIgZGFya2VuZWQuCgogICAgICAgICAgICAgICAgRm9yIGFuIGluc3RhbnQsIHRoZSBiYXJyZWwgYmVjYW1lIGEgamFpbC1jZWxsIGZsb29yLgoKICAgICAgICAgICAgICAgIEpvbmFzIGtuZWx0IGJlc2lkZSB0aGUgYmFycyB3aXRoIG9uZSBoYW5kIGV4dGVuZGVkLiBBbiBlbXB0eSBjdXAgcmVzdGVkIGJleW9uZCBoaXMgcmVhY2guCgogICAgICAgICAgICAgICAgU2lsYXMgc3Rvb2QgaW4gdGhlIGNvcnJpZG9yLgoKICAgICAgICAgICAgICAgIFlvdW5nZXIuCgogICAgICAgICAgICAgICAgQ2xvc2UgZW5vdWdoIHRvIGhlbHAuCgogICAgICAgICAgICAgICAgTWFyc2hhbCBHcmF2ZXMmIzM5O3Mgdm9pY2UgY2FtZSBmcm9tIHRoZSBvZmZpY2UuCgogICAgICAgICAgICAgICAgJnF1b3Q7SGUmIzM5O2xsIHJlY2VpdmUgd2F0ZXIgYWZ0ZXIgaGUgc2lnbnMuJnF1b3Q7CgogICAgICAgICAgICAgICAgVGhlIG1lbW9yeSBzaGlmdGVkLgoKICAgICAgICAgICAgICAgIFNpbGFzIHdhdGNoZWQgaGlzIHlvdW5nZXIgc2VsZiBwaWNrIHVwIHRoZSBjdXAuCgogICAgICAgICAgICAgICAgSGUgaGFkIGFsd2F5cyByZW1lbWJlcmVkIGNhcnJ5aW5nIGl0IHRvd2FyZCBKb25hcy4KCiAgICAgICAgICAgICAgICBOb3cgaGUgcmVtZW1iZXJlZCBzZXR0aW5nIGl0IG9uIEdyYXZlcyYjMzk7cyBkZXNrIGluc3RlYWQuCgogICAgICAgICAgICAgICAgJnF1b3Q7SSBib3VnaHQgaGltIHdhdGVyLCZxdW90OyBTaWxhcyBzYWlkLgoKICAgICAgICAgICAgICAgIEEgdm9pY2Ugcm9zZSBmcm9tIHRoZSBiYXJyZWwuCgogICAgICAgICAgICAgICAgJnF1b3Q7WW91IGJvdWdodCBpdC4mcXVvdDsKCiAgICAgICAgICAgICAgICBBbm90aGVyIHZvaWNlIGFuc3dlcmVkIGZyb20gYmVuZWF0aCB0aGUgZmxvb3Jib2FyZHMuCgogICAgICAgICAgICAgICAgJnF1b3Q7WW91IGRpZCBub3QgZGVsaXZlciBpdC4mcXVvdDsKCiAgICAgICAgICAgICAgICBUaGUgZGlwcGVyIGJyb2tlIHRocm91Z2ggdGhlIHN1cmZhY2UuCgogICAgICAgICAgICAgICAgU2lsYXMgZHJhbmsuCgogICAgICAgICAgICAgICAgVGhlIHdhdGVyIHRhc3RlZCBmYWludGx5IG9mIGlyb24gYW5kIG9sZCByZWdyZXQuCgogICAgICAgICAgICAgICAgJmx0OyZsdDtpZiAkaGVhbHRoICZsdDsgJG1heEhlYWx0aCZndDsmZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0OyZsdDtzZXQgJGhlYWx0aCArPSAxJmd0OyZndDsKICAgICAgICAgICAgICAgICZsdDsmbHQ7L2lmJmd0OyZndDsKICAgICAgICAgICAgJmx0OyZsdDsvcmVwbGFjZSZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDsvbGluayZndDsmZ3Q7CgogICAgICAgICZsdDticiZndDsmbHQ7YnImZ3Q7CiAgICAmbHQ7Jmx0Oy9pZiZndDsmZ3Q7CgogICAgJmx0OyZsdDtsaW5rICZxdW90O0NsYWltIHRoZSB3YXRlciBmb3IgeW91cnNlbGYmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICR3YXRlckRlY2lzaW9uID0gJnF1b3Q7c2VsZiZxdW90OyZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJHdhdGVyUmVjZWl2ZWQgPSB0cnVlJmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkcmlnaWRpdHkgKz0gMSZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJGZlYXIgKz0gMSZndDsmZ3Q7CgogICAgICAgICZsdDsmbHQ7cmVwbGFjZSAmcXVvdDsjd2F0ZXItcmVzdWx0JnF1b3Q7Jmd0OyZndDsKICAgICAgICAgICAgJnF1b3Q7U2lsYXMgV2FyZCwmcXVvdDsgaGUgc2FpZC4gJnF1b3Q7SSYjMzk7bSB0aGlyc3R5LiZxdW90OwoKICAgICAgICAgICAgVGhlIHdvcmRzIGFjcm9zcyB0aGUgc3VyZmFjZSB2YW5pc2hlZC4KCiAgICAgICAgICAgIFRoZSBkaXBwZXIgcGFzc2VkIHRocm91Z2ggdGhlIHdhdGVyLgoKICAgICAgICAgICAgU2lsYXMgZHJhbmsuCgogICAgICAgICAgICBUaGUgd2F0ZXIgd2FzIGNvbGQsIGNsZWFuLCBhbmQgZW50aXJlbHkgd2l0aG91dCBtZXJjeS4KCiAgICAgICAgICAgIFdoZW4gaGUgbG93ZXJlZCB0aGUgZGlwcGVyLCBoaXMgbmFtZSBoYWQgYXBwZWFyZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgYmFycmVsLgoKICAgICAgICAgICAgQmVuZWF0aCBpdCB3YXMgYSBzZWNvbmQgbGluZToKCiAgICAgICAgICAgIFRIRSBMSVZJTkcgQUxXQVlTIEFOU1dFUiBGSVJTVC4KCiAgICAgICAgICAgICZsdDsmbHQ7aWYgJGhlYWx0aCAmbHQ7ICRtYXhIZWFsdGgmZ3Q7Jmd0OwogICAgICAgICAgICAgICAgJmx0OyZsdDtzZXQgJGhlYWx0aCArPSAxJmd0OyZndDsKICAgICAgICAgICAgJmx0OyZsdDsvaWYmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7L3JlcGxhY2UmZ3Q7Jmd0OwogICAgJmx0OyZsdDsvbGluayZndDsmZ3Q7CgombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgombHQ7ZGl2IGlkPSZxdW90O3dhdGVyLXJlc3VsdCZxdW90OyZndDsmbHQ7L2RpdiZndDsKCiZsdDticiZndDsKCltbRXhhbWluZSB0aGUgYW1tdW5pdGlvbi0mZ3Q7R2VuZXJhbCBTdG9yZSAtIEFtbXVuaXRpb25dXQoKW1tJbnNwZWN0IHRoZSBjYXNoIHJlZ2lzdGVyLSZndDtHZW5lcmFsIFN0b3JlIC0gUmVnaXN0ZXJdXQoKW1tSZXR1cm4gdG8gdGhlIHN0b3JlIGVudHJhbmNlLSZndDtHZW5lcmFsIFN0b3JlIC0gRW50cmFuY2VdXQoKW1tSZXR1cm4gdG8gTWFpbiBTdHJlZXQtJmd0O01haW4gU3RyZWV0XV08L3R3LXBhc3NhZ2VkYXRhPjx0dy1wYXNzYWdlZGF0YSBwaWQ9IjM0IiBuYW1lPSJHZW5lcmFsIFN0b3JlIC0gQW1tdW5pdGlvbiIgdGFncz0iYWN0MSB0b3duIHN0b3JlIGNob2ljZSBtZW1vcnkiIHBvc2l0aW9uPSIxMTEyLjUsMTI1MCIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7UGVyZGl0aW9uIEdlbmVyYWwgU3RvcmUmcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkb2JqZWN0aXZlID0gJnF1b3Q7Q29uc2lkZXIgdGhlIGNvc3Qgb2YgYW1tdW5pdGlvbiZxdW90OyZndDsmZ3Q7CgpTaWxhcyBleGFtaW5lZCB0aGUgYW1tdW5pdGlvbiBjYWJpbmV0LgoKU2l4IGJyYXNzIGNhcnRyaWRnZXMgc3Rvb2QgdXByaWdodCBpbnNpZGUgYW4gb3BlbiBib3guCgpUaGV5IHdlcmUgcG9saXNoZWQuCgpVbnRhcm5pc2hlZC4KClJlY2VudGx5IG1hbnVmYWN0dXJlZCwgaWYgdGhlIGhlYWRzdGFtcHMgY291bGQgYmUgdHJ1c3RlZC4KCk5vdGhpbmcgZWxzZSBpbiBQZXJkaXRpb24gR3VsY2ggZW5jb3VyYWdlZCB0aGF0IGtpbmQgb2Ygb3B0aW1pc20uCgpUaGUgcHJpY2UgY2FyZCByZWFkOgoKU0lYIFJPVU5EUyAgCk9ORSBNRU1PUlkKClNpbGFzIG9wZW5lZCB0aGUgY2FiaW5ldC4KCkEgY2FzaCBkcmF3ZXIgc2xpZCBvdXQgYmVoaW5kIGhpbS4KCkluc2lkZSBsYXkgc2l4IGVtcHR5IGNhcnRyaWRnZSBjYXNlcyBhbmQgYSBuYXJyb3cgc3RyaXAgb2YgcGFwZXIuCgpUaGUgcGFwZXIgcmVhZDoKCk1FTU9SWSBNVVNUIEJFIEdJVkVOIFdJTExJTkdMWS4gIApRVUFMSVRZIFNVQkpFQ1QgVE8gQVBQUkFJU0FMLgoKJnF1b3Q7RXZlbiB0aGUgaGF1bnRpbmcgaGFzIHN0b3JlIHBvbGljaWVzLiZxdW90OwoKQSB2b2ljZSBzcG9rZSBmcm9tIHNvbWV3aGVyZSBiZWhpbmQgdGhlIHNoZWx2ZXMuCgomcXVvdDtObyByZWZ1bmRzLiZxdW90OwoKU2lsYXMgdHVybmVkLgoKVGhlIGFpc2xlIHdhcyBlbXB0eS4KCiZsdDsmbHQ7aWYgJGFtbW9EZWNpc2lvbiBpcyAmcXVvdDtwYWlkJnF1b3Q7Jmd0OyZndDsKCiAgICBUaGUgYW1tdW5pdGlvbiBib3ggd2FzIGVtcHR5LgoKICAgIFNpbGFzIGNvdWxkIG5vIGxvbmdlciByZW1lbWJlciB0aGUgbWVtb3J5IGhlIGhhZCBzdXJyZW5kZXJlZCwgYnV0IGl0cyBhYnNlbmNlIHJlbWFpbmVkLiBJdCBmZWx0IGxpa2UgcmVhY2hpbmcgZm9yIGEgZmFtaWxpYXIgb2JqZWN0IGluIHRoZSBkYXJrIGFuZCBmaW5kaW5nIGFuIGVtcHR5IHNoZWxmLgoKICAgICZsdDsmbHQ7aWYgJGxvc3RNZW1vcnkgaXMgJnF1b3Q7bW90aGVyJnF1b3Q7Jmd0OyZndDsKICAgICAgICBIZSByZW1lbWJlcmVkIGhhdmluZyBhIG1vdGhlci4KCiAgICAgICAgVGhlIHNoYXBlIG9mIGhlciBmYWNlIHdhcyBnb25lLgogICAgJmx0OyZsdDtlbHNlaWYgJGxvc3RNZW1vcnkgaXMgJnF1b3Q7Zmlyc3RBcnJlc3QmcXVvdDsmZ3Q7Jmd0OwogICAgICAgIEhlIHJlbWVtYmVyZWQgbWFraW5nIGEgZmlyc3QgYXJyZXN0LgoKICAgICAgICBIZSBubyBsb25nZXIgcmVtZW1iZXJlZCB3aG8gaGFkIGJlZW4gYXJyZXN0ZWQuCiAgICAmbHQ7Jmx0O2Vsc2VpZiAkbG9zdE1lbW9yeSBpcyAmcXVvdDtob3JzZU5hbWUmcXVvdDsmZ3Q7Jmd0OwogICAgICAgIEhlIHJlbWVtYmVyZWQgbmFtaW5nIGhpcyBob3JzZS4KCiAgICAgICAgVGhlIG5hbWUgaXRzZWxmIHdvdWxkIG5vdCByZXR1cm4uCiAgICAmbHQ7Jmx0Oy9pZiZndDsmZ3Q7CgombHQ7Jmx0O2Vsc2VpZiAkYW1tb0RlY2lzaW9uIGlzICZxdW90O3JlZnVzZWQmcXVvdDsmZ3Q7Jmd0OwoKICAgIFRoZSBzaXggY2FydHJpZGdlcyByZW1haW5lZCBpbiB0aGUgYm94LgoKICAgIFRoZSBjYWJpbmV0IGRvb3Igc3Rvb2Qgb3BlbiBhcyBpZiB0aGUgc3RvcmUgZXhwZWN0ZWQgU2lsYXMgdG8gcmVjb25zaWRlci4KCiZsdDsmbHQ7ZWxzZSZndDsmZ3Q7CgogICAgJmx0OyZsdDtsaW5rICZxdW90O1RyYWRlIHRoZSBtZW1vcnkgb2YgeW91ciBtb3RoZXImIzM5O3MgZmFjZSZxdW90OyZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJGFtbW9EZWNpc2lvbiA9ICZxdW90O3BhaWQmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRzdG9yZUFtbW9UYWtlbiA9IHRydWUmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRtZW1vcnlTdXJyZW5kZXJlZCA9IHRydWUmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRsb3N0TWVtb3J5ID0gJnF1b3Q7bW90aGVyJnF1b3Q7Jmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkYW1tbyArPSA2Jmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkZmVhciArPSAxJmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkZWNobyArPSAxJmd0OyZndDsKCiAgICAgICAgJmx0OyZsdDtyZXBsYWNlICZxdW90OyNhbW1vLXJlc3VsdCZxdW90OyZndDsmZ3Q7CiAgICAgICAgICAgIFNpbGFzIHJlYWNoZWQgZm9yIHRoZSBtZW1vcnkuCgogICAgICAgICAgICBIaXMgbW90aGVyIHN0YW5kaW5nIGluIHRoZSBraXRjaGVuIGRvb3J3YXkuCgogICAgICAgICAgICBTdW5saWdodCBiZWhpbmQgaGVyLgoKICAgICAgICAgICAgRmxvdXIgb24gb25lIGNoZWVrLgoKICAgICAgICAgICAgSGUgY291bGQgbm90IHJlbWVtYmVyIHdoYXQgc2hlIGhhZCBiZWVuIHNheWluZywgYnV0IGhlIHJlbWVtYmVyZWQgdGhlIHNvdW5kIG9mIGhlciBsYXVnaC4KCiAgICAgICAgICAgIFRoZSBzdG9yZSB0b29rIHRoZSByZXN0LgoKICAgICAgICAgICAgSGVyIGZlYXR1cmVzIGJsdXJyZWQuCgogICAgICAgICAgICBIZXIgZXllcyB2YW5pc2hlZCBmaXJzdC4KCiAgICAgICAgICAgIFRoZW4gaGVyIG1vdXRoLgoKICAgICAgICAgICAgVGhlbiB0aGUgbGluZSBvZiBoZXIgamF3LgoKICAgICAgICAgICAgU2lsYXMgZ3JhYmJlZCB0aGUgY291bnRlci4KCiAgICAgICAgICAgIFRoZSBtZW1vcnkgZGlkIG5vdCBodXJ0IGFzIGl0IGxlZnQuCgogICAgICAgICAgICBUaGF0IG1hZGUgaXQgd29yc2UuCgogICAgICAgICAgICBTaXggY2FydHJpZGdlcyBhcHBlYXJlZCBpbiBoaXMgcGFsbS4KCiAgICAgICAgICAgIEhlIGxvYWRlZCB0aGVtIGludG8gaGlzIGNvYXQgcG9ja2V0LgoKICAgICAgICAgICAgSGUgcmVtZW1iZXJlZCB0aGF0IGhpcyBtb3RoZXIgaGFkIGxvdmVkIGhpbS4KCiAgICAgICAgICAgIEhlIGNvdWxkIG5vIGxvbmdlciByZW1lbWJlciBoZXIgZmFjZS4KICAgICAgICAmbHQ7Jmx0Oy9yZXBsYWNlJmd0OyZndDsKICAgICZsdDsmbHQ7L2xpbmsmZ3Q7Jmd0OwoKICAgICZsdDticiZndDsmbHQ7YnImZ3Q7CgogICAgJmx0OyZsdDtsaW5rICZxdW90O1RyYWRlIHRoZSBtZW1vcnkgb2YgeW91ciBmaXJzdCBhcnJlc3QmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRhbW1vRGVjaXNpb24gPSAmcXVvdDtwYWlkJnF1b3Q7Jmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkc3RvcmVBbW1vVGFrZW4gPSB0cnVlJmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkbWVtb3J5U3VycmVuZGVyZWQgPSB0cnVlJmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkbG9zdE1lbW9yeSA9ICZxdW90O2ZpcnN0QXJyZXN0JnF1b3Q7Jmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkYW1tbyArPSA2Jmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkcmlnaWRpdHkgKz0gMSZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJGVjaG8gKz0gMSZndDsmZ3Q7CgogICAgICAgICZsdDsmbHQ7cmVwbGFjZSAmcXVvdDsjYW1tby1yZXN1bHQmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICAgICBTaWxhcyBvZmZlcmVkIHRoZSBtZW1vcnkgb2YgaGlzIGZpcnN0IGFycmVzdC4KCiAgICAgICAgICAgIEEgY2FyZCBnYW1lIGJlaGluZCBhIGxpdmVyeSBzdGFibGUuCgogICAgICAgICAgICBBIHlvdW5nIG1hbiBydW5uaW5nIGJldHdlZW4gdGhlIGhvcnNlcy4KCiAgICAgICAgICAgIFNpbGFzIGNhdGNoaW5nIGhpbSBuZWFyIHRoZSBjb3JyYWwuCgogICAgICAgICAgICBUaGUgeW91bmcgbWFuIGxhdWdoaW5nIGFzIFNpbGFzIHN0cnVnZ2xlZCB3aXRoIHRoZSBoYW5kY3VmZnMuCgogICAgICAgICAgICAmcXVvdDtGaXJzdCBkYXk/JnF1b3Q7IHRoZSBwcmlzb25lciBoYWQgYXNrZWQuCgogICAgICAgICAgICAmcXVvdDtJcyBpdCB0aGF0IG9idmlvdXM/JnF1b3Q7CgogICAgICAgICAgICAmcXVvdDtZb3UgbG9ja2VkIG9uZSBjdWZmIGFyb3VuZCB5b3Vyc2VsZi4mcXVvdDsKCiAgICAgICAgICAgIFRoZSBtZW1vcnkgdmFuaXNoZWQuCgogICAgICAgICAgICBTaWxhcyByZW1lbWJlcmVkIHdlYXJpbmcgdGhlIGJhZGdlLgoKICAgICAgICAgICAgSGUgcmVtZW1iZXJlZCB0aGUgYXJyZXN0IGhhZCBtYXR0ZXJlZCB0byBoaW0uCgogICAgICAgICAgICBIZSBjb3VsZCBubyBsb25nZXIgcmVtZW1iZXIgdGhlIHByaXNvbmVyJiMzOTtzIG5hbWUsIGZhY2UsIG9yIGNyaW1lLgoKICAgICAgICAgICAgU2l4IGNhcnRyaWRnZXMgZHJvcHBlZCBpbnRvIHRoZSBlbXB0eSBjYXNoIGRyYXdlci4KCiAgICAgICAgICAgIFRoZXkgc291bmRlZCBoZWF2aWVyIHRoYW4gYW1tdW5pdGlvbiBzaG91bGQuCiAgICAgICAgJmx0OyZsdDsvcmVwbGFjZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0Oy9saW5rJmd0OyZndDsKCiAgICAmbHQ7YnImZ3Q7Jmx0O2JyJmd0OwoKICAgICZsdDsmbHQ7bGluayAmcXVvdDtUcmFkZSB0aGUgbWVtb3J5IG9mIHlvdXIgaG9yc2UmIzM5O3MgbmFtZSZxdW90OyZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJGFtbW9EZWNpc2lvbiA9ICZxdW90O3BhaWQmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRzdG9yZUFtbW9UYWtlbiA9IHRydWUmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRtZW1vcnlTdXJyZW5kZXJlZCA9IHRydWUmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRsb3N0TWVtb3J5ID0gJnF1b3Q7aG9yc2VOYW1lJnF1b3Q7Jmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkYW1tbyArPSA2Jmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkY29tcGFzc2lvbiAtPSAxJmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkZmVhciArPSAxJmd0OyZndDsKCiAgICAgICAgJmx0OyZsdDtyZXBsYWNlICZxdW90OyNhbW1vLXJlc3VsdCZxdW90OyZndDsmZ3Q7CiAgICAgICAgICAgIFNpbGFzIGxvb2tlZCB0aHJvdWdoIHRoZSB3aW5kb3cuCgogICAgICAgICAgICBIaXMgaG9yc2Ugd2FpdGVkIGF0IHRoZSBoaXRjaGluZyByYWlsLgoKICAgICAgICAgICAgU2lsYXMgcmVtZW1iZXJlZCB0aGUgZGF5IHRoZXkgbWV0LiBIZSByZW1lbWJlcmVkIHRoZSBhbmltYWwgcmVmdXNpbmcgdGhyZWUgb3RoZXIgcmlkZXJzLCBiaXRpbmcgYSBzdGFibGUgaGFuZCwgYW5kIGNhbG1seSBhbGxvd2luZyBTaWxhcyB0byBhcHByb2FjaC4KCiAgICAgICAgICAgIEhlIHJlbWVtYmVyZWQgY2hvb3NpbmcgYSBuYW1lLgoKICAgICAgICAgICAgVGhlIG5hbWUgZGlzYXBwZWFyZWQgYmVmb3JlIGhlIGNvdWxkIHNwZWFrIGl0LgoKICAgICAgICAgICAgT3V0c2lkZSwgdGhlIGhvcnNlIHJhaXNlZCBpdHMgaGVhZC4KCiAgICAgICAgICAgIFNpbGFzIGZlbHQgYW4gdW5leHBlY3RlZCB3ZWlnaHQgc2V0dGxlIGluIGhpcyBjaGVzdC4KCiAgICAgICAgICAgICZxdW90O1NvcnJ5LCZxdW90OyBoZSBzYWlkLgoKICAgICAgICAgICAgVGhlIGhvcnNlIHR1cm5lZCBhd2F5LgoKICAgICAgICAgICAgU2l4IGNhcnRyaWRnZXMgYXBwZWFyZWQgaW5zaWRlIHRoZSBhbW11bml0aW9uIGJveC4KICAgICAgICAmbHQ7Jmx0Oy9yZXBsYWNlJmd0OyZndDsKICAgICZsdDsmbHQ7L2xpbmsmZ3Q7Jmd0OwoKICAgICZsdDticiZndDsmbHQ7YnImZ3Q7CgogICAgJmx0OyZsdDtsaW5rICZxdW90O1JlZnVzZSB0aGUgdHJhZGUmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRhbW1vRGVjaXNpb24gPSAmcXVvdDtyZWZ1c2VkJnF1b3Q7Jmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkdHJ1dGggKz0gMSZndDsmZ3Q7CgogICAgICAgICZsdDsmbHQ7cmVwbGFjZSAmcXVvdDsjYW1tby1yZXN1bHQmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICAgICBTaWxhcyBjbG9zZWQgdGhlIGNhYmluZXQuCgogICAgICAgICAgICAmcXVvdDtJJiMzOTt2ZSBsb3N0IGVub3VnaCB3aXRob3V0IHZvbHVudGVlcmluZy4mcXVvdDsKCiAgICAgICAgICAgIFRoZSB1bnNlZW4gc3RvcmVrZWVwZXIgc2lnaGVkLgoKICAgICAgICAgICAgSXQgd2FzIGEgcmVtYXJrYWJseSBqdWRnbWVudGFsIHNpZ2ggZm9yIHNvbWVvbmUgdW53aWxsaW5nIHRvIHNob3cgaGltc2VsZi4KCiAgICAgICAgICAgIFRoZSBwcmljZSBjYXJkIGZvbGRlZCBpdHNlbGYgaW4gaGFsZi4KCiAgICAgICAgICAgIEEgZmluYWwgbWVzc2FnZSBhcHBlYXJlZCBvbiB0aGUgb3V0c2lkZToKCiAgICAgICAgICAgIFNFTlNJQkxFIENVU1RPTUVSUyBBUkUgVEVSUklCTEUgRk9SIEJVU0lORVNTLgogICAgICAgICZsdDsmbHQ7L3JlcGxhY2UmZ3Q7Jmd0OwogICAgJmx0OyZsdDsvbGluayZndDsmZ3Q7CgombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgombHQ7ZGl2IGlkPSZxdW90O2FtbW8tcmVzdWx0JnF1b3Q7Jmd0OyZsdDsvZGl2Jmd0OwoKJmx0O2JyJmd0OwoKW1tBc2sgZm9yIHdhdGVyLSZndDtHZW5lcmFsIFN0b3JlIC0gV2F0ZXJdXQoKW1tJbnNwZWN0IHRoZSBjYXNoIHJlZ2lzdGVyLSZndDtHZW5lcmFsIFN0b3JlIC0gUmVnaXN0ZXJdXQoKW1tSZXR1cm4gdG8gdGhlIHN0b3JlIGVudHJhbmNlLSZndDtHZW5lcmFsIFN0b3JlIC0gRW50cmFuY2VdXQoKW1tSZXR1cm4gdG8gTWFpbiBTdHJlZXQtJmd0O01haW4gU3RyZWV0XV08L3R3LXBhc3NhZ2VkYXRhPjx0dy1wYXNzYWdlZGF0YSBwaWQ9IjM1IiBuYW1lPSJHZW5lcmFsIFN0b3JlIC0gUmVnaXN0ZXIiIHRhZ3M9ImFjdDEgdG93biBjaG9pY2Ugc3RvcmUgY2x1ZSIgcG9zaXRpb249IjEyMzcuNSwxMjUwIiBzaXplPSIxMDAsMTAwIj4mbHQ7Jmx0O3NldCAkbG9jYXRpb24gPSAmcXVvdDtQZXJkaXRpb24gR2VuZXJhbCBTdG9yZSZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRvYmplY3RpdmUgPSAmcXVvdDtQYXkgdGhlIHJlZ2lzdGVyJiMzOTtzIHByaWNlJnF1b3Q7Jmd0OyZndDsKClNpbGFzIGFwcHJvYWNoZWQgdGhlIGJyYXNzIGNhc2ggcmVnaXN0ZXIuCgpJdHMgZGlzcGxheSBzdGlsbCByZWFkOgoKT05FIEFQT0xPR1kKCkhlIHByZXNzZWQgdGhlIGZpcnN0IGtleS4KClRoZSByZWdpc3RlciByYW5nLgoKVGhlIGRyYXdlciBvcGVuZWQuCgpJbnNpZGUgbGF5IGEgZm9sZGVkIHJlY2VpcHQuCgpTaWxhcyB1bmZvbGRlZCBpdC4KClBFUkRJVElPTiBHRU5FUkFMIFNUT1JFICAKQUNDT1VOVCBIT0xERVI6IFNJTEFTIFdBUkQgIApJVEVNOiBPTkUgR0xBU1MgT0YgV0FURVIgIApSRUNJUElFTlQ6IEpPTkFTIEhBUlQgIApQQVlNRU5UIFJFQ0VJVkVEOiBOTyAgCkJBTEFOQ0UgRFVFOiBPTkUgQVBPTE9HWQoKVGhlIHJlY2VpcHQgYm9yZSBTaWxhcyYjMzk7cyBzaWduYXR1cmUuCgpUaGUgaGFuZHdyaXRpbmcgd2FzIGhpcy4KClRoZSBtZW1vcnkgd2FzIG5vdC4KCiZsdDsmbHQ7aWYgbm90ICRyZWdpc3Rlckluc3BlY3RlZCZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkcmVnaXN0ZXJJbnNwZWN0ZWQgPSB0cnVlJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICR0cnV0aCArPSAxJmd0OyZndDsKJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKV29yZHMgYXBwZWFyZWQgYWNyb3NzIHRoZSBjb3VudGVyOgoKQU4gQVBPTE9HWSBNVVNUIE5BTUUgVEhFIEhBUk0uCgombHQ7Jmx0O2lmICRhcG9sb2d5RGVjaXNpb24gaXMgJnF1b3Q7am9uYXMmcXVvdDsmZ3Q7Jmd0OwoKICAgIFRoZSByZWdpc3RlciBzdG9vZCBvcGVuLgoKICAgIFRoZSByZWNlaXB0IGJlYXJpbmcgSm9uYXMgSGFydCYjMzk7cyBuYW1lIGhhZCBiZWVuIHN0YW1wZWQ6CgogICAgQUNDRVBURUQgQVMgVEVTVElNT05ZICAKICAgIE5PVCBBQ0NFUFRFRCBBUyBQQVlNRU5UIElOIEZVTEwKCiZsdDsmbHQ7ZWxzZWlmICRhcG9sb2d5RGVjaXNpb24gaXMgJnF1b3Q7ZWxpemEmcXVvdDsmZ3Q7Jmd0OwoKICAgIEEgc21hbGwgaGFuZHByaW50IHJlbWFpbmVkIGluIHRoZSBkdXN0IGJlc2lkZSB0aGUgcmVnaXN0ZXIuCgogICAgVGhlIHJlY2VpcHQgaGFkIGJlZW4gZm9sZGVkIGludG8gdGhlIHNoYXBlIG9mIGEgd2hpdGUgZmxvd2VyLgoKJmx0OyZsdDtlbHNlaWYgJGFwb2xvZ3lEZWNpc2lvbiBpcyAmcXVvdDtnZW5lcmFsJnF1b3Q7Jmd0OyZndDsKCiAgICBUaGUgcmVnaXN0ZXIgZGlzcGxheSBjb250aW51ZWQgdG8gcmVhZDoKCiAgICBJTlNVRkZJQ0lFTlQKCiZsdDsmbHQ7ZWxzZWlmICRhcG9sb2d5RGVjaXNpb24gaXMgJnF1b3Q7cmVmdXNlZCZxdW90OyZndDsmZ3Q7CgogICAgVGhlIHJlZ2lzdGVyIGRyYXdlciByZW1haW5lZCBjbG9zZWQuCgogICAgU29tZXRoaW5nIGluc2lkZSBpdCB0YXBwZWQgb25jZSB3aGVuZXZlciBTaWxhcyBsb29rZWQgYXdheS4KCiZsdDsmbHQ7ZWxzZSZndDsmZ3Q7CgogICAgJmx0OyZsdDtsaW5rICZxdW90O0Fwb2xvZ2l6ZSB0byBKb25hcyBmb3IgbGVhdmluZyZxdW90OyZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJGFwb2xvZ3lEZWNpc2lvbiA9ICZxdW90O2pvbmFzJnF1b3Q7Jmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkYXBvbG9neUFjY2VwdGVkID0gdHJ1ZSZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJGNvbXBhc3Npb24gKz0gMSZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJHRydXRoICs9IDImZ3Q7Jmd0OwoKICAgICAgICAmbHQ7Jmx0O3JlcGxhY2UgJnF1b3Q7I3JlZ2lzdGVyLXJlc3VsdCZxdW90OyZndDsmZ3Q7CiAgICAgICAgICAgIFNpbGFzIHBsYWNlZCBib3RoIGhhbmRzIG9uIHRoZSBjb3VudGVyLgoKICAgICAgICAgICAgJnF1b3Q7Sm9uYXMgSGFydCwgSSBhbSBzb3JyeSBJIGxlZnQgYmVmb3JlIHRoZSB2ZXJkaWN0LiZxdW90OwoKICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHJlbWFpbmVkIHNpbGVudC4KCiAgICAgICAgICAgIFNpbGFzIGNvbnRpbnVlZC4KCiAgICAgICAgICAgICZxdW90O0kgaGFkIGRvdWJ0cy4gSSB0b2xkIG15c2VsZiB0aGV5IHdlcmUgbm90IGV2aWRlbmNlLiBJIHRvbGQgbXlzZWxmIHN0YXlpbmcgd291bGQgY2hhbmdlIG5vdGhpbmcuJnF1b3Q7CgogICAgICAgICAgICBUaGUga2V5cyBiZWdhbiBsb3dlcmluZyBvbmUgYXQgYSB0aW1lLgoKICAgICAgICAgICAgUyBUIEEgWQoKICAgICAgICAgICAgJnF1b3Q7SSBsZWZ0IHlvdSBhbG9uZSB3aXRoIG1lbiBJIGFscmVhZHkgc3VzcGVjdGVkIHdlcmUgd3JvbmcuJnF1b3Q7CgogICAgICAgICAgICBUaGUgcmVnaXN0ZXIgcmFuZy4KCiAgICAgICAgICAgIEEgcnViYmVyIHN0YW1wIHJvc2UgZnJvbSB0aGUgZHJhd2VyIGFuZCBzdHJ1Y2sgdGhlIHJlY2VpcHQuCgogICAgICAgICAgICBBQ0NFUFRFRCBBUyBURVNUSU1PTlkgIAogICAgICAgICAgICBOT1QgQUNDRVBURUQgQVMgUEFZTUVOVCBJTiBGVUxMCgogICAgICAgICAgICAmcXVvdDtGYWlyIGVub3VnaCwmcXVvdDsgU2lsYXMgc2FpZC4KCiAgICAgICAgICAgIEEgbWFuJiMzOTtzIHZvaWNlIGFuc3dlcmVkIGZyb20gdGhlIHJlYXIgb2YgdGhlIHN0b3JlLgoKICAgICAgICAgICAgJnF1b3Q7SXQmIzM5O3MgYSBzdGFydC4mcXVvdDsKICAgICAgICAmbHQ7Jmx0Oy9yZXBsYWNlJmd0OyZndDsKICAgICZsdDsmbHQ7L2xpbmsmZ3Q7Jmd0OwoKICAgICZsdDticiZndDsmbHQ7YnImZ3Q7CgogICAgJmx0OyZsdDtpZiAkY2hpbGROYW1lS25vd24mZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7bGluayAmcXVvdDtBcG9sb2dpemUgdG8gRWxpemEgZm9yIGZhaWxpbmcgSm9uYXMmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICAgICAmbHQ7Jmx0O3NldCAkYXBvbG9neURlY2lzaW9uID0gJnF1b3Q7ZWxpemEmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICAgICAmbHQ7Jmx0O3NldCAkYXBvbG9neUFjY2VwdGVkID0gdHJ1ZSZndDsmZ3Q7CiAgICAgICAgICAgICZsdDsmbHQ7c2V0ICRjb21wYXNzaW9uICs9IDImZ3Q7Jmd0OwogICAgICAgICAgICAmbHQ7Jmx0O3NldCAkdHJ1dGggKz0gMSZndDsmZ3Q7CgogICAgICAgICAgICAmbHQ7Jmx0O3JlcGxhY2UgJnF1b3Q7I3JlZ2lzdGVyLXJlc3VsdCZxdW90OyZndDsmZ3Q7CiAgICAgICAgICAgICAgICAmcXVvdDtFbGl6YSBIYXJ0LCZxdW90OyBTaWxhcyBzYWlkLCAmcXVvdDtJIGFtIHNvcnJ5IEkgZmFpbGVkIHlvdXIgYnJvdGhlci4mcXVvdDsKCiAgICAgICAgICAgICAgICBBIGNoaWxkJiMzOTtzIHJlZmxlY3Rpb24gYXBwZWFyZWQgaW4gdGhlIGJyYXNzIHJlZ2lzdGVyLgoKICAgICAgICAgICAgICAgIFNpbGFzIGNvdWxkIG5vdCBzZWUgaGVyIGZhY2UgYmVuZWF0aCB0aGUgdmVpbC4KCiAgICAgICAgICAgICAgICAmcXVvdDtIZSBkaWQgc29tZXRoaW5nIHdyb25nLCZxdW90OyBTaWxhcyBjb250aW51ZWQuICZxdW90O0kgbGV0IHRoYXQgYmVjb21lIGFuIGV4Y3VzZSBub3QgdG8gYXNrIHdoZXRoZXIgdGhlIHB1bmlzaG1lbnQgd2FzIGFsc28gd3JvbmcuJnF1b3Q7CgogICAgICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIGRyYXdlciBvcGVuZWQuCgogICAgICAgICAgICAgICAgSW5zaWRlIGxheSB0aGUgdGluIGN1cC4KCiAgICAgICAgICAgICAgICBUaGlzIHRpbWUsIGl0IHdhcyBmdWxsLgoKICAgICAgICAgICAgICAgIEVsaXphJiMzOTtzIHJlZmxlY3Rpb24gbGlmdGVkIGl0LgoKICAgICAgICAgICAgICAgIFRoZSBjdXAgZGlzYXBwZWFyZWQgZnJvbSB0aGUgZHJhd2VyLgoKICAgICAgICAgICAgICAgIEEgbmV3IG1lc3NhZ2UgYXBwZWFyZWQgb24gdGhlIHJlY2VpcHQ6CgogICAgICAgICAgICAgICAgU0hFIEhFQVJEIFlPVS4KCiAgICAgICAgICAgICAgICBCZW5lYXRoIGl0LCBpbiBzbWFsbGVyIHdyaXRpbmc6CgogICAgICAgICAgICAgICAgSEUgTVVTVCBIRUFSIFlPVSBUT08uCiAgICAgICAgICAgICZsdDsmbHQ7L3JlcGxhY2UmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7L2xpbmsmZ3Q7Jmd0OwoKICAgICAgICAmbHQ7YnImZ3Q7Jmx0O2JyJmd0OwogICAgJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKICAgICZsdDsmbHQ7bGluayAmcXVvdDtPZmZlciBhIGdlbmVyYWwgYXBvbG9neSBmb3Igd2hhdCBoYXBwZW5lZCZxdW90OyZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJGFwb2xvZ3lEZWNpc2lvbiA9ICZxdW90O2dlbmVyYWwmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRmZWFyICs9IDEmZ3Q7Jmd0OwoKICAgICAgICAmbHQ7Jmx0O3JlcGxhY2UgJnF1b3Q7I3JlZ2lzdGVyLXJlc3VsdCZxdW90OyZndDsmZ3Q7CiAgICAgICAgICAgICZxdW90O0kmIzM5O20gc29ycnkgZm9yIHdoYXQgaGFwcGVuZWQsJnF1b3Q7IFNpbGFzIHNhaWQuCgogICAgICAgICAgICBUaGUgcmVnaXN0ZXIgcmFuZy4KCiAgICAgICAgICAgIEZvciBvbmUgaG9wZWZ1bCBzZWNvbmQsIG5vdGhpbmcgZWxzZSBvY2N1cnJlZC4KCiAgICAgICAgICAgIFRoZW4gdGhlIGRpc3BsYXkgY2hhbmdlZDoKCiAgICAgICAgICAgIElOU1VGRklDSUVOVAoKICAgICAgICAgICAgQSBzZWNvbmQgbGluZSBhcHBlYXJlZDoKCiAgICAgICAgICAgICZxdW90O1dIQVQgSEFQUEVORUQmcXVvdDsgSVMgTk9UIEEgUEVSU09OLgoKICAgICAgICAgICAgU2lsYXMgbG9va2VkIGFyb3VuZCB0aGUgZW1wdHkgc3RvcmUuCgogICAgICAgICAgICAmcXVvdDtZb3UgY291bGQgaGF2ZSBtZW50aW9uZWQgdGhlIHdvcmRpbmcgcmVxdWlyZW1lbnRzLiZxdW90OwoKICAgICAgICAgICAgQSBzbWFsbCBiZWxsIHJhbmcgYmVoaW5kIHRoZSBjb3VudGVyLgoKICAgICAgICAgICAgU29tZWhvdywgaXQgc291bmRlZCBzbXVnLgogICAgICAgICZsdDsmbHQ7L3JlcGxhY2UmZ3Q7Jmd0OwogICAgJmx0OyZsdDsvbGluayZndDsmZ3Q7CgogICAgJmx0O2JyJmd0OyZsdDticiZndDsKCiAgICAmbHQ7Jmx0O2xpbmsgJnF1b3Q7UmVmdXNlIHRvIGFwb2xvZ2l6ZSB0byBhbiBlbXB0eSBzdG9yZSZxdW90OyZndDsmZ3Q7CiAgICAgICAgJmx0OyZsdDtzZXQgJGFwb2xvZ3lEZWNpc2lvbiA9ICZxdW90O3JlZnVzZWQmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRyaWdpZGl0eSArPSAyJmd0OyZndDsKCiAgICAgICAgJmx0OyZsdDtyZXBsYWNlICZxdW90OyNyZWdpc3Rlci1yZXN1bHQmcXVvdDsmZ3Q7Jmd0OwogICAgICAgICAgICBTaWxhcyBmb2xkZWQgdGhlIHJlY2VpcHQgYW5kIHJldHVybmVkIGl0IHRvIHRoZSBkcmF3ZXIuCgogICAgICAgICAgICAmcXVvdDtJJiMzOTttIG5vdCBhcG9sb2dpemluZyB0byBhIGNhc2ggcmVnaXN0ZXIuJnF1b3Q7CgogICAgICAgICAgICBUaGUgZHJhd2VyIHNsYW1tZWQgc2h1dC4KCiAgICAgICAgICAgIFRoZSBrZXlzIGJlZ2FuIG1vdmluZy4KCiAgICAgICAgICAgIE4gTyBUICAKICAgICAgICAgICAgVCBIIEUgIAogICAgICAgICAgICBSIEUgRyBJIFMgVCBFIFIKCiAgICAgICAgICAgIFNpbGFzIHN0ZXBwZWQgYmFjay4KCiAgICAgICAgICAgICZxdW90O1BvaW50IHRha2VuLiZxdW90OwoKICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHJhbmcgb25jZS4KCiAgICAgICAgICAgIFRoZSBkcmF3ZXIgcmVtYWluZWQgY2xvc2VkLgogICAgICAgICZsdDsmbHQ7L3JlcGxhY2UmZ3Q7Jmd0OwogICAgJmx0OyZsdDsvbGluayZndDsmZ3Q7CgombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgombHQ7ZGl2IGlkPSZxdW90O3JlZ2lzdGVyLXJlc3VsdCZxdW90OyZndDsmbHQ7L2RpdiZndDsKCiZsdDticiZndDsKCiZsdDsmbHQ7aWYgJGFwb2xvZ3lBY2NlcHRlZCZndDsmZ3Q7CiAgICBbW0FzayB3aG8ga2VwdCB0aGUgYWNjb3VudC0mZ3Q7R2VuZXJhbCBTdG9yZSAtIFN0b3Jla2VlcGVyXV0KJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKW1tBc2sgZm9yIHdhdGVyLSZndDtHZW5lcmFsIFN0b3JlIC0gV2F0ZXJdXQoKW1tFeGFtaW5lIHRoZSBhbW11bml0aW9uLSZndDtHZW5lcmFsIFN0b3JlIC0gQW1tdW5pdGlvbl1dCgpbW1JldHVybiB0byB0aGUgc3RvcmUgZW50cmFuY2UtJmd0O0dlbmVyYWwgU3RvcmUgLSBFbnRyYW5jZV1dCgpbW1JldHVybiB0byBNYWluIFN0cmVldC0mZ3Q7TWFpbiBTdHJlZXRdXTwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMzYiIG5hbWU9IkNodXJjaCAtIFRvdWNoIHRoZSBWZWlsIiB0YWdzPSJhY3QxIGNodXJjaCB0b3duIG1lbW9yeSIgcG9zaXRpb249IjE1MDAsMTYyNSIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7Q2h1cmNoIG9mIFNhaW50IE1lcmN5JnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJG9iamVjdGl2ZSA9ICZxdW90O0V4YW1pbmUgRWxpemEmIzM5O3MgdmVpbCZxdW90OyZndDsmZ3Q7CgpTaWxhcyByZWFjaGVkIGZvciB0aGUgdmVpbC4KClRoZSBtb21lbnQgaGlzIGZpbmdlcnMgdG91Y2hlZCB0aGUgY2xvdGgsIHRoZSBjaHVyY2ggZGlzYXBwZWFyZWQuCgpIZSBzdG9vZCBpbiBhIHNtYWxsIHJvb20gbGl0IGJ5IGEgc2luZ2xlIG9pbCBsYW1wLgoKQSBnaXJsIGxheSBiZW5lYXRoIGEgcGF0Y2hlZCBibGFua2V0LiBIZXIgaGFpciBjbHVuZyBkYW1wbHkgdG8gaGVyIGZvcmVoZWFkLiBKb25hcyBzYXQgYmVzaWRlIHRoZSBiZWQsIGhvbGRpbmcgYSBjdXAgb2Ygd2F0ZXIgc2hlIHdhcyB0b28gd2VhayB0byBkcmluay4KCiZxdW90O0kmIzM5O2xsIGZpbmQgdGhlIG1vbmV5LCZxdW90OyBKb25hcyB0b2xkIGhlci4KClRoZSBnaXJsIG9wZW5lZCBoZXIgZXllcy4KCiZxdW90O1lvdSBzYWlkIHRoYXQgeWVzdGVyZGF5LiZxdW90OwoKJnF1b3Q7SSBtZWFuIGl0IGJldHRlciB0b2RheS4mcXVvdDsKClRoZSBzY2VuZSBzaGlmdGVkLgoKSm9uYXMgc3Rvb2QgaW5zaWRlIHRoZSBzaGVyaWZmJiMzOTtzIG9mZmljZSBhcmd1aW5nIHdpdGggTWFyc2hhbCBHcmF2ZXMuIEEgcGF5cm9sbCBzdHJvbmdib3ggcmVzdGVkIG9wZW4gb24gdGhlIGRlc2suCgpTaWxhcyBzdG9vZCBuZWFyIHRoZSBkb29yLgoKWW91bmdlci4KCldlYXJpbmcgYmFkZ2UgbnVtYmVyIHRoaXJ0ZWVuLgoKSm9uYXMgaGVsZCBvdXQgYm90aCBoYW5kcy4KCiZxdW90O0kgZGlkbiYjMzk7dCByb2IgYW55Ym9keSwmcXVvdDsgaGUgc2FpZC4gJnF1b3Q7SSBvbmx5IHRvbGQgdGhlbSB3aGVuIHRoZSBwYXlyb2xsIHdhZ29uIHdhcyBjb21pbmcuJnF1b3Q7CgpHcmF2ZXMgc3RydWNrIHRoZSBkZXNrIHdpdGggaGlzIHBhbG0uCgomcXVvdDtNZW4gZGllZC4mcXVvdDsKCiZxdW90O0kgZGlkbiYjMzk7dCBrbm93IHRoZXkgd291bGQga2lsbCBhbnlvbmUuJnF1b3Q7CgpKb25hcyBsb29rZWQgdG93YXJkIFNpbGFzLgoKU2lsYXMgcmVtZW1iZXJlZCB0aGF0IGxvb2suCgpOb3QgaW5ub2NlbmNlLgoKTm90IGd1aWx0LgoKSG9wZS4KClRoZSBjaHVyY2ggcmV0dXJuZWQuCgpTaWxhcyBwdWxsZWQgaGlzIGhhbmQgYXdheSBmcm9tIHRoZSB2ZWlsLgoKJmx0OyZsdDtpZiBub3QgJHZlaWxUb3VjaGVkJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICR2ZWlsVG91Y2hlZCA9IHRydWUmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGVjaG8gKz0gMSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkdHJ1dGggKz0gMSZndDsmZ3Q7CiZsdDsmbHQ7L2lmJmd0OyZndDsKClRoZSBtZW1vcnkgaGFkIGFuc3dlcmVkIG9uZSBxdWVzdGlvbiBhbmQgY29tcGxpY2F0ZWQgZXZlcnkgb3RoZXIgb25lLgoKSm9uYXMgaGFkIGhlbHBlZCB0aGUgcm9iYmVycy4KCkhlIGhhZCBub3QgaW50ZW5kZWQgYW55b25lIHRvIGRpZS4KClRoZSBkaXN0aW5jdGlvbiB3b3VsZCBub3QgaGF2ZSBtYXR0ZXJlZCB0byBHcmF2ZXMuCgpTaWxhcyB3YXMgYmVnaW5uaW5nIHRvIHVuZGVyc3RhbmQgdGhhdCBpdCBzaG91bGQgaGF2ZSBtYXR0ZXJlZCB0byBoaW0uCgpbW1NwZWFrIEVsaXphJiMzOTtzIG5hbWUtJmd0O0NodXJjaCAtIFNwZWFrIEVsaXphXV0KCltbQXBwcm9hY2ggdGhlIGNvbmZlc3Npb25hbC0mZ3Q7Q2h1cmNoIC0gQ29uZmVzc2lvbmFsXV0KCltbUmV0dXJuIHRvIHRoZSBjaHVyY2ggZW50cmFuY2UtJmd0O0NodXJjaCAtIEVudHJhbmNlXV08L3R3LXBhc3NhZ2VkYXRhPjx0dy1wYXNzYWdlZGF0YSBwaWQ9IjM3IiBuYW1lPSJDaHVyY2ggLSBTcGVhayBFbGl6YSIgdGFncz0iYWN0MSB0b3duIGNodXJjaCBtZW1vcnkiIHBvc2l0aW9uPSIxNzUwLDE2NTAiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O0NodXJjaCBvZiBTYWludCBNZXJjeSZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRvYmplY3RpdmUgPSAmcXVvdDtBY2tub3dsZWRnZSBFbGl6YSBIYXJ0JnF1b3Q7Jmd0OyZndDsKCiZxdW90O0VsaXphIEhhcnQsJnF1b3Q7IFNpbGFzIHNhaWQuCgpUaGUgY2FuZGxlIGZsYW1lIGxlYW5lZCB0b3dhcmQgaGltLgoKQSBjaGlsZCBhcHBlYXJlZCBiZXNpZGUgdGhlIGFsdGFyLgoKU2hlIHdvcmUgYSBzaW1wbGUgd2hpdGUgZHJlc3MgYW5kIHN0b29kIGJhcmVmb290IGluIHRoZSBkdXN0LiBUaGUgdmVpbCBjb3ZlcmVkIGhlciBmYWNlLCB0aG91Z2ggU2lsYXMgY291bGQgc2VlIHRoZSBvdXRsaW5lIG9mIGhlciBmZWF0dXJlcyBiZW5lYXRoIGl0LgoKU2hlIGhlbGQgb25lIGhhbmQgYmVoaW5kIGhlciBiYWNrLgoKJnF1b3Q7Sm9uYXMgc2FpZCB5b3Ugd2VyZSBhIGdvb2QgbGF3bWFuLiZxdW90OwoKU2lsYXMgbG9va2VkIHRvd2FyZCB0aGUgZW1wdHkgcGV3cy4KCiZxdW90O0pvbmFzIHdhcyBtaXN0YWtlbiBhYm91dCBzZXZlcmFsIHRoaW5ncy4mcXVvdDsKCiZxdW90O1dhcyBoZSBtaXN0YWtlbiBhYm91dCB5b3U/JnF1b3Q7CgpTaWxhcyBoYWQgZmFjZWQgYXJtZWQgbWVuIHdobyBhc2tlZCBlYXNpZXIgcXVlc3Rpb25zLgoKJmx0OyZsdDtpZiAkY29uZmVzc2lvbk1hZGUmZ3Q7Jmd0OwogICAgJnF1b3Q7WWVzLCZxdW90OyBTaWxhcyBzYWlkLiAmcXVvdDtBdCBsZWFzdCB3aGVuIGl0IG1hdHRlcmVkLiZxdW90OwoKICAgIEVsaXphIGxvd2VyZWQgaGVyIGhlYWQuCgogICAgJnF1b3Q7VGhhdCBpcyBub3QgdGhlIHNhbWUgYXMgYmVpbmcgYmFkIGZvcmV2ZXIuJnF1b3Q7CgogICAgJnF1b3Q7WW91IHNvdW5kIHZlcnkgY2VydGFpbi4mcXVvdDsKCiAgICAmcXVvdDtJIGhhdmUgaGFkIGEgbG9uZyB0aW1lIHRvIHRoaW5rIGFib3V0IGl0LiZxdW90OwombHQ7Jmx0O2Vsc2VpZiAkY29uZmVzc2lvblJlZnVzZWQmZ3Q7Jmd0OwogICAgJnF1b3Q7WW91ciBicm90aGVyIG1hZGUgaGlzIGNob2ljZXMsJnF1b3Q7IFNpbGFzIHNhaWQuCgogICAgVGhlIGNhbmRsZSBkaW1tZWQuCgogICAgJnF1b3Q7U28gZGlkIHlvdSwmcXVvdDsgRWxpemEgYW5zd2VyZWQuCiZsdDsmbHQ7ZWxzZSZndDsmZ3Q7CiAgICAmcXVvdDtJIGRvbiYjMzk7dCBrbm93LCZxdW90OyBTaWxhcyBzYWlkLgoKICAgIEVsaXphIGNvbnNpZGVyZWQgdGhhdC4KCiAgICAmcXVvdDtUaGF0IGlzIG1vcmUgaG9uZXN0IHRoYW4gd2hhdCB5b3Ugc2FpZCBhdCB0aGUgdHJpYWwuJnF1b3Q7CiZsdDsmbHQ7L2lmJmd0OyZndDsKClNoZSBicm91Z2h0IGhlciBoaWRkZW4gaGFuZCBmb3J3YXJkLgoKQSBzbWFsbCB0aW4gY3VwIHJlc3RlZCBpbiBpdC4KClRoZSBjdXAgY29udGFpbmVkIGNsZWFyIHdhdGVyLgoKU2lsYXMgYWNjZXB0ZWQgaXQuCgpDb2xkIHNwcmVhZCB0aHJvdWdoIGhpcyBmaW5nZXJzLCBidXQgd2hlbiBoZSByYWlzZWQgdGhlIGN1cCB0byBoaXMgbW91dGgsIGl0IHdhcyBlbXB0eS4KCkVsaXphIGRpc2FwcGVhcmVkLgoKVGhlIGN1cCByZW1haW5lZC4KCldvcmRzIGhhZCBiZWVuIHNjcmF0Y2hlZCBpbnRvIGl0cyBib3R0b206CgpNRVJDWSBJUyBOT1QgQUNRVUlUVEFMLgoKW1tUYWtlIHRoZSBjdXAgdG8gdGhlIGdlbmVyYWwgc3RvcmUtJmd0O0dlbmVyYWwgU3RvcmUgLSBXYXRlcl1dCgpbW0FwcHJvYWNoIHRoZSBjb25mZXNzaW9uYWwtJmd0O0NodXJjaCAtIENvbmZlc3Npb25hbF1dCgpbW1JldHVybiB0byB0aGUgY2h1cmNoIGVudHJhbmNlLSZndDtDaHVyY2ggLSBFbnRyYW5jZV1dCgpbW1JldHVybiB0byBNYWluIFN0cmVldC0mZ3Q7TWFpbiBTdHJlZXRdXTwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iMzgiIG5hbWU9IlN0dWRpbyAtIENhbGwgTGlsYSIgdGFncz0iYWN0MSB0b3duIHN0dWRpbyBtZW1vcnkiIHBvc2l0aW9uPSIxMDUwLDEzNzUiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O0NyYW5lIFBob3RvZ3JhcGhpYyBTdHVkaW8mcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkb2JqZWN0aXZlID0gJnF1b3Q7U3BlYWsgd2l0aCBMaWxhIENyYW5lJnF1b3Q7Jmd0OyZndDsKCiZxdW90O0xpbGEgQ3JhbmUsJnF1b3Q7IFNpbGFzIGNhbGxlZC4KClRoZSByZWQgbGFtcCB3ZW50IGRhcmsuCgpXaGl0ZSBsaWdodCBmbGFzaGVkIHRocm91Z2ggdGhlIHN0dWRpby4KCkZvciBvbmUgaW5zdGFudCwgU2lsYXMgc2F3IGV2ZXJ5IHBlcnNvbiB3aG9zZSBwaG90b2dyYXBoIGh1bmcgb24gdGhlIHdhbGxzIHN0YW5kaW5nIGluIHRoZSByb29tLgoKTWluZXJzIGNyb3dkZWQgYmVzaWRlIHRoZSBkb29yLgoKRmFtaWxpZXMgb2NjdXBpZWQgdGhlIGNoYWlycy4KCkNoaWxkcmVuIHNhdCBjcm9zcy1sZWdnZWQgb24gdGhlIGZsb29yLgoKTGF3bWVuIHN0b29kIHdpdGggdGhlaXIgaGF0cyBoZWxkIGFnYWluc3QgdGhlaXIgY2hlc3RzLgoKVGhlbiBhbm90aGVyIGZsYXNoIGZpbGxlZCB0aGUgcm9vbS4KCkV2ZXJ5b25lIGRpc2FwcGVhcmVkIGV4Y2VwdCBvbmUgd29tYW4uCgpMaWxhIENyYW5lIHN0b29kIGJlc2lkZSB0aGUgY2FtZXJhLgoKU2hlIHdvcmUgYSBkYXJrIHRyYXZlbGluZyBkcmVzcyB3aXRoIGl0cyBzbGVldmVzIHJvbGxlZCB0byB0aGUgZWxib3dzLiBBIHdoaXRlIHZlaWwgaHVuZyBsb29zZWx5IGFyb3VuZCBoZXIgc2hvdWxkZXJzIHJhdGhlciB0aGFuIGNvdmVyaW5nIGhlciBmYWNlLgoKU2hlIGxvb2tlZCBleGFjdGx5IGFzIHNoZSBkaWQgaW4gdGhlIHBob3RvZ3JhcGhzLgoKVGhhdCB3YXMgdHJvdWJsaW5nIGJlY2F1c2Ugc29tZSBvZiB0aG9zZSBwaG90b2dyYXBocyBoYWQgYmVlbiB0YWtlbiBtb3JlIHRoYW4gdGhpcnR5IHllYXJzIGFwYXJ0LgoKJnF1b3Q7U2lsYXMgV2FyZCwmcXVvdDsgc2hlIHNhaWQuCgomcXVvdDtZb3Uga25vdyBtZS4mcXVvdDsKCiZxdW90O0kgcGhvdG9ncmFwaGVkIHlvdS4mcXVvdDsKCiZxdW90O0kgZG9uJiMzOTt0IHJlbWVtYmVyIHNpdHRpbmcgZm9yIGEgcG9ydHJhaXQuJnF1b3Q7CgomcXVvdDtZb3Ugd2VyZW4mIzM5O3Qgc2l0dGluZy4mcXVvdDsKCkxpbGEgZ2xhbmNlZCB0b3dhcmQgdGhlIGNhbWVyYS4KClNpbGFzIGxvb2tlZCBhdCBpdHMgcG9saXNoZWQgYnJhc3MgbGVucy4KCkhpcyByZWZsZWN0aW9uIGRpZCBub3QgYXBwZWFyIGluIHRoZSBnbGFzcy4KCiZsdDsmbHQ7aWYgbm90ICRsaWxhTmFtZWQmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGxpbGFOYW1lZCA9IHRydWUmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJG5hbWVzUmVtZW1iZXJlZCArPSAxJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRsaWxhS25vd24gPSB0cnVlJmd0OyZndDsKJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKJnF1b3Q7WW91IHRvb2sgdGhlIHBob3RvZ3JhcGggb2YgR3JhdmVzLCZxdW90OyBTaWxhcyBzYWlkLgoKJmx0OyZsdDtpZiAkZ2xhc3NOZWdhdGl2ZUZvdW5kJmd0OyZndDsKICAgICZxdW90O0kgdG9vayBtYW55IHBob3RvZ3JhcGhzIG9mIEdyYXZlcy4mcXVvdDsKCiAgICAmcXVvdDtUaGUgb25lIGF0IFJlZCBNZXNhLiZxdW90OwoKICAgIExpbGEmIzM5O3MgZXhwcmVzc2lvbiBkaWQgbm90IGNoYW5nZS4KCiAgICAmcXVvdDtUaGF0IHdhcyB0aGUgb25seSBvbmUgaGUgdHJpZWQgdG8ga2lsbCBtZSBmb3IuJnF1b3Q7CiZsdDsmbHQ7ZWxzZSZndDsmZ3Q7CiAgICAmcXVvdDtJIHRvb2sgbWFueSBwaG90b2dyYXBocyBvZiBHcmF2ZXMuJnF1b3Q7CgogICAgJnF1b3Q7V2FzIG9uZSBvZiB0aGVtIGV2aWRlbmNlPyZxdW90OwoKICAgICZxdW90O0V2ZXJ5dGhpbmcgaXMgZXZpZGVuY2UgaWYgdGhlIHBlcnNvbiBsb29raW5nIGF0IGl0IGlzIHdpbGxpbmcgdG8gc2VlLiZxdW90OwombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgpTaWxhcyBnbGFuY2VkIHRvd2FyZCB0aGUgd2FsbHMuCgomcXVvdDtBcmUgdGhlc2UgcGVvcGxlIGRlYWQ/JnF1b3Q7CgomcXVvdDtTb21lLiZxdW90OwoKJnF1b3Q7QW5kIHRoZSBvdGhlcnM/JnF1b3Q7CgomcXVvdDtBbHNvIHNvbWUuJnF1b3Q7CgomcXVvdDtUaGF0IGFuc3dlciB3YXMgaW1wcmVzc2l2ZWx5IHVuaGVscGZ1bC4mcXVvdDsKCiZxdW90O0l0IHdhcyBhY2N1cmF0ZS4mcXVvdDsKCkxpbGEgbW92ZWQgYmVoaW5kIHRoZSBjYW1lcmEuCgpBIGJsYWNrIGNsb3RoIGh1bmcgb3ZlciB0aGUgYmFjay4gU2hlIGxpZnRlZCBpdCBhbmQgbW90aW9uZWQgZm9yIFNpbGFzIHRvIGxvb2sgYmVuZWF0aC4KClRoZSBjYW1lcmEgZGlkIG5vdCBwb2ludCB0b3dhcmQgdGhlIHN0dWRpby4KClRocm91Z2ggaXRzIGxlbnMsIFNpbGFzIHNhdyBNYWluIFN0cmVldCBiZW5lYXRoIGEgbmlnaHQgc2t5LiBUaGUgYnVpbGRpbmdzIHdlcmUgcmVzdG9yZWQsIGxhbnRlcm5zIGJ1cm5lZCBpbiBldmVyeSB3aW5kb3csIGFuZCBodW5kcmVkcyBvZiB0b3duc3Blb3BsZSBjcm93ZGVkIHRoZSByb2FkLgoKQXQgdGhlIGNlbnRlciBzdG9vZCB0aGUgZmFjZWxlc3MgZmlndXJlIFNpbGFzIGhhZCBzZWVuIGVhcmxpZXIuCgpUaGUgSnVkZ2UuCgomcXVvdDtQZXJkaXRpb24gR3VsY2ggZG9lcyBub3QgcHJlc2VydmUgdGhlIGRlYWQsJnF1b3Q7IExpbGEgc2FpZC4gJnF1b3Q7SXQgcHJlc2VydmVzIHdoYXQgdGhlIGRlYWQgd2VyZSBkZW5pZWQuJnF1b3Q7CgomcXVvdDtXaGF0IHdlcmUgdGhleSBkZW5pZWQ/JnF1b3Q7CgomcXVvdDtBbiBob25lc3QgYWNjb3VudC4mcXVvdDsKClRoZSBKdWRnZSB0dXJuZWQgdG93YXJkIHRoZSBjYW1lcmEuCgpBbHRob3VnaCBpdCBoYWQgbm8gdmlzaWJsZSBleWVzLCBTaWxhcyBrbmV3IGl0IGhhZCBzZWVuIGhpbS4KCiZsdDsmbHQ7aWYgbm90ICRqdWRnZVNlZW4mZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGp1ZGdlU2VlbiA9IHRydWUmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGVjaG8gKz0gMSZndDsmZ3Q7CiZsdDsmbHQ7L2lmJmd0OyZndDsKClRoZSB2aWV3IHRocm91Z2ggdGhlIGxlbnMgdmFuaXNoZWQuCgpMaWxhIGxvd2VyZWQgdGhlIGNsb3RoLgoKJnF1b3Q7VGhlIHRvd24gaGFzIGJlZ3VuIGl0cyBleGFtaW5hdGlvbiwmcXVvdDsgc2hlIHNhaWQuCgomcXVvdDtFeGFtaW5hdGlvbiBzb3VuZHMgZnJpZW5kbGllciB0aGFuIHRyaWFsLiZxdW90OwoKJnF1b3Q7SXQgaXMgbm90LiZxdW90OwoKW1tBc2sgd2h5IExpbGEgcmVtYWluZWQtJmd0O1N0dWRpbyAtIFdoeSBMaWxhIFJlbWFpbmVkXV0KCiZsdDsmbHQ7aWYgJGdsYXNzTmVnYXRpdmVGb3VuZCZndDsmZ3Q7CiAgICBbW0FzayB3aHkgR3JhdmVzIHdhcyBtZWV0aW5nIHRoZSByb2JiZXJzLSZndDtTdHVkaW8gLSBHcmF2ZXMgUGhvdG9ncmFwaF1dCiZsdDsmbHQ7L2lmJmd0OyZndDsKCltbQXNrIGFib3V0IHRoZSBKdWRnZS0mZ3Q7U3R1ZGlvIC0gQXNrIEFib3V0IEp1ZGdlXV0KCltbUmV0dXJuIHRvIHRoZSBzdHVkaW8gZW50cmFuY2UtJmd0O1N0dWRpbyAtIEVudHJhbmNlXV0KCltbUmV0dXJuIHRvIE1haW4gU3RyZWV0LSZndDtNYWluIFN0cmVldF1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSIzOSIgbmFtZT0iU3R1ZGlvIC0gR2xhc3MgTmVnYXRpdmUiIHRhZ3M9ImFjdDEgdG93biBzdHVkaW8gbWVtb3J5IGNsdWUiIHBvc2l0aW9uPSIxMTc1LDEzNzUiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O0NyYW5lIFBob3RvZ3JhcGhpYyBTdHVkaW8gRGFya3Jvb20mcXVvdDsmZ3Q7Jmd0OwombHQ7Jmx0O3NldCAkb2JqZWN0aXZlID0gJnF1b3Q7U3R1ZHkgdGhlIHBob3RvZ3JhcGhpYyBldmlkZW5jZSZxdW90OyZndDsmZ3Q7CgpTaWxhcyBwbGFjZWQgdGhlIGNyYWNrZWQgbmVnYXRpdmUgb24gdGhlIHdvcmt0YWJsZS4KClR3byBmcmFjdHVyZXMgY3Jvc3NlZCBNYXJzaGFsIEdyYXZlcyYjMzk7cyBpbWFnZS4KCk5laXRoZXIgb2JzY3VyZWQgaGlzIGZhY2UuCgpUaGUgcGF5cm9sbCB3YWdvbiBzdG9vZCBuZWFyIFJlZCBNZXNhLCBzZXZlcmFsIG1pbGVzIGZyb20gdGhlIHJvdXRlIGxpc3RlZCBpbiB0aGUgb2ZmaWNpYWwgcmVwb3J0LiBHcmF2ZXMgYXBwZWFyZWQgdG8gYmUgc3BlYWtpbmcgd2l0aCB0aGUgbWFza2VkIHJpZGVycyByYXRoZXIgdGhhbiBjb25mcm9udGluZyB0aGVtLgoKT25lIHJpZGVyIGhlbGQgdGhlIHN0b2xlbiBzdHJvbmdib3guCgpUaGUgb3RoZXIgaGVsZCBHcmF2ZXMmIzM5O3MgcmVpbnMuCgpUaGlzIHdhcyBub3QgYSBwaG90b2dyYXBoIG9mIGEgbGF3bWFuIGFycml2aW5nIGFmdGVyIGEgcm9iYmVyeS4KCkl0IHdhcyBhIHBob3RvZ3JhcGggb2YgYSBtZWV0aW5nLgoKU2lsYXMgZXhhbWluZWQgdGhlIGVkZ2Ugb2YgdGhlIHBsYXRlLgoKQSBkYXRlIGhhZCBiZWVuIGV0Y2hlZCBpbnRvIHRoZSBnbGFzczoKCkFQUklMIDE0LCAxODc2CgpUaGUgcm9iYmVyeSBoYWQgb2NjdXJyZWQgb24gQXByaWwgMTYuCgpUd28gZGF5cyBsYXRlci4KClNpbGFzIGZlbHQgdGhlIG9sZCBjYXNlIHJlYXJyYW5naW5nIGl0c2VsZiBpbnNpZGUgaGlzIG1lbW9yeS4KCkpvbmFzIGhhZCBrbm93biB3aGVuIHRoZSBwYXlyb2xsIHdhZ29uIHdvdWxkIHRyYXZlbC4KCkdyYXZlcyBoYWQga25vd24gd2hlcmUgaXQgd291bGQgYmUgZGl2ZXJ0ZWQuCgpKb25hcyBoYWQgc3VwcGxpZWQgaW5mb3JtYXRpb24uCgpHcmF2ZXMgaGFkIHN1cHBsaWVkIG9wcG9ydHVuaXR5LgoKT25seSBvbmUgb2YgdGhlbSBoYWQgYmVlbiBwbGFjZWQgb24gdHJpYWwuCgombHQ7Jmx0O2lmIG5vdCAkZmluYWxQaG90b2dyYXBoU2VlbiZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkZmluYWxQaG90b2dyYXBoU2VlbiA9IHRydWUmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJHRydXRoICs9IDImZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJHJpZ2lkaXR5IC09IDEmZ3Q7Jmd0OwombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgpBIHNlY29uZCBpbWFnZSBiZWdhbiBhcHBlYXJpbmcgb24gdGhlIGJsYW5rIHBhcGVyIGluIHRoZSBkZXZlbG9waW5nIHRyYXkuCgpJdCBzaG93ZWQgTGlsYSBzdGFuZGluZyBpbiB0aGUgY291cnRyb29tIGNvcnJpZG9yLgoKU2hlIGhlbGQgdGhlIGdsYXNzIG5lZ2F0aXZlIGFnYWluc3QgaGVyIGNoZXN0LgoKVGhlIGNvdXJ0aG91c2UgZG9vcnMgd2VyZSBjbG9zZWQuCgpBIGhhbmR3cml0dGVuIGNhcHRpb24gZm9ybWVkIGJlbmVhdGggaGVyOgoKU0hFIEFSUklWRUQgQkVGT1JFIFRIRSBWRVJESUNULgoKQW5vdGhlciBzZW50ZW5jZSBhcHBlYXJlZCBiZWxvdyBpdDoKCllPVSBMRUZUIEJFRk9SRSBTSEUgRElELgoKU2lsYXMgcmVzdGVkIGJvdGggaGFuZHMgb24gdGhlIHRhYmxlLgoKSGUgaGFkIHNwZW50IGVsZXZlbiB5ZWFycyB0ZWxsaW5nIGhpbXNlbGYgdGhhdCBub3RoaW5nIGhlIGNvdWxkIGhhdmUgZG9uZSB3b3VsZCBoYXZlIG1hdHRlcmVkLgoKVGhlIHBob3RvZ3JhcGggc3VnZ2VzdGVkIHRoYXQgaGUgaGFkIG5ldmVyIHJlbWFpbmVkIGxvbmcgZW5vdWdoIHRvIGZpbmQgb3V0LgoKJmx0OyZsdDtpZiAkY29uZmVzc2lvbk1hZGUmZ3Q7Jmd0OwogICAgVGhlIGFkbWlzc2lvbiBpbiB0aGUgY2h1cmNoIHJldHVybmVkIHRvIGhpbS4KCiAgICBGZWFyIGhhZCBleHBsYWluZWQgd2h5IGhlIGxlZnQuCgogICAgTGlsYSYjMzk7cyBwaG90b2dyYXBoIHJldmVhbGVkIHdoYXQgbGVhdmluZyBoYWQgY29zdC4KJmx0OyZsdDtlbHNlaWYgJGNvbmZlc3Npb25SZWZ1c2VkJmd0OyZndDsKICAgIEhpcyBjbGFpbSB0aGF0IHN0YXlpbmcgd291bGQgaGF2ZSBjaGFuZ2VkIG5vdGhpbmcgc291bmRlZCBsZXNzIGNvbnZpbmNpbmcgaW4gdGhlIHJlZCBsaWdodC4KJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKW1tDYWxsIExpbGEgQ3JhbmUgYnkgbmFtZS0mZ3Q7U3R1ZGlvIC0gQ2FsbCBMaWxhXV0KCltbUmV0dXJuIHRvIHRoZSBkYXJrcm9vbSBlbnRyYW5jZS0mZ3Q7U3R1ZGlvIC0gRGFya3Jvb21dXQoKW1tSZXR1cm4gdG8gTWFpbiBTdHJlZXQtJmd0O01haW4gU3RyZWV0XV08L3R3LXBhc3NhZ2VkYXRhPjx0dy1wYXNzYWdlZGF0YSBwaWQ9IjQwIiBuYW1lPSJTdHVkaW8gLSBXaHkgTGlsYSBSZW1haW5lZCIgdGFncz0iYWN0MSB0b3duIHN0dWRpbyBtZW1vcnkiIHBvc2l0aW9uPSI5MjUsMTUwMCIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7Q3JhbmUgUGhvdG9ncmFwaGljIFN0dWRpbyZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRvYmplY3RpdmUgPSAmcXVvdDtMZWFybiB3aHkgTGlsYSByZW1haW5lZCZxdW90OyZndDsmZ3Q7CgomcXVvdDtXaHkgZGlkIHlvdSBzdGF5PyZxdW90OyBTaWxhcyBhc2tlZC4KCkxpbGEgcmVzdGVkIG9uZSBoYW5kIG9uIHRoZSBjYW1lcmEuCgomcXVvdDtTb21lb25lIGhhZCB0byByZWNvcmQgd2hhdCBoYXBwZW5lZC4mcXVvdDsKCiZxdW90O1lvdSBjb3VsZCBoYXZlIHRha2VuIHRoZSBldmlkZW5jZSB0byBhbm90aGVyIG1hcnNoYWwuJnF1b3Q7CgomcXVvdDtJIGRpZC4mcXVvdDsKCiZxdW90O0FuZD8mcXVvdDsKCiZxdW90O0hlIGdhdmUgaXQgYmFjay4mcXVvdDsKCiZxdW90O1doeT8mcXVvdDsKCiZxdW90O0hlIGhhZCByZWNlaXZlZCBhIGxldHRlciBmcm9tIEdyYXZlcy4mcXVvdDsKClNpbGFzIHdhaXRlZC4KCkxpbGEgZGlkIG5vdCBjb250aW51ZS4KCiZxdW90O1doYXQgZGlkIHRoZSBsZXR0ZXIgc2F5PyZxdW90OwoKJnF1b3Q7SSBuZXZlciBzYXcgaXQuIEkgb25seSBzYXcgd2hhdCBpdCBjaGFuZ2VkLiZxdW90OwoKU2hlIHdhbGtlZCB0byBhIGNhYmluZXQgYW5kIHJlbW92ZWQgYSBwaG90b2dyYXBoLgoKSXQgc2hvd2VkIGEgdGVycml0b3JpYWwgbWFyc2hhbCBzdGFuZGluZyBiZXNpZGUgYSBkZXNrLiBIZSBoZWxkIHRoZSBSZWQgTWVzYSBuZWdhdGl2ZSBpbiBvbmUgaGFuZCBhbmQgR3JhdmVzJiMzOTtzIHVub3BlbmVkIGxldHRlciBpbiB0aGUgb3RoZXIuCgpJbiB0aGUgbmV4dCBpbWFnZSwgdGhlIG1hcnNoYWwgaGVsZCBvbmx5IHRoZSBsZXR0ZXIuCgpJbiB0aGUgdGhpcmQsIGhlIGJ1cm5lZCB0aGUgbmVnYXRpdmUuCgpTaWxhcyBsb29rZWQgdG93YXJkIHRoZSBjcmFja2VkIGdsYXNzIHBsYXRlIGluIHRoZSBkYXJrcm9vbS4KCiZxdW90O1RoZW4gaG93IGlzIHRoYXQgb25lIHN0aWxsIGhlcmU/JnF1b3Q7CgomcXVvdDtUaGlzIHRvd24gcmVtZW1iZXJzIHdoYXQgbWVuIGRlc3Ryb3kuJnF1b3Q7CgpMaWxhIHBsYWNlZCB0aGUgcGhvdG9ncmFwaCBvbiB0aGUgY291bnRlci4KCiZxdW90O1BlcmRpdGlvbiBHdWxjaCBvZmZlcmVkIHRvIHByZXNlcnZlIG15IGV2aWRlbmNlLiZxdW90OwoKJnF1b3Q7T2ZmZXJlZD8mcXVvdDsKCiZxdW90O0kgZGlkIG5vdCB1bmRlcnN0YW5kIHRoZSBwcmljZS4mcXVvdDsKClNpbGFzIHdhdGNoZWQgdGhlIHBlb3BsZSBpbiB0aGUgd2FsbCBwb3J0cmFpdHMuCgpTZXZlcmFsIGhhZCB0dXJuZWQgdGhlaXIgaGVhZHMgdG93YXJkIExpbGEuCgomcXVvdDtXaGF0IGRpZCBpdCBjb3N0PyZxdW90OwoKJnF1b3Q7TGVhdmluZy4mcXVvdDsKClRoZSB3b3JkIHJlbWFpbmVkIGluIHRoZSByb29tIGFmdGVyIGhlciB2b2ljZSBzdG9wcGVkLgoKJmx0OyZsdDtpZiAkY29tcGFzc2lvbiAmZ3Q7ICRyaWdpZGl0eSZndDsmZ3Q7CiAgICAmcXVvdDtJJiMzOTttIHNvcnJ5LCZxdW90OyBTaWxhcyBzYWlkLgoKICAgIExpbGEgbG9va2VkIGF0IGhpbS4KCiAgICAmcXVvdDtUaGF0IGlzIGEgYmVnaW5uaW5nLiBEbyBub3QgbWlzdGFrZSBpdCBmb3IgcGF5bWVudC4mcXVvdDsKCiAgICAmbHQ7Jmx0O2lmIG5vdCAkYXNrZWRXaHlMaWxhU3RheWVkJmd0OyZndDsKICAgICAgICAmbHQ7Jmx0O3NldCAkY29tcGFzc2lvbiArPSAxJmd0OyZndDsKICAgICZsdDsmbHQ7L2lmJmd0OyZndDsKJmx0OyZsdDtlbHNlJmd0OyZndDsKICAgICZxdW90O1lvdSBjaG9zZSB0byByZW1haW4uJnF1b3Q7CgogICAgJnF1b3Q7WWVzLCZxdW90OyBMaWxhIHNhaWQuICZxdW90O0FzIHlvdSBjaG9zZSB0byBsZWF2ZS4mcXVvdDsKCiAgICBUaGUgcG9ydHJhaXRzIHR1cm5lZCBiYWNrIHRvd2FyZCB0aGVpciBjYW1lcmFzLgoKICAgICZsdDsmbHQ7aWYgbm90ICRhc2tlZFdoeUxpbGFTdGF5ZWQmZ3Q7Jmd0OwogICAgICAgICZsdDsmbHQ7c2V0ICRyaWdpZGl0eSArPSAxJmd0OyZndDsKICAgICZsdDsmbHQ7L2lmJmd0OyZndDsKJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKJmx0OyZsdDtzZXQgJGFza2VkV2h5TGlsYVN0YXllZCA9IHRydWUmZ3Q7Jmd0OwoKW1tBc2sgYWJvdXQgTWFyc2hhbCBHcmF2ZXMtJmd0O1N0dWRpbyAtIEdyYXZlcyBQaG90b2dyYXBoXV0KCltbQXNrIGFib3V0IHRoZSBKdWRnZS0mZ3Q7U3R1ZGlvIC0gQXNrIEFib3V0IEp1ZGdlXV0KCltbUmV0dXJuIHRvIHRoZSBzdHVkaW8gZW50cmFuY2UtJmd0O1N0dWRpbyAtIEVudHJhbmNlXV08L3R3LXBhc3NhZ2VkYXRhPjx0dy1wYXNzYWdlZGF0YSBwaWQ9IjQxIiBuYW1lPSJTdHVkaW8gLSBHcmF2ZXMgUGhvdG9ncmFwaCIgdGFncz0iYWN0MSB0b3duIHN0dWRpbyBjbHVlIiBwb3NpdGlvbj0iMTA1MCwxNTAwIiBzaXplPSIxMDAsMTAwIj4mbHQ7Jmx0O3NldCAkbG9jYXRpb24gPSAmcXVvdDtDcmFuZSBQaG90b2dyYXBoaWMgU3R1ZGlvJnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJG9iamVjdGl2ZSA9ICZxdW90O1F1ZXN0aW9uIHRoZSBldmlkZW5jZSBhZ2FpbnN0IEdyYXZlcyZxdW90OyZndDsmZ3Q7CgpTaWxhcyBwbGFjZWQgdGhlIGNyYWNrZWQgbmVnYXRpdmUgYmV0d2VlbiBoaW1zZWxmIGFuZCBMaWxhLgoKJnF1b3Q7V2h5IHdhcyBHcmF2ZXMgbWVldGluZyB0aGUgbWVuIHdobyByb2JiZWQgdGhlIHBheXJvbGwgd2Fnb24/JnF1b3Q7CgomcXVvdDtIZSBhcnJhbmdlZCB0aGUgZGl2ZXJzaW9uLiZxdW90OwoKJnF1b3Q7RGlkIGhlIGFycmFuZ2UgdGhlIHJvYmJlcnk/JnF1b3Q7CgomcXVvdDtJIHBob3RvZ3JhcGhlZCB3aGF0IGhhcHBlbmVkLiBJIGNhbm5vdCBwaG90b2dyYXBoIHdoYXQgYSBtYW4gaW50ZW5kZWQuJnF1b3Q7CgpUaGUgYW5zd2VyIGlycml0YXRlZCBTaWxhcyBwYXJ0bHkgYmVjYXVzZSBpdCByZXNlbWJsZWQgc29tZXRoaW5nIGhlIG1pZ2h0IG9uY2UgaGF2ZSBzYWlkLgoKJnF1b3Q7Sm9uYXMgdG9sZCB0aGUgcm9iYmVycyB3aGVuIHRoZSB3YWdvbiB3b3VsZCB0cmF2ZWwuJnF1b3Q7CgomcXVvdDtZZXMuJnF1b3Q7CgomcXVvdDtUaGVuIGhlIHdhcyBpbnZvbHZlZC4mcXVvdDsKCiZxdW90O1llcy4mcXVvdDsKCiZxdW90O01lbiBkaWVkLiZxdW90OwoKJnF1b3Q7WWVzLiZxdW90OwoKTGlsYSYjMzk7cyBhZ3JlZW1lbnQgbGVmdCBTaWxhcyB3aXRoIG5vd2hlcmUgY29tZm9ydGFibGUgdG8gZGlyZWN0IGhpcyBhbmdlci4KCiZxdW90O0dyYXZlcyBuZWVkZWQgc29tZW9uZSBjb25uZWN0ZWQgdG8gdGhlIHJvYmJlcnMsJnF1b3Q7IHNoZSBjb250aW51ZWQuICZxdW90O0pvbmFzIGhhZCBzcG9rZW4gdG8gdGhlbS4gSGUgaGFkIGFjY2VwdGVkIG1vbmV5LiBIZSBoYWQgY29uY2VhbGVkIHdoYXQgaGUga25ldy4mcXVvdDsKCiZxdW90O1RoYXQgbWFkZSBoaW0gdXNlZnVsLiZxdW90OwoKJnF1b3Q7SXQgbWFkZSBoaW0gYmVsaWV2YWJsZS4mcXVvdDsKClNpbGFzIGxvb2tlZCBhdCB0aGUgbmVnYXRpdmUuCgomcXVvdDtBbmQgR3JhdmVzPyZxdW90OwoKJnF1b3Q7R3JhdmVzIGJlbGlldmVkIG9yZGVyIHJlcXVpcmVkIGV4YW1wbGVzLiBKb25hcyB3YXMgcG9vciwgZnJpZ2h0ZW5lZCwgYW5kIGFscmVhZHkgZ3VpbHR5IG9mIGVub3VnaCB0cnV0aCB0byBzdXBwb3J0IGEgbGFyZ2VyIGxpZS4mcXVvdDsKClRoZSBwaG90b2dyYXBoaWMgcGxhdGUgZGFya2VuZWQuCgpNYXJzaGFsIEdyYXZlcyYjMzk7cyBpbWFnZSB0dXJuZWQgdG93YXJkIFNpbGFzLgoKSGlzIG1vdXRoIG1vdmVkLgoKTm8gc291bmQgZW1lcmdlZC4KClRoZW4gd29yZHMgYXBwZWFyZWQgYWxvbmcgdGhlIGJvdHRvbSBvZiB0aGUgZ2xhc3M6CgpBIExBV01BTiBXSE8gRE9VQlRTIFRIRSBMQVcgIApURUFDSEVTIE9USEVSUyBUTyBETyBUSEUgU0FNRS4KClNpbGFzIHJlbWVtYmVyZWQgR3JhdmVzIHNheWluZyB0aG9zZSB3b3Jkcy4KCkhlIHJlbWVtYmVyZWQgYWdyZWVpbmcgd2l0aCBoaW0uCgpBdCBsZWFzdCBhdCBmaXJzdC4KCiZsdDsmbHQ7aWYgbm90ICRncmF2ZXNQaG90b1F1ZXN0aW9uZWQmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGdyYXZlc1Bob3RvUXVlc3Rpb25lZCA9IHRydWUmZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJHRydXRoICs9IDEmZ3Q7Jmd0OwombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgpbW0FzayB3aHkgTGlsYSByZW1haW5lZC0mZ3Q7U3R1ZGlvIC0gV2h5IExpbGEgUmVtYWluZWRdXQoKW1tBc2sgYWJvdXQgdGhlIEp1ZGdlLSZndDtTdHVkaW8gLSBBc2sgQWJvdXQgSnVkZ2VdXQoKW1tSZXR1cm4gdG8gdGhlIGRhcmtyb29tLSZndDtTdHVkaW8gLSBEYXJrcm9vbV1dCgpbW1JldHVybiB0byBNYWluIFN0cmVldC0mZ3Q7TWFpbiBTdHJlZXRdXTwvdHctcGFzc2FnZWRhdGE+PHR3LXBhc3NhZ2VkYXRhIHBpZD0iNDIiIG5hbWU9IlN0dWRpbyAtIEFzayBBYm91dCBKdWRnZSIgdGFncz0iYWN0MSB0b3duIHN0dWRpbyBqdWRnbWVudCIgcG9zaXRpb249IjExNzUsMTUwMCIgc2l6ZT0iMTAwLDEwMCI+Jmx0OyZsdDtzZXQgJGxvY2F0aW9uID0gJnF1b3Q7Q3JhbmUgUGhvdG9ncmFwaGljIFN0dWRpbyZxdW90OyZndDsmZ3Q7CiZsdDsmbHQ7c2V0ICRvYmplY3RpdmUgPSAmcXVvdDtMZWFybiBhYm91dCB0aGUgSnVkZ2UmcXVvdDsmZ3Q7Jmd0OwoKJnF1b3Q7V2hhdCBpcyB0aGUgSnVkZ2U/JnF1b3Q7IFNpbGFzIGFza2VkLgoKTGlsYSBiZWdhbiBhcnJhbmdpbmcgZ2xhc3MgcGxhdGVzIG9uIHRoZSB3b3JrdGFibGUuCgomcXVvdDtBIHF1ZXN0aW9uIHdpdGggYSBzaGFwZS4mcXVvdDsKCiZxdW90O1RoYXQgaXMgbm90IGFuIGFuc3dlci4mcXVvdDsKCiZxdW90O0l0IGlzIHRoZSBhbnN3ZXIgSSBoYXZlLiZxdW90OwoKU2hlIGhlbGQgdXAgdGhlIGZpcnN0IHBsYXRlLgoKSXQgc2hvd2VkIHRoZSBmaWd1cmUgb3V0c2lkZSB0aGUgY2h1cmNoLgoKVGhlIHNlY29uZCBzaG93ZWQgaXQgc2VhdGVkIGJlaGluZCB0aGUgc2hlcmlmZiYjMzk7cyBkZXNrLgoKVGhlIHRoaXJkIHNob3dlZCBpdCBzdGFuZGluZyBvbiB0aGUgZ2FsbG93cy4KCkl0cyBoZWlnaHQgY2hhbmdlZCBiZXR3ZWVuIHBob3RvZ3JhcGhzLiBJdHMgY2xvdGhpbmcgY2hhbmdlZC4gRXZlbiBpdHMgc2hhZG93IGZlbGwgaW4gZGlmZmVyZW50IGRpcmVjdGlvbnMuCgpPbmx5IHRoZSBhYnNlbmNlIG9mIGEgZmFjZSByZW1haW5lZCBjb25zaXN0ZW50LgoKJnF1b3Q7V2FzIGl0IGV2ZXIgaHVtYW4/JnF1b3Q7IFNpbGFzIGFza2VkLgoKJnF1b3Q7UGVyaGFwcyBtb3JlIHRoYW4gb25jZS4mcXVvdDsKCiZxdW90O0RvZXMgaXQgZGVjaWRlIHdobyBpcyBndWlsdHk/JnF1b3Q7CgomcXVvdDtOby4mcXVvdDsKClNpbGFzIHdhaXRlZC4KCkxpbGEgcGxhY2VkIHRoZSBwbGF0ZXMgc2lkZSBieSBzaWRlLgoKJnF1b3Q7SXQgZGVjaWRlcyB3aGV0aGVyIHRoZSBndWlsdHkgdW5kZXJzdGFuZCB3aGF0IHRoZXkgZGlkLiZxdW90OwoKJnF1b3Q7VGhhdCBzb3VuZHMgbGlrZSBhIGRpc3RpbmN0aW9uIGludmVudGVkIGJ5IHNvbWVvbmUgd2hvIGVuam95cyBsb25nIHRyaWFscy4mcXVvdDsKCiZxdW90O1RoZSBKdWRnZSBoYXMgaGFkIHZlcnkgZmV3IGNvbXBsYWludHMuJnF1b3Q7CgomcXVvdDtUaGUgZGVmZW5kYW50cyBhcmVuJiMzOTt0IGtub3duIGZvciB3cml0aW5nIGxldHRlcnMgYWZ0ZXJ3YXJkLiZxdW90OwoKRm9yIHRoZSBmaXJzdCB0aW1lLCBzb21ldGhpbmcgY2xvc2UgdG8gYW11c2VtZW50IGVudGVyZWQgTGlsYSYjMzk7cyB2b2ljZS4KCiZxdW90O05vLiZxdW90OwoKVGhlIHJlZCBsYW1wIGZsaWNrZXJlZC4KCkEgZm91cnRoIGdsYXNzIHBsYXRlIGFwcGVhcmVkIGJldHdlZW4gdGhlIG90aGVycy4KCkl0IHNob3dlZCBTaWxhcyBzdGFuZGluZyBiZWZvcmUgdGhlIEp1ZGdlLgoKRml2ZSBvYmplY3RzIHJlc3RlZCBvbiBhIHRhYmxlIGJldHdlZW4gdGhlbToKCkEgZGVwdXR5JiMzOTtzIGJhZGdlLgoKQSBzaGVyaWZmJiMzOTtzIGxlZGdlci4KCkEgd2hpdGUgdmVpbC4KCkEgcGhvdG9ncmFwaGljIG5lZ2F0aXZlLgoKQW4gZW1wdHkgdGluIGN1cC4KClRoZSBmaXZlIGNsdWVzLgoKQmVuZWF0aCB0aGUgcGhvdG9ncmFwaCB3ZXJlIHRoZSB3b3JkczoKCkVWSURFTkNFIElTIE5PVCBVTkRFUlNUQU5ESU5HLgoKJmx0OyZsdDtpZiAkY2x1ZXNGb3VuZCAmZ3Q7PSA1Jmd0OyZndDsKICAgIFRoZSBpbWFnZSBhbHRlcmVkLgoKICAgIEEgZG9vciBhcHBlYXJlZCBiZWhpbmQgdGhlIEp1ZGdlLgoKICAgIEl0IHN0b29kIG9wZW4uCgogICAgQmV5b25kIGl0IHdhaXRlZCBhIGNvdXJ0cm9vbSBpbGx1bWluYXRlZCBieSB3aGl0ZSBmaXJlLgoKICAgICZxdW90O1lvdSBoYXZlIGZvdW5kIHRoZSB0b3duJiMzOTtzIGFjY3VzYXRpb25zLCZxdW90OyBMaWxhIHNhaWQuICZxdW90O05vdyB5b3UgbXVzdCBkZWNpZGUgd2hldGhlciB5b3UgYXJlIHByZXBhcmVkIHRvIGhlYXIgaXRzIHdpdG5lc3Nlcy4mcXVvdDsKJmx0OyZsdDtlbHNlJmd0OyZndDsKICAgIFNldmVyYWwgb2JqZWN0cyBpbiB0aGUgcGhvdG9ncmFwaCByZW1haW5lZCBpbmRpc3RpbmN0LgoKICAgICZxdW90O1RoZSB0b3duIGhhcyBub3QgZmluaXNoZWQgcHJlc2VudGluZyBpdHMgZXZpZGVuY2UsJnF1b3Q7IExpbGEgc2FpZC4KJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKJmx0OyZsdDtpZiBub3QgJGFza2VkQWJvdXRKdWRnZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkYXNrZWRBYm91dEp1ZGdlID0gdHJ1ZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkdHJ1dGggKz0gMSZndDsmZ3Q7CiZsdDsmbHQ7L2lmJmd0OyZndDsKCltbUmV0dXJuIHRvIHRoZSBjaGFuZ2luZyBwb3J0cmFpdC0mZ3Q7U3R1ZGlvIC0gU2lsYXMgUG9ydHJhaXRdXQoKW1tSZXR1cm4gdG8gdGhlIHN0dWRpbyBlbnRyYW5jZS0mZ3Q7U3R1ZGlvIC0gRW50cmFuY2VdXQoKW1tSZXR1cm4gdG8gTWFpbiBTdHJlZXQtJmd0O01haW4gU3RyZWV0XV08L3R3LXBhc3NhZ2VkYXRhPjx0dy1wYXNzYWdlZGF0YSBwaWQ9IjQzIiBuYW1lPSJHZW5lcmFsIFN0b3JlIC0gU3RvcmVrZWVwZXIiIHRhZ3M9ImFjdDEgdG93biBzdG9yZSBtZW1vcnkiIHBvc2l0aW9uPSIxMzc1LDE2MjUiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O1BlcmRpdGlvbiBHZW5lcmFsIFN0b3JlJnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJG9iamVjdGl2ZSA9ICZxdW90O0lkZW50aWZ5IHRoZSB1bnNlZW4gc3RvcmVrZWVwZXImcXVvdDsmZ3Q7Jmd0OwoKJnF1b3Q7V2hvIGtlcHQgdGhpcyBhY2NvdW50PyZxdW90OyBTaWxhcyBhc2tlZC4KClRoZSBzaGVsdmVzIGNyZWFrZWQuCgpBIGZpZ3VyZSBhcHBlYXJlZCBhdCB0aGUgZmFyIGVuZCBvZiB0aGUgc3RvcmUuCgpIZSB3YXMgYSBuYXJyb3cgbWFuIHdlYXJpbmcgYSBjYW52YXMgYXByb24gb3ZlciBhIHdoaXRlIHNoaXJ0LiBXaXJlIHNwZWN0YWNsZXMgcmVzdGVkIGxvdyBvbiBoaXMgbm9zZS4gT25lIHNsZWV2ZSBoYWQgYmVlbiBwaW5uZWQgYWJvdmUgdGhlIGVsYm93LgoKU2lsYXMgcmVjb2duaXplZCBoaW0gb25seSBhZnRlciB0aGUgZmlndXJlIHN0ZXBwZWQgaW50byB0aGUgbGlnaHQuCgomcXVvdDtFcGhyYWltIEJlbGwuJnF1b3Q7CgpUaGUgc3RvcmVrZWVwZXIgYWRqdXN0ZWQgaGlzIHNwZWN0YWNsZXMuCgomcXVvdDtUb29rIHlvdSBsb25nIGVub3VnaC4mcXVvdDsKCiZsdDsmbHQ7aWYgbm90ICRzdG9yZWtlZXBlck5hbWVkJmd0OyZndDsKICAgICZsdDsmbHQ7c2V0ICRzdG9yZWtlZXBlck5hbWVkID0gdHJ1ZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkbmFtZXNSZW1lbWJlcmVkICs9IDEmZ3Q7Jmd0OwombHQ7Jmx0Oy9pZiZndDsmZ3Q7CgpFcGhyYWltIEJlbGwgaGFkIHRlc3RpZmllZCBkdXJpbmcgSm9uYXMgSGFydCYjMzk7cyB0cmlhbC4KClNpbGFzIHJlbWVtYmVyZWQgaGltIGFzIG5lcnZvdXMsIGV2YXNpdmUsIGFuZCB1bndpbGxpbmcgdG8gbG9vayBkaXJlY3RseSBhdCB0aGUganVkZ2UuCgomcXVvdDtZb3Ugc2FpZCBKb25hcyBib3VnaHQgc3VwcGxpZXMgZm9yIHRoZSByb2JiZXJzLCZxdW90OyBTaWxhcyBzYWlkLgoKJnF1b3Q7SGUgZGlkLiZxdW90OwoKJnF1b3Q7Um9wZS4gRm9vZC4gQW1tdW5pdGlvbi4mcXVvdDsKCiZxdW90O1llcy4mcXVvdDsKCiZxdW90O1doeSBhcmUgeW91IGtlZXBpbmcgYW4gYWNjb3VudCBmb3IgbWU/JnF1b3Q7CgpFcGhyYWltIHdhbGtlZCBiZWhpbmQgdGhlIGNvdW50ZXIuCgomcXVvdDtCZWNhdXNlIHlvdSBib3VnaHQgdGhlIHdhdGVyLiZxdW90OwoKJnF1b3Q7QnV0IEkgZGlkbiYjMzk7dCBkZWxpdmVyIGl0LiZxdW90OwoKJnF1b3Q7Tm8uJnF1b3Q7CgomcXVvdDtXaHkgZGlkIEkgc2lnbiBhIHJlY2VpcHQgaW4gUGVyZGl0aW9uIEd1bGNoPyBJIGhhZCBuZXZlciBiZWVuIGhlcmUuJnF1b3Q7CgpFcGhyYWltIG9wZW5lZCB0aGUgcmVnaXN0ZXIuCgomcXVvdDtOb3Qgd2hpbGUgeW91IHdlcmUgYWxpdmUuJnF1b3Q7CgpTaWxhcyByZXN0ZWQgb25lIGhhbmQgbmVhciBoaXMgcmV2b2x2ZXIuCgpFcGhyYWltIG5vdGljZWQuCgomcXVvdDtUaGF0IGdlc3R1cmUgbWF5IGNvbWZvcnQgeW91LCZxdW90OyBoZSBzYWlkLCAmcXVvdDtidXQgdGhlIGRlYWQgYXJlIG5vdG9yaW91c2x5IGRpZmZpY3VsdCB0byBkaXNjb3VyYWdlIHdpdGggZmlyZWFybXMuJnF1b3Q7CgomcXVvdDtBcmUgeW91IHNheWluZyBJJiMzOTttIGRlYWQ/JnF1b3Q7CgomcXVvdDtJJiMzOTttIHNheWluZyB0aGUgcXVlc3Rpb24gaGFzIG5vdCBiZWVuIHNldHRsZWQuJnF1b3Q7CgomcXVvdDtCeSB3aG9tPyZxdW90OwoKRXBocmFpbSBsb29rZWQgdG93YXJkIHRoZSBmbG9vci4KClNvbWV0aGluZyBzdHJ1Y2sgd29vZCBiZW5lYXRoIHRoZSBzdG9yZS4KCkEgZ2F2ZWwuCgomcXVvdDtUaGUgSnVkZ2UuJnF1b3Q7CgombHQ7Jmx0O2lmICR3YXRlckRlY2lzaW9uIGlzICZxdW90O2pvbmFzJnF1b3Q7Jmd0OyZndDsKICAgIEVwaHJhaW0gcGxhY2VkIGFuIGVtcHR5IGN1cCBvbiB0aGUgY291bnRlci4KCiAgICAmcXVvdDtZb3UgZmluYWxseSBkZWxpdmVyZWQgdGhlIHRydXRoIGFib3V0IHRoZSB3YXRlci4mcXVvdDsKCiAgICAmcXVvdDtFbGV2ZW4geWVhcnMgbGF0ZS4mcXVvdDsKCiAgICAmcXVvdDtUaGUgdG93biBkb2VzIG5vdCBvYmplY3QgdG8gbGF0ZSBwYXltZW50LiBJdCBvYmplY3RzIHRvIGFjY291bnRzIGJlaW5nIGRlbmllZC4mcXVvdDsKJmx0OyZsdDtlbHNlaWYgJHdhdGVyRGVjaXNpb24gaXMgJnF1b3Q7ZWxpemEmcXVvdDsmZ3Q7Jmd0OwogICAgRXBocmFpbSBwbGFjZWQgYSB3aGl0ZSBmbG93ZXIgb24gdGhlIGNvdW50ZXIuCgogICAgJnF1b3Q7VGhlIGdpcmwgaGVhcmQgeW91LiZxdW90OwoKICAgICZxdW90O0RpZCBKb25hcz8mcXVvdDsKCiAgICAmcXVvdDtOb3QgeWV0LiZxdW90OwombHQ7Jmx0O2Vsc2VpZiAkd2F0ZXJEZWNpc2lvbiBpcyAmcXVvdDtzZWxmJnF1b3Q7Jmd0OyZndDsKICAgIEVwaHJhaW0gZXhhbWluZWQgU2lsYXMgZm9yIGEgbW9tZW50LgoKICAgICZxdW90O1lvdSBkcmFuayBmaXJzdC4mcXVvdDsKCiAgICAmcXVvdDtJJiMzOTttIGFsaXZlLiZxdW90OwoKICAgICZxdW90O1RoYXQgcmVtYWlucyB1bmRlciByZXZpZXcuJnF1b3Q7CiZsdDsmbHQ7L2lmJmd0OyZndDsKClNpbGFzIGxvb2tlZCB0b3dhcmQgdGhlIHJlY2VpcHQuCgomcXVvdDtXaGF0IGhhcHBlbnMgd2hlbiB0aGUgYWNjb3VudCBpcyBzZXR0bGVkPyZxdW90OwoKRXBocmFpbSBjbG9zZWQgdGhlIHJlZ2lzdGVyLgoKJnF1b3Q7WW91IHJlY2VpdmUgYW5vdGhlci4mcXVvdDsKCiZxdW90O09mIGNvdXJzZSBJIGRvLiZxdW90OwoKJnF1b3Q7Tm8gb25lIGVudGVycyBQZXJkaXRpb24gR3VsY2ggb3dpbmcgb25seSBvbmUgdGhpbmcuJnF1b3Q7CgpbW0FzayB3aGF0IEVwaHJhaW0gY29uY2VhbGVkIGF0IHRoZSB0cmlhbC0mZ3Q7R2VuZXJhbCBTdG9yZSAtIEVwaHJhaW0gVGVzdGltb255XV0KCltbSW5zcGVjdCB0aGUgY2FzaCByZWdpc3Rlci0mZ3Q7R2VuZXJhbCBTdG9yZSAtIFJlZ2lzdGVyXV0KCltbUmV0dXJuIHRvIHRoZSBzdG9yZSBlbnRyYW5jZS0mZ3Q7R2VuZXJhbCBTdG9yZSAtIEVudHJhbmNlXV0KCltbUmV0dXJuIHRvIE1haW4gU3RyZWV0LSZndDtNYWluIFN0cmVldF1dPC90dy1wYXNzYWdlZGF0YT48dHctcGFzc2FnZWRhdGEgcGlkPSI0NCIgbmFtZT0iR2VuZXJhbCBTdG9yZSAtIEVwaHJhaW0gVGVzdGltb255IiB0YWdzPSJhY3QxIHRvd24gc3RvcmUgY2x1ZSBtZW1vcnkiIHBvc2l0aW9uPSIxMzc1LDE3NTAiIHNpemU9IjEwMCwxMDAiPiZsdDsmbHQ7c2V0ICRsb2NhdGlvbiA9ICZxdW90O1BlcmRpdGlvbiBHZW5lcmFsIFN0b3JlJnF1b3Q7Jmd0OyZndDsKJmx0OyZsdDtzZXQgJG9iamVjdGl2ZSA9ICZxdW90O1F1ZXN0aW9uIEVwaHJhaW0gQmVsbCYjMzk7cyB0ZXN0aW1vbnkmcXVvdDsmZ3Q7Jmd0OwoKJnF1b3Q7V2hhdCBkaWQgeW91IGNvbmNlYWwgYXQgSm9uYXMmIzM5O3MgdHJpYWw/JnF1b3Q7IFNpbGFzIGFza2VkLgoKRXBocmFpbSByZW1vdmVkIGhpcyBzcGVjdGFjbGVzIGFuZCBwb2xpc2hlZCB0aGVtIG9uIGhpcyBhcHJvbi4KCiZxdW90O1RoZSBwcm9zZWN1dGlvbiBhc2tlZCB3aGV0aGVyIEpvbmFzIHB1cmNoYXNlZCBzdXBwbGllcy4mcXVvdDsKCiZxdW90O1lvdSBzYWlkIHllcy4mcXVvdDsKCiZxdW90O0hlIGRpZC4mcXVvdDsKCiZxdW90O1RoZXkgYXNrZWQgd2hldGhlciB0aGUgc3VwcGxpZXMgY291bGQgaGF2ZSBzdXBwb3J0ZWQgdGhlIHJvYmJlcnkuJnF1b3Q7CgomcXVvdDtUaGV5IGNvdWxkLiZxdW90OwoKJnF1b3Q7VGhleSBhc2tlZCB3aGV0aGVyIEpvbmFzIGtuZXcgdGhlIG1lbiB3aG8gY29tbWl0dGVkIGl0LiZxdW90OwoKJnF1b3Q7SGUga25ldyBvbmUgb2YgdGhlbS4mcXVvdDsKClNpbGFzIHdhaXRlZC4KCkVwaHJhaW0gcHV0IGhpcyBzcGVjdGFjbGVzIGJhY2sgb24uCgomcXVvdDtUaGV5IGRpZCBub3QgYXNrIHdoeSBoZSBwdXJjaGFzZWQgdGhlIHN1cHBsaWVzLiZxdW90OwoKJnF1b3Q7V2h5IGRpZCBoZT8mcXVvdDsKCiZxdW90O0dyYXZlcyB0b2xkIGhpbSB0by4mcXVvdDsKClRoZSBzdG9yZSBzZWVtZWQgdG8gY29udHJhY3QgYXJvdW5kIHRoZW0uCgpTaWxhcyBsZWFuZWQgYWNyb3NzIHRoZSBjb3VudGVyLgoKJnF1b3Q7R3JhdmVzIG9yZGVyZWQgSm9uYXMgdG8gc3VwcGx5IHRoZSByb2JiZXJzPyZxdW90OwoKJnF1b3Q7R3JhdmVzIHRvbGQgaGltIHRoZSBtZW4gd2VyZSBpbmZvcm1hbnRzLiBTYWlkIHRoZXkgd2VyZSBoZWxwaW5nIGV4cG9zZSBhIGxhcmdlciBzY2hlbWUgaW52b2x2aW5nIHN0b2xlbiB0ZXJyaXRvcmlhbCBwYXlyb2xscy4mcXVvdDsKCiZxdW90O0FuZCB5b3Uga25ldyB0aGlzPyZxdW90OwoKJnF1b3Q7Sm9uYXMgdG9sZCBtZS4mcXVvdDsKCiZxdW90O1doeSBkaWRuJiMzOTt0IHlvdSBzYXkgc28gYXQgdGhlIHRyaWFsPyZxdW90OwoKRXBocmFpbSYjMzk7cyBwaW5uZWQgc2xlZXZlIG1vdmVkIHNsaWdodGx5LgoKRm9yIGEgbW9tZW50LCB0aGUgbWlzc2luZyBhcm0gYXBwZWFyZWQgYmVuZWF0aCBpdC4KCkJsb29kIHNvYWtlZCB0aGUgY3VmZi4KClRoZW4gaXQgdmFuaXNoZWQgYWdhaW4uCgomcXVvdDtCZWNhdXNlIEdyYXZlcyBoYWQgYWxyZWFkeSBzaG90IG1lIG9uY2UuJnF1b3Q7CgpTaWxhcyByZW1lbWJlcmVkIHRoZSBvZmZpY2lhbCBleHBsYW5hdGlvbi4KCkVwaHJhaW0gQmVsbCBoYWQgbG9zdCBoaXMgYXJtIGR1cmluZyBhbiBhdHRlbXB0ZWQgcm9iYmVyeSBhdCB0aGUgc3RvcmUuCgomcXVvdDtZb3Ugc2FpZCBhIG1hc2tlZCBtYW4gc2hvdCB5b3UuJnF1b3Q7CgomcXVvdDtJIHNhaWQgdGhlIG1hbiB3b3JlIGEgaGFuZGtlcmNoaWVmIG92ZXIgaGlzIGZhY2UuJnF1b3Q7CgomcXVvdDtHcmF2ZXM/JnF1b3Q7CgpFcGhyYWltIG5vZGRlZC4KCiZxdW90O0hlIGNhbWUgdGhyb3VnaCB0aGUgcmVhciBkb29yIGFmdGVyIEpvbmFzIGxlZnQuIEhlIHRvbGQgbWUgZXhhY3RseSB3aGF0IEkgd291bGQgcmVtZW1iZXIgaW4gY291cnQuJnF1b3Q7CgpTaWxhcyBmZWx0IGFuZ2VyIHJpc2UsIGNsZWFuIGFuZCBpbW1lZGlhdGUuCgpJdCB3YXMgZWFzaWVyIHRoYW4gZ3VpbHQuCgomcXVvdDtXaHkgZGlkbiYjMzk7dCB5b3UgdGVsbCBtZT8mcXVvdDsKCiZxdW90O0kgdHJpZWQuJnF1b3Q7CgomcXVvdDtXaGVuPyZxdW90OwoKJnF1b3Q7VGhlIG1vcm5pbmcgYmVmb3JlIHRoZSB2ZXJkaWN0LiZxdW90OwoKU2lsYXMgcmVtZW1iZXJlZCBhIG1hbiBjYWxsaW5nIGFmdGVyIGhpbSBuZWFyIHRoZSBjb3VydGhvdXNlIHN0ZXBzLgoKSGUgaGFkIG5vdCBzdG9wcGVkLgoKSGUgaGFkIHRob3VnaHQgaXQgd2FzIHNvbWVvbmUgc2Vla2luZyBhIGZhdm9yLgoKT3IgbW9uZXkuCgpPciBtZXJjeS4KCkF0IHRoZSB0aW1lLCBhbGwgdGhyZWUgaGFkIGZlbHQgZXF1YWxseSBpbmNvbnZlbmllbnQuCgombHQ7Jmx0O2lmIG5vdCAkZXBocmFpbVRydXRoS25vd24mZ3Q7Jmd0OwogICAgJmx0OyZsdDtzZXQgJGVwaHJhaW1UcnV0aEtub3duID0gdHJ1ZSZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkdHJ1dGggKz0gMiZndDsmZ3Q7CiAgICAmbHQ7Jmx0O3NldCAkZWNobyArPSAxJmd0OyZndDsKJmx0OyZsdDsvaWYmZ3Q7Jmd0OwoKRXBocmFpbSBvcGVuZWQgdGhlIHJlZ2lzdGVyIGFuZCByZW1vdmVkIGEgc2Vjb25kIHJlY2VpcHQuCgpQRVJESVRJT04gR0VORVJBTCBTVE9SRSAgCkFDQ09VTlQgSE9MREVSOiBTSUxBUyBXQVJEICAKSVRFTTogT05FIFVOSEVBUkQgV0FSTklORyAgCkJBTEFOQ0UgRFVFOiBBVFRFTlRJT04KClNpbGFzIHJlYWQgaXQuCgomcXVvdDtIb3cgZG8gSSBwYXkgdGhhdD8mcXVvdDsKCkVwaHJhaW0gcG9pbnRlZCB0b3dhcmQgdGhlIHN0cmVldC4KCiZxdW90O05leHQgdGltZSBzb21lb25lIGNhbGxzIHlvdXIgbmFtZSwgc3RvcCB3YWxraW5nLiZxdW90OwoKW1tBc2sgYWJvdXQgdGhlIEp1ZGdlLSZndDtTdHVkaW8gLSBBc2sgQWJvdXQgSnVkZ2VdXQoKW1tSZXR1cm4gdG8gRXBocmFpbSBCZWxsLSZndDtHZW5lcmFsIFN0b3JlIC0gU3RvcmVrZWVwZXJdXQoKW1tSZXR1cm4gdG8gdGhlIHN0b3JlIGVudHJhbmNlLSZndDtHZW5lcmFsIFN0b3JlIC0gRW50cmFuY2VdXQoKW1tSZXR1cm4gdG8gTWFpbiBTdHJlZXQtJmd0O01haW4gU3RyZWV0XV08L3R3LXBhc3NhZ2VkYXRhPjwvdHctc3RvcnlkYXRhPg==