PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PHRpdGxlPkV4YW1wbGVzIGFuZCBVc2FnZTwvdGl0bGU+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0icml2ZXQuY3NzIj48bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc2LjEiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkFwYWNoZSBSaXZldCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkFwYWNoZSBSaXZldCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3cmFwbGluZS5odG1sIiB0aXRsZT0id3JhcGxpbmUiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0idGNsX3BhY2thZ2VzLmh0bWwiIHRpdGxlPSJSaXZldCBUY2wgUGFja2FnZXMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ibmF2aGVhZGVyIj48dGFibGUgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIj48dHI+PHRoIGNvbHNwYW49IjMiIGFsaWduPSJjZW50ZXIiPkV4YW1wbGVzIGFuZCBVc2FnZTwvdGg+PC90cj48dHI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJsZWZ0Ij48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IndyYXBsaW5lLmh0bWwiPjxpbWcgc3JjPSJpbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPqA8L3RkPjx0aCB3aWR0aD0iNjAlIiBhbGlnbj0iY2VudGVyIj6gPC90aD48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJ0Y2xfcGFja2FnZXMuaHRtbCI+PGltZyBzcmM9ImltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiIgdGl0bGU9IkV4YW1wbGVzIGFuZCBVc2FnZSI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGhyPjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iZXhhbXBsZXMiPjwvYT5FeGFtcGxlcyBhbmQgVXNhZ2U8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgogICAgICAgIFNvbWUgZXhhbXBsZXMgb2YgUml2ZXQgdXNhZ2UgZm9sbG93LiAgU29tZSBwcmlvciBUY2wga25vd2xlZGdlCiAgICAgICAgaXMgYXNzdW1lZC4gIElmIHlvdSBkb24ndCBrbm93IG11Y2ggVGNsLCBkb24ndCB3b3JyeSwgaXQncyBlYXN5LAogICAgICAgIGFuZCB0aGVyZSBhcmUgc29tZSBnb29kIHJlc291cmNlcyBhdmFpbGFibGUgb24gdGhlIHdlYiB0aGF0IHdpbGwKICAgICAgICBnZXQgeW91IHVwIHRvIHNwZWVkIHF1aWNrbHkuICBHbyB0byB0aGUgCiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImhlbHAuaHRtbCN3ZWJzaXRlcyIgdGl0bGU9IldlYiBTaXRlcyI+d2ViIHNpdGVzPC9hPiBzZWN0aW9uIGFuZCBoYXZlIGEgbG9vay4KICAgIDwvcD48ZGl2IGNsYXNzPSJleGFtcGxlIj48YSBuYW1lPSJoZWxsb193b3JsZCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaAxLqBIZWxsbyBXb3JsZDwvYj48L3A+PGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+PHAgc3R5bGU9IndpZHRoOjkwJSI+CgkJCUFzIHdpdGggYW55IHRvb2wsIGl0J3MgYWx3YXlzIG5pY2UgdG8gc2VlIHNvbWV0aGluZyB3b3JrLCBzbwoJCQlsZXQncyBjcmVhdGUgYSBzbWFsbCAiSGVsbG8gV29ybGQiIHBhZ2UuCgkgICAgPC9wPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJCQlBc3N1bWluZyB5b3UgaGF2ZSBBcGFjaGUgY29uZmlndXJlZCBjb3JyZWN0bHksIGNyZWF0ZSBhIGZpbGUKCQkJY2FsbGVkIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+aGVsbG8ucnZ0PC9jb2RlPiB3aGVyZSBBcGFjaGUgY2FuIGZpbmQKCQkJaXQsIHdpdGggdGhlIGZvbGxvd2luZyBjb250ZW50OgogICAgICAgIDwvcD48cHJlIHN0eWxlPSJiYWNrZ3JvdW5kOiNjY2M7IG1hcmdpbjogMmV4OyBtYXJnaW4tcmlnaHQ6IDEwJTsgICAgICAgcGFkZGluZzogMWV4OyBib3JkZXI6IGRhc2hlZCBibGFjayAxcHggOyB3aGl0ZS1zcGFjZTogcHJlOyAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGZvbnQtc2l6ZTogOTAlOyIgY2xhc3M9InByb2dyYW1saXN0aW5nIj4mbHQ7PwpwdXRzICJIZWxsbyBXb3JsZCIKPyZndDsKCjwvcHJlPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJCQlJZiB5b3UgdGhlbiBhY2Nlc3MgaXQgd2l0aCB5b3VyIGJyb3dzZXIsIHlvdSBzaG91bGQgc2VlIGEKCQkJYmxhbmsgcGFnZSB3aXRoIHRoZSB0ZXh0ICJIZWxsbyBXb3JsZCIgKHdpdGhvdXQgdGhlIHF1b3Rlcykgb24gaXQuCiAgICAgICAgICAgIFRoZSBjb21tYW5kIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnB1dHM8L3N0cm9uZz48L3NwYW4+PC9zcGFuPiBpcyB0aGUgZ29vZCBvbGQgVGNsIGNvbW1hbmQgZm9yCiAgICAgICAgICAgIHRlcm1pbmFsIHByaW50aW5nLCB3aGljaCBhcHBlbmRzIHRvIHRoZSBhcmd1bWVudCBzdHJpbmcgdGhlIGNvbnRyb2wKICAgICAgICAgICAgY2hhcmFjdGVycyBuZWVkZWQgdG8gb3BlbiBhIG5ld2xpbmUuIFdoZW4geW91IGRvbid0IGhhdmUgdG8gcnVuIHRocm91Z2gKICAgICAgICAgICAgY29tcGxleCBlbGFib3JhdGlvbiBhbmQgdGhlIG91dHB1dCBjYW4gYmUgbHVtcGVkCiAgICAgICAgICAgIGluIGEgc2luZ2xlIHN0cmluZyAoanVzdCBsaWtlIGluIHRoZSAnSGVsbG8gV29ybGQnIGV4YW1wbGUpIHlvdQogICAgICAgICAgICBjYW4gZHJhdyBvbiB0aGUgcG9wdWxhciBzaG9ydGhhbmQgc3ludGF4IGZvciBzdHJpbmcKICAgICAgICAgICAgb3V0cHV0IHRoYXQgY29tZXMgaGFuZHkgaW4gbWFueSBjYXNlcwogICAgICAgIDwvcD48cHJlIHN0eWxlPSJiYWNrZ3JvdW5kOiNjY2M7IG1hcmdpbjogMmV4OyBtYXJnaW4tcmlnaHQ6IDEwJTsgICAgICAgcGFkZGluZzogMWV4OyBib3JkZXI6IGRhc2hlZCBibGFjayAxcHggOyB3aGl0ZS1zcGFjZTogcHJlOyAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGZvbnQtc2l6ZTogOTAlOyIgY2xhc3M9InByb2dyYW1saXN0aW5nIj4mbHQ7Pz0gIkhlbGxvIFdvcmxkIiA/Jmd0Owo8L3ByZT48cCBzdHlsZT0id2lkdGg6OTAlIj4KICAgICAgICAgICAgd2hpY2ggaXMgdHJhbnNsYXRlZCBpbnRvIAogICAgICAgICAgICA8L3A+PHByZSBzdHlsZT0iYmFja2dyb3VuZDojY2NjOyBtYXJnaW46IDJleDsgbWFyZ2luLXJpZ2h0OiAxMCU7ICAgICAgIHBhZGRpbmc6IDFleDsgYm9yZGVyOiBkYXNoZWQgYmxhY2sgMXB4IDsgd2hpdGUtc3BhY2U6IHByZTsgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOyBmb250LXNpemU6IDkwJTsiIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+cHV0cyAtbm9uZXdsaW5lICJIZWxsbyBXb3JsZCI8L3ByZT48cCBzdHlsZT0id2lkdGg6OTAlIj4KICAgICAgICA8L3A+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48ZGl2IGNsYXNzPSJleGFtcGxlIj48YSBuYW1lPSJpZHA2MjczMTY4Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxloDIuoEdlbmVyYXRlIGEgVGFibGU8L2I+PC9wPjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJICAgCUluIGFub3RoZXIgc2ltcGxlIGV4YW1wbGUsIHdlIGR5bmFtaWNhbGx5IGdlbmVyYXRlIGEgdGFibGU6CgkgIAk8L3A+PHByZSBzdHlsZT0iYmFja2dyb3VuZDojY2NjOyBtYXJnaW46IDJleDsgbWFyZ2luLXJpZ2h0OiAxMCU7ICAgICAgIHBhZGRpbmc6IDFleDsgYm9yZGVyOiBkYXNoZWQgYmxhY2sgMXB4IDsgd2hpdGUtc3BhY2U6IHByZTsgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOyBmb250LXNpemU6IDkwJTsiIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Jmx0Oz8gcHV0cyAiJmx0O3RhYmxlJmd0O1xuIgpmb3Ige3NldCBpIDF9IHsgJGkgJmx0Oz0gOCB9IHtpbmNyIGl9IHsKICAgIHB1dHMgIiZsdDt0ciZndDtcbiIKICAgIGZvciB7c2V0IGogMX0geyRqICZsdDs9IDh9IHtpbmNyIGp9IHsKICAgICAgICBzZXQgbnVtIFsgZXhwciAkaSAqICRqICogNCAtIDFdCiAgICAgICAgcHV0cyBbIGZvcm1hdCAiJmx0O3RkIGJnY29sb3I9XCIlMDJ4JTAyeCUwMnhcIiAmZ3Q7ICRudW0gJG51bSAkbnVtICZsdDsvdGQmZ3Q7XG4iIFwKCQkgICAkbnVtICRudW0gJG51bSBdCiAgICB9CiAgICBwdXRzICImbHQ7L3RyJmd0O1xuIgp9CnB1dHMgIiZsdDsvdGFibGUmZ3Q7XG4iID8mZ3Q7Cgo8L3ByZT48cCBzdHlsZT0id2lkdGg6OTAlIj4KCSAgICAJSWYgeW91IHJlYWQgdGhlIGNvZGUsIHlvdSBjYW4gc2VlIHRoYXQgdGhpcyBpcyBwdXJlIFRjbC4gIFdlCgkgICAgCWNvdWxkIHRha2UgdGhlIHNhbWUgY29kZSwgcnVuIGl0IG91dHNpZGUgb2YgUml2ZXQsIGFuZCBpdAoJICAgIAl3b3VsZCBnZW5lcmF0ZSB0aGUgc2FtZSBIVE1MIQoJICAJPC9wPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJICAgIAlUaGUgcmVzdWx0IHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6CgkgIAk8L3A+PGRpdj48aW1nIHNyYz0iaW1hZ2VzL3RhYmxlLnBuZyI+PC9kaXY+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48ZGl2IGNsYXNzPSJleGFtcGxlIj48YSBuYW1lPSJ2YXJpYWJsZV9hY2Nlc3MiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgMy6gVmFyaWFibGUgQWNjZXNzPC9iPjwvcD48ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj48cCBzdHlsZT0id2lkdGg6OTAlIj4KCQkJSGVyZSwgd2UgZGVtb25zdHJhdGUgaG93IHRvIGFjY2VzcyB2YXJpYWJsZXMgc2V0IGJ5IEdFVCBvcgoJCQlQT1NUIG9wZXJhdGlvbnMuCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCQkJR2l2ZW4gYW4gSFRNTCBmb3JtIGxpa2UgdGhlIGZvbGxvd2luZzoKICAgICAgPC9wPjxwcmUgc3R5bGU9ImJhY2tncm91bmQ6I2NjYzsgbWFyZ2luOiAyZXg7IG1hcmdpbi1yaWdodDogMTAlOyAgICAgICBwYWRkaW5nOiAxZXg7IGJvcmRlcjogZGFzaGVkIGJsYWNrIDFweCA7IHdoaXRlLXNwYWNlOiBwcmU7ICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgZm9udC1zaXplOiA5MCU7IiBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiZsdDtmb3JtIGFjdGlvbj0idmFycy5ydnQiJmd0OwogICZsdDt0YWJsZSZndDsKICAgICZsdDt0Ym9keSZndDsKICAgICAgJmx0O3RyJmd0OwogICAgICAgICZsdDt0ZCZndDsmbHQ7YiZndDtUaXRsZTombHQ7L2ImZ3Q7Jmx0Oy90ZCZndDsKICAgICAgICAmbHQ7dGQmZ3Q7Jmx0O2lucHV0IG5hbWU9InRpdGxlIiAvJmd0OyZsdDsvdGQmZ3Q7CiAgICAgICZsdDsvdHImZ3Q7CiAgICAgICZsdDt0ciZndDsKICAgICAgICAmbHQ7dGQmZ3Q7Jmx0O2ImZ3Q7U2FsYXJ5OiZsdDsvYiZndDsmbHQ7L3RkJmd0OwogICAgICAgICZsdDt0ZCZndDsmbHQ7aW5wdXQgbmFtZT0ic2FsYXJ5IiAvJmd0OyZsdDsvdGQmZ3Q7CiAgICAgICZsdDsvdHImZ3Q7CiAgICAgICZsdDt0ciZndDsKICAgICAgICAmbHQ7dGQmZ3Q7Jmx0O2ImZ3Q7Qm9zczombHQ7L2ImZ3Q7Jmx0Oy90ZCZndDsKICAgICAgICAmbHQ7dGQmZ3Q7Jmx0O2lucHV0IG5hbWU9ImJvc3MiIC8mZ3Q7Jmx0Oy90ZCZndDsmbHQ7L3RyJmd0OwogICAgICAmbHQ7dHImZ3Q7CiAgICAgICAgJmx0O3RkJmd0OyZsdDtiJmd0O1NraWxsczombHQ7L2ImZ3Q7Jmx0Oy90ZCZndDsKICAgICAgICAmbHQ7dGQmZ3Q7CiAgICAgICAgICAmbHQ7c2VsZWN0IG5hbWU9InNraWxscyIgbXVsdGlwbGU9Im11bHRpcGxlIiZndDsKICAgICAgICAgICAgJmx0O29wdGlvbiZndDtDJmx0Oy9vcHRpb24mZ3Q7CiAgICAgICAgICAgICZsdDtvcHRpb24mZ3Q7SmF2YSZsdDsvb3B0aW9uJmd0OwogICAgICAgICAgICAmbHQ7b3B0aW9uJmd0O1RjbCZsdDsvb3B0aW9uJmd0OwogICAgICAgICAgICAmbHQ7b3B0aW9uJmd0O1BlcmwmbHQ7L29wdGlvbiZndDsKICAgICAgICAgICZsdDsvc2VsZWN0Jmd0OwogICAgICAgICZsdDsvdGQmZ3Q7CiAgICAgICZsdDsvdHImZ3Q7CiAgICAgICZsdDt0ciZndDsKICAgICAgICAmbHQ7dGQmZ3Q7Jmx0O2lucHV0IHR5cGU9InN1Ym1pdCIgLyZndDsmbHQ7L3RkJmd0OwogICAgICAmbHQ7L3RyJmd0OwogICAgJmx0Oy90Ym9keSZndDsKICAmbHQ7L3RhYmxlJmd0OwombHQ7L2Zvcm0mZ3Q7Cgo8L3ByZT48cCBzdHlsZT0id2lkdGg6OTAlIj4KCQkJV2UgY2FuIHVzZSB0aGlzIFJpdmV0IHNjcmlwdCB0byBnZXQgdGhlIHZhcmlhYmxlIHZhbHVlczoKICAgICAgPC9wPjxwcmUgc3R5bGU9ImJhY2tncm91bmQ6I2NjYzsgbWFyZ2luOiAyZXg7IG1hcmdpbi1yaWdodDogMTAlOyAgICAgICBwYWRkaW5nOiAxZXg7IGJvcmRlcjogZGFzaGVkIGJsYWNrIDFweCA7IHdoaXRlLXNwYWNlOiBwcmU7ICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgZm9udC1zaXplOiA5MCU7IiBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiZsdDs/CnNldCBlcnJsaXN0IHt9CmlmIHsgWzo6cml2ZXQ6OnZhciBleGlzdHMgdGl0bGVdIH0gewogICAgc2V0IHRpdGxlIFs6OnJpdmV0Ojp2YXIgZ2V0IHRpdGxlXQp9IGVsc2UgewogICAgc2V0IGVycmxpc3QgIllvdSBuZWVkIHRvIGVudGVyIGEgdGl0bGUiCn0KCmlmIHsgWzo6cml2ZXQ6OnZhciBleGlzdHMgc2FsYXJ5XSB9IHsKICAgIHNldCBzYWxhcnkgWzo6cml2ZXQ6OnZhciBnZXQgc2FsYXJ5XQogICAgaWYgeyAhIFtzdHJpbmcgaXMgZGlnaXQgJHNhbGFyeV0gfSB7CiAgICAgICAgbGFwcGVuZCBlcnJsaXN0ICJTYWxhcnkgbXVzdCBiZSBhIG51bWJlciIKICAgIH0KfSBlbHNlIHsKICAgIGxhcHBlbmQgZXJybGlzdCAiWW91IG5lZWQgdG8gZW50ZXIgYSBzYWxhcnkiCn0KCmlmIHsgWzo6cml2ZXQ6OnZhciBleGlzdHMgYm9zc10gfSB7CiAgICBzZXQgYm9zcyBbOjpyaXZldDo6dmFyIGdldCBib3NzXQp9IGVsc2UgewogICAgc2V0IGJvc3MgIk1yLiBCdXJucyIKfQoKaWYgeyBbOjpyaXZldDo6dmFyIGV4aXN0cyBza2lsbHNdIH0gewogICAgc2V0IHNraWxscyBbOjpyaXZldDo6dmFyIGxpc3Qgc2tpbGxzXQp9IGVsc2UgewogICAgbGFwcGVuZCBlcnJsaXN0ICJZb3UgbmVlZCB0byBlbnRlciBzb21lIHNraWxscyIKfQoKaWYgeyBbbGxlbmd0aCAkZXJybGlzdF0gIT0gMCB9IHsKICAgIGZvcmVhY2ggZXJyICRlcnJsaXN0IHsKICAgICAgICBwdXRzICImbHQ7YiZndDsgJGVyciAmbHQ7L2ImZ3Q7IgogICAgfQp9IGVsc2UgewogICAgcHV0cyAiVGhhbmtzIGZvciB0aGUgaW5mb3JtYXRpb24hIgogICAgPyZndDsKICAgICZsdDt0YWJsZSZndDsKICAgICAgJmx0O3Rib2R5Jmd0OwogICAgICAgICZsdDt0ciZndDsKICAgICAgICAgICZsdDt0ZCZndDsmbHQ7YiZndDtUaXRsZTombHQ7L2ImZ3Q7Jmx0Oy90ZCZndDsKICAgICAgICAgICZsdDt0ZCZndDsmbHQ7Pz0gJHRpdGxlID8mZ3Q7Jmx0Oy90ZCZndDsKICAgICAgICAmbHQ7L3RyJmd0OwogICAgICAgICZsdDt0ciZndDsKICAgICAgICAgICZsdDt0ZCZndDsmbHQ7YiZndDtCb3NzOiZsdDsvYiZndDsmbHQ7L3RkJmd0OwogICAgICAgICAgJmx0O3RkJmd0OyZsdDs/PSAkYm9zcyA/Jmd0OyZsdDsvdGQmZ3Q7CiAgICAgICAgJmx0Oy90ciZndDsKICAgICAgICAmbHQ7dHImZ3Q7CiAgICAgICAgICAmbHQ7dGQmZ3Q7Jmx0O2ImZ3Q7U2FsYXJ5OiZsdDsvYiZndDsmbHQ7L3RkJmd0OwogICAgICAgICAgJmx0O3RkJmd0OyZsdDs/PSAkc2FsYXJ5ID8mZ3Q7Jmx0Oy90ZCZndDsKICAgICAgICAmbHQ7L3RyJmd0OwogICAgICAgICZsdDt0ciZndDsKICAgICAgICAgICZsdDt0ZCZndDsmbHQ7YiZndDtTa2lsbHM6Jmx0Oy9iJmd0OyZsdDsvdGQmZ3Q7CiAgICAgICAgICAmbHQ7dGQmZ3Q7Jmx0Oz89ICRza2lsbHMgPyZndDsmbHQ7L3RkJmd0OwogICAgICAgICZsdDsvdHImZ3Q7CiAgICAgICZsdDsvdGJvZHkmZ3Q7CiAgICAmbHQ7L3RhYmxlJmd0OwogICAgJmx0Oz8KfQo/Jmd0OwoKPC9wcmU+PHAgc3R5bGU9IndpZHRoOjkwJSI+CgkJCVRoZSBmaXJzdCBzdGF0ZW1lbnQgY2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQoJCQk8Y29kZSBjbGFzcz0idmFybmFtZSI+Ym9zczwvY29kZT4gdmFyaWFibGUgaGFzIGJlZW4gcGFzc2VkIHRvIHRoZQoJCQlzY3JpcHQsIGFuZCB0aGVuIGRvZXMgc29tZXRoaW5nIHdpdGggdGhhdCBpbmZvcm1hdGlvbi4gIElmCgkJCWl0J3Mgbm90IHByZXNlbnQsIGFuIGVycm9yIGlzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIGVycm9ycy4KICAgICAgPC9wPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJSW4gdGhlIHNlY29uZCBibG9jayBvZiBjb2RlLCB0aGUgdmFyaWFibGUKCTxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5zYWxhcnk8L2NvZGU+IGlzIGZldGNoZWQsIHdpdGggb25lIG1vcmUgZXJyb3IKCWNoZWNrIC0gYmVjYXVzZSBpdCdzIGEgbnVtYmVyLCBpdCBuZWVkcyB0byBiZSBjb21wb3NlZCBvZgoJZGlnaXRzLgogICAgICA8L3A+PHAgc3R5bGU9IndpZHRoOjkwJSI+CglUaGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPmJvc3M8L2NvZGU+IHZhcmlhYmxlIGlzbid0IHJlcXVpcmVkIHRvIGhhdmUKCWJlZW4gc2VudCAtIHdlIHNldCBpdCB0byAiTXIuIEJ1cm5zIiBpZiBpdCBpc24ndCBhbW9uZyB0aGUKCWluZm9ybWF0aW9uIHdlIHJlY2VpdmVkLgogICAgICA8L3A+PHAgc3R5bGU9IndpZHRoOjkwJSI+CglUaGUgbGFzdCBiaXQgb2YgdmFyaWFibGUgaGFuZGluZyBjb2RlIGlzIGEgYml0IHRyaWNraWVyLgoJQmVjYXVzZSA8Y29kZSBjbGFzcz0idmFybmFtZSI+c2tpbGxzPC9jb2RlPiBpcyBhIGxpc3Rib3gsIGFuZCBjYW4KCXBvdGVudGlhbGx5IGhhdmUgbXVsdGlwbGUgdmFsdWVzLCB3ZSBvcHQgdG8gcmVjZWl2ZSB0aGVtIGFzIGEKCWxpc3QsIHNvIHRoYXQgYXQgc29tZSBwb2ludCwgd2UgY291bGQgaXRlcmF0ZSBvdmVyIHRoZW0uCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCVRoZSBzY3JpcHQgdGhlbiBjaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQKCTxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5lcnJsaXN0PC9jb2RlPiBpcyBlbXB0eSBhbmQgb3V0cHV0dGluZyBhIHRoYW5reW91CgltZXNzYWdlLiAgSWYgPGNvZGUgY2xhc3M9InZhcm5hbWUiPmVycmxpc3Q8L2NvZGU+IGlzIG5vdCBlbXB0eSwgdGhlIGxpc3QKCW9mIGVycm9ycyBpdCBjb250YWlucyBpcyBwcmludGVkLgogICAgICA8L3A+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48ZGl2IGNsYXNzPSJleGFtcGxlIj48YSBuYW1lPSJmaWxlX3VwbG9hZCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaA0LqBGaWxlIFVwbG9hZDwvYj48L3A+PGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+PHAgc3R5bGU9IndpZHRoOjkwJSI+CgkJCVRoZSA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz46OnJpdmV0Ojp1cGxvYWQ8L3N0cm9uZz48L3NwYW4+PC9zcGFuPiBjb21tYW5kIGVuZG93cyBSaXZldCB3aXRoIGFuCgkJCWludGVyZmFjZSB0byBhY2Nlc3MgZmlsZXMgdHJhbnNmZXJyZWQgb3ZlciBodHRwIGFzIHBhcnRzIG9mIGEKCQkJbXVsdGlwYXJ0IGZvcm0uICBUaGUgZm9sbG93aW5nIEhUTUwgaW4gb25lIGZpbGUsIHNheSwKCQkJPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj51cGxvYWQuaHRtbDwvY29kZT4gY3JlYXRlcyBhIGZvcm0gd2l0aCBhIHRleHQKCQkJaW5wdXQgZW50cnkuIEJ5IGNsaWNraW5nIHRoZSBmaWxlIGNob29zZXIgYnV0dG9uIHRoZSBmaWxlCgkJCWJyb3dzZXIgc2hvd3MgdXAgYW5kIHRoZSB1c2VyIHNlbGVjdHMgdGhlIGZpbGUgdG8gYmUgdXBsb2FkZWQKCQkJKHRoZSBmaWxlIHBhdGggd2lsbCBhcHBlYXIgaW4gdGhlIHRleHQgaW5wdXQpLiAgSW4gb3JkZXIgdG8gbWFrZQoJCQlzdXJlIHlvdSdyZSB1cGxvYWRpbmcgdGhlIHdob2xlIGZpbGUgeW91IG11c3QgY29tYmluZSB0aGUKCQkJYWN0aW9uIG9mIHRoZSBlbmN0eXBlIGFuZCBtZXRob2QgYXR0cmlidXRlcyBvZiB0aGUKCQkJJmx0O2Zvcm0uLi4mZ3Q7IHRhZyBpbiB0aGUgd2F5IHNob3duIGluIHRoZSBleGFtcGxlLiAgRmFpbHVyZQoJCQl0byBkbyBzbyB3b3VsZCByZXN1bHQgaW4gdGhlIGNsaWVudCBzZW5kaW5nIG9ubHkgdGhlIGZpbGUncwoJCQlwYXRoLCByYXRoZXIgdGhhbiB0aGUgYWN0dWFsIGNvbnRlbnRzLgogICAgICA8L3A+PHByZSBzdHlsZT0iYmFja2dyb3VuZDojY2NjOyBtYXJnaW46IDJleDsgbWFyZ2luLXJpZ2h0OiAxMCU7ICAgICAgIHBhZGRpbmc6IDFleDsgYm9yZGVyOiBkYXNoZWQgYmxhY2sgMXB4IDsgd2hpdGUtc3BhY2U6IHByZTsgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOyBmb250LXNpemU6IDkwJTsiIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Jmx0O2Zvcm0gYWN0aW9uPSJmb28ucnZ0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiJmd0OwombHQ7aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iTXlVcGxvYWQiJmd0OyZsdDsvaW5wdXQmZ3Q7CiZsdDtpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZW5kIEZpbGUiJmd0OyZsdDsvaW5wdXQmZ3Q7CiZsdDsvZm9ybSZndDsKCjwvcHJlPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJCQlJbiB0aGUgc2NyaXB0IGludm9rZWQgYnkgdGhlIGZvcm0KCQkJKDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+dXBsb2FkLnJ2dDwvY29kZT4pIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnVwbG9hZDwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+CgkJCSA/PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5hcmd1bWVudCAuLi48L3NwYW4+PyBjb21tYW5kcyBjYW4gYmUgdXNlZCB0byBtYW5pcHVsYXRlIHRoZQoJCQl2YXJpb3VzIGZpbGVzIHVwbG9hZGVkLgogICAgICA8L3A+PHByZSBzdHlsZT0iYmFja2dyb3VuZDojY2NjOyBtYXJnaW46IDJleDsgbWFyZ2luLXJpZ2h0OiAxMCU7ICAgICAgIHBhZGRpbmc6IDFleDsgYm9yZGVyOiBkYXNoZWQgYmxhY2sgMXB4IDsgd2hpdGUtc3BhY2U6IHByZTsgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOyBmb250LXNpemU6IDkwJTsiIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Jmx0Oz8KOjpyaXZldDo6dXBsb2FkIHNhdmUgTXlVcGxvYWQgL3RtcC91cGxvYWRmaWxlcy9maWxlMQpwdXRzICJTYXZlZCBmaWxlIFs6OnJpdmV0Ojp1cGxvYWQgZmlsZW5hbWUgTXlVcGxvYWRdIFwKCShbOjpyaXZldDo6dXBsb2FkIHNpemUgTXlVcGxvYWRdIGJ5dGVzKSB0byBzZXJ2ZXIiCj8mZ3Q7Cgo8L3ByZT48cCBzdHlsZT0id2lkdGg6OTAlIj4KCQkJRG9uJ3QgZm9yZ2V0IHRoYXQgdGhlIGFwYWNoZSBzZXJ2ZXIgbXVzdCBoYXZlIHdyaXRlIGFjY2VzcyB0bwoJCQl0aGUgZGlyZWN0b3J5IHdoZXJlIGZpbGVzIGFyZSBiZWluZyBjcmVhdGVkLiAgVGhlIFJpdmV0IEFwYWNoZQoJCQlkaXJlY3RpdmVzIGhhdmUgYSBzdWJzdGFudGlhbCBpbXBhY3Qgb24gdGhlIHVwbG9hZCBwcm9jZXNzLAoJCQl5b3UgaGF2ZSB0byBjYXJlZnVsbHkgcmVhZCB0aGUgZG9jcyBpbiBvcmRlciB0byBzZXQgdGhlCgkJCWFwcHJvcHJpYXRlIGRpcmVjdGl2ZXMgdmFsdWVzIHRoYXQgd291bGQgbWF0Y2ggeW91cgoJCQlyZXF1aXJlbWVudHMuCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCQkJSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IHNvbWUgCgkJCTxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnVwbG9hZDwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+IGNvbW1hbmRzIGFyZSBlZmZlY3RpdmUgb25seSB3aGVuCgkJCXVzZWQgaW4gYSBtdXR1YWxseSBleGNsdXNpdmUgd2F5LiAgQXBhY2hlIHN0b3JlcyB0aGUgZGF0YSBpbgoJCQl0ZW1wb3JhcnkgZmlsZXMgd2hpY2ggYXJlIHJlYWQgYnkgdGhlIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnVwbG9hZCBzYXZlCgkJCSA/PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij51cGxvYWQgbmFtZTwvc3Bhbj4/ID88c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyBmb250LXdlaWdodDogYm9sZDsiPmZpbGVuYW1lPC9zcGFuPj88L3N0cm9uZz48L3NwYW4+PC9zcGFuPiBvciBieSB0aGUKCQkJPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+dXBsb2FkIGRhdGEgID88c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyBmb250LXdlaWdodDogYm9sZDsiPnVwbG9hZCBuYW1lPC9zcGFuPj88L3N0cm9uZz48L3NwYW4+PC9zcGFuPgoJCQljb21tYW5kLiBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoZXNlIDIgY29tbWFuZHMgdXNpbmcgdGhlIHNhbWUKCQkJID88c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyBmb250LXdlaWdodDogYm9sZDsiPnVwbG9hZCBuYW1lPC9zcGFuPj8gYXJndW1lbnQgd2lsbCByZXR1cm4gbm8gZGF0YSBvbiB0aGUKCQkJc2Vjb25kIGNhbGwuICBMaWtld2lzZSA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz51cGxvYWQgY2hhbm5lbCAgPzxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7IGZvbnQtd2VpZ2h0OiBib2xkOyI+dXBsb2FkCgkJCW5hbWU8L3NwYW4+Pzwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+IHdpbGwgcmV0dXJuIGEgVGNsIGZpbGUgY2hhbm5lbCB0aGF0IHlvdQoJCQljYW4gdXNlIGluIHJlZ3VsYXIgVGNsIHNjcmlwdHMgb25seSBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5CgkJCXJlYWQgdGhlIGRhdGEsIGZvciBleGFtcGxlIHdpdGggYSBjYWxsIHRvIHRoZSA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz51cGxvYWQKCQkJZGF0YSAgPzxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7IGZvbnQtd2VpZ2h0OiBib2xkOyI+dXBsb2FkIG5hbWU8L3NwYW4+Pzwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+IGNvbW1hbmQuCiAgICAgIDwvcD48L2Rpdj48L2Rpdj48YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxhIG5hbWU9ImZpbGVfZG93bmxvYWQiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgNS6gRmlsZSBEb3dubG9hZDwvYj48L3A+PGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+PHAgc3R5bGU9IndpZHRoOjkwJSI+CgkJCUluIGdlbmVyYWwgc2V0dGluZyB1cCBhIGRhdGEgZmlsZSBmb3IgYmVpbmcgc2VudCBvdmVyIGh0dHAgaXMgCgkJCWFzIGVhc3kgYXMgZGV0ZXJtaW5pbmcgdGhlIGZpbGUncyBVUkkgYW5kIGxldHRpbmcgQXBhY2hlJ3MKCQkJZG8gYWxsIHRoYXQgaXMgbmVlZGVkLiBJZiB0aGlzIGFwcHJvYWNoIGZpdHMgeW91ciBkZXNpZ24gYWxsIAoJCQl5b3UgaGF2ZSB0byBkbyBpcyB0byBrZWVwIHRoZSBkb3dubG9hZGFibGUgZmlsZXMgc29tZXdoZXJlIAoJCQl3aXRoaW4gQXBhY2hlJ3MgRG9jdW1lbnRSb290IChvciBpbiBhbnkgb2YgdGhlIGRpcmVjdG9yaWVzIAoJCQlBcGFjaGUgaGFzIHJpZ2h0IHRvIGFjY2VzcykuCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCQkJV2hlbiBhIGNsaWVudCBzZW5kcyBhIHJlcXVlc3QgZm9yIGEgZmlsZSwgQXBhY2hlIHRha2VzCgkJCWNhcmUgb2YgZGV0ZXJtaW5pbmcgdGhlIGZpbGV0eXBlLCBzZW5kcyBhcHByb3ByaWF0ZSBoZWFkZXJzIHRvCgkJCXRoZSBjbGllbnQgYW5kIHRoZW4gdGhlIGZpbGUgY29udGVudC4gVGhlIGNsaWVudCBpcyByZXNwb25zaWJsZQoJCQlmb3IgZGVjaWRpbmcgaG93IHRvIGhhbmRsZSB0aGUgZGF0YSBhY2NvcmRpbmdseSB0byB0aGUgCgkJCSJjb250ZW50LXR5cGUiIGhlYWRlcnMgYW5kIGl0cyBpbnRlcm5hbCBkZXNpZ24uIEZvciBleGFtcGxlCgkJCXdoZW4gYnJvd3NlcnMgZ2l2ZSB1cCB0cnlpbmcgdG8gZGlzcGxheSBhIGNlcnRhaW4gImNvbnRlbnQtdHlwZSIKCQkJdGhleSBkaXNwbGF5IGEgZG93bmxvYWQgZGlhbG9nIGJveCBhc2tpbmcgZm9yIGRpcmVjdGlvbnMgZnJvbQoJCQl0aGUgdXNlci4gCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KICAgICAgICAgICAgUml2ZXQgY2FuIGhlbHAgaWYgeW91IGhhdmUgbW9yZSBzb2Zpc3RpY2F0ZWQgbmVlZHMuICBGb3IKICAgICAgICAgICAgaW5zdGFuY2UgeW91IG1heSBiZSBkZXZlbG9waW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgdXNlcwogICAgICAgICAgICB3ZWJwYWdlcyB0byBjb2xsZWN0IGlucHV0IGRhdGEuIFRoaXMgaW5mb3JtYXRpb24gbWlnaHQgYmUKICAgICAgICAgICAgcGFzc2VkIG9uIHRvIHNjcmlwdHMgb3IgcHJvZ3JhbXMgZm9yIHByb2Nlc3NpbmcuIAogICAgICAgICAgICBJbiB0aGlzIGNhc2UgYSByZWFsIGZpbGUgcmVwcmVzZW50aW5nIHRoZQogICAgICAgICAgICBkYXRhIGRvZXNuJ3QgZXhpc3QgYW5kIHRoZSBjb250ZW50IGlzIGdlbmVyYXRlZCBvbiBkZW1hbmQgCiAgICAgICAgICAgIGJ5IHRoZSBzZXJ2ZXIuIAogICAgICAgICAgICBJbiBvdGhlciBjaXJjdW1zdGFuY2VzIHlvdSBtYXkgbmVlZCB0byBkeW5hbWljYWxseSBpbmhpYml0IAogICAgICAgICAgICB0aGUgZG93bmxvYWQgb2Ygc3BlY2lmaWMgZmlsZXMgYW5kIGhpZGUgdGhlbSBhd2F5LCAKICAgICAgICAgICAgWW91ciBzY3JpcHRzIG1heSBleHB1bmdlIGZyb20gdGhlIHBhZ2VzCiAgICAgICAgICAgIGV2ZXJ5IGxpbmsgdG8gdGhlc2UgZmlsZXMgKHlvdXIgcGFnZXMgYXJlIGR5bmFtaWMsIGFyZW4ndAogICAgICAgICAgICB0aGV5PykgYW5kIG1vdmUgdGhlbSBvdXQgb2Ygd2F5LCBidXQgaXQgbG9va3MgbGlrZSBhCiAgICAgICAgICAgIGN1bWJlcnNvbWUgc29sdXRpb24uCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KICAgICAgICAgICAgUHV0dGluZyBUY2wgYW5kIFJpdmV0IGluIGNoYXJnZSBvZiB0aGUgd2hvbGUgZG93bmxvYWQKICAgICAgICAgICAgbWVjaGFuaXNtIGhlbHBzIGluIGJ1aWxkaW5nIGNsZWFuZXIgYW5kIHNhZmVyIGFwcHJvYWNoZXMgdG8KICAgICAgICAgICAgdGhlIGRvd25sb2FkIHByb2JsZW0uCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlIGEgcHJvY2VkdXJlIGNoZWNrcyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBhCiAgICAgICAgICAgIHBhcmFtZXRlciBwYXNzZWQgaW4gYnkgdGhlIGJyb3dzZXIuIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIG5hbWUKICAgICAgICAgICAgKHdpdGhvdXQgZXh0ZW5zaW9uKSBvZiBhIHBkZiBmaWxlLiAgCiAgICAgICAgICAgIFBkZiBmaWxlcyBhcmUgc3RvcmVkIGluIGEgZGlyZWN0b3J5IHdob3NlIHBhdGggaXMKICAgICAgICAgICAgaW4gdGhlIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnBkZl9yZXBvc2l0b3J5PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj4gdmFyaWFibGUuCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KICAgICAgICAgICAgVGhpcyBjb2RlIGlzIHJlcG9ydGVkIGFzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGNvbnRyb2wgCiAgICAgICAgICAgIHRoZSBwcm90b2NvbCB1c2luZyB0aGUgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+aGVhZGVyczwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+IGNvbW1hbmQuCiAgICAgIDwvcD48cHJlIHN0eWxlPSJiYWNrZ3JvdW5kOiNjY2M7IG1hcmdpbjogMmV4OyBtYXJnaW4tcmlnaHQ6IDEwJTsgICAgICAgcGFkZGluZzogMWV4OyBib3JkZXI6IGRhc2hlZCBibGFjayAxcHggOyB3aGl0ZS1zcGFjZTogcHJlOyAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGZvbnQtc2l6ZTogOTAlOyIgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jIENvZGUgZXhhbXBsZSBmb3IgdGhlIHRyYW5zbWlzc2lvbiBvZiBhIHBkZiBmaWxlLiAKCmlmIHtbOjpyaXZldDo6dmFyIGV4aXN0cyBwZGZuYW1lXX0gewogICAgc2V0IHBkZm5hbWUgWzo6cml2ZXQ6OnZhciBnZXQgcGRmbmFtZV0KCiMgbGV0J3MgYnVpbGQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgcGRmIGZpbGUuIFRoZSAncGRmX3JlcG9zaXRvcnknCiMgZGlyZWN0b3J5IG11c3QgYmUgcmVhZGFibGUgYnkgdGhlIGFwYWNoZSBjaGlsZHJlbgoKICAgIHNldCBwZGZfZnVsbF9wYXRoIFtmaWxlIGpvaW4gJHBkZl9yZXBvc2l0b3J5ICR7cGRmbmFtZX0ucGRmXQogICAgaWYge1tmaWxlIGV4aXN0cyAkcGRmX2Z1bGxfcGF0aF19IHsKCiMgQmVmb3JlIHRoZSBmaWxlIGlzIHNlbnQgd2UgaW5mb3JtIHRoZSBjbGllbnQgYWJvdXQgdGhlIGZpbGUgdHlwZSBhbmQKIyBmaWxlIG5hbWUuIFRoZSBjbGllbnQgY2FuIGJlIHByb3Bvc2VkIGEgZmlsZW5hbWUgZGlmZmVyZW50IGZyb20gdGhlCiMgb3JpZ2luYWwgb25lLiBJbiB0aGlzIGNhc2UsIHRoaXMgaXMgdGhlIHBvaW50IHdoZXJlIGEgbmV3IGZpbGUgbmFtZQojIG11c3QgYmUgZ2VuZXJhdGVkLgoKICAgICAgICA6OnJpdmV0OjpoZWFkZXJzIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbi9wZGYiCiAgICAgICAgOjpyaXZldDo6aGVhZGVycyBhZGQgQ29udGVudC1EaXNwb3NpdGlvbiAgICAiYXR0YWNobWVudDsgZmlsZW5hbWU9JHtwZGZuYW1lfS5wZGYiCiAgICAgICAgOjpyaXZldDo6aGVhZGVycyBhZGQgQ29udGVudC1EZXNjcmlwdGlvbiAgICAiUERGIERvY3VtZW50IgoKIyBUaGUgcGRmIGlzIHJlYWQgYW5kIHN0b3JlZCBpbiBhIFRjbCB2YXJpYWJsZS4gVGhlIGZpbGUgaGFuZGxlIGlzCiMgY29uZmlndXJlZCBmb3IgYSBiaW5hcnkgcmVhZDogd2UgYXJlIGp1c3Qgc2hpcHBpbmcgcmF3IGRhdGEgdG8gYQojIGNsaWVudC4gVGhlIGZvbGxvd2luZyA0IGxpbmVzIG9mIGNvZGUgY2FuIGJlIHJlcGxhY2VkIGJ5IGFueSBjb2RlCiMgdGhhdCBpcyBhYmxlIHRvIHJldHJpZXZlIHRoZSBkYXRhIHRvIGJlIHNlbnQgZnJvbSBhbnkgZGF0YSBzb3VyY2UKIyAoZS5nLiBkYXRhYmFzZSwgZXh0ZXJuYWwgcHJvZ3JhbSwgb3RoZXIgVGNsIGNvZGUpCgogICAgICAgIHNldCBwYXBlciAgICAgICBbb3BlbiAkcGRmX2Z1bGxfcGF0aCByXQogICAgICAgIGZjb25maWd1cmUgICAgICAkcGFwZXIgLXRyYW5zbGF0aW9uIGJpbmFyeQogICAgICAgIHNldCBwZGYgICAgICAgICBbcmVhZCAkcGFwZXJdCiAgICAgICAgY2xvc2UgJHBhcGVyCgojIE5vdyB3ZSBnb3QgdGhlIGRhdGE6IGxldCdzIHRlbGwgdGhlIGNsaWVudCBob3cgbWFueSBieXRlcyB3ZSBhcmUKIyBhYm91dCB0byBzZW5kICh1c2VmdWwgZm9yIHRoZSBkb3dubG9hZCBwcm9ncmVzcyBiYXIgb2YgYSBkaWFsb2cgYm94KQoKICAgICAgICA6OnJpdmV0OjpoZWFkZXJzIGFkZCBDb250ZW50LUxlbmd0aCAgW3N0cmluZyBsZW5ndGggJHBkZl0KCiMgTGV0J3Mgc2VuZCB0aGUgYWN0dWFsIGZpbGUgY29udGVudAoKICAgICAgICBwdXRzICRwZGYKICAgIH0gZWxzZSB7CiAgICAgICAgc291cmNlIHBkZl9ub3RfZm91bmRfZXJyb3IucnZ0CiAgICB9Cn0gZWxzZSB7CiAgICBzb3VyY2UgcGFyYW1ldGVyX25vdF9kZWZpbmVkX2Vycm9yLnJ2dAp9Cgo8L3ByZT48cCBzdHlsZT0id2lkdGg6OTAlIj4KICAgICAgICAgICAgQmVmb3JlIHRoZSBwZGYgaXMgc2VudCB0aGUgcHJvY2VkdXJlIHNldHMgdGhlCiAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb25zdGFudCI+Q29udGVudC1UeXBlPC9jb2RlPiwgCiAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb25zdGFudCI+Q29udGVudC1EaXNwb3NpdGlvbjwvY29kZT4sCiAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb25zdGFudCI+Q29udGVudC1EZXNjcmlwdGlvbjwvY29kZT4gYW5kCiAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb25zdGFudCI+Q29udGVudC1MZW5ndGg8L2NvZGU+IGhlYWRlcnMgdG8gaW5mb3JtCiAgICAgICAgICAgIHRoZSBjbGllbnQgYWJvdXQgdGhlIGZpbGUgdHlwZSwgbmFtZSBhbmQgc2l6ZS4gTm90aWNlIHRoYXQgaW4KICAgICAgICAgICAgb3JkZXIgdG8gc2V0IHRoZSA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkNvbnRlbnQtVHlwZTwvY29kZT4gaGVhZGVyIFJpdmV0IAogICAgICAgICAgICB1c2VzIGEgc3BlY2lhbGllemVkIGZvcm0gb2YgdGhlIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmhlYWRlcnM8L3N0cm9uZz48L3NwYW4+PC9zcGFuPiAKICAgICAgICAgICAgY29tbWFuZC4gSGVhZGVycyBtdXN0IGJlIHNlbnQgYmVmb3JlIGRhdGEgZ2V0cyBzZW50IGRvd24gdGhlIAogICAgICAgICAgICBvdXRwdXQgY2hhbm5lbC4gTWVzc2luZyB3aXRoIHRoaXMgcHJlc2NyaXB0aW9uIGNhdXNlcyBhbiBlcnJvciAKICAgICAgICAgICAgdG8gYmUgcmFpc2VkIChpbiBmYWN0IHRoZSBwcm90b2NvbCBpdHNlbGYgaXMgYmVlbiB2aW9sYXRlZCkKICAgICAgPC9wPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVhbmluZyBvZiB0aGUgbWltZSBoZWFkZXJzIGluIHRoZQoJaHR0cCBjb250ZXh0IGNhbiBiZSBmb3VuZCBhdCAKCTxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi5odG1sIiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYuaHRtbDwvYT4KICAgICAgPC9wPjwvZGl2PjwvZGl2PjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+PGRpdiBjbGFzcz0iZXhhbXBsZSI+PGEgbmFtZT0iYWpheF94bWxfbWVzc2FnaW5nIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxloDYuoFhNTCBNZXNzYWdlcyBhbmQgQWpheDwvYj48L3A+PGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+PHAgc3R5bGU9IndpZHRoOjkwJSI+CglUaGUgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+aGVhZGVyczwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+IGNvbW1hbmQgaXMgY3J1Y2lhbCBmb3IgZ2VuZXJhdGluZyAKCVhNTCBtZXNzYWdlcyB0aGF0IGhhdmUgdG8gYmUgdW5kZXJzdG9vZCBieSBKYXZhU2NyaXB0IGNvZGUgdXNlZCAKCWluIEFqYXggYXBwbGljYXRpb25zLiAKICAgICAgPC9wPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJICAgIEFqYXggaXMgYSB3ZWIgcHJvZ3JhbW1pbmcgdGVjaG5pcXVlIHRoYXQgaGVhdmlseSByZWxpZXMgb24gdGhlIGFiaWx0eSBvZiBhIHdlYiBicm93c2VyIHRvIHJ1biBpbiBiYWNrcm91bmQKCSAgICBKYXZhU2NyaXB0IGZ1bmN0aW9ucy4gSmF2YVNjcmlwdCBmdW5jdGlvbnMgY2FuIGJlIHJ1biBhcyBjYWxsYmFja3Mgb2YgZXZlbnRzIGdlbmVyYXRlZCBieSBhIHVzZXIgaW50ZXJhY3Rpb24gCgkgICAgYnV0IHRoZXkgY2FuIGFsc28gcmVhY3QgdG8gb3RoZXIgSS9PIGV2ZW50cywgZm9yIGV4YW1wbGUgbmV0d29yayBldmVudHMuIAoJICAgIE1vZGVybiBicm93c2VycyBlbmRvdyBKYXZhU2NyaXB0IHdpdGggdGhlIGFiaWxpdHkgdG8gYnVpbGQgaHR0cCBHRVQvUE9TVCByZXF1ZXN0cyB0byBiZSBzZW50IHRvIGEgcmVtb3RlCgkgICAgd2Vic2VydmVyLiBHZW5lcmFsbHkgdGhlc2UgcmVxdWVzdHMgcmVmZXIgdG8gc2NyaXB0cyAoZS5nLiBUY2wgc2NyaXB0cyBydW4gYnkgUml2ZXQpIHdoaWNoIGluaGVyaXQgYXMgCgkgICAgdmFyaWFibGVzIHRoZSBhcmd1bWVudHMgZW5jb2RlZCBpbiB0aGUgcmVxdWVzdC4gCgkgICAgVGhlIG91dHB1dCBwcm9kdWNlZCBieSB0aGVzZSBzY3JpcHRzIGlzIHNlbnQgYmFjayB0byB0aGUgYnJvd3NlciB3aGVyZSBjYWxsYmFja3MgZnVuY3Rpb25zIGV4dHJhY3QgCgkgICAgaW5mb3JtYXRpb24gYW5kIGhhbmQgaXQgZG93biB0byBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBtYW5pcHVsYXRlIGEgcGFnZSdzIERPTS4KCSAgICBUaGVyZWZvcmUgdGhyb3VnaCBBamF4IGJlY29tZXMgcG9zc2libGUgdG8gYnVpbGQgd2ViIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBtb3JlIHJlc3BvbnNpdmUgYW5kIGZsZXhpYmxlOiAKCSAgICBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggdGhlIGN5Y2xlIG9mIHJlcXVlc3QtZ2VuZXJhdGlvbi10cmFuc2Zlci1kaXNwbGF5IAoJICAgIG9mIGEgd2hvbGUgcGFnZSwgQWpheCBzY3JpcHRzIHJlcXVlc3QgZnJvbSBhIHdlYnNlcnZlciBvbmx5IHRoZSBlc3NlbnRpYWwgZGF0YSB0byBiZSBkaXNwbGF5ZWQuCgkgICAgQWpheCBlbXBoYXNpemVzIHRoZSByZXF1aXJlbWVudCBvZiBzZXBhcmF0aW9uIGJldHdlZW4gZGF0YSBhbmQgdXNlciBpbnRlcmZhY2UsIHNhdmVzIAoJICAgIHRoZSBzZXJ2ZXIgZnJvbSBzZW5kaW5nIG92ZXIgdGhlIHNhbWUgaHRtbCBjb2RlIGFuZCBncmFwaGljcyBpZiBvbmx5IGEgZnJhY3Rpb24gb2YgYSBwYWdlIGhhcyB0byBiZSAKCSAgICB1cGRhdGVkLCBhbGxvd3MgdGhlIHByb2dyYW1tZXIgdG8gZGVzaWduIGZsZXhpYmxlIHNvbHV0aW9ucyBmb3IgY29tcGxleCBmb3JtcyBhbmQgbWFrZXMgcG9zc2libGUKCSAgICB0byBmaW5kIG5ldyBpbm5vdmF0aXZlIGFwcHJvYWNoZXMgdG8gc2ltcGxlIHByb2JsZW1zIChlLmcuIEdvb2dsZSB0aXBzIHRoYXQgc2hvdyB1cCBhcyB5b3UgdHlwZSBpbgoJICAgIGEgcXVlcnkpLiBBIGRvd25zaWRlIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhlIGxhcmdlIG51bWJlciBvZiBjb21wbGV4aXRpZXMsIHN1YnRsZXRpZXMgYW5kIGluY29tcGF0aWJpbGl0aWVzIAoJICAgIHRoYXQgc3RpbGwgZXhpc3QgaW4gdGhlIHdheSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgcG9wdWxhciBicm93c2VycyBoYW5kbGUgdGhlIERPTSBlbGVtZW50cyBvZiBhIHBhZ2UuCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCSAgICBKYXZhU2NyaXB0IGNhbiBoYW5kbGUgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlciB0aHJvdWdoIGFuIGluc3RhbmNlIG9mIGEgCgkgICAgc3BlY2lhbGl6ZWQgb2JqZWN0LiBGb3IgcXVpdGUgYSBsb25nIHRpbWUgMiBhcHByb2FjaGVzIGV4aXN0ZWQsIHRoZSBub24tSUUgd29ybGQgKEZpcmVmb3gsU2FmYXJpLE9wZXJhLi4uKSAKCSAgICB1c2VkIHRoZSBYTUxIdHRwUmVxdWVzdCBjbGFzcyB0byBjcmVhdGUgdGhpcyBvYmplY3QsIHdoZXJlYXMgSUUgKGJlZm9yZSBJRTcpIHVzZWQgdGhlIEFjdGl2ZVhPYmplY3QgY2xhc3MuCgkgICAgV2l0aCB0aGUgcmVsZWFzZSBvZiBJRTcgTWljcm9zb2Z0IGludHJvZHVjZWQgbmF0aXZlIHN1cHBvcnQgZm9yIFhNTEh0dHBSZXF1ZXN0IGNsYXNzIG9iamVjdHMgdGh1cyBlbmFibGluZwoJICAgIHByb2dyYW1tZXJzIHdpdGggYSB1bmlxdWUgbWV0aG9kIGZvciB0aGUgZGV2ZWxvcG1lbnQgb2YgZHluYW1pYyBwYWdlcy4gCgk8L3A+PHAgc3R5bGU9IndpZHRoOjkwJSI+CgkgICAgQnkgY3JlYXRpbmcgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhIFBPU1Qgb3IgR0VUIHJlcXVlc3QgY2FuIGJlIHNlbnQgdG8gdGhlIHNlcnZlciBhbmQgdGhlIHJlc3BvbnNlIGlzIAoJICAgIHN0b3JlZCBpbiBhIHByb3BlcnR5ICgncmV0dXJuZWRUZXh0Jykgb2YgdGhlIGNvbW11bmljYXRpb24gb2JqZWN0LiBJdCdzIGJlY29tZSB3aWRlbHkgY3VzdG9tYXJ5IHRvIGVuY29kZSAKCSAgICB0aGVzZSByZXNwb25zZXMgaW4gWE1MIG1lc3NhZ2VzLiBZb3UgY2FuIGludmVudCB5b3VyIG93biBtZXNzYWdlIHN0cnVjdHVyZSAoZWl0aGVyIGJhc2VkIG9uIFhNTCBvciBhbnl0aGluZyAKCSAgICBlbHNlKSwgYnV0IG9uZSBoYXMgdG8gYmUgYXdhcmUgdGhhdCBpZiB0aGUgaHR0cCBoZWFkZXJzIGFyZSBwcm9wZXJseSBzZXQgYW5kIHRoZSBtZXNzYWdlIHJldHVybmVkIHRvIHRoZSAKCSAgICBjbGllbnQgaXMgYSB3ZWxsIGZvcm1lZCBYTUwgZnJhZ21lbnQsIGFsc28gdGhlIHByb3BlcnR5IFhNTFJlc3BvbnNlIGlzIGFzc2lnbmVkIHdpdGggYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IAoJICAgIHRoYXQgcmVwcmVzZW50cyB0aGUgRE9NIG9mIHRoZSBYTUwgcmVzcG9uc2UuIEJ5IG1lYW5zIG9mIHRoZSBYTUwgVzNDIERPTSBpbnRlcmZhY2UgdGhlIHByb2dyYW1tZXIgY2FuIGVhc2lseQoJICAgIG1hbmlwdWxhdGUgdGhlIGRhdGEgZW1iZWRkZWQgaW4gdGhlIFhNTCBtZXNzYWdlLgoJPC9wPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJICAgIEluIHRoaXMgZXhhbXBsZSBhIFJpdmV0IHNjcmlwdCBpbml0aWFsaXplcyBhbiBhcnJheSB3aXRoIHRoZSBlc3NlbnRpYWwgZGF0YSByZWdhcmRpbmcgYSBmZXcgb2YgdGhlIG1ham9yIAoJICAgIGNvbXBvc2VycyBvZiB0aGUgZXVyb3BlYW4gbXVzaWMuIFRoaXMgYXJyYXkgcGxheXMgdGhlIHJvbGUgb2YgYSBkYXRhYmFzZS4gVGhlIHNjcmlwdCBzZW5kcyBiYWNrIHRvIHRoZSAKCSAgICBjbGllbnQgdHdvIHR5cGVzIG9mIHJlc3BvbnNlczogYSBjYXRhbG9nIG9mIHRoZSBjb21wb3NlcnMgb3IgYSBzaW5nbGUgcmVjb3JkIG9mIGEgY29tcG9zZXIuCgk8L3A+PHByZSBzdHlsZT0iYmFja2dyb3VuZDojY2NjOyBtYXJnaW46IDJleDsgbWFyZ2luLXJpZ2h0OiAxMCU7ICAgICAgIHBhZGRpbmc6IDFleDsgYm9yZGVyOiBkYXNoZWQgYmxhY2sgMXB4IDsgd2hpdGUtc3BhY2U6IHByZTsgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOyBmb250LXNpemU6IDkwJTsiIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+IwojIEFqYXggcXVlcnkgc2VydmVsZXQ6IGEgcHNldWRvIGRhdGFiYXNlIGlzIGJ1aWx0IGludG8gdGhlIGRpY3Rpb25hcnkgJ2NvbXBvc2Vycycgd2l0aCB0aGUKIyBwdXJwb3NlIG9mIGVtdWxhdGluZyB0aGUgcm9sZSBvZiBhIHJlYWwgZGF0YSBzb3VyY2UuIAojIFRoZSBzY3JpcHQgYW5zd2VycyB3aXRoICAyIHR5cGVzIG9mIHJlc3BvbnNlczogYSBjYXRhbG9nIG9mIHRoZSByZWNvcmQgaWRzIGFuZCBhIGRhdGFiYXNlIAojIGVudHJ5IG1hdGNoaW5nIGEgZ2l2ZW4gcmVjX2lkLiBUaGUgc2NyaXB0IG9idmlvdXNseSBtaXNzZXMgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCB0aGUKIyBsaWtlcy4gSnVzdCBhbiBleGFtcGxlIHRvIHNlZSByaXZldCBzZW5kaW5nIHhtbCBkYXRhIHRvIGEgYnJvd3Nlci4gVGhlIGZ1bGwgVGNsLCBKYXZhU2NyaXB0CiMgYW5kIEhUTUwgY29kZSBhcmUgYXZhaWxhYmxlIGZyb20gaHR0cDovL3Blb3BsZS5hcGFjaGUub3JnL35teG1hbmdoaS9yaXZldC1hamF4LnRhci5negoKIyBUaGlzIGV4YW1wbGUgcmVxdWlyZXMgVGNsOC41IG9yIFRjbDguNCB3aXRoIHBhY2thZ2UgJ2RpY3QnIAojIChodHRwOi8vcGFzY2FsLnNjaGVmZmVycy5uZXQvc29mdHdhcmUvdGNsRGljdC04LjUuMi50YXIuZ3opCiMgCgojIEEgcHNldWRvIGRhdGFiYXNlLiByZWNfaWQgbWF0Y2hlcyBhIHJlY29yZCBpbiB0aGUgZGIKCnNldCBjb21wb3NlcnMgW2RpY3QgY3JlYXRlICBcCiAgICAgICAgICAgICAgICAxIHtmaXJzdF9uYW1lIENsYXVkaW8gbWlkZGxlX25hbWUgIiIgbGFzdF9uYW1lIE1vbnRldmVyZGkgICBcCiAgICAgICAgICAgICAgICAgICAgbGlmZXNwYW4gMTU2Ny0xNjQzIGVyYSBSZW5haXNzYW5jZS9CYXJvcXVlfSAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAyIHtmaXJzdF9uYW1lIEpvaGFubiBtaWRkbGVfbmFtZSBTZWJhc3RpYW4gbGFzdF9uYW1lIEJhY2ggICBcCiAgICAgICAgICAgICAgICAgICAgbGlmZXNwYW4gMTY4NS0xNzUwIGVyYSBCYXJvcXVlIH0gICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAzIHtmaXJzdF9uYW1lIEx1ZHdpZyBtaWRkbGVfbmFtZSAiIiBsYXN0X25hbWUgInZhbiBCZWV0aG92ZW4iIFwKICAgICAgICAgICAgICAgICAgICBsaWZlc3BhbiAxNzcwLTE4MjcgZXJhIENsYXNzaWNhbC9Sb21hbnRpY30gICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgIDQge2ZpcnN0X25hbWUgV29sZmdhbmcgbWlkZGxlX25hbWUgQW1hZGV1cyBsYXN0X25hbWUgTW96YXJ0IFwKICAgICAgICAgICAgICAgICAgICBsaWZlc3BhbiAxNzU2LTE3OTEgZXJhIENsYXNzaWNhbCB9ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgIDUge2ZpcnN0X25hbWUgUm9iZXJ0IG1pZGRsZV9uYW1lICIiIGxhc3RfbmFtZSBTY2h1bWFubiAgICAgIFwKICAgICAgICAgICAgICAgICAgICBsaWZlc3BhbiAxODEwLTE4NTYgZXJhIFJvbWFudGljfSBdCgojIHdlIHVzZSB0aGUgJ2xvYWQnIGFyZ3VtZW50IGluIG9yZGVyIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBxdWVyeQojCiMgbG9hZD1jYXRhbG9nOiAgICAgICAgIHdlIGhhdmUgdG8gcmV0dXJuIGEgbGlzdCBvZiB0aGUgbmFtZXMgaW4gdGhlIGRhdGFiYXNlCiMgbG9hZD1jb21wb3NlciZhbXA7YW1wO3Jlc19pZD0mbHQ7aWQmZ3Q7OiB0aGUgc2NyaXB0IGlzIHN1cHBvc2VkIHRvIHJldHVybiB0aGUgcmVjb3JkCiMgICAgICAgICAgICAgICBoYXZpbmcgJmx0O2lkJmd0OyBhcyByZWNvcmQgaWQKCmlmIHtbOjpyaXZldDo6dmFyIGV4aXN0cyBsb2FkXX0gewoKIyB0aGUgeG1sIGRlY2xhcmF0aW9uIGlzIGNvbW1vbiB0byBldmVyeSBtZXNzYWdlIChlcnJvciBtZXNzYWdlcyBpbmNsdWRlZCkKCiAgICBzZXQgeG1sICImbHQ7P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJJU08tODg1OS0xXCI/Jmd0O1xuIgogICAgc3dpdGNoIFs6OnJpdmV0Ojp2YXIgZ2V0IGxvYWRdIHsKICAgICAgICBjYXRhbG9nIHsKICAgICAgICAgICAgYXBwZW5kIHhtbCAiJmx0O2NhdGFsb2cmZ3Q7XG4iCiAgICAgICAgICAgIGZvcmVhY2ggbm0gW2RpY3Qga2V5cyAkY29tcG9zZXJzXSB7CiAgICAgICAgICAgICAgICBzZXQgZmlyc3RfbmFtZSAgW2RpY3QgZ2V0ICRjb21wb3NlcnMgJG5tIGZpcnN0X25hbWVdCiAgICAgICAgICAgICAgICBzZXQgbWlkZGxlX25hbWUgW2RpY3QgZ2V0ICRjb21wb3NlcnMgJG5tIG1pZGRsZV9uYW1lXQogICAgICAgICAgICAgICAgc2V0IGxhc3RfbmFtZSAgIFtkaWN0IGdldCAkY29tcG9zZXJzICRubSBsYXN0X25hbWVdCiAgICAgICAgICAgICAgICBhcHBlbmQgeG1sICIgICAgJmx0O2NvbXBvc2VyIGtleT1cIiRubVwiJmd0OyRmaXJzdF9uYW1lICIKICAgICAgICAgICAgICAgIGlmIHtbc3RyaW5nIGxlbmd0aCBbc3RyaW5nIHRyaW0gJG1pZGRsZV9uYW1lXV0gJmd0OyAwfSB7CiAgICAgICAgICAgICAgICAgICAgYXBwZW5kIHhtbCAiJG1pZGRsZV9uYW1lICIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGFwcGVuZCB4bWwgIiRsYXN0X25hbWUmbHQ7L2NvbXBvc2VyJmd0O1xuIgogICAgICAgICAgICB9CiAgICAgICAgICAgIGFwcGVuZCB4bWwgIiZsdDsvY2F0YWxvZyZndDtcbiIKICAgICAgICB9CiAgICAgICAgY29tcG9zZXIgewogICAgICAgICAgICBhcHBlbmQgeG1sICImbHQ7Y29tcG9zZXImZ3Q7XG4iCiAgICAgICAgICAgIGlmIHtbOjpyaXZldDo6dmFyIGV4aXN0cyByZWNfaWRdfSB7CiAgICAgICAgICAgICAgICBzZXQgcmVjX2lkIFs6OnJpdmV0Ojp2YXIgZ2V0IHJlY19pZF0KICAgICAgICAgICAgICAgIGlmIHtbZGljdCBleGlzdHMgJGNvbXBvc2VycyAkcmVjX2lkXX0gewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2gge2sgdn0gW2RpY3QgZ2V0ICRjb21wb3NlcnMgJHJlY19pZF0gewogICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQgeG1sICImbHQ7JGsmZ3Q7JHYmbHQ7LyRrJmd0O1xuIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBhcHBlbmQgeG1sICImbHQ7L2NvbXBvc2VyJmd0O1xuIgogICAgICAgIH0KICAgIH0KCiMgd2UgaGF2ZSB0byB0ZWxsIHRoZSBjbGllbnQgdGhpcyBpcyBhbiBYTUwgbWVzc2FnZS4gRmFpbGluZyB0byBkbyBzbwojIHdvdWxkIHJlc3VsdCBpbiBhbiBYTUxSZXNwb25zZSBwcm9wZXJ0eSBzZXQgdG8gbnVsbAoKICAgIDo6cml2ZXQ6OmhlYWRlcnMgdHlwZSAidGV4dC94bWwiCiAgICA6OnJpdmV0OjpoZWFkZXJzIGFkZCBDb250ZW50LUxlbmd0aCBbc3RyaW5nIGxlbmd0aCAkeG1sXQogICAgcHV0cyAkeG1sCn0KCgo8L3ByZT48cCBzdHlsZT0id2lkdGg6OTAlIj4KCSAgICBGb3Igc2FrZSBvZiBicmV2aXR5IHRoZSBKYXZhU2NyaXB0IGFuZCBIVE1MIHdpbGwgbm90IGxpc3RlZCBoZXJlLiBUaGV5IGNhbiBiZSBkb3dubG9hZGVkIChhbG9uZyB3aXRoIHRoZSBUY2wgCgkgICAgc2NyaXB0KSBzdG9yZWQgaW4gdGhlIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3Blb3BsZS5hcGFjaGUub3JnL35teG1hbmdoaS9yaXZldC1hamF4LnRhci5neiIgdGFyZ2V0PSJfdG9wIj5yaXZldC1hamF4LnRhci5nejwvYT4gYXJjaGl2ZS4gCgkgICAgQnkgc2ltcGx5IG9wZW5pbmcgdGhpcyB0YXIgYXJjaGl2ZSBpbiBhIGRpcmVjdG9yeSBhY2Nlc3NpYmxlIAoJICAgIGJ5IHlvdXIgYXBhY2hlIHNlcnZlciBhbmQgcG9pbnRpbmcgeW91ciBicm93c2VyIHRvIHRoZSByaXZldFNlcnZpY2UuaHRtbCBwYWdlIHlvdSBzaG91bGQgc2VlIGEgcGFnZSB3aXRoIGEgCgkgICAgZHJvcC1kb3duIGxpc3QuIEV2ZXJ5IHRpbWUgYSBkaWZmZXJlbnQgbmFtZSBpcyBwaWNrZWQgZnJvbSB0aGUgbGlzdCBhIG5ldyBxdWVyeSBpcyBzZW50IGFuZCBsb2dnZWQgaW4gdGhlIAoJICAgIGFwYWNoZSBhY2Nlc3MubG9nIGZpbGUsIGV2ZW4gdGhvdWdoIHRoZSBodG1sIGlzIG5ldmVyIHJlbG9hZGVkLgoJPC9wPjwvZGl2PjwvZGl2PjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+PGRpdiBjbGFzcz0iZXhhbXBsZSI+PGEgbmFtZT0iY2FsZW5kYXIiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgNy6gQSBDYWxlbmRhciBVdGlsaXR5PC9iPjwvcD48ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj48cCBzdHlsZT0id2lkdGg6OTAlIj4KCSAgICBSaXZldCBjb21lcyB3aXRoIGEgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+Q2FsZW5kYXI8L2VtPjwvc3Bhbj4gcGFja2FnZSB0aGF0IHByb3ZpZGVzIGNsYXNzZXMgZm9yIHByaW50aW5nIAoJICAgIGNhbGVuZGFyIHRhYmxlcyBpbiB2YXJpb3VzIGZvcm1zLgkKCTwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCQlUaGUgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+SHRtbENhbGVuZGFyPC9lbT48L3NwYW4+IGNsYXNzIHByaW50cyBhIGNhbGVuZGFyIHRhYmxlIGluIGEgc2ltaWxhciBmb3JtIHRoZSBVbml4IAoJCXByb2dyYW0gJ2NhbCcgZG9lcy4gRXhhbXBsZTogdGhlIGZvbGxvd2luZyBjb2RlCgkJPC9wPjxwcmUgc3R5bGU9ImJhY2tncm91bmQ6I2NjYzsgbWFyZ2luOiAyZXg7IG1hcmdpbi1yaWdodDogMTAlOyAgICAgICBwYWRkaW5nOiAxZXg7IGJvcmRlcjogZGFzaGVkIGJsYWNrIDFweCA7IHdoaXRlLXNwYWNlOiBwcmU7ICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgZm9udC1zaXplOiA5MCU7IiBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnBhY2thZ2UgcmVxdWlyZSBDYWxlbmRhcgoKcHJvYyA6OmNhbF9jZWxsX2F0dHJpYnV0ZXMgeyBkYXkgbW9udGggeWVhciB3ZWVrZGF5IH0gewogICAgaWYgeyR3ZWVrZGF5ID09IDN9IHsKICAgICAgICByZXR1cm4gW2xpc3QgY2xhc3MgY3Vycl93a2RheV0KICAgIH0KfQoKc2V0IGh0bWxjIFtIdG1sQ2FsZW5kYXIgI2F1dG9dCnNldCBodG1sX3R4dCBbJGh0bWxjIGVtaXQgLWNvbnRhaW5lciB7dGFibGUgY2xhc3MgY2FsZW5kYXJ9IC1jdXJyZW50X3dlZWtkYXkgMyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgLWNlbGxfZnVuY3Rpb24gY2FsX2NlbGxfYXR0cmlidXRlcyBdCnB1dHMgJGh0bWxfdHh0CjwvcHJlPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoKCSAgICB3aXRoIHNvbWUgQ1NTIHN0eWxpbmcgd291bGQgcHJpbnQKCSA8L3A+PHAgc3R5bGU9IndpZHRoOjkwJSI+CgkJPC9wPjxkaXY+PGltZyBzcmM9ImltYWdlcy9jYWxlbmRhci5wbmciPjwvZGl2PjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJIDwvcD48L2Rpdj48L2Rpdj48YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjwvZGl2PjxkaXYgY2xhc3M9Im5hdmZvb3RlciI+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBmb290ZXIiPjx0cj48dGQgd2lkdGg9IjQwJSIgYWxpZ249ImxlZnQiPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0id3JhcGxpbmUuaHRtbCI+PGltZyBzcmM9ImltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+oDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPqA8L3RkPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0icmlnaHQiPqA8YSBhY2Nlc3NrZXk9Im4iIGhyZWY9InRjbF9wYWNrYWdlcy5odG1sIj48aW1nIHNyYz0iaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPndyYXBsaW5loDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImltYWdlcy9ob21lLnBuZyIgYWx0PSJIb21lIj48L2E+PC90ZD48dGQgd2lkdGg9IjQwJSIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+oFJpdmV0IFRjbCBQYWNrYWdlczwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjwvYm9keT48L2h0bWw+Cg==