### SYNC-TRANSFER 2/2 -- mit sync-entpacken.bat entpacken ### Base64 ### FILE: index.html | 553864 PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImRlIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0 PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNl LXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8dGl0bGU+RC5SLkkuVi5FLiAtIFZJMyBD bHVzdGVyPC90aXRsZT4KICAgIDxzdHlsZT4KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgRC5S LkkuVi5FLiBQb3J0YWwgdjEuMCAtIFN0eWxlc2hlZXQKICAgT3B0aW1pZXJ0IGZ1ZXIgMTkyMHgx MDgwIChGdWxsIEhEKQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKKiB7IG1hcmdpbjogMDsg cGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQoKLyogLS0tIFRoZW1lIFZhcmlh YmxlcyAtLS0gKi8KOnJvb3QgewogICAgLS1iZy1wcmltYXJ5OiAjMWEyMzMyOwogICAgLS1iZy1w cmltYXJ5LWRhcms6ICMxMTFkMmE7CiAgICAtLWJnLWJvZHk6ICNmNWY1ZjU7CiAgICAtLWJnLWNh cmQ6ICNmZmZmZmY7CiAgICAtLWJnLWNhcmQtYWx0OiAjZThlY2YwOwogICAgLS1iZy10b29sYmFy OiAjZjBmMGYwOwogICAgLS1iZy1ob3ZlcjogI2YwZjhmZjsKICAgIC0tYmctYWN0aXZlOiAjZThm MWY3OwogICAgLS1iZy1pbnB1dDogI2ZmZmZmZjsKICAgIC0tdGV4dC1wcmltYXJ5OiAjMzMzOwog ICAgLS10ZXh0LXNlY29uZGFyeTogIzY2NjsKICAgIC0tdGV4dC1tdXRlZDogIzk5OTsKICAgIC0t dGV4dC1oZWFkaW5nOiAjMkU0QTYyOwogICAgLS1ib3JkZXItY29sb3I6ICNkZGQ7CiAgICAtLWJv cmRlci1saWdodDogI2UwZTBlMDsKICAgIC0tYm9yZGVyLXN0cm9uZzogI2MwYzBjMDsKICAgIC0t c2hhZG93LWxpZ2h0OiByZ2JhKDAsMCwwLDAuMSk7CiAgICAtLXNoYWRvdy1tZWRpdW06IHJnYmEo MCwwLDAsMC4xNSk7CiAgICAtLXNoYWRvdy1tb2RhbDogMCAxMHB4IDQwcHggcmdiYSgwLDAsMCww LjMpOwogICAgLS10cmFuc2l0aW9uLXN0ZDogYWxsIDAuM3M7CiAgICAtLXJhZGl1cy1zbTogNHB4 OwogICAgLS1yYWRpdXMtbW9kYWw6IDhweDsKfQoKW2RhdGEtdGhlbWU9Im5pZ2h0Il0gewogICAg LS1iZy1wcmltYXJ5OiAjMWEyMzMyOwogICAgLS1iZy1wcmltYXJ5LWRhcms6ICMxMTE4Mjc7CiAg ICAtLWJnLWJvZHk6ICMwZjE0MTk7CiAgICAtLWJnLWNhcmQ6ICMxYzIzMzM7CiAgICAtLWJnLWNh cmQtYWx0OiAjMjMyYjNhOwogICAgLS1iZy10b29sYmFyOiAjMjMyYjNhOwogICAgLS1iZy1ob3Zl cjogIzI1MzA0NTsKICAgIC0tYmctYWN0aXZlOiAjMmEzNjUwOwogICAgLS1iZy1pbnB1dDogIzFj MjMzMzsKICAgIC0tdGV4dC1wcmltYXJ5OiAjZTBlNmVkOwogICAgLS10ZXh0LXNlY29uZGFyeTog I2EwYWVjMDsKICAgIC0tdGV4dC1tdXRlZDogIzcxODA5NjsKICAgIC0tdGV4dC1oZWFkaW5nOiAj N2ViOGRhOwogICAgLS1ib3JkZXItY29sb3I6ICMyZDM3NDg7CiAgICAtLWJvcmRlci1saWdodDog IzJkMzc0ODsKICAgIC0tYm9yZGVyLXN0cm9uZzogIzRhNTU2ODsKICAgIC0tc2hhZG93LWxpZ2h0 OiByZ2JhKDAsMCwwLDAuMyk7CiAgICAtLXNoYWRvdy1tZWRpdW06IHJnYmEoMCwwLDAsMC40KTsK ICAgIC0tc2hhZG93LW1vZGFsOiAwIDEwcHggNDBweCByZ2JhKDAsMCwwLDAuNSk7CiAgICAtLXRy YW5zaXRpb24tc3RkOiBhbGwgMC4zczsKICAgIC0tcmFkaXVzLXNtOiA0cHg7CiAgICAtLXJhZGl1 cy1tb2RhbDogOHB4Owp9Cgpib2R5IHsKICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBC bGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwg QXJpYWwsIHNhbnMtc2VyaWY7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy1ib2R5KTsK ICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOwogICAgZGlzcGxheTogZmxleDsKICAgIGZs ZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBoZWlnaHQ6IDEwMHZoOwogICAgb3ZlcmZsb3c6IGhp ZGRlbjsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcywgY29sb3IgMC4zczsK fQoKLyogLS0tIEhlYWRlciAtLS0gKi8KaGVhZGVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZh cigtLWJnLXByaW1hcnkpOwogICAgY29sb3I6IHdoaXRlOwogICAgYm94LXNoYWRvdzogMCAycHgg NHB4IHZhcigtLXNoYWRvdy1saWdodCk7CiAgICBmbGV4LXNocmluazogMDsKICAgIHotaW5kZXg6 IDEwMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVz dGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgcGFkZGluZzogMTZweCAzMnB4OwogICAg dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzOwp9CgouZHJpdmUtbG9nbyB7IHdpZHRo OiAyMDBweDsgbWF4LXdpZHRoOiAxMDAlOyBoZWlnaHQ6IGF1dG87IH0KCi5kcml2ZS1oZWFkZXIt Y2VudGVyIHsKICAgIGZsZXg6IDE7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB3aGl0ZS1z cGFjZTogbm93cmFwOwp9CgouZHJpdmUtaGVhZGVyLWNlbnRlciBwIHsgZm9udC1zaXplOiAyMHB4 OyBmb250LXdlaWdodDogNTAwOyBsZXR0ZXItc3BhY2luZzogMC41cHg7IG9wYWNpdHk6IDAuOTU7 IG1hcmdpbjogMDsgfQoKLyogLS0tIFRoZW1lIFRvZ2dsZSAtLS0gKi8KLnRoZW1lLXRvZ2dsZSB7 CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpOwogICAgYm9yZGVyOiAxcHgg c29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjMpOwogICAgY29sb3I6IHdoaXRlOwogICAgd2lkdGg6 IDQ0cHg7CiAgICBoZWlnaHQ6IDQ0cHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBjdXJz b3I6IHBvaW50ZXI7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsK ICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNp dGlvbi1zdGQpOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi50aGVtZS10b2dnbGU6aG92ZXIgeyBi YWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMjUpOyB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7 IH0KCi50aGVtZS10b2dnbGUgLmljb24tZGF5LCAudGhlbWUtdG9nZ2xlIC5pY29uLW5pZ2h0IHsK ICAgIGZvbnQtc2l6ZTogMjJweDsgY29sb3I6IHdoaXRlOyB3aWR0aDogNDRweDsgaGVpZ2h0OiA0 NHB4OwogICAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250 ZW50OiBjZW50ZXI7CiAgICBtYXJnaW4tdG9wOiAtMnB4Owp9Ci50aGVtZS10b2dnbGUgLmljb24t ZGF5IHsgfQoudGhlbWUtdG9nZ2xlIC5pY29uLW5pZ2h0IHsgZGlzcGxheTogbm9uZTsgfQpbZGF0 YS10aGVtZT0ibmlnaHQiXSAudGhlbWUtdG9nZ2xlIC5pY29uLWRheSB7IGRpc3BsYXk6IG5vbmU7 IH0KW2RhdGEtdGhlbWU9Im5pZ2h0Il0gLnRoZW1lLXRvZ2dsZSAuaWNvbi1uaWdodCB7IGRpc3Bs YXk6IGZsZXg7IH0KCi8qIC0tLSBDb25uZWN0aW9uIEJhciAtLS0gKi8KLmNvbm5lY3Rpb24tYmFy IHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnLXByaW1hcnktZGFyayk7CiAgICBjb2xv cjogd2hpdGU7CiAgICBwYWRkaW5nOiA2cHggMzJweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBh bGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMnB4OwogICAgZm9udC1zaXplOiAxM3B4Owog ICAgZmxleC1zaHJpbms6IDA7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7 Cn0KCi5jb25uZWN0aW9uLWJhciAuc3RhdHVzLWRvdCB7CiAgICB3aWR0aDogOHB4OyBoZWlnaHQ6 IDhweDsgYm9yZGVyLXJhZGl1czogNTAlOwogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNDQ0NDsK ICAgIGZsZXgtc2hyaW5rOiAwOwp9CgouY29ubmVjdGlvbi1iYXIgLnN0YXR1cy1kb3QuY29ubmVj dGVkIHsgYmFja2dyb3VuZC1jb2xvcjogIzRDQUY1MDsgfQouY29ubmVjdGlvbi1iYXIgLnN0YXR1 cy1kb3QucmVhZG9ubHkgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTY3ZTIyOyB9CgouY29ubmVjdGlv bi1iYXIgYnV0dG9uIHsKICAgIHBhZGRpbmc6IDRweCAxMnB4OwogICAgYmFja2dyb3VuZDogdHJh bnNwYXJlbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuNCk7CiAg ICBjb2xvcjogd2hpdGU7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBjdXJzb3I6IHBvaW50 ZXI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKfQoKLmNv bm5lY3Rpb24tYmFyIGJ1dHRvbjpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUs MC4xNSk7IH0KCi5jb25uZWN0aW9uLWJhciAuc3BhY2VyIHsgZmxleDogMTsgfQoKLmNvbm5lY3Rp b24tYmFyIC5zeW5jLWluZm8geyBvcGFjaXR5OiAwLjc7IGZvbnQtc2l6ZTogMTJweDsgfQoKLyog LS0tIE1haW4gQ29udGFpbmVyIC0tLSAqLwptYWluIHsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4 LXdpZHRoOiAxODAwcHg7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIHBhZGRpbmc6IDE1cHggMzBw eDsKICAgIGZsZXg6IDE7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNv bHVtbjsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIC0tLSBDb250cm9scyAtLS0gKi8KLmNv bnRyb2xzIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwog ICAgZ2FwOiA4cHg7CiAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgZmxleC1zaHJpbms6IDA7 Cn0KCi5jb250cm9scy1yb3ctdG9wIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDEwcHg7 CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgouY29udHJvbHMtcm93LWNhdGVnb3JpZXMgewog ICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogOHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAg YWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLnNlYXJjaC1ib3ggeyBmbGV4OiAxOyBtaW4td2lkdGg6 IDI1MHB4OyB9Cgouc2VhcmNoLWJveCBpbnB1dCB7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRp bmc6IDhweCAxNXB4OwogICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsK ICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIHRyYW5zaXRp b246IGJvcmRlci1jb2xvciAwLjNzLCBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MsIGNvbG9yIDAuM3M7 CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy1pbnB1dCk7CiAgICBjb2xvcjogdmFyKC0t dGV4dC1wcmltYXJ5KTsKfQoKLnNlYXJjaC1ib3ggaW5wdXQ6Zm9jdXMgewogICAgb3V0bGluZTog bm9uZTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsKICAgIGJveC1zaGFk b3c6IDAgMCA1cHggcmdiYSg0NiwgNzQsIDk4LCAwLjIpOwp9CgouZmlsdGVyLWJ1dHRvbnMsIC5z dGF0dXMtZmlsdGVycyB7IGRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBmbGV4LXdyYXA6IHdyYXA7 IH0KCi5maWx0ZXItYnRuIHsKICAgIHBhZGRpbmc6IDhweCAxNXB4OwogICAgYmFja2dyb3VuZC1j b2xvcjogdmFyKC0tYmctY2FyZCk7CiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS10ZXh0LWhl YWRpbmcpOwogICAgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7CiAgICBib3JkZXItcmFkaXVz OiA0cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgZm9u dC1zaXplOiAxNHB4OwogICAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbi1zdGQpOwp9Cgou ZmlsdGVyLWJ0bjpob3ZlciwgLmZpbHRlci1idG4uYWN0aXZlIHsgYmFja2dyb3VuZC1jb2xvcjog dmFyKC0tdGV4dC1oZWFkaW5nKTsgY29sb3I6IHdoaXRlOyB9Cgouc3RhdHVzLWZpbHRlci1idG4g ewogICAgcGFkZGluZzogOHB4IDEycHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy1j YXJkKTsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBib3Jk ZXItcmFkaXVzOiA0cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXdlaWdodDogNTAw OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbi1z dGQpOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6 IDVweDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOwp9Cgouc3RhdHVzLWZpbHRlci1i dG46aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7IH0KLnN0YXR1cy1m aWx0ZXItYnRuLmFjdGl2ZSB7IGJvcmRlci1jb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsgYmFj a2dyb3VuZC1jb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsgY29sb3I6IHdoaXRlOyB9CgovKiAt LS0gVHdvLUNvbHVtbiBMYXlvdXQgLS0tICovCi5jb250YWluZXIgewogICAgZGlzcGxheTogZ3Jp ZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMzUwcHggMWZyOwogICAgZ2FwOiAyMHB4Owog ICAgZmxleDogMTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIC0tLSBMaXN0ZSAtLS0gKi8K LmRvY3VtZW50LWxpc3QgewogICAgYmFja2dyb3VuZDogdmFyKC0tYmctY2FyZCk7CiAgICBib3Jk ZXItcmFkaXVzOiA0cHg7CiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggdmFyKC0tc2hhZG93LWxp Z2h0KTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1k aXJlY3Rpb246IGNvbHVtbjsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zczsK fQoKLmxpc3QtaGVhZGVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnLWNhcmQtYWx0 KTsKICAgIHBhZGRpbmc6IDE1cHg7CiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0t dGV4dC1oZWFkaW5nKTsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogdmFyKC0tdGV4 dC1oZWFkaW5nKTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNl LWJldHdlZW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dy b3VuZC1jb2xvciAwLjNzOwp9CgoubGlzdC1oZWFkZXIgLmRvYy1jb3VudCB7IGZvbnQtc2l6ZTog MTJweDsgZm9udC13ZWlnaHQ6IDQwMDsgb3BhY2l0eTogMC43OyB9CgoubGlzdC1pdGVtcyB7IG92 ZXJmbG93LXk6IGF1dG87IGZsZXg6IDE7IH0KCi5kb2N1bWVudC1pdGVtIHsKICAgIHBhZGRpbmc6 IDE2cHg7CiAgICBwYWRkaW5nLWxlZnQ6IDE2cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29s aWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsKICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNw YXJlbnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0 aW9uLXN0ZCk7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5kb2N1bWVudC1pdGVtOmhvdmVy IHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnLWhvdmVyKTsKICAgIGJvcmRlci1sZWZ0 LWNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOwp9CgouZG9jdW1lbnQtaXRlbS5hY3RpdmUgewog ICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctYWN0aXZlKTsKICAgIGJvcmRlci1sZWZ0LWNv bG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOwp9CgouZG9jdW1lbnQtaXRlbS5kcmFmdCB7IG9wYWNp dHk6IDAuNzsgfQoKLmRvYy1pdGVtLXRpdGxlIHsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXpl OiAxNXB4OyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsgbWFyZ2luLWJvdHRvbTogNXB4OyB9 CgouZG9jLWl0ZW0tbWV0YSB7IGRpc3BsYXk6IGZsZXg7IGdhcDogMTBweDsgZmxleC13cmFwOiB3 cmFwOyBtYXJnaW4tYm90dG9tOiA1cHg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH0KCi5kb2MtaXRl bS1jYXRlZ29yeSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBiYWNrZ3JvdW5kLWNv bG9yOiB2YXIoLS1ib3JkZXItbGlnaHQpOwogICAgcGFkZGluZzogMnB4IDhweDsKICAgIGJvcmRl ci1yYWRpdXM6IDNweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0 LXNlY29uZGFyeSk7Cn0KCi5zdGF0dXMtYmFkZ2Utc21hbGwgewogICAgZGlzcGxheTogaW5saW5l LWJsb2NrOwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAg IGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5kb2MtaXRlbS1kYXRl IHsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IH0KCi8qIC0tLSBE ZXRhaWwgVmlldyAtLS0gKi8KLmRvY3VtZW50LWRldGFpbCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIo LS1iZy1jYXJkKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJveC1zaGFkb3c6IDAgMXB4 IDNweCB2YXIoLS1zaGFkb3ctbGlnaHQpOwogICAgcGFkZGluZzogMzBweDsKICAgIG92ZXJmbG93 LXk6IGF1dG87CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVh c2UtaW47CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7Cn0KCi5kZXRhaWwt ZW1wdHkgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBq dXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGhlaWdodDogMTAwJTsKICAgIGNvbG9yOiB2YXIo LS10ZXh0LW11dGVkKTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmRldGFpbC1oZWFkZXIg ewogICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgIHBhZGRpbmctYm90dG9tOiAxNXB4OwogICAg Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXRleHQtaGVhZGluZyk7Cn0KCi5kZXRhaWwt dGl0bGUgeyBmb250LXNpemU6IDI4cHg7IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOyBtYXJn aW4tYm90dG9tOiAxMHB4OyBmb250LXdlaWdodDogNjAwOyB9CgouZGV0YWlsLW1ldGEgeyBkaXNw bGF5OiBmbGV4OyBnYXA6IDI1cHg7IGZsZXgtd3JhcDogd3JhcDsgZm9udC1zaXplOiAxNXB4OyBj b2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOyB9CgoubWV0YS1pdGVtIHsgZGlzcGxheTogZmxl eDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfQoubWV0YS1sYWJlbCB7IGZvbnQtd2VpZ2h0OiA2 MDA7IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOyBtYXJnaW4tYm90dG9tOiAzcHg7IH0KCi5z dGF0dXMtYmFkZ2UgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcGFkZGluZzogM3B4 IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBm b250LXdlaWdodDogNjAwOwogICAgd2lkdGg6IGZpdC1jb250ZW50OwogICAgbGluZS1oZWlnaHQ6 IDEuNDsKfQoKLmRldGFpbC1jb250ZW50IHsKICAgIGZvbnQtc2l6ZTogMTVweDsKICAgIGxpbmUt aGVpZ2h0OiAxLjY7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsKICAgIG1hcmdpbjog MTVweCAwIDI1cHggMDsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIG92ZXJmbG93LXdy YXA6IGJyZWFrLXdvcmQ7CiAgICBvdmVyZmxvdy14OiBoaWRkZW47Cn0KCi5kZXRhaWwtY29udGVu dCBoMSB7CiAgICBmb250LXNpemU6IDI0cHg7IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOyBm b250LXdlaWdodDogNzAwOwogICAgbWFyZ2luOiAyNHB4IDAgMTJweCAwOyBwYWRkaW5nOiAxMnB4 IDA7IGJvcmRlci1ib3R0b206IDNweCBzb2xpZCB2YXIoLS10ZXh0LWhlYWRpbmcpOwp9Ci5kZXRh aWwtY29udGVudCBoMiB7CiAgICBmb250LXNpemU6IDIwcHg7IGNvbG9yOiB2YXIoLS10ZXh0LWhl YWRpbmcpOyBmb250LXdlaWdodDogNzAwOwogICAgbWFyZ2luOiAyMHB4IDAgMTBweCAwOyBwYWRk aW5nOiAxMHB4IDA7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQp Owp9Ci5kZXRhaWwtY29udGVudCBoMyB7CiAgICBmb250LXNpemU6IDE3cHg7IGNvbG9yOiB2YXIo LS10ZXh0LWhlYWRpbmcpOyBmb250LXdlaWdodDogNzAwOwogICAgbWFyZ2luOiAxNnB4IDAgOHB4 IDA7IHBhZGRpbmc6IDZweCAwOwp9Ci5kZXRhaWwtY29udGVudCBoNCB7CiAgICBmb250LXNpemU6 IDE1cHg7IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOyBmb250LXdlaWdodDogNjAwOwogICAg bWFyZ2luOiAxMnB4IDAgNnB4IDA7Cn0KCi5kZXRhaWwtY29udGVudCBwIHsgbWFyZ2luOiAwIDAg MC40ZW0gMDsgfQouZGV0YWlsLWNvbnRlbnQgKiB7IG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50 OyBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkICFpbXBvcnRhbnQ7IHdvcmQtYnJlYWs6IGJyZWFr LXdvcmQgIWltcG9ydGFudDsgfQouZGV0YWlsLWNvbnRlbnQgc3BhbiB7IHdoaXRlLXNwYWNlOiBp bmhlcml0ICFpbXBvcnRhbnQ7IH0KLmRldGFpbC1jb250ZW50OjphZnRlciB7IGNvbnRlbnQ6ICIi OyBkaXNwbGF5OiB0YWJsZTsgY2xlYXI6IGJvdGg7IH0KCi8qIC0tLSBBY2NvcmRpb24gKEF1Zmts YXBwYmFyZSBUZXh0YmVyZWljaGUpIC0tLSAqLwouZHJpdmUtYWNjb3JkaW9uIHsKICAgIGJvcmRl cjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IGJvcmRlci1yYWRpdXM6IDhweDsKICAg IG1hcmdpbjogNnB4IDA7IG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiAjZjBmNWZh Owp9Ci5kcml2ZS1hY2NvcmRpb24gKyAuZHJpdmUtYWNjb3JkaW9uIHsgbWFyZ2luLXRvcDogMDsg Ym9yZGVyLXRvcDogbm9uZTsgYm9yZGVyLXJhZGl1czogMDsgfQouZHJpdmUtYWNjb3JkaW9uOmZp cnN0LWNoaWxkLCAuZHJpdmUtYWNjb3JkaW9uOm5vdCguZHJpdmUtYWNjb3JkaW9uICsgLmRyaXZl LWFjY29yZGlvbikgeyBib3JkZXItcmFkaXVzOiA4cHggOHB4IDAgMDsgfQouZHJpdmUtYWNjb3Jk aW9uOmxhc3Qtb2YtdHlwZSB7IGJvcmRlci1yYWRpdXM6IDAgMCA4cHggOHB4OyB9Ci5kcml2ZS1h Y2NvcmRpb246b25seS1vZi10eXBlIHsgYm9yZGVyLXJhZGl1czogOHB4OyB9CltkYXRhLXRoZW1l PSJuaWdodCJdIC5kcml2ZS1hY2NvcmRpb24geyBiYWNrZ3JvdW5kOiAjMWMyYTNhOyB9CgouZHJp dmUtYWNjb3JkaW9uLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2Vu dGVyOyBnYXA6IDEwcHg7CiAgICBwYWRkaW5nOiAxMXB4IDE2cHg7IGN1cnNvcjogcG9pbnRlcjsg dXNlci1zZWxlY3Q6IG5vbmU7CiAgICBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDE0cHg7 IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOwogICAgYmFja2dyb3VuZDogI2U0ZWNmNDsgdHJh bnNpdGlvbjogYmFja2dyb3VuZCAwLjE1czsKfQpbZGF0YS10aGVtZT0ibmlnaHQiXSAuZHJpdmUt YWNjb3JkaW9uLWhlYWRlciB7IGJhY2tncm91bmQ6ICMyNDMwNDA7IH0KLmRyaXZlLWFjY29yZGlv bi1oZWFkZXI6aG92ZXIgeyBiYWNrZ3JvdW5kOiAjZDhlNGYwOyB9CltkYXRhLXRoZW1lPSJuaWdo dCJdIC5kcml2ZS1hY2NvcmRpb24taGVhZGVyOmhvdmVyIHsgYmFja2dyb3VuZDogIzJhM2E0ZTsg fQoKLmRyaXZlLWFjY29yZGlvbi1hcnJvdyB7CiAgICBmbGV4LXNocmluazogMDsgd2lkdGg6IDE2 cHg7IGhlaWdodDogMTZweDsKICAgIGJhY2tncm91bmQ6IHVybCgnY3NzL2ljb25zL0NoZXZyb25f YXJ0aWNsZV9jbG9zZWQucG5nJykgY2VudGVyL2NvbnRhaW4gbm8tcmVwZWF0OwogICAgdHJhbnNp dGlvbjogdHJhbnNmb3JtIDAuMnM7Cn0KLmRyaXZlLWFjY29yZGlvbi1hcnJvdyBpbWcgeyBkaXNw bGF5OiBub25lOyB9Ci5kcml2ZS1hY2NvcmRpb24ub3BlbiAuZHJpdmUtYWNjb3JkaW9uLWFycm93 IHsgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOyB9CltkYXRhLXRoZW1lPSJuaWdodCJdIC5kcml2 ZS1hY2NvcmRpb24tYXJyb3cgeyBmaWx0ZXI6IGludmVydCgxKSBicmlnaHRuZXNzKDEuNSk7IH0K Ci5kcml2ZS1hY2NvcmRpb24tYm9keSB7CiAgICBkaXNwbGF5OiBub25lOyBwYWRkaW5nOiAxNHB4 IDE4cHg7CiAgICBmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAxLjc7IGNvbG9yOiB2YXIo LS10ZXh0LXByaW1hcnkpOwp9Ci5kcml2ZS1hY2NvcmRpb24ub3BlbiAuZHJpdmUtYWNjb3JkaW9u LWJvZHkgeyBkaXNwbGF5OiBibG9jazsgfQouZHJpdmUtYWNjb3JkaW9uLWJvZHkgdWwsIC5kcml2 ZS1hY2NvcmRpb24tYm9keSBvbCB7IHBhZGRpbmctbGVmdDogMjBweDsgbWFyZ2luOiA2cHggMDsg fQouZHJpdmUtYWNjb3JkaW9uLWJvZHkgbGkgeyBtYXJnaW4tYm90dG9tOiAycHg7IH0KCi8qIFN1 Yi1IZWFkZXIgaW5uZXJoYWxiIGVpbmVzIEFjY29yZGlvbnMgKEZBUS1TdGlsKSAqLwouZHJpdmUt YWNjb3JkaW9uLXN1YiB7CiAgICBtYXJnaW46IDEwcHggMCA2cHggMDsgcGFkZGluZzogOHB4IDEy cHg7CiAgICBiYWNrZ3JvdW5kOiAjZGNlNmYwOyBib3JkZXItcmFkaXVzOiA1cHg7IGJvcmRlci1s ZWZ0OiAzcHggc29saWQgdmFyKC0tdGV4dC1oZWFkaW5nKTsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7 IGZvbnQtc2l6ZTogMTNweDsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7Cn0KW2RhdGEtdGhl bWU9Im5pZ2h0Il0gLmRyaXZlLWFjY29yZGlvbi1zdWIgeyBiYWNrZ3JvdW5kOiAjMWUyZTQwOyB9 CgovKiAtLS0gRkFRLUJlcmVpY2ggLS0tICovCi5kcml2ZS1mYXEgewogICAgYm9yZGVyOiAxcHgg c29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgYm9yZGVyLXJhZGl1czogOHB4OwogICAgbWFyZ2lu OiAxNnB4IDA7IG92ZXJmbG93OiBoaWRkZW47Cn0KLmRyaXZlLWZhcS1oZWFkZXIgewogICAgZGlz cGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMHB4OwogICAgcGFkZGluZzog MTJweCAxNnB4OyBmb250LXdlaWdodDogNzAwOyBmb250LXNpemU6IDE1cHg7CiAgICBjb2xvcjog d2hpdGU7IGJhY2tncm91bmQ6IHZhcigtLXRleHQtaGVhZGluZyk7Cn0KLmRyaXZlLWZhcS1ib2R5 IHsgcGFkZGluZzogMDsgfQouZHJpdmUtZmFxLWl0ZW0geyBib3JkZXItYm90dG9tOiAxcHggc29s aWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgfQouZHJpdmUtZmFxLWl0ZW06bGFzdC1jaGlsZCB7IGJv cmRlci1ib3R0b206IG5vbmU7IH0KLmRyaXZlLWZhcS1xdWVzdGlvbiB7CiAgICBkaXNwbGF5OiBm bGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDEwcHg7CiAgICBwYWRkaW5nOiAxMHB4IDE2 cHg7IGN1cnNvcjogcG9pbnRlcjsgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBmb250LXdlaWdodDog NjAwOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOwogICAgYmFj a2dyb3VuZDogI2VkZjJmODsgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1czsKfQpbZGF0YS10 aGVtZT0ibmlnaHQiXSAuZHJpdmUtZmFxLXF1ZXN0aW9uIHsgYmFja2dyb3VuZDogIzFlMmEzODsg fQouZHJpdmUtZmFxLXF1ZXN0aW9uOmhvdmVyIHsgYmFja2dyb3VuZDogI2UwZWFmNDsgfQpbZGF0 YS10aGVtZT0ibmlnaHQiXSAuZHJpdmUtZmFxLXF1ZXN0aW9uOmhvdmVyIHsgYmFja2dyb3VuZDog IzI1MzQ0NDsgfQouZHJpdmUtZmFxLWFycm93IHsKICAgIGZsZXgtc2hyaW5rOiAwOyB3aWR0aDog MTRweDsgaGVpZ2h0OiAxNHB4OwogICAgYmFja2dyb3VuZDogdXJsKCdjc3MvaWNvbnMvQ2hldnJv bl9hcnRpY2xlX2Nsb3NlZC5wbmcnKSBjZW50ZXIvY29udGFpbiBuby1yZXBlYXQ7CiAgICB0cmFu c2l0aW9uOiB0cmFuc2Zvcm0gMC4yczsKfQouZHJpdmUtZmFxLWFycm93IGltZyB7IGRpc3BsYXk6 IG5vbmU7IH0KLmRyaXZlLWZhcS1pdGVtLm9wZW4gLmRyaXZlLWZhcS1hcnJvdyB7IHRyYW5zZm9y bTogcm90YXRlKDkwZGVnKTsgfQpbZGF0YS10aGVtZT0ibmlnaHQiXSAuZHJpdmUtZmFxLWFycm93 IHsgZmlsdGVyOiBpbnZlcnQoMSkgYnJpZ2h0bmVzcygxLjUpOyB9Ci5kcml2ZS1mYXEtYW5zd2Vy IHsKICAgIGRpc3BsYXk6IG5vbmU7IHBhZGRpbmc6IDEwcHggMTZweCAxNHB4IDE2cHg7CiAgICBm b250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAxLjc7IGNvbG9yOiB2YXIoLS10ZXh0LXByaW1h cnkpOwogICAgYmFja2dyb3VuZDogI2Y2ZjlmYzsKfQpbZGF0YS10aGVtZT0ibmlnaHQiXSAuZHJp dmUtZmFxLWFuc3dlciB7IGJhY2tncm91bmQ6ICMxYTI0MzA7IH0KLmRyaXZlLWZhcS1pdGVtLm9w ZW4gLmRyaXZlLWZhcS1hbnN3ZXIgeyBkaXNwbGF5OiBibG9jazsgfQouZHJpdmUtZmFxLWFuc3dl ciB1bCwgLmRyaXZlLWZhcS1hbnN3ZXIgb2wgeyBwYWRkaW5nLWxlZnQ6IDIwcHg7IG1hcmdpbjog NnB4IDA7IH0KCi8qIC0tLSBJbmZvYm94IChoZXJ2b3JnZWhvYmVuZXIgQmxvY2ssIHdpZSBpbmZv LXNlY3Rpb24gYXVmIGRlciBTdGFydHNlaXRlKSAtLS0gKi8KLmRyaXZlLWluZm9ib3ggewogICAg YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctY2FyZC1hbHQpOyBib3JkZXItbGVmdDogNHB4IHNv bGlkIHZhcigtLXRleHQtaGVhZGluZyk7CiAgICBwYWRkaW5nOiAxOHB4IDIwcHg7IG1hcmdpbjog MTRweCAwOyBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBmb250LXNpemU6IDE0cHg7IGxpbmUtaGVp Z2h0OiAxLjc7IGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOwp9Ci5kcml2ZS1pbmZvYm94IGgy IHsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7IGZvbnQtc2l6ZTogMThweDsgZm9udC13ZWln aHQ6IDcwMDsgbWFyZ2luOiAwIDAgOHB4IDA7IH0KLmRyaXZlLWluZm9ib3ggaDMgeyBjb2xvcjog dmFyKC0tdGV4dC1oZWFkaW5nKTsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNzAwOyBt YXJnaW46IDAgMCA2cHggMDsgfQouZHJpdmUtaW5mb2JveCB1bCwgLmRyaXZlLWluZm9ib3ggb2wg eyBtYXJnaW4tbGVmdDogMjBweDsgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsgfQouZHJp dmUtaW5mb2JveCBsaSB7IG1hcmdpbi1ib3R0b206IDZweDsgbGluZS1oZWlnaHQ6IDEuNTsgfQou ZHJpdmUtaW5mb2JveCBzdHJvbmcgeyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsgfQoKLyog LS0tIFdpY2h0aWctQmxvY2sgKGF1ZmZhZWxsaWdlIEhlcnZvcmhlYnVuZyBmdWVyIHdpY2h0aWdl IEhpbndlaXNlKSAtLS0gKi8KLmRyaXZlLWltcG9ydGFudCB7CiAgICBib3JkZXI6IDFweCBzb2xp ZCAjM2E3YWEzOyBib3JkZXItbGVmdDogNHB4IHNvbGlkICMxYTIzMzI7CiAgICBib3JkZXItcmFk aXVzOiA4cHg7IG1hcmdpbjogMTRweCAwOyBvdmVyZmxvdzogaGlkZGVuOwp9Ci5kcml2ZS1pbXBv cnRhbnQtaGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdh cDogMTBweDsKICAgIHBhZGRpbmc6IDExcHggMTZweDsgZm9udC13ZWlnaHQ6IDcwMDsgZm9udC1z aXplOiAxNHB4OwogICAgY29sb3I6ICNmZmY7IGJhY2tncm91bmQ6ICMxYTIzMzI7Cn0KW2RhdGEt dGhlbWU9Im5pZ2h0Il0gLmRyaXZlLWltcG9ydGFudCB7IGJvcmRlci1jb2xvcjogIzNhN2FhMzsg fQpbZGF0YS10aGVtZT0ibmlnaHQiXSAuZHJpdmUtaW1wb3J0YW50LWhlYWRlciB7IGNvbG9yOiAj ZmZmOyBiYWNrZ3JvdW5kOiAjMWUzYTVmOyB9Ci5kcml2ZS1pbXBvcnRhbnQtaGVhZGVyIGltZyB7 IHdpZHRoOiAxOHB4OyBoZWlnaHQ6IDE4cHg7IGZpbHRlcjogaW52ZXJ0KDEpIGJyaWdodG5lc3Mo Mik7IH0KW2RhdGEtdGhlbWU9Im5pZ2h0Il0gLmRyaXZlLWltcG9ydGFudC1oZWFkZXIgaW1nIHsg ZmlsdGVyOiBpbnZlcnQoMSkgYnJpZ2h0bmVzcygyKTsgfQouZHJpdmUtaW1wb3J0YW50LWJvZHkg ewogICAgcGFkZGluZzogMTRweCAxOHB4OyBmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAx Ljc7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsgYmFja2dyb3VuZDogI2VkZjRmYjsK fQpbZGF0YS10aGVtZT0ibmlnaHQiXSAuZHJpdmUtaW1wb3J0YW50LWJvZHkgeyBiYWNrZ3JvdW5k OiAjMTYyYTNlOyB9Ci5kcml2ZS1pbXBvcnRhbnQtYm9keSB1bCwgLmRyaXZlLWltcG9ydGFudC1i b2R5IG9sIHsgcGFkZGluZy1sZWZ0OiAyMHB4OyBtYXJnaW46IDZweCAwOyB9Ci5kcml2ZS1pbXBv cnRhbnQtYm9keSBsaSB7IG1hcmdpbi1ib3R0b206IDJweDsgfQoKLyogLS0tIFRyZW5ubGluaWUg LS0tICovCi5kcml2ZS1kaXZpZGVyIHsKICAgIGJvcmRlcjogbm9uZTsgYm9yZGVyLXRvcDogMnB4 IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7CiAgICBtYXJnaW46IDIwcHggMDsKfQpbZGF0YS10 aGVtZT0ibmlnaHQiXSAuZHJpdmUtZGl2aWRlciB7IGJvcmRlci10b3AtY29sb3I6IHZhcigtLWJv cmRlci1zdHJvbmcpOyB9CgovKiAtLS0gQXJ0aWtlbC1UYWJlbGxlbiAoZHJpdmUtdGFibGUpIC0t LSAqLwouZHJpdmUtdGFibGUtd3JhcCB7IG1hcmdpbjogMTRweCAwOyBvdmVyZmxvdy14OiBhdXRv OyB9Ci5kcml2ZS10YWJsZSB7CiAgICB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xs YXBzZTsgZm9udC1zaXplOiAxM3B4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVy LWxpZ2h0KTsgYm9yZGVyLXJhZGl1czogNnB4Owp9Ci5kcml2ZS10YWJsZSB0aCwgLmRyaXZlLXRh YmxlIHRkIHsKICAgIHBhZGRpbmc6IDhweCAxMnB4OyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1i b3JkZXItbGlnaHQpOwogICAgdGV4dC1hbGlnbjogbGVmdDsgdmVydGljYWwtYWxpZ246IHRvcDsK fQouZHJpdmUtdGFibGUgdGggewogICAgYmFja2dyb3VuZDogI2U0ZWNmNDsgZm9udC13ZWlnaHQ6 IDYwMDsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7CiAgICBmb250LXNpemU6IDEycHg7IHRl eHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAwLjNweDsKfQpbZGF0YS10 aGVtZT0ibmlnaHQiXSAuZHJpdmUtdGFibGUgdGggeyBiYWNrZ3JvdW5kOiAjMjQzMDQwOyB9Ci5k cml2ZS10YWJsZSB0aC5zb3J0YWJsZSB7IGN1cnNvcjogcG9pbnRlcjsgdXNlci1zZWxlY3Q6IG5v bmU7IH0KLmRyaXZlLXRhYmxlIHRoLnNvcnRhYmxlOmhvdmVyIHsgYmFja2dyb3VuZDogI2Q4ZTRm MDsgfQpbZGF0YS10aGVtZT0ibmlnaHQiXSAuZHJpdmUtdGFibGUgdGguc29ydGFibGU6aG92ZXIg eyBiYWNrZ3JvdW5kOiAjMmEzYTRlOyB9Ci5kcml2ZS10YWJsZSB0aC5zb3J0LWFzYzo6YWZ0ZXIg eyBjb250ZW50OiAnIOKWsic7IGZvbnQtc2l6ZTogMTBweDsgY29sb3I6IHZhcigtLXRleHQtbXV0 ZWQpOyB9Ci5kcml2ZS10YWJsZSB0aC5zb3J0LWRlc2M6OmFmdGVyIHsgY29udGVudDogJyDilrwn OyBmb250LXNpemU6IDEwcHg7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgfQouZHJpdmUtdGFi bGUgdGQgeyBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsgfQouZHJpdmUtdGFibGUgdGJvZHkg dHI6bnRoLWNoaWxkKGV2ZW4pIHsgYmFja2dyb3VuZDogI2Y4ZmFmYzsgfQpbZGF0YS10aGVtZT0i bmlnaHQiXSAuZHJpdmUtdGFibGUgdGJvZHkgdHI6bnRoLWNoaWxkKGV2ZW4pIHsgYmFja2dyb3Vu ZDogIzFjMjgzNjsgfQouZHJpdmUtdGFibGUgdGJvZHkgdHI6aG92ZXIgeyBiYWNrZ3JvdW5kOiB2 YXIoLS1iZy1ob3Zlcik7IH0KLmRyaXZlLXRhYmxlIC5yb3ctaGVhZGVyIHsKICAgIGJhY2tncm91 bmQ6ICNlZGYyZjg7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcp Owp9CltkYXRhLXRoZW1lPSJuaWdodCJdIC5kcml2ZS10YWJsZSAucm93LWhlYWRlciB7IGJhY2tn cm91bmQ6ICMxZTJhMzg7IH0KCi8qIEFjY29yZGlvbiBpbSBFZGl0b3I6IGJlYXJiZWl0YmFyICov Ci5kcml2ZS1hY2NvcmRpb25bY29udGVudGVkaXRhYmxlPSJmYWxzZSJdIHsgY3Vyc29yOiBkZWZh dWx0OyB9Ci5kcml2ZS1hY2NvcmRpb24gLmRyaXZlLWFjY29yZGlvbi1ib2R5IGEgeyBjb2xvcjog IzI1NjNlYjsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KW2RhdGEtdGhlbWU9Im5pZ2h0 Il0gLmRyaXZlLWFjY29yZGlvbiAuZHJpdmUtYWNjb3JkaW9uLWJvZHkgYSB7IGNvbG9yOiAjNjBh NWZhOyB9CgouZGV0YWlsLWNvbnRlbnQgYSB7IGNvbG9yOiAjMjU2M2ViOyB0ZXh0LWRlY29yYXRp b246IHVuZGVybGluZTsgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAycHg7IH0KLmRldGFpbC1jb250 ZW50IGE6aG92ZXIgeyBjb2xvcjogIzFkNGVkODsgfQpbZGF0YS10aGVtZT0ibmlnaHQiXSAuZGV0 YWlsLWNvbnRlbnQgYSB7IGNvbG9yOiAjNjBhNWZhOyB9CltkYXRhLXRoZW1lPSJuaWdodCJdIC5k ZXRhaWwtY29udGVudCBhOmhvdmVyIHsgY29sb3I6ICM5M2JiZmM7IH0KCi8qIC0tLSBDcm9zc2xp bmstRXJrZW5udW5nIC0tLSAqLwouY3Jvc3NsaW5rIHsKICAgIGJvcmRlci1ib3R0b206IDEuNXB4 IGRhc2hlZCB2YXIoLS10ZXh0LWhlYWRpbmcpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcG9z aXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1czsKfQouY3Jv c3NsaW5rOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYmctYWN0aXZlKTsgfQouY3Jvc3NsaW5r LXBvcG92ZXIgewogICAgZGlzcGxheTogbm9uZTsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHot aW5kZXg6IDkwMDA7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkKTsKICAgIGJvcmRlcjog MXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAg ICBib3gtc2hhZG93OiAwIDZweCAyNHB4IHZhcigtLXNoYWRvdy1tZWRpdW0pOwogICAgcGFkZGlu ZzogMTJweCAxNHB4OwogICAgd2lkdGg6IDMyMHB4OwogICAgbWF4LXdpZHRoOiA5MHZ3OwogICAg Zm9udC1zaXplOiAxM3B4OwogICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgIGNvbG9yOiB2YXIoLS10 ZXh0LXByaW1hcnkpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KLmNyb3NzbGluay1wb3Bv dmVyLnZpc2libGUgeyBkaXNwbGF5OiBibG9jazsgfQouY3Jvc3NsaW5rLXBvcG92ZXIgLnhsaW5r LWhlYWRlciB7CiAgICBmb250LXdlaWdodDogNzAwOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiB2 YXIoLS10ZXh0LWhlYWRpbmcpOwogICAgbWFyZ2luLWJvdHRvbTogNnB4OyBkaXNwbGF5OiBmbGV4 OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDsKfQouY3Jvc3NsaW5rLXBvcG92ZXIgLnhs aW5rLWhlYWRlciAueGxpbmstaWNvbiB7IGZvbnQtc2l6ZTogMTJweDsgb3BhY2l0eTogMC42OyB9 Ci5jcm9zc2xpbmstcG9wb3ZlciAueGxpbmstbWV0YSB7CiAgICBmb250LXNpemU6IDExcHg7IGNv bG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgbWFyZ2luLWJvdHRvbTogNnB4OwogICAgZGlzcGxheTog ZmxleDsgZ2FwOiA4cHg7IGZsZXgtd3JhcDogd3JhcDsKfQouY3Jvc3NsaW5rLXBvcG92ZXIgLnhs aW5rLWV4Y2VycHQgewogICAgZm9udC1zaXplOiAxMnB4OyBjb2xvcjogdmFyKC0tdGV4dC1zZWNv bmRhcnkpOyBsaW5lLWhlaWdodDogMS41OwogICAgbWF4LWhlaWdodDogNjBweDsgb3ZlcmZsb3c6 IGhpZGRlbjsKfQouY3Jvc3NsaW5rLXBvcG92ZXIgLnhsaW5rLXRhZ3MgeyBtYXJnaW4tdG9wOiA2 cHg7IGRpc3BsYXk6IGZsZXg7IGdhcDogNHB4OyBmbGV4LXdyYXA6IHdyYXA7IH0KLmNyb3NzbGlu ay1wb3BvdmVyIC54bGluay10YWdzIHNwYW4gewogICAgZm9udC1zaXplOiAxMHB4OyBwYWRkaW5n OiAxcHggNnB4OyBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1h Y3RpdmUpOyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsKfQouY3Jvc3NsaW5rLXBvcG92ZXIg LnhsaW5rLWFjdGlvbiB7CiAgICBtYXJnaW4tdG9wOiA4cHg7IHBhZGRpbmctdG9wOiA2cHg7IGJv cmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOwogICAgZm9udC1zaXplOiAx MXB4OyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsgcG9pbnRlci1ldmVudHM6IGF1dG87IGN1 cnNvcjogcG9pbnRlcjsKfQouY3Jvc3NsaW5rLXBvcG92ZXIgLnhsaW5rLWFjdGlvbjpob3ZlciB7 IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9CgovKiAtLS0gRGlmZi1BbnNpY2h0IGZ1ZXIg UmV2aWV3IC0tLSAqLwouZGlmZi1hZGRlZCB7IGJhY2tncm91bmQtY29sb3I6ICNkNGVkZGE7IGNv bG9yOiAjMTU1NzI0OyBwYWRkaW5nOiAxcHggMnB4OyBib3JkZXItcmFkaXVzOiAycHg7IH0KLmRp ZmYtcmVtb3ZlZCB7IGJhY2tncm91bmQtY29sb3I6ICNmOGQ3ZGE7IGNvbG9yOiAjNzIxYzI0OyBw YWRkaW5nOiAxcHggMnB4OyBib3JkZXItcmFkaXVzOiAycHg7IHRleHQtZGVjb3JhdGlvbjogbGlu ZS10aHJvdWdoOyB9CltkYXRhLXRoZW1lPSJuaWdodCJdIC5kaWZmLWFkZGVkIHsgYmFja2dyb3Vu ZC1jb2xvcjogIzFhNDAyODsgY29sb3I6ICNhM2U0Yjg7IH0KW2RhdGEtdGhlbWU9Im5pZ2h0Il0g LmRpZmYtcmVtb3ZlZCB7IGJhY2tncm91bmQtY29sb3I6ICM0NTFhMjA7IGNvbG9yOiAjZjBiMGI4 OyB9Ci5kaWZmLWxlZ2VuZCB7CiAgICBkaXNwbGF5OiBmbGV4OyBnYXA6IDE2cHg7IHBhZGRpbmc6 IDhweCAxNHB4OyBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tYmct Y2FyZC1hbHQpOyBib3JkZXItcmFkaXVzOiA2cHg7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IHZh cigtLXRleHQtc2Vjb25kYXJ5KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1s aWdodCk7Cn0KLmRpZmYtbGVnZW5kIHNwYW4geyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24t aXRlbXM6IGNlbnRlcjsgZ2FwOiA0cHg7IH0KCi8qIC0tLSBSZXZpc2lvbnNoaXN0b3JpZSAtLS0g Ki8KLnJldmlzaW9uLW1vZGFsIHsKICAgIGRpc3BsYXk6IG5vbmU7IHBvc2l0aW9uOiBmaXhlZDsg dG9wOiAwOyBsZWZ0OiAwOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOwogICAgYmFja2dyb3Vu ZDogcmdiYSgwLDAsMCwwLjYpOyB6LWluZGV4OiAxMDAwMDsganVzdGlmeS1jb250ZW50OiBjZW50 ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KLnJldmlzaW9uLW1vZGFsLm9wZW4geyBkaXNwbGF5 OiBmbGV4OyB9Ci5yZXZpc2lvbi1jb250YWluZXIgewogICAgYmFja2dyb3VuZDogdmFyKC0tYmct cHJpbWFyeSk7IGJvcmRlci1yYWRpdXM6IDhweDsgd2lkdGg6IDk1JTsgbWF4LXdpZHRoOiAxMjAw cHg7IGhlaWdodDogODV2aDsKICAgIGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1u czogMjgwcHggMWZyOyBvdmVyZmxvdzogaGlkZGVuOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFy KC0tYm9yZGVyLWNvbG9yKTsgYm94LXNoYWRvdzogMCA4cHggMzJweCByZ2JhKDAsMCwwLDAuNCk7 Cn0KLnJldmlzaW9uLXNpZGViYXIgewogICAgYmFja2dyb3VuZDogdmFyKC0tYmctY2FyZCk7IGJv cmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBkaXNwbGF5OiBm bGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBvdmVyZmxvdzogaGlkZGVuOwp9Ci5yZXZpc2lv bi1zaWRlYmFyLWhlYWRlciB7CiAgICBwYWRkaW5nOiAxNnB4OyBib3JkZXItYm90dG9tOiAxcHgg c29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7IGZvbnQtc2l6 ZTogMTRweDsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7CiAgICBkaXNwbGF5OiBmbGV4OyBq dXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KLnJl dmlzaW9uLXNpZGViYXItaGVhZGVyIGJ1dHRvbiB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1j YXJkLWFsdCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7IGNvbG9yOiB2 YXIoLS10ZXh0LXNlY29uZGFyeSk7IGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTFw eDsgcGFkZGluZzogNHB4IDEycHg7IGJvcmRlci1yYWRpdXM6IDRweDsKfQoucmV2aXNpb24tc2lk ZWJhci1oZWFkZXIgYnV0dG9uOmhvdmVyIHsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7IGJh Y2tncm91bmQ6IHZhcigtLWJnLWhvdmVyKTsgfQoucmV2aXNpb24tbGlzdCB7IGZsZXg6IDE7IG92 ZXJmbG93LXk6IGF1dG87IHBhZGRpbmc6IDhweDsgfQoucmV2aXNpb24taXRlbSB7CiAgICBwYWRk aW5nOiAxMHB4IDEycHg7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyBtYXJn aW4tYm90dG9tOiA0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgdHJhbnNp dGlvbjogYmFja2dyb3VuZCAwLjE1cywgYm9yZGVyLWNvbG9yIDAuMTVzOwp9Ci5yZXZpc2lvbi1p dGVtOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYmctY2FyZC1hbHQpOyB9Ci5yZXZpc2lvbi1p dGVtLmFjdGl2ZSB7IGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQtYWx0KTsgYm9yZGVyLWNvbG9y OiB2YXIoLS10ZXh0LWhlYWRpbmcpOyB9Ci5yZXZpc2lvbi1pdGVtIC5yZXYtbGFiZWwgewogICAg Zm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogdmFyKC0tdGV4dC1oZWFk aW5nKTsKICAgIGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjsg YWxpZ24taXRlbXM6IGNlbnRlcjsKfQoucmV2aXNpb24taXRlbSAucmV2LWxhYmVsIC5yZXYtYmFk Z2UgewogICAgZm9udC1zaXplOiAxMHB4OyBmb250LXdlaWdodDogNTAwOyBwYWRkaW5nOiAxcHgg NnB4OyBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS10ZXh0LWhlYWRp bmcpOyBjb2xvcjogdmFyKC0tYmctcHJpbWFyeSk7Cn0KLnJldmlzaW9uLWl0ZW0gLnJldi1kYXRl IHsgZm9udC1zaXplOiAxMXB4OyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IG1hcmdpbi10b3A6 IDJweDsgfQoucmV2aXNpb24taXRlbSAucmV2LXVzZXIgeyBmb250LXNpemU6IDExcHg7IGNvbG9y OiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7IG1hcmdpbi10b3A6IDFweDsgfQoucmV2aXNpb24tbWFp biB7CiAgICBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBvdmVyZmxvdzog aGlkZGVuOwp9Ci5yZXZpc2lvbi10b29sYmFyIHsKICAgIHBhZGRpbmc6IDEycHggMTZweDsgYm9y ZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBkaXNwbGF5OiBm bGV4OyBnYXA6IDhweDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZmxleC1zaHJpbms6IDA7Cn0KLnJl dmlzaW9uLXRvb2xiYXIgYnV0dG9uIHsKICAgIHBhZGRpbmc6IDZweCAxNHB4OyBib3JkZXI6IDFw eCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkKTsK ICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7IGJvcmRlci1yYWRpdXM6IDRweDsgY3Vy c29yOiBwb2ludGVyOyBmb250LXNpemU6IDEycHg7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5k IDAuMTVzLCBjb2xvciAwLjE1czsKfQoucmV2aXNpb24tdG9vbGJhciBidXR0b246aG92ZXIgeyBi YWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkLWFsdCk7IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcp OyB9Ci5yZXZpc2lvbi10b29sYmFyIGJ1dHRvbi5hY3RpdmUgeyBiYWNrZ3JvdW5kOiB2YXIoLS10 ZXh0LWhlYWRpbmcpOyBjb2xvcjogdmFyKC0tYmctcHJpbWFyeSk7IGJvcmRlci1jb2xvcjogdmFy KC0tdGV4dC1oZWFkaW5nKTsgfQoucmV2aXNpb24tdG9vbGJhciAucmV2LWluZm8geyBtYXJnaW4t bGVmdDogYXV0bzsgZm9udC1zaXplOiAxMXB4OyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IH0K LnJldmlzaW9uLWNvbnRlbnQgewogICAgZmxleDogMTsgb3ZlcmZsb3cteTogYXV0bzsgcGFkZGlu ZzogMjBweCAyNHB4OyBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMS43OyBjb2xv cjogdmFyKC0tdGV4dC1wcmltYXJ5KTsKfQoucmV2aXNpb24tY29udGVudCBhIHsgY29sb3I6IHZh cigtLXRleHQtaGVhZGluZyk7IH0KLnJldmlzaW9uLWNvbnRlbnQgaDEsIC5yZXZpc2lvbi1jb250 ZW50IGgyLCAucmV2aXNpb24tY29udGVudCBoMywgLnJldmlzaW9uLWNvbnRlbnQgaDQgewogICAg Y29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7Cn0KCi8qIFJldmlzaW9uLU1vZGFsOiBEYXktVGhl bWUgT3ZlcnJpZGVzICgtLWJnLXByaW1hcnkgaXN0IGR1bmtlbCBpbiBiZWlkZW4gVGhlbWVzLCBk YWhlciBleHBsaXppdCkgKi8KOnJvb3Q6bm90KFtkYXRhLXRoZW1lPSJuaWdodCJdKSAucmV2aXNp b24tY29udGFpbmVyIHsgYmFja2dyb3VuZDogI2ZmZmZmZjsgfQo6cm9vdDpub3QoW2RhdGEtdGhl bWU9Im5pZ2h0Il0pIC5yZXZpc2lvbi1zaWRlYmFyIHsgYmFja2dyb3VuZDogI2Y4ZjlmYTsgfQo6 cm9vdDpub3QoW2RhdGEtdGhlbWU9Im5pZ2h0Il0pIC5yZXZpc2lvbi1pdGVtOmhvdmVyIHsgYmFj a2dyb3VuZDogI2U4ZWNmMDsgfQo6cm9vdDpub3QoW2RhdGEtdGhlbWU9Im5pZ2h0Il0pIC5yZXZp c2lvbi1pdGVtLmFjdGl2ZSB7IGJhY2tncm91bmQ6ICNlOGVjZjA7IGJvcmRlci1jb2xvcjogIzJF NEE2MjsgfQo6cm9vdDpub3QoW2RhdGEtdGhlbWU9Im5pZ2h0Il0pIC5yZXZpc2lvbi10b29sYmFy IGJ1dHRvbiB7IGJhY2tncm91bmQ6ICNmZmZmZmY7IGJvcmRlci1jb2xvcjogI2RkZDsgY29sb3I6 ICM2NjY7IH0KOnJvb3Q6bm90KFtkYXRhLXRoZW1lPSJuaWdodCJdKSAucmV2aXNpb24tdG9vbGJh ciBidXR0b246aG92ZXIgeyBiYWNrZ3JvdW5kOiAjZThlY2YwOyBjb2xvcjogIzMzMzsgfQo6cm9v dDpub3QoW2RhdGEtdGhlbWU9Im5pZ2h0Il0pIC5yZXZpc2lvbi10b29sYmFyIGJ1dHRvbi5hY3Rp dmUgeyBiYWNrZ3JvdW5kOiAjMkU0QTYyOyBjb2xvcjogI2ZmZmZmZjsgYm9yZGVyLWNvbG9yOiAj MkU0QTYyOyB9Cjpyb290Om5vdChbZGF0YS10aGVtZT0ibmlnaHQiXSkgLnJldmlzaW9uLWl0ZW0g LnJldi1sYWJlbCAucmV2LWJhZGdlIHsgYmFja2dyb3VuZDogIzJFNEE2MjsgY29sb3I6ICNmZmZm ZmY7IH0KCi8qIC0tLSBBY3Rpb24gQnV0dG9ucyBpbSBEZXRhaWwgLS0tICovCi5kZXRhaWwtYWN0 aW9ucyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiA4cHg7CiAgICBmbGV4LXNocmluazog MDsKfQoKLmRldGFpbC1hY3Rpb25zIGJ1dHRvbiB7CiAgICBwYWRkaW5nOiA4cHggMTZweDsKICAg IGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXRleHQtaGVhZGluZyk7CiAgICBiYWNrZ3JvdW5kOiB2 YXIoLS1iZy1jYXJkKTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOwogICAgYm9yZGVy LXJhZGl1czogNHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udC13ZWlnaHQ6IDUwMDsK ICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24tc3Rk KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5kZXRhaWwtYWN0aW9ucyBidXR0b246aG92 ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOyBjb2xvcjogd2hpdGUg IWltcG9ydGFudDsgfQoKLmRldGFpbC1hY3Rpb25zIGJ1dHRvbi5idG4tZGFuZ2VyIHsgYm9yZGVy LWNvbG9yOiAjZGMzNTQ1OyBjb2xvcjogI2RjMzU0NTsgfQouZGV0YWlsLWFjdGlvbnMgYnV0dG9u LmJ0bi1kYW5nZXI6aG92ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1OyBjb2xvcjogd2hp dGUgIWltcG9ydGFudDsgfQoKLmRldGFpbC1hY3Rpb25zIGJ1dHRvbltzdHlsZSo9ImJvcmRlci1j b2xvcjojM2I4MmY2Il06aG92ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjM2I4MmY2OyB9Ci5kZXRh aWwtYWN0aW9ucyBidXR0b25bc3R5bGUqPSJib3JkZXItY29sb3I6IzI4YTc0NSJdOmhvdmVyIHsg YmFja2dyb3VuZC1jb2xvcjogIzI4YTc0NTsgfQouZGV0YWlsLWFjdGlvbnMgYnV0dG9uW3N0eWxl Kj0iYm9yZGVyLWNvbG9yOiNkYzM1NDUiXTpob3ZlciB7IGJhY2tncm91bmQtY29sb3I6ICNkYzM1 NDU7IH0KCi8qIC0tLSBNZWRpYSBTZWN0aW9uIC0tLSAqLwoubWVkaWEtc2VjdGlvbiB7CiAgICBt YXJnaW4tdG9wOiAzMHB4OwogICAgcGFkZGluZy10b3A6IDIwcHg7CiAgICBib3JkZXItdG9wOiAx cHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsKfQoKLm1lZGlhcy1jb250YWluZXIgewogICAg ZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmls bCwgbWlubWF4KDI4MHB4LCAxZnIpKTsKICAgIGdhcDogMTVweDsKfQoKLm1lZGlhLWl0ZW0gewog ICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctY2FyZC1hbHQpOwogICAgYm9yZGVyOiAxcHgg c29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIG92 ZXJmbG93OiBoaWRkZW47CiAgICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uLXN0ZCk7Cn0K Ci5tZWRpYS1pdGVtOmhvdmVyIHsgYm94LXNoYWRvdzogMCA0cHggOHB4IHZhcigtLXNoYWRvdy1t ZWRpdW0pOyB9CgoubWVkaWEtaW1hZ2UgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDIw MHB4OwogICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1i b3JkZXItbGlnaHQpOwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWVkaWEtY29udGVudCB7IHBh ZGRpbmc6IDEycHg7IH0KCi5tZWRpYS10eXBlLWJhZGdlIHsKICAgIGRpc3BsYXk6IGlubGluZS1i bG9jazsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBwYWRk aW5nOiAzcHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgbWFyZ2luLWJvdHRvbTog OHB4Owp9CgoubWVkaWEtdHlwZS1iYWRnZS5pbWFnZSB7IGJhY2tncm91bmQtY29sb3I6ICNkNGVk ZGE7IGNvbG9yOiAjMTU1NzI0OyB9Ci5tZWRpYS10eXBlLWJhZGdlLnBkZiB7IGJhY2tncm91bmQt Y29sb3I6ICNmZmYzY2Q7IGNvbG9yOiAjODU2NDA0OyB9Ci5tZWRpYS10eXBlLWJhZGdlLnZpZGVv IHsgYmFja2dyb3VuZC1jb2xvcjogI2NmZTJmZjsgY29sb3I6ICMwODQyOTg7IH0KW2RhdGEtdGhl bWU9Im5pZ2h0Il0gLm1lZGlhLXR5cGUtYmFkZ2UuaW1hZ2UgeyBiYWNrZ3JvdW5kLWNvbG9yOiAj MWE0MDI4OyBjb2xvcjogI2EzZTRiODsgfQpbZGF0YS10aGVtZT0ibmlnaHQiXSAubWVkaWEtdHlw ZS1iYWRnZS5wZGYgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjNGEzYTFhOyBjb2xvcjogI2YwZDA4MDsg fQpbZGF0YS10aGVtZT0ibmlnaHQiXSAubWVkaWEtdHlwZS1iYWRnZS52aWRlbyB7IGJhY2tncm91 bmQtY29sb3I6ICMxYTJhNGE7IGNvbG9yOiAjODBiMGYwOyB9CgoubWVkaWEtdGl0bGUgeyBmb250 LXdlaWdodDogNjAwOyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsgbWFyZ2luLWJvdHRvbTog NXB4OyBmb250LXNpemU6IDE0cHg7IH0KLm1lZGlhLWRlc2NyaXB0aW9uIHsgZm9udC1zaXplOiAx M3B4OyBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOyBsaW5lLWhlaWdodDogMS40OyB9Cgov KiAtLS0gRWRpdG9yIE1vZGFsIC0tLSAqLwouZWRpdG9yLW1vZGFsIHsKICAgIGRpc3BsYXk6IG5v bmU7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7IGxlZnQ6IDA7CiAgICB3aWR0aDog MTAwJTsgaGVpZ2h0OiAxMDAlOwogICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwwLjQp OwogICAgei1pbmRleDogMTAwMDsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgcGFkZGluZzogMzBw eCAyMHB4Owp9CgouZWRpdG9yLW1vZGFsLmFjdGl2ZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAg YWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgouZWRp dG9yLW1vZGFsLWNvbnRlbnQgewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctY2FyZCk7 CiAgICB3aWR0aDogOTAlOwogICAgbWF4LXdpZHRoOiAxNDAwcHg7CiAgICBoZWlnaHQ6IDkyJTsK ICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYm9yZGVy LXJhZGl1czogOHB4OwogICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1vZGFsKTsKfQoKLmVk aXRvci1tb2RhbC1oZWFkZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctcHJpbWFy eSk7CiAgICBjb2xvcjogd2hpdGU7CiAgICBwYWRkaW5nOiAxNXB4IDMwcHg7CiAgICBkaXNwbGF5 OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgYWxpZ24taXRl bXM6IGNlbnRlcjsKICAgIGJvcmRlci1yYWRpdXM6IDhweCA4cHggMCAwOwp9CgouZWRpdG9yLW1v ZGFsLWhlYWRlciBoMiB7IG1hcmdpbjogMDsgZm9udC1zaXplOiAyMHB4OyB9CgouZWRpdG9yLW1v ZGFsLWhlYWRlciBidXR0b24gewogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAg ICBjb2xvcjogd2hpdGU7CiAgICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKICAgIHBhZGRpbmc6 IDhweCAxNXB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwog ICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24tc3Rk KTsKfQoKLmVkaXRvci1tb2RhbC1oZWFkZXIgYnV0dG9uOmhvdmVyIHsgYmFja2dyb3VuZC1jb2xv cjogd2hpdGU7IGNvbG9yOiAjMkU0QTYyOyB9CgouZWRpdG9yLW1ldGEtcm93IHsKICAgIGJhY2tn cm91bmQtY29sb3I6IHZhcigtLWJnLWNhcmQtYWx0KTsKICAgIHBhZGRpbmc6IDEwcHggMzBweDsK ICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDEycHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVy OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7CiAgICBm bGV4LXdyYXA6IG5vd3JhcDsKICAgIG92ZXJmbG93LXg6IGF1dG87Cn0KCi5lZGl0b3ItbWV0YS1y b3cgbGFiZWwgeyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsg Zm9udC1zaXplOiAxM3B4OyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9CgouZWRpdG9yLW1ldGEtcm93 IGlucHV0LAouZWRpdG9yLW1ldGEtcm93IHNlbGVjdCB7CiAgICBwYWRkaW5nOiA2cHggMTBweDsK ICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1zdHJvbmcpOwogICAgYm9yZGVyLXJh ZGl1czogNHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFy KC0tYmctaW5wdXQpOwogICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7Cn0KCi5lZGl0b3It bWV0YS1yb3cgaW5wdXQjZWRpdG9yVGl0ZWwgeyBmbGV4OiAxOyBtaW4td2lkdGg6IDE2MHB4OyB9 Ci5lZGl0b3ItbWV0YS1yb3cgc2VsZWN0I2VkaXRvclBhcmVudCB7IG1heC13aWR0aDogMTYwcHg7 IH0KCi5lZGl0b3ItbW9kYWwtYm9keSB7CiAgICBmbGV4OiAxOwogICAgb3ZlcmZsb3cteTogYXV0 bzsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwp9CgouZWRp dG9yLXRvb2xiYXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctdG9vbGJhcik7CiAg ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLXN0cm9uZyk7CiAgICBwYWRk aW5nOiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLmVkaXRv ci10b29sYmFyIGJ1dHRvbiB7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlcjogbm9u ZTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLXRvb2xiYXIpOwogICAgY29sb3I6IHZhcigtLXRl eHQtcHJpbWFyeSk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXdlaWdodDogNDAwOwog ICAgZm9udC1zaXplOiAxM3B4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgYm9yZGVy LXJpZ2h0OiAxcHggc29saWQgdmFyKC0tYm9yZGVyLXN0cm9uZyk7CiAgICBsaW5lLWhlaWdodDog MTsKICAgIG1pbi1oZWlnaHQ6IDMycHg7Cn0KCi5lZGl0b3ItdG9vbGJhciBidXR0b246aG92ZXIg eyBiYWNrZ3JvdW5kOiB2YXIoLS1ib3JkZXItbGlnaHQpOyB9CltkYXRhLXRoZW1lPSJuaWdodCJd IC5lZGl0b3ItdG9vbGJhciBidXR0b24gaW1nIHsgZmlsdGVyOiBpbnZlcnQoMSkgYnJpZ2h0bmVz cygxLjUpOyB9CgouZWRpdG9yLXRvb2xiYXIgc2VsZWN0IHsKICAgIHBhZGRpbmc6IDZweCA4cHg7 CiAgICBib3JkZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy10b29sYmFyKTsKICAg IGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOwogICAgbWFyZ2luOiAwIDRweDsKICAgIGhlaWdo dDogMzJweDsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNjMGMwYzA7Cn0KCi50b29sYmFy LXNlcGFyYXRvciB7CiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjYzBjMGMwOwogICAgbWFy Z2luOiAwIDRweDsKICAgIGhlaWdodDogMzJweDsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsK fQoKLmNvbG9yLXN3YXRjaCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0aDog MTZweDsgaGVpZ2h0OiAxNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAgIGJvcmRl ci1yYWRpdXM6IDJweDsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KCi5lZGl0b3ItYXJl YSB7IGZsZXg6IDE7IHBhZGRpbmc6IDIwcHg7IG92ZXJmbG93LXk6IGF1dG87IH0KCi5lZGl0b3It aW5wdXQgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtaW4taGVpZ2h0 OiA0MDBweDsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1i b3JkZXItY29sb3IpOwogICAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9u dC1zaXplOiAxNXB4OwogICAgbGluZS1oZWlnaHQ6IDEuNzsKICAgIGJvcmRlci1yYWRpdXM6IDRw eDsKICAgIG91dGxpbmU6IG5vbmU7CiAgICByZXNpemU6IG5vbmU7CiAgICB3aGl0ZS1zcGFjZTog bm9ybWFsOwogICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgb3ZlcmZsb3cteTogYXV0bzsK ICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnLWlucHV0KTsKICAgIGNvbG9yOiB2YXIoLS10 ZXh0LXByaW1hcnkpOwp9CgouZWRpdG9yLWlucHV0OmZvY3VzIHsgYm9yZGVyLWNvbG9yOiB2YXIo LS10ZXh0LWhlYWRpbmcpOyBib3gtc2hhZG93OiAwIDAgNXB4IHJnYmEoNDYsIDc0LCA5OCwgMC4y KTsgfQoKLmVkaXRvci1pbnB1dCBoMSB7CiAgICBmb250LXNpemU6IDI0cHg7IGNvbG9yOiB2YXIo LS10ZXh0LWhlYWRpbmcpOyBmb250LXdlaWdodDogNzAwOwogICAgbWFyZ2luOiAyNHB4IDAgMTJw eCAwOyBwYWRkaW5nOiAxMnB4IDA7IGJvcmRlci1ib3R0b206IDNweCBzb2xpZCB2YXIoLS10ZXh0 LWhlYWRpbmcpOyBkaXNwbGF5OiBibG9jazsKfQouZWRpdG9yLWlucHV0IGgyIHsKICAgIGZvbnQt c2l6ZTogMjBweDsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7IGZvbnQtd2VpZ2h0OiA3MDA7 CiAgICBtYXJnaW46IDIwcHggMCAxMHB4IDA7IHBhZGRpbmc6IDEwcHggMDsgYm9yZGVyLWJvdHRv bTogMnB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IGRpc3BsYXk6IGJsb2NrOwp9Ci5lZGl0 b3ItaW5wdXQgaDMgewogICAgZm9udC1zaXplOiAxN3B4OyBjb2xvcjogdmFyKC0tdGV4dC1oZWFk aW5nKTsgZm9udC13ZWlnaHQ6IDcwMDsKICAgIG1hcmdpbjogMTZweCAwIDhweCAwOyBwYWRkaW5n OiA2cHggMDsgZGlzcGxheTogYmxvY2s7Cn0KLmVkaXRvci1pbnB1dCBoNCB7CiAgICBmb250LXNp emU6IDE1cHg7IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOyBmb250LXdlaWdodDogNjAwOwog ICAgbWFyZ2luOiAxMnB4IDAgNnB4IDA7IGRpc3BsYXk6IGJsb2NrOwp9CgouZWRpdG9yLWlucHV0 IHAgeyBtYXJnaW46IDAgMCAwLjRlbSAwOyB9Ci5lZGl0b3ItaW5wdXQgKiB7IGZvbnQtZmFtaWx5 OiBBcmlhbCwgc2Fucy1zZXJpZjsgbGluZS1oZWlnaHQ6IDEuNjsgYm94LXNpemluZzogYm9yZGVy LWJveDsgfQoKLmVkaXRvci1mb290ZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmct Y2FyZC1hbHQpOwogICAgcGFkZGluZzogMTVweCAzMHB4OwogICAgZGlzcGxheTogZmxleDsKICAg IGdhcDogMTBweDsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBib3JkZXItdG9w OiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIGJvcmRlci1yYWRpdXM6IDAgMCA4 cHggOHB4Owp9CgouZWRpdG9yLWZvb3RlciBidXR0b24gewogICAgcGFkZGluZzogMTBweCAyMHB4 OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdGV4dC1oZWFkaW5nKTsKICAgIGJhY2tncm91 bmQtY29sb3I6IHZhcigtLWJnLWNhcmQpOwogICAgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7 CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXdl aWdodDogNjAwOwogICAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbi1zdGQpOwp9CgouZWRp dG9yLWZvb3RlciBidXR0b246aG92ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10ZXh0LWhl YWRpbmcpOyBjb2xvcjogd2hpdGU7IH0KCi5lZGl0b3ItZm9vdGVyIGJ1dHRvbi5zYXZlLWJ0biB7 IGJhY2tncm91bmQtY29sb3I6ICMyZDlkNzg7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyLWNvbG9yOiAj MmQ5ZDc4OyB9Ci5lZGl0b3ItZm9vdGVyIGJ1dHRvbi5zYXZlLWJ0bjpob3ZlciB7IGJhY2tncm91 bmQtY29sb3I6ICMxZTdhNWY7IGJvcmRlci1jb2xvcjogIzFlN2E1ZjsgfQoKLyogLS0tIE1lZGlh IFVwbG9hZCBpbSBFZGl0b3IgLS0tICovCi5tZWRpYS11cGxvYWQtem9uZSB7CiAgICBib3JkZXI6 IDJweCBkYXNoZWQgdmFyKC0tYm9yZGVyLXN0cm9uZyk7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7 CiAgICBwYWRkaW5nOiAyMHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWFyZ2luOiAx MHB4IDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0 aW9uLXN0ZCk7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7Cn0KCi5tZWRpYS11cGxvYWQt em9uZTpob3ZlciwgLm1lZGlhLXVwbG9hZC16b25lLmRyYWdvdmVyIHsKICAgIGJvcmRlci1jb2xv cjogdmFyKC0tdGV4dC1oZWFkaW5nKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnLWhv dmVyKTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOwp9CgovKiAtLS0gTWVkaWEgTW9k YWwgKHplbnRyaWVydCwgbmljaHQgVm9sbGJpbGQpIC0tLSAqLwoubWVkaWEtbW9kYWwgewogICAg ZGlzcGxheTogbm9uZTsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHotaW5kZXg6IDEwMDAwOwog ICAgbGVmdDogMDsgdG9wOiAwOwogICAgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsKICAgIGJh Y2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTsKfQoKLm1lZGlhLW1vZGFsLWNvbnRl bnQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7IGxlZnQ6IDUwJTsKICAg IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgYmFja2dyb3VuZDogdmFyKC0t YmctY2FyZCwgI2ZmZik7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm94LXNoYWRvdzog dmFyKC0tc2hhZG93LW1vZGFsKTsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBtYXgtd2lkdGg6IDkw MHB4OwogICAgd2lkdGg6IDkwJTsKICAgIG1heC1oZWlnaHQ6IDg1dmg7CiAgICBvdmVyZmxvdzog aGlkZGVuOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAg ICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMnB4Owp9CgoubWVkaWEtbW9kYWwtY2xv c2UgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMHB4OyByaWdodDogMTBweDsK ICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQtYWx0LCAjZWVlKTsKICAgIGNvbG9yOiB2YXIo LS10ZXh0LXNlY29uZGFyeSwgIzY2Nik7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3Jk ZXItY29sb3IsICNkZGQpOwogICAgZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogNjAwOwog ICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogNXB4IDE0cHg7CiAgICBib3JkZXItcmFk aXVzOiA0cHg7CiAgICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uLXN0ZCk7CiAgICB6LWlu ZGV4OiAxMDAwMTsKfQoKLm1lZGlhLW1vZGFsLWNsb3NlOmhvdmVyIHsgYmFja2dyb3VuZDogdmFy KC0tdGV4dC1oZWFkaW5nKTsgY29sb3I6IHdoaXRlOyBib3JkZXItY29sb3I6IHZhcigtLXRleHQt aGVhZGluZyk7IH0KCiNtZWRpYU1vZGFsQ29udGFpbmVyIHsKICAgIG1heC13aWR0aDogMTAwJTsg d2lkdGg6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBh bGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDEwcHg7CiAgICBmbGV4OiAxOyBtaW4taGVpZ2h0OiAw Owp9CiNtZWRpYU1vZGFsQ29udGFpbmVyIGltZyB7IG1heC13aWR0aDogMTAwJTsgbWF4LWhlaWdo dDogNTV2aDsgb2JqZWN0LWZpdDogY29udGFpbjsgYm9yZGVyLXJhZGl1czogNnB4OyBjdXJzb3I6 IHpvb20taW47IH0KI21lZGlhTW9kYWxDb250YWluZXIgaW1nLnpvb21lZCB7IG1heC1oZWlnaHQ6 IG5vbmU7IG1heC13aWR0aDogbm9uZTsgY3Vyc29yOiB6b29tLW91dDsgfQoubWVkaWEtbW9kYWwt dG9vbGJhciB7CiAgICBkaXNwbGF5OiBmbGV4OyBnYXA6IDhweDsgYWxpZ24taXRlbXM6IGNlbnRl cjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZsZXgtd3JhcDogd3JhcDsKICAgIHBhZGRpbmct dG9wOiA4cHg7IGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQsICNlMGUw ZTApOwogICAgd2lkdGg6IDEwMCU7Cn0KLm1lZGlhLW1vZGFsLXRvb2xiYXIgYnV0dG9uLCAubWVk aWEtbW9kYWwtdG9vbGJhciBhIHsKICAgIHBhZGRpbmc6IDZweCAxNHB4OyBib3JkZXItcmFkaXVz OiA0cHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1zdHJvbmcsICNjMGMwYzApOwog ICAgYmFja2dyb3VuZDogdmFyKC0tYmctY2FyZC1hbHQsICNmMGYwZjApOyBjb2xvcjogdmFyKC0t dGV4dC1wcmltYXJ5LCAjMzMzKTsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDEycHg7CiAg ICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24tc3Rk KTsKfQoubWVkaWEtbW9kYWwtdG9vbGJhciBidXR0b246aG92ZXIsIC5tZWRpYS1tb2RhbC10b29s YmFyIGE6aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS10ZXh0LWhlYWRpbmcpOyBjb2xvcjogd2hp dGU7IGJvcmRlci1jb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsgfQoubWVkaWEtbW9kYWwtdGl0 bGUgewogICAgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZywgIzJFNEE2Mik7IGZvbnQtc2l6ZTog MTRweDsgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsgd2lkdGg6IDEw MCU7IHBhZGRpbmctYm90dG9tOiA4cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFy KC0tYm9yZGVyLWxpZ2h0LCAjZTBlMGUwKTsKICAgIG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3Zl cmZsb3c6IGVsbGlwc2lzOyB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgovKiAtLS0gTm90aWZpY2F0 aW9uIFRvYXN0IC0tLSAqLwoudG9hc3QgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgYm90dG9t OiA4MHB4OwogICAgcmlnaHQ6IDMwcHg7CiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7CiAgICBib3Jk ZXItcmFkaXVzOiA2cHg7CiAgICBjb2xvcjogd2hpdGU7CiAgICBmb250LXNpemU6IDE0cHg7CiAg ICB6LWluZGV4OiA5OTk5OwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRl WSgyMHB4KTsKICAgIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24tc3RkKTsKICAgIG1heC13 aWR0aDogNDAwcHg7CiAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwwLDAsMC4zKTsK fQoKLnRvYXN0LnNob3cgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0K LnRvYXN0LnN1Y2Nlc3MgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjMmQ5ZDc4OyB9Ci50b2FzdC5lcnJv ciB7IGJhY2tncm91bmQtY29sb3I6ICNkYzM1NDU7IH0KLnRvYXN0LmluZm8geyBiYWNrZ3JvdW5k LWNvbG9yOiAjMkU0QTYyOyB9Ci50b2FzdC53YXJuaW5nIHsgYmFja2dyb3VuZC1jb2xvcjogI2U2 N2UyMjsgfQoKLyogLS0tIFNhdmUtSGlnaGxpZ2h0IEFuaW1hdGlvbiAtLS0gKi8KQGtleWZyYW1l cyBoaWdobGlnaHRGYWRlIHsKICAgIDAlICAgeyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDQ1LCAx NTcsIDEyMCwgMC4zNSk7IH0KICAgIDEwMCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVu dDsgfQp9Ci5kb2N1bWVudC1pdGVtLmhpZ2hsaWdodC1zYXZlZCB7CiAgICBhbmltYXRpb246IGhp Z2hsaWdodEZhZGUgMS44cyBlYXNlLW91dDsKfQoKLyogLS0tIEZvb3RlciAtLS0gKi8KZm9vdGVy IHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnLXByaW1hcnkpOwogICAgYm9yZGVyLXRv cDogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBwYWRkaW5nOiAxMnB4IDMwcHg7 CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwog ICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiB3 aGl0ZTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xv ciAwLjNzOwp9Cgpmb290ZXIgYSB7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOCk7IHRleHQt ZGVjb3JhdGlvbjogbm9uZTsgY3Vyc29yOiBwb2ludGVyOyB9CmZvb3RlciBhOmhvdmVyIHsgY29s b3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQouZm9vdGVyLXJpZ2h0IHsg ZGlzcGxheTogZmxleDsgZ2FwOiAxNnB4OyBhbGlnbi1pdGVtczogY2VudGVyOyB9Ci5mb290ZXIt c3luYy1zdGF0dXMgeyBmb250LXNpemU6IDExcHg7IG9wYWNpdHk6IDA7IHRyYW5zaXRpb246IG9w YWNpdHkgMS4ycyBlYXNlLWluLW91dDsgbWluLXdpZHRoOiAxMjBweDsgdGV4dC1hbGlnbjogcmln aHQ7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuNyk7IH0KLmZvb3Rlci1zeW5jLXN0YXR1cy52 aXNpYmxlIHsgb3BhY2l0eTogMTsgfQoKLmZvb3Rlci12ZXJzaW9uIHsgY3Vyc29yOiBwb2ludGVy OyBvcGFjaXR5OiAwLjg7IHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsgfQouZm9vdGVyLXZlcnNp b246aG92ZXIgeyBvcGFjaXR5OiAxOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQoKLyog LS0tIFZlcnNpb25zaGlzdG9yaWUgTW9kYWwgLS0tICovCi52ZXJzaW9uLW1vZGFsIHsKICAgIGRp c3BsYXk6IG5vbmU7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7IGxlZnQ6IDA7CiAg ICB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOwogICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCww LjUpOwogICAgei1pbmRleDogMjAwMDsKfQoKLnZlcnNpb24tbW9kYWwuYWN0aXZlIHsgZGlzcGxh eTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH0K Ci52ZXJzaW9uLW1vZGFsLWNvbnRlbnQgewogICAgYmFja2dyb3VuZDogdmFyKC0tYmctY2FyZCk7 CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICB3aWR0aDogNTIwcHg7CiAgICBtYXgtd2lkdGg6 IDk1JTsKICAgIG1heC1oZWlnaHQ6IDgwdmg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgYm94 LXNoYWRvdzogdmFyKC0tc2hhZG93LW1vZGFsKTsKfQoKLnZlcnNpb24tbW9kYWwtaGVhZGVyIHsK ICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLXByaW1hcnkpOwogICAgY29sb3I6IHdoaXRlOwogICAg cGFkZGluZzogMTVweCAyMHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4IDhweCAwIDA7CiAgICBk aXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1z OiBjZW50ZXI7CiAgICBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDE2cHg7Cn0KCi52ZXJz aW9uLW1vZGFsLWhlYWRlciBidXR0b24gewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGJv cmRlcjogMXB4IHNvbGlkIHdoaXRlOyBjb2xvcjogd2hpdGU7CiAgICBwYWRkaW5nOiA0cHggMTJw eDsgYm9yZGVyLXJhZGl1czogNHB4OyBjdXJzb3I6IHBvaW50ZXI7Cn0KCi52ZXJzaW9uLW1vZGFs LWJvZHkgeyBwYWRkaW5nOiAyMHB4OyB9CgoudmVyc2lvbi1pdGVtIHsKICAgIGRpc3BsYXk6IGZs ZXg7CiAgICBnYXA6IDEycHg7CiAgICBwYWRkaW5nOiAxMHB4IDA7CiAgICBib3JkZXItYm90dG9t OiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAg IGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOwp9CgoudmVyc2lvbi1pdGVtOmxhc3QtY2hpbGQg eyBib3JkZXItYm90dG9tOiBub25lOyB9CgoudmVyc2lvbi1iYWRnZSB7CiAgICBmbGV4LXNocmlu azogMDsKICAgIHBhZGRpbmc6IDNweCAxMHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tYmctYWN0 aXZlKTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOwogICAgYm9yZGVyLXJhZGl1czog NHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG1pbi13 aWR0aDogNDhweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLnZlcnNpb24tYmFkZ2UuY3Vy cmVudCB7IGJhY2tncm91bmQ6ICMyZDlkNzg7IGNvbG9yOiB3aGl0ZTsgfQoKLnZlcnNpb24taW5m byB7IGZsZXg6IDE7IH0KLnZlcnNpb24tZGF0ZSB7IGZvbnQtc2l6ZTogMTFweDsgY29sb3I6IHZh cigtLXRleHQtbXV0ZWQpOyBtYXJnaW4tdG9wOiAycHg7IH0KCi8qIC0tLSBGcmVpZ2FiZS1VZWJl cnNpY2h0IE1vZGFsIC0tLSAqLwouaW1wcmludC1tb2RhbCB7CiAgICBkaXNwbGF5OiBub25lOwog ICAgcG9zaXRpb246IGZpeGVkOwogICAgdG9wOiAwOyBsZWZ0OiAwOwogICAgd2lkdGg6IDEwMCU7 IGhlaWdodDogMTAwJTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC41KTsKICAgIHotaW5k ZXg6IDIwMDA7Cn0KCi5pbXByaW50LW1vZGFsLmFjdGl2ZSB7IGRpc3BsYXk6IGZsZXg7IGFsaWdu LWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9CgouaW1wcmludC1jb250 ZW50IHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQpOwogICAgYm9yZGVyLXJhZGl1czog OHB4OwogICAgd2lkdGg6IDcwMHB4OwogICAgbWF4LXdpZHRoOiA5NSU7CiAgICBtYXgtaGVpZ2h0 OiA4NXZoOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRv dy1tb2RhbCk7Cn0KCi5pbXByaW50LWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1w cmltYXJ5KTsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIHBhZGRpbmc6IDE1cHggMjBweDsKICAgIGJv cmRlci1yYWRpdXM6IDhweCA4cHggMCAwOwogICAgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250 ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZm9udC13ZWlnaHQ6 IDYwMDsgZm9udC1zaXplOiAxNnB4Owp9CgouaW1wcmludC1oZWFkZXIgYnV0dG9uIHsKICAgIGJh Y2tncm91bmQ6IHRyYW5zcGFyZW50OyBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsgY29sb3I6IHdo aXRlOwogICAgcGFkZGluZzogNHB4IDEycHg7IGJvcmRlci1yYWRpdXM6IDRweDsgY3Vyc29yOiBw b2ludGVyOwp9CgouaW1wcmludC1ib2R5IHsgcGFkZGluZzogMjBweDsgfQoKLmltcHJpbnQtdGFi bGUgewogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAg Zm9udC1zaXplOiAxM3B4OwogICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7Cn0KCi5pbXBy aW50LXRhYmxlIHRoIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBwYWRkaW5nOiA4cHggMTBw eDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLXRvb2xiYXIpOwogICAgY29sb3I6IHZhcigtLXRl eHQtaGVhZGluZyk7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgYm9yZGVyLWJvdHRvbTogMnB4 IHNvbGlkIHZhcigtLXRleHQtaGVhZGluZyk7Cn0KCi5pbXByaW50LXRhYmxlIHRkIHsKICAgIHBh ZGRpbmc6IDhweCAxMHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRl ci1jb2xvcik7Cn0KCi5pbXByaW50LXRhYmxlIC5rYXQtYmFkZ2UgewogICAgZGlzcGxheTogaW5s aW5lLWJsb2NrOwogICAgcGFkZGluZzogMnB4IDhweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJn LWFjdGl2ZSk7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsKICAgIGJvcmRlci1yYWRp dXM6IDNweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG1hcmdpbjogMXB4IDJweDsKfQoKLyog LS0tIENvbnRyaWJ1dG9ycyAoTWl0d2lya2VuZGUpIC0tLSAqLwouY29udHJpYnV0b3JzLXNlY3Rp b24gewogICAgbWFyZ2luLXRvcDogMTVweDsKICAgIHBhZGRpbmctdG9wOiAxNXB4OwogICAgYm9y ZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7Cn0KCi5jb250cmlidXRvcnMt c2VjdGlvbiBoMyB7IGZvbnQtc2l6ZTogMTVweDsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7 IG1hcmdpbi1ib3R0b206IDEwcHg7IH0KCi5jb250cmlidXRvci1yb3cgewogICAgZGlzcGxheTog ZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBwYWRkaW5n OiA2cHggMDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQp OwogICAgZm9udC1zaXplOiAxM3B4Owp9CgouY29udHJpYnV0b3ItbmFtZSB7IGZvbnQtd2VpZ2h0 OiA2MDA7IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOyB3aWR0aDogMTAwcHg7IGZsZXgtc2hy aW5rOiAwOyB9CgouY29udHJpYnV0b3Itcm9sZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7 CiAgICBwYWRkaW5nOiAycHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgZm9udC1z aXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHdpZHRoOiA3NXB4OwogICAgdGV4 dC1hbGlnbjogY2VudGVyOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5jb250cmlidXRvci1yb2xl LmF1dG9yIHsgYmFja2dyb3VuZDogI0Q0RUREQTsgY29sb3I6ICMxNTU3MjQ7IH0KLmNvbnRyaWJ1 dG9yLXJvbGUucmVkYWt0aW9uIHsgYmFja2dyb3VuZDogdmFyKC0tYmctYWN0aXZlKTsgY29sb3I6 IHZhcigtLXRleHQtaGVhZGluZyk7IH0KLmNvbnRyaWJ1dG9yLXJvbGUucmV2aWV3IHsgYmFja2dy b3VuZDogI0ZGRTVCNDsgY29sb3I6ICM3QTQ0MTk7IH0KCi5jb250cmlidXRvci1iYXIgewogICAg ZmxleDogMTsKICAgIGhlaWdodDogOHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyLWxp Z2h0KTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5j b250cmlidXRvci1iYXItZmlsbCB7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBib3JkZXItcmFkaXVz OiA0cHg7CiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjNzOwp9CgouY29udHJpYnV0b3ItYmFyLWZp bGwuYXV0b3IgeyBiYWNrZ3JvdW5kOiAjMjhhNzQ1OyB9Ci5jb250cmlidXRvci1iYXItZmlsbC5y ZWRha3Rpb24geyBiYWNrZ3JvdW5kOiAjMkU0QTYyOyB9Ci5jb250cmlidXRvci1iYXItZmlsbC5y ZXZpZXcgeyBiYWNrZ3JvdW5kOiAjZTY3ZTIyOyB9CgouY29udHJpYnV0b3ItcGN0IHsgZm9udC1z aXplOiAxMnB4OyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IG1pbi13aWR0aDogNDBweDsgdGV4 dC1hbGlnbjogcmlnaHQ7IH0KCi8qIC0tLSBDb250cmlidXRpb24gVHlwZSBEaWFsb2cgLS0tICov Ci5jb250cmliLWRpYWxvZyB7CiAgICBkaXNwbGF5OiBub25lOwogICAgcG9zaXRpb246IGZpeGVk OwogICAgdG9wOiAwOyBsZWZ0OiAwOwogICAgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsKICAg IGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC41KTsKICAgIHotaW5kZXg6IDMwMDA7Cn0KCi5jb250 cmliLWRpYWxvZy5hY3RpdmUgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBq dXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfQoKLmNvbnRyaWItZGlhbG9nLWNvbnRlbnQgewogICAg YmFja2dyb3VuZDogdmFyKC0tYmctY2FyZCk7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICB3 aWR0aDogNDIwcHg7CiAgICBtYXgtd2lkdGg6IDk1JTsKICAgIGJveC1zaGFkb3c6IHZhcigtLXNo YWRvdy1tb2RhbCk7Cn0KCi5jb250cmliLWRpYWxvZy1oZWFkZXIgewogICAgYmFja2dyb3VuZDog dmFyKC0tYmctcHJpbWFyeSk7CiAgICBjb2xvcjogd2hpdGU7CiAgICBwYWRkaW5nOiAxNXB4IDIw cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHggOHB4IDAgMDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7 Cn0KCi5jb250cmliLWRpYWxvZy1ib2R5IHsgcGFkZGluZzogMjBweDsgfQoKLmNvbnRyaWItdHlw ZS1idG4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6 IDEycHggMTVweDsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgIGJvcmRlcjogMnB4IHNvbGlk IHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkKTsKICAg IGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRleHQtYWxpZ246 IGxlZnQ7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKfQoKLmNvbnRyaWItdHlwZS1idG46aG92 ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7IGJhY2tncm91bmQ6IHZhcigt LWJnLWhvdmVyKTsgfQouY29udHJpYi10eXBlLWJ0bi5zZWxlY3RlZCB7IGJvcmRlci1jb2xvcjog dmFyKC0tdGV4dC1oZWFkaW5nKTsgYmFja2dyb3VuZDogdmFyKC0tYmctYWN0aXZlKTsgfQoKLmNv bnRyaWItdHlwZS1idG4gLmxhYmVsIHsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6IHZhcigtLXRl eHQtaGVhZGluZyk7IGZvbnQtc2l6ZTogMTRweDsgfQouY29udHJpYi10eXBlLWJ0biAuZGVzYyB7 IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBtYXJnaW4tdG9wOiAz cHg7IH0KCi8qIC0tLSBFbXB0eSBTdGF0ZSAtLS0gKi8KLmVtcHR5LXN0YXRlIHsgdGV4dC1hbGln bjogY2VudGVyOyBwYWRkaW5nOiA0MHB4OyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IH0KCi8q IC0tLSBXZWxjb21lIC0tLSAqLwoud2VsY29tZS1jb250ZW50IHsgcGFkZGluZzogMzBweDsgbWF4 LXdpZHRoOiA4MDBweDsgfQoud2VsY29tZS1jb250ZW50IGgxIHsgY29sb3I6IHZhcigtLXRleHQt aGVhZGluZyk7IGZvbnQtc2l6ZTogMjhweDsgbWFyZ2luLWJvdHRvbTogMTVweDsgYm9yZGVyLWJv dHRvbTogM3B4IHNvbGlkIHZhcigtLXRleHQtaGVhZGluZyk7IHBhZGRpbmctYm90dG9tOiAxMHB4 OyB9Ci53ZWxjb21lLWNvbnRlbnQgcCB7IGZvbnQtc2l6ZTogMTVweDsgbGluZS1oZWlnaHQ6IDEu NjsgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsgbWFyZ2luLWJvdHRvbTogMTJweDsgfQou d2VsY29tZS1jb250ZW50IC5pbmZvLXNlY3Rpb24geyBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1i Zy1jYXJkLWFsdCk7IGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tdGV4dC1oZWFkaW5nKTsg cGFkZGluZzogMTVweDsgbWFyZ2luOiAxNXB4IDA7IGJvcmRlci1yYWRpdXM6IDRweDsgfQoud2Vs Y29tZS1jb250ZW50IC5pbmZvLXNlY3Rpb24gaDIgeyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5n KTsgZm9udC1zaXplOiAxOHB4OyBtYXJnaW4tYm90dG9tOiA4cHg7IH0KLndlbGNvbWUtY29udGVu dCAuaW5mby1zZWN0aW9uIHVsIHsgbWFyZ2luLWxlZnQ6IDIwcHg7IGNvbG9yOiB2YXIoLS10ZXh0 LXNlY29uZGFyeSk7IH0KLndlbGNvbWUtY29udGVudCAuaW5mby1zZWN0aW9uIGxpIHsgbWFyZ2lu LWJvdHRvbTogNnB4OyBsaW5lLWhlaWdodDogMS41OyB9CgovKiAtLS0gU2Nyb2xsYmFyIC0tLSAq LwoubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXIsCi5kb2N1bWVudC1kZXRhaWw6Oi13ZWJr aXQtc2Nyb2xsYmFyLAouZWRpdG9yLWFyZWE6Oi13ZWJraXQtc2Nyb2xsYmFyLAouZWRpdG9yLWlu cHV0Ojotd2Via2l0LXNjcm9sbGJhciwKLnJldmlzaW9uLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xs YmFyIHsgd2lkdGg6IDhweDsgfQoKLmxpc3QtaXRlbXM6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNr LAouZG9jdW1lbnQtZGV0YWlsOjotd2Via2l0LXNjcm9sbGJhci10cmFjaywKLmVkaXRvci1hcmVh Ojotd2Via2l0LXNjcm9sbGJhci10cmFjaywKLmVkaXRvci1pbnB1dDo6LXdlYmtpdC1zY3JvbGxi YXItdHJhY2ssCi5yZXZpc2lvbi1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7IGJh Y2tncm91bmQ6IHZhcigtLWJnLWNhcmQtYWx0KTsgYm9yZGVyLXJhZGl1czogNHB4OyB9CgoubGlz dC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsCi5kb2N1bWVudC1kZXRhaWw6Oi13ZWJr aXQtc2Nyb2xsYmFyLXRodW1iLAouZWRpdG9yLWFyZWE6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1i LAouZWRpdG9yLWlucHV0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiwKLnJldmlzaW9uLWNvbnRl bnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsgYmFja2dyb3VuZDogdmFyKC0tdGV4dC1oZWFk aW5nKTsgYm9yZGVyLXJhZGl1czogNHB4OyB9CgoubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxi YXItdGh1bWI6aG92ZXIsCi5kb2N1bWVudC1kZXRhaWw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1i OmhvdmVyLAouZWRpdG9yLWFyZWE6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyLAouZWRp dG9yLWlucHV0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciwKLnJldmlzaW9uLWNvbnRl bnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYmct cHJpbWFyeS1kYXJrKTsgfQoKLyogLS0tIEZvY3VzIFN0YXRlcyAoQWNjZXNzaWJpbGl0eSkgLS0t ICovCmJ1dHRvbjpmb2N1cy12aXNpYmxlLApzZWxlY3Q6Zm9jdXMtdmlzaWJsZSwKaW5wdXQ6Zm9j dXMtdmlzaWJsZSwKLmZpbHRlci1idG46Zm9jdXMtdmlzaWJsZSwKLnN0YXR1cy1maWx0ZXItYnRu OmZvY3VzLXZpc2libGUsCi5kb2N1bWVudC1pdGVtOmZvY3VzLXZpc2libGUgewogICAgb3V0bGlu ZTogMnB4IHNvbGlkIHZhcigtLXRleHQtaGVhZGluZyk7CiAgICBvdXRsaW5lLW9mZnNldDogMnB4 Owp9CgouZGV0YWlsLWFjdGlvbnMgYnV0dG9uOmZvY3VzLXZpc2libGUsCi5lZGl0b3ItdG9vbGJh ciBidXR0b246Zm9jdXMtdmlzaWJsZSwKLmVkaXRvci1mb290ZXIgYnV0dG9uOmZvY3VzLXZpc2li bGUgewogICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLXRleHQtaGVhZGluZyk7CiAgICBvdXRs aW5lLW9mZnNldDogMXB4Owp9CgovKiAtLS0gQW5pbWF0aW9ucyAtLS0gKi8KQGtleWZyYW1lcyBm YWRlSW4geyBmcm9tIHsgb3BhY2l0eTogMDsgfSB0byB7IG9wYWNpdHk6IDE7IH0gfQpAa2V5ZnJh bWVzIHNsaWRlRG93biB7IGZyb20geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMCUpOyBvcGFj aXR5OiAwOyB9IHRvIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyBvcGFjaXR5OiAxOyB9IH0K Ci8qIC0tLSBSZXNwb25zaXZlIC0tLSAqLwpAbWVkaWEgKG1heC13aWR0aDogMTEwMHB4KSB7CiAg ICAuY29udGFpbmVyIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyODBweCAxZnI7IH0KfQpAbWVk aWEgKG1heC13aWR0aDogOTAwcHgpIHsKICAgIC5jb250YWluZXIgeyBncmlkLXRlbXBsYXRlLWNv bHVtbnM6IDFmcjsgfQogICAgbWFpbiB7IHBhZGRpbmc6IDEwcHg7IH0KfQoKLyogLS0tIElubGlu ZSBNZWRpYSAoQXJ0aWtlbC1JbmhhbHRlKSAtLS0gKi8KLmRyaXZlLW1lZGlhIHsKICAgIGRpc3Bs YXk6IGJsb2NrOwogICAgbWFyZ2luOiAxNXB4IDA7CiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZv aWQ7CiAgICBtYXgtd2lkdGg6IDEwMCU7Cn0KCi5kcml2ZS1tZWRpYVtjb250ZW50ZWRpdGFibGU9 ImZhbHNlIl0geyB1c2VyLXNlbGVjdDogbm9uZTsgfQoKLmRyaXZlLWFsaWduLWNlbnRlciB7IGRp c3BsYXk6IGJsb2NrOyBtYXJnaW46IDE2cHggYXV0bzsgdGV4dC1hbGlnbjogY2VudGVyOyBjbGVh cjogYm90aDsgfQouZHJpdmUtYWxpZ24tbGVmdCB7IGZsb2F0OiBsZWZ0OyBtYXJnaW46IDhweCAy MHB4IDEwcHggMDsgbWF4LXdpZHRoOiA1MCU7IH0KLmRyaXZlLWFsaWduLXJpZ2h0IHsgZmxvYXQ6 IHJpZ2h0OyBtYXJnaW46IDhweCAwIDEwcHggMjBweDsgbWF4LXdpZHRoOiA1MCU7IH0KCi5kcml2 ZS1tZWRpYS10aHVtYm5haWwgaW1nIHsgbWF4LXdpZHRoOiAyMDBweDsgbWF4LWhlaWdodDogMjAw cHg7IGN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLXJhZGl1czogNHB4OyB0cmFuc2l0aW9uOiBvcGFj aXR5IDAuMnM7IH0KLmRyaXZlLW1lZGlhLXRodW1ibmFpbCBpbWc6aG92ZXIgeyBvcGFjaXR5OiAw Ljg1OyB9Ci5kcml2ZS1tZWRpYS1sYXJnZSBpbWcgeyBtYXgtd2lkdGg6IDY0MHB4OyBtYXgtaGVp Z2h0OiA0ODBweDsgd2lkdGg6IDEwMCU7IGhlaWdodDogYXV0bzsgYm9yZGVyLXJhZGl1czogNHB4 OyB9CgouZHJpdmUtbWVkaWEgZmlnY2FwdGlvbiwgLmRyaXZlLW1lZGlhLWNhcHRpb24gewogICAg Zm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOwogICAgZm9udC1z dHlsZTogaXRhbGljOwogICAgbWFyZ2luLXRvcDogNnB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsK fQoKLmRyaXZlLW1lZGlhLXBkZi1saW5rIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAg YWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogOHB4IDE0cHg7 CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkLWFsdCk7CiAgICBib3JkZXI6IDFweCBzb2xp ZCB2YXIoLS1ib3JkZXItbGlnaHQpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgbWFyZ2lu OiA4cHggMDsKfQoKLmRyaXZlLXBkZi1pY29uIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4Owog ICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAg d2lkdGg6IDM2cHg7IGhlaWdodDogMzZweDsKICAgIGJhY2tncm91bmQ6ICNkYzM1NDU7CiAgICBj b2xvcjogd2hpdGU7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwog ICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5kcml2ZS1tZWRp YS1wZGYtbGluayB7IGN1cnNvcjogcG9pbnRlcjsgfQouZHJpdmUtbWVkaWEtcGRmLWxpbmsgc3Bh bi5wZGYtdGl0bGUgeyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsgZm9udC13ZWlnaHQ6IDUw MDsgZm9udC1zaXplOiAxNHB4OyB9Ci5kcml2ZS1tZWRpYS1wZGYtbGluazpob3ZlciB7IGJhY2tn cm91bmQ6IHZhcigtLWJnLWhvdmVyKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcp OyB9CgouZHJpdmUtbWVkaWEtcGRmLWlmcmFtZSB7IGN1cnNvcjogcG9pbnRlcjsgcG9zaXRpb246 IHJlbGF0aXZlOyB9Ci5kcml2ZS1tZWRpYS1wZGYtaWZyYW1lIGlmcmFtZSB7CiAgICB3aWR0aDog MTAwJTsKICAgIGhlaWdodDogMzAwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3Jk ZXItbGlnaHQpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0t YmctY2FyZCk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQouZHJpdmUtbWVkaWEtcGRmLWlm cmFtZTpob3ZlciB7IG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS10ZXh0LWhlYWRpbmcpOyBvdXRs aW5lLW9mZnNldDogMnB4OyB9Ci5kcml2ZS1tZWRpYS1wZGYtaWZyYW1lOjphZnRlciB7CiAgICBj b250ZW50OiAnS2xpY2tlbiB6dW0gVmVyZ3JvZXNzZXJuJzsKICAgIHBvc2l0aW9uOiBhYnNvbHV0 ZTsgYm90dG9tOiA4cHg7IHJpZ2h0OiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAu Nyk7IGNvbG9yOiB3aGl0ZTsgcGFkZGluZzogM3B4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiAz cHg7IGZvbnQtc2l6ZTogMTFweDsgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAw OyB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7Cn0KLmRyaXZlLW1lZGlhLXBkZi1pZnJhbWU6aG92 ZXI6OmFmdGVyIHsgb3BhY2l0eTogMTsgfQoKLyogLS0tIElubGluZS1NZWRpZW4tRW1iZWRzIChW aWRlbywgQXVkaW8sIE9mZmljZSkgLS0tICovCi5kcml2ZS1tZWRpYS1lbWJlZCB7CiAgICBkaXNw bGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMHB4OwogICAgcGFk ZGluZzogMTBweCAxNnB4OyBtYXJnaW46IDhweCAwOwogICAgYmFja2dyb3VuZDogdmFyKC0tYmct Y2FyZC1hbHQpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgYm9y ZGVyLXJhZGl1czogNnB4OyBjdXJzb3I6IHBvaW50ZXI7IHRyYW5zaXRpb246IHZhcigtLXRyYW5z aXRpb24tc3RkKTsKICAgIG1heC13aWR0aDogNDAwcHg7Cn0KLmRyaXZlLW1lZGlhLWVtYmVkLmRy aXZlLWFsaWduLWxlZnQsCi5kcml2ZS1tZWRpYS1lbWJlZC5kcml2ZS1hbGlnbi1yaWdodCB7IGRp c3BsYXk6IGZsZXg7IG1heC13aWR0aDogNTAlOyB9Ci5kcml2ZS1tZWRpYS1lbWJlZC5kcml2ZS1h bGlnbi1jZW50ZXIgeyBkaXNwbGF5OiBmbGV4OyBtYXJnaW46IDE2cHggYXV0bzsgY2xlYXI6IGJv dGg7IH0KLmRyaXZlLW1lZGlhLWVtYmVkOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS10ZXh0 LWhlYWRpbmcpOyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1ob3Zlcik7IH0KLmRyaXZlLWVtYmVkLWlj b24gewogICAgd2lkdGg6IDMycHg7IGhlaWdodDogMzJweDsgZmxleC1zaHJpbms6IDA7CiAgICBi YWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJh Y2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKfQouZHJpdmUtZW1iZWQtaWNvbi5pY29uLWF1ZGlv IHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdjc3MvaWNvbnMvYXVkaW8ucG5nJyk7IH0KLmRyaXZl LWVtYmVkLWljb24uaWNvbi12aWRlbyB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCgnY3NzL2ljb25z L3ZpZGVvLnBuZycpOyB9Ci5kcml2ZS1lbWJlZC1pY29uLmljb24tcGRmIHsgYmFja2dyb3VuZC1p bWFnZTogdXJsKCdjc3MvaWNvbnMvcGRmLnBuZycpOyB9Ci5kcml2ZS1lbWJlZC1pY29uLmljb24t ZG9jeCwgLmRyaXZlLWVtYmVkLWljb24uaWNvbi1kb2MgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwo J2Nzcy9pY29ucy93b3JkLnBuZycpOyB9Ci5kcml2ZS1lbWJlZC1pY29uLmljb24teGxzeCwgLmRy aXZlLWVtYmVkLWljb24uaWNvbi14bHMgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2Nzcy9pY29u cy9leGNlbC5wbmcnKTsgfQouZHJpdmUtZW1iZWQtaWNvbi5pY29uLXBwdHgsIC5kcml2ZS1lbWJl ZC1pY29uLmljb24tcHB0IHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdjc3MvaWNvbnMvcG93ZXJw b2ludC5wbmcnKTsgfQouZHJpdmUtZW1iZWQtbGFiZWwgewogICAgZm9udC1zaXplOiAxM3B4OyBm b250LXdlaWdodDogNTAwOyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsKICAgIG92ZXJmbG93 OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB3aGl0ZS1zcGFjZTogbm93cmFwOwp9 CgovKiAtLS0gRmlsZSBUeXBlIEljb25zIChjc3MvaWNvbnMvKSAtLS0gKi8KLmRyaXZlLWZpbGUt aWNvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7 CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHdpZHRoOiAzNnB4OyBoZWlnaHQ6IDM2 cHg7CiAgICBmbGV4LXNocmluazogMDsKICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjsKICAg IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBj ZW50ZXI7CiAgICBmb250LXNpemU6IDA7IC8qIFRleHQgYXVzYmxlbmRlbiwgSWNvbiBwZXIgQmFj a2dyb3VuZCAqLwp9CgouZHJpdmUtZmlsZS1pY29uLmltYWdlIHsgYmFja2dyb3VuZC1pbWFnZTog dXJsKCdjc3MvaWNvbnMvaW1hZ2UucG5nJyk7IH0KLmRyaXZlLWZpbGUtaWNvbi5wZGYgICB7IGJh Y2tncm91bmQtaW1hZ2U6IHVybCgnY3NzL2ljb25zL3BkZi5wbmcnKTsgfQouZHJpdmUtZmlsZS1p Y29uLmF1ZGlvIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdjc3MvaWNvbnMvYXVkaW8ucG5nJyk7 IH0KLmRyaXZlLWZpbGUtaWNvbi52aWRlbyB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCgnY3NzL2lj b25zL3ZpZGVvLnBuZycpOyB9Ci5kcml2ZS1maWxlLWljb24uZG9jeCAgeyBiYWNrZ3JvdW5kLWlt YWdlOiB1cmwoJ2Nzcy9pY29ucy93b3JkLnBuZycpOyB9Ci5kcml2ZS1maWxlLWljb24ueGxzeCAg eyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2Nzcy9pY29ucy9leGNlbC5wbmcnKTsgfQouZHJpdmUt ZmlsZS1pY29uLnBwdHggIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdjc3MvaWNvbnMvcG93ZXJw b2ludC5wbmcnKTsgfQouZHJpdmUtZmlsZS1pY29uLmZpbGUgIHsgYmFja2dyb3VuZC1jb2xvcjog IzZjNzU3ZDsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogd2hpdGU7IGZvbnQtc2l6ZTogMTFw eDsgZm9udC13ZWlnaHQ6IDcwMDsgfQpbZGF0YS10aGVtZT0ibmlnaHQiXSAuZHJpdmUtZmlsZS1p Y29uIHsgZmlsdGVyOiBpbnZlcnQoMSkgYnJpZ2h0bmVzcygyKTsgfQpbZGF0YS10aGVtZT0ibmln aHQiXSAuZHJpdmUtZmlsZS1pY29uLmZpbGUgeyBmaWx0ZXI6IG5vbmU7IH0KW2RhdGEtdGhlbWU9 Im5pZ2h0Il0gLmRyaXZlLWVtYmVkLWljb24geyBmaWx0ZXI6IGludmVydCgxKSBicmlnaHRuZXNz KDIpOyB9CgovKiAtLS0gQXR0YWNobWVudCBHcmlkIChEZXRhaWwgVmlldykgLS0tICovCi5hdHRh Y2htZW50LWl0ZW0gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7 CiAgICBnYXA6IDEycHg7CiAgICBwYWRkaW5nOiAxMHB4IDE0cHg7CiAgICBiYWNrZ3JvdW5kOiB2 YXIoLS1iZy1jYXJkLWFsdCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGln aHQpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJh bnNpdGlvbjogYWxsIDAuMnM7Cn0KCi5hdHRhY2htZW50LWl0ZW06aG92ZXIgeyBiYWNrZ3JvdW5k OiB2YXIoLS1iZy1ob3Zlcik7IGJvcmRlci1jb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsgfQoK LmF0dGFjaG1lbnQtaW5mbyB7IGZsZXg6IDE7IG1pbi13aWR0aDogMDsgfQouYXR0YWNobWVudC10 aXRsZSB7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6IHZhcigtLXRl eHQtaGVhZGluZyk7IHdoaXRlLXNwYWNlOiBub3dyYXA7IG92ZXJmbG93OiBoaWRkZW47IHRleHQt b3ZlcmZsb3c6IGVsbGlwc2lzOyB9Ci5hdHRhY2htZW50LW1ldGEgeyBmb250LXNpemU6IDEycHg7 IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgbWFyZ2luLXRvcDogMnB4OyB9Ci5hdHRhY2htZW50 LWFjdGlvbnMgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDZweDsgfQoKLmF0dGFjaG1lbnQtYWN0aW9u cyBidXR0b24gewogICAgcGFkZGluZzogNHB4IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2 YXIoLS1ib3JkZXItY29sb3IpOwogICAgYmFja2dyb3VuZDogdmFyKC0tYmctY2FyZCk7CiAgICBj b2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIGZv bnQtc2l6ZTogMTJweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGFsbCAw LjJzOwp9CgouYXR0YWNobWVudC1hY3Rpb25zIGJ1dHRvbjpob3ZlciB7IGJvcmRlci1jb2xvcjog dmFyKC0tdGV4dC1oZWFkaW5nKTsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7IH0KCi8qIC0t LSBNZWRpYSBVcGxvYWQgRGlhbG9nIC0tLSAqLwoubWVkaWEtdXBsb2FkLWRpYWxvZyB7CiAgICBk aXNwbGF5OiBub25lOwogICAgcG9zaXRpb246IGZpeGVkOwogICAgdG9wOiAwOyBsZWZ0OiAwOwog ICAgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAs MC41KTsKICAgIHotaW5kZXg6IDIwMDA7Cn0KCi5tZWRpYS11cGxvYWQtZGlhbG9nLmFjdGl2ZSB7 IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2Vu dGVyOyB9CgoubWVkaWEtdXBsb2FkLWRpYWxvZy1jb250ZW50IHsKICAgIGJhY2tncm91bmQ6IHZh cigtLWJnLWNhcmQpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgd2lkdGg6IDU1MHB4Owog ICAgbWF4LXdpZHRoOiA5NSU7CiAgICBtYXgtaGVpZ2h0OiA5MHZoOwogICAgb3ZlcmZsb3cteTog YXV0bzsKICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tb2RhbCk7Cn0KCi5tZWRpYS11cGxv YWQtZGlhbG9nLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1wcmltYXJ5KTsKICAg IGNvbG9yOiB3aGl0ZTsKICAgIHBhZGRpbmc6IDE1cHggMjBweDsKICAgIGJvcmRlci1yYWRpdXM6 IDhweCA4cHggMCAwOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGZvbnQtc2l6ZTogMTZweDsK ICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAg ICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgoubWVkaWEtdXBsb2FkLWRpYWxvZy1oZWFkZXIgYnV0 dG9uIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBib3JkZXI6IDFweCBzb2xpZCB3aGl0 ZTsgY29sb3I6IHdoaXRlOwogICAgcGFkZGluZzogNHB4IDEycHg7IGJvcmRlci1yYWRpdXM6IDRw eDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDEzcHg7Cn0KCi5tZWRpYS11cGxvYWQtZGlh bG9nLWJvZHkgeyBwYWRkaW5nOiAyMHB4OyB9CgoudXBsb2FkLXByZXZpZXcgewogICAgdGV4dC1h bGlnbjogY2VudGVyOwogICAgcGFkZGluZzogMTVweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJn LWNhcmQtYWx0KTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIG1hcmdpbi1ib3R0b206IDE1 cHg7Cn0KCi51cGxvYWQtcHJldmlldyBpbWcgeyBtYXgtd2lkdGg6IDEwMCU7IG1heC1oZWlnaHQ6 IDIwMHB4OyBib3JkZXItcmFkaXVzOiA0cHg7IH0KCi51cGxvYWQtZm9ybS1ncm91cCB7IG1hcmdp bi1ib3R0b206IDEycHg7IH0KLnVwbG9hZC1mb3JtLWdyb3VwIGxhYmVsIHsgZGlzcGxheTogYmxv Y2s7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMTNweDsgY29sb3I6IHZhcigtLXRleHQt aGVhZGluZyk7IG1hcmdpbi1ib3R0b206IDRweDsgfQoudXBsb2FkLWZvcm0tZ3JvdXAgaW5wdXQs IC51cGxvYWQtZm9ybS1ncm91cCB0ZXh0YXJlYSB7CiAgICB3aWR0aDogMTAwJTsgcGFkZGluZzog OHB4IDEwcHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1zdHJvbmcpOyBib3JkZXIt cmFkaXVzOiA0cHg7IGZvbnQtc2l6ZTogMTNweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWlu cHV0KTsgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7Cn0KLnVwbG9hZC1mb3JtLWdyb3VwIHRl eHRhcmVhIHsgcmVzaXplOiB2ZXJ0aWNhbDsgbWluLWhlaWdodDogNTBweDsgfQoKLnVwbG9hZC1v cHRpb24tZ3JvdXAgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDhweDsgZmxleC13cmFwOiB3cmFwOyB9 CgoudXBsb2FkLW9wdGlvbi1idG4gewogICAgcGFkZGluZzogNnB4IDEycHg7CiAgICBib3JkZXI6 IDJweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgYmFja2dyb3VuZDogdmFyKC0tYmct Y2FyZCk7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsKICAgIGJvcmRlci1yYWRpdXM6 IDRweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQt d2VpZ2h0OiA1MDA7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgIHRleHQtYWxpZ246IGNl bnRlcjsKfQoKLnVwbG9hZC1vcHRpb24tYnRuOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS10 ZXh0LWhlYWRpbmcpOyB9Ci51cGxvYWQtb3B0aW9uLWJ0bi5hY3RpdmUgeyBib3JkZXItY29sb3I6 IHZhcigtLXRleHQtaGVhZGluZyk7IGJhY2tncm91bmQ6IHZhcigtLXRleHQtaGVhZGluZyk7IGNv bG9yOiB3aGl0ZTsgfQoKLnVwbG9hZC1kaWFsb2ctZm9vdGVyIHsKICAgIHBhZGRpbmc6IDE1cHgg MjBweDsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOwogICAg ZGlzcGxheTogZmxleDsKICAgIGdhcDogMTBweDsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1l bmQ7Cn0KCi51cGxvYWQtZGlhbG9nLWZvb3RlciBidXR0b24gewogICAgcGFkZGluZzogOHB4IDIw cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS10ZXh0LWhlYWRpbmcpOwogICAgYmFja2dy b3VuZDogdmFyKC0tYmctY2FyZCk7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsKICAg IGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtd2VpZ2h0 OiA2MDA7CiAgICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uLXN0ZCk7Cn0KCi51cGxvYWQt ZGlhbG9nLWZvb3RlciBidXR0b24ucHJpbWFyeSB7IGJhY2tncm91bmQ6ICMyZDlkNzg7IGNvbG9y OiB3aGl0ZTsgYm9yZGVyLWNvbG9yOiAjMmQ5ZDc4OyB9Ci51cGxvYWQtZGlhbG9nLWZvb3RlciBi dXR0b24ucHJpbWFyeTpob3ZlciB7IGJhY2tncm91bmQ6ICMxZTdhNWY7IH0KCi51cGxvYWQtZHJv cC16b25lIHsKICAgIGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1ib3JkZXItY29sb3IsICNjY2Mp OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogMzJweCAyMHB4OwogICAgdGV4 dC1hbGlnbjogY2VudGVyOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICBjdXJzb3I6IHBv aW50ZXI7Cn0KLnVwbG9hZC1kcm9wLXpvbmU6aG92ZXIsIC51cGxvYWQtZHJvcC16b25lLmRyYWct b3ZlciB7CiAgICBib3JkZXItY29sb3I6ICMyZDlkNzg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDQ1 LCAxNTcsIDEyMCwgMC4wNik7Cn0KLnVwbG9hZC1kcm9wLXpvbmUuZHJhZy1vdmVyIHsKICAgIGJv cmRlci1zdHlsZTogc29saWQ7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDEpOwp9Ci51cGxvYWQt c3RhcnQtYnRuIHsKICAgIHBhZGRpbmc6IDEwcHggMjhweDsKICAgIGJhY2tncm91bmQ6ICMyZDlk Nzg7CiAgICBjb2xvcjogd2hpdGU7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItcmFkaXVz OiA2cHg7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY3Vy c29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwp9Ci51cGxvYWQt c3RhcnQtYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogIzFlN2E1ZjsgfQoKLyogLS0tIE1lZGlhIENv bnRleHQgTWVudSAoRWRpdG9yKSAtLS0gKi8KLm1lZGlhLWNvbnRleHQtbWVudSB7CiAgICBkaXNw bGF5OiBub25lOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYmFja2dyb3VuZDogdmFyKC0t YmctY2FyZCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAg Ym9yZGVyLXJhZGl1czogNnB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMTZweCB2YXIoLS1zaGFk b3ctbWVkaXVtKTsKICAgIHotaW5kZXg6IDMwMDA7CiAgICBwYWRkaW5nOiA4cHg7CiAgICBtaW4t d2lkdGg6IDE4MHB4Owp9CgoubWVkaWEtY29udGV4dC1tZW51LmFjdGl2ZSB7IGRpc3BsYXk6IGJs b2NrOyB9CgoubWVkaWEtY29udGV4dC1tZW51IGJ1dHRvbiB7CiAgICBkaXNwbGF5OiBibG9jazsK ICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICBib3JkZXI6IG5vbmU7 CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBj dXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBib3JkZXItcmFkaXVzOiAz cHg7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzOwp9CgoubWVkaWEtY29udGV4dC1t ZW51IGJ1dHRvbiB7IGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOyB9Ci5tZWRpYS1jb250ZXh0 LW1lbnUgYnV0dG9uOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYmctaG92ZXIpOyB9CgoubWVk aWEtY29udGV4dC1zZXAgeyBoZWlnaHQ6IDFweDsgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyLWxp Z2h0KTsgbWFyZ2luOiA0cHggMDsgfQoKLm1lZGlhLWNvbnRleHQtZ3JvdXAgeyBkaXNwbGF5OiBm bGV4OyBnYXA6IDRweDsgcGFkZGluZzogNHB4IDZweDsgfQoKLm1lZGlhLWNvbnRleHQtZ3JvdXAg YnV0dG9uIHsKICAgIGZsZXg6IDE7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5n OiA1cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKSAhaW1w b3J0YW50OwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAg Y29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7Cn0KCi5tZWRpYS1jb250ZXh0LWdyb3VwIGJ1dHRv bi5hY3RpdmUgeyBiYWNrZ3JvdW5kOiB2YXIoLS10ZXh0LWhlYWRpbmcpOyBjb2xvcjogd2hpdGU7 IGJvcmRlci1jb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKSAhaW1wb3J0YW50OyB9CgovKiAtLS0g VW5pdmVyc2FsIE1lZGlhIE1vZGFsIEV4dHJhcyAtLS0gKi8KLmF1ZGlvLW1vZGFsLWNvbnRlbnQs IC5vZmZpY2UtbW9kYWwtY29udGVudCwgLmZpbGUtbW9kYWwtY29udGVudCB7CiAgICB0ZXh0LWFs aWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiA0MHB4OwogICAgY29sb3I6IHdoaXRlOwp9CgouYXVk aW8tbW9kYWwtY29udGVudCAuYXVkaW8taWNvbiwgLm9mZmljZS1tb2RhbC1jb250ZW50IC5vZmZp Y2UtaWNvbiB7CiAgICBmb250LXNpemU6IDY0cHg7CiAgICBtYXJnaW4tYm90dG9tOiAxNXB4Owp9 CgouYXVkaW8tbW9kYWwtY29udGVudCBwLCAub2ZmaWNlLW1vZGFsLWNvbnRlbnQgcCB7IGZvbnQt c2l6ZTogMThweDsgbWFyZ2luLWJvdHRvbTogMTVweDsgfQoub2ZmaWNlLW1vZGFsLWNvbnRlbnQg Lm9mZmljZS1oaW50IHsgZm9udC1zaXplOiAxNHB4OyBvcGFjaXR5OiAwLjc7IG1hcmdpbi1ib3R0 b206IDIwcHg7IH0KCi5vZmZpY2UtZG93bmxvYWQtYnRuIHsKICAgIGRpc3BsYXk6IGlubGluZS1i bG9jazsKICAgIHBhZGRpbmc6IDEycHggMzBweDsKICAgIGJhY2tncm91bmQ6ICMyRTRBNjI7CiAg ICBjb2xvcjogd2hpdGU7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBib3JkZXItcmFk aXVzOiA0cHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3Vu ZCAwLjJzOwp9Cgoub2ZmaWNlLWRvd25sb2FkLWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6ICMxZTM0 NDc7IH0KCi8qIC0tLSBHb3Zlcm5hbmNlOiBSZXZpZXcgQmFkZ2UgLS0tICovCi5yZXZpZXctYmFk Z2UgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwog ICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiAzcHggMTBweDsKICAgIGJhY2tncm91bmQ6ICNkYzM1 NDU7CiAgICBjb2xvcjogd2hpdGU7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgZm9udC1z aXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAg IGFuaW1hdGlvbjogcmV2aWV3UHVsc2UgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICB0cmFu c2l0aW9uOiBhbGwgMC4yczsKfQoKLnJldmlldy1iYWRnZTpob3ZlciB7IGJhY2tncm91bmQ6ICNj ODIzMzM7IHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7IH0KCkBrZXlmcmFtZXMgcmV2aWV3UHVsc2Ug ewogICAgMCUsIDEwMCUgeyBib3gtc2hhZG93OiAwIDAgMCAwIHJnYmEoMjIwLDUzLDY5LDAuNCk7 IH0KICAgIDUwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDZweCByZ2JhKDIyMCw1Myw2OSwwKTsgfQp9 CgovKiAtLS0gR292ZXJuYW5jZTogUmV2aWV3IFBhbmVsIC0tLSAqLwoucmV2aWV3LXBhbmVsLW92 ZXJsYXkgewogICAgZGlzcGxheTogbm9uZTsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDog MDsgbGVmdDogMDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsKICAgIGJhY2tncm91bmQ6IHJn YmEoMCwwLDAsMC4zKTsKICAgIHotaW5kZXg6IDE0OTk7Cn0KLnJldmlldy1wYW5lbC1vdmVybGF5 LmFjdGl2ZSB7IGRpc3BsYXk6IGJsb2NrOyB9CgoucmV2aWV3LXBhbmVsIHsKICAgIGRpc3BsYXk6 IG5vbmU7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7IHJpZ2h0OiAwOwogICAgd2lk dGg6IDM0MHB4OwogICAgbWF4LXdpZHRoOiA5NXZ3OwogICAgaGVpZ2h0OiAxMDAlOwogICAgYmFj a2dyb3VuZDogdmFyKC0tYmctY2FyZCk7CiAgICBib3gtc2hhZG93OiAtNHB4IDAgMjBweCB2YXIo LS1zaGFkb3ctbWVkaXVtKTsKICAgIHotaW5kZXg6IDE1MDA7CiAgICBmbGV4LWRpcmVjdGlvbjog Y29sdW1uOwp9CgoucmV2aWV3LXBhbmVsLmFjdGl2ZSB7IGRpc3BsYXk6IGZsZXg7IH0KCi5yZXZp ZXctcGFuZWwtaGVhZGVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLXByaW1hcnkpOwogICAg Y29sb3I6IHdoaXRlOwogICAgcGFkZGluZzogMTVweCAyMHB4OwogICAgZGlzcGxheTogZmxleDsK ICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGFsaWduLWl0ZW1zOiBjZW50 ZXI7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiAxNnB4Owp9CgoucmV2aWV3 LXBhbmVsLWhlYWRlciBidXR0b24gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSww LjE1KTsgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjQpOyBjb2xvcjogd2hp dGU7CiAgICBwYWRkaW5nOiA1cHggMTRweDsgYm9yZGVyLXJhZGl1czogNHB4OyBjdXJzb3I6IHBv aW50ZXI7IGZvbnQtc2l6ZTogMTJweDsKfQoucmV2aWV3LXBhbmVsLWhlYWRlciBidXR0b246aG92 ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMjUpOyB9CgoucmV2aWV3LXBhbmVs LWJvZHkgeyBmbGV4OiAxOyBvdmVyZmxvdy15OiBhdXRvOyBwYWRkaW5nOiAxNXB4OyB9CgoucmV2 aWV3LWl0ZW0gewogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsKICAg IGJvcmRlci1yYWRpdXM6IDZweDsKICAgIHBhZGRpbmc6IDEycHg7CiAgICBtYXJnaW4tYm90dG9t OiAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7Cn0K Ci5yZXZpZXctaXRlbTpob3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsg YmFja2dyb3VuZDogdmFyKC0tYmctaG92ZXIpOyB9CgoucmV2aWV3LWl0ZW0tdGl0bGUgeyBmb250 LXdlaWdodDogNjAwOyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsgbWFyZ2luLWJvdHRvbTog NHB4OyB9Ci5yZXZpZXctaXRlbS1tZXRhIHsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjogdmFyKC0t dGV4dC1tdXRlZCk7IGRpc3BsYXk6IGZsZXg7IGdhcDogMTBweDsgZmxleC13cmFwOiB3cmFwOyB9 CgoucmV2aWV3LWl0ZW0tYWN0aW9ucyB7IGRpc3BsYXk6IGZsZXg7IGdhcDogNnB4OyBtYXJnaW4t dG9wOiA4cHg7IH0KCi5yZXZpZXctaXRlbS1hY3Rpb25zIGJ1dHRvbiB7CiAgICBwYWRkaW5nOiA1 cHggMTJweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBi YWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGN1 cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7 CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKfQoKLnJldmlldy1pdGVtLWFjdGlvbnMgLmJ0bi1h cHByb3ZlIHsgYm9yZGVyLWNvbG9yOiAjMjhhNzQ1OyBjb2xvcjogIzI4YTc0NTsgfQoucmV2aWV3 LWl0ZW0tYWN0aW9ucyAuYnRuLWFwcHJvdmU6aG92ZXIgeyBiYWNrZ3JvdW5kOiAjMjhhNzQ1OyBj b2xvcjogd2hpdGU7IH0KLnJldmlldy1pdGVtLWFjdGlvbnMgLmJ0bi1yZWplY3QgeyBib3JkZXIt Y29sb3I6ICNkYzM1NDU7IGNvbG9yOiAjZGMzNTQ1OyB9Ci5yZXZpZXctaXRlbS1hY3Rpb25zIC5i dG4tcmVqZWN0OmhvdmVyIHsgYmFja2dyb3VuZDogI2RjMzU0NTsgY29sb3I6IHdoaXRlOyB9Cgov KiAtLS0gR292ZXJuYW5jZTogUmV2aWV3IERpYWxvZyAtLS0gKi8KLnJldmlldy1kaWFsb2cgewog ICAgZGlzcGxheTogbm9uZTsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMDsgbGVmdDog MDsKICAgIHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAs MCwwLDAuNSk7CiAgICB6LWluZGV4OiAyNTAwOwp9CgoucmV2aWV3LWRpYWxvZy5hY3RpdmUgeyBk aXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRl cjsgfQoKLnJldmlldy1kaWFsb2ctY29udGVudCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1j YXJkKTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIHdpZHRoOiA5MDBweDsKICAgIG1heC13 aWR0aDogOTUlOwogICAgbWF4LWhlaWdodDogODV2aDsKICAgIGRpc3BsYXk6IGZsZXg7IGZsZXgt ZGlyZWN0aW9uOiBjb2x1bW47CiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbW9kYWwpOwog ICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnJldmlldy1kaWFsb2ctaGVhZGVyIHsKICAgIHBhZGRp bmc6IDE0cHggMjBweDsKICAgIGJvcmRlci1yYWRpdXM6IDhweCA4cHggMCAwOwogICAgZm9udC13 ZWlnaHQ6IDYwMDsKICAgIGZvbnQtc2l6ZTogMTVweDsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGZs ZXgtc2hyaW5rOiAwOwogICAgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1i ZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOwp9CgoucmV2aWV3LWRpYWxvZy1oZWFkZXIuYXBw cm92ZSB7IGJhY2tncm91bmQ6ICMyOGE3NDU7IH0KLnJldmlldy1kaWFsb2ctaGVhZGVyLnJlamVj dCB7IGJhY2tncm91bmQ6ICNkYzM1NDU7IH0KCi5yZXZpZXctZGlhbG9nLWJvZHkgewogICAgcGFk ZGluZzogMDsgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7CiAgICBmbGV4OiAxOyBtaW4taGVp Z2h0OiAwOyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBvdmVyZmxvdzog aGlkZGVuOwp9CgoucmV2aWV3LXNwbGl0IHsKICAgIGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxh dGUtY29sdW1uczogMWZyIDFmcjsgZmxleDogMTsgbWluLWhlaWdodDogMDsgb3ZlcmZsb3c6IGhp ZGRlbjsKfQoucmV2aWV3LXNwbGl0LWxlZnQgewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQg dmFyKC0tYm9yZGVyLWxpZ2h0KTsgb3ZlcmZsb3cteTogYXV0bzsgcGFkZGluZzogMTZweDsKICAg IGZvbnQtc2l6ZTogMTRweDsgbGluZS1oZWlnaHQ6IDEuNzsgY29sb3I6IHZhcigtLXRleHQtcHJp bWFyeSk7Cn0KLnJldmlldy1zcGxpdC1sZWZ0IGgzIHsgY29sb3I6IHZhcigtLXRleHQtaGVhZGlu Zyk7IGZvbnQtc2l6ZTogMTRweDsgbWFyZ2luLWJvdHRvbTogOHB4OyB9Ci5yZXZpZXctc3BsaXQt cmlnaHQgewogICAgb3ZlcmZsb3cteTogYXV0bzsgcGFkZGluZzogMTZweDsgZGlzcGxheTogZmxl eDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAxMHB4Owp9Ci5yZXZpZXctc3BsaXQtcmln aHQgaDMgeyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsgZm9udC1zaXplOiAxNHB4OyBtYXJn aW4tYm90dG9tOiA0cHg7IH0KCi5yZXZpZXctcHJldi1jb21tZW50cyB7IGRpc3BsYXk6IGZsZXg7 IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNnB4OyBtYXJnaW4tYm90dG9tOiAxMHB4OyB9 Ci5yZXZpZXctY29tbWVudC1idWJibGUgewogICAgcGFkZGluZzogOHB4IDEwcHg7IGJvcmRlci1y YWRpdXM6IDZweDsgZm9udC1zaXplOiAxMnB4OyBsaW5lLWhlaWdodDogMS41OwogICAgYm9yZGVy LWxlZnQ6IDNweCBzb2xpZDsgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci5yZXZpZXctY29tbWVudC1i dWJibGUgLnJjLWF1dGhvciB7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMTFweDsgfQou cmV2aWV3LWNvbW1lbnQtYnViYmxlIC5yYy10ZXh0IHsgbWFyZ2luLXRvcDogM3B4OyBjb2xvcjog dmFyKC0tdGV4dC1wcmltYXJ5KTsgfQoucmV2aWV3LWNvbW1lbnQtYnViYmxlIC5yYy1kYXRlIHsK ICAgIGZvbnQtc2l6ZTogMTBweDsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBwb3NpdGlvbjog YWJzb2x1dGU7IHRvcDogNHB4OyByaWdodDogOHB4Owp9CgoucmV2aWV3LWRpYWxvZy1ib2R5IHRl eHRhcmVhIHsKICAgIHdpZHRoOiAxMDAlOyBtaW4taGVpZ2h0OiAxMDBweDsgcGFkZGluZzogMTBw eDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7IGJvcmRlci1yYWRp dXM6IDRweDsgZm9udC1zaXplOiAxM3B4OyByZXNpemU6IHZlcnRpY2FsOwogICAgYmFja2dyb3Vu ZDogdmFyKC0tYmctaW5wdXQpOyBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsgZmxleC1zaHJp bms6IDA7Cn0KCi5yZXZpZXctZGlhbG9nLWZvb3RlciB7CiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7 CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsKICAgIGRpc3Bs YXk6IGZsZXg7IGdhcDogMTBweDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsgZmxleC1zaHJp bms6IDA7Cn0KCi5yZXZpZXctZGlhbG9nLWZvb3RlciBidXR0b24gewogICAgcGFkZGluZzogOHB4 IDIwcHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBm b250LXdlaWdodDogNjAwOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9y KTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQpOwogICAgY29sb3I6IHZhcigtLXRleHQt cHJpbWFyeSk7Cn0KCi5yZXZpZXctZGlhbG9nLWZvb3RlciAuYnRuLWNvbmZpcm0geyBjb2xvcjog d2hpdGU7IGJvcmRlcjogbm9uZTsgfQoucmV2aWV3LWRpYWxvZy1mb290ZXIgLmJ0bi1jb25maXJt LmFwcHJvdmUgeyBiYWNrZ3JvdW5kOiAjMjhhNzQ1OyB9Ci5yZXZpZXctZGlhbG9nLWZvb3RlciAu YnRuLWNvbmZpcm0ucmVqZWN0IHsgYmFja2dyb3VuZDogI2RjMzU0NTsgfQoKI3Jldmlld0RpYWxv Z0NvbW1lbnQ6ZW1wdHk6OmJlZm9yZSB7CiAgICBjb250ZW50OiBhdHRyKGRhdGEtcGxhY2Vob2xk ZXIpOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IHBvaW50ZXItZXZlbnRzOiBub25lOwp9CiNy ZXZpZXdEaWFsb2dDb21tZW50IHVsLCAjcmV2aWV3RGlhbG9nQ29tbWVudCBvbCB7IHBhZGRpbmct bGVmdDogMThweDsgbWFyZ2luOiA0cHggMDsgfQoKLyogLS0tIEdvdmVybmFuY2U6IEFkbWluIFBh bmVsIC0tLSAqLwouZ292LWFkbWluLXBhbmVsIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBwb3Np dGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7IGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsgaGVpZ2h0 OiAxMDAlOwogICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjUpOwogICAgei1pbmRleDogMjAw MDsKfQoKLmdvdi1hZG1pbi1wYW5lbC5hY3RpdmUgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVt czogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfQoKLmdvdi1hZG1pbi1jb250ZW50 IHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQtYWx0KTsKICAgIGJvcmRlci1yYWRpdXM6 IDEwcHg7CiAgICB3aWR0aDogOTIwcHg7CiAgICBtYXgtd2lkdGg6IDk1JTsKICAgIG1heC1oZWln aHQ6IDg1dmg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogZmxleDsKICAgIGZs ZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBib3gtc2hhZG93OiAwIDEycHggNDhweCByZ2JhKDAs MCwwLDAuMjUpOwp9CgouZ292LWFkbWluLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiAjMWEyMzMy OwogICAgY29sb3I6IHdoaXRlOwogICAgcGFkZGluZzogMTZweCAyNHB4OwogICAgYm9yZGVyLXJh ZGl1czogMTBweCAxMHB4IDAgMDsKICAgIGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDog c3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7 IGZvbnQtc2l6ZTogMTZweDsKfQoKLmdvdi1hZG1pbi1oZWFkZXIgYnV0dG9uIHsKICAgIGJhY2tn cm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1 LDI1NSwyNTUsMC40KTsgY29sb3I6IHdoaXRlOwogICAgcGFkZGluZzogNXB4IDE0cHg7IGJvcmRl ci1yYWRpdXM6IDRweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDEzcHg7IHRyYW5zaXRp b246IGJhY2tncm91bmQgMC4yczsKfQoKLmdvdi1hZG1pbi1oZWFkZXIgYnV0dG9uOmhvdmVyIHsg YmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjI1KTsgfQoKLmdvdi1hZG1pbi10b29sYmFy IHsKICAgIHBhZGRpbmc6IDEwcHggMjBweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2 YXIoLS1ib3JkZXItbGlnaHQpOwogICAgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGZsZXgtd3Jh cDogd3JhcDsgZmxleC1zaHJpbms6IDA7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkLWFs dCk7Cn0KCi5nb3YtYWRtaW4tYm9keSB7IHBhZGRpbmc6IDIwcHg7IG92ZXJmbG93LXk6IGF1dG87 IGZsZXg6IDE7IG1pbi1oZWlnaHQ6IDA7IH0KCi5nb3Ytc2VjdGlvbiB7CiAgICBiYWNrZ3JvdW5k OiB2YXIoLS1iZy1jYXJkKTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIHBhZGRpbmc6IDE2 cHggMThweDsKICAgIG1hcmdpbi1ib3R0b206IDE0cHg7CiAgICBib3gtc2hhZG93OiAwIDFweCAz cHggdmFyKC0tc2hhZG93LWxpZ2h0KTsKfQoKLmdvdi1zZWN0aW9uLXRpdGxlIHsKICAgIGZvbnQt c2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1o ZWFkaW5nKTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2lu ZzogMC41cHg7CiAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgcGFkZGluZy1ib3R0b206IDhw eDsKICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOwp9Cgou Z292LXVzZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVy OwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogOHB4IDEycHg7CiAgICBib3JkZXI6IDFweCBz b2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgbWFy Z2luLWJvdHRvbTogNnB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tYmctY2FyZCk7CiAgICB0cmFu c2l0aW9uOiBib3JkZXItY29sb3IgMC4xNXM7Cn0KCi5nb3YtdXNlci1yb3c6aG92ZXIgeyBib3Jk ZXItY29sb3I6IHZhcigtLWJvcmRlci1zdHJvbmcpOyB9CgouZ292LXVzZXItcm93IC5nb3Ytcm9s ZS1pY29uIHsKICAgIHdpZHRoOiAyOHB4OyBoZWlnaHQ6IDI4cHg7IGJvcmRlci1yYWRpdXM6IDUw JTsKICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVu dDogY2VudGVyOwogICAgZm9udC1zaXplOiAxM3B4OyBmbGV4LXNocmluazogMDsKfQoKLmdvdi11 c2VyLXJvdyAuZ292LXJvbGUtaWNvbi5zdSB7IGJhY2tncm91bmQ6ICNlOGYwZmU7IGNvbG9yOiAj MWE1NmRiOyB9Ci5nb3YtdXNlci1yb3cgLmdvdi1yb2xlLWljb24ucmV2IHsgYmFja2dyb3VuZDog I2ZlZjNlMjsgY29sb3I6ICNiNDUzMDk7IH0KCi5nb3YtdXNlci1yb3cgLmdvdi11c2VyLWluZm8g eyBmbGV4OiAxOyBtaW4td2lkdGg6IDA7IH0KLmdvdi11c2VyLXJvdyAuZ292LXVzZXItaW5mbyAu Z292LXVzZXItbmFtZSB7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMTNweDsgY29sb3I6 IHZhcigtLXRleHQtcHJpbWFyeSk7IH0KLmdvdi11c2VyLXJvdyAuZ292LXVzZXItaW5mbyAuZ292 LXVzZXItZGV0YWlsIHsgZm9udC1zaXplOiAxMXB4OyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7 IG1hcmdpbi10b3A6IDFweDsgfQoKLmdvdi11c2VyLXJvdyAuZ292LWNhdC10YWdzIHsgZGlzcGxh eTogZmxleDsgZ2FwOiA0cHg7IGZsZXgtd3JhcDogd3JhcDsgZmxleDogMTsgfQoKLmdvdi1jYXQt dGFnIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZzogMnB4IDhweDsgYm9yZGVy LXJhZGl1czogMTBweDsKICAgIGZvbnQtc2l6ZTogMTFweDsgZm9udC13ZWlnaHQ6IDUwMDsgYmFj a2dyb3VuZDogdmFyKC0tYmctYWN0aXZlKTsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7Cn0K Ci5nb3YtdXNlci1yb3cgYnV0dG9uIHsKICAgIHBhZGRpbmc6IDRweCAxMHB4OyBib3JkZXI6IDFw eCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkLWFs dCk7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAx MXB4OyBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOyB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7 Cn0KCi5nb3YtdXNlci1yb3cgYnV0dG9uLnJlbW92ZSB7IGNvbG9yOiAjZGMzNTQ1OyBib3JkZXIt Y29sb3I6ICNmNWM2Y2I7IH0KLmdvdi11c2VyLXJvdyBidXR0b24ucmVtb3ZlOmhvdmVyIHsgYmFj a2dyb3VuZDogI2RjMzU0NTsgY29sb3I6IHdoaXRlOyB9Ci5nb3YtY2F0LWl0ZW0gYnV0dG9uIHsg YmFja2dyb3VuZDogdmFyKC0tYmctcHJpbWFyeSk7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyOiAxcHgg c29saWQgdmFyKC0tYmctcHJpbWFyeSk7IHBhZGRpbmc6IDVweCAxNHB4OyBmb250LXNpemU6IDEy cHg7IGJvcmRlci1yYWRpdXM6IDRweDsgY3Vyc29yOiBwb2ludGVyOyB9Ci5nb3YtY2F0LWl0ZW0g YnV0dG9uOmhvdmVyIHsgb3BhY2l0eTogMC44NTsgfQouZ292LWNhdC1pdGVtLmhpZGRlbi1jYXQg eyBvcGFjaXR5OiAwLjQ1OyB9Ci5nb3YtY2F0LWl0ZW0uaGlkZGVuLWNhdCAuZ292LWNhdC1uYW1l IHsgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7IH0KCi5nb3YtYWRkLWdyaWQgewogICAg ZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMC42ZnIgMWZyOwogICAg Z2FwOiAxMHB4OwogICAgbWFyZ2luLXRvcDogMTBweDsKfQoKLmdvdi1maWVsZCB7IGRpc3BsYXk6 IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogM3B4OyB9CgouZ292LWZpZWxkLmZ1 bGwtd2lkdGggeyBncmlkLWNvbHVtbjogMSAvIC0xOyB9CgouZ292LWZpZWxkIGxhYmVsIHsgZm9u dC1zaXplOiAxMXB4OyBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOyBmb250LXdlaWdodDog NjAwOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogMC4zcHg7IH0K Ci5nb3YtZmllbGQgaW5wdXQsIC5nb3YtZmllbGQgc2VsZWN0IHsKICAgIHBhZGRpbmc6IDZweCAx MHB4OyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItc3Ryb25nKTsgYm9yZGVyLXJhZGl1 czogNXB4OwogICAgZm9udC1zaXplOiAxM3B4OyBoZWlnaHQ6IDMycHg7IGJhY2tncm91bmQ6IHZh cigtLWJnLWlucHV0KTsgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7IHRyYW5zaXRpb246IGJv cmRlci1jb2xvciAwLjE1czsKfQoKLmdvdi1maWVsZCBpbnB1dDpmb2N1cywgLmdvdi1maWVsZCBz ZWxlY3Q6Zm9jdXMgeyBib3JkZXItY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7IG91dGxpbmU6 IG5vbmU7IGJveC1zaGFkb3c6IDAgMCAwIDJweCByZ2JhKDQ2LDc0LDk4LDAuMSk7IH0KCi5nb3Yt ZmllbGQgc2VsZWN0W211bHRpcGxlXSB7IGhlaWdodDogYXV0bzsgbWluLWhlaWdodDogNDhweDsg fQoKLmdvdi1maWVsZCAuZ292LWhpbnQgeyBmb250LXNpemU6IDEwcHg7IGNvbG9yOiAjOTk5OyBm b250LXN0eWxlOiBpdGFsaWM7IH0KCi5nb3YtYWRkLWFjdGlvbnMgeyBncmlkLWNvbHVtbjogMSAv IC0xOyBkaXNwbGF5OiBmbGV4OyBnYXA6IDhweDsgbWFyZ2luLXRvcDogNHB4OyB9CgouZ292LWFk ZC1idG4gewogICAgcGFkZGluZzogOHB4IDIwcHg7IGJhY2tncm91bmQ6IHZhcigtLXRleHQtaGVh ZGluZyk7IGNvbG9yOiB3aGl0ZTsKICAgIGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogNnB4 OyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMTNweDsKICAg IHRyYW5zaXRpb246IGFsbCAwLjE1czsKfQoKLmdvdi1hZGQtYnRuOmhvdmVyIHsgb3BhY2l0eTog MC44NTsgfQouZ292LWJ0bi1kYW5nZXIgeyBiYWNrZ3JvdW5kOiAjOGIxYTFhICFpbXBvcnRhbnQ7 IH0KW2RhdGEtdGhlbWU9Im5pZ2h0Il0gLmdvdi1idG4tZGFuZ2VyIHsgYmFja2dyb3VuZDogI2E4 MzIzMiAhaW1wb3J0YW50OyB9CgouZ292LWNhbmNlbC1idG4gewogICAgcGFkZGluZzogOHB4IDIw cHg7IGJhY2tncm91bmQ6IHZhcigtLWJvcmRlci1zdHJvbmcpOyBjb2xvcjogdmFyKC0tdGV4dC1w cmltYXJ5KTsKICAgIGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogNnB4OyBjdXJzb3I6IHBv aW50ZXI7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMTNweDsKICAgIHRyYW5zaXRpb246 IGFsbCAwLjE1czsKfQoKLmdvdi1jYW5jZWwtYnRuOmhvdmVyIHsgb3BhY2l0eTogMC44NTsgfQoK Lmdvdi11c2VyLXJvdyBidXR0b24uZWRpdCB7CiAgICBwYWRkaW5nOiAzcHggMTBweDsgYmFja2dy b3VuZDogdmFyKC0tYmctY2FyZCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRleHQtaGVhZGlu Zyk7IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OyBj dXJzb3I6IHBvaW50ZXI7IGZvbnQtc2l6ZTogMTFweDsgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwp9 CgouZ292LXVzZXItcm93IGJ1dHRvbi5lZGl0OmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tdGV4 dC1oZWFkaW5nKTsgY29sb3I6IHdoaXRlOyB9CgouZ292LXNldHRpbmctcm93IHsKICAgIGRpc3Bs YXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTBweDsKICAgIHBhZGRpbmc6IDhw eCAwOyBmb250LXNpemU6IDEzcHg7IGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOwp9CgouZ292 LXNldHRpbmctcm93ICsgLmdvdi1zZXR0aW5nLXJvdyB7IGJvcmRlci10b3A6IDFweCBzb2xpZCB2 YXIoLS1ib3JkZXItbGlnaHQpOyB9CgouZ292LXNldHRpbmctcm93IGlucHV0W3R5cGU9ImNoZWNr Ym94Il0gewogICAgd2lkdGg6IDE2cHg7IGhlaWdodDogMTZweDsgYWNjZW50LWNvbG9yOiAjMkU0 QTYyOyBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5nb3YtZW1wdHkgeyBjb2xvcjogdmFyKC0tdGV4dC1t dXRlZCk7IGZvbnQtc2l6ZTogMTNweDsgdGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiAxMnB4 OyBmb250LXN0eWxlOiBpdGFsaWM7IH0KCi8qIC0tLSBSZXZpZXcgSGlzdG9yeSBpbiBEZXRhaWwg LS0tICovCi5yZXZpZXctaGlzdG9yeSB7CiAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgcGFkZGlu Zy10b3A6IDE1cHg7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2UwZTBlMDsKfQoKLnJldmll dy1oaXN0b3J5IGgzIHsgZm9udC1zaXplOiAxNXB4OyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5n KTsgbWFyZ2luLWJvdHRvbTogMTBweDsgfQoKLnJldmlldy1oaXN0b3J5LWl0ZW0gewogICAgZGlz cGxheTogZmxleDsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IDhweCAwOwogICAgYm9yZGVy LWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7CiAgICBmb250LXNpemU6IDEzcHg7Cn0KCi5yZXZp ZXctaGlzdG9yeS1pdGVtIC5hY3Rpb24tYmFkZ2UgewogICAgcGFkZGluZzogMnB4IDhweDsKICAg IGJvcmRlci1yYWRpdXM6IDNweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0 OiA2MDA7CiAgICBmbGV4LXNocmluazogMDsKfQoKLnJldmlldy1oaXN0b3J5LWl0ZW0gLmFjdGlv bi1iYWRnZS5hcHByb3ZlZCB7IGJhY2tncm91bmQ6ICNENEVEREE7IGNvbG9yOiAjMTU1NzI0OyB9 Ci5yZXZpZXctaGlzdG9yeS1pdGVtIC5hY3Rpb24tYmFkZ2UucmVqZWN0ZWQgeyBiYWNrZ3JvdW5k OiAjRjhEN0RBOyBjb2xvcjogIzcyMUMyNDsgfQoucmV2aWV3LWhpc3RvcnktaXRlbSAuYWN0aW9u LWJhZGdlLnN1Ym1pdHRlZCB7IGJhY2tncm91bmQ6ICNGRkU1QjQ7IGNvbG9yOiAjN0E0NDE5OyB9 CgovKiAtLS0gQ29uZmxpY3QgV2FybmluZyAtLS0gKi8KLmNvbmZsaWN0LXdhcm5pbmcgewogICAg YmFja2dyb3VuZC1jb2xvcjogI2ZmZjNjZDsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNmZmMxMDc7 CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CiAgICBtYXJn aW4tYm90dG9tOiAxMHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgY29sb3I6ICM4NTY0MDQ7 CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4 Owp9CgovKiAtLS0gU2NobGFnd8O2cnRlciAvIEtleXdvcmRzIC0tLSAqLwoua2V5d29yZC10YWcg eyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDJweCA4cHg7IGJvcmRlci1yYWRpdXM6 IDEwcHg7IGZvbnQtc2l6ZTogMTFweDsgYmFja2dyb3VuZDogdmFyKC0tYmctYWN0aXZlKTsgY29s b3I6IHZhcigtLXRleHQtaGVhZGluZyk7IG1hcmdpbjogMXB4OyB9Ci5rZXl3b3JkLWlucHV0LXdy YXAgeyBwb3NpdGlvbjogcmVsYXRpdmU7IGZsZXg6IDE7IG1pbi13aWR0aDogMjAwcHg7IH0KLmtl eXdvcmQtaW5wdXQtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3Jh cDsgZ2FwOiA0cHg7IHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIo LS1ib3JkZXItc3Ryb25nKTsgYm9yZGVyLXJhZGl1czogNHB4OwogICAgbWluLWhlaWdodDogMzJw eDsgYmFja2dyb3VuZDogdmFyKC0tYmctaW5wdXQpOyBhbGlnbi1pdGVtczogY2VudGVyOyBjdXJz b3I6IHRleHQ7Cn0KLmtleXdvcmQtaW5wdXQtY29udGFpbmVyIGlucHV0IHsgYm9yZGVyOiBub25l OyBvdXRsaW5lOiBub25lOyBmb250LXNpemU6IDEzcHg7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50 OyBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsgbWluLXdpZHRoOiA4MHB4OyBmbGV4OiAxOyBw YWRkaW5nOiAycHggMDsgfQoua2V5d29yZC1waWxsIHsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFs aWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNHB4OyBwYWRkaW5nOiAycHggOHB4OyBiYWNrZ3JvdW5k OiB2YXIoLS10ZXh0LWhlYWRpbmcpOyBjb2xvcjogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDEwcHg7 IGZvbnQtc2l6ZTogMTJweDsgfQoua2V5d29yZC1waWxsIC5rdy1yZW1vdmUgeyBjdXJzb3I6IHBv aW50ZXI7IGZvbnQtd2VpZ2h0OiBib2xkOyBvcGFjaXR5OiAwLjc7IH0KLmtleXdvcmQtcGlsbCAu a3ctcmVtb3ZlOmhvdmVyIHsgb3BhY2l0eTogMTsgfQoua2V5d29yZC1hdXRvY29tcGxldGUgewog ICAgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDEwMCU7IGxlZnQ6IDA7IHJpZ2h0OiAwOyBiYWNr Z3JvdW5kOiB2YXIoLS1iZy1jYXJkKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRl ci1jb2xvcik7IGJvcmRlci1yYWRpdXM6IDRweDsgbWF4LWhlaWdodDogMTUwcHg7CiAgICBvdmVy Zmxvdy15OiBhdXRvOyB6LWluZGV4OiAxMDsgYm94LXNoYWRvdzogMCA0cHggMTJweCB2YXIoLS1z aGFkb3ctbGlnaHQpOyBkaXNwbGF5OiBub25lOwp9Ci5rZXl3b3JkLWF1dG9jb21wbGV0ZS5hY3Rp dmUgeyBkaXNwbGF5OiBibG9jazsgfQoua2V5d29yZC1hdXRvY29tcGxldGUtaXRlbSB7IHBhZGRp bmc6IDZweCAxMnB4OyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtc2l6ZTogMTNweDsgY29sb3I6IHZh cigtLXRleHQtcHJpbWFyeSk7IH0KLmtleXdvcmQtYXV0b2NvbXBsZXRlLWl0ZW06aG92ZXIgeyBi YWNrZ3JvdW5kOiB2YXIoLS1iZy1ob3Zlcik7IH0KLmtleXdvcmQtc3VnZ2VzdGlvbiB7CiAgICBk aXNwbGF5OmlubGluZS1ibG9jazsgcGFkZGluZzozcHggMTBweDsgYm9yZGVyLXJhZGl1czoxMnB4 OyBmb250LXNpemU6MTFweDsKICAgIGJhY2tncm91bmQ6dmFyKC0tYmctY2FyZC1hbHQpOyBjb2xv cjp2YXIoLS10ZXh0LXNlY29uZGFyeSk7IGJvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLWxp Z2h0KTsKICAgIGN1cnNvcjpwb2ludGVyOyB0cmFuc2l0aW9uOmFsbCAwLjE1czsgdXNlci1zZWxl Y3Q6bm9uZTsKfQoua2V5d29yZC1zdWdnZXN0aW9uOmhvdmVyIHsgYmFja2dyb3VuZDp2YXIoLS1i Zy1hY3RpdmUpOyBjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpOyBib3JkZXItY29sb3I6dmFyKC0t dGV4dC1oZWFkaW5nKTsgfQoKLyogLS0tIFNjaGxhZ3dvcnQtVmVyd2FsdHVuZyAoR292ZXJuYW5j ZSkgLS0tICovCi5nb3Yta3ctbGlzdCB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsg Z2FwOiA2cHg7IG1hcmdpbi10b3A6IDhweDsgbWF4LWhlaWdodDogMjAwcHg7IG92ZXJmbG93LXk6 IGF1dG87IH0KLmdvdi1rdy1waWxsIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1p dGVtczogY2VudGVyOyBnYXA6IDRweDsKICAgIHBhZGRpbmc6IDRweCAxMHB4OyBib3JkZXItcmFk aXVzOiAxMnB4OyBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1hY3Rp dmUpOyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0t Ym9yZGVyLWxpZ2h0KTsKICAgIGN1cnNvcjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYWxsIDAuMTVz Owp9Ci5nb3Yta3ctcGlsbDpob3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5n KTsgYmFja2dyb3VuZDogdmFyKC0tYmctaG92ZXIpOyB9Ci5nb3Yta3ctcGlsbCAua3ctY291bnQg eyBmb250LXNpemU6IDEwcHg7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgbWFyZ2luLWxlZnQ6 IDJweDsgfQoKLmt3LW1hbmFnZS1tb2RhbCB7CiAgICBkaXNwbGF5OiBub25lOyBwb3NpdGlvbjog Zml4ZWQ7IHRvcDogMDsgbGVmdDogMDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsKICAgIGJh Y2tncm91bmQ6IHJnYmEoMCwwLDAsMC41KTsgei1pbmRleDogMTA1MDA7IGp1c3RpZnktY29udGVu dDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOwp9Ci5rdy1tYW5hZ2UtbW9kYWwub3BlbiB7 IGRpc3BsYXk6IGZsZXg7IH0KLmt3LW1hbmFnZS1jb250ZW50IHsKICAgIGJhY2tncm91bmQ6IHZh cigtLWJnLWNhcmQpOyBib3JkZXItcmFkaXVzOiA4cHg7IHdpZHRoOiA1MjBweDsgbWF4LXdpZHRo OiA5NSU7CiAgICBtYXgtaGVpZ2h0OiA4MHZoOyBvdmVyZmxvdzogaGlkZGVuOyBkaXNwbGF5OiBm bGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYm94LXNoYWRvdzogMCA4cHggMzJweCBy Z2JhKDAsMCwwLDAuMyk7Cn0KLmt3LW1hbmFnZS1oZWFkZXIgewogICAgcGFkZGluZzogMTRweCAy MHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1wcmltYXJ5KTsgY29sb3I6IHdoaXRlOwogICAgZm9u dC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAxNXB4OyBib3JkZXItcmFkaXVzOiA4cHggOHB4IDAg MDsKICAgIGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgYWxp Z24taXRlbXM6IGNlbnRlcjsKfQoua3ctbWFuYWdlLWJvZHkgeyBwYWRkaW5nOiAxNnB4IDIwcHg7 IG92ZXJmbG93LXk6IGF1dG87IGZsZXg6IDE7IH0KLmt3LW1hbmFnZS1mb290ZXIgewogICAgcGFk ZGluZzogMTJweCAyMHB4OyBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0 KTsKICAgIGRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5k Owp9Ci5rdy1tYW5hZ2UtZm9vdGVyIGJ1dHRvbiB7CiAgICBwYWRkaW5nOiA2cHggMTZweDsgYm9y ZGVyLXJhZGl1czogNHB4OyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQt c2l6ZTogMTNweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7IGJh Y2tncm91bmQ6IHZhcigtLWJnLWNhcmQpOyBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsKfQou a3ctbWFuYWdlLWZvb3RlciBidXR0b246aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJk LWFsdCk7IH0KLmt3LW1hbmFnZS1mb290ZXIgYnV0dG9uLmRhbmdlciB7IGJhY2tncm91bmQ6ICNk YzM1NDU7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyOiBub25lOyB9Ci5rdy1tYW5hZ2UtZm9vdGVyIGJ1 dHRvbi5kYW5nZXI6aG92ZXIgeyBiYWNrZ3JvdW5kOiAjYzgyMzMzOyB9Ci5rdy1tYW5hZ2UtZm9v dGVyIGJ1dHRvbi5wcmltYXJ5IHsgYmFja2dyb3VuZDogdmFyKC0tdGV4dC1oZWFkaW5nKTsgY29s b3I6IHdoaXRlOyBib3JkZXI6IG5vbmU7IH0KLmt3LW1hbmFnZS1mb290ZXIgYnV0dG9uLnByaW1h cnk6aG92ZXIgeyBvcGFjaXR5OiAwLjg1OyB9Ci5rdy1kb2MtbGlzdCB7IG1hcmdpbjogMTBweCAw OyB9Ci5rdy1kb2MtaXRlbSB7CiAgICBwYWRkaW5nOiA4cHggMTBweDsgYm9yZGVyOiAxcHggc29s aWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgYm9yZGVyLXJhZGl1czogNHB4OwogICAgbWFyZ2luLWJv dHRvbTogNHB4OyBmb250LXNpemU6IDEzcHg7IGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVu dDogc3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoua3ctZG9jLWl0ZW0gLmt3 LWRvYy10aXRsZSB7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcp OyB9Ci5rdy1kb2MtaXRlbSAua3ctZG9jLWthdCB7IGZvbnQtc2l6ZTogMTFweDsgY29sb3I6IHZh cigtLXRleHQtbXV0ZWQpOyB9CgovKiAtLS0gQXJ0aWtlbC1SZWZlcmVueiAoIy1BdXRvY29tcGxl dGUgaW0gRWRpdG9yKSAtLS0gKi8KLnhyZWYtZHJvcGRvd24gewogICAgZGlzcGxheTogbm9uZTsg cG9zaXRpb246IGZpeGVkOyB6LWluZGV4OiAxMDEwMDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJn LWNhcmQpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOyBib3JkZXItcmFk aXVzOiA4cHg7CiAgICBib3gtc2hhZG93OiAwIDhweCAyOHB4IHZhcigtLXNoYWRvdy1tZWRpdW0p OyB3aWR0aDogMzgwcHg7IG1heC1oZWlnaHQ6IDM2MHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsg ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKfQoueHJlZi1kcm9wZG93bi52aXNpYmxlIHsgZGlzcGxh eTogZmxleDsgfQoueHJlZi1zZWFyY2ggewogICAgcGFkZGluZzogOHB4IDEycHg7IGJvcmRlci1i b3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOwp9Ci54cmVmLXNlYXJjaCBpbnB1 dCB7CiAgICB3aWR0aDogMTAwJTsgcGFkZGluZzogNnB4IDEwcHg7IGJvcmRlcjogMXB4IHNvbGlk IHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7IGZvbnQtc2l6ZTog MTNweDsgYmFja2dyb3VuZDogdmFyKC0tYmctaW5wdXQpOyBjb2xvcjogdmFyKC0tdGV4dC1wcmlt YXJ5KTsKICAgIG91dGxpbmU6IG5vbmU7Cn0KLnhyZWYtc2VhcmNoIGlucHV0OmZvY3VzIHsgYm9y ZGVyLWNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOyB9Ci54cmVmLWxpc3QgeyBmbGV4OiAxOyBv dmVyZmxvdy15OiBhdXRvOyBtYXgtaGVpZ2h0OiAzMDBweDsgfQoueHJlZi1pdGVtIHsKICAgIHBh ZGRpbmc6IDhweCAxMnB4OyBjdXJzb3I6IHBvaW50ZXI7IGJvcmRlci1ib3R0b206IDFweCBzb2xp ZCB2YXIoLS1ib3JkZXItbGlnaHQpOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwp9 Ci54cmVmLWl0ZW06aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1ob3Zlcik7IH0KLnhyZWYt aXRlbTpsYXN0LWNoaWxkIHsgYm9yZGVyLWJvdHRvbTogbm9uZTsgfQoueHJlZi1pdGVtIC54cmVm LXRpdGxlIHsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogdmFyKC0t dGV4dC1oZWFkaW5nKTsgfQoueHJlZi1pdGVtIC54cmVmLWNhdCB7IGZvbnQtc2l6ZTogMTFweDsg Y29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyB9Ci54cmVmLWl0ZW0uaGVhZGluZyB7IHBhZGRpbmct bGVmdDogMjhweDsgfQoueHJlZi1pdGVtLmhlYWRpbmcgLnhyZWYtdGl0bGUgeyBmb250LXdlaWdo dDogNTAwOyBmb250LXNpemU6IDEycHg7IGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7IH0K LnhyZWYtaXRlbS5oZWFkaW5nIC54cmVmLXRpdGxlOjpiZWZvcmUgeyBjb250ZW50OiAnwqcgJzsg Y29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyB9Ci54cmVmLWJhY2sgewogICAgcGFkZGluZzogNnB4 IDEycHg7IGZvbnQtc2l6ZTogMTFweDsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7IGN1cnNv cjogcG9pbnRlcjsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGln aHQpOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDRweDsKfQoueHJl Zi1iYWNrOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYmctaG92ZXIpOyB9CgovKiBDcm9zc2xp bmstUmVmZXJlbnogaW0gVGV4dCAobWFudWVsbCBlaW5nZWbDvGd0IHZpYSAjKSAqLwouZHJpdmUt eHJlZiB7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsgZm9udC13ZWlnaHQ6IDUwMDsg Y3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyLWJvdHRvbTogMS41cHggc29saWQgdmFyKC0tdGV4 dC1oZWFkaW5nKTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgdHJhbnNpdGlvbjogYmFja2dy b3VuZCAwLjE1czsKfQouZHJpdmUteHJlZjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWJnLWFj dGl2ZSk7IH0KCi8qIC0tLSBVbnRlcmFydGlrZWwgLS0tICovCi5kb2N1bWVudC1pdGVtLmNoaWxk LWFydGljbGUgeyBwYWRkaW5nLWxlZnQ6IDM2cHg7IGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFy KC0tYm9yZGVyLWxpZ2h0KTsgfQouZG9jLXBhcmVudC1yZWYgeyBmb250LXNpemU6IDEwcHg7IGNv bG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgZm9udC1zdHlsZTogaXRhbGljOyB9CgovKiAtLS0gVGFi ZWxsZW5hbnNpY2h0IC0tLSAqLwoudGFibGUtdmlldy1jb250YWluZXIgeyBmbGV4OiAxOyBvdmVy ZmxvdzogYXV0bzsgZGlzcGxheTogbm9uZTsgfQoudGFibGUtdmlldy1jb250YWluZXIuYWN0aXZl IHsgZGlzcGxheTogYmxvY2s7IH0KLmRyaXZlLXRhYmxlIHsgd2lkdGg6IDEwMCU7IGJvcmRlci1j b2xsYXBzZTogY29sbGFwc2U7IGZvbnQtc2l6ZTogMTNweDsgfQouZHJpdmUtdGFibGUgdGggewog ICAgY3Vyc29yOiBwb2ludGVyOyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkLWFsdCk7IGNvbG9y OiB2YXIoLS10ZXh0LWhlYWRpbmcpOwogICAgcGFkZGluZzogMTBweCAxMnB4OyB0ZXh0LWFsaWdu OiBsZWZ0OyBmb250LXdlaWdodDogNjAwOyBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0t dGV4dC1oZWFkaW5nKTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7IHVzZXItc2VsZWN0OiBub25l OyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7Cn0KLmRyaXZlLXRhYmxlIHRoOmhvdmVyIHsg YmFja2dyb3VuZDogdmFyKC0tYmctYWN0aXZlKTsgfQouZHJpdmUtdGFibGUgdGguc29ydGVkLWFz Yzo6YWZ0ZXIgeyBjb250ZW50OiAiIFwyNUIyIjsgZm9udC1zaXplOiAxMHB4OyB9Ci5kcml2ZS10 YWJsZSB0aC5zb3J0ZWQtZGVzYzo6YWZ0ZXIgeyBjb250ZW50OiAiIFwyNUJDIjsgZm9udC1zaXpl OiAxMHB4OyB9Ci5kcml2ZS10YWJsZSB0ZCB7IHBhZGRpbmc6IDhweCAxMnB4OyBib3JkZXItYm90 dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgY29sb3I6IHZhcigtLXRleHQtcHJp bWFyeSk7IH0KLmRyaXZlLXRhYmxlIHRyIHsgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1czsg Y3Vyc29yOiBwb2ludGVyOyB9Ci5kcml2ZS10YWJsZSB0cjpob3ZlciB7IGJhY2tncm91bmQ6IHZh cigtLWJnLWhvdmVyKTsgfQouZHJpdmUtdGFibGUgdGQgLmtleXdvcmQtdGFnIHsgZm9udC1zaXpl OiAxMHB4OyBwYWRkaW5nOiAxcHggNnB4OyB9CgovKiAtLS0gS2F0ZWdvcmllLVZlcndhbHR1bmcg LS0tICovCi5nb3YtY2F0LWl0ZW0gewogICAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNl bnRlcjsgZ2FwOiA4cHg7IHBhZGRpbmc6IDZweCAxMnB4OwogICAgYm9yZGVyOiAxcHggc29saWQg dmFyKC0tYm9yZGVyLWxpZ2h0KTsgYm9yZGVyLXJhZGl1czogNnB4OyBtYXJnaW4tYm90dG9tOiA0 cHg7IGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQpOwp9Ci5nb3YtY2F0LWl0ZW0gLmdvdi1jYXQt bmFtZSB7IGZsZXg6IDE7IGZvbnQtd2VpZ2h0OiA1MDA7IGZvbnQtc2l6ZTogMTNweDsgY29sb3I6 IHZhcigtLXRleHQtcHJpbWFyeSk7IH0KLmdvdi1jYXQtbGlzdCB7IG1heC1oZWlnaHQ6IDI0MHB4 OyBvdmVyZmxvdy15OiBhdXRvOyBwYWRkaW5nLXJpZ2h0OiA0cHg7IH0KLmdvdi1jYXQtYWRkLXJv dyB7IGRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBtYXJnaW4tdG9wOiA4cHg7IH0KLmdvdi1jYXQt YWRkLXJvdyBpbnB1dCB7IGZsZXg6IDE7IHBhZGRpbmc6IDZweCAxMHB4OyBib3JkZXI6IDFweCBz b2xpZCB2YXIoLS1ib3JkZXItc3Ryb25nKTsgYm9yZGVyLXJhZGl1czogNXB4OyBmb250LXNpemU6 IDEzcHg7IGJhY2tncm91bmQ6IHZhcigtLWJnLWlucHV0KTsgY29sb3I6IHZhcigtLXRleHQtcHJp bWFyeSk7IH0KLmdvdi10d28tY29sIHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1 bW5zOiAxZnIgMWZyOyBnYXA6IDE0cHg7IH0KLmdvdi10d28tY29sLmNhdC1zZXR0aW5ncyB7IGdy aWQtdGVtcGxhdGUtY29sdW1uczogM2ZyIDJmcjsgfQouZ292LWhlbHAtZWRpdG9yIHsgd2lkdGg6 MTAwJTsgbWluLWhlaWdodDoyMDBweDsgcGFkZGluZzoxMnB4OyBib3JkZXI6MXB4IHNvbGlkIHZh cigtLWJvcmRlci1jb2xvcik7IGJvcmRlci1yYWRpdXM6NHB4OyBmb250LXNpemU6MTNweDsgbGlu ZS1oZWlnaHQ6MS42OyBiYWNrZ3JvdW5kOnZhcigtLWJnLWlucHV0KTsgY29sb3I6dmFyKC0tdGV4 dC1wcmltYXJ5KTsgb3ZlcmZsb3cteTphdXRvOyB9Ci5nb3YtaGVscC1lZGl0b3I6Zm9jdXMgeyBi b3JkZXItY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTsgb3V0bGluZTpub25lOyB9Ci5nb3YtYWN0 aW9uLWJhciB7IGRpc3BsYXk6ZmxleDsgZ2FwOjEwcHg7IG1hcmdpbi10b3A6OHB4OyBmbGV4LXdy YXA6d3JhcDsgfQouZ292LXVzZXItcm93IC5nb3Ytcm9sZS1pY29uLmZhIHsgYmFja2dyb3VuZDog I2ZjZTRlYzsgY29sb3I6ICNjNjI4Mjg7IH0KCi8qIC0tLSBMw7ZzY2gtQmVzdMOkdGlndW5nIE1v ZGFsIC0tLSAqLwouZGVsZXRlLWNvbmZpcm0tbW9kYWwgeyBkaXNwbGF5Om5vbmU7IHBvc2l0aW9u OmZpeGVkOyB0b3A6MDsgbGVmdDowOyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTsgYmFja2dyb3Vu ZDpyZ2JhKDAsMCwwLDAuNSk7IHotaW5kZXg6MzAwMDsgfQouZGVsZXRlLWNvbmZpcm0tbW9kYWwu YWN0aXZlIHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVu dDpjZW50ZXI7IH0KLmRlbGV0ZS1jb25maXJtLWNvbnRlbnQgeyBiYWNrZ3JvdW5kOnZhcigtLWJn LWNhcmQpOyBib3JkZXItcmFkaXVzOjhweDsgd2lkdGg6NDQwcHg7IG1heC13aWR0aDo5NSU7IGJv eC1zaGFkb3c6MCAxMHB4IDQwcHggcmdiYSgwLDAsMCwwLjMpOyB9Ci5kZWxldGUtY29uZmlybS1o ZWFkZXIgeyBiYWNrZ3JvdW5kOiNkYzM1NDU7IGNvbG9yOndoaXRlOyBwYWRkaW5nOjE1cHggMjBw eDsgYm9yZGVyLXJhZGl1czo4cHggOHB4IDAgMDsgZm9udC13ZWlnaHQ6NjAwOyBmb250LXNpemU6 MTZweDsgfQouZGVsZXRlLWNvbmZpcm0tYm9keSB7IHBhZGRpbmc6MjBweDsgfQouZGVsZXRlLWNv bmZpcm0tYm9keSBpbnB1dCB7IHdpZHRoOjEwMCU7IHBhZGRpbmc6OHB4IDEwcHg7IGJvcmRlcjox cHggc29saWQgdmFyKC0tYm9yZGVyLXN0cm9uZyk7IGJvcmRlci1yYWRpdXM6NHB4OyBmb250LXNp emU6MTRweDsgbWFyZ2luLXRvcDo4cHg7IGJhY2tncm91bmQ6dmFyKC0tYmctaW5wdXQpOyBjb2xv cjp2YXIoLS10ZXh0LXByaW1hcnkpOyB9Ci5kZWxldGUtY29uZmlybS1mb290ZXIgeyBwYWRkaW5n OjE1cHggMjBweDsgYm9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsgZGlz cGxheTpmbGV4OyBnYXA6MTBweDsganVzdGlmeS1jb250ZW50OmZsZXgtZW5kOyB9Ci5kZWxldGUt Y29uZmlybS1mb290ZXIgYnV0dG9uIHsgcGFkZGluZzo4cHggMjBweDsgYm9yZGVyLXJhZGl1czo0 cHg7IGN1cnNvcjpwb2ludGVyOyBmb250LXdlaWdodDo2MDA7IGJvcmRlcjoxcHggc29saWQgI2Rk ZDsgYmFja2dyb3VuZDp3aGl0ZTsgfQouZGVsZXRlLWNvbmZpcm0tZm9vdGVyIC5idG4tZGVsZXRl IHsgYmFja2dyb3VuZDojZGMzNTQ1OyBjb2xvcjp3aGl0ZTsgYm9yZGVyOm5vbmU7IH0KLmRlbGV0 ZS1jb25maXJtLWZvb3RlciAuYnRuLWRlbGV0ZTpkaXNhYmxlZCB7IG9wYWNpdHk6MC41OyBjdXJz b3I6bm90LWFsbG93ZWQ7IH0KCi8qIC0tLSBQYXBpZXJrb3JiIC8gR2Vsw7ZzY2h0ZSBBcnRpa2Vs IC0tLSAqLwoudHJhc2gtYmFkZ2UgeyBmb250LXNpemU6MTFweDsgcGFkZGluZzoycHggOHB4OyBi YWNrZ3JvdW5kOiNGOEQ3REE7IGNvbG9yOiM3MjFDMjQ7IGJvcmRlci1yYWRpdXM6M3B4OyBjdXJz b3I6cG9pbnRlcjsgfQoudHJhc2gtaXRlbSB7IHBhZGRpbmc6MTBweCAxMnB4OyBib3JkZXI6MXB4 IHNvbGlkICNmNWM2Y2I7IGJvcmRlci1yYWRpdXM6NnB4OyBtYXJnaW4tYm90dG9tOjhweDsgYmFj a2dyb3VuZDojZmZmNWY1OyB9Ci50cmFzaC1pdGVtLXRpdGxlIHsgZm9udC13ZWlnaHQ6NjAwOyBm b250LXNpemU6MTNweDsgY29sb3I6IzcyMUMyNDsgfQoudHJhc2gtaXRlbS1tZXRhIHsgZm9udC1z aXplOjExcHg7IGNvbG9yOnZhcigtLXRleHQtbXV0ZWQpOyBtYXJnaW4tdG9wOjNweDsgfQoudHJh c2gtaXRlbS1hY3Rpb25zIHsgZGlzcGxheTpmbGV4OyBnYXA6NnB4OyBtYXJnaW4tdG9wOjZweDsg fQoudHJhc2gtaXRlbS1hY3Rpb25zIGJ1dHRvbiB7IHBhZGRpbmc6NHB4IDEwcHg7IGJvcmRlcjox cHggc29saWQgI2RkZDsgYmFja2dyb3VuZDp3aGl0ZTsgYm9yZGVyLXJhZGl1czo0cHg7IGZvbnQt c2l6ZToxMnB4OyBjdXJzb3I6cG9pbnRlcjsgfQoudHJhc2gtaXRlbS1hY3Rpb25zIC5idG4tcmVz dG9yZSB7IGJvcmRlci1jb2xvcjojMjhhNzQ1OyBjb2xvcjojMjhhNzQ1OyB9Ci50cmFzaC1pdGVt LWFjdGlvbnMgLmJ0bi1yZXN0b3JlOmhvdmVyIHsgYmFja2dyb3VuZDojMjhhNzQ1OyBjb2xvcjp3 aGl0ZTsgfQoKLyogLS0tIEVuZ2FnZW1lbnQtU3RhdGlzdGlrIC0tLSAqLwouc3RhdC1ncmlkIHsg ZGlzcGxheTpncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5t YXgoMTgwcHgsMWZyKSk7IGdhcDoxMnB4OyBtYXJnaW4tYm90dG9tOjE2cHg7IH0KLnN0YXQtY2Fy ZCB7IGJhY2tncm91bmQ6dmFyKC0tYmctY2FyZC1hbHQpOyBib3JkZXItcmFkaXVzOjhweDsgcGFk ZGluZzoxNnB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgfQouc3RhdC1jYXJkIC5zdGF0LXZhbHVlIHsg Zm9udC1zaXplOjI4cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5n KTsgfQouc3RhdC1jYXJkIC5zdGF0LWxhYmVsIHsgZm9udC1zaXplOjEycHg7IGNvbG9yOnZhcigt LXRleHQtbXV0ZWQpOyBtYXJnaW4tdG9wOjRweDsgfQouc3RhdC1iYXItcm93IHsgZGlzcGxheTpm bGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxMHB4OyBwYWRkaW5nOjZweCAwOyBmb250LXNp emU6MTNweDsgfQouc3RhdC1iYXItcm93IC5zdGF0LWJhci1sYWJlbCB7IG1pbi13aWR0aDoxMDBw eDsgZm9udC13ZWlnaHQ6NTAwOyBjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpOyB9Ci5zdGF0LWJh ci1yb3cgLnN0YXQtYmFyIHsgZmxleDoxOyBoZWlnaHQ6MjBweDsgYmFja2dyb3VuZDp2YXIoLS1i b3JkZXItbGlnaHQpOyBib3JkZXItcmFkaXVzOjRweDsgb3ZlcmZsb3c6aGlkZGVuOyB9Ci5zdGF0 LWJhci1yb3cgLnN0YXQtYmFyLWZpbGwgeyBoZWlnaHQ6MTAwJTsgYm9yZGVyLXJhZGl1czo0cHg7 IHRyYW5zaXRpb246d2lkdGggMC4zczsgfQouc3RhdC1iYXItcm93IC5zdGF0LWJhci12YWwgeyBt aW4td2lkdGg6NDBweDsgdGV4dC1hbGlnbjpyaWdodDsgZm9udC1zaXplOjEycHg7IGNvbG9yOnZh cigtLXRleHQtbXV0ZWQpOyB9CgovKiAtLS0gSGlsZmUtTW9kYWwgLS0tICovCi5oZWxwLW1vZGFs IHsgZGlzcGxheTpub25lOyBwb3NpdGlvbjpmaXhlZDsgdG9wOjA7IGxlZnQ6MDsgd2lkdGg6MTAw JTsgaGVpZ2h0OjEwMCU7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpOyB6LWluZGV4OjIwMDA7 IH0KLmhlbHAtbW9kYWwuYWN0aXZlIHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7 IGp1c3RpZnktY29udGVudDpjZW50ZXI7IH0KLmhlbHAtbW9kYWwtY29udGVudCB7CiAgICBiYWNr Z3JvdW5kOnZhcigtLWJnLWNhcmQpOyBib3JkZXItcmFkaXVzOjEwcHg7IHdpZHRoOjk2MHB4OyBt YXgtd2lkdGg6OTUlOyBoZWlnaHQ6ODV2aDsKICAgIGRpc3BsYXk6ZmxleDsgb3ZlcmZsb3c6aGlk ZGVuOyBib3gtc2hhZG93OjAgMTJweCA0OHB4IHJnYmEoMCwwLDAsMC4zKTsKfQouaGVscC10b2Mg ewogICAgd2lkdGg6MjQwcHg7IG1pbi13aWR0aDoyMDBweDsgYmFja2dyb3VuZDp2YXIoLS1iZy1w cmltYXJ5KTsgY29sb3I6d2hpdGU7CiAgICBvdmVyZmxvdy15OmF1dG87IHBhZGRpbmc6MjBweCAw OyBmbGV4LXNocmluazowOwp9Ci5oZWxwLXRvYy10aXRsZSB7IHBhZGRpbmc6MCAyMHB4IDE1cHg7 IGZvbnQtc2l6ZToxNnB4OyBmb250LXdlaWdodDo3MDA7IGJvcmRlci1ib3R0b206MXB4IHNvbGlk IHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7IG1hcmdpbi1ib3R0b206MTBweDsgfQouaGVscC10b2Mg YSB7CiAgICBkaXNwbGF5OmJsb2NrOyBwYWRkaW5nOjdweCAyMHB4OyBmb250LXNpemU6MTNweDsg Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwwLjcpOwogICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IGJv cmRlci1sZWZ0OjNweCBzb2xpZCB0cmFuc3BhcmVudDsgdHJhbnNpdGlvbjphbGwgMC4xNXM7IGN1 cnNvcjpwb2ludGVyOwp9Ci5oZWxwLXRvYyBhOmhvdmVyIHsgY29sb3I6d2hpdGU7IGJhY2tncm91 bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsgfQouaGVscC10b2MgYS5hY3RpdmUgeyBjb2xvcjp3 aGl0ZTsgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuMTIpOyBib3JkZXItbGVmdC1jb2xv cjojMmQ5ZDc4OyBmb250LXdlaWdodDo2MDA7IH0KLmhlbHAtdG9jIGEuc3ViIHsgcGFkZGluZy1s ZWZ0OjM0cHg7IGZvbnQtc2l6ZToxMnB4OyB9Ci5oZWxwLWJvZHkgewogICAgZmxleDoxOyBvdmVy Zmxvdy15OmF1dG87IHBhZGRpbmc6MzBweCAzNXB4OyBjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkp OyBzY3JvbGwtYmVoYXZpb3I6c21vb3RoOwp9Ci5oZWxwLWJvZHkgaDIgeyBjb2xvcjp2YXIoLS10 ZXh0LWhlYWRpbmcpOyBmb250LXNpemU6MjBweDsgbWFyZ2luOjMwcHggMCAxMnB4OyBwYWRkaW5n LWJvdHRvbTo4cHg7IGJvcmRlci1ib3R0b206MnB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7 IH0KLmhlbHAtYm9keSBoMjpmaXJzdC1jaGlsZCB7IG1hcmdpbi10b3A6MDsgfQouaGVscC1ib2R5 IGgzIHsgY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTsgZm9udC1zaXplOjE1cHg7IG1hcmdpbjoy MHB4IDAgOHB4OyB9Ci5oZWxwLWJvZHkgcCB7IGZvbnQtc2l6ZToxNHB4OyBsaW5lLWhlaWdodDox Ljc7IG1hcmdpbi1ib3R0b206MTBweDsgY29sb3I6dmFyKC0tdGV4dC1zZWNvbmRhcnkpOyB9Ci5o ZWxwLWJvZHkgdWwgeyBtYXJnaW46MCAwIDEycHggMjBweDsgY29sb3I6dmFyKC0tdGV4dC1zZWNv bmRhcnkpOyB9Ci5oZWxwLWJvZHkgbGkgeyBmb250LXNpemU6MTRweDsgbGluZS1oZWlnaHQ6MS42 OyBtYXJnaW4tYm90dG9tOjRweDsgfQouaGVscC1ib2R5IGtiZCB7CiAgICBkaXNwbGF5OmlubGlu ZS1ibG9jazsgcGFkZGluZzoxcHggNnB4OyBiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQtYWx0KTsg Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czoz cHg7IGZvbnQtc2l6ZToxMnB4OyBmb250LWZhbWlseTptb25vc3BhY2U7IGNvbG9yOnZhcigtLXRl eHQtcHJpbWFyeSk7Cn0KLmhlbHAtYm9keSAuaGVscC1iYWRnZSB7CiAgICBkaXNwbGF5OmlubGlu ZS1ibG9jazsgcGFkZGluZzoycHggOHB4OyBib3JkZXItcmFkaXVzOjNweDsgZm9udC1zaXplOjEx cHg7IGZvbnQtd2VpZ2h0OjYwMDsgbWFyZ2luLXJpZ2h0OjRweDsKfQouaGVscC1ib2R5IC5oZWxw LWJhZGdlLnN1IHsgYmFja2dyb3VuZDojZThmMGZlOyBjb2xvcjojMWE1NmRiOyB9Ci5oZWxwLWJv ZHkgLmhlbHAtYmFkZ2UucmV2IHsgYmFja2dyb3VuZDojZmVmM2UyOyBjb2xvcjojYjQ1MzA5OyB9 Ci5oZWxwLWJvZHkgLmhlbHAtYmFkZ2UuYWxsIHsgYmFja2dyb3VuZDojRDRFRERBOyBjb2xvcjoj MTU1NzI0OyB9Ci5oZWxwLWVkaXQtYnRuIHsKICAgIGRpc3BsYXk6bm9uZTsgbWFyZ2luOjEwcHgg MjBweDsgcGFkZGluZzo4cHggMTRweDsgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuMTIp OyBib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4zKTsKICAgIGNvbG9yOndoaXRl OyBib3JkZXItcmFkaXVzOjRweDsgY3Vyc29yOnBvaW50ZXI7IGZvbnQtc2l6ZToxMnB4OyBmb250 LXdlaWdodDo2MDA7CiAgICB0cmFuc2l0aW9uOmFsbCAwLjJzOyB0ZXh0LWFsaWduOmNlbnRlcjsg d2lkdGg6Y2FsYygxMDAlIC0gNDBweCk7Cn0KLmhlbHAtZWRpdC1idG46aG92ZXIgeyBiYWNrZ3Jv dW5kOnJnYmEoMjU1LDI1NSwyNTUsMC4yNSk7IH0KLmhlbHAtZWRpdC1iYXIgewogICAgZGlzcGxh eTpub25lOyBwYWRkaW5nOjhweCAxNnB4OyBiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQtYWx0KTsg Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIGdhcDo2cHg7 IGFsaWduLWl0ZW1zOmNlbnRlcjsgZmxleC1zaHJpbms6MDsKfQouaGVscC1lZGl0LWJhci5hY3Rp dmUgeyBkaXNwbGF5OmZsZXg7IH0KLmhlbHAtZWRpdC1iYXIgYnV0dG9uIHsKICAgIHBhZGRpbmc6 NXB4IDEwcHg7IGJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOnZhcigtLWJnLXRvb2xiYXIpOyBjb2xv cjp2YXIoLS10ZXh0LXByaW1hcnkpOwogICAgY3Vyc29yOnBvaW50ZXI7IGZvbnQtc2l6ZToxM3B4 OyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1zdHJvbmcpOyBtaW4taGVpZ2h0 OjI4cHg7Cn0KLmhlbHAtZWRpdC1iYXIgYnV0dG9uOmhvdmVyIHsgYmFja2dyb3VuZDp2YXIoLS1i b3JkZXItbGlnaHQpOyB9Ci5oZWxwLWVkaXQtYmFyIC5oZWxwLXNhdmUtYnRuIHsgYmFja2dyb3Vu ZDp2YXIoLS10ZXh0LWhlYWRpbmcpOyBjb2xvcjp3aGl0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1y YWRpdXM6NHB4OyBwYWRkaW5nOjVweCAxNnB4OyBtYXJnaW4tbGVmdDphdXRvOyB9Ci5oZWxwLWVk aXQtYmFyIC5oZWxwLXNhdmUtYnRuOmhvdmVyIHsgb3BhY2l0eTowLjg1OyB9Ci5oZWxwLWVkaXQt YmFyIC5oZWxwLWNhbmNlbC1idG4geyBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50OyBib3JkZXI6MXB4 IHNvbGlkIHZhcigtLWJvcmRlci1zdHJvbmcpOyBib3JkZXItcmFkaXVzOjRweDsgcGFkZGluZzo1 cHggMTJweDsgfQouaGVscC1ib2R5W2NvbnRlbnRlZGl0YWJsZT0idHJ1ZSJdIHsgYm9yZGVyOjJw eCBzb2xpZCB2YXIoLS10ZXh0LWhlYWRpbmcpOyBib3JkZXItcmFkaXVzOjRweDsgbWFyZ2luOjRw eDsgfQogICAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KCiAgICA8IS0tIEhlYWRlciAtLT4KICAg IDxoZWFkZXI+CiAgICAgICAgPGltZyBzcmM9ImNzcy9pbWFnZXMvZHJpdmVfbG9nb19uaWdodC5w bmciCiAgICAgICAgICAgICBhbHQ9IkQuUi5JLlYuRS4iCiAgICAgICAgICAgICBjbGFzcz0iZHJp dmUtbG9nbyIKICAgICAgICAgICAgIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiCiAgICAgICAgICAg ICBvbmNsaWNrPSJEcml2ZVBvcnRhbC5zaG93SG9tZSgpIgogICAgICAgICAgICAgb25lcnJvcj0i dGhpcy5zdHlsZS5kaXNwbGF5PSdub25lJyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZHJpdmUtaGVh ZGVyLWNlbnRlciI+CiAgICAgICAgICAgIDxwPkRpZ2l0YWxlcyBSZXNzb3VyY2VuLSB1bmQgSW5m b3JtYXRpb25zcG9ydGFsIFZlcmtlaHI8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGJ1dHRv biBjbGFzcz0idGhlbWUtdG9nZ2xlIiBpZD0idGhlbWVUb2dnbGUiIG9uY2xpY2s9InRvZ2dsZVRo ZW1lKCkiIHRpdGxlPSJUYWcvTmFjaHQtTW9kdXMgdW1zY2hhbHRlbiI+CiAgICAgICAgICAgIDxz cGFuIGNsYXNzPSJpY29uLWRheSI+JiM5Nzg5Ozwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xh c3M9Imljb24tbmlnaHQiPiYjOTc4ODs8L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICA8L2hl YWRlcj4KCiAgICA8IS0tIENvbm5lY3Rpb24gQmFyIChudXIgc2ljaHRiYXIgd2VubiB2ZXJidW5k ZW4pIC0tPgogICAgPGRpdiBjbGFzcz0iY29ubmVjdGlvbi1iYXIiIGlkPSJjb25uZWN0aW9uQmFy IiBzdHlsZT0iZGlzcGxheTpub25lOyI+CiAgICAgICAgPHNwYW4gY2xhc3M9InN0YXR1cy1kb3Qi IGlkPSJzdGF0dXNEb3QiPjwvc3Bhbj4KICAgICAgICA8c3BhbiBpZD0iY29ubmVjdGlvblRleHQi Pjwvc3Bhbj4KICAgICAgICA8YnV0dG9uIG9uY2xpY2s9IkRyaXZlRlMucmVjb25uZWN0KCkiIGlk PSJidG5SZWNvbm5lY3QiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij5PcmRuZXIgd2VjaHNlbG48L2J1 dHRvbj4KICAgICAgICA8YnV0dG9uIG9uY2xpY2s9IkRyaXZlRlMuYWN0aXZhdGVTZXJ2ZXIoKSIg aWQ9ImJ0bkFjdGl2YXRlU2VydmVyIiBzdHlsZT0iZGlzcGxheTpub25lOyI+U2VydmVyIHN0YXJ0 ZW4gZsO8ciBCZWFyYmVpdHVuZzwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJzcGFjZXIi Pjwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0icmV2aWV3LWJhZGdlIiBpZD0icmV2aWV3QmFk Z2UiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2Uuc2hvd1F1 ZXVlKCkiIHRpdGxlPSJBcnRpa2VsLCBkaWUgYXVmIGRlaW5lIEZyZWlnYWJlIG9kZXIgQWJsZWhu dW5nIHdhcnRlbiI+UHLDvGZ1bmdlbjogPHNwYW4gaWQ9InJldmlld0NvdW50Ij4wPC9zcGFuPjwv c3Bhbj4KICAgICAgICA8YnV0dG9uIG9uY2xpY2s9IkRyaXZlR292ZXJuYW5jZS5zaG93QWRtaW4o KSIgaWQ9ImJ0bkdvdkFkbWluIiBzdHlsZT0iZGlzcGxheTpub25lOyBwYWRkaW5nOjRweCAxMHB4 OyBiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7IGJvcmRlcjoxcHggc29saWQgcmdi YSgyNTUsMjU1LDI1NSwwLjQpOyBjb2xvcjp3aGl0ZTsgYm9yZGVyLXJhZGl1czozcHg7IGN1cnNv cjpwb2ludGVyOyBmb250LXNpemU6MTJweDsiIHRpdGxlPSJWZXJ3YWx0dW5nc2JlcmVpY2g6IFJv bGxlbiwgS2F0ZWdvcmllbiwgRWluc3RlbGx1bmdlbiB1bmQgbWVociI+R292ZXJuYW5jZTwvYnV0 dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJzeW5jLWluZm8iIGlkPSJzeW5jSW5mbyI+PC9zcGFu PgogICAgPC9kaXY+CgogICAgPCEtLSBNYWluIENvbnRlbnQgLS0+CiAgICA8bWFpbj4KICAgICAg ICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xz LXJvdy10b3AiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoLWJveCI+CiAgICAg ICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJzZWFyY2hJbnB1dCIgcGxhY2Vo b2xkZXI9IkRva3VtZW50IHN1Y2hlbi4uLiIgZGlzYWJsZWQ+CiAgICAgICAgICAgICAgICA8L2Rp dj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1cy1maWx0ZXJzIiBpZD0ic3RhdHVz RmlsdGVycyI+PC9kaXY+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJmaWx0ZXItYnRu IiBpZD0iYnRuTmV3RG9jIiBvbmNsaWNrPSJEcml2ZUVkaXRvci5jcmVhdGVOZXcoKSIgZGlzYWJs ZWQKICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICMyZDlk Nzg7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyLWNvbG9yOiAjMmQ5ZDc4OyIgdGl0bGU9IkVpbmVuIG5l dWVuIEFydGlrZWwgZXJzdGVsbGVuIj4rIE5ldTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1 dHRvbiBjbGFzcz0iZmlsdGVyLWJ0biIgaWQ9ImJ0blRhYmxlVmlldyIgb25jbGljaz0iRHJpdmVQ b3J0YWwudG9nZ2xlVGFibGVWaWV3KCkiIHRpdGxlPSJad2lzY2hlbiBMaXN0ZW5hbnNpY2h0IHVu ZCBUYWJlbGxlbmFuc2ljaHQgd2VjaHNlbG4iPiYjOTc3NjsgVGFiZWxsZTwvYnV0dG9uPgogICAg ICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMtcm93LWNhdGVn b3JpZXMiIGlkPSJjYXRlZ29yeUZpbHRlcnMiPjwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAg ICA8ZGl2IGNsYXNzPSJ0YWJsZS12aWV3LWNvbnRhaW5lciIgaWQ9InRhYmxlVmlld0NvbnRhaW5l ciI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIiBpZD0iY29udGFpbmVyIj4K ICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQtbGlzdCI+CiAgICAgICAgICAgICAgICA8 ZGl2IGNsYXNzPSJsaXN0LWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgRG9rdW1lbnRlCiAg ICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRvYy1jb3VudCIgaWQ9ImRvY0NvdW50Ij48 L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9 Imxpc3QtaXRlbXMiIGlkPSJkb2N1bWVudExpc3QiPgogICAgICAgICAgICAgICAgICAgIDxkaXYg Y2xhc3M9ImVtcHR5LXN0YXRlIj48cD5WZXJiaW5kdW5nIHdpcmQgaGVyZ2VzdGVsbHQuLi48L3A+ PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAg ICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50LWRldGFpbCIgaWQ9ImRvY3VtZW50RGV0YWlsIj4KICAg ICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndlbGNvbWUtY29udGVudCI+CiAgICAgICAgICAgICAg ICAgICAgPGgxPldpbGxrb21tZW4gYmVpIEQuUi5JLlYuRS48L2gxPgogICAgICAgICAgICAgICAg ICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxLjg7bWFyZ2luLWJvdHRv bToxNnB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgIERhcyA8c3Ryb25nPkRpZ2l0YWxlIFJl c3NvdXJjZW4tIHVuZCBJbmZvcm1hdGlvbnNwb3J0YWwgVmVya2Vocjwvc3Ryb25nPiBpc3QgdW5z ZXJlIGdlbWVpbnNhbWUgV2lzc2Vuc3BsYXR0Zm9ybS4KICAgICAgICAgICAgICAgICAgICA8L3A+ CiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0 OjEuODttYXJnaW4tYm90dG9tOjE2cHg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgSGllciBz YW1tZWxuIHdpciBGYWNod2lzc2VuLCBFcmZhaHJ1bmdlbiB1bmQgQXJiZWl0c2hpbGZlbiBhdXMg YWxsZW4gQmVyZWljaGVuLCBkaWUgdW5zIGltIEFyYmVpdHNhbGx0YWcgYmVnZWduZW4g4oCTCiAg ICAgICAgICAgICAgICAgICAgICAgIHZvbiBWZXJrZWhyc3JlY2h0IMO8YmVyIExhZHVuZ3NzaWNo ZXJ1bmcgYmlzIGhpbiB6dSB0ZWNobmlzY2hlbiBLb250cm9sbGVuIHVuZCB6dSBIaWxmZXN0ZWxs dW5nZW4gYmVpIGRlciBhYnNjaGxpZcOfZW5kZW4gQW56ZWlnZW5mZXJ0aWd1bmcuCiAgICAgICAg ICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJmb250LXNpemU6 MTZweDtsaW5lLWhlaWdodDoxLjg7bWFyZ2luLWJvdHRvbToxNnB4OyI+CiAgICAgICAgICAgICAg ICAgICAgICAgIEQuUi5JLlYuRS4gbGVidCBkYXZvbiwgZGFzcyA8c3Ryb25nPmFsbGUgbWl0bWFj aGVuPC9zdHJvbmc+Li4uIHZvbSBLQSBiaXMgenVtIFZLIQogICAgICAgICAgICAgICAgICAgIDwv cD4KICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWln aHQ6MS44O21hcmdpbi1ib3R0b206MjBweDsiPgogICAgICAgICAgICAgICAgICAgICAgICBKZWRl IEtvbGxlZ2luIHVuZCBqZWRlciBLb2xsZWdlIGlzdCBoZXJ6bGljaCBlaW5nZWxhZGVuLAogICAg ICAgICAgICAgICAgICAgICAgICBlaWdlbmVzIFdpc3NlbiBlaW56dWJyaW5nZW4sIGJlc3RlaGVu ZGUgQXJ0aWtlbCB6dSBlcmfDpG56ZW4gb2RlciBuZXVlIFRoZW1lbiBhbnp1bGVnZW4uCiAgICAg ICAgICAgICAgICAgICAgICAgIE51ciBnZW1laW5zYW0gc2NoYWZmZW4gd2lyIGVpbmUgV2lzc2Vu c2Jhc2lzLCBkaWUgYWt0dWVsbCwgZnVuZGllcnQgdW5kIGltIEVpbnNhdHogc293aWUgZGVyIEJl YXJiZWl0dW5nIHdpcmtsaWNoIGhpbGZ0LgogICAgICAgICAgICAgICAgICAgIDwvcD4KCiAgICAg ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1zZWN0aW9uIj4KICAgICAgICAgICAgICAg ICAgICAgICAgPGgyPk1pdG1hY2hlbiDigJMgc28gZWluZmFjaCBnZWh0J3M8L2gyPgogICAgICAg ICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHN0 cm9uZz5MZXNlbjo8L3N0cm9uZz4gw5ZmZm5lIGVpbmZhY2ggZGllc2UgRGF0ZWkgaW0gQnJvd3Nl ciDigJMgYWxsZSBmcmVpZ2VnZWJlbmVuIEFydGlrZWwgd2VyZGVuIGF1dG9tYXRpc2NoIGdlbGFk ZW48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+TWl0YXJiZWl0 ZW46PC9zdHJvbmc+IFN0YXJ0ZSA8Y29kZT5EUklWRV9TdGFydC5iYXQ8L2NvZGU+IHBlciBEb3Bw ZWxrbGljayDigJMgZGFtaXQga2FubnN0IGR1IEFydGlrZWwgZXJzdGVsbGVuLCBiZWFyYmVpdGVu IHVuZCBNZWRpZW4gaG9jaGxhZGVuPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxs aT48c3Ryb25nPkZyZWlnYWJlOjwvc3Ryb25nPiBOZXVlIHVuZCDDvGJlcmFyYmVpdGV0ZSBBcnRp a2VsIGR1cmNobGF1ZmVuIGVpbmVuIGt1cnplbiBQcsO8ZnByb3plc3MsIGRhbWl0IGRpZSBRdWFs aXTDpHQgc3RpbW10PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAg ICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1z ZWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPldhcnVtIEQuUi5JLlYuRS4/PC9o Mj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJbSBBcmJlaXRzYWxsdGFnIHN0b8OfZW4gd2lyIHJlZ2VsbcOkw59pZyBhdWYgRnJhZ2VuLCBk ZXJlbiBBbnR3b3J0ZW4gaXJnZW5kd28gaW4gT3JkbmVybiwgRS1NYWlscyBvZGVyIEvDtnBmZW4g dmVydGVpbHQgc2luZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQuUi5JLlYuRS4gYnJp bmd0IGRpZXNlcyBXaXNzZW4gYW4gZWluZW0gT3J0IHp1c2FtbWVuLiBTbyBwcm9maXRpZXJlbiBh bGxlIHZvbiBkZXIgaW5ow6RyZW50ZW4gRXJmYWhydW5nIGRlciBNaXRhcmJlaXRlciBkZXIgRGly ZWt0aW9uIFZlcmtlaHIgZGVzIFBQIERvcnRtdW5kIQogICAgICAgICAgICAgICAgICAgICAgICA8 L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYg Y2xhc3M9ImluZm8tc2VjdGlvbiIgaWQ9IndlbGNvbWVDb25uZWN0SGludCIgc3R5bGU9ImRpc3Bs YXk6bm9uZTsiPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5adW0gTGVzZW46IMOWZmZuZSBk aWUgaW5kZXguaHRtbCBkaXJla3Qg4oCTIGRpZSBBcnRpa2VsIHdlcmRlbiBhdXRvbWF0aXNjaCBn ZWxhZGVuLjxicj5adW0gQmVhcmJlaXRlbjogU3RhcnRlIDxzdHJvbmc+RFJJVkVfU3RhcnQuYmF0 PC9zdHJvbmc+IHBlciBEb3BwZWxrbGljay48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+ CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ CiAgICA8L21haW4+CgogICAgPCEtLSBFZGl0b3IgTW9kYWwgLS0+CiAgICA8ZGl2IGNsYXNzPSJl ZGl0b3ItbW9kYWwiIGlkPSJlZGl0b3JNb2RhbCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9y LW1vZGFsLWNvbnRlbnQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItbW9kYWwtaGVh ZGVyIj4KICAgICAgICAgICAgICAgIDxoMiBpZD0iZWRpdG9yTW9kYWxUaXRsZSI+RWRpdG9yPC9o Mj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIE1ldGFkYXRlbi1aZWlsZSAx IC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItbWV0YS1yb3ciPgogICAgICAgICAg ICAgICAgPGxhYmVsPlRpdGVsOjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0i dGV4dCIgaWQ9ImVkaXRvclRpdGVsIiBwbGFjZWhvbGRlcj0iRG9rdW1lbnR0aXRlbCBlaW5nZWJl bi4uLiI+CiAgICAgICAgICAgICAgICA8bGFiZWw+S2F0ZWdvcmllOjwvbGFiZWw+CiAgICAgICAg ICAgICAgICA8c2VsZWN0IGlkPSJlZGl0b3JLYXRlZ29yaWUiPjwvc2VsZWN0PgogICAgICAgICAg ICAgICAgPGxhYmVsPlN0YXR1czo8L2xhYmVsPgogICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0i ZWRpdG9yU3RhdHVzIj48L3NlbGVjdD4KICAgICAgICAgICAgICAgIDxsYWJlbD7DnGJlcmFydGlr ZWw6PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9ImVkaXRvclBhcmVudCI+PG9w dGlvbiB2YWx1ZT0iIj4tLSBLZWluIMOcYmVyYXJ0aWtlbCAtLTwvb3B0aW9uPjwvc2VsZWN0Pgog ICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPCEtLSBUb29sYmFyIC0tPgogICAgICAgICAg ICA8ZGl2IGNsYXNzPSJlZGl0b3ItdG9vbGJhciI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIG9u Y2xpY2s9IkRyaXZlRWRpdG9yLnVuZG8oKSIgdGl0bGU9IlLDvGNrZ8OkbmdpZyAoU3RyZytaKSI+ PGltZyBzcmM9ImNzcy9pY29ucy91bmRvLnBuZyIgc3R5bGU9IndpZHRoOjE2cHg7aGVpZ2h0OjE2 cHg7dmVydGljYWwtYWxpZ246bWlkZGxlOyI+PC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0 dG9uIG9uY2xpY2s9IkRyaXZlRWRpdG9yLnJlZG8oKSIgdGl0bGU9IldpZWRlcmhvbGVuIChTdHJn K1kpIj48aW1nIHNyYz0iY3NzL2ljb25zL3JlZG8ucG5nIiBzdHlsZT0id2lkdGg6MTZweDtoZWln aHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ij48L2J1dHRvbj4KICAgICAgICAgICAgICAg IDxzcGFuIGNsYXNzPSJ0b29sYmFyLXNlcGFyYXRvciI+PC9zcGFuPgogICAgICAgICAgICAgICAg PHNlbGVjdCBvbmNoYW5nZT0iRHJpdmVFZGl0b3IuaGVhZGluZyh0aGlzLnZhbHVlKTt0aGlzLnZh bHVlPScnIiBzdHlsZT0iZm9udC1zaXplOjEycHg7cGFkZGluZzoycHggNHB4OyI+CiAgICAgICAg ICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj5BYnNhdHo8L29wdGlvbj4KICAgICAgICAgICAg ICAgICAgICA8b3B0aW9uIHZhbHVlPSJoMSIgc3R5bGU9ImZvbnQtc2l6ZToxOHB4O2ZvbnQtd2Vp Z2h0OmJvbGQ7Ij5IMSDDnGJlcnNjaHJpZnQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8 b3B0aW9uIHZhbHVlPSJoMiIgc3R5bGU9ImZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OmJvbGQ7 Ij5IMiDDnGJlcnNjaHJpZnQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZh bHVlPSJoMyIgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5IMyDDnGJl cnNjaHJpZnQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJoNCIg c3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5INCDDnGJlcnNjaHJpZnQ8 L29wdGlvbj4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPGJ1dHRv biBvbmNsaWNrPSJEcml2ZUVkaXRvci5jb21tYW5kKCdib2xkJykiIHRpdGxlPSJGZXR0Ij48Yj5C PC9iPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJEcml2ZUVkaXRv ci5jb21tYW5kKCdpdGFsaWMnKSIgdGl0bGU9Ikt1cnNpdiI+PGk+STwvaT48L2J1dHRvbj4KICAg ICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iRHJpdmVFZGl0b3IuY29tbWFuZCgndW5kZXJs aW5lJykiIHRpdGxlPSJVbnRlcnN0cmljaGVuIj48dT5VPC91PjwvYnV0dG9uPgogICAgICAgICAg ICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJEcml2ZUVkaXRvci5jb21tYW5kKCdpbnNlcnRVbm9yZGVy ZWRMaXN0JykiIHRpdGxlPSJBdWZ6w6RobHVuZyI+PGltZyBzcmM9ImNzcy9pY29ucy9idWxsZXRf bGlzdC5naWYiIHN0eWxlPSJ3aWR0aDoxNnB4O2hlaWdodDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1p ZGRsZTsiPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJEcml2ZUVk aXRvci5jb21tYW5kKCdpbnNlcnRPcmRlcmVkTGlzdCcpIiB0aXRsZT0iTnVtbWVyaWVydGUgTGlz dGUiPjxpbWcgc3JjPSJjc3MvaWNvbnMvbnVtYmVyZWRfbGlzdC5wbmciIHN0eWxlPSJ3aWR0aDox NnB4O2hlaWdodDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsiPjwvYnV0dG9uPgoKICAgICAg ICAgICAgICAgIDxzZWxlY3QgaWQ9ImZvbnRTaXplU2VsZWN0IiBvbmNoYW5nZT0iRHJpdmVFZGl0 b3IuZm9udFNpemUodGhpcy52YWx1ZSkiPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFs dWU9IiI+R3LDtsOfZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9 IjEyIj4xMjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE0Ij4x NDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE2Ij4xNjwvb3B0 aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE4Ij4xODwvb3B0aW9uPgog ICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIwIj4yMDwvb3B0aW9uPgogICAgICAg ICAgICAgICAgPC9zZWxlY3Q+CgogICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJEcml2 ZUVkaXRvci5jb2xvcignIzAwMDAwMCcpIiB0aXRsZT0iU2Nod2FyeiI+PHNwYW4gY2xhc3M9ImNv bG9yLXN3YXRjaCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzAwMDAwMCI+PC9zcGFuPjwvYnV0 dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJEcml2ZUVkaXRvci5jb2xvcign IzJFNEE2MicpIiB0aXRsZT0iUG9saXplaS1CbGF1Ij48c3BhbiBjbGFzcz0iY29sb3Itc3dhdGNo IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojMkU0QTYyIj48L3NwYW4+PC9idXR0b24+CiAgICAg ICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9IkRyaXZlRWRpdG9yLmNvbG9yKCcjM2E3YWEzJyki IHRpdGxlPSJCbGF1Ij48c3BhbiBjbGFzcz0iY29sb3Itc3dhdGNoIiBzdHlsZT0iYmFja2dyb3Vu ZC1jb2xvcjojM2E3YWEzIj48L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9u IG9uY2xpY2s9IkRyaXZlRWRpdG9yLmNvbG9yKCcjNmI5YmMzJykiIHRpdGxlPSJIZWxsYmxhdSI+ PHNwYW4gY2xhc3M9ImNvbG9yLXN3YXRjaCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzZiOWJj MyI+PC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJEcml2 ZUVkaXRvci5jb2xvcignIzhiM2E2MicpIiB0aXRsZT0iQm9yZGVhdXgiPjxzcGFuIGNsYXNzPSJj b2xvci1zd2F0Y2giIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiM4YjNhNjIiPjwvc3Bhbj48L2J1 dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iRHJpdmVFZGl0b3IuY29sb3Io JyNmZjAwMDAnKSIgdGl0bGU9IlJvdCI+PHNwYW4gY2xhc3M9ImNvbG9yLXN3YXRjaCIgc3R5bGU9 ImJhY2tncm91bmQtY29sb3I6I2ZmMDAwMCI+PC9zcGFuPjwvYnV0dG9uPgoKICAgICAgICAgICAg ICAgIDxzcGFuIGNsYXNzPSJ0b29sYmFyLXNlcGFyYXRvciI+PC9zcGFuPgogICAgICAgICAgICAg ICAgPGJ1dHRvbiBvbmNsaWNrPSJEcml2ZUVkaXRvci5pbnNlcnRBY2NvcmRpb24oKSIgdGl0bGU9 IkF1ZmtsYXBwYmFyZW4gVGV4dGJlcmVpY2ggZWluZsO8Z2VuIj48aW1nIHNyYz0iY3NzL2ljb25z L0NoZXZyb24ucG5nIiBzdHlsZT0id2lkdGg6MTZweDtoZWlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGln bjptaWRkbGU7Ij48L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iRHJp dmVFZGl0b3IuaW5zZXJ0RkFRKCkiIHRpdGxlPSJGQVEtQmVyZWljaCBtaXQgRnJhZ2UtQW50d29y dC1QYWFyZW4gZWluZsO8Z2VuIj48aW1nIHNyYz0iY3NzL2ljb25zL2ZhcS5wbmciIHN0eWxlPSJ3 aWR0aDoxNnB4O2hlaWdodDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsiPjwvYnV0dG9uPgog ICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJEcml2ZUVkaXRvci5pbnNlcnRUYWJsZSgp IiB0aXRsZT0iVGFiZWxsZSBlaW5mw7xnZW4iPjxpbWcgc3JjPSJjc3MvaWNvbnMvdGFibGUucG5n IiBzdHlsZT0id2lkdGg6MTZweDtoZWlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ij48 L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iRHJpdmVFZGl0b3IuaW5z ZXJ0RGl2aWRlcigpIiB0aXRsZT0iSG9yaXpvbnRhbGUgVHJlbm5saW5pZSBlaW5mw7xnZW4iIHN0 eWxlPSJmb250LXNpemU6MTRweDtsZXR0ZXItc3BhY2luZzotMXB4OyI+4oCVPC9idXR0b24+CiAg ICAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9IkRyaXZlRWRpdG9yLmluc2VydEluZm9ib3go KSIgdGl0bGU9IkhlcnZvcmdlaG9iZW5lciBJbmZvYmxvY2sgbWl0IEFremVudGxpbmllIiBzdHls ZT0iZm9udC1zaXplOjExcHg7Ij7ilpAgSW5mbzwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1 dHRvbiBvbmNsaWNrPSJEcml2ZUVkaXRvci5pbnNlcnRJbXBvcnRhbnQoKSIgdGl0bGU9IldpY2h0 aWdlbiBIaW53ZWlzIGVpbmbDvGdlbiI+PGltZyBzcmM9ImNzcy9pY29ucy9pbXBvcnRhbnQucG5n IiBzdHlsZT0id2lkdGg6MTZweDtoZWlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ij48 L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iRHJpdmVFZGl0b3Iuc2hv d1VwbG9hZE1vZGFsKCkiIHRpdGxlPSJEYXRlaWVuIGhvY2hsYWRlbiIgc3R5bGU9ImZvbnQtd2Vp Z2h0OjYwMDsiPlVwbG9hZDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZs ZXg6MTsiPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iRHJpdmVFZGl0 b3IudG9nZ2xlUmF3KCkiIGlkPSJidG5SYXdNb2RlIiB0aXRsZT0iSFRNTC1RdWVsbHRleHQgYW56 ZWlnZW4vYmVhcmJlaXRlbiIgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2ZvbnQtZmFtaWx5Om1vbm9z cGFjZTtvcGFjaXR5OjAuNjsiPiZsdDsvJmd0OzwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4K CiAgICAgICAgICAgIDwhLS0gRWRpdG9yIEFyZWEgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9 ImVkaXRvci1hcmVhIj4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImVkaXRvcklucHV0IiBjbGFz cz0iZWRpdG9yLWlucHV0IiBjb250ZW50ZWRpdGFibGU9InRydWUiIHNwZWxsY2hlY2s9InRydWUi PjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gTWVkaWVuLVZlcndh bHR1bmcgKG51ciBBbnplaWdlL0JlYXJiZWl0dW5nLCBVcGxvYWQgdWViZXIgVG9vbGJhcikgLS0+ CiAgICAgICAgICAgIDxkaXYgaWQ9ImVkaXRvck1lZGlhUGFuZWwiIHN0eWxlPSJkaXNwbGF5Om5v bmU7IGJvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7IHBhZGRpbmc6OHB4 IDE2cHg7IGJhY2tncm91bmQ6dmFyKC0tYmctY2FyZC1hbHQpOyBtYXgtaGVpZ2h0OjIyMHB4OyBv dmVyZmxvdy15OmF1dG87Ij4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Zmxl eDsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOmNlbnRlcjsgbWFy Z2luLWJvdHRvbTo2cHg7Ij4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1z aXplOjEycHg7IGZvbnQtd2VpZ2h0OjYwMDsgY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTsiPkhv Y2hnZWxhZGVuZSBEYXRlaWVuPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9 ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDsiPgogICAgICAgICAgICAg ICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9IkRyaXZlRWRpdG9yLnNob3dVcGxvYWRNb2RhbCgp IiBzdHlsZT0iYmFja2dyb3VuZDpub25lOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1j b2xvcik7IGJvcmRlci1yYWRpdXM6M3B4OyBwYWRkaW5nOjJweCA4cHg7IGN1cnNvcjpwb2ludGVy OyBmb250LXNpemU6MTFweDsgY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTsiPisgSGluenVmw7xn ZW48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJEcml2 ZUVkaXRvci50b2dnbGVNZWRpYVBhbmVsKCkiIHN0eWxlPSJiYWNrZ3JvdW5kOm5vbmU7IGJvcmRl cjpub25lOyBjdXJzb3I6cG9pbnRlcjsgZm9udC1zaXplOjE0cHg7IGNvbG9yOnZhcigtLXRleHQt bXV0ZWQpOyI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAg ICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJlZGl0b3JNZWRpYUxp c3QiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gU2NobGFnd8O2 cnRlciAodW50ZXJoYWxiIGRlcyBFZGl0b3JzKSAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0i ZWRpdG9yLW1ldGEtcm93IiBpZD0iZWRpdG9yS2V5d29yZFJvdyIgc3R5bGU9ImZsZXgtd3JhcDp3 cmFwO2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7cGFkZGluZzo4cHgg MTZweDttYXJnaW46MDsiPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6 MTJweDsiPlNjaGxhZ3fDtnJ0ZXI6PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9 ImtleXdvcmQtaW5wdXQtd3JhcCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ia2V5 d29yZC1pbnB1dC1jb250YWluZXIiIGlkPSJlZGl0b3JLZXl3b3JkcyIgb25jbGljaz0iZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcktleXdvcmRJbnB1dCcpLmZvY3VzKCkiPgogICAgICAg ICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImVkaXRvcktleXdvcmRJbnB1 dCIgcGxhY2Vob2xkZXI9InouQi4gVmVya2VocnNmw7xocnVuZywgQmF1c3RlbGxlLCBBdXRvYmFo biwgSW5uZW5zdGFkdC4uLiI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAg ICAgICAgICAgPGRpdiBjbGFzcz0ia2V5d29yZC1hdXRvY29tcGxldGUiIGlkPSJrZXl3b3JkQXV0 b2NvbXBsZXRlIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAg PGRpdiBpZD0ia2V5d29yZFN1Z2dlc3Rpb25zIiBzdHlsZT0id2lkdGg6MTAwJTttYXJnaW4tdG9w OjRweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjRweDsiPjwvZGl2PgogICAgICAg ICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gRm9vdGVyIC0tPgogICAgICAgICAgICA8ZGl2 IGNsYXNzPSJlZGl0b3ItZm9vdGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0i RHJpdmVFZGl0b3IuY2FuY2VsV2l0aFByb21wdCgpIj5BYmJyZWNoZW48L2J1dHRvbj4KICAgICAg ICAgICAgICAgIDxidXR0b24gb25jbGljaz0iRHJpdmVFZGl0b3IudG9nZ2xlTWVkaWFQYW5lbCgp IiBzdHlsZT0iZm9udC1zaXplOjEycHg7IiB0aXRsZT0iSG9jaGdlbGFkZW5lIERhdGVpZW4gYW56 ZWlnZW4sIGJlYXJiZWl0ZW4gb2RlciBsw7ZzY2hlbi4gTmV1ZSBEYXRlaWVuIGhvY2hsYWRlbjog VXBsb2FkLUJ1dHRvbiBpbiBkZXIgV2Vya3pldWdsZWlzdGUgb2Jlbi4iPkFuaMOkbmdlIHZlcndh bHRlbjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic2F2ZS1idG4iIG9u Y2xpY2s9IkRyaXZlRWRpdG9yLnNhdmUoKSI+U3BlaWNoZXJuPC9idXR0b24+CiAgICAgICAgICAg ICAgICA8YnV0dG9uIGNsYXNzPSJzYXZlLWJ0biIgb25jbGljaz0iRHJpdmVFZGl0b3Iuc2F2ZUFu ZENsb3NlKCkiPlNwZWljaGVybiAmYW1wOyBTY2hsaWXDn2VuPC9idXR0b24+CiAgICAgICAgICAg IDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSBNZWRpYSBGdWxsc2Ny ZWVuIE1vZGFsIC0tPgogICAgPGRpdiBjbGFzcz0ibWVkaWEtbW9kYWwiIGlkPSJtZWRpYU1vZGFs IiBvbmNsaWNrPSJjbG9zZU1lZGlhTW9kYWwoKSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibWVkaWEt bW9kYWwtY29udGVudCIgb25jbGljaz0iZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiPgogICAgICAg ICAgICA8YnV0dG9uIGNsYXNzPSJtZWRpYS1tb2RhbC1jbG9zZSIgb25jbGljaz0iY2xvc2VNZWRp YU1vZGFsKCkiPlNjaGxpZcOfZW48L2J1dHRvbj4KICAgICAgICAgICAgPGRpdiBpZD0ibWVkaWFN b2RhbENvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0t IE1lZGlhIFVwbG9hZCBFaW5zdGllZ3MtTW9kYWwgKERhdGVpYXVzd2FobCArIEVya2xhZXJ1bmcp IC0tPgogICAgPGRpdiBjbGFzcz0ibWVkaWEtdXBsb2FkLWRpYWxvZyIgaWQ9Im1lZGlhVXBsb2Fk U3RhcnRNb2RhbCI+CiAgICAgICAgPGRpdiBjbGFzcz0ibWVkaWEtdXBsb2FkLWRpYWxvZy1jb250 ZW50IiBzdHlsZT0id2lkdGg6NTIwcHg7Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVkaWEt dXBsb2FkLWRpYWxvZy1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4+RGF0ZWllbiBob2No bGFkZW48L3NwYW4+CiAgICAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9IkRyaXZlRWRpdG9y LmNsb3NlVXBsb2FkU3RhcnRNb2RhbCgpIj5TY2hsaWXDn2VuPC9idXR0b24+CiAgICAgICAgICAg IDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZWRpYS11cGxvYWQtZGlhbG9nLWJvZHki IHN0eWxlPSJwYWRkaW5nOjI0cHg7Ij4KICAgICAgICAgICAgICAgIDwhLS0gRHJhZyAmIERyb3Ag Wm9uZSAtLT4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9InVwbG9hZERyb3Bab25lIiBjbGFzcz0i dXBsb2FkLWRyb3Atem9uZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1z aXplOjI4cHg7bWFyZ2luLWJvdHRvbTo4cHg7b3BhY2l0eTowLjU7Ij4rPC9kaXY+CiAgICAgICAg ICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjAwO2Nv bG9yOnZhcigtLXRleHQtaGVhZGluZyk7bWFyZ2luLWJvdHRvbTo0cHg7Ij5EYXRlaWVuIGhpZXJo ZXIgemllaGVuPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXpl OjEzcHg7Y29sb3I6dmFyKC0tdGV4dC1zZWNvbmRhcnkpO21hcmdpbi1ib3R0b206MTRweDsiPm9k ZXIga2xpY2tlIGF1ZiBkZW4gQnV0dG9uPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRv biBvbmNsaWNrPSJEcml2ZUVkaXRvci51cGxvYWRNZWRpYSgpIiBjbGFzcz0idXBsb2FkLXN0YXJ0 LWJ0biI+RGF0ZWllbiBhdXN3w6RobGVuPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4K ICAgICAgICAgICAgICAgIDwhLS0gSW5mby1CZXJlaWNoIC0tPgogICAgICAgICAgICAgICAgPGRp diBzdHlsZT0ibWFyZ2luLXRvcDoxOHB4O3BhZGRpbmc6MTRweCAxNnB4O2JhY2tncm91bmQ6dmFy KC0tYmctY2FyZC1hbHQsI2Y2ZjhmYSk7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyOjFweCBzb2xp ZCB2YXIoLS1ib3JkZXItY29sb3IsI2UwZTBlMCk7Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2 IHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdGV4dC1o ZWFkaW5nKTttYXJnaW4tYm90dG9tOjhweDsiPkhpbndlaXNlIHp1bSBVcGxvYWQ8L2Rpdj4KICAg ICAgICAgICAgICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbjowO3BhZGRpbmctbGVmdDoxOHB4O2Zv bnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXRleHQtc2Vjb25kYXJ5KTtsaW5lLWhlaWdodDoxLjg7 Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+TWVocmZhY2hhdXN3YWhsPC9z dHJvbmc+IG3DtmdsaWNoIChTdHJnL1NoaWZ0IGdlZHLDvGNrdCBoYWx0ZW4pPC9saT4KICAgICAg ICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+QmlsZGVyOjwvc3Ryb25nPiBKUEcsIFBORywg R0lGLCBTVkcsIFdlYlA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5E b2t1bWVudGU6PC9zdHJvbmc+IFBERiwgV29yZCwgRXhjZWwsIFBvd2VyUG9pbnQ8L2xpPgogICAg ICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5NZWRpZW46PC9zdHJvbmc+IE1QNCwgV2Vi TSwgTVAzLCBXQVYsIE9HRzwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5Gw7xyIGpl ZGUgRGF0ZWkga2FubnN0IGR1IDxzdHJvbmc+VGl0ZWwsIFVudGVydGl0ZWwsIERhcnN0ZWxsdW5n PC9zdHJvbmc+IHVuZCA8c3Ryb25nPlBsYXR6aWVydW5nPC9zdHJvbmc+IGVpbnplbG4gZmVzdGxl Z2VuPC9saT4KICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPC9kaXY+ CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSBN ZWRpYSBVcGxvYWQgRm9ybWF0aWVydW5ncy1EaWFsb2cgKHBybyBEYXRlaTogVGl0ZWwsIERhcnN0 ZWxsdW5nLCBldGMuKSAtLT4KICAgIDxkaXYgY2xhc3M9Im1lZGlhLXVwbG9hZC1kaWFsb2ciIGlk PSJtZWRpYVVwbG9hZERpYWxvZyI+CiAgICAgICAgPGRpdiBjbGFzcz0ibWVkaWEtdXBsb2FkLWRp YWxvZy1jb250ZW50Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVkaWEtdXBsb2FkLWRpYWxv Zy1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4gaWQ9InVwbG9hZERpYWxvZ1RpdGxlIj5N ZWRpZW4gZWluZsO8Z2VuPC9zcGFuPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJE cml2ZUVkaXRvci5jbG9zZVVwbG9hZERpYWxvZygpIj5BYmJyZWNoZW48L2J1dHRvbj4KICAgICAg ICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lZGlhLXVwbG9hZC1kaWFsb2ct Ym9keSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1cGxvYWQtcHJldmlldyIgaWQ9InVw bG9hZFByZXZpZXciPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLWZv cm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5UaXRlbDwvbGFiZWw+CiAgICAg ICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJ1cGxvYWRUaXRsZSIgcGxhY2Vo b2xkZXI9IlRpdGVsIGRlciBEYXRlaS4uLiI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAg ICAgICAgICAgIDxkaXYgY2xhc3M9InVwbG9hZC1mb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAg ICAgICA8bGFiZWw+VW50ZXJ0aXRlbCAvIEJlc2NocmVpYnVuZzwvbGFiZWw+CiAgICAgICAgICAg ICAgICAgICAgPHRleHRhcmVhIGlkPSJ1cGxvYWRDYXB0aW9uIiBwbGFjZWhvbGRlcj0iT3B0aW9u YWxlciBVbnRlcnRpdGVsLi4uIj48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgPC9kaXY+CiAg ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1cGxvYWQtZm9ybS1ncm91cCIgaWQ9InVwbG9hZERp c3BsYXlHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkRhcnN0ZWxsdW5nPC9sYWJl bD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1cGxvYWQtb3B0aW9uLWdyb3VwIiBp ZD0idXBsb2FkRGlzcGxheU9wdGlvbnMiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAg ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1cGxvYWQtZm9ybS1ncm91cCIgaWQ9InVwbG9hZEFs aWduR3JvdXAiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KICAgICAgICAgICAgICAgICAgICA8bGFi ZWw+QXVzcmljaHR1bmc8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVw bG9hZC1vcHRpb24tZ3JvdXAiIGlkPSJ1cGxvYWRBbGlnbk9wdGlvbnMiPgogICAgICAgICAgICAg ICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ1cGxvYWQtb3B0aW9uLWJ0biIgZGF0YS1hbGlnbj0i bGVmdCIgb25jbGljaz0iRHJpdmVFZGl0b3Iuc2V0VXBsb2FkT3B0aW9uKCdhbGlnbicsdGhpcyki PkxpbmtzPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InVw bG9hZC1vcHRpb24tYnRuIGFjdGl2ZSIgZGF0YS1hbGlnbj0iY2VudGVyIiBvbmNsaWNrPSJEcml2 ZUVkaXRvci5zZXRVcGxvYWRPcHRpb24oJ2FsaWduJyx0aGlzKSI+TWl0dGlnPC9idXR0b24+CiAg ICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InVwbG9hZC1vcHRpb24tYnRuIiBk YXRhLWFsaWduPSJyaWdodCIgb25jbGljaz0iRHJpdmVFZGl0b3Iuc2V0VXBsb2FkT3B0aW9uKCdh bGlnbicsdGhpcykiPlJlY2h0czwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2Pgog ICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1cGxvYWQt Zm9ybS1ncm91cCIgaWQ9InVwbG9hZFNpemVHcm91cCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgog ICAgICAgICAgICAgICAgICAgIDxsYWJlbD5CaWxkZ3LDtsOfZTwvbGFiZWw+CiAgICAgICAgICAg ICAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLW9wdGlvbi1ncm91cCIgaWQ9InVwbG9hZFNpemVP cHRpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idXBsb2FkLW9w dGlvbi1idG4gYWN0aXZlIiBkYXRhLXNpemU9InRodW1ibmFpbCIgb25jbGljaz0iRHJpdmVFZGl0 b3Iuc2V0VXBsb2FkT3B0aW9uKCdzaXplJyx0aGlzKSI+Vm9yc2NoYXViaWxkPC9idXR0b24+CiAg ICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InVwbG9hZC1vcHRpb24tYnRuIiBk YXRhLXNpemU9ImxhcmdlIiBvbmNsaWNrPSJEcml2ZUVkaXRvci5zZXRVcGxvYWRPcHRpb24oJ3Np emUnLHRoaXMpIj5Hcm/DnyAobWF4IDY0MHg0ODApPC9idXR0b24+CiAgICAgICAgICAgICAgICAg ICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAg ICAgICAgIDxkaXYgaWQ9InVwbG9hZFByb2dyZXNzQ29udGFpbmVyIiBzdHlsZT0iZGlzcGxheTpu b25lO3BhZGRpbmc6MCAyMHB4IDEycHg7Ij4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRp c3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjRw eDsiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJ1cGxvYWRQcm9ncmVzc0xhYmVsIiBz dHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdGV4dC1zZWNvbmRhcnkpOyI+V2lyZCBo b2NoZ2VsYWRlbi4uLjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0idXBsb2Fk UHJvZ3Jlc3NQY3QiIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6 dmFyKC0tdGV4dC1oZWFkaW5nKTsiPjAlPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAg ICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDo2cHg7YmFja2dyb3Vu ZDp2YXIoLS1iZy1tYWluLCNlZWUpO2JvcmRlci1yYWRpdXM6M3B4O292ZXJmbG93OmhpZGRlbjsi PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InVwbG9hZFByb2dyZXNzQmFyIiBzdHlsZT0i d2lkdGg6MCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsIzM0 OThkYiwjMmVjYzcxKTtib3JkZXItcmFkaXVzOjNweDt0cmFuc2l0aW9uOndpZHRoIDAuMTVzIGVh c2U7Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBp ZD0idXBsb2FkUHJvZ3Jlc3NTaXplIiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0t dGV4dC1zZWNvbmRhcnkpO21hcmdpbi10b3A6M3B4O3RleHQtYWxpZ246cmlnaHQ7Ij48L2Rpdj4K ICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InVwbG9hZC1kaWFsb2ct Zm9vdGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iRHJpdmVFZGl0b3IuY2xv c2VVcGxvYWREaWFsb2coKSI+QWJicmVjaGVuPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0 dG9uIGNsYXNzPSJwcmltYXJ5IiBpZD0idXBsb2FkQ29uZmlybUJ0biIgb25jbGljaz0iRHJpdmVF ZGl0b3IuY29uZmlybVVwbG9hZCgpIj5FaW5mw7xnZW48L2J1dHRvbj4KICAgICAgICAgICAgPC9k aXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tIE1lZGlhIENvbnRleHQgTWVu dSAoRWRpdG9yKSAtLT4KICAgIDxkaXYgY2xhc3M9Im1lZGlhLWNvbnRleHQtbWVudSIgaWQ9Im1l ZGlhQ29udGV4dE1lbnUiPgogICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6NHB4IDEwcHg7IGZv bnQtc2l6ZToxMXB4OyBjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTsgZm9udC13ZWlnaHQ6NjAwOyI+ QVVTUklDSFRVTkc8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZWRpYS1jb250ZXh0LWdyb3Vw Ij4KICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLWFsaWduPSJsZWZ0IiBvbmNsaWNrPSJEcml2ZUVk aXRvci5jb250ZXh0QWxpZ24oJ2xlZnQnKSI+TGlua3M8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1 dHRvbiBkYXRhLWFsaWduPSJjZW50ZXIiIG9uY2xpY2s9IkRyaXZlRWRpdG9yLmNvbnRleHRBbGln bignY2VudGVyJykiPk1pdHRpZzwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGRhdGEtYWxp Z249InJpZ2h0IiBvbmNsaWNrPSJEcml2ZUVkaXRvci5jb250ZXh0QWxpZ24oJ3JpZ2h0JykiPlJl Y2h0czwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1lZGlhLWNv bnRleHQtc2VwIj48L2Rpdj4KICAgICAgICA8YnV0dG9uIG9uY2xpY2s9IkRyaXZlRWRpdG9yLmNv bnRleHRFZGl0Q2FwdGlvbigpIj5VbnRlcnRpdGVsIGJlYXJiZWl0ZW48L2J1dHRvbj4KICAgICAg ICA8YnV0dG9uIG9uY2xpY2s9IkRyaXZlRWRpdG9yLmNvbnRleHRSZW1vdmUoKSIgc3R5bGU9ImNv bG9yOiNkYzM1NDU7Ij5FbnRmZXJuZW48L2J1dHRvbj4KICAgIDwvZGl2PgoKICAgIDwhLS0gUmV2 aWV3IFNpZGUgUGFuZWwgLS0+CiAgICA8ZGl2IGNsYXNzPSJyZXZpZXctcGFuZWwtb3ZlcmxheSIg aWQ9InJldmlld1BhbmVsT3ZlcmxheSIgb25jbGljaz0iRHJpdmVHb3Zlcm5hbmNlLmNsb3NlUXVl dWUoKSI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJyZXZpZXctcGFuZWwiIGlkPSJyZXZpZXdQYW5l bCI+CiAgICAgICAgPGRpdiBjbGFzcz0icmV2aWV3LXBhbmVsLWhlYWRlciI+CiAgICAgICAgICAg IFByw7xmdW5nZW4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2Uu Y2xvc2VRdWV1ZSgpIj5TY2hsaWXDn2VuPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAg PGRpdiBjbGFzcz0icmV2aWV3LXBhbmVsLWJvZHkiIGlkPSJyZXZpZXdQYW5lbEJvZHkiPjwvZGl2 PgogICAgPC9kaXY+CgogICAgPCEtLSBSZXZpZXcgQ29tbWVudCBEaWFsb2cgLS0+CiAgICA8ZGl2 IGNsYXNzPSJyZXZpZXctZGlhbG9nIiBpZD0icmV2aWV3RGlhbG9nIiBvbmNsaWNrPSJpZihldmVu dC50YXJnZXQ9PT10aGlzKURyaXZlR292ZXJuYW5jZS5jbG9zZVJldmlld0RpYWxvZygpIj4KICAg ICAgICA8ZGl2IGNsYXNzPSJyZXZpZXctZGlhbG9nLWNvbnRlbnQiPgogICAgICAgICAgICA8ZGl2 IGNsYXNzPSJyZXZpZXctZGlhbG9nLWhlYWRlciIgaWQ9InJldmlld0RpYWxvZ0hlYWRlciI+CiAg ICAgICAgICAgICAgICA8c3Bhbj5Eb2t1bWVudCBwcsO8ZmVuPC9zcGFuPgogICAgICAgICAgICAg ICAgPHNwYW4gaWQ9InJldmlld0RpYWxvZ0luZm8iIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250 LXdlaWdodDo0MDA7b3BhY2l0eTowLjk7Ij48L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAg ICAgICAgICA8ZGl2IGNsYXNzPSJyZXZpZXctZGlhbG9nLWJvZHkiPgogICAgICAgICAgICAgICAg PGRpdiBjbGFzcz0icmV2aWV3LXNwbGl0Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz PSJyZXZpZXctc3BsaXQtbGVmdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5BcnRpa2Vs aW5oYWx0PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icmV2aWV3QXJ0aWNs ZUNvbnRlbnQiIHN0eWxlPSJmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjc7Ij48L2Rpdj4K ICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz PSJyZXZpZXctc3BsaXQtcmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+QmlzaGVy aWdlIEtvbW1lbnRhcmU8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJy ZXZpZXctcHJldi1jb21tZW50cyIgaWQ9InJldmlld1ByZXZDb21tZW50cyI+PC9kaXY+CiAgICAg ICAgICAgICAgICAgICAgICAgIDxoMz5EZWluIEtvbW1lbnRhcjwvaDM+CiAgICAgICAgICAgICAg ICAgICAgICAgIDxwIGlkPSJyZXZpZXdEaWFsb2dIaW50IiBzdHlsZT0iZm9udC1zaXplOjExcHg7 Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCk7bGluZS1oZWlnaHQ6MS41O21hcmdpbi1ib3R0b206NHB4 OyI+PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7 Z2FwOjNweDttYXJnaW4tYm90dG9tOjRweDtmbGV4LXdyYXA6d3JhcDsiPgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn cmV2aWV3RGlhbG9nQ29tbWVudCcpLmZvY3VzKCk7ZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2JvbGQn KSIgc3R5bGU9InBhZGRpbmc6MnB4IDhweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1j b2xvcik7YmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkLWFsdCk7Ym9yZGVyLXJhZGl1czozcHg7Y3Vy c29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXRl eHQtcHJpbWFyeSk7Ij5GPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0 dG9uIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXZpZXdEaWFsb2dDb21tZW50 JykuZm9jdXMoKTtkb2N1bWVudC5leGVjQ29tbWFuZCgnaXRhbGljJykiIHN0eWxlPSJwYWRkaW5n OjJweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6 dmFyKC0tYmctY2FyZC1hbHQpO2JvcmRlci1yYWRpdXM6M3B4O2N1cnNvcjpwb2ludGVyO2ZvbnQt c3R5bGU6aXRhbGljO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Ij5L PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXZpZXdEaWFsb2dDb21tZW50JykuZm9jdXMoKTtkb2N1 bWVudC5leGVjQ29tbWFuZCgndW5kZXJsaW5lJykiIHN0eWxlPSJwYWRkaW5nOjJweCA4cHg7Ym9y ZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tYmctY2Fy ZC1hbHQpO2JvcmRlci1yYWRpdXM6M3B4O2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1 bmRlcmxpbmU7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5KTsiPlU8L2J1 dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ3Jldmlld0RpYWxvZ0NvbW1lbnQnKS5mb2N1cygpO2RvY3VtZW50 LmV4ZWNDb21tYW5kKCdpbnNlcnRVbm9yZGVyZWRMaXN0JykiIHN0eWxlPSJwYWRkaW5nOjJweCA4 cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0t YmctY2FyZC1hbHQpO2JvcmRlci1yYWRpdXM6M3B4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTox MnB4O2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Ij4mYnVsbDs8L2J1dHRvbj4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ3Jldmlld0RpYWxvZ0NvbW1lbnQnKS5mb2N1cygpO2RvY3VtZW50LmV4ZWNDb21tYW5kKCdm b3JlQ29sb3InLGZhbHNlLCcjZGMzNTQ1JykiIHN0eWxlPSJwYWRkaW5nOjJweCA4cHg7Ym9yZGVy OjFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tYmctY2FyZC1h bHQpO2JvcmRlci1yYWRpdXM6M3B4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxMnB4O2NvbG9y OiNkYzM1NDU7Zm9udC13ZWlnaHQ6NzAwOyI+Um90PC9idXR0b24+CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXZp ZXdEaWFsb2dDb21tZW50JykuZm9jdXMoKTtkb2N1bWVudC5leGVjQ29tbWFuZCgncmVtb3ZlRm9y bWF0JykiIHN0eWxlPSJwYWRkaW5nOjJweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3Jk ZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tYmctY2FyZC1hbHQpO2JvcmRlci1yYWRpdXM6M3B4 O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7 Ij5TdGFuZGFyZDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAg ICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icmV2aWV3RGlhbG9nQ29tbWVudCIgY29udGVudGVk aXRhYmxlPSJ0cnVlIiBzdHlsZT0ibWluLWhlaWdodDoxMDBweDtmbGV4OjE7cGFkZGluZzoxMHB4 O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOjRweDtm b250LXNpemU6MTNweDtiYWNrZ3JvdW5kOnZhcigtLWJnLWlucHV0KTtjb2xvcjp2YXIoLS10ZXh0 LXByaW1hcnkpO2xpbmUtaGVpZ2h0OjEuNjtvdmVyZmxvdy15OmF1dG87IiBkYXRhLXBsYWNlaG9s ZGVyPSJCZWdyw7xuZHVuZyBlaW5nZWJlbi4uLiI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAg PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAg ICAgIDxkaXYgY2xhc3M9InJldmlldy1kaWFsb2ctZm9vdGVyIj4KICAgICAgICAgICAgICAgIDxi dXR0b24gb25jbGljaz0iRHJpdmVHb3Zlcm5hbmNlLmNsb3NlUmV2aWV3RGlhbG9nKCkiPlNjaGxp ZcOfZW48L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0bi1jb25maXJt IiBpZD0icmV2aWV3RGlhbG9nQ29uZmlybSI+QmVzdMOkdGlnZW48L2J1dHRvbj4KICAgICAgICAg ICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tIEdvdmVybmFuY2Ug QWRtaW4gUGFuZWwgLS0+CiAgICA8ZGl2IGNsYXNzPSJnb3YtYWRtaW4tcGFuZWwiIGlkPSJnb3ZB ZG1pblBhbmVsIiBvbmNsaWNrPSJpZihldmVudC50YXJnZXQ9PT10aGlzKURyaXZlR292ZXJuYW5j ZS5jbG9zZUFkbWluKCkiPgogICAgICAgIDxkaXYgY2xhc3M9Imdvdi1hZG1pbi1jb250ZW50Ij4K ICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ292LWFkbWluLWhlYWRlciI+CiAgICAgICAgICAgICAg ICBHb3Zlcm5hbmNlLVZlcndhbHR1bmcKICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0i RHJpdmVHb3Zlcm5hbmNlLmNsb3NlQWRtaW4oKSI+U2NobGllw59lbjwvYnV0dG9uPgogICAgICAg ICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ292LWFkbWluLXRvb2xiYXIiIGlk PSJnb3ZBZG1pblRvb2xiYXIiIHN0eWxlPSJqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjsi PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13 cmFwOndyYXA7Ij4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnb3YtYWRkLWJ0 biIgc3R5bGU9InBhZGRpbmc6NnB4IDE0cHg7IiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2UuZWRp dFN0YXJ0c2VpdGUoKTsiIHRpdGxlPSJEZW4gQmVncsO8w591bmdzdGV4dCBhdWYgZGVyIFN0YXJ0 c2VpdGUgYmVhcmJlaXRlbiI+U3RhcnRzZWl0ZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAg IDxidXR0b24gY2xhc3M9Imdvdi1hZGQtYnRuIiBzdHlsZT0icGFkZGluZzo2cHggMTRweDsiIG9u Y2xpY2s9IkRyaXZlR292ZXJuYW5jZS5zaG93RW5nYWdlbWVudFN0YXRzKCk7IiB0aXRsZT0iU3Rh dGlzdGlrOiBXZXIgaGF0IHdpZSB2aWVsZSBBcnRpa2VsIGVyc3RlbGx0LCBiZWFyYmVpdGV0IG9k ZXIgZ2VwcsO8ZnQ/Ij5Vc2VyLUVuZ2FnZW1lbnQ8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAg ICA8YnV0dG9uIGNsYXNzPSJnb3YtYWRkLWJ0biIgc3R5bGU9InBhZGRpbmc6NnB4IDE0cHg7IiBv bmNsaWNrPSJEcml2ZUdvdmVybmFuY2Uuc2hvd0FkbWluR3VpZGUoKTsiIHRpdGxlPSJBbmxlaXR1 bmcgZsO8ciBFaW5zdGVpZ2VyOiBGYXJiZW4gw6RuZGVybiwgVGV4dGUgYW5wYXNzZW4sIERhdGVp ZW4gdmVyc3RlaGVuIj5BZG1pbi1BbmxlaXR1bmc8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAg ICA8YnV0dG9uIGNsYXNzPSJnb3YtYWRkLWJ0biBnb3YtYnRuLWRhbmdlciIgc3R5bGU9InBhZGRp bmc6NnB4IDE0cHg7IiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2UuY2xvc2VBZG1pbigpO0RyaXZl UG9ydGFsLnNob3dUcmFzaCgpOyIgdGl0bGU9IkdlbMO2c2NodGUgQXJ0aWtlbCBhbnplaWdlbiB1 bmQgZ2dmLiB3aWVkZXJoZXJzdGVsbGVuICgyOCBUYWdlIEF1ZmJld2FocnVuZykiPlBhcGllcmtv cmI8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnb3YtYWRkLWJ0 biIgc3R5bGU9InBhZGRpbmc6NnB4IDE0cHg7IiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2Uuc2hv d0ltcG9ydEV4cG9ydCgpOyIgdGl0bGU9IkFydGlrZWwgdW5kIE1lZGllbiBleHBvcnRpZXJlbiBv ZGVyIGltcG9ydGllcmVuIj5JbXBvcnQgLyBFeHBvcnQ8L2J1dHRvbj4KICAgICAgICAgICAgICAg IDwvZGl2PgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ292LWFkZC1idG4iIHN0eWxl PSJwYWRkaW5nOjZweCAxNHB4OyIgb25jbGljaz0ic2hvd0NvbnRhY3RGb3JtKCk7IiB0aXRsZT0i VGVjaG5pc2NoZSBIaWxmZSB2b20gRW50d2lja2xlciBhbmZvcmRlcm4iPlRlY2huaXNjaGVyIFN1 cHBvcnQ8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9 Imdvdi1hZG1pbi1ib2R5IiBpZD0iZ292QWRtaW5Cb2R5Ij48L2Rpdj4KICAgICAgICA8L2Rpdj4K ICAgIDwvZGl2PgoKICAgIDwhLS0gUmV2aXNpb25zaGlzdG9yaWUgTW9kYWwgLS0+CiAgICA8ZGl2 IGNsYXNzPSJyZXZpc2lvbi1tb2RhbCIgaWQ9InJldmlzaW9uTW9kYWwiIG9uY2xpY2s9ImlmKGV2 ZW50LnRhcmdldD09PXRoaXMpRHJpdmVQb3J0YWwuY2xvc2VSZXZpc2lvbnMoKSI+CiAgICAgICAg PGRpdiBjbGFzcz0icmV2aXNpb24tY29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0i cmV2aXNpb24tc2lkZWJhciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXZpc2lvbi1z aWRlYmFyLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgVmVyc2lvbmVuCiAgICAgICAgICAg ICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJEcml2ZVBvcnRhbC5jbG9zZVJldmlzaW9ucygpIj5T Y2hsaWXDn2VuPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAg IDxkaXYgY2xhc3M9InJldmlzaW9uLWxpc3QiIGlkPSJyZXZpc2lvbkxpc3QiPjwvZGl2PgogICAg ICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmV2aXNpb24tbWFpbiI+CiAg ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXZpc2lvbi10b29sYmFyIiBpZD0icmV2aXNpb25U b29sYmFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJldmlzaW9uLWNvbnRl bnQiIGlkPSJyZXZpc2lvbkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9 InRleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpO21hcmdpbi10b3A6NjBw eDsiPgogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIGF1c3dhZWhsZW4sIHVtIGRlbiBJ bmhhbHQgYW56dXplaWdlbgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAg ICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cgog ICAgPCEtLSBDcm9zc2xpbmsgUG9wb3ZlciAtLT4KICAgIDxkaXYgY2xhc3M9ImNyb3NzbGluay1w b3BvdmVyIiBpZD0iY3Jvc3NsaW5rUG9wb3ZlciI+PC9kaXY+CgogICAgPCEtLSBBcnRpa2VsLVJl ZmVyZW56IERyb3Bkb3duICgjLUF1dG9jb21wbGV0ZSkgLS0+CiAgICA8ZGl2IGNsYXNzPSJ4cmVm LWRyb3Bkb3duIiBpZD0ieHJlZkRyb3Bkb3duIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ4cmVmLXNl YXJjaCI+PGlucHV0IHR5cGU9InRleHQiIGlkPSJ4cmVmU2VhcmNoSW5wdXQiIHBsYWNlaG9sZGVy PSJBcnRpa2VsIHN1Y2hlbi4uLiIgYXV0b2NvbXBsZXRlPSJvZmYiPjwvZGl2PgogICAgICAgIDxk aXYgY2xhc3M9InhyZWYtbGlzdCIgaWQ9InhyZWZMaXN0Ij48L2Rpdj4KICAgIDwvZGl2PgoKICAg IDwhLS0gU2NobGFnd29ydC1WZXJ3YWx0dW5nIE1vZGFsIC0tPgogICAgPGRpdiBjbGFzcz0ia3ct bWFuYWdlLW1vZGFsIiBpZD0ia3dNYW5hZ2VNb2RhbCIgb25jbGljaz0iaWYoZXZlbnQudGFyZ2V0 PT09dGhpcylEcml2ZUdvdmVybmFuY2UuY2xvc2VLd01hbmFnZSgpIj4KICAgICAgICA8ZGl2IGNs YXNzPSJrdy1tYW5hZ2UtY29udGVudCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imt3LW1hbmFn ZS1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4gaWQ9Imt3TWFuYWdlVGl0bGUiPlNjaGxh Z3dvcnQgYmVhcmJlaXRlbjwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxk aXYgY2xhc3M9Imt3LW1hbmFnZS1ib2R5IiBpZD0ia3dNYW5hZ2VCb2R5Ij48L2Rpdj4KICAgICAg ICAgICAgPGRpdiBjbGFzcz0ia3ctbWFuYWdlLWZvb3RlciIgaWQ9Imt3TWFuYWdlRm9vdGVyIj48 L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gVG9hc3QgLS0+CiAgICA8 ZGl2IGNsYXNzPSJ0b2FzdCIgaWQ9InRvYXN0Ij48L2Rpdj4KCiAgICA8IS0tIEZvb3RlciAtLT4K ICAgIDxmb290ZXI+CiAgICAgICAgPHA+RC5SLkkuVi5FLiAtIFBvbGl6ZWkgTlJXIHwgUFAgRG9y dG11bmQgfCA8Yj48dT5WSTMtSW50ZXJuZXM8L3U+PC9iPiBJbmZvcm1hdGlvbiBDbHVzdGVyPC9w PgogICAgICAgIDxzcGFuIGlkPSJmb290ZXJSZWFkTW9kZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTtj b2xvcjojN2ViOGRhO2ZvbnQtc2l6ZToxMnB4O2N1cnNvcjpwb2ludGVyO29wYWNpdHk6MC44OyIg b25jbGljaz0ic2hvd1JlYWRNb2RlSW5mbygpIiB0aXRsZT0iRHUgYmVmaW5kZXN0IGRpY2ggaW0g TGVzZW1vZHVzLiBLbGlja2UgaGllciBmw7xyIG1laHIgSW5mb3MuIj5MZXNlbW9kdXM8L3NwYW4+ CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyLXJpZ2h0Ij4KICAgICAgICAgICAgPGEgb25jbGlj az0ic2hvd0hlbHAoKSIgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDsiPkhpbGZlPC9hPgogICAgICAg ICAgICA8YSBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2Uuc2hvd0ltcHJpbnQoKSI+RnJlaWdhYmV2 ZXJhbnR3b3J0bGljaGU8L2E+CiAgICAgICAgICAgIDxhIGNsYXNzPSJmb290ZXItdmVyc2lvbiIg b25jbGljaz0ic2hvd1ZlcnNpb25IaXN0b3J5KCkiPnYxLjA8L2E+CiAgICAgICAgICAgIDxzcGFu IGlkPSJmb290ZXJTeW5jU3RhdHVzIiBjbGFzcz0iZm9vdGVyLXN5bmMtc3RhdHVzIj48L3NwYW4+ CiAgICAgICAgPC9kaXY+CiAgICA8L2Zvb3Rlcj4KCiAgICA8IS0tIFZlcnNpb25zaGlzdG9yaWUg LS0+CiAgICA8ZGl2IGNsYXNzPSJ2ZXJzaW9uLW1vZGFsIiBpZD0idmVyc2lvbk1vZGFsIiBvbmNs aWNrPSJpZihldmVudC50YXJnZXQ9PT10aGlzKWNsb3NlVmVyc2lvbkhpc3RvcnkoKSI+CiAgICAg ICAgPGRpdiBjbGFzcz0idmVyc2lvbi1tb2RhbC1jb250ZW50Ij4KICAgICAgICAgICAgPGRpdiBj bGFzcz0idmVyc2lvbi1tb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgVmVyc2lvbnNoaXN0 b3JpZQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVyc2lvbi1t b2RhbC1ib2R5Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnNpb24taXRlbSI+CiAg ICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb24tYmFkZ2UgY3VycmVudCI+djEu MDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2ZXJzaW9uLWluZm8iPgog ICAgICAgICAgICAgICAgICAgICAgICBPZmZpemllbGxlIMOcYmVyZ2FiZSDigJMgTGVzZW1vZHVz IChpbmRleC5odG1sIGRpcmVrdCDDtmZmbmVuKSwgQWNjb3JkaW9uLSwgRkFRLSB1bmQgVGFiZWxs ZW4tS29tcG9uZW50ZW4gaW0gRWRpdG9yLCBhdXRvbWF0aXNjaGUgQXJ0aWtlbHZlcnNpb25pZXJ1 bmcsIEFkbWluLUFubGVpdHVuZywgdGVjaG5pc2NoZXIgU3VwcG9ydC1Lb250YWt0CiAgICAgICAg ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnNpb24tZGF0ZSI+TcOkcnogMjAyNjwvZGl2 PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAg ICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2ZXJzaW9uLWl0ZW0iPgogICAgICAgICAgICAgICAgICAg IDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLWJhZGdlIj52MC45NTwvc3Bhbj4KICAgICAgICAgICAgICAg ICAgICA8ZGl2IGNsYXNzPSJ2ZXJzaW9uLWluZm8iPgogICAgICAgICAgICAgICAgICAgICAgICBT ZWN1cml0eS1BdWRpdCDigJMgUHLDvGZ1bmcgYWxsZXIgU2ljaGVyaGVpdHNtZWNoYW5pc21lbjog WFNTLVNjaHV0eiwgUGF0aC1UcmF2ZXJzYWwsIFNTUkYtQmxvY2tpZXJ1bmcsIEFFUy0yNTYtVmVy c2NobMO8c3NlbHVuZywgU2NocmVpYnNjaHV0eiwgTmV0endlcmstSXNvbGF0aW9uCiAgICAgICAg ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnNpb24tZGF0ZSI+TcOkcnogMjAyNjwvZGl2 PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAg ICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2ZXJzaW9uLWl0ZW0iPgogICAgICAgICAgICAgICAgICAg IDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLWJhZGdlIj52MC45PC9zcGFuPgogICAgICAgICAgICAgICAg ICAgIDxkaXYgY2xhc3M9InZlcnNpb24taW5mbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIEF1 dG9tYXRpc2NoZSBDcm9zc2xpbmstRXJrZW5udW5nIChBcnRpa2VsdGl0ZWwgdW5kIFNjaGxhZ3fD tnJ0ZXIgaW0gVGV4dCksIG1hbnVlbGxlIEFydGlrZWxyZWZlcmVuemVuIHZpYSAjLVRhc3RlIG1p dCDDnGJlcnNjaHJpZnRlbi1BbmtlciwgUmV2aXNpb25zaGlzdG9yaWUgbWl0IERpZmYtQW5zaWNo dCwgU2NobGFnd29ydC1WZXJ3YWx0dW5nCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xh c3M9InZlcnNpb24tZGF0ZSI+TcOkcnogMjAyNjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwv ZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2 ZXJzaW9uLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLWJh ZGdlIj52MC44PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnNpb24t aW5mbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIEFibGVobnVuZ3MtV29ya2Zsb3cgbWl0IGtv bmZpZ3VyaWVyYmFyZXIgQmVncsO8bmR1bmdzcGZsaWNodCwgw7xiZXJhcmJlaXRldGVzIFJldmll dy1QYW5lbCwgZHVyY2hnw6RuZ2lnZXIgVGFnLS9OYWNodC1Nb2R1cyBmw7xyIGFsbGUgVUktRWxl bWVudGUKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVyc2lvbi1kYXRlIj5N w6RyeiAyMDI2PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAg ICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnNpb24taXRlbSI+CiAgICAg ICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb24tYmFkZ2UiPnYwLjc8L3NwYW4+CiAg ICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVyc2lvbi1pbmZvIj4KICAgICAgICAgICAg ICAgICAgICAgICAgR292ZXJuYW5jZS1TeXN0ZW0gbWl0IFJvbGxlbiwgRG9rdW1lbnQtU3BlcnJl IChMb2NraW5nKSwgQUVTLTI1Ni1WZXJzY2hsw7xzc2VsdW5nLCBTY2hsYWd3w7ZydGVyIG1pdCBB dXRvY29tcGxldGUsIFRhYmVsbGVuYW5zaWNodCwgRW5nYWdlbWVudC1TdGF0aXN0aWssIEzDtnNj aC1BdWRpdCBtaXQgMjgtVGFnZS1QYXBpZXJrb3JiCiAgICAgICAgICAgICAgICAgICAgICAgIDxk aXYgY2xhc3M9InZlcnNpb24tZGF0ZSI+RmVicnVhciAyMDI2PC9kaXY+CiAgICAgICAgICAgICAg ICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYg Y2xhc3M9InZlcnNpb24taXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZl cnNpb24tYmFkZ2UiPnYwLjY8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i dmVyc2lvbi1pbmZvIj4KICAgICAgICAgICAgICAgICAgICAgICAgRnJlaWdhYmUtV29ya2Zsb3cg KFN1cGVyVXNlciwgUmV2aWV3ZXIsIEthdGVnb3JpZW4tWnVvcmRudW5nKSwgTWVkaWVuLVVwbG9h ZCBtaXQgTW9kYWwtVm9yc2NoYXUsIE1pdHdpcmtlbmRlbi1UcmFja2luZyBtaXQgQmVpdHJhZ3Nh cnRlbgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2ZXJzaW9uLWRhdGUiPkZl YnJ1YXIgMjAyNjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAg ICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2ZXJzaW9uLWl0ZW0iPgogICAg ICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLWJhZGdlIj52MC41PC9zcGFuPgog ICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnNpb24taW5mbyI+CiAgICAgICAgICAg ICAgICAgICAgICAgIFdZU0lXWUctRWRpdG9yIG1pdCBGb3JtYXRpZXJ1bmcgdW5kIFVuZG8vUmVk bywgUGFzdGUtQmVyZWluaWd1bmcsIFVudGVyYXJ0aWtlbC1TeXN0ZW0sIFN0YXJ0c2VpdGVuLUVk aXRvciwgSGlsZmUtTW9kYWwKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVy c2lvbi1kYXRlIj5KYW51YXIgMjAyNjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2Pgog ICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2ZXJzaW9u LWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLWJhZGdlIj52 MC40PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnNpb24taW5mbyI+ CiAgICAgICAgICAgICAgICAgICAgICAgIFVtYmF1IHp1ciBTaW5nbGUtRmlsZS1BcHAgKGluZGV4 Lmh0bWwpLCBQb3dlclNoZWxsIEhUVFAtU2VydmVyIG1pdCBSRVNULUFQSSwgYXV0b21hdGlzY2hl ciBCcm93c2VyLVN0YXJ0LCBUYWcvTmFjaHQtTW9kdXMKICAgICAgICAgICAgICAgICAgICAgICAg PGRpdiBjbGFzcz0idmVyc2lvbi1kYXRlIj5EZXplbWJlciAyMDI1PC9kaXY+CiAgICAgICAgICAg ICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxk aXYgY2xhc3M9InZlcnNpb24taXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9 InZlcnNpb24tYmFkZ2UiPnYwLjM8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFz cz0idmVyc2lvbi1pbmZvIj4KICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi1Eb2t1bWVudGVu c3RydWt0dXIgaW4gS2F0ZWdvcmllLU9yZG5lcm4sIDI3IEZhY2hiZXJlaWNoZSwgU3RhdHVzLVN5 c3RlbSAoRW50d3VyZi9QcsO8ZnVuZy9GcmVpZ2VnZWJlbi9BYmdlbGVobnQpCiAgICAgICAgICAg ICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnNpb24tZGF0ZSI+Tm92ZW1iZXIgMjAyNTwvZGl2 PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAg ICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2ZXJzaW9uLWl0ZW0iPgogICAgICAgICAgICAgICAgICAg IDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLWJhZGdlIj52MC4yPC9zcGFuPgogICAgICAgICAgICAgICAg ICAgIDxkaXYgY2xhc3M9InZlcnNpb24taW5mbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIEtv bnplcHR2YWxpZGllcnVuZyBhdWYgYmVow7ZyZGxpY2hlbiBXaW5kb3dzLVJlY2huZXJuLCBUZXN0 IGRlciBOZXR6bGF1ZndlcmstS29tcGF0aWJpbGl0w6R0LCBCZW51dHplcmlkZW50aWZpa2F0aW9u IHZpYSBXaW5kb3dzLVNlc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i dmVyc2lvbi1kYXRlIj5Ob3ZlbWJlciAyMDI1PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9k aXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZl cnNpb24taXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb24tYmFk Z2UiPnYwLjE8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVyc2lvbi1p bmZvIj4KICAgICAgICAgICAgICAgICAgICAgICAgRXJzdGVyIFByb3RvdHlwIOKAkyBQcm9vZi1v Zi1Db25jZXB0IGbDvHIgT2ZmbGluZS1Eb2t1bWVudGVudmVyd2FsdHVuZyBvaG5lIERhdGVuYmFu ayB1bmQgSW50ZXJuZXQKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVyc2lv bi1kYXRlIj5Pa3RvYmVyIDIwMjU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAg ICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAg IDwvZGl2PgoKICAgIDwhLS0gRnJlaWdhYmXDvGJlcnNpY2h0IChJbXByZXNzdW0pIC0tPgogICAg PGRpdiBjbGFzcz0iaW1wcmludC1tb2RhbCIgaWQ9ImltcHJpbnRNb2RhbCIgb25jbGljaz0iaWYo ZXZlbnQudGFyZ2V0PT09dGhpcylEcml2ZUdvdmVybmFuY2UuY2xvc2VJbXByaW50KCkiPgogICAg ICAgIDxkaXYgY2xhc3M9ImltcHJpbnQtY29udGVudCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9 ImltcHJpbnQtaGVhZGVyIj4KICAgICAgICAgICAgICAgIEZyZWlnYWJldmVyYW50d29ydGxpY2hl CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbXByaW50LWJvZHki IGlkPSJpbXByaW50Qm9keSI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8 IS0tIENvbnRyaWJ1dGlvbiBUeXBlIERpYWxvZyAtLT4KICAgIDxkaXYgY2xhc3M9ImNvbnRyaWIt ZGlhbG9nIiBpZD0iY29udHJpYkRpYWxvZyI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJpYi1k aWFsb2ctY29udGVudCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyaWItZGlhbG9nLWhl YWRlciI+QXJ0IGRlciBCZWFyYmVpdHVuZzwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJj b250cmliLWRpYWxvZy1ib2R5Ij4KICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90 dG9tOjEycHg7IGZvbnQtc2l6ZToxM3B4OyBjb2xvcjp2YXIoLS10ZXh0LXNlY29uZGFyeSk7Ij5C aXR0ZSB3w6RobGUgZGllIEFydCBkZWluZXMgQmVpdHJhZ3M6PC9wPgogICAgICAgICAgICAgICAg PGJ1dHRvbiBjbGFzcz0iY29udHJpYi10eXBlLWJ0biIgb25jbGljaz0iRHJpdmVFZGl0b3Iuc2V0 Q29udHJpYlR5cGUoJ2F1dG9yJykiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxh YmVsIj5BdXRvciAvIEluaGFsdGxpY2hlIEVyc3RlbGx1bmc8L2Rpdj4KICAgICAgICAgICAgICAg ICAgICA8ZGl2IGNsYXNzPSJkZXNjIj5TaWduaWZpa2FudGUgbmV1ZSBJbmhhbHRlIHZlcmZhc3N0 LCBBYnNjaG5pdHRlIGdlc2NocmllYmVuIG9kZXIgd2VzZW50bGljaGUgRXJnw6RuenVuZ2VuPC9k aXY+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xh c3M9ImNvbnRyaWItdHlwZS1idG4iIG9uY2xpY2s9IkRyaXZlRWRpdG9yLnNldENvbnRyaWJUeXBl KCdyZWRha3Rpb24nKSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPlJl ZGFrdGlvbmVsbGUgw5xiZXJhcmJlaXR1bmc8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2 IGNsYXNzPSJkZXNjIj5SZWNodHNjaHJlaWJ1bmcsIEdyYW1tYXRpaywgRm9ybWF0aWVydW5nIG9k ZXIga2xlaW5lcmUgS29ycmVrdHVyZW48L2Rpdj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgog ICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY29udHJpYi10eXBlLWJ0biIgb25jbGljaz0i RHJpdmVFZGl0b3Iuc2V0Q29udHJpYlR5cGUoJ3JldmlldycpIj4KICAgICAgICAgICAgICAgICAg ICA8ZGl2IGNsYXNzPSJsYWJlbCI+RmFjaGxpY2hlIFByw7xmdW5nIC8gUmV2aWV3PC9kaXY+CiAg ICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVzYyI+SW5oYWx0bGljaGUgUHLDvGZ1bmcs IGZhY2hsaWNoZSBBbm1lcmt1bmdlbiBvZGVyIFF1YWxpdMOkdHNzaWNoZXJ1bmc8L2Rpdj4KICAg ICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4K ICAgIDwvZGl2PgoKICAgIDwhLS0gTMO2c2NoLUJlc3TDpHRpZ3VuZyAtLT4KICAgIDxkaXYgY2xh c3M9ImRlbGV0ZS1jb25maXJtLW1vZGFsIiBpZD0iZGVsZXRlQ29uZmlybU1vZGFsIj4KICAgICAg ICA8ZGl2IGNsYXNzPSJkZWxldGUtY29uZmlybS1jb250ZW50Ij4KICAgICAgICAgICAgPGRpdiBj bGFzcz0iZGVsZXRlLWNvbmZpcm0taGVhZGVyIj5Eb2t1bWVudCBlbmRnw7xsdGlnIGzDtnNjaGVu PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbGV0ZS1jb25maXJtLWJvZHkiPgogICAg ICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O2NvbG9yOnZhcigtLXRleHQtc2Vj b25kYXJ5KTttYXJnaW4tYm90dG9tOjhweDsiIGlkPSJkZWxldGVDb25maXJtVGV4dCI+PC9wPgog ICAgICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXRleHQt c2Vjb25kYXJ5KTttYXJnaW4tYm90dG9tOjEycHg7Ij5HaWIgenVyIEJlc3TDpHRpZ3VuZyBkZWlu ZSBOVy1LZW5udW5nIGVpbjo8L3A+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIg aWQ9ImRlbGV0ZUNvbmZpcm1JbnB1dCIgcGxhY2Vob2xkZXI9Ik5XLUtlbm51bmcgZWluZ2ViZW4u Li4iIGF1dG9jb21wbGV0ZT0ib2ZmIj4KICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJmb250LXNp emU6MTFweDtjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTttYXJnaW4tdG9wOjZweDsiPkRhcyBEb2t1 bWVudCB3aXJkIGluIGRlbiBQYXBpZXJrb3JiIHZlcnNjaG9iZW4gdW5kIGlzdCAyOCBUYWdlIHdp ZWRlcmhlcnN0ZWxsYmFyLjwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYg Y2xhc3M9ImRlbGV0ZS1jb25maXJtLWZvb3RlciI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIG9u Y2xpY2s9IkRyaXZlUG9ydGFsLmNhbmNlbERlbGV0ZSgpIj5BYmJyZWNoZW48L2J1dHRvbj4KICAg ICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0bi1kZWxldGUiIGlkPSJkZWxldGVDb25maXJt QnRuIiBvbmNsaWNrPSJEcml2ZVBvcnRhbC5jb25maXJtRGVsZXRlKCkiIGRpc2FibGVkPkVuZGfD vGx0aWcgbMO2c2NoZW48L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ CiAgICA8L2Rpdj4KCiAgICA8IS0tIEhpbGZlLU1vZGFsIC0tPgogICAgPGRpdiBjbGFzcz0iaGVs cC1tb2RhbCIgaWQ9ImhlbHBNb2RhbCIgb25jbGljaz0iaWYoZXZlbnQudGFyZ2V0PT09dGhpcyYm IWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWxwQm9keScpLmlzQ29udGVudEVkaXRhYmxlKWNs b3NlSGVscCgpIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLW1vZGFsLWNvbnRlbnQiIHN0eWxl PSJwb3NpdGlvbjpyZWxhdGl2ZTsiPgogICAgICAgICAgICA8bmF2IGNsYXNzPSJoZWxwLXRvYyIg aWQ9ImhlbHBUb2MiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC10b2MtdGl0bGUi PkhpbGZlICZhbXA7IEFubGVpdHVuZzwvZGl2PgogICAgICAgICAgICAgICAgPGEgaHJlZj0iI2hl bHAtc3RhcnQiIGNsYXNzPSJhY3RpdmUiIGRhdGEtc2VjdGlvbj0iaGVscC1zdGFydCI+RXJzdGUg U2Nocml0dGU8L2E+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjaGVscC1jb25uZWN0IiBkYXRh LXNlY3Rpb249ImhlbHAtY29ubmVjdCI+VmVyYmluZHVuZ3Ntb2RpPC9hPgogICAgICAgICAgICAg ICAgPGEgaHJlZj0iI2hlbHAtc2VhcmNoIiBkYXRhLXNlY3Rpb249ImhlbHAtc2VhcmNoIj5TdWNo ZSAmYW1wOyBGaWx0ZXI8L2E+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjaGVscC1kb2NzIiBk YXRhLXNlY3Rpb249ImhlbHAtZG9jcyI+RG9rdW1lbnRlbmxpc3RlPC9hPgogICAgICAgICAgICAg ICAgPGEgaHJlZj0iI2hlbHAtZGV0YWlsIiBkYXRhLXNlY3Rpb249ImhlbHAtZGV0YWlsIj5EZXRh aWxhbnNpY2h0PC9hPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iI2hlbHAtdGFibGUiIGRhdGEt c2VjdGlvbj0iaGVscC10YWJsZSI+VGFiZWxsZW5hbnNpY2h0PC9hPgogICAgICAgICAgICAgICAg PGEgaHJlZj0iI2hlbHAtZWRpdG9yIiBkYXRhLXNlY3Rpb249ImhlbHAtZWRpdG9yIj5FZGl0b3I8 L2E+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjaGVscC1rZXl3b3JkcyIgY2xhc3M9InN1YiIg ZGF0YS1zZWN0aW9uPSJoZWxwLWtleXdvcmRzIj5TY2hsYWd3w7ZydGVyPC9hPgogICAgICAgICAg ICAgICAgPGEgaHJlZj0iI2hlbHAtcGFyZW50IiBjbGFzcz0ic3ViIiBkYXRhLXNlY3Rpb249Imhl bHAtcGFyZW50Ij5VbnRlcmFydGlrZWw8L2E+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjaGVs cC1tZWRpYSIgY2xhc3M9InN1YiIgZGF0YS1zZWN0aW9uPSJoZWxwLW1lZGlhIj5NZWRpZW4gZWlu ZsO8Z2VuPC9hPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iI2hlbHAtZGVsZXRlIiBkYXRhLXNl Y3Rpb249ImhlbHAtZGVsZXRlIj5Mw7ZzY2hlbiAmYW1wOyBQYXBpZXJrb3JiPC9hPgogICAgICAg ICAgICAgICAgPGEgaHJlZj0iI2hlbHAtdGhlbWUiIGRhdGEtc2VjdGlvbj0iaGVscC10aGVtZSI+ VGFnL05hY2h0LU1vZHVzPC9hPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iI2hlbHAtc2hvcnRj dXRzIiBkYXRhLXNlY3Rpb249ImhlbHAtc2hvcnRjdXRzIj5UYXN0ZW5rw7xyemVsPC9hPgogICAg ICAgICAgICAgICAgPGEgaHJlZj0iI2hlbHAtdmVyc2lvbiIgZGF0YS1zZWN0aW9uPSJoZWxwLXZl cnNpb24iPlZlcnNpb25zaGlzdG9yaWU8L2E+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjaGVs cC1jb250YWN0IiBkYXRhLXNlY3Rpb249ImhlbHAtY29udGFjdCI+RnJhZ2VuICZhbXA7IFVudGVy c3TDvHR6dW5nPC9hPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaGVscC1lZGl0LWJ0 biIgaWQ9ImhlbHBFZGl0QnRuIiBvbmNsaWNrPSJzdGFydEVkaXRIZWxwKCkiPkJlYXJiZWl0ZW48 L2J1dHRvbj4KICAgICAgICAgICAgPC9uYXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZsZXg6 MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO292ZXJmbG93OmhpZGRlbjsiPgog ICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWVkaXQtYmFyIiBpZD0iaGVscEVkaXRCYXIiPgog ICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJkb2N1bWVudC5leGVjQ29tbWFuZCgnYm9s ZCcpIiB0aXRsZT0iRmV0dCI+PGI+QjwvYj48L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0 b24gb25jbGljaz0iZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2l0YWxpYycpIiB0aXRsZT0iS3Vyc2l2 Ij48aT5JPC9pPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJkb2N1 bWVudC5leGVjQ29tbWFuZCgndW5kZXJsaW5lJykiIHRpdGxlPSJVbnRlcnN0cmljaGVuIj48dT5V PC91PjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJkb2N1bWVudC5l eGVjQ29tbWFuZCgnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpIj4mYnVsbDs8L2J1dHRvbj4KICAgICAg ICAgICAgICAgIDxidXR0b24gb25jbGljaz0iZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydE9y ZGVyZWRMaXN0JykiPjEuPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9 InZhciBoPXByb21wdCgnw5xiZXJzY2hyaWZ0LVRleHQ6Jyk7aWYoaCl7ZG9jdW1lbnQuZXhlY0Nv bW1hbmQoJ2luc2VydEhUTUwnLCc8aDIgaWQ9JnF1b3Q7aGVscC0nK2gudG9Mb3dlckNhc2UoKS5y ZXBsYWNlKC9bXmEtejAtOV0vZywnLScpKycmcXVvdDs+JytoKyc8L2gyPicpO30iPkgyPC9idXR0 b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9InZhciBoPXByb21wdCgnVW50ZXLD vGJlcnNjaHJpZnQtVGV4dDonKTtpZihoKXtkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRN TCcsJzxoMyBpZD0mcXVvdDtoZWxwLScraC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05 XS9nLCctJykrJyZxdW90Oz4nK2grJzwvaDM+Jyk7fSI+SDM8L2J1dHRvbj4KICAgICAgICAgICAg ICAgIDxidXR0b24gY2xhc3M9ImhlbHAtY2FuY2VsLWJ0biIgb25jbGljaz0iY2FuY2VsRWRpdEhl bHAoKSI+QWJicmVjaGVuPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJo ZWxwLXNhdmUtYnRuIiBvbmNsaWNrPSJzYXZlRWRpdEhlbHAoKSI+U3BlaWNoZXJuPC9idXR0b24+ CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWJvZHkiIGlk PSJoZWxwQm9keSI+CgogICAgICAgICAgICAgICAgPGgyIGlkPSJoZWxwLXN0YXJ0Ij5FcnN0ZSBT Y2hyaXR0ZTwvaDI+CiAgICAgICAgICAgICAgICA8cD5XaWxsa29tbWVuIGJlaW0gPHN0cm9uZz5E LlIuSS5WLkUuPC9zdHJvbmc+IFBvcnRhbCDigJMgZGVtIERpZ2l0YWxlbiBSZXNzb3VyY2VuLSB1 bmQgSW5mb3JtYXRpb25zcG9ydGFsIFZlcmtlaHIgZGVzIFBQIERvcnRtdW5kIChWSTMpLjwvcD4K ICAgICAgICAgICAgICAgIDxwPkRhcyBQb3J0YWwgdmVyd2FsdGV0IERva3VtZW50ZSBvZmZsaW5l LWbDpGhpZyBpbiBlaW5lbSBsb2thbGVuIE9yZG5lci4gQWxsZSBBcnRpa2VsLCBNZWRpZW4gdW5k IEtvbmZpZ3VyYXRpb25lbiBsaWVnZW4gYWxzIERhdGVpZW4gdm9yIOKAkyBrZWluIEludGVybmV0 IHVuZCBrZWluZSBEYXRlbmJhbmsgZXJmb3JkZXJsaWNoLjwvcD4KICAgICAgICAgICAgICAgIDxo Mz5TY2huZWxsc3RhcnQ8L2gzPgogICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAg ICAgIDxsaT48c3Ryb25nPk51ciBsZXNlbjo8L3N0cm9uZz4gw5ZmZm5lIGRpZSA8Y29kZT5pbmRl eC5odG1sPC9jb2RlPiBkaXJla3QgaW0gQnJvd3Nlci4gRG9rdW1lbnRlIHdlcmRlbiBhdXRvbWF0 aXNjaCBhdXMgZGVtIDxjb2RlPmRhdGEvPC9jb2RlPi1PcmRuZXIgZ2VsYWRlbi48L2xpPgogICAg ICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPkJlYXJiZWl0ZW4gKFdpbmRvd3MpOjwvc3Ryb25n PiBTdGFydGUgPGNvZGU+RFJJVkVfU3RhcnQuYmF0PC9jb2RlPiBwZXIgRG9wcGVsa2xpY2suIERl ciBTZXJ2ZXIgw7ZmZm5ldCBkYXMgUG9ydGFsIGltIEJyb3dzZXIgbWl0IFZvbGx6dWdyaWZmLjwv bGk+CiAgICAgICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgICAgIDxoMiBpZD0iaGVscC1j b25uZWN0Ij5WZXJiaW5kdW5nc21vZGk8L2gyPgogICAgICAgICAgICAgICAgPHA+RGFzIFBvcnRh bCBlcmtlbm50IGF1dG9tYXRpc2NoIGRlbiBiZXN0ZW4gdmVyZsO8Z2JhcmVuIE1vZHVzOjwvcD4K ICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5TZXJ2 ZXItTW9kdXM8L3N0cm9uZz4gKGdyw7xuZXIgUHVua3QpOiBWb2xsZXIgTGVzZS0gdW5kIFNjaHJl aWJ6dWdyaWZmIMO8YmVyIDxjb2RlPkRSSVZFX1N0YXJ0LmJhdDwvY29kZT4uIFVudGVyc3TDvHR6 dCBMb2NraW5nIGJlaSBtZWhyZXJlbiBCZW51dHplcm4uPC9saT4KICAgICAgICAgICAgICAgICAg ICA8bGk+PHN0cm9uZz5MZXNlbW9kdXM8L3N0cm9uZz4gKG9yYW5nZXIgUHVua3QpOiDDlmZmbmUg ZWluZmFjaCBkaWUgPGNvZGU+aW5kZXguaHRtbDwvY29kZT4gaW0gQnJvd3Nlci4gQWxsZSBmcmVp Z2VnZWJlbmVuIERva3VtZW50ZSB3ZXJkZW4gYXV0b21hdGlzY2ggYW5nZXplaWd0LjwvbGk+CiAg ICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPHA+RGVyIGFrdHVlbGxlIFN0YXR1 cyB3aXJkIGluIGRlciBWZXJiaW5kdW5nc2xlaXN0ZSB1bnRlciBkZW0gSGVhZGVyIGFuZ2V6ZWln dC48L3A+CgogICAgICAgICAgICAgICAgPGgyIGlkPSJoZWxwLXNlYXJjaCI+U3VjaGUgJmFtcDsg RmlsdGVyPC9oMj4KICAgICAgICAgICAgICAgIDxwPkRpZSBTdGV1ZXJ1bmdzbGVpc3RlIGJpZXRl dCBtZWhyZXJlIE3DtmdsaWNoa2VpdGVuLCBEb2t1bWVudGUgenUgZmluZGVuOjwvcD4KICAgICAg ICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5TdWNoZmVsZDo8 L3N0cm9uZz4gRHVyY2hzdWNodCBUaXRlbCwgSW5oYWx0LCBLYXRlZ29yaWUgdW5kIFNjaGxhZ3fD tnJ0ZXIgaW4gRWNodHplaXQuPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5L YXRlZ29yaWUtRmlsdGVyPC9zdHJvbmc+ICh6d2VpdGUgWmVpbGUpOiBLbGlja2UgYXVmIGVpbmUg S2F0ZWdvcmllLCB1bSBudXIgZGVyZW4gRG9rdW1lbnRlIGFuenV6ZWlnZW4uIOKAnkFsbGUiIHpl aWd0IGFsbGVzLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+U3RhdHVzLUZp bHRlcjo8L3N0cm9uZz4gRmlsdGVydCBuYWNoIERva3VtZW50ZW5zdGF0dXMgKEVudHd1cmYsIFp1 ciBQcsO8ZnVuZywgRnJlaWdlZ2ViZW4pLjwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgogICAg ICAgICAgICAgICAgPHA+QWxsZSBGaWx0ZXIgbGFzc2VuIHNpY2gga29tYmluaWVyZW4uIERpZSBB bnplaWdlIOKAnlggLyBZIiB6ZWlndCBnZWZpbHRlcnRlIC8gZ2VzYW10ZSBEb2t1bWVudGUuPC9w PgoKICAgICAgICAgICAgICAgIDxoMiBpZD0iaGVscC1kb2NzIj5Eb2t1bWVudGVubGlzdGU8L2gy PgogICAgICAgICAgICAgICAgPHA+RGllIGxpbmtlIFNwYWx0ZSB6ZWlndCBhbGxlIERva3VtZW50 ZSwgZGllIGRlbiBha3R1ZWxsZW4gRmlsdGVybiBlbnRzcHJlY2hlbi48L3A+CiAgICAgICAgICAg ICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+VGl0ZWw6PC9zdHJvbmc+ IEZldHQgZGFyZ2VzdGVsbHQuIERlciBIaW53ZWlzIOKAnltnZXNwZXJydF0iIHplaWd0IGFuLCBk YXNzIGVpbiBhbmRlcmVyIEJlbnV0emVyIGRhcyBEb2t1bWVudCBnZXJhZGUgYmVhcmJlaXRldC48 L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPk1ldGFkYXRlbjo8L3N0cm9uZz4g S2F0ZWdvcmllLUJhZGdlLCBTdGF0dXMtQmFkZ2UgKGZhcmJpZyksIG9wdGlvbmFsIOKAnitNZWRp ZW4iLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+U2NobGFnd8O2cnRlcjo8 L3N0cm9uZz4gQmlzIHp1IDQgVGFncyB3ZXJkZW4gdW50ZXIgZGVuIE1ldGFkYXRlbiBhbmdlemVp Z3QuPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5VbnRlcmFydGlrZWw6PC9z dHJvbmc+IFdlcmRlbiBlaW5nZXLDvGNrdCB1bnRlciBpaHJlbSDDnGJlcmFydGlrZWwgZGFyZ2Vz dGVsbHQgdW5kIG1pdCDigJ7ihrMiIG1hcmtpZXJ0LjwvbGk+CiAgICAgICAgICAgICAgICA8L3Vs PgoKICAgICAgICAgICAgICAgIDxoMiBpZD0iaGVscC1kZXRhaWwiPkRldGFpbGFuc2ljaHQ8L2gy PgogICAgICAgICAgICAgICAgPHA+RGllIHJlY2h0ZSBTcGFsdGUgemVpZ3QgZGVuIGF1c2dld8Ok aGx0ZW4gQXJ0aWtlbCBtaXQgYWxsZW4gRGV0YWlsczo8L3A+CiAgICAgICAgICAgICAgICA8dWw+ CiAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+S29wZmJlcmVpY2g6PC9zdHJvbmc+IFRp dGVsLCBLYXRlZ29yaWUsIFN0YXR1cyAoZmFyYmlnKSwgVmVyc2lvbiwgRXJzdGVsbHVuZ3MtIHVu ZCDDhG5kZXJ1bmdzZGF0dW0sIEVyc3RlbGxlci9CZWFyYmVpdGVyLjwvbGk+CiAgICAgICAgICAg ICAgICAgICAgPGxpPjxzdHJvbmc+U2NobGFnd8O2cnRlcjo8L3N0cm9uZz4gQWxsZSBTY2hsYWd3 w7ZydGVyIGFscyBUYWdzLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+w5xi ZXJhcnRpa2VsIC8gVW50ZXJhcnRpa2VsOjwvc3Ryb25nPiBLbGlja2JhcmUgTGlua3MgenUgdmVy d2FuZHRlbiBBcnRpa2Vsbi48L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPklu aGFsdDo8L3N0cm9uZz4gRGVyIGZvcm1hdGllcnRlIEFydGlrZWx0ZXh0LjwvbGk+CiAgICAgICAg ICAgICAgICAgICAgPGxpPjxzdHJvbmc+TWl0d2lya2VuZGU6PC9zdHJvbmc+IEF1Zmxpc3R1bmcg YWxsZXIgQmVpdHJhZ2VuZGVuIG1pdCBSb2xsZSB1bmQgcHJvemVudHVhbGVtIEFudGVpbC48L2xp PgogICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlByw7xmdW5nc3ZlcmxhdWY6PC9zdHJv bmc+IENocm9ub2xvZ2llIGFsbGVyIEZyZWlnYWJlLS9BYmxlaG51bmdzYWt0aW9uZW4uPC9saT4K ICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5BbmjDpG5nZTo8L3N0cm9uZz4gTWVkaWVu IHVuZCBEYXRlaWVuIG1pdCBWb3JzY2hhdS0vRG93bmxvYWQtTcO2Z2xpY2hrZWl0LjwvbGk+CiAg ICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPGgzPkFrdGlvbnNzY2hhbHRmbMOk Y2hlbjwvaDM+CiAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgPGxpPjxz dHJvbmc+QmVhcmJlaXRlbjo8L3N0cm9uZz4gw5ZmZm5ldCBkZW4gRWRpdG9yIChTY2hyZWlienVn cmlmZiBlcmZvcmRlcmxpY2gpLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+ TMO2c2NoZW46PC9zdHJvbmc+IEVudGZlcm50IGRhcyBEb2t1bWVudCBuYWNoIEJlc3TDpHRpZ3Vu ZyBtaXQgTlctS2VubnVuZy4gR2Vsw7ZzY2h0ZSBEb2t1bWVudGUgc2luZCAyOCBUYWdlIHdpZWRl cmhlcnN0ZWxsYmFyLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+RnJlaWdl YmVuIC8gQWJsZWhuZW46PC9zdHJvbmc+IE51ciBiZWkgU3RhdHVzIOKAnlp1ciBQcsO8ZnVuZyIg dW5kIG1pdCBlbnRzcHJlY2hlbmRlciBCZXJlY2h0aWd1bmcgc2ljaHRiYXIuPC9saT4KICAgICAg ICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICAgICAgPGgyIGlkPSJoZWxwLXRhYmxlIj5UYWJl bGxlbmFuc2ljaHQ8L2gyPgogICAgICAgICAgICAgICAgPHA+S2xpY2tlIGF1ZiA8c3Ryb25nPuKA nlRhYmVsbGUiPC9zdHJvbmc+IGluIGRlciBTdGV1ZXJ1bmdzbGVpc3RlLCB1bSBhbGxlIERva3Vt ZW50ZSBpbiBlaW5lciBzb3J0aWVyYmFyZW4gR2VzYW10w7xiZXJzaWNodCBhbnp1emVpZ2VuLjwv cD4KICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5T cGFsdGVuOjwvc3Ryb25nPiBUaXRlbCwgS2F0ZWdvcmllLCBTdGF0dXMsIEVyc3RlbGxlciwgRXJz dGVsbHQsIEdlw6RuZGVydCwgU2NobGFnd8O2cnRlciwgVmVyc2lvbi48L2xpPgogICAgICAgICAg ICAgICAgICAgIDxsaT48c3Ryb25nPlNvcnRpZXJ1bmc6PC9zdHJvbmc+IEtsaWNrIGF1ZiBlaW5l IFNwYWx0ZW7DvGJlcnNjaHJpZnQgc29ydGllcnQgYXVmc3RlaWdlbmQgKOKWsikgYnp3LiBhYnN0 ZWlnZW5kICjilrwpLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+S2xpY2sg YXVmIGVpbmUgWmVpbGU6PC9zdHJvbmc+IFdlY2hzZWx0IHp1csO8Y2sgenVyIERldGFpbGFuc2lj aHQgdW5kIHplaWd0IGRhcyBnZXfDpGhsdGUgRG9rdW1lbnQuPC9saT4KICAgICAgICAgICAgICAg IDwvdWw+CiAgICAgICAgICAgICAgICA8cD5EaWUgVGFiZWxsZSByZXNwZWt0aWVydCBhbGxlIGFr dGl2ZW4gRmlsdGVyIChLYXRlZ29yaWUsIFN0YXR1cywgU3VjaGUpLjwvcD4KCiAgICAgICAgICAg ICAgICA8aDIgaWQ9ImhlbHAtZWRpdG9yIj5FZGl0b3I8L2gyPgogICAgICAgICAgICAgICAgPHA+ RGVyIEVkaXRvciDDtmZmbmV0IHNpY2ggYWxzIFZvbGxiaWxkLU92ZXJsYXkgYmVpbSBFcnN0ZWxs ZW4gb2RlciBCZWFyYmVpdGVuIGVpbmVzIERva3VtZW50cy48L3A+CiAgICAgICAgICAgICAgICA8 aDM+TWV0YWRhdGVuIChvYmVyZSBaZWlsZW4pPC9oMz4KICAgICAgICAgICAgICAgIDx1bD4KICAg ICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5UaXRlbDo8L3N0cm9uZz4gUGZsaWNodGZlbGQg 4oCTIGRlciBEb2t1bWVudG5hbWUuPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9u Zz5LYXRlZ29yaWU6PC9zdHJvbmc+IEF1c3dhaGwgZGVyIE9iZXJrYXRlZ29yaWUuPC9saT4KICAg ICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5TdGF0dXM6PC9zdHJvbmc+IEVudHd1cmYsIFp1 ciBQcsO8ZnVuZywgRnJlaWdlZ2ViZW4gKGplIG5hY2ggQmVyZWNodGlndW5nKS48L2xpPgogICAg ICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlZlcnNpb246PC9zdHJvbmc+IFdpcmQgYXV0b21h dGlzY2ggYmVyZWNobmV0LiBLbGlja2UgaW4gZGVyIERldGFpbGFuc2ljaHQgYXVmIGRpZSBWZXJz aW9uc251bW1lciBmw7xyIGVpbmUgRXJrbMOkcnVuZy48L2xpPgogICAgICAgICAgICAgICAgICAg IDxsaT48c3Ryb25nPsOcYmVyYXJ0aWtlbDo8L3N0cm9uZz4gT3B0aW9uYWwg4oCTIG9yZG5ldCBk YXMgRG9rdW1lbnQgYWxzIFVudGVyYXJ0aWtlbCBlaW5lbSBiZXN0ZWhlbmRlbiBEb2t1bWVudCB6 dS48L2xpPgogICAgICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgICAgICA8aDM+VmVyc2lv bmllcnVuZzwvaDM+CiAgICAgICAgICAgICAgICA8cD5EaWUgQXJ0aWtlbHZlcnNpb24gd2lyZCBh dXRvbWF0aXNjaCBiZWltIFNwZWljaGVybiBiZXJlY2huZXQuIERpZSBaYWhsIDxzdHJvbmc+dm9y PC9zdHJvbmc+IGRlbSBQdW5rdCB6ZWlndCwgd2llIG9mdCBkZXIgQXJ0aWtlbCBmcmVpZ2VnZWJl biB3dXJkZS4gRGllIFphaGwgPHN0cm9uZz5uYWNoPC9zdHJvbmc+IGRlbSBQdW5rdCB6ZWlndCBk aWUgQmVhcmJlaXR1bmdlbiBzZWl0IGRlciBsZXR6dGVuIEZyZWlnYWJlLjwvcD4KICAgICAgICAg ICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz52MC4xLCB2MC4yLCB2 MC4zLCAuLi46PC9zdHJvbmc+IEVudHd1cmZzcGhhc2Ug4oCTIGplZGUgQmVhcmJlaXR1bmcgesOk aGx0ICswLjE8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnYxLjA6PC9zdHJv bmc+IEVyc3RlIEZyZWlnYWJlPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz52 MS4xLCB2MS4yLCAuLi46PC9zdHJvbmc+IMOcYmVyYXJiZWl0dW5nZW4gbmFjaCBGcmVpZ2FiZTwv bGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+djIuMCwgdjMuMCwgLi4uOjwvc3Ry b25nPiBKZWRlIHdlaXRlcmUgRnJlaWdhYmU8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAg ICAgICAgICAgICAgIDxwPkJlaXNwaWVsOiA8c3Ryb25nPnYyLjU8L3N0cm9uZz4gYmVkZXV0ZXQ6 IHp3ZWltYWwgZnJlaWdlZ2ViZW4sIGRhbmFjaCA1IEJlYXJiZWl0dW5nZW4uIEtsaWNrZSBpbiBk ZXIgRGV0YWlsYW5zaWNodCBhdWYgZGllIFZlcnNpb25zbnVtbWVyIGbDvHIgZWluZSBhdXNmw7xo cmxpY2hlIEVya2zDpHJ1bmcuPC9wPgoKICAgICAgICAgICAgICAgIDxoMyBpZD0iaGVscC1rZXl3 b3JkcyI+U2NobGFnd8O2cnRlcjwvaDM+CiAgICAgICAgICAgICAgICA8cD5TY2hsYWd3w7ZydGVy IGhlbGZlbiBkYWJlaSwgQXJ0aWtlbCBzY2huZWxsZXIgenUgZmluZGVuIHVuZCB0aGVtYXRpc2No IHp1IHZlcmtuw7xwZmVuLjwvcD4KICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAg ICAgICA8bGk+R2liIGVpbiBTY2hsYWd3b3J0IGVpbiB1bmQgZHLDvGNrZSA8a2JkPkVudGVyPC9r YmQ+IG9kZXIgPGtiZD4sPC9rYmQ+IHp1bSBIaW56dWbDvGdlbi48L2xpPgogICAgICAgICAgICAg ICAgICAgIDxsaT48c3Ryb25nPkF1dG9jb21wbGV0ZTo8L3N0cm9uZz4gQmVpbSBUaXBwZW4gd2Vy ZGVuIHBhc3NlbmRlIFNjaGxhZ3fDtnJ0ZXIgYXVzIGFsbGVuIERva3VtZW50ZW4gdm9yZ2VzY2hs YWdlbi48L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlZvcnNjaGzDpGdlOjwv c3Ryb25nPiBVbnRlcmhhbGIgZGVzIEVpbmdhYmVmZWxkcyB3ZXJkZW4gdGhlbWVudmVyd2FuZHRl IFNjaGxhZ3fDtnJ0ZXIgYWxzIGtsaWNrYmFyZSBDaGlwcyBhbmdlemVpZ3Qg4oCTIGJhc2llcmVu ZCBhdWYgS2F0ZWdvcmllLCB2ZXJ3YW5kdGVuIEFydGlrZWxuIHVuZCBiZXJlaXRzIGdlc2V0enRl biBUYWdzLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPktsaWNrZSBhdWYgPHN0cm9uZz7D lzwvc3Ryb25nPiBhbiBlaW5lbSBUYWcgenVtIEVudGZlcm5lbiwgb2RlciBkcsO8Y2tlIDxrYmQ+ QmFja3NwYWNlPC9rYmQ+IGJlaSBsZWVyZW0gRWluZ2FiZWZlbGQuPC9saT4KICAgICAgICAgICAg ICAgIDwvdWw+CgogICAgICAgICAgICAgICAgPGgzIGlkPSJoZWxwLXBhcmVudCI+VW50ZXJhcnRp a2VsPC9oMz4KICAgICAgICAgICAgICAgIDxwPsOcYmVyIGRhcyBEcm9wZG93biDigJ7DnGJlcmFy dGlrZWwiIGthbm5zdCBkdSBlaW4gRG9rdW1lbnQgYWxzIEVyZ8Okbnp1bmcgZWluZXMgYmVzdGVo ZW5kZW4gQXJ0aWtlbHMgYW5sZWdlbi48L3A+CiAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAg ICAgICAgICAgICAgPGxpPlVudGVyYXJ0aWtlbCB3ZXJkZW4gaW4gZGVyIERva3VtZW50ZW5saXN0 ZSBlaW5nZXLDvGNrdCB1bnRlciBpaHJlbSDDnGJlcmFydGlrZWwgYW5nZXplaWd0LjwvbGk+CiAg ICAgICAgICAgICAgICAgICAgPGxpPkluIGRlciBEZXRhaWxhbnNpY2h0IHdlcmRlbiDDnGJlci0g dW5kIFVudGVyYXJ0aWtlbCBhbHMga2xpY2tiYXJlIExpbmtzIGRhcmdlc3RlbGx0LjwvbGk+CiAg ICAgICAgICAgICAgICAgICAgPGxpPlppcmtlbHZlcndlaXNlIHdlcmRlbiBhdXRvbWF0aXNjaCB2 ZXJoaW5kZXJ0LjwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgICAgIDxo MyBpZD0iaGVscC1tZWRpYSI+TWVkaWVuIGVpbmbDvGdlbjwvaDM+CiAgICAgICAgICAgICAgICA8 cD7DnGJlciBkZW4gPHN0cm9uZz5EYXRlaS1CdXR0b248L3N0cm9uZz4gaW4gZGVyIFdlcmt6ZXVn bGVpc3RlIGthbm5zdCBkdSBEYXRlaWVuIGhvY2hsYWRlbi4gTWVocmZhY2hhdXN3YWhsIGlzdCBt w7ZnbGljaCDigJMgaGFsdGUgZGF6dSA8a2JkPlN0cmc8L2tiZD4gZ2VkcsO8Y2t0LjwvcD4KCiAg ICAgICAgICAgICAgICA8aDQ+VW50ZXJzdMO8dHp0ZSBEYXRlaXR5cGVuPC9oND4KICAgICAgICAg ICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5CaWxkZXI6PC9zdHJv bmc+IFBORywgSlBHLCBKUEVHLCBHSUYsIFNWRywgV2ViUDwvbGk+CiAgICAgICAgICAgICAgICAg ICAgPGxpPjxzdHJvbmc+UERGLURva3VtZW50ZTo8L3N0cm9uZz4gQWxzIERvd25sb2FkLUxpbmss IGVpbmdlYmV0dGV0ZSBWb3JzY2hhdSBvZGVyIEFuaGFuZzwvbGk+CiAgICAgICAgICAgICAgICAg ICAgPGxpPjxzdHJvbmc+VmlkZW9zOjwvc3Ryb25nPiBNUDQsIFdlYk08L2xpPgogICAgICAgICAg ICAgICAgICAgIDxsaT48c3Ryb25nPkF1ZGlvOjwvc3Ryb25nPiBNUDMsIFdBViwgT0dHPC9saT4K ICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5PZmZpY2UtRG9rdW1lbnRlOjwvc3Ryb25n PiBXb3JkIChET0NYKSwgRXhjZWwgKFhMU1gpLCBQb3dlclBvaW50IChQUFRYKTwvbGk+CiAgICAg ICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgICAgIDxoND5XaWUgd2VyZGVuIE1lZGllbiBl aW5nZWbDvGd0PzwvaDQ+CiAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAg PGxpPjxzdHJvbmc+RGF0ZWktQnV0dG9uOjwvc3Ryb25nPiDDlmZmbmV0IGRlbiBEYXRlaWRpYWxv ZyDigJMgZHUga2FubnN0IGVpbmUgb2RlciBtZWhyZXJlIERhdGVpZW4gZ2xlaWNoemVpdGlnIGF1 c3fDpGhsZW48L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPkVpbmbDvGdlbiBh dXMgWndpc2NoZW5hYmxhZ2U6PC9zdHJvbmc+IEJpbGRlciBhdXMgU2NyZWVuc2hvdHMgb2RlciBr b3BpZXJ0ZW4gV2Vic2VpdGVuIHdlcmRlbiBhdXRvbWF0aXNjaCBoZXJ1bnRlcmdlbGFkZW4gdW5k IGxva2FsIGdlc3BlaWNoZXJ0PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5E cmFnICZhbXA7IERyb3A6PC9zdHJvbmc+IERhdGVpZW4ga8O2bm5lbiBkaXJla3QgaW4gZGVuIEVk aXRvciBnZXpvZ2VuIHdlcmRlbjwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgoKICAgICAgICAg ICAgICAgIDxoND5EYXJzdGVsbHVuZ3Ntb2RpPC9oND4KICAgICAgICAgICAgICAgIDx1bD4KICAg ICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5Bbmhhbmc6PC9zdHJvbmc+IERhdGVpIHdpcmQg dW50ZXJoYWxiIGRlcyBBcnRpa2VscyBhbHMgRG93bmxvYWQtTGluayBhbmdlemVpZ3Q8L2xpPgog ICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPklubGluZSAoQmlsZCk6PC9zdHJvbmc+IEJp bGQgd2lyZCBkaXJla3QgaW0gVGV4dCBhbmdlemVpZ3Qg4oCTIGFscyBWb3JzY2hhdWJpbGQgb2Rl ciBpbiBPcmlnaW5hbGdyw7bDn2UgKG1heC4gNjQww5c0ODAgcHgpPC9saT4KICAgICAgICAgICAg ICAgICAgICA8bGk+PHN0cm9uZz5QREYtTGluazo8L3N0cm9uZz4gS2xpY2tiYXJlciBMaW5rLCBk ZXIgZGFzIFBERiBpbiBlaW5lbSBWb3JzY2hhdS1GZW5zdGVyIMO2ZmZuZXQ8L2xpPgogICAgICAg ICAgICAgICAgICAgIDxsaT48c3Ryb25nPlBERiBlaW5nZWJldHRldDo8L3N0cm9uZz4gUERGIHdp cmQgYWxzIHNjcm9sbGJhcmVyIFJhaG1lbiBkaXJla3QgaW0gQXJ0aWtlbCBhbmdlemVpZ3Q8L2xp PgogICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlZpZGVvL0F1ZGlvL09mZmljZTo8L3N0 cm9uZz4gSWNvbi1FbGVtZW50IGltIFRleHQg4oCTIEtsaWNrIMO2ZmZuZXQgZGllIFZvcnNjaGF1 PC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICAgICAgPGg0Pk1lZGllbiBi ZWFyYmVpdGVuPC9oND4KICAgICAgICAgICAgICAgIDxwPktsaWNrZSBpbSBFZGl0b3IgYXVmIGVp biBlaW5nZWbDvGd0ZXMgTWVkaXVtLCB1bSBlcyB6dSBiZWFyYmVpdGVuOjwvcD4KICAgICAgICAg ICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5BdXNyaWNodHVuZzo8 L3N0cm9uZz4gTGlua3MsIE1pdHRpZyBvZGVyIFJlY2h0czwvbGk+CiAgICAgICAgICAgICAgICAg ICAgPGxpPjxzdHJvbmc+VW50ZXJ0aXRlbDo8L3N0cm9uZz4gT3B0aW9uYWxlIEJlc2NocmlmdHVu ZyB1bnRlciBkZW0gTWVkaXVtPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5F bnRmZXJuZW46PC9zdHJvbmc+IE1lZGl1bSBhdXMgZGVtIEFydGlrZWwgbMO2c2NoZW4gKGRpZSBE YXRlaSBibGVpYnQgaW0gTWVkaWVuLU9yZG5lcik8L2xpPgogICAgICAgICAgICAgICAgPC91bD4K CiAgICAgICAgICAgICAgICA8aDM+V2Vya3pldWdsZWlzdGU8L2gzPgogICAgICAgICAgICAgICAg PHVsPgogICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlLDvGNrZ8OkbmdpZyAvIFdpZWRl cmhvbGVuOjwvc3Ryb25nPiDihrYgLyDihrc8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48 c3Ryb25nPlRleHRmb3JtYXRpZXJ1bmc6PC9zdHJvbmc+IEZldHQgKEIpLCBLdXJzaXYgKEkpLCBV bnRlcnN0cmljaGVuIChVKTwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+TGlz dGVuOjwvc3Ryb25nPiBBdWZ6w6RobHVuZyAo4oCiKSwgTnVtbWVyaWVydGUgTGlzdGUgKDEuKTwv bGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+U2NocmlmdGdyw7bDn2U6PC9zdHJv bmc+IDEy4oCTMjAgcHg8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlRleHRm YXJiZTo8L3N0cm9uZz4gNiB2b3JkZWZpbmllcnRlIEZhcmJlbjwvbGk+CiAgICAgICAgICAgICAg ICAgICAgPGxpPjxzdHJvbmc+QWtrb3JkZW9uOjwvc3Ryb25nPiBBdWZrbGFwcGJhcmUgVGV4dGJl cmVpY2hlIOKAkyBpZGVhbCBmw7xyIGVyZ8OkbnplbmRlIEluZm9ybWF0aW9uZW4sIGRpZSBuaWNo dCBzb2ZvcnQgc2ljaHRiYXIgc2VpbiBtw7xzc2VuPC9saT4KICAgICAgICAgICAgICAgICAgICA8 bGk+PHN0cm9uZz5GQVE6PC9zdHJvbmc+IEZyYWdlLUFudHdvcnQtQmVyZWljaGUg4oCTIG1laHJl cmUgRnJhZ2VuIG1pdCBhdXNrbGFwcGJhcmVuIEFudHdvcnRlbiBpbiBlaW5lbSBCbG9jazwvbGk+ CiAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+VGFiZWxsZTo8L3N0cm9uZz4gU29ydGll cmJhcmUgVGFiZWxsZW4gbWl0IG9wdGlvbmFsZW4gU3BhbHRlbi0gdW5kIFplaWxlbsO8YmVyc2No cmlmdGVuPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5BcnRpa2VscmVmZXJl bnogKCMpOjwvc3Ryb25nPiBUaXBwZSA8a2JkPiM8L2tiZD4gaW0gVGV4dCwgdW0gYXVmIGVpbmVu IGFuZGVyZW4gQXJ0aWtlbCB6dSB2ZXJsaW5rZW4g4oCTIG1pdCDDnGJlcnNjaHJpZnRlbi1BdXN3 YWhsIGFscyBTcHJ1bmd6aWVsPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5E YXRlaTo8L3N0cm9uZz4gQmlsZGVyLCBQREZzLCBWaWRlb3MsIEF1ZGlvIHVuZCBPZmZpY2UtRGF0 ZWllbiBob2NobGFkZW4gdW5kIGltIEFydGlrZWwgZWluYmV0dGVuPC9saT4KICAgICAgICAgICAg ICAgIDwvdWw+CgogICAgICAgICAgICAgICAgPGgzPkJlaXRyYWdzYXJ0PC9oMz4KICAgICAgICAg ICAgICAgIDxwPkJlaW0gU3BlaWNoZXJuIGVpbmVzIGJlc3RlaGVuZGVuIERva3VtZW50cyB3aXJz dCBkdSBuYWNoIGRlciBBcnQgZGVpbmVzIEJlaXRyYWdzIGdlZnJhZ3Q6PC9wPgogICAgICAgICAg ICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPkF1dG9yOjwvc3Ryb25n PiBTaWduaWZpa2FudGUgaW5oYWx0bGljaGUgRXJzdGVsbHVuZy48L2xpPgogICAgICAgICAgICAg ICAgICAgIDxsaT48c3Ryb25nPlJlZGFrdGlvbjo8L3N0cm9uZz4gUmVjaHRzY2hyZWlidW5nLCBG b3JtYXRpZXJ1bmcsIGtsZWluZXJlIEtvcnJla3R1cmVuLjwvbGk+CiAgICAgICAgICAgICAgICAg ICAgPGxpPjxzdHJvbmc+UmV2aWV3Ojwvc3Ryb25nPiBGYWNobGljaGUgUHLDvGZ1bmcgdW5kIEFu bWVya3VuZ2VuLjwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPHA+ RGllc2UgQW5nYWJlbiBmbGllw59lbiBpbiBkaWUgTWl0d2lya2VuZGVuLUFuemVpZ2UgaW0gRG9r dW1lbnQgZWluLjwvcD4KCiAgICAgICAgICAgICAgICA8aDIgaWQ9ImhlbHAtZGVsZXRlIj5Mw7Zz Y2hlbiAmYW1wOyBQYXBpZXJrb3JiPC9oMj4KICAgICAgICAgICAgICAgIDxwPkJlaW0gTMO2c2No ZW4gZWluZXMgRG9rdW1lbnRzIHdpcmQgZWluIEJlc3TDpHRpZ3VuZ3NkaWFsb2cgYW5nZXplaWd0 OjwvcD4KICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICA8bGk+RHUgbXVz c3QgZGVpbmUgPHN0cm9uZz5OVy1LZW5udW5nPC9zdHJvbmc+IHp1ciBJZGVudGlmaWthdGlvbiBl aW5nZWJlbi48L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT5EYXMgTMO2c2NoZXJlaWduaXMg d2lyZCBwcm90b2tvbGxpZXJ0IChXZXIsIFdhbm4sIFdlbGNoZXMgRG9rdW1lbnQpLjwvbGk+CiAg ICAgICAgICAgICAgICAgICAgPGxpPkdlbMO2c2NodGUgRG9rdW1lbnRlIHdlcmRlbiBpbiBkZW4g PHN0cm9uZz5QYXBpZXJrb3JiPC9zdHJvbmc+IHZlcnNjaG9iZW4gdW5kIHNpbmQgPHN0cm9uZz4y OCBUYWdlPC9zdHJvbmc+IGxhbmcgd2llZGVyaGVyc3RlbGxiYXIuPC9saT4KICAgICAgICAgICAg ICAgIDwvdWw+CiAgICAgICAgICAgICAgICA8cD5HZWzDtnNjaHRlIERva3VtZW50ZSB3ZXJkZW4g MjggVGFnZSBpbSBQYXBpZXJrb3JiIGF1ZmJld2FocnQgdW5kIGvDtm5uZW4gaW4gZGllc2VtIFpl aXRyYXVtIHdpZWRlcmhlcmdlc3RlbGx0IHdlcmRlbi48L3A+CgogICAgICAgICAgICAgICAgPGgy IGlkPSJoZWxwLXRoZW1lIj5UYWcvTmFjaHQtTW9kdXM8L2gyPgogICAgICAgICAgICAgICAgPHA+ S2xpY2tlIGF1ZiBkZW4gQnV0dG9uIG9iZW4gcmVjaHRzIGltIEhlYWRlciwgdW0gendpc2NoZW4g aGVsbGVtIHVuZCBkdW5rbGVtIERlc2lnbiB6dSB3ZWNoc2Vsbi48L3A+CiAgICAgICAgICAgICAg ICA8cD5EZWluZSBBdXN3YWhsIHdpcmQgaW0gQnJvd3NlciBnZXNwZWljaGVydCB1bmQgYmVpbSBu w6RjaHN0ZW4gQmVzdWNoIGF1dG9tYXRpc2NoIHdpZWRlcmhlcmdlc3RlbGx0LjwvcD4KCiAgICAg ICAgICAgICAgICA8aDM+RGlhbG9nZmVuc3RlciBzY2hsaWXDn2VuPC9oMz4KICAgICAgICAgICAg ICAgIDxwPkRpZSBtZWlzdGVuIERpYWxvZ2ZlbnN0ZXIgKEhpbGZlLCBWZXJzaW9uc2hpc3Rvcmll LCBGcmVpZ2FiZXZlcmFudHdvcnRsaWNoZSkga8O2bm5lbiBkdXJjaCBlaW5lbiBLbGljayBhdWYg ZGVuIEJlcmVpY2ggYXXDn2VyaGFsYiBkZXMgRGlhbG9ncyBnZXNjaGxvc3NlbiB3ZXJkZW4uIERp YWxvZ2UgbWl0IEVpbmdhYmVmZWxkZXJuIChFZGl0b3IsIEzDtnNjaGJlc3TDpHRpZ3VuZykgZXJm b3JkZXJuIGV4cGxpeml0ZXMgU3BlaWNoZXJuIG9kZXIgQWJicmVjaGVuLjwvcD4KCiAgICAgICAg ICAgICAgICA8aDIgaWQ9ImhlbHAtc2hvcnRjdXRzIj5UYXN0ZW5rw7xyemVsPC9oMj4KICAgICAg ICAgICAgICAgIDxoMz5JbSBFZGl0b3I8L2gzPgogICAgICAgICAgICAgICAgPHVsPgogICAgICAg ICAgICAgICAgICAgIDxsaT48a2JkPlN0cmc8L2tiZD4rPGtiZD5aPC9rYmQ+IOKAkyBSw7xja2fD pG5naWc8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48a2JkPlN0cmc8L2tiZD4rPGtiZD5Z PC9rYmQ+IC8gPGtiZD5TdHJnPC9rYmQ+KzxrYmQ+U2hpZnQ8L2tiZD4rPGtiZD5aPC9rYmQ+IOKA kyBXaWVkZXJob2xlbjwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAg PGgzPlNjaGxhZ3fDtnJ0ZXItRWluZ2FiZTwvaDM+CiAgICAgICAgICAgICAgICA8dWw+CiAgICAg ICAgICAgICAgICAgICAgPGxpPjxrYmQ+RW50ZXI8L2tiZD4gb2RlciA8a2JkPiw8L2tiZD4g4oCT IFNjaGxhZ3dvcnQgaGluenVmw7xnZW48L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48a2Jk PkJhY2tzcGFjZTwva2JkPiAoYmVpIGxlZXJlbSBGZWxkKSDigJMgTGV0enRlcyBTY2hsYWd3b3J0 IGVudGZlcm5lbjwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPGgz PkFsbGdlbWVpbjwvaDM+CiAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAg PGxpPjxrYmQ+RXNjPC9rYmQ+IOKAkyBNZWRpZW4tVm9sbGFuc2ljaHQgc2NobGllw59lbjwvbGk+ CiAgICAgICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgICAgIDxoMiBpZD0iaGVscC12ZXJz aW9uIj5WZXJzaW9uc2hpc3RvcmllPC9oMj4KICAgICAgICAgICAgICAgIDxwPktsaWNrZSBhdWYg ZGllIFZlcnNpb25zbnVtbWVyICh6LiBCLiA8c3Ryb25nPnYxLjA8L3N0cm9uZz4pIGltIEZvb3Rl ciwgdW0gZGllIHZvbGxzdMOkbmRpZ2UgVmVyc2lvbnNoaXN0b3JpZSBhbnp1emVpZ2VuLjwvcD4K ICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz52MS4w PC9zdHJvbmc+IOKAkyBPZmZpemllbGxlIMOcYmVyZ2FiZTogTGVzZW1vZHVzLCBFZGl0b3ItS29t cG9uZW50ZW4sIFZlcnNpb25pZXJ1bmcsIEFkbWluLUFubGVpdHVuZzwvbGk+CiAgICAgICAgICAg ICAgICAgICAgPGxpPjxzdHJvbmc+djAuOTwvc3Ryb25nPiDigJMgQ3Jvc3NsaW5rcywgUmV2aXNp b25zaGlzdG9yaWUsIFNjaGxhZ3dvcnQtVmVyd2FsdHVuZzwvbGk+CiAgICAgICAgICAgICAgICAg ICAgPGxpPjxzdHJvbmc+djAuODwvc3Ryb25nPiDigJMgUmV2aWV3LVdvcmtmbG93LCBUYWctL05h Y2h0LU1vZHVzPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz52MC43PC9zdHJv bmc+IOKAkyBHb3Zlcm5hbmNlLCBMb2NraW5nLCBWZXJzY2hsw7xzc2VsdW5nLCBTdGF0aXN0aWs8 L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnYwLjY8L3N0cm9uZz4g4oCTIEZy ZWlnYWJlLVdvcmtmbG93LCBNZWRpZW4tVXBsb2FkPC9saT4KICAgICAgICAgICAgICAgICAgICA8 bGk+PHN0cm9uZz52MC41PC9zdHJvbmc+IOKAkyBXWVNJV1lHLUVkaXRvciwgVW50ZXJhcnRpa2Vs PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz52MC40PC9zdHJvbmc+IOKAkyBT aW5nbGUtRmlsZS1BcHAsIFBvd2VyU2hlbGwtU2VydmVyPC9saT4KICAgICAgICAgICAgICAgICAg ICA8bGk+PHN0cm9uZz52MC4xPC9zdHJvbmc+IOKAkyBFcnN0ZXIgUHJvdG90eXA8L2xpPgogICAg ICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgICAgICA8aDIgaWQ9ImhlbHAtY29udGFjdCI+ RnJhZ2VuIHVuZCBVbnRlcnN0w7x0enVuZzwvaDI+CiAgICAgICAgICAgICAgICA8cD5CZWkgPHN0 cm9uZz50ZWNobmlzY2hlbiBQcm9ibGVtZW48L3N0cm9uZz4gKEZlaGxlcm1lbGR1bmdlbiwgRGFy c3RlbGx1bmdzZmVobGVyLCBBYnN0w7xyemUpIHN0ZWh0IGRlciB0ZWNobmlzY2hlIFN1cHBvcnQg w7xiZXIgZGFzIFZlcndhbHR1bmdzcGFuZWwgenVyIFZlcmbDvGd1bmcuPC9wPgogICAgICAgICAg ICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6OHB4OyI+QmVpIEZyYWdlbiBydW5kIHVtIGRlbiA8 c3Ryb25nPkVyc3RlbGx1bmdzcHJvemVzcywgRnJlaWdhYmUtV29ya2Zsb3cgb2RlciBpbmhhbHRs aWNoZSBUaGVtZW48L3N0cm9uZz4gd2VuZGUgZGljaCBiaXR0ZSBhbiBkaWUgZsO8ciBkZWluZSBL YXRlZ29yaWUgenVzdMOkbmRpZ2VuIDxzdHJvbmc+RnJlaWdhYmV2ZXJhbnR3b3J0bGljaGVuPC9z dHJvbmc+IG9kZXIgZGllIDxzdHJvbmc+RmFjaGF1ZnNpY2h0PC9zdHJvbmc+LiBEdSBmaW5kZXN0 IGRpZSBadXN0w6RuZGlna2VpdGVuIMO8YmVyIGRlbiBMaW5rIOKAnkZyZWlnYWJldmVyYW50d29y dGxpY2hlIiBpbSBGb290ZXIuPC9wPgoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwv ZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cgo8IS0tIFN0YXRpc2NoZXIgSW5kZXggZnVl ciBmaWxlOi8vIExlc2Vtb2R1cyAod2lyZCB2b20gU2VydmVyIGF1dG9tYXRpc2NoIGFrdHVhbGlz aWVydCkgLS0+CjxzY3JpcHQgc3JjPSJkYXRhL2luZGV4LmpzIiBvbmVycm9yPSIiPjwvc2NyaXB0 PgoKPHNjcmlwdD4KLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gRC5SLkkuVi5FLiBQb3J0YWwg djEuMCAtIEtvbXBsZXR0ZSBBcHAtTG9naWsKLy8gRmlsZSBTeXN0ZW0gQWNjZXNzIEFQSSArIEpT T04tYmFzaWVydGUgRG9rdW1lbnRlbnZlcndhbHR1bmcKLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ci8vID09PT09PT09PT09PT09PT09PT09PSBUSEVNRSBUT0dHTEUgPT09PT09PT09PT09PT09PT09 PT09CgpmdW5jdGlvbiB0b2dnbGVUaGVtZSgpIHsKICAgIGNvbnN0IGN1cnJlbnQgPSBkb2N1bWVu dC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJyk7CiAgICBjb25zdCBu ZXh0ID0gY3VycmVudCA9PT0gJ25pZ2h0JyA/ICdkYXknIDogJ25pZ2h0JzsKICAgIGRvY3VtZW50 LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnLCBuZXh0KTsKICAgIHRy eSB7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdkcml2ZS10aGVtZScsIG5leHQpOyB9IGNhdGNoKGUp IHt9Cn0KCihmdW5jdGlvbiBpbml0VGhlbWUoKSB7CiAgICB2YXIgc2F2ZWQgPSBudWxsOwogICAg dHJ5IHsgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZHJpdmUtdGhlbWUnKTsgfSBjYXRj aChlKSB7fQogICAgaWYgKHNhdmVkID09PSAnbmlnaHQnKSB7CiAgICAgICAgZG9jdW1lbnQuZG9j dW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS10aGVtZScsICduaWdodCcpOwogICAgfQp9 KSgpOwoKLy8gPT09PT09PT09PT09PT09PT09PT09IEhJTEZFLU1PREFMID09PT09PT09PT09PT09 PT09PT09PQoKdmFyIF9oZWxwT3JpZ2luYWxDb250ZW50ID0gJyc7CgpmdW5jdGlvbiBzaG93SGVs cCgpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWxwTW9kYWwnKS5jbGFzc0xpc3Qu YWRkKCdhY3RpdmUnKTsKICAgIHZhciBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hl bHBCb2R5Jyk7CiAgICBib2R5LnNjcm9sbFRvcCA9IDA7CiAgICBib2R5LmNvbnRlbnRFZGl0YWJs ZSA9ICdmYWxzZSc7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVscEVkaXRCYXInKS5j bGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgIC8vIEVkaXQtQnV0dG9uIG51ciBmdWVyIFN1 cGVyVXNlciBpbSBTZXJ2ZXItTW9kdXMgYW56ZWlnZW4KICAgIHZhciBlZGl0QnRuID0gZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ2hlbHBFZGl0QnRuJyk7CiAgICB2YXIgY2FuRWRpdCA9IGZhbHNl OwogICAgdHJ5IHsgY2FuRWRpdCA9IERyaXZlRlMubW9kZSA9PT0gJ3NlcnZlcicgJiYgRHJpdmVH b3Zlcm5hbmNlLmlzU3VwZXJVc2VyKCk7IH0gY2F0Y2goZSkge30KICAgIGVkaXRCdG4uc3R5bGUu ZGlzcGxheSA9IGNhbkVkaXQgPyAnYmxvY2snIDogJ25vbmUnOwogICAgX3VwZGF0ZUhlbHBUb2NB Y3RpdmUoKTsKICAgIGJvZHkub25zY3JvbGwgPSBfdXBkYXRlSGVscFRvY0FjdGl2ZTsKfQoKZnVu Y3Rpb24gY2xvc2VIZWxwKCkgewogICAgdmFyIGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgnaGVscEJvZHknKTsKICAgIGJvZHkuY29udGVudEVkaXRhYmxlID0gJ2ZhbHNlJzsKICAgIGRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWxwRWRpdEJhcicpLmNsYXNzTGlzdC5yZW1vdmUoJ2Fj dGl2ZScpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlbHBNb2RhbCcpLmNsYXNzTGlz dC5yZW1vdmUoJ2FjdGl2ZScpOwp9CgpmdW5jdGlvbiBzdGFydEVkaXRIZWxwKCkgewogICAgdmFy IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVscEJvZHknKTsKICAgIF9oZWxwT3Jp Z2luYWxDb250ZW50ID0gYm9keS5pbm5lckhUTUw7CiAgICBib2R5LmNvbnRlbnRFZGl0YWJsZSA9 ICd0cnVlJzsKICAgIGJvZHkuZm9jdXMoKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdo ZWxwRWRpdEJhcicpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQoJ2hlbHBFZGl0QnRuJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKfQoKZnVuY3Rp b24gY2FuY2VsRWRpdEhlbHAoKSB7CiAgICB2YXIgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRC eUlkKCdoZWxwQm9keScpOwogICAgYm9keS5pbm5lckhUTUwgPSBfaGVscE9yaWdpbmFsQ29udGVu dDsKICAgIGJvZHkuY29udGVudEVkaXRhYmxlID0gJ2ZhbHNlJzsKICAgIGRvY3VtZW50LmdldEVs ZW1lbnRCeUlkKCdoZWxwRWRpdEJhcicpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAg ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlbHBFZGl0QnRuJykuc3R5bGUuZGlzcGxheSA9ICcn OwogICAgc2hvd1RvYXN0KCdCZWFyYmVpdHVuZyBhYmdlYnJvY2hlbicsICdpbmZvJyk7Cn0KCmZ1 bmN0aW9uIHNhdmVFZGl0SGVscCgpIHsKICAgIHZhciBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoJ2hlbHBCb2R5Jyk7CiAgICB2YXIgY29udGVudCA9IGJvZHkuaW5uZXJIVE1MOwogICAg Ym9keS5jb250ZW50RWRpdGFibGUgPSAnZmFsc2UnOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ2hlbHBFZGl0QmFyJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICBkb2N1bWVu dC5nZXRFbGVtZW50QnlJZCgnaGVscEVkaXRCdG4nKS5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAv LyBQZXJzaXN0aWVyZW4KICAgIERyaXZlR292ZXJuYW5jZS5zYXZlSGVscENvbnRlbnQoKTsKICAg IC8vIFRPQyBha3R1YWxpc2llcmVuIGJhc2llcmVuZCBhdWYgZGVuIGgyL2gzIElEcwogICAgX3Jl YnVpbGRIZWxwVG9jKCk7CiAgICBzaG93VG9hc3QoJ0hpbGZlLUluaGFsdCBnZXNwZWljaGVydCcs ICdzdWNjZXNzJyk7Cn0KCmZ1bmN0aW9uIF9yZWJ1aWxkSGVscFRvYygpIHsKICAgIHZhciBib2R5 ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlbHBCb2R5Jyk7CiAgICB2YXIgdG9jID0gZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlbHBUb2MnKTsKICAgIHZhciBoZWFkaW5ncyA9IGJvZHku cXVlcnlTZWxlY3RvckFsbCgnaDJbaWRdLCBoM1tpZF0nKTsKICAgIHZhciBodG1sID0gJzxkaXYg Y2xhc3M9ImhlbHAtdG9jLXRpdGxlIj5IaWxmZSAmYW1wOyBBbmxlaXR1bmc8L2Rpdj4nOwogICAg aGVhZGluZ3MuZm9yRWFjaChmdW5jdGlvbihoKSB7CiAgICAgICAgdmFyIGlzU3ViID0gaC50YWdO YW1lID09PSAnSDMnOwogICAgICAgIHZhciBzYWZlSWQgPSBoLmlkLnJlcGxhY2UoL1teYS16QS1a MC05XC1fXS9nLCAnJyk7CiAgICAgICAgaHRtbCArPSAnPGEgaHJlZj0iIycgKyBzYWZlSWQgKyAn IiBkYXRhLXNlY3Rpb249IicgKyBzYWZlSWQgKyAnIicgKyAoaXNTdWIgPyAnIGNsYXNzPSJzdWIi JyA6ICcnKSArICc+JyArIGgudGV4dENvbnRlbnQgKyAnPC9hPic7CiAgICB9KTsKICAgIHRvYy5p bm5lckhUTUwgPSBodG1sOwp9CgpmdW5jdGlvbiBfdXBkYXRlSGVscFRvY0FjdGl2ZSgpIHsKICAg IHZhciBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlbHBCb2R5Jyk7CiAgICB2YXIg c2VjdGlvbnMgPSBib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJ2gyW2lkXSwgaDNbaWRdJyk7CiAgICB2 YXIgc2Nyb2xsVG9wID0gYm9keS5zY3JvbGxUb3AgKyA0MDsKICAgIHZhciBhY3RpdmVJZCA9ICcn OwogICAgc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihzKSB7CiAgICAgICAgaWYgKHMub2Zmc2V0 VG9wIDw9IHNjcm9sbFRvcCkgYWN0aXZlSWQgPSBzLmlkOwogICAgfSk7CiAgICBkb2N1bWVudC5x dWVyeVNlbGVjdG9yQWxsKCcjaGVscFRvYyBhJykuZm9yRWFjaChmdW5jdGlvbihhKSB7CiAgICAg ICAgYS5jbGFzc0xpc3QudG9nZ2xlKCdhY3RpdmUnLCBhLmdldEF0dHJpYnV0ZSgnZGF0YS1zZWN0 aW9uJykgPT09IGFjdGl2ZUlkKTsKICAgIH0pOwp9CgovLyBUT0MtS2xpY2tzOiBzbW9vdGggc2Ny b2xsIGltIGhlbHAtYm9keQpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0 aW9uKGUpIHsKICAgIHZhciBsaW5rID0gZS50YXJnZXQuY2xvc2VzdCgnI2hlbHBUb2MgYScpOwog ICAgaWYgKCFsaW5rKSByZXR1cm47CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICB2YXIgdGFy Z2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobGluay5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2Vj dGlvbicpKTsKICAgIGlmICh0YXJnZXQpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgnaGVscEJvZHknKS5zY3JvbGxUbyh7IHRvcDogdGFyZ2V0Lm9mZnNldFRvcCAtIDIwLCBiZWhh dmlvcjogJ3Ntb290aCcgfSk7CiAgICB9Cn0pOwoKLy8gPT09PT09PT09PT09PT09PT09PT09IFZF UlNJT04gSElTVE9SWSA9PT09PT09PT09PT09PT09PT09PT0KCmZ1bmN0aW9uIHNob3dWZXJzaW9u SGlzdG9yeSgpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2ZXJzaW9uTW9kYWwnKS5j bGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKfQoKZnVuY3Rpb24gY2xvc2VWZXJzaW9uSGlzdG9yeSgp IHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2ZXJzaW9uTW9kYWwnKS5jbGFzc0xpc3Qu cmVtb3ZlKCdhY3RpdmUnKTsKfQoKLy8gPT09PT09PT09PT09PT09PT09PT09IFRPQVNUIE5PVElG SUNBVElPTlMgPT09PT09PT09PT09PT09PT09PT09CgovLyBEYXR1bS9aZWl0LUZvcm1hdGllcnVu ZzogSVNPIC0+IGRldXRzY2hlcyBGb3JtYXQKZnVuY3Rpb24gZm9ybWF0RGF0ZShpc29TdHIpIHsK ICAgIGlmICghaXNvU3RyIHx8IGlzb1N0ciA9PT0gJy0nKSByZXR1cm4gJy0nOwogICAgLy8gIjIw MjYtMDMtMjYiIG9kZXIgIjIwMjYtMDMtMjZUMTk6MjY6NTIuMDAwWiIKICAgIHZhciBwYXJ0cyA9 IGlzb1N0ci5zcGxpdCgnVCcpWzBdLnNwbGl0KCctJyk7CiAgICBpZiAocGFydHMubGVuZ3RoICE9 PSAzKSByZXR1cm4gaXNvU3RyOwogICAgcmV0dXJuIHBhcnRzWzJdICsgJy4nICsgcGFydHNbMV0g KyAnLicgKyBwYXJ0c1swXTsKfQpmdW5jdGlvbiBmb3JtYXREYXRlVGltZShpc29TdHIpIHsKICAg IGlmICghaXNvU3RyIHx8IGlzb1N0ciA9PT0gJy0nKSByZXR1cm4gJy0nOwogICAgdmFyIGQgPSBu ZXcgRGF0ZShpc29TdHIpOwogICAgaWYgKGlzTmFOKGQuZ2V0VGltZSgpKSkgcmV0dXJuIGlzb1N0 cjsKICAgIHJldHVybiBkLnRvTG9jYWxlRGF0ZVN0cmluZygnZGUtREUnLCB7ZGF5OicyLWRpZ2l0 Jyxtb250aDonMi1kaWdpdCcseWVhcjonbnVtZXJpYyd9KSArCiAgICAgICAgJyAnICsgZC50b0xv Y2FsZVRpbWVTdHJpbmcoJ2RlLURFJywge2hvdXI6JzItZGlnaXQnLG1pbnV0ZTonMi1kaWdpdCd9 KTsKfQoKLy8gQXV0b21hdGlzY2hlIEFydGlrZWx2ZXJzaW9uaWVydW5nIChTZW1hbnRpYyBWZXJz aW9uaW5nKQovLyBNYWpvciA9IEZyZWlnYWJlenlrbGVuICh2MC54ID0gbmllIGZyZWlnZWdlYmVu LCB2MS54ID0gZWlubWFsLCB2Mi54ID0gendlaW1hbCwgLi4uKQovLyBNaW5vciA9IEJlYXJiZWl0 dW5nZW4gaW5uZXJoYWxiIGVpbmVzIFp5a2x1cyAoKzAuMSBwcm8gU3BlaWNoZXJ1bmcpCi8vIEZy ZWlnYWJlID0gbmFlY2hzdGUgdm9sbGUgVmVyc2lvbiAodjEuMCwgdjIuMCwgLi4uKQpmdW5jdGlv biBjYWxjdWxhdGVWZXJzaW9uKGRvYywgb2xkSW5oYWx0LCBuZXdJbmhhbHQsIG5ld1N0YXR1cykg ewogICAgdmFyIGN1cnJlbnQgPSBwYXJzZVZlcnNpb24oZG9jLnZlcnNpb24pOwoKICAgIC8vIEZy ZWlnYWJlOiBTcHJ1bmcgYXVmIG5hZWNoc3RlIHZvbGxlIFZlcnNpb24gKG1pbmQuIHYxLjApCiAg ICAvLyBHaWx0IGF1Y2ggZnVlciBuZXVlIEFydGlrZWwgZGllIGRpcmVrdCBmcmVpZ2VnZWJlbiB3 ZXJkZW4gKHYwLjEgLT4gdjEuMCkKICAgIGlmIChuZXdTdGF0dXMgPT09ICdGcmVpZ2VnZWJlbicg JiYgZG9jLnN0YXR1cyAhPT0gJ0ZyZWlnZWdlYmVuJykgewogICAgICAgIHJldHVybiAndicgKyBN YXRoLm1heCgxLCBjdXJyZW50Lm1ham9yICsgMSkgKyAnLjAnOwogICAgfQoKICAgIC8vIE5ldWVz IERva3VtZW50IChFbnR3dXJmKTogYmxlaWJ0IHYwLjEKICAgIGlmICghZG9jLnZlcnNpb24gfHwg ZG9jLnZlcnNpb24gPT09ICd2MC4xJykgcmV0dXJuICd2MC4xJzsKCiAgICAvLyBBYmxlaG51bmc6 IFZlcnNpb24gYmxlaWJ0CiAgICBpZiAobmV3U3RhdHVzID09PSAnQWJnZWxlaG50JykgcmV0dXJu IGRvYy52ZXJzaW9uOwoKICAgIC8vIEluaGFsdCBnZWFlbmRlcnQ6ICswLjEKICAgIGlmIChvbGRJ bmhhbHQgJiYgbmV3SW5oYWx0ICYmIG9sZEluaGFsdCAhPT0gbmV3SW5oYWx0KSB7CiAgICAgICAg cmV0dXJuICd2JyArIGN1cnJlbnQubWFqb3IgKyAnLicgKyAoY3VycmVudC5taW5vciArIDEpOwog ICAgfQoKICAgIHJldHVybiBkb2MudmVyc2lvbjsKfQoKZnVuY3Rpb24gcGFyc2VWZXJzaW9uKHYp IHsKICAgIGlmICghdikgcmV0dXJuIHsgbWFqb3I6IDAsIG1pbm9yOiAxIH07CiAgICB2YXIgbSA9 IHYucmVwbGFjZSgndicsICcnKS5zcGxpdCgnLicpOwogICAgcmV0dXJuIHsgbWFqb3I6IHBhcnNl SW50KG1bMF0pIHx8IDAsIG1pbm9yOiBwYXJzZUludChtWzFdKSB8fCAwIH07Cn0KCi8vIFZlcnNp b25zaW50ZWdyaXRhZXRzcHJ1ZWZ1bmc6IFN0ZWxsdCBzaWNoZXIsIGRhc3MgZGllIFZlcnNpb24g enVtIFN0YXR1cyBwYXNzdC4KLy8gV2lyZCBiZWltIExhZGVuIGplZGVzIERva3VtZW50cyBhdWZn ZXJ1ZmVuIHVuZCBrb3JyaWdpZXJ0IElua29uc2lzdGVuemVuLgovLyBSZWdlbG46Ci8vICAgRW50 d3VyZi9QcnVlZnVuZzogdjAueCAobWluZC4gdjAuMSkKLy8gICBGcmVpZ2VnZWJlbjogICAgICB2 MS4wKyAoTWFqb3IgPj0gMSkKLy8gICBBYmdlbGVobnQ6ICAgICAgICB1bnZlcmFlbmRlcnQKLy8g R2lidCB0cnVlIHp1cnVlY2sgd2VubiBkaWUgVmVyc2lvbiBrb3JyaWdpZXJ0IHd1cmRlLgpmdW5j dGlvbiBlbnN1cmVDb3JyZWN0VmVyc2lvbihkb2MpIHsKICAgIGlmICghZG9jIHx8ICFkb2Muc3Rh dHVzKSByZXR1cm4gZmFsc2U7CiAgICB2YXIgdiA9IHBhcnNlVmVyc2lvbihkb2MudmVyc2lvbik7 CiAgICB2YXIgc3RhdHVzID0gZG9jLnN0YXR1czsKICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7Cgog ICAgaWYgKHN0YXR1cyA9PT0gJ0ZyZWlnZWdlYmVuJyAmJiB2Lm1ham9yIDwgMSkgewogICAgICAg IC8vIEZyZWlnZWdlYmVuZXIgQXJ0aWtlbCBtdXNzIG1pbmRlc3RlbnMgdjEuMCBzZWluCiAgICAg ICAgZG9jLnZlcnNpb24gPSAndjEuMCc7CiAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICB9IGVs c2UgaWYgKChzdGF0dXMgPT09ICdFbnR3dXJmJyB8fCBzdGF0dXMgPT09ICdQcsO8ZnVuZycpICYm ICFkb2MudmVyc2lvbikgewogICAgICAgIC8vIEVudHd1cmYvUHJ1ZWZ1bmcgb2huZSBWZXJzaW9u OiB2MC4xCiAgICAgICAgZG9jLnZlcnNpb24gPSAndjAuMSc7CiAgICAgICAgY2hhbmdlZCA9IHRy dWU7CiAgICB9CgogICAgcmV0dXJuIGNoYW5nZWQ7Cn0KCmZ1bmN0aW9uIHNob3dWZXJzaW9uTG9n aWMoKSB7CiAgICB2YXIgbW9kYWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAg IG1vZGFsLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRo OjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNSk7ei1pbmRleDoxMDAw MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7 JzsKICAgIG1vZGFsLm9uY2xpY2sgPSBmdW5jdGlvbihlKSB7IGlmIChlLnRhcmdldCA9PT0gbW9k YWwpIG1vZGFsLnJlbW92ZSgpOyB9OwogICAgbW9kYWwuaW5uZXJIVE1MID0KICAgICAgICAnPGRp diBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkKTtib3JkZXItcmFkaXVzOjEwcHg7cGFk ZGluZzoyNHB4IDI4cHg7bWF4LXdpZHRoOjQ4MHB4O3dpZHRoOjkwJTtib3gtc2hhZG93OjAgOHB4 IDMycHggcmdiYSgwLDAsMCwwLjMpOyI+JyArCiAgICAgICAgICAgICc8aDIgc3R5bGU9ImNvbG9y OnZhcigtLXRleHQtaGVhZGluZyk7bWFyZ2luLWJvdHRvbToxNHB4O2ZvbnQtc2l6ZToxN3B4OyI+ QXV0b21hdGlzY2hlIFZlcnNpb25pZXJ1bmc8L2gyPicgKwogICAgICAgICAgICAnPHAgc3R5bGU9 ImNvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS43 O21hcmdpbi1ib3R0b206MTRweDsiPicgKwogICAgICAgICAgICAgICAgJ0RpZSBWZXJzaW9uIHpl aWd0IGRpciBhdWYgZWluZW4gQmxpY2ssIHdpZSBvZnQgZWluIEFydGlrZWwgYmVhcmJlaXRldCB1 bmQgZnJlaWdlZ2ViZW4gd3VyZGUuJyArCiAgICAgICAgICAgICc8L3A+JyArCiAgICAgICAgICAg ICc8dGFibGUgc3R5bGU9IndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2ZvbnQt c2l6ZToxM3B4O21hcmdpbi1ib3R0b206MTRweDsiPicgKwogICAgICAgICAgICAgICAgJzx0ciBz dHlsZT0iYm9yZGVyLWJvdHRvbToycHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsiPicgKwog ICAgICAgICAgICAgICAgICAgICc8dGggc3R5bGU9InRleHQtYWxpZ246bGVmdDtwYWRkaW5nOjhw eDtjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpOyI+VmVyc2lvbjwvdGg+JyArCiAgICAgICAgICAg ICAgICAgICAgJzx0aCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OHB4O2NvbG9yOnZh cigtLXRleHQtaGVhZGluZyk7Ij5CZWRldXR1bmc8L3RoPicgKwogICAgICAgICAgICAgICAgJzwv dHI+JyArCiAgICAgICAgICAgICAgICAnPHRyIHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBzb2xp ZCB2YXIoLS1ib3JkZXItbGlnaHQpOyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzx0ZCBzdHls ZT0icGFkZGluZzo4cHg7Zm9udC13ZWlnaHQ6NjAwOyI+djAuMTwvdGQ+JyArCiAgICAgICAgICAg ICAgICAgICAgJzx0ZCBzdHlsZT0icGFkZGluZzo4cHg7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5 KTsiPkVyc3RlciBFbnR3dXJmPC90ZD4nICsKICAgICAgICAgICAgICAgICc8L3RyPicgKwogICAg ICAgICAgICAgICAgJzx0ciBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9y ZGVyLWxpZ2h0KTsiPicgKwogICAgICAgICAgICAgICAgICAgICc8dGQgc3R5bGU9InBhZGRpbmc6 OHB4O2ZvbnQtd2VpZ2h0OjYwMDsiPnYwLjIsIHYwLjMsIC4uLjwvdGQ+JyArCiAgICAgICAgICAg ICAgICAgICAgJzx0ZCBzdHlsZT0icGFkZGluZzo4cHg7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5 KTsiPkplZGUgQmVhcmJlaXR1bmcgaW0gRW50d3VyZjwvdGQ+JyArCiAgICAgICAgICAgICAgICAn PC90cj4nICsKICAgICAgICAgICAgICAgICc8dHIgc3R5bGU9ImJvcmRlci1ib3R0b206MXB4IHNv bGlkIHZhcigtLWJvcmRlci1saWdodCk7YmFja2dyb3VuZDp2YXIoLS1iZy1hY3RpdmUpOyI+JyAr CiAgICAgICAgICAgICAgICAgICAgJzx0ZCBzdHlsZT0icGFkZGluZzo4cHg7Zm9udC13ZWlnaHQ6 NzAwO2NvbG9yOnZhcigtLXRleHQtaGVhZGluZyk7Ij52MS4wPC90ZD4nICsKICAgICAgICAgICAg ICAgICAgICAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweDtjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkp O2ZvbnQtd2VpZ2h0OjYwMDsiPkVyc3RlIEZyZWlnYWJlPC90ZD4nICsKICAgICAgICAgICAgICAg ICc8L3RyPicgKwogICAgICAgICAgICAgICAgJzx0ciBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHgg c29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsiPicgKwogICAgICAgICAgICAgICAgICAgICc8dGQg c3R5bGU9InBhZGRpbmc6OHB4O2ZvbnQtd2VpZ2h0OjYwMDsiPnYxLjEsIHYxLjIsIC4uLjwvdGQ+ JyArCiAgICAgICAgICAgICAgICAgICAgJzx0ZCBzdHlsZT0icGFkZGluZzo4cHg7Y29sb3I6dmFy KC0tdGV4dC1wcmltYXJ5KTsiPsOcYmVyYXJiZWl0dW5nZW4gbmFjaCBGcmVpZ2FiZTwvdGQ+JyAr CiAgICAgICAgICAgICAgICAnPC90cj4nICsKICAgICAgICAgICAgICAgICc8dHIgc3R5bGU9ImJh Y2tncm91bmQ6dmFyKC0tYmctYWN0aXZlKTsiPicgKwogICAgICAgICAgICAgICAgICAgICc8dGQg c3R5bGU9InBhZGRpbmc6OHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS10ZXh0LWhlYWRp bmcpOyI+djIuMCwgdjMuMCwgLi4uPC90ZD4nICsKICAgICAgICAgICAgICAgICAgICAnPHRkIHN0 eWxlPSJwYWRkaW5nOjhweDtjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpO2ZvbnQtd2VpZ2h0OjYw MDsiPkplZGUgd2VpdGVyZSBGcmVpZ2FiZTwvdGQ+JyArCiAgICAgICAgICAgICAgICAnPC90cj4n ICsKICAgICAgICAgICAgJzwvdGFibGU+JyArCiAgICAgICAgICAgICc8cCBzdHlsZT0iZm9udC1z aXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dC1zZWNvbmRhcnkpO2xpbmUtaGVpZ2h0OjEuNzttYXJn aW4tYm90dG9tOjZweDsiPicgKwogICAgICAgICAgICAgICAgJzxzdHJvbmc+U28gbGllc3QgZHUg ZGllIFZlcnNpb246PC9zdHJvbmc+IERpZSBaYWhsIHZvciBkZW0gUHVua3QgemVpZ3QsIHdpZSBv ZnQgZGVyIEFydGlrZWwgZnJlaWdlZ2ViZW4gd3VyZGUuIERpZSBaYWhsIG5hY2ggZGVtIFB1bmt0 IHplaWd0LCB3aWUgdmllbGUgQmVhcmJlaXR1bmdlbiBzZWl0IGRlciBsZXR6dGVuIEZyZWlnYWJl IHN0YXR0ZmFuZGVuLicgKwogICAgICAgICAgICAnPC9wPicgKwogICAgICAgICAgICAnPHAgc3R5 bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpO2xpbmUtaGVpZ2h0OjEu NjttYXJnaW4tdG9wOjhweDsiPicgKwogICAgICAgICAgICAgICAgJ0JlaXNwaWVsOiA8c3Ryb25n PnYyLjU8L3N0cm9uZz4gPSB6d2VpbWFsIGZyZWlnZWdlYmVuLCBkYW5hY2ggNSB3ZWl0ZXJlIEJl YXJiZWl0dW5nZW4uJyArCiAgICAgICAgICAgICc8L3A+JyArCiAgICAgICAgICAgICc8ZGl2IHN0 eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O21hcmdpbi10b3A6MTRweDsiPicgKwogICAgICAgICAgICAg ICAgJzxidXR0b24gb25jbGljaz0idmFyIG09dGhpczt3aGlsZShtLnBhcmVudEVsZW1lbnQhPT1k b2N1bWVudC5ib2R5KW09bS5wYXJlbnRFbGVtZW50O20ucmVtb3ZlKCk7IiBzdHlsZT0icGFkZGlu Zzo4cHggMjBweDtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6bm9uZTtiYWNrZ3JvdW5kOnZhcigt LXRleHQtaGVhZGluZyk7Y29sb3I6d2hpdGU7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAw OyI+VmVyc3RhbmRlbjwvYnV0dG9uPicgKwogICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAg JzwvZGl2Pic7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1vZGFsKTsKfQoKZnVuY3Rp b24gc2hvd1RvYXN0KG1lc3NhZ2UsIHR5cGUgPSAnaW5mbycsIGR1cmF0aW9uID0gMzAwMCkgewog ICAgY29uc3QgdG9hc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9hc3QnKTsKICAgIHRv YXN0LnRleHRDb250ZW50ID0gbWVzc2FnZTsKICAgIHRvYXN0LmNsYXNzTmFtZSA9ICd0b2FzdCAn ICsgdHlwZTsKICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0b2FzdC5jbGFzc0xpc3Qu YWRkKCdzaG93JykpOwogICAgY2xlYXJUaW1lb3V0KHRvYXN0Ll90aW1lb3V0KTsKICAgIHRvYXN0 Ll90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0b2FzdC5jbGFzc0xpc3QucmVtb3ZlKCdzaG93 JyksIGR1cmF0aW9uKTsKfQoKZnVuY3Rpb24gc2hvd0NvbnRhY3RGb3JtKCkgewogICAgdmFyIGlu cHV0U3R5bGUgPSAnd2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMHB4O2JvcmRlcjoxcHggc29saWQg dmFyKC0tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTRweDtiYWNr Z3JvdW5kOnZhcigtLWJnLWlucHV0KTtjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpOyc7CiAgICB2 YXIgdXNlcm5hbWUgPSAoRHJpdmVGUy5lbnZpcm9uICYmIERyaXZlRlMuZW52aXJvbi51c2VybmFt ZSkgPyBEcml2ZUZTLmVudmlyb24udXNlcm5hbWUgOiAnJzsKICAgIHZhciBtb2RhbCA9IGRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgbW9kYWwuc3R5bGUuY3NzVGV4dCA9ICdwb3Np dGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5k OnJnYmEoMCwwLDAsMC41KTt6LWluZGV4OjEwMDAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpj ZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjsnOwogICAgbW9kYWwub25jbGljayA9IGZ1bmN0 aW9uKGUpIHsgaWYgKGUudGFyZ2V0ID09PSBtb2RhbCkgbW9kYWwucmVtb3ZlKCk7IH07CiAgICBt b2RhbC5pbm5lckhUTUwgPQogICAgICAgICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWJn LWNhcmQpO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjI0cHggMjhweDttYXgtd2lkdGg6NTIw cHg7d2lkdGg6OTAlO2JveC1zaGFkb3c6MCA4cHggMzJweCByZ2JhKDAsMCwwLDAuMyk7Ij4nICsK ICAgICAgICAgICAgJzxoMiBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTttYXJnaW4t Ym90dG9tOjRweDtmb250LXNpemU6MTdweDsiPlRlY2huaXNjaGVyIFN1cHBvcnQ8L2gyPicgKwog ICAgICAgICAgICAnPHAgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtbXV0ZWQpO2ZvbnQtc2l6ZTox MnB4O21hcmdpbi1ib3R0b206MTRweDsiPkJlaSB0ZWNobmlzY2hlbiBQcm9ibGVtZW4gbWl0IGRl bSBTeXN0ZW0gKEZlaGxlciwgQWJzdMO8cnplLCBEYXJzdGVsbHVuZ3Nwcm9ibGVtZSkga2FubnN0 IGR1IGhpZXIgZGVuIEVudHdpY2tsZXIga29udGFrdGllcmVuLiBEaWUgTmFjaHJpY2h0IHdpcmQg w7xiZXIgZGVpbiBFLU1haWwtUHJvZ3JhbW0gZ2VzZW5kZXQuPC9wPicgKwogICAgICAgICAgICAn PGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMHB4OyI+JyArCiAgICAgICAgICAgICAgICAnPGxh YmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdGV4 dC1zZWNvbmRhcnkpO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTozcHg7Ij5CZXRyZWZmPC9s YWJlbD4nICsKICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImNvbnRhY3RT dWJqZWN0IiBwbGFjZWhvbGRlcj0iV29ydW0gZ2VodCBlcz8iIHN0eWxlPSInICsgaW5wdXRTdHls ZSArICciIHZhbHVlPSJELlIuSS5WLkUuIOKAkyAiPicgKwogICAgICAgICAgICAnPC9kaXY+JyAr CiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHg7Ij4nICsKICAgICAg ICAgICAgICAgICc8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtj b2xvcjp2YXIoLS10ZXh0LXNlY29uZGFyeSk7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjNw eDsiPk5hY2hyaWNodDwvbGFiZWw+JyArCiAgICAgICAgICAgICAgICAnPHRleHRhcmVhIGlkPSJj b250YWN0Qm9keSIgcm93cz0iNiIgcGxhY2Vob2xkZXI9IkJlc2NocmVpYmUgZGVpbiBBbmxpZWdl bi4uLiIgc3R5bGU9IicgKyBpbnB1dFN0eWxlICsgJ3Jlc2l6ZTp2ZXJ0aWNhbDtsaW5lLWhlaWdo dDoxLjY7Ij48L3RleHRhcmVhPicgKwogICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAg ICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1l bmQ7Ij4nICsKICAgICAgICAgICAgICAgICc8YnV0dG9uIG9uY2xpY2s9InRoaXMuY2xvc2VzdChc J2RpdltzdHlsZV1cJykucGFyZW50RWxlbWVudC5yZW1vdmUoKSIgc3R5bGU9InBhZGRpbmc6OHB4 IDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29s b3IpO2JhY2tncm91bmQ6dmFyKC0tYmctY2FyZCk7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5KTtj dXJzb3I6cG9pbnRlcjsiPkFiYnJlY2hlbjwvYnV0dG9uPicgKwogICAgICAgICAgICAgICAgJzxi dXR0b24gb25jbGljaz0ic2VuZENvbnRhY3RNYWlsKCkiIHN0eWxlPSJwYWRkaW5nOjhweCAxNnB4 O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjpub25lO2JhY2tncm91bmQ6dmFyKC0tdGV4dC1oZWFk aW5nKTtjb2xvcjp3aGl0ZTtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7Ij5BYnNlbmRl bjwvYnV0dG9uPicgKwogICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgJzwvZGl2Pic7CiAg ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1vZGFsKTsKICAgIHNldFRpbWVvdXQoZnVuY3Rp b24oKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWN0U3ViamVjdCcpLmZvY3VzKCk7 IH0sIDUwKTsKfQoKZnVuY3Rpb24gc2VuZENvbnRhY3RNYWlsKCkgewogICAgdmFyIHN1YmplY3Qg PSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhY3RTdWJqZWN0JykudmFsdWUgfHwgJycp LnRyaW0oKTsKICAgIHZhciBib2R5ID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWN0 Qm9keScpLnZhbHVlIHx8ICcnKS50cmltKCk7CiAgICBpZiAoIXN1YmplY3QpIHsgc2hvd1RvYXN0 KCdCaXR0ZSBlaW5lbiBCZXRyZWZmIGVpbmdlYmVuJywgJ3dhcm5pbmcnKTsgcmV0dXJuOyB9CiAg ICBpZiAoIWJvZHkpIHsgc2hvd1RvYXN0KCdCaXR0ZSBlaW5lIE5hY2hyaWNodCBlaW5nZWJlbics ICd3YXJuaW5nJyk7IHJldHVybjsgfQogICAgdmFyIHVzZXJuYW1lID0gKERyaXZlRlMuZW52aXJv biAmJiBEcml2ZUZTLmVudmlyb24udXNlcm5hbWUpID8gRHJpdmVGUy5lbnZpcm9uLnVzZXJuYW1l IDogJ1VuYmVrYW5udCc7CiAgICB2YXIgZnVsbEJvZHkgPSBib2R5ICsgJ1xuXG4tLS1cbkdlc2Vu ZGV0IGF1cyBELlIuSS5WLkUuIHYxLjBcbkJlbnV0emVyOiAnICsgdXNlcm5hbWU7CiAgICB2YXIg bWFpbHRvID0gJ21haWx0bzpwaGlsaXBwLnJvZXNnZW5AcG9saXplaS5ucncuZGU/c3ViamVjdD0n ICsgZW5jb2RlVVJJQ29tcG9uZW50KHN1YmplY3QpICsgJyZib2R5PScgKyBlbmNvZGVVUklDb21w b25lbnQoZnVsbEJvZHkpOwogICAgLy8gTW9kYWwgKyBPdmVybGF5IHNvZm9ydCBzY2hsaWVzc2Vu LCBkYW5uIE1haWwtUHJvZ3JhbW0gb2VmZm5lbgogICAgdmFyIGNvbnRhY3RNb2RhbCA9IGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWN0U3ViamVjdCcpOwogICAgaWYgKGNvbnRhY3RNb2Rh bCkgewogICAgICAgIHZhciBvdmVybGF5ID0gY29udGFjdE1vZGFsLmNsb3Nlc3QoJ2RpdltzdHls ZSo9InBvc2l0aW9uOmZpeGVkIl0nKTsKICAgICAgICBpZiAob3ZlcmxheSkgb3ZlcmxheS5yZW1v dmUoKTsKICAgIH0KICAgIHNob3dUb2FzdCgnRS1NYWlsLVByb2dyYW1tIHdpcmQgZ2XDtmZmbmV0 Li4uJywgJ3N1Y2Nlc3MnKTsKICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbWFpbHRvOwp9Cgpm dW5jdGlvbiBzaG93UmVhZE1vZGVJbmZvKCkgewogICAgdmFyIG1vZGFsID0gZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCgnZGl2Jyk7CiAgICBtb2RhbC5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZp eGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6cmdiYSgw LDAsMCwwLjUpO3otaW5kZXg6MTAwMDA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtq dXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyc7CiAgICBtb2RhbC5vbmNsaWNrID0gZnVuY3Rpb24oZSkg eyBpZiAoZS50YXJnZXQgPT09IG1vZGFsKSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG1vZGFs KTsgfTsKICAgIG1vZGFsLmlubmVySFRNTCA9CiAgICAgICAgJzxkaXYgc3R5bGU9ImJhY2tncm91 bmQ6dmFyKC0tYmctY2FyZCk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MjRweCAyOHB4O21h eC13aWR0aDo0ODBweDt3aWR0aDo5MCU7Ym94LXNoYWRvdzowIDhweCAzMnB4IHJnYmEoMCwwLDAs MC4zKTsiPicgKwogICAgICAgICAgICAnPGgyIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LWhlYWRp bmcpO21hcmdpbi1ib3R0b206MTJweDtmb250LXNpemU6MThweDsiPkxlc2Vtb2R1czwvaDI+JyAr CiAgICAgICAgICAgICc8cCBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5KTtmb250LXNp emU6MTRweDtsaW5lLWhlaWdodDoxLjc7bWFyZ2luLWJvdHRvbToxMnB4OyI+JyArCiAgICAgICAg ICAgICAgICAnRHUgYmVmaW5kZXN0IGRpY2ggZ2VyYWRlIGltIDxzdHJvbmc+TGVzZW1vZHVzPC9z dHJvbmc+LiBIaWVyIGthbm5zdCBkdSBhbGxlIEFydGlrZWwgbGVzZW4sIGR1cmNoc3VjaGVuIHVu ZCBmaWx0ZXJuIOKAkyBhYmVyIG5pY2h0cyB2ZXLDpG5kZXJuLicgKwogICAgICAgICAgICAnPC9w PicgKwogICAgICAgICAgICAnPHAgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Zm9u dC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS43O21hcmdpbi1ib3R0b206MTZweDsiPicgKwogICAg ICAgICAgICAgICAgJzxzdHJvbmc+V2VubiBkdSBtaXRhcmJlaXRlbiBtw7ZjaHRlc3QsIGJpc3Qg ZHUgaGVyemxpY2ggZWluZ2VsYWRlbiE8L3N0cm9uZz4nICsKICAgICAgICAgICAgJzwvcD4nICsK ICAgICAgICAgICAgJzxwIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpO2ZvbnQtc2l6 ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNzttYXJnaW4tYm90dG9tOjE2cHg7Ij4nICsKICAgICAgICAg ICAgICAgICdTdGFydGUgZGF6dSBlaW5mYWNoIGRhcyBTeXN0ZW0gw7xiZXIgPHN0cm9uZz5EUklW RV9TdGFydC5iYXQ8L3N0cm9uZz4uPC9icj4nICsKICAgICAgICAgICAgICAgICcoRGllIERhdGVp IGxpZWd0IGltIFN0YW1tdmVyemVpY2huaXMgdm9uIEQuUi5JLlYuRS4pLicgKwogICAgICAgICAg ICAnPC9wPicgKwogICAgICAgICAgICAnPHAgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtcHJpbWFy eSk7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS43O21hcmdpbi1ib3R0b206MTZweDsiPicg KwogICAgICAgICAgICAgICAgJ0RhbWl0IMO2ZmZuZXQgc2ljaCBkZXIgdm9sbHN0w6RuZGlnZSBC ZWFyYmVpdHVuZ3Ntb2R1cywgaW4gZGVtIGR1IEFydGlrZWwgZXJzdGVsbGVuLCBiZWFyYmVpdGVu IHVuZCBNZWRpZW4gaG9jaGxhZGVuIGthbm5zdC4nICsKICAgICAgICAgICAgJzwvcD4nICsKICAg ICAgICAgICAgJzxkaXYgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij4nICsKICAgICAgICAgICAg ICAgICc8YnV0dG9uIG9uY2xpY2s9InZhciBtPXRoaXM7d2hpbGUobS5wYXJlbnRFbGVtZW50IT09 ZG9jdW1lbnQuYm9keSltPW0ucGFyZW50RWxlbWVudDttLnJlbW92ZSgpOyIgc3R5bGU9InBhZGRp bmc6OHB4IDIwcHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOm5vbmU7YmFja2dyb3VuZDp2YXIo LS10ZXh0LWhlYWRpbmcpO2NvbG9yOndoaXRlO2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYw MDsiPlZlcnN0YW5kZW48L2J1dHRvbj4nICsKICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAg ICc8L2Rpdj4nOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtb2RhbCk7Cn0KCi8vID09 PT09PT09PT09PT09PT09PT09PSBGSUxFIFNZU1RFTSBBQ0NFU1MgQVBJID09PT09PT09PT09PT09 PT09PT09PQoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gTW9kdWw6IERyaXZlRlMgLSBEYXRl aXN5c3RlbS1BYnN0cmFrdGlvbnNzY2hpY2h0Ci8vIFp1c3RhZW5kaWcgZnVlcjogTGFkZW4vU3Bl aWNoZXJuIHZvbiBEb2t1bWVudGVuLCBNZWRpZW4sIEtvbmZpZ3VyYXRpb24KLy8gRGF0ZW5xdWVs bGVuOiBTZXJ2ZXItQVBJIChwcmltYWVyKSwgc3RhdGlzY2hlIERhdGVpZW4gKEZhbGxiYWNrKSwg RmlsZSBTeXN0ZW0gQWNjZXNzIEFQSQovLyBTaWNoZXJoZWl0OiBQZmFkdmFsaWRpZXJ1bmcgdmlh IHNhbml0aXplRmlsZW5hbWUoKSArIHNlcnZlcnNlaXRpZ2UgUmVzb2x2ZS1TYWZlUGF0aCgpCi8v ICAgICAgICAgICAgIENsaWVudC1zZWl0aWdlIFZhbGlkaWVydW5nIGlzdCBFcmdhZW56dW5nLCBu aWNodCBFcnNhdHogZnVlciBzZXJ2ZXJzZWl0aWdlIFBydWVmdW5nLgovLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpjb25zdCBEcml2ZUZTID0gewogICAgbW9kZTogbnVsbCwgICAgICAgICAgICAgLy8g J3NlcnZlcicgb2RlciAnZmlsZXN5c3RlbScKICAgIGNvbm5lY3RlZDogZmFsc2UsCiAgICByZWFk T25seTogdHJ1ZSwgICAgICAgICAvLyBTdGFydGV0IGltbWVyIGltIE51ci1MZXNlbi1Nb2R1cwog ICAgY29uZmlnOiBudWxsLAogICAgX2lkYk5hbWU6ICdEcml2ZVBvcnRhbCcsCiAgICBfaWRiU3Rv cmU6ICdoYW5kbGVzJywKICAgIGRvY3VtZW50czogW10sCiAgICBpbmRleDogbnVsbCwKICAgIGZp bGVUaW1lc3RhbXBzOiB7fSwgICAgIC8vIGRvY0lkIC0+IHsgbW9kaWZpZWQsIGthdGVnb3JpZSwg ZmlsZW5hbWUsIHBhdGggfQogICAgc3luY0ludGVydmFsOiBudWxsLAogICAgZW52aXJvbjogbnVs bCwKCiAgICAvLyAtLS0gSW5kZXhlZERCOiBPcmRuZXItSGFuZGxlIHNwZWljaGVybi9sYWRlbiAt LS0KICAgIF9vcGVuSURCKCkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwg cmVqZWN0KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGluZGV4ZWREQi5vcGVuKHRoaXMu X2lkYk5hbWUsIDEpOwogICAgICAgICAgICByZXEub251cGdyYWRlbmVlZGVkID0gKCkgPT4gcmVx LnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLl9pZGJTdG9yZSk7CiAgICAgICAgICAgIHJl cS5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKHJlcS5yZXN1bHQpOwogICAgICAgICAgICByZXEu b25lcnJvciA9ICgpID0+IHJlamVjdChyZXEuZXJyb3IpOwogICAgICAgIH0pOwogICAgfSwKCiAg ICBhc3luYyBfc2F2ZUhhbmRsZShkaXJIYW5kbGUpIHsKICAgICAgICB0cnkgewogICAgICAgICAg ICBjb25zdCBkYiA9IGF3YWl0IHRoaXMuX29wZW5JREIoKTsKICAgICAgICAgICAgY29uc3QgdHgg PSBkYi50cmFuc2FjdGlvbih0aGlzLl9pZGJTdG9yZSwgJ3JlYWR3cml0ZScpOwogICAgICAgICAg ICB0eC5vYmplY3RTdG9yZSh0aGlzLl9pZGJTdG9yZSkucHV0KGRpckhhbmRsZSwgJ3Jvb3REaXIn KTsKICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7IHR4Lm9uY29t cGxldGUgPSByZXM7IHR4Lm9uZXJyb3IgPSByZWo7IH0pOwogICAgICAgICAgICBkYi5jbG9zZSgp OwogICAgICAgIH0gY2F0Y2gge30KICAgIH0sCgogICAgYXN5bmMgX2xvYWRIYW5kbGUoKSB7CiAg ICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgZGIgPSBhd2FpdCB0aGlzLl9vcGVuSURCKCk7 CiAgICAgICAgICAgIGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24odGhpcy5faWRiU3RvcmUsICdy ZWFkb25seScpOwogICAgICAgICAgICBjb25zdCByZXEgPSB0eC5vYmplY3RTdG9yZSh0aGlzLl9p ZGJTdG9yZSkuZ2V0KCdyb290RGlyJyk7CiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0 IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4geyByZXEub25zdWNjZXNzID0gKCkgPT4gcmVzKHJl cS5yZXN1bHQpOyByZXEub25lcnJvciA9IHJlajsgfSk7CiAgICAgICAgICAgIGRiLmNsb3NlKCk7 CiAgICAgICAgICAgIHJldHVybiBoYW5kbGUgfHwgbnVsbDsKICAgICAgICB9IGNhdGNoIHsgcmV0 dXJuIG51bGw7IH0KICAgIH0sCgogICAgLy8gLS0tIEhpbGZzZnVua3Rpb25lbiAtLS0KICAgICAg ICAvLyBEYXRlaW5hbWVuLUJlcmVpbmlndW5nOiBFbnRmZXJudCBTb25kZXJ6ZWljaGVuLCBlcnNl dHp0IFVtbGF1dGUsIG5vcm1hbGlzaWVydCBMZWVyemVpY2hlbi4KICAgICAgICAvLyBWZXJoaW5k ZXJ0IGNsaWVudC1zZWl0aWcgUGF0aC1UcmF2ZXJzYWwgKC4uLykgdW5kIHVuZ3VlbHRpZ2UgRGF0 ZWluYW1lbi4KICAgICAgICAvLyBTZXJ2ZXJzZWl0aWcgd2lyZCB6dXNhZXR6bGljaCBSZXNvbHZl LVNhZmVQYXRoKCkgLyByZXNvbHZlX3NhZmVfcGF0aCgpIGF1ZmdlcnVmZW4uCiAgICBzYW5pdGl6 ZUZpbGVuYW1lKHRpdGVsKSB7CiAgICAgICAgcmV0dXJuIHRpdGVsCiAgICAgICAgICAgIC5yZXBs YWNlKC9cdTAwZTQvZywgJ2FlJykucmVwbGFjZSgvXHUwMGY2L2csICdvZScpLnJlcGxhY2UoL1x1 MDBmYy9nLCAndWUnKQogICAgICAgICAgICAucmVwbGFjZSgvXHUwMGM0L2csICdBZScpLnJlcGxh Y2UoL1x1MDBkNi9nLCAnT2UnKS5yZXBsYWNlKC9cdTAwZGMvZywgJ1VlJykKICAgICAgICAgICAg LnJlcGxhY2UoL1x1MDBkZi9nLCAnc3MnKQogICAgICAgICAgICAucmVwbGFjZSgvW1xzXSsvZywg J18nKQogICAgICAgICAgICAucmVwbGFjZSgvW15hLXpBLVowLTlfXC1dL2csICcnKQogICAgICAg ICAgICAucmVwbGFjZSgvXysvZywgJ18nKQogICAgICAgICAgICAucmVwbGFjZSgvXl98XyQvZywg JycpOwogICAgfSwKCiAgICBkb2NGaWxlbmFtZShkb2MpIHsKICAgICAgICByZXR1cm4gZG9jLmlk ICsgJ18nICsgdGhpcy5zYW5pdGl6ZUZpbGVuYW1lKGRvYy50aXRlbCkgKyAnLmpzb24nOwogICAg fSwKCiAgICBkb2NQYXRoKGRvYykgewogICAgICAgIHJldHVybiAnZGF0YS8nICsgZG9jLmthdGVn b3JpZSArICcvJyArIHRoaXMuZG9jRmlsZW5hbWUoZG9jKTsKICAgIH0sCgogICAgZ2VuZXJhdGVJ ZCgpIHsKICAgICAgICBsZXQgbWF4TnVtID0gMDsKICAgICAgICB0aGlzLmRvY3VtZW50cy5mb3JF YWNoKGRvYyA9PiB7CiAgICAgICAgICAgIGNvbnN0IG51bSA9IHBhcnNlSW50KGRvYy5pZC5yZXBs YWNlKCdEJywgJycpLCAxMCk7CiAgICAgICAgICAgIGlmIChudW0gPiBtYXhOdW0pIG1heE51bSA9 IG51bTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gJ0QnICsgU3RyaW5nKG1heE51bSArIDEp LnBhZFN0YXJ0KDMsICcwJyk7CiAgICB9LAoKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBDT05ORUNU IC0gU3R1ZmVuOiAxLiBTZXJ2ZXIgKHZvbGwpLCAyLiBGaWxlc3lzdGVtIGxlc2VuZCwgMy4gSGlu d2VpcwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KCiAgICBhc3luYyBjb25uZWN0KHVzZXJJbml0aWF0ZWQpIHsK ICAgICAgICAvLyAxLiBWZXJzdWNoZSBTZXJ2ZXItTW9kdXMgKERSSVZFX1N0YXJ0LmJhdCAvIHNl cnZlci5wczEpCiAgICAgICAgaWYgKGF3YWl0IHRoaXMudHJ5U2VydmVyQ29ubmVjdCgpKSByZXR1 cm47CgogICAgICAgIC8vIDIuIFZlcnN1Y2hlIHN0YXRpc2NoZW4gTW9kdXMgKGRhdGEvIE9yZG5l ciByZWxhdGl2IHp1ciBIVE1MLURhdGVpKQogICAgICAgIGlmIChhd2FpdCB0aGlzLnRyeVN0YXRp Y0Nvbm5lY3QoKSkgcmV0dXJuOwoKICAgICAgICAvLyAzLiBWZXJzdWNoZSBnZXNwZWljaGVydGVu IE9yZG5lci1IYW5kbGUgKGF1dG8tcmVjb25uZWN0KQogICAgICAgIGlmICh3aW5kb3cuc2hvd0Rp cmVjdG9yeVBpY2tlcikgewogICAgICAgICAgICBpZiAoYXdhaXQgdGhpcy50cnlBdXRvUmVjb25u ZWN0KHVzZXJJbml0aWF0ZWQpKSByZXR1cm47CiAgICAgICAgICAgIGlmICh1c2VySW5pdGlhdGVk KSB7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3RGaWxlc3lzdGVtKCdyZWFkJyk7 CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg IC8vIDQuIEtlaW4gTW9kdXMgdmVyZnVlZ2JhciDigJMgV2lsbGtvbW1lbnNzZWl0ZSBtaXQgSGlu d2VpcyBhbnplaWdlbgogICAgICAgIGNvbnN0IGhpbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgnd2VsY29tZUNvbm5lY3RIaW50Jyk7CiAgICAgICAgaWYgKGhpbnQpIGhpbnQuc3R5bGUuZGlz cGxheSA9ICcnOwogICAgICAgIHRoaXMudXBkYXRlQ29ubmVjdGlvblVJKCk7CiAgICB9LAoKICAg IGFzeW5jIHRyeVN0YXRpY0Nvbm5lY3QoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8g RFJJVkVfU1RBVElDX0lOREVYIHdpcmQgdmlhIDxzY3JpcHQgc3JjPSJkYXRhL2luZGV4LmpzIj4g Z2VsYWRlbgogICAgICAgICAgICAvLyB1bmQgZW50aGFlbHQgQUxMRSBEb2t1bWVudGUgKyBDb25m aWcgKGZ1bmt0aW9uaWVydCBiZWkgZmlsZTovLykKICAgICAgICAgICAgaWYgKHR5cGVvZiBEUklW RV9TVEFUSUNfSU5ERVggPT09ICd1bmRlZmluZWQnIHx8ICFEUklWRV9TVEFUSUNfSU5ERVgpIHJl dHVybiBmYWxzZTsKICAgICAgICAgICAgdmFyIGRhdGEgPSBEUklWRV9TVEFUSUNfSU5ERVg7CiAg ICAgICAgICAgIGlmICghZGF0YS5kb2N1bWVudHMgfHwgZGF0YS5kb2N1bWVudHMubGVuZ3RoID09 PSAwKSByZXR1cm4gZmFsc2U7CgogICAgICAgICAgICB0aGlzLm1vZGUgPSAnc3RhdGljJzsKICAg ICAgICAgICAgdGhpcy5yZWFkT25seSA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuaW5kZXggPSBk YXRhOwoKICAgICAgICAgICAgLy8gQ29uZmlnIGF1cyBlaW5nZWJldHRldGVuIERhdGVuIG9kZXIg RmFsbGJhY2sKICAgICAgICAgICAgaWYgKGRhdGEuY29uZmlnKSB7CiAgICAgICAgICAgICAgICB0 aGlzLmNvbmZpZyA9IGRhdGEuY29uZmlnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg ICAgICAgdmFyIGNhdHMgPSBuZXcgU2V0KCk7CiAgICAgICAgICAgICAgICBkYXRhLmRvY3VtZW50 cy5mb3JFYWNoKGZ1bmN0aW9uKGQpIHsgaWYgKGQua2F0ZWdvcmllKSBjYXRzLmFkZChkLmthdGVn b3JpZSk7IH0pOwogICAgICAgICAgICAgICAgdGhpcy5jb25maWcgPSB7IGthdGVnb3JpZW46IFsu Li5jYXRzXS5zb3J0KGZ1bmN0aW9uKGEsYikgeyByZXR1cm4gYS5sb2NhbGVDb21wYXJlKGIsICdk ZScpOyB9KSB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBEb2t1bWVudGUgZGlyZWt0 IGF1cyBkZW4gZWluZ2ViZXR0ZXRlbiBEYXRlbiBsYWRlbgogICAgICAgICAgICAvLyBJbSBMZXNl bW9kdXM6IE5VUiBmcmVpZ2VnZWJlbmUgRG9rdW1lbnRlIGFuemVpZ2VuCiAgICAgICAgICAgIHRo aXMuZG9jdW1lbnRzID0gW107CiAgICAgICAgICAgIHRoaXMuZmlsZVRpbWVzdGFtcHMgPSB7fTsK ICAgICAgICAgICAgZGF0YS5kb2N1bWVudHMuZm9yRWFjaChmdW5jdGlvbihkb2MpIHsKICAgICAg ICAgICAgICAgIGlmIChkb2Muc3RhdHVzICE9PSAnRnJlaWdlZ2ViZW4nKSByZXR1cm47CiAgICAg ICAgICAgICAgICBlbnN1cmVDb3JyZWN0VmVyc2lvbihkb2MpOwogICAgICAgICAgICAgICAgRHJp dmVGUy5kb2N1bWVudHMucHVzaChkb2MpOwogICAgICAgICAgICAgICAgRHJpdmVGUy5maWxlVGlt ZXN0YW1wc1tkb2MuaWRdID0gewogICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkOiBkb2MuZ2Vh ZW5kZXJ0IHx8IGRvYy5lcnN0ZWxsdCwKICAgICAgICAgICAgICAgICAgICBrYXRlZ29yaWU6IGRv Yy5rYXRlZ29yaWUsCiAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU6IGRvYy5pZCArICcuanNv bicsCiAgICAgICAgICAgICAgICAgICAgcGF0aDogJ2RhdGEvJyArIGRvYy5rYXRlZ29yaWUgKyAn LycgKyBkb2MuaWQgKyAnLmpzb24nCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KTsK ICAgICAgICAgICAgdGhpcy5kb2N1bWVudHMuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiAo Yi5lcnN0ZWxsdCB8fCAnJykubG9jYWxlQ29tcGFyZShhLmVyc3RlbGx0IHx8ICcnKTsgfSk7Cgog ICAgICAgICAgICB0aGlzLmNvbm5lY3RlZCA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuZW52aXJv biA9IHsgdXNlcm5hbWU6ICdMZXNlcicsIGNvbXB1dGVybmFtZTogJy0nIH07CiAgICAgICAgICAg IHRoaXMudXBkYXRlQ29ubmVjdGlvblVJKCk7CiAgICAgICAgICAgIGF3YWl0IERyaXZlR292ZXJu YW5jZS5sb2FkKCk7CgogICAgICAgICAgICAvLyBTdGFydHNlaXRlIGF1cyBlaW5nZWJldHRldGVu IERhdGVuIGxhZGVuCiAgICAgICAgICAgIGlmIChkYXRhLnN0YXJ0c2VpdGUpIHsKICAgICAgICAg ICAgICAgIHZhciB3ZWxjb21lRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud2VsY29tZS1j b250ZW50Jyk7CiAgICAgICAgICAgICAgICBpZiAod2VsY29tZUVsKSB3ZWxjb21lRWwuaW5uZXJI VE1MID0gRHJpdmVQb3J0YWwuc2FuaXRpemVIVE1MKGRhdGEuc3RhcnRzZWl0ZSk7CiAgICAgICAg ICAgIH0KCiAgICAgICAgICAgIERyaXZlUG9ydGFsLmluaXQoKTsKICAgICAgICAgICAgcmV0dXJu IHRydWU7CiAgICAgICAgfSBjYXRjaChlKSB7IGNvbnNvbGUud2FybignU3RhdGljIGNvbm5lY3Q6 JywgZSk7IHJldHVybiBmYWxzZTsgfQogICAgfSwKCiAgICBhc3luYyB0cnlBdXRvUmVjb25uZWN0 KHVzZXJJbml0aWF0ZWQpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBzdG9yZWQg PSBhd2FpdCB0aGlzLl9sb2FkSGFuZGxlKCk7CiAgICAgICAgICAgIGlmICghc3RvcmVkKSByZXR1 cm4gZmFsc2U7CgogICAgICAgICAgICAvLyBQcnVlZmVuIG9iIEJlcmVjaHRpZ3VuZyBub2NoIGFr dGl2CiAgICAgICAgICAgIGxldCBwZXJtID0gYXdhaXQgc3RvcmVkLnF1ZXJ5UGVybWlzc2lvbih7 IG1vZGU6ICdyZWFkJyB9KTsKICAgICAgICAgICAgaWYgKHBlcm0gPT09ICdwcm9tcHQnICYmIHVz ZXJJbml0aWF0ZWQpIHsKICAgICAgICAgICAgICAgIC8vIEJlaSBVc2VyLUtsaWNrOiBlaW5mYWNo ZW4gRXJsYXViZW4tRGlhbG9nIHplaWdlbiAoa2VpbiBQaWNrZXIpCiAgICAgICAgICAgICAgICBw ZXJtID0gYXdhaXQgc3RvcmVkLnJlcXVlc3RQZXJtaXNzaW9uKHsgbW9kZTogJ3JlYWQnIH0pOwog ICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChwZXJtICE9PSAnZ3JhbnRlZCcpIHJldHVybiBm YWxzZTsKCiAgICAgICAgICAgIC8vIGRhdGEtVW50ZXJvcmRuZXIgYmVzdGltbWVuIChnZXNwZWlj aGVydGVyIEhhbmRsZSBrYW5uIFJvb3Qgb2RlciBkYXRhIHNlaW4pCiAgICAgICAgICAgIGxldCBk YXRhSGFuZGxlLCBtZWRpYUhhbmRsZSA9IG51bGwsIHJvb3RIYW5kbGUgPSBzdG9yZWQ7CiAgICAg ICAgICAgIGlmIChzdG9yZWQubmFtZSA9PT0gJ2RhdGEnKSB7CiAgICAgICAgICAgICAgICAvLyBV c2VyIGhhdHRlICJkYXRhIiBkaXJla3QgZ2V3YWVobHQKICAgICAgICAgICAgICAgIGRhdGFIYW5k bGUgPSBzdG9yZWQ7CiAgICAgICAgICAgICAgICAvLyBNZWRpYSBsaWVndCBlaW5lIEViZW5lIGhv ZWhlciAtIG5pY2h0IHZlcmZ1ZWdiYXIKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg ICAgIGRhdGFIYW5kbGUgPSBhd2FpdCBzdG9yZWQuZ2V0RGlyZWN0b3J5SGFuZGxlKCdkYXRhJyk7 CiAgICAgICAgICAgICAgICB0cnkgeyBtZWRpYUhhbmRsZSA9IGF3YWl0IHN0b3JlZC5nZXREaXJl Y3RvcnlIYW5kbGUoJ21lZGlhJyk7IH0gY2F0Y2gge30KICAgICAgICAgICAgfQoKICAgICAgICAg ICAgLy8gQWxsZXMgb2sgLSB2ZXJiaW5kZW4KICAgICAgICAgICAgdGhpcy5tb2RlID0gJ2ZpbGVz eXN0ZW0nOwogICAgICAgICAgICB0aGlzLnJlYWRPbmx5ID0gdHJ1ZTsKICAgICAgICAgICAgdGhp cy5fZGlySGFuZGxlID0gcm9vdEhhbmRsZTsKICAgICAgICAgICAgdGhpcy5fZGF0YUhhbmRsZSA9 IGRhdGFIYW5kbGU7CiAgICAgICAgICAgIHRoaXMuX21lZGlhSGFuZGxlID0gbWVkaWFIYW5kbGU7 CiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEVudmlyb24oKTsKICAgICAgICAgICAgYXdhaXQg dGhpcy5sb2FkQ29uZmlnKCk7CiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEFsbERvY3VtZW50 cygpOwogICAgICAgICAgICB0aGlzLmNvbm5lY3RlZCA9IHRydWU7CiAgICAgICAgICAgIHRoaXMu dXBkYXRlQ29ubmVjdGlvblVJKCk7CiAgICAgICAgICAgIGF3YWl0IERyaXZlR292ZXJuYW5jZS5s b2FkKCk7CiAgICAgICAgICAgIERyaXZlUG9ydGFsLmluaXQoKTsKICAgICAgICAgICAgc2hvd1Rv YXN0KCdPcmRuZXIgYXV0b21hdGlzY2ggdmVyYnVuZGVuIChOdXItTGVzZW4pJywgJ3N1Y2Nlc3Mn KTsKICAgICAgICAgICAgdGhpcy5zdGFydFN5bmMoKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7 CiAgICAgICAgfSBjYXRjaCB7IHJldHVybiBmYWxzZTsgfQogICAgfSwKCiAgICBhc3luYyB0cnlT ZXJ2ZXJDb25uZWN0KCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHNjYW5SZXMg PSBhd2FpdCBmZXRjaCgnL2FwaS9zY2FuJyk7CiAgICAgICAgICAgIGlmIChzY2FuUmVzLm9rKSB7 CiAgICAgICAgICAgICAgICB0aGlzLm1vZGUgPSAnc2VydmVyJzsKICAgICAgICAgICAgICAgIHRo aXMucmVhZE9ubHkgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEVudmly b24oKTsKICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZENvbmZpZygpOwogICAgICAgICAg ICAgICAgYXdhaXQgdGhpcy5sb2FkQWxsRG9jdW1lbnRzKCk7CiAgICAgICAgICAgICAgICB0aGlz LmNvbm5lY3RlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb25V SSgpOwogICAgICAgICAgICAgICAgYXdhaXQgRHJpdmVHb3Zlcm5hbmNlLmxvYWQoKTsKICAgICAg ICAgICAgICAgIERyaXZlUG9ydGFsLmluaXQoKTsKICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJJ bmZvID0gdGhpcy5lbnZpcm9uID8gJyAoQmVudXR6ZXI6ICcgKyB0aGlzLmVudmlyb24udXNlcm5h bWUgKyAnKScgOiAnJzsKICAgICAgICAgICAgICAgIHNob3dUb2FzdCgnVm9sbHp1Z3JpZmYgYWt0 aXYnICsgdXNlckluZm8sICdzdWNjZXNzJyk7CiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U3lu YygpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9 IGNhdGNoIHt9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKCiAgICBhc3luYyBjb25uZWN0 RmlsZXN5c3RlbShhY2Nlc3NNb2RlKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3Qg aXNSZWFkT25seSA9IChhY2Nlc3NNb2RlID09PSAncmVhZCcpOwogICAgICAgICAgICBjb25zdCBk aXJIYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd0RpcmVjdG9yeVBpY2tlcih7CiAgICAgICAgICAg ICAgICBtb2RlOiBpc1JlYWRPbmx5ID8gJ3JlYWQnIDogJ3JlYWR3cml0ZScsCiAgICAgICAgICAg ICAgICBpZDogJ2RyaXZlLWRhdGEnCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLm1v ZGUgPSAnZmlsZXN5c3RlbSc7CiAgICAgICAgICAgIHRoaXMucmVhZE9ubHkgPSBpc1JlYWRPbmx5 OwogICAgICAgICAgICB0aGlzLl9kaXJIYW5kbGUgPSBkaXJIYW5kbGU7CgogICAgICAgICAgICAv LyBFcmtlbm51bmc6IFVzZXIgaGF0ICJkYXRhIiBkaXJla3Qgb2RlciBkZW4gSGF1cHRvcmRuZXIg Z2V3YWVobHQKICAgICAgICAgICAgbGV0IGhhc0RhdGFTdWIgPSBmYWxzZTsKICAgICAgICAgICAg dHJ5IHsgYXdhaXQgZGlySGFuZGxlLmdldERpcmVjdG9yeUhhbmRsZSgnZGF0YScpOyBoYXNEYXRh U3ViID0gdHJ1ZTsgfSBjYXRjaCB7fQoKICAgICAgICAgICAgaWYgKGhhc0RhdGFTdWIpIHsKICAg ICAgICAgICAgICAgIC8vIEhhdXB0b3JkbmVyIGdld2FlaGx0IChlbnRoYWVsdCBkYXRhLykKICAg ICAgICAgICAgICAgIHRoaXMuX2RhdGFIYW5kbGUgPSBhd2FpdCBkaXJIYW5kbGUuZ2V0RGlyZWN0 b3J5SGFuZGxlKCdkYXRhJywgeyBjcmVhdGU6ICFpc1JlYWRPbmx5IH0pOwogICAgICAgICAgICAg ICAgaWYgKCFpc1JlYWRPbmx5KSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVkaWFIYW5k bGUgPSBhd2FpdCBkaXJIYW5kbGUuZ2V0RGlyZWN0b3J5SGFuZGxlKCdtZWRpYScsIHsgY3JlYXRl OiB0cnVlIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0 cnkgeyB0aGlzLl9tZWRpYUhhbmRsZSA9IGF3YWl0IGRpckhhbmRsZS5nZXREaXJlY3RvcnlIYW5k bGUoJ21lZGlhJyk7IH0gY2F0Y2ggeyB0aGlzLl9tZWRpYUhhbmRsZSA9IG51bGw7IH0KICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vICJkYXRh IiBPcmRuZXIgZGlyZWt0IGdld2FlaGx0IChvZGVyIGFuZGVyZXIgT3JkbmVyIG1pdCBjb25maWcu anNvbikKICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFIYW5kbGUgPSBkaXJIYW5kbGU7CiAgICAg ICAgICAgICAgICB0aGlzLl9tZWRpYUhhbmRsZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAg ICAgICAgYXdhaXQgdGhpcy5sb2FkRW52aXJvbigpOwogICAgICAgICAgICBhd2FpdCB0aGlzLmxv YWRDb25maWcoKTsKICAgICAgICAgICAgaWYgKCFpc1JlYWRPbmx5KSB7CiAgICAgICAgICAgICAg ICBmb3IgKGNvbnN0IGthdCBvZiAodGhpcy5jb25maWcua2F0ZWdvcmllbiB8fCBbXSkpIHsKICAg ICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kYXRhSGFuZGxlLmdldERpcmVjdG9yeUhhbmRs ZShrYXQsIHsgY3JlYXRlOiB0cnVlIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9 CiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEFsbERvY3VtZW50cygpOwogICAgICAgICAgICB0 aGlzLmNvbm5lY3RlZCA9IHRydWU7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29ubmVjdGlvblVJ KCk7CiAgICAgICAgICAgIGF3YWl0IERyaXZlR292ZXJuYW5jZS5sb2FkKCk7CiAgICAgICAgICAg IERyaXZlUG9ydGFsLmluaXQoKTsKICAgICAgICAgICAgY29uc3QgbW9kZVRleHQgPSBpc1JlYWRP bmx5ID8gJ051ci1MZXNlbi1Nb2R1cycgOiAnVm9sbHp1Z3JpZmYnOwogICAgICAgICAgICBzaG93 VG9hc3QobW9kZVRleHQgKyAnOiAnICsgZGlySGFuZGxlLm5hbWUsICdzdWNjZXNzJyk7CiAgICAg ICAgICAgIHRoaXMuc3RhcnRTeW5jKCk7CgogICAgICAgICAgICAvLyBIYW5kbGUgc3BlaWNoZXJu IGZ1ZXIgYXV0b21hdGlzY2hlIFdpZWRlcnZlcmJpbmR1bmcKICAgICAgICAgICAgYXdhaXQgdGhp cy5fc2F2ZUhhbmRsZShkaXJIYW5kbGUpOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAg ICAgICBpZiAoZXJyLm5hbWUgIT09ICdBYm9ydEVycm9yJykgewogICAgICAgICAgICAgICAgc2hv d1RvYXN0KCdGZWhsZXI6ICcgKyBlcnIubWVzc2FnZSwgJ2Vycm9yJyk7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICB9LAoKICAgIC8vIFdpcmQgYXVmZ2VydWZlbiB3ZW5uIFVzZXIgQmVhcmJl aXR1bmcgYWt0aXZpZXJlbiB3aWxsCiAgICBhc3luYyBhY3RpdmF0ZVNlcnZlcigpIHsKICAgICAg ICAvLyBQcnVlZmVuIG9iIFNlcnZlciBpbnp3aXNjaGVuIGxhZXVmdAogICAgICAgIGlmIChhd2Fp dCB0aGlzLnRyeVNlcnZlckNvbm5lY3QoKSkgewogICAgICAgICAgICBzaG93VG9hc3QoJ1NlcnZl ciBlcmthbm50IC0gVm9sbHp1Z3JpZmYgYWt0aXZpZXJ0IScsICdzdWNjZXNzJyk7CiAgICAgICAg ICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIFNlcnZlciBuaWNodCBlcnJlaWNoYmFy IC0gSGlud2VpcyBhbnplaWdlbgogICAgICAgIHNob3dUb2FzdCgnU2VydmVyIG5pY2h0IGVycmVp Y2hiYXIuIEJpdHRlIHN0YXJ0ZSBEUklWRV9TdGFydC5iYXQgcGVyIERvcHBlbGtsaWNrIHVuZCB2 ZXJzdWNoZSBlcyBlcm5ldXQuJywgJ3dhcm5pbmcnLCA1MDAwKTsKICAgIH0sCgogICAgLy8gVXBn cmFkZSB2b24gTnVyLUxlc2VuIGF1ZiBTY2hyZWliZW4gKEZpbGVzeXN0ZW0tTW9kdXMpCiAgICBh c3luYyB1cGdyYWRlVG9SZWFkV3JpdGUoKSB7CiAgICAgICAgLy8gRXJzdCBTZXJ2ZXIgcHJ1ZWZl bgogICAgICAgIGlmIChhd2FpdCB0aGlzLnRyeVNlcnZlckNvbm5lY3QoKSkgcmV0dXJuIHRydWU7 CgogICAgICAgIC8vIEZpbGVzeXN0ZW06IFNjaHJlaWJyZWNodGUgYW5mb3JkZXJuCiAgICAgICAg aWYgKHRoaXMubW9kZSA9PT0gJ2ZpbGVzeXN0ZW0nICYmIHRoaXMuX2RpckhhbmRsZSkgewogICAg ICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY29uc3QgcGVybSA9IGF3YWl0IHRoaXMuX2Rp ckhhbmRsZS5yZXF1ZXN0UGVybWlzc2lvbih7IG1vZGU6ICdyZWFkd3JpdGUnIH0pOwogICAgICAg ICAgICAgICAgaWYgKHBlcm0gPT09ICdncmFudGVkJykgewogICAgICAgICAgICAgICAgICAgIHRo aXMucmVhZE9ubHkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZWRpYUhhbmRs ZSA9IGF3YWl0IHRoaXMuX2RpckhhbmRsZS5nZXREaXJlY3RvcnlIYW5kbGUoJ21lZGlhJywgeyBj cmVhdGU6IHRydWUgfSk7CiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrYXQgb2YgKHRo aXMuY29uZmlnLmthdGVnb3JpZW4gfHwgW10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF3 YWl0IHRoaXMuX2RhdGFIYW5kbGUuZ2V0RGlyZWN0b3J5SGFuZGxlKGthdCwgeyBjcmVhdGU6IHRy dWUgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRoaXMudXBk YXRlQ29ubmVjdGlvblVJKCk7CiAgICAgICAgICAgICAgICAgICAgc2hvd1RvYXN0KCdTY2hyZWli enVncmlmZiBha3RpdmllcnQnLCAnc3VjY2VzcycpOwogICAgICAgICAgICAgICAgICAgIHJldHVy biB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIHt9CiAgICAgICAg fQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9LAoKICAgIC8vIFBydWVmZW4gb2IgU2NocmVp Ynp1Z3JpZmYgdm9yaGFuZGVuLCBzb25zdCBVcGdyYWRlIHZlcnN1Y2hlbgogICAgYXN5bmMgZW5z dXJlV3JpdGVBY2Nlc3MoKSB7CiAgICAgICAgaWYgKCF0aGlzLnJlYWRPbmx5KSByZXR1cm4gdHJ1 ZTsKCiAgICAgICAgY29uc3QgY2hvaWNlID0gY29uZmlybSgKICAgICAgICAgICAgJ1p1bSBCZWFy YmVpdGVuIHdpcmQgU2NocmVpYnp1Z3JpZmYgYmVuw7Z0aWd0LlxuXG4nICsKICAgICAgICAgICAg J09wdGlvbiAxOiBTdGFydGUgRFJJVkVfU3RhcnQuYmF0IHVuZCBrbGlja2UgT0suXG4nICsKICAg ICAgICAgICAgJ09wdGlvbiAyOiBLbGlja2UgT0ssIHVtIFNjaHJlaWJyZWNodGUgaW0gQnJvd3Nl ciB6dSBlcnRlaWxlbi4nCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCFjaG9pY2UpIHJldHVybiBm YWxzZTsKICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy51cGdyYWRlVG9SZWFkV3JpdGUoKTsKICAg IH0sCgogICAgcmVjb25uZWN0KCkgewogICAgICAgIGlmICh3aW5kb3cuc2hvd0RpcmVjdG9yeVBp Y2tlcikgewogICAgICAgICAgICB0aGlzLmNvbm5lY3RGaWxlc3lzdGVtKCdyZWFkJyk7CiAgICAg ICAgfQogICAgfSwKCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gRU5WSVJPTgogICAgLy8gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KCiAgICBhc3luYyBsb2FkRW52aXJvbigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBj b25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9lbnZpcm9uJyk7CiAgICAgICAgICAgIGlmIChy ZXMub2spIHsKICAgICAgICAgICAgICAgIHRoaXMuZW52aXJvbiA9IGF3YWl0IHJlcy5qc29uKCk7 CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQmVudXR6ZXI6JywgdGhpcy5lbnZpcm9uLnVz ZXJuYW1lLCAnQCcsIHRoaXMuZW52aXJvbi5jb21wdXRlcm5hbWUpOwogICAgICAgICAgICAgICAg cmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCB7fQogICAgICAgIC8vIEZhbGxi YWNrOiBJbSBOdXItTGVzZW4tTW9kdXMga2VpbmVuIE5hbWVuIGFiZnJhZ2VuCiAgICAgICAgaWYg KHRoaXMucmVhZE9ubHkpIHsKICAgICAgICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdl LmdldEl0ZW0oJ2RyaXZlX3VzZXJuYW1lJyk7CiAgICAgICAgICAgIGlmIChzdG9yZWQpIHsKICAg ICAgICAgICAgICAgIHRoaXMuZW52aXJvbiA9IHsgdXNlcm5hbWU6IHN0b3JlZCwgY29tcHV0ZXJu YW1lOiAnLScgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuZW52 aXJvbiA9IHsgdXNlcm5hbWU6ICdMZXNlcicsIGNvbXB1dGVybmFtZTogJy0nIH07CiAgICAgICAg ICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAvLyBTY2hyZWlibW9k dXM6IE5hbWVuIGFiZnJhZ2VuCiAgICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdl dEl0ZW0oJ2RyaXZlX3VzZXJuYW1lJyk7CiAgICAgICAgaWYgKHN0b3JlZCkgewogICAgICAgICAg ICB0aGlzLmVudmlyb24gPSB7IHVzZXJuYW1lOiBzdG9yZWQsIGNvbXB1dGVybmFtZTogJy0nIH07 CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgbmFtZSA9IHByb21wdCgnQml0dGUg Z2liIGRlaW5lbiBCZW51dHplcm5hbWVuIGVpbjonKTsKICAgICAgICAgICAgaWYgKG5hbWUpIHsK ICAgICAgICAgICAgICAgIHRoaXMuZW52aXJvbiA9IHsgdXNlcm5hbWU6IG5hbWUudHJpbSgpLCBj b21wdXRlcm5hbWU6ICctJyB9OwogICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0o J2RyaXZlX3VzZXJuYW1lJywgbmFtZS50cmltKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgfSwKCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gQ09ORklHCiAgICAvLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAg IGFzeW5jIGxvYWRDb25maWcoKSB7CiAgICAgICAgY29uc3QgZGVmYXVsdENvbmZpZyA9IHsKICAg ICAgICAgICAgdmVyc2lvbjogJzMuMCcsCiAgICAgICAgICAgIGthdGVnb3JpZW46IFsnVmVya2Vo cicsICdTaWNoZXJoZWl0JywgJ1BsYW51bmcnLCAnT3JnYW5pc2F0aW9uJ10sCiAgICAgICAgICAg IHN0YXR1czogewogICAgICAgICAgICAgICAgJ0VudHd1cmYnOiB7IGxhYmVsOiAnRW50d3VyZics IGNvbG9yOiAnI0ZGRjNDRCcsIHRleHRDb2xvcjogJyM4NTY0MDQnLCBpY29uOiAnXHVkODNkXHVk Y2RkJywgYmVzY2hyZWlidW5nOiAnRG9rdW1lbnQgaW4gQmVhcmJlaXR1bmcnIH0sCiAgICAgICAg ICAgICAgICAnUHLDvGZ1bmcnOiB7IGxhYmVsOiAnWnVyIFByw7xmdW5nJywgY29sb3I6ICcjRkZF NUI0JywgdGV4dENvbG9yOiAnIzdBNDQxOScsIGljb246ICfwn5GB77iPJywgYmVzY2hyZWlidW5n OiAnV2FydGV0IGF1ZiBGcmVpZ2FiZScgfSwKICAgICAgICAgICAgICAgICdGcmVpZ2VnZWJlbic6 IHsgbGFiZWw6ICdGcmVpZ2VnZWJlbicsIGNvbG9yOiAnI0Q0RUREQScsIHRleHRDb2xvcjogJyMx NTU3MjQnLCBpY29uOiAn4pyFJywgYmVzY2hyZWlidW5nOiAnVmVyZsO8Z2JhciB1bmQgZWluc2F0 emJlcmVpdCcgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgLy8gU2VydmVyLU1v ZHVzOiBjb25maWcgdmlhIEhUVFAgbGFkZW4gKGFic29sdXRlciBQZmFkKQogICAgICAgIGlmICh0 aGlzLm1vZGUgPT09ICdzZXJ2ZXInKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAg ICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2RhdGEvY29uZmlnLmpzb24nKTsKICAgICAgICAg ICAgICAgIGlmIChyZXMub2spIHsgdGhpcy5jb25maWcgPSBhd2FpdCByZXMuanNvbigpOyB0aGlz LnNvcnRLYXRlZ29yaWVuKCk7IHJldHVybjsgfQogICAgICAgICAgICB9IGNhdGNoIHt9CiAgICAg ICAgfQoKICAgICAgICAvLyBTdGF0aXNjaGVyIE1vZHVzOiBjb25maWcgdmlhIHJlbGF0aXZlbSBQ ZmFkIGxhZGVuCiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3N0YXRpYycpIHsKICAgICAgICAg ICAgdHJ5IHsKICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCdkYXRhL2Nv bmZpZy5qc29uJyk7CiAgICAgICAgICAgICAgICBpZiAocmVzLm9rKSB7IHRoaXMuY29uZmlnID0g YXdhaXQgcmVzLmpzb24oKTsgdGhpcy5zb3J0S2F0ZWdvcmllbigpOyByZXR1cm47IH0KICAgICAg ICAgICAgfSBjYXRjaCB7fQogICAgICAgIH0KCiAgICAgICAgLy8gRmlsZXN5c3RlbS1Nb2R1czog Y29uZmlnLmpzb24gYXVzIGRhdGEtSGFuZGxlIGxhZGVuCiAgICAgICAgaWYgKHRoaXMuX2RhdGFI YW5kbGUpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGNvbnN0IGZoID0gYXdh aXQgdGhpcy5fZGF0YUhhbmRsZS5nZXRGaWxlSGFuZGxlKCdjb25maWcuanNvbicpOwogICAgICAg ICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGZoLmdldEZpbGUoKTsKICAgICAgICAgICAgICAg IHRoaXMuY29uZmlnID0gSlNPTi5wYXJzZShhd2FpdCBmaWxlLnRleHQoKSk7CiAgICAgICAgICAg ICAgICB0aGlzLnNvcnRLYXRlZ29yaWVuKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg ICAgICAgIH0gY2F0Y2gge30KICAgICAgICB9CgogICAgICAgIHRoaXMuY29uZmlnID0gZGVmYXVs dENvbmZpZzsKICAgICAgICB0aGlzLnNvcnRLYXRlZ29yaWVuKCk7CiAgICB9LAoKICAgIC8vIEth dGVnb3JpZW4gYWxwaGFiZXRpc2NoIHNvcnRpZXJ0IGhhbHRlbiAobmFjaCBqZWRlbSBMYWRlbi9B ZW5kZXJuIGF1ZnJ1ZmVuKQogICAgc29ydEthdGVnb3JpZW4oKSB7CiAgICAgICAgaWYgKHRoaXMu Y29uZmlnICYmIHRoaXMuY29uZmlnLmthdGVnb3JpZW4pIHsKICAgICAgICAgICAgdGhpcy5jb25m aWcua2F0ZWdvcmllbi5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEubG9jYWxlQ29tcGFy ZShiLCAnZGUnKTsgfSk7CiAgICAgICAgfQogICAgfSwKCiAgICAvLyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8g TE9BRCBBTEwgRE9DVU1FTlRTCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgIGFzeW5jIGxvYWRBbGxEb2N1 bWVudHMoKSB7CiAgICAgICAgdGhpcy5kb2N1bWVudHMgPSBbXTsKICAgICAgICB0aGlzLmZpbGVU aW1lc3RhbXBzID0ge307CgogICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdzdGF0aWMnKSB7CiAg ICAgICAgICAgIC8vIFN0YXRpc2NoZXIgTW9kdXM6IERva3VtZW50ZSB3dXJkZW4gYmVyZWl0cyBp biB0cnlTdGF0aWNDb25uZWN0KCkgZ2VsYWRlbgogICAgICAgICAgICByZXR1cm47CiAgICAgICAg fSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdzZXJ2ZXInKSB7CiAgICAgICAgICAgIC8vIFNlcnZl ciBzY2FubnQgZGllIE9yZG5lciBmdWVyIHVucwogICAgICAgICAgICBjb25zdCByZXMgPSBhd2Fp dCBmZXRjaCgnL2FwaS9zY2FuJyk7CiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMu anNvbigpOwoKICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiAoZGF0YS5maWxlcyB8fCBb XSkpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9j UmVzID0gYXdhaXQgZmV0Y2goJy8nICsgZW50cnkucGF0aCk7CiAgICAgICAgICAgICAgICAgICAg aWYgKGRvY1Jlcy5vaykgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb2MgPSBhd2Fp dCBkb2NSZXMuanNvbigpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJzaW9uc2ludGVn cml0YWV0IHBydWVmZW4gdW5kIGdnZi4ga29ycmlnaWVyZW4KICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGVuc3VyZUNvcnJlY3RWZXJzaW9uKGRvYykpIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vIEtvcnJpZ2llcnRlIFZlcnNpb24genVydWVja3NjaHJlaWJlbgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgZmV0Y2goJy9hcGkvd3JpdGUnLCB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBwYXRo OiBlbnRyeS5wYXRoLCBkYXRhOiBkb2MgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p LmNhdGNoKGZ1bmN0aW9uKCkge30pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRzLnB1c2goZG9jKTsKICAgICAgICAgICAgICAg ICAgICAgICAgdGhpcy5maWxlVGltZXN0YW1wc1tkb2MuaWRdID0gewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgbW9kaWZpZWQ6IGVudHJ5Lm1vZGlmaWVkLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAga2F0ZWdvcmllOiBlbnRyeS5rYXRlZ29yaWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmaWxlbmFtZTogZW50cnkuZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwYXRoOiBlbnRyeS5wYXRoCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAg ICAgICAgICAgY29uc29sZS53YXJuKCdGZWhsZXIgYmVpbSBMYWRlbjogJyArIGVudHJ5LnBhdGgs IGVycik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2Ugewog ICAgICAgICAgICAvLyBGaWxlc3lzdGVtLU1vZHVzOiBLYXRlZ29yaWUtT3JkbmVyIGR1cmNobGF1 ZmVuCiAgICAgICAgICAgIGZvciAoY29uc3Qga2F0IG9mICh0aGlzLmNvbmZpZy5rYXRlZ29yaWVu IHx8IFtdKSkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBjb25z dCBrYXREaXIgPSBhd2FpdCB0aGlzLl9kYXRhSGFuZGxlLmdldERpcmVjdG9yeUhhbmRsZShrYXQp OwogICAgICAgICAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgW25hbWUsIGhhbmRsZV0gb2Yg a2F0RGlyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUua2luZCA9PT0gJ2Zp bGUnICYmIG5hbWUuZW5kc1dpdGgoJy5qc29uJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3 YWl0IGhhbmRsZS5nZXRGaWxlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgZG9jID0gSlNPTi5wYXJzZShhd2FpdCBmaWxlLnRleHQoKSk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZW5zdXJlQ29ycmVjdFZlcnNpb24oZG9jKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50cy5wdXNoKGRvYyk7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhpcy5maWxlVGltZXN0YW1wc1tkb2MuaWRdID0gewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdGVnb3JpZToga2F0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogbmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogJ2RhdGEvJyArIGthdCArICcvJyArIG5h bWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc29sZS53YXJuKCdGZWhsZXI6ICcgKyBrYXQgKyAnLycgKyBuYW1lLCBlcnIpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBjYXRjaCB7fQogICAgICAgICAgICB9CiAg ICAgICAgfQoKICAgICAgICB0aGlzLmRvY3VtZW50cy5zb3J0KChhLCBiKSA9PiAoYi5lcnN0ZWxs dCB8fCAnJykubG9jYWxlQ29tcGFyZShhLmVyc3RlbGx0IHx8ICcnKSk7CiAgICAgICAgYXdhaXQg dGhpcy51cGRhdGVJbmRleCgpOwogICAgfSwKCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gTE9BRCBT SU5HTEUgRE9DVU1FTlQgKGZyaXNjaCB2b24gRGlzaykKICAgIC8vID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgYXN5 bmMgbG9hZERvY3VtZW50KGRvY0lkKSB7CiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuZmlsZVRp bWVzdGFtcHNbZG9jSWRdOwogICAgICAgIGlmICghbWV0YSkgewogICAgICAgICAgICAvLyBLZWlu IERhdGVpcGZhZCBiZWthbm50IC0gSW4tTWVtb3J5LUZhbGxiYWNrCiAgICAgICAgICAgIHJldHVy biB0aGlzLmRvY3VtZW50cy5maW5kKGQgPT4gZC5pZCA9PT0gZG9jSWQpIHx8IG51bGw7CiAgICAg ICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnc2VydmVy JykgewogICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy8nICsgbWV0YS5w YXRoICsgJz90PScgKyBEYXRlLm5vdygpKTsKICAgICAgICAgICAgICAgIGlmICghcmVzLm9rKSB0 aHJvdyBuZXcgRXJyb3IoJ0hUVFAgJyArIHJlcy5zdGF0dXMpOwogICAgICAgICAgICAgICAgcmV0 dXJuIGF3YWl0IHJlcy5qc29uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09 PSAnc3RhdGljJykgewogICAgICAgICAgICAgICAgLy8gU3RhdGlzY2g6IEluLU1lbW9yeSB2ZXJ3 ZW5kZW4gKGJlcmVpdHMga29tcGxldHQgZ2VsYWRlbikKICAgICAgICAgICAgICAgIHJldHVybiB0 aGlzLmRvY3VtZW50cy5maW5kKGQgPT4gZC5pZCA9PT0gZG9jSWQpIHx8IG51bGw7CiAgICAgICAg ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb25zdCBrYXREaXIgPSBhd2FpdCB0aGlzLl9k YXRhSGFuZGxlLmdldERpcmVjdG9yeUhhbmRsZShtZXRhLmthdGVnb3JpZSk7CiAgICAgICAgICAg ICAgICBjb25zdCBmaCA9IGF3YWl0IGthdERpci5nZXRGaWxlSGFuZGxlKG1ldGEuZmlsZW5hbWUp OwogICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGZoLmdldEZpbGUoKTsKICAgICAg ICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGF3YWl0IGZpbGUudGV4dCgpKTsKICAgICAgICAg ICAgfQogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICBjb25zb2xlLndhcm4oJ2xv YWREb2N1bWVudCBGZWhsZXIgZnVlciAnICsgZG9jSWQgKyAnOicsIGVycik7CiAgICAgICAgICAg IC8vIEZhbGxiYWNrOiBJbi1NZW1vcnktVmVyc2lvbiB2ZXJ3ZW5kZW4gKGJlcmVpdHMgYmVpbSBT dGFydCBnZWxhZGVuKQogICAgICAgICAgICBjb25zdCBtZW1Eb2MgPSB0aGlzLmRvY3VtZW50cy5m aW5kKGQgPT4gZC5pZCA9PT0gZG9jSWQpOwogICAgICAgICAgICBpZiAobWVtRG9jKSByZXR1cm4g bWVtRG9jOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9LAoKICAgIC8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CiAgICAvLyBTQVZFIERPQ1VNRU5UCiAgICAvLyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgIGFzeW5j IHNhdmVEb2N1bWVudChkb2MpIHsKICAgICAgICBjb25zdCBkb2NJZCA9IGRvYy5pZDsKICAgICAg ICBjb25zdCBtZXRhID0gdGhpcy5maWxlVGltZXN0YW1wc1tkb2NJZF07CiAgICAgICAgY29uc3Qg bmV3UGF0aCA9IHRoaXMuZG9jUGF0aChkb2MpOwoKICAgICAgICAvLyBBbHRlIERhdGVpIGxvZXNj aGVuIGZhbGxzIFBmYWQgc2ljaCBnZWFlbmRlcnQgaGF0CiAgICAgICAgaWYgKG1ldGEgJiYgbWV0 YS5wYXRoICE9PSBuZXdQYXRoKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlRmlsZSht ZXRhLnBhdGgpOwogICAgICAgIH0KCiAgICAgICAgLy8gR2VhZW5kZXJ0LVRpbWVzdGFtcCB1bmQg QmVhcmJlaXRlciBzZXR6ZW4KICAgICAgICBkb2MuZ2VhZW5kZXJ0ID0gbmV3IERhdGUoKS50b0lT T1N0cmluZygpLnNwbGl0KCdUJylbMF07CiAgICAgICAgaWYgKHRoaXMuZW52aXJvbiAmJiB0aGlz LmVudmlyb24udXNlcm5hbWUpIHsKICAgICAgICAgICAgZG9jLmJlYXJiZWl0ZXRWb24gPSB0aGlz LmVudmlyb24udXNlcm5hbWU7CiAgICAgICAgfQoKICAgICAgICAvLyBUZW1wb3JhZXJlIFByb3Bl cnRpZXMgZW50ZmVybmVuIChtaXQgXyBQcmVmaXgsIG5pY2h0IHBlcnNpc3RpZXJlbikKICAgICAg ICBkZWxldGUgZG9jLl9wcmV2aW91c0luaGFsdDsKICAgICAgICBkZWxldGUgZG9jLl9wcmV2aW91 c1RpdGVsOwoKICAgICAgICAvLyBTcGVpY2hlcm4KICAgICAgICBpZiAodGhpcy5tb2RlID09PSAn c2VydmVyJykgewogICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS93cml0 ZScsIHsKICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgICAgICAgaGVh ZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgn IH0sCiAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHBhdGg6IG5ld1BhdGgs IGRhdGE6IGRvYyB9KQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0g YXdhaXQgcmVzLmpzb24oKTsKICAgICAgICAgICAgaWYgKCFyZXN1bHQub2spIHsKICAgICAgICAg ICAgICAgIHJldHVybiByZXN1bHQuZXJyb3IgfHwgJ1VuYmVrYW5udGVyIEZlaGxlcic7CiAgICAg ICAgICAgIH0KICAgICAgICAgICAgdGhpcy5maWxlVGltZXN0YW1wc1tkb2NJZF0gPSB7CiAgICAg ICAgICAgICAgICBtb2RpZmllZDogcmVzdWx0Lm1vZGlmaWVkLAogICAgICAgICAgICAgICAga2F0 ZWdvcmllOiBkb2Mua2F0ZWdvcmllLAogICAgICAgICAgICAgICAgZmlsZW5hbWU6IHRoaXMuZG9j RmlsZW5hbWUoZG9jKSwKICAgICAgICAgICAgICAgIHBhdGg6IG5ld1BhdGgKICAgICAgICAgICAg fTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBrYXREaXIgPSBhd2FpdCB0aGlz Ll9kYXRhSGFuZGxlLmdldERpcmVjdG9yeUhhbmRsZShkb2Mua2F0ZWdvcmllLCB7IGNyZWF0ZTog dHJ1ZSB9KTsKICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLmRvY0ZpbGVuYW1lKGRv Yyk7CiAgICAgICAgICAgIGNvbnN0IGZoID0gYXdhaXQga2F0RGlyLmdldEZpbGVIYW5kbGUoZmls ZW5hbWUsIHsgY3JlYXRlOiB0cnVlIH0pOwogICAgICAgICAgICBjb25zdCB3cml0YWJsZSA9IGF3 YWl0IGZoLmNyZWF0ZVdyaXRhYmxlKCk7CiAgICAgICAgICAgIGF3YWl0IHdyaXRhYmxlLndyaXRl KEpTT04uc3RyaW5naWZ5KGRvYywgbnVsbCwgMikpOwogICAgICAgICAgICBhd2FpdCB3cml0YWJs ZS5jbG9zZSgpOwogICAgICAgICAgICBjb25zdCBzYXZlZEZpbGUgPSBhd2FpdCAoYXdhaXQga2F0 RGlyLmdldEZpbGVIYW5kbGUoZmlsZW5hbWUpKS5nZXRGaWxlKCk7CiAgICAgICAgICAgIHRoaXMu ZmlsZVRpbWVzdGFtcHNbZG9jSWRdID0gewogICAgICAgICAgICAgICAgbW9kaWZpZWQ6IHNhdmVk RmlsZS5sYXN0TW9kaWZpZWQsCiAgICAgICAgICAgICAgICBrYXRlZ29yaWU6IGRvYy5rYXRlZ29y aWUsCiAgICAgICAgICAgICAgICBmaWxlbmFtZTogZmlsZW5hbWUsCiAgICAgICAgICAgICAgICBw YXRoOiBuZXdQYXRoCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAvLyBJbi1NZW1v cnkgYWt0dWFsaXNpZXJlbgogICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuZG9jdW1lbnRzLmZpbmRJ bmRleChkID0+IGQuaWQgPT09IGRvY0lkKTsKICAgICAgICBpZiAoaWR4ID49IDApIHsgdGhpcy5k b2N1bWVudHNbaWR4XSA9IGRvYzsgfSBlbHNlIHsgdGhpcy5kb2N1bWVudHMucHVzaChkb2MpOyB9 CgogICAgICAgIGF3YWl0IHRoaXMudXBkYXRlSW5kZXgoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsK ICAgIH0sCgogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIERFTEVURQogICAgLy8gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAg ICBhc3luYyBkZWxldGVGaWxlKHBhdGgpIHsKICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnc2Vy dmVyJykgewogICAgICAgICAgICB2YXIgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvZGVsZXRlJywg ewogICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICBoZWFkZXJz OiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcgfSwK ICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcGF0aDogcGF0aCB9KQogICAg ICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKCFyZXMub2spIHsKICAgICAgICAgICAgICAgIHZh ciBlcnIgPSBhd2FpdCByZXMuanNvbigpLmNhdGNoKGZ1bmN0aW9uKCkgeyByZXR1cm4ge307IH0p OwogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyci5lcnJvciB8fCAnTMO2c2NoZW4g ZmVobGdlc2NobGFnZW4gKEhUVFAgJyArIHJlcy5zdGF0dXMgKyAnKScpOwogICAgICAgICAgICB9 CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gRmlsZXN5c3RlbTogRGF0ZWkgYXVzIEth dGVnb3JpZS1PcmRuZXIgbG9lc2NoZW4KICAgICAgICAgICAgY29uc3QgcGFydHMgPSBwYXRoLnNw bGl0KCcvJyk7CiAgICAgICAgICAgIGNvbnN0IGthdCA9IHBhcnRzWzFdOwogICAgICAgICAgICBj b25zdCBmaWxlbmFtZSA9IHBhcnRzWzJdOwogICAgICAgICAgICBjb25zdCBrYXREaXIgPSBhd2Fp dCB0aGlzLl9kYXRhSGFuZGxlLmdldERpcmVjdG9yeUhhbmRsZShrYXQpOwogICAgICAgICAgICBh d2FpdCBrYXREaXIucmVtb3ZlRW50cnkoZmlsZW5hbWUpOwogICAgICAgIH0KICAgIH0sCgogICAg YXN5bmMgZGVsZXRlRG9jdW1lbnQoZG9jSWQpIHsKICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5m aWxlVGltZXN0YW1wc1tkb2NJZF07CiAgICAgICAgaWYgKCFtZXRhKSByZXR1cm4gZmFsc2U7Cgog ICAgICAgIHRyeSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlRmlsZShtZXRhLnBhdGgp OwogICAgICAgICAgICB0aGlzLmRvY3VtZW50cyA9IHRoaXMuZG9jdW1lbnRzLmZpbHRlcihkID0+ IGQuaWQgIT09IGRvY0lkKTsKICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmlsZVRpbWVzdGFtcHNb ZG9jSWRdOwoKICAgICAgICAgICAgLy8gTWVkaWEtT3JkbmVyIGxvZXNjaGVuCiAgICAgICAgICAg IHRyeSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnc2VydmVyJykgewogICAg ICAgICAgICAgICAgICAgIGF3YWl0IGZldGNoKCcvYXBpL2RlbGV0ZScsIHsKICAgICAgICAgICAg ICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRl cnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JyB9 LAogICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHBhdGg6ICdt ZWRpYS8nICsgZG9jSWQgfSkKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbWVkaWFIYW5kbGUucmVt b3ZlRW50cnkoZG9jSWQsIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICB9IGNhdGNoIHt9CgogICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUluZGV4 KCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAg ICAgICAgICBjb25zb2xlLmVycm9yKCdMb2VzY2hmZWhsZXI6JywgZXJyKTsKICAgICAgICAgICAg cmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0sCgogICAgLy8gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIElO REVYCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQoKICAgIGFzeW5jIHVwZGF0ZUluZGV4KCkgewogICAgICAgIC8v IFN0YXRpc2NoZXIgTW9kdXM6IEluZGV4IG5pY2h0IHNjaHJlaWJlbiAoa2VpbiBTY2hyZWlienVn cmlmZikKICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnc3RhdGljJykgcmV0dXJuOwoKICAgICAg ICBjb25zdCBpbmRleERhdGEgPSB7CiAgICAgICAgICAgIHZlcnNpb246ICczLjAnLAogICAgICAg ICAgICBsYXN0VXBkYXRlZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLAogICAgICAgICAgICBk b2N1bWVudHM6IHRoaXMuZG9jdW1lbnRzLm1hcChkb2MgPT4gKHsKICAgICAgICAgICAgICAgIGlk OiBkb2MuaWQsCiAgICAgICAgICAgICAgICB0aXRlbDogZG9jLnRpdGVsLAogICAgICAgICAgICAg ICAga2F0ZWdvcmllOiBkb2Mua2F0ZWdvcmllLAogICAgICAgICAgICAgICAgc3RhdHVzOiBkb2Mu c3RhdHVzLAogICAgICAgICAgICAgICAgZXJzdGVsbHQ6IGRvYy5lcnN0ZWxsdCwKICAgICAgICAg ICAgICAgIGdlYWVuZGVydDogZG9jLmdlYWVuZGVydCB8fCBkb2MuZXJzdGVsbHQsCiAgICAgICAg ICAgICAgICB2ZXJzaW9uOiBkb2MudmVyc2lvbiwKICAgICAgICAgICAgICAgIGhhc01lZGlhOiAo ZG9jLm1lZGlhcyAmJiBkb2MubWVkaWFzLmxlbmd0aCA+IDApIHx8IGZhbHNlLAogICAgICAgICAg ICAgICAgZXJzdGVsbHRWb246IGRvYy5lcnN0ZWxsdFZvbiB8fCBudWxsLAogICAgICAgICAgICAg ICAgYmVhcmJlaXRldFZvbjogZG9jLmJlYXJiZWl0ZXRWb24gfHwgbnVsbCwKICAgICAgICAgICAg ICAgIHNjaGxhZ3dvZXJ0ZXI6IGRvYy5zY2hsYWd3b2VydGVyIHx8IFtdLAogICAgICAgICAgICAg ICAgcGFyZW50SWQ6IGRvYy5wYXJlbnRJZCB8fCBudWxsCiAgICAgICAgICAgIH0pKQogICAgICAg IH07CgogICAgICAgIC8vIEtvbXBsZXR0ZSBEYXRlbiBmdWVyIGZpbGU6Ly8tTGVzZW1vZHVzIChh bGxlIERva3VtZW50ZSArIENvbmZpZyArIEdvdmVybmFuY2UtU2V0dGluZ3MpCiAgICAgICAgdmFy IGdvdlB1YmxpYyA9IG51bGw7CiAgICAgICAgaWYgKERyaXZlR292ZXJuYW5jZS5kYXRhKSB7CiAg ICAgICAgICAgIC8vIE51ciBsZXNiYXJlIEdvdmVybmFuY2UtRGF0ZW46IFNldHRpbmdzLCBLYXRl Z29yaWVuLVNpY2h0YmFya2VpdCwgUmV2aWV3ZXItS2F0ZWdvcmllbiAoa2VpbmUgQ3JlZGVudGlh bHMpCiAgICAgICAgICAgIGdvdlB1YmxpYyA9IHsKICAgICAgICAgICAgICAgIHNldHRpbmdzOiBE cml2ZUdvdmVybmFuY2UuZGF0YS5zZXR0aW5ncyB8fCB7fSwKICAgICAgICAgICAgICAgIHJldmll d2VyczogKERyaXZlR292ZXJuYW5jZS5kYXRhLnJldmlld2VycyB8fCBbXSkubWFwKGZ1bmN0aW9u KHIpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkaXNwbGF5TmFtZTogci5kaXNwbGF5 TmFtZSB8fCByLnVzZXJuYW1lLCBrYXRlZ29yaWVuOiByLmthdGVnb3JpZW4gfHwgW10gfTsKICAg ICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgaGlkZGVuS2F0ZWdvcmllbjogdGhpcy5j b25maWcuaGlkZGVuS2F0ZWdvcmllbiB8fCBbXQogICAgICAgICAgICB9OwogICAgICAgIH0KICAg ICAgICAvLyBTdGFydHNlaXRlIGZ1ZXIgTGVzZW1vZHVzIGVpbmJldHRlbgogICAgICAgIHZhciBz dGFydHNlaXRlSHRtbCA9IG51bGw7CiAgICAgICAgdmFyIHdlbGNvbWVFbCA9IGRvY3VtZW50LnF1 ZXJ5U2VsZWN0b3IoJy53ZWxjb21lLWNvbnRlbnQnKTsKICAgICAgICBpZiAod2VsY29tZUVsKSBz dGFydHNlaXRlSHRtbCA9IHdlbGNvbWVFbC5pbm5lckhUTUw7CgogICAgICAgIHZhciBzdGF0aWNE YXRhID0gewogICAgICAgICAgICB2ZXJzaW9uOiBpbmRleERhdGEudmVyc2lvbiwKICAgICAgICAg ICAgbGFzdFVwZGF0ZWQ6IGluZGV4RGF0YS5sYXN0VXBkYXRlZCwKICAgICAgICAgICAgY29uZmln OiB0aGlzLmNvbmZpZyB8fCBudWxsLAogICAgICAgICAgICBnb3Zlcm5hbmNlOiBnb3ZQdWJsaWMs CiAgICAgICAgICAgIHN0YXJ0c2VpdGU6IHN0YXJ0c2VpdGVIdG1sLAogICAgICAgICAgICBkb2N1 bWVudHM6IHRoaXMuZG9jdW1lbnRzLm1hcChmdW5jdGlvbihkb2MpIHsKICAgICAgICAgICAgICAg IC8vIEtvbXBsZXR0ZXMgRG9rdW1lbnQga29waWVyZW4sIGFiZXIgX3ByaXZhdGUgUHJvcGVydGll cyBlbnRmZXJuZW4KICAgICAgICAgICAgICAgIHZhciBjb3B5ID0ge307CiAgICAgICAgICAgICAg ICBmb3IgKHZhciBrIGluIGRvYykgewogICAgICAgICAgICAgICAgICAgIGlmIChrLmNoYXJBdCgw KSAhPT0gJ18nKSBjb3B5W2tdID0gZG9jW2tdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgcmV0dXJuIGNvcHk7CiAgICAgICAgICAgIH0pCiAgICAgICAgfTsKICAgICAgICB2YXIg anNDb250ZW50ID0gJ3ZhciBEUklWRV9TVEFUSUNfSU5ERVggPSAnICsgSlNPTi5zdHJpbmdpZnko c3RhdGljRGF0YSkgKyAnOyc7CgogICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdzZXJ2ZXInKSB7 CiAgICAgICAgICAgIGF3YWl0IGZldGNoKCcvYXBpL3dyaXRlJywgewogICAgICAgICAgICAgICAg bWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUn OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcgfSwKICAgICAgICAgICAgICAgIGJv ZHk6IEpTT04uc3RyaW5naWZ5KHsgcGF0aDogJ2RhdGEvaW5kZXguanNvbicsIGRhdGE6IGluZGV4 RGF0YSB9KQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYXdhaXQgZmV0Y2goJy9hcGkvd3Jp dGUnLCB7CiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKICAgICAgICAgICAgICAgIGhl YWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04 JyB9LAogICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBwYXRoOiAnZGF0YS9p bmRleC5qcycsIGRhdGE6IGpzQ29udGVudCB9KQogICAgICAgICAgICB9KTsKICAgICAgICB9IGVs c2UgaWYgKHRoaXMuX2RhdGFIYW5kbGUpIHsKICAgICAgICAgICAgY29uc3QgZmggPSBhd2FpdCB0 aGlzLl9kYXRhSGFuZGxlLmdldEZpbGVIYW5kbGUoJ2luZGV4Lmpzb24nLCB7IGNyZWF0ZTogdHJ1 ZSB9KTsKICAgICAgICAgICAgY29uc3Qgd3JpdGFibGUgPSBhd2FpdCBmaC5jcmVhdGVXcml0YWJs ZSgpOwogICAgICAgICAgICBhd2FpdCB3cml0YWJsZS53cml0ZShKU09OLnN0cmluZ2lmeShpbmRl eERhdGEsIG51bGwsIDIpKTsKICAgICAgICAgICAgYXdhaXQgd3JpdGFibGUuY2xvc2UoKTsKICAg ICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGNvbnN0IGZoSnMgPSBhd2FpdCB0aGlzLl9k YXRhSGFuZGxlLmdldEZpbGVIYW5kbGUoJ2luZGV4LmpzJywgeyBjcmVhdGU6IHRydWUgfSk7CiAg ICAgICAgICAgICAgICBjb25zdCB3SnMgPSBhd2FpdCBmaEpzLmNyZWF0ZVdyaXRhYmxlKCk7CiAg ICAgICAgICAgICAgICBhd2FpdCB3SnMud3JpdGUoanNDb250ZW50KTsKICAgICAgICAgICAgICAg IGF3YWl0IHdKcy5jbG9zZSgpOwogICAgICAgICAgICB9IGNhdGNoIHt9CiAgICAgICAgfQoKICAg ICAgICB0aGlzLmluZGV4ID0gaW5kZXhEYXRhOwogICAgfSwKCiAgICAvLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAg Ly8gTUVESUEgVVBMT0FECiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgIC8vIERhdGVpbmFtZW4gYmVyZWlu aWdlbjogVW1sYXV0ZSB1bmQgU29uZGVyemVpY2hlbiBkdXJjaCBBU0NJSSBlcnNldHplbgogICAg c2FuaXRpemVGaWxlbmFtZShuYW1lKSB7CiAgICAgICAgcmV0dXJuIG5hbWUKICAgICAgICAgICAg LnJlcGxhY2UoL8OkL2csICdhZScpLnJlcGxhY2UoL8OEL2csICdBZScpCiAgICAgICAgICAgIC5y ZXBsYWNlKC/Dti9nLCAnb2UnKS5yZXBsYWNlKC/Dli9nLCAnT2UnKQogICAgICAgICAgICAucmVw bGFjZSgvw7wvZywgJ3VlJykucmVwbGFjZSgvw5wvZywgJ1VlJykKICAgICAgICAgICAgLnJlcGxh Y2UoL8OfL2csICdzcycpCiAgICAgICAgICAgIC5yZXBsYWNlKC9bXlx3LlwtXS9nLCAnXycpCiAg ICAgICAgICAgIC5yZXBsYWNlKC9fKy9nLCAnXycpOwogICAgfSwKCiAgICBhc3luYyB1cGxvYWRN ZWRpYShkb2NJZCwgZmlsZSwgb25Qcm9ncmVzcykgewogICAgICAgIGNvbnN0IHNhZmVOYW1lID0g dGhpcy5zYW5pdGl6ZUZpbGVuYW1lKGZpbGUubmFtZSk7CiAgICAgICAgY29uc3QgcmVsUGF0aCA9 ICdtZWRpYS8nICsgZG9jSWQgKyAnLycgKyBzYWZlTmFtZTsKCiAgICAgICAgaWYgKHRoaXMubW9k ZSA9PT0gJ3NlcnZlcicpIHsKICAgICAgICAgICAgLy8gWE1MSHR0cFJlcXVlc3Qgc3RhdHQgZmV0 Y2g6IEVybW9lZ2xpY2h0IFVwbG9hZC1Gb3J0c2Nocml0dHNhbnplaWdlCiAgICAgICAgICAgIC8v IHZpYSB4aHIudXBsb2FkLm9ucHJvZ3Jlc3MgKGZldGNoIHVudGVyc3R1ZXR6dCBrZWluIFVwbG9h ZC1Qcm9ncmVzcykKICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsK ICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7CiAgICAgICAgICAgIGNv bnN0IHVybCA9ICcvYXBpL3VwbG9hZD9wYXRoPScgKyBlbmNvZGVVUklDb21wb25lbnQocmVsUGF0 aCk7CgogICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWpl Y3QpIHsKICAgICAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAg ICAgICAgICAgICAgIHhoci5vcGVuKCdQT1NUJywgdXJsKTsKICAgICAgICAgICAgICAgIGlmIChv blByb2dyZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgeGhyLnVwbG9hZC5vbnByb2dyZXNzID0g ZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5sZW5ndGhDb21wdXRh YmxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblByb2dyZXNzKE1hdGgucm91bmQo KGUubG9hZGVkIC8gZS50b3RhbCkgKiAxMDApLCBlLmxvYWRlZCwgZS50b3RhbCk7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg ICAgICAgIGlmICh4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDwgMzAwKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChvblByb2dyZXNzKSBvblByb2dyZXNzKDEwMCwgZmlsZS5z aXplLCBmaWxlLnNpemUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9 IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBlcnIgPSBKU09OLnBhcnNlKHhoci5y ZXNwb25zZVRleHQpOyB9IGNhdGNoKGV4KSB7fQogICAgICAgICAgICAgICAgICAgICAgICByZWpl Y3QobmV3IEVycm9yKGVyci5lcnJvciB8fCAnVXBsb2FkIGZlaGxnZXNjaGxhZ2VuIChIVFRQICcg KyB4aHIuc3RhdHVzICsgJyknKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgfTsKICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAg ICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignU2VydmVyIG5pY2h0IGVycmVpY2hiYXIuIExh ZXVmdCBkZXIgU2VydmVyIG5vY2g/JykpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAg ICAgIHhoci5zZW5kKGZvcm1EYXRhKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsK ICAgICAgICAgICAgY29uc3QgZG9jTWVkaWFEaXIgPSBhd2FpdCB0aGlzLl9tZWRpYUhhbmRsZS5n ZXREaXJlY3RvcnlIYW5kbGUoZG9jSWQsIHsgY3JlYXRlOiB0cnVlIH0pOwogICAgICAgICAgICBj b25zdCBmaCA9IGF3YWl0IGRvY01lZGlhRGlyLmdldEZpbGVIYW5kbGUoc2FmZU5hbWUsIHsgY3Jl YXRlOiB0cnVlIH0pOwogICAgICAgICAgICBjb25zdCB3cml0YWJsZSA9IGF3YWl0IGZoLmNyZWF0 ZVdyaXRhYmxlKCk7CiAgICAgICAgICAgIGF3YWl0IHdyaXRhYmxlLndyaXRlKGZpbGUpOwogICAg ICAgICAgICBhd2FpdCB3cml0YWJsZS5jbG9zZSgpOwogICAgICAgICAgICBpZiAob25Qcm9ncmVz cykgb25Qcm9ncmVzcygxMDAsIGZpbGUuc2l6ZSwgZmlsZS5zaXplKTsKICAgICAgICB9CgogICAg ICAgIHJldHVybiByZWxQYXRoOwogICAgfSwKCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gVUkKICAg IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CgogICAgdXBkYXRlQ29ubmVjdGlvblVJKCkgewogICAgICAgIGNvbnN0IGJh ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25uZWN0aW9uQmFyJyk7CiAgICAgICAgY29u c3QgZG90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXR1c0RvdCcpOwogICAgICAgIGNv bnN0IHRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29ubmVjdGlvblRleHQnKTsKICAg ICAgICBjb25zdCBzZWFyY2ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VhcmNoSW5wdXQn KTsKICAgICAgICBjb25zdCBidG5OZXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuTmV3 RG9jJyk7CiAgICAgICAgY29uc3QgYnRuUmVjb25uZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ2J0blJlY29ubmVjdCcpOwogICAgICAgIGNvbnN0IGJ0blNlcnZlciA9IGRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKCdidG5BY3RpdmF0ZVNlcnZlcicpOwoKICAgICAgICBpZiAodGhpcy5jb25u ZWN0ZWQpIHsKICAgICAgICAgICAgYmFyLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAg ZG90LmNsYXNzTGlzdC5yZW1vdmUoJ2Nvbm5lY3RlZCcsICdyZWFkb25seScpOwogICAgICAgICAg ICBpZiAodGhpcy5yZWFkT25seSkgewogICAgICAgICAgICAgICAgZG90LmNsYXNzTGlzdC5hZGQo J3JlYWRvbmx5Jyk7CiAgICAgICAgICAgICAgICBjb25zdCBtb2RlUHJlZml4ID0gdGhpcy5tb2Rl ID09PSAnc3RhdGljJyA/ICdMZXNlbW9kdXMnIDogJ051ciBMZXNlbic7CiAgICAgICAgICAgICAg ICBjb25zdCB1c2VyU3RyID0gKHRoaXMuZW52aXJvbiAmJiB0aGlzLm1vZGUgIT09ICdzdGF0aWMn KSA/ICcgfCAnICsgdGhpcy5lbnZpcm9uLnVzZXJuYW1lIDogJyc7CiAgICAgICAgICAgICAgICB0 ZXh0LnRleHRDb250ZW50ID0gbW9kZVByZWZpeCArICcgKCcgKyB0aGlzLmRvY3VtZW50cy5sZW5n dGggKyAnIERva3VtZW50ZSknICsgdXNlclN0cjsKICAgICAgICAgICAgICAgIGJ0bk5ldy5kaXNh YmxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICBidG5OZXcuc3R5bGUuZGlzcGxheSA9ICh0aGlz Lm1vZGUgPT09ICdzdGF0aWMnKSA/ICdub25lJyA6ICcnOwogICAgICAgICAgICAgICAgYnRuTmV3 LnRpdGxlID0gJ1NlcnZlciBzdGFydGVuIGbDvHIgQmVhcmJlaXR1bmcnOwogICAgICAgICAgICAg ICAgYnRuU2VydmVyLnN0eWxlLmRpc3BsYXkgPSAodGhpcy5tb2RlID09PSAnc3RhdGljJykgPyAn bm9uZScgOiAnJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRvdC5jbGFz c0xpc3QuYWRkKCdjb25uZWN0ZWQnKTsKICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJTdHIgPSB0 aGlzLmVudmlyb24gPyAnIHwgQmVudXR6ZXI6ICcgKyB0aGlzLmVudmlyb24udXNlcm5hbWUgOiAn JzsKICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVTdHIgPSB0aGlzLm1vZGUgPT09ICdzZXJ2ZXIn ID8gJ1NlcnZlcicgOiAnTG9rYWwgKFZvbGx6dWdyaWZmKSc7CiAgICAgICAgICAgICAgICB0ZXh0 LnRleHRDb250ZW50ID0gbW9kZVN0ciArICcgKCcgKyB0aGlzLmRvY3VtZW50cy5sZW5ndGggKyAn IERva3VtZW50ZSknICsgdXNlclN0cjsKICAgICAgICAgICAgICAgIGJ0bk5ldy5kaXNhYmxlZCA9 IGZhbHNlOwogICAgICAgICAgICAgICAgYnRuTmV3LnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAg ICAgICAgICAgIGJ0bk5ldy50aXRsZSA9ICcnOwogICAgICAgICAgICAgICAgYnRuU2VydmVyLnN0 eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VhcmNoLmRp c2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgIGJ0blJlY29ubmVjdC5zdHlsZS5kaXNwbGF5ID0g KHRoaXMubW9kZSA9PT0gJ2ZpbGVzeXN0ZW0nKSA/ICcnIDogJ25vbmUnOwogICAgICAgICAgICAv LyBMZXNlbW9kdXMtQmFkZ2UgaW0gRm9vdGVyCiAgICAgICAgICAgIHZhciByZWFkQmFkZ2UgPSBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9vdGVyUmVhZE1vZGUnKTsKICAgICAgICAgICAgaWYg KHJlYWRCYWRnZSkgcmVhZEJhZGdlLnN0eWxlLmRpc3BsYXkgPSB0aGlzLnJlYWRPbmx5ID8gJycg OiAnbm9uZSc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYmFyLnN0eWxlLmRpc3BsYXkg PSAnbm9uZSc7CiAgICAgICAgICAgIGRvdC5jbGFzc0xpc3QucmVtb3ZlKCdjb25uZWN0ZWQnLCAn cmVhZG9ubHknKTsKICAgICAgICAgICAgc2VhcmNoLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAg ICAgYnRuTmV3LmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgICAgYnRuTmV3LnN0eWxlLmRpc3Bs YXkgPSAnbm9uZSc7CiAgICAgICAgICAgIGJ0blJlY29ubmVjdC5zdHlsZS5kaXNwbGF5ID0gJ25v bmUnOwogICAgICAgICAgICBidG5TZXJ2ZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAg ICB9CiAgICB9LAoKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBTWU5DIChwZXJpb2Rpc2NoIHBydWVm ZW4gb2IgYW5kZXJlIFVzZXIgZXR3YXMgZ2VhZW5kZXJ0IGhhYmVuKQogICAgLy8gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K CiAgICBzdGFydFN5bmMoKSB7CiAgICAgICAgaWYgKHRoaXMuc3luY0ludGVydmFsKSBjbGVhcklu dGVydmFsKHRoaXMuc3luY0ludGVydmFsKTsKICAgICAgICB0aGlzLl9sYXN0VmlzdWFsU3luYyA9 IDA7CgogICAgICAgIHRoaXMuc3luY0ludGVydmFsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4g ewogICAgICAgICAgICBpZiAoIXRoaXMuY29ubmVjdGVkKSByZXR1cm47CgogICAgICAgICAgICB0 cnkgewogICAgICAgICAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTsKCiAgICAgICAgICAgICAg ICBpZiAodGhpcy5tb2RlID09PSAnc2VydmVyJykgewogICAgICAgICAgICAgICAgICAgIGNvbnN0 IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3NjYW4nKTsKICAgICAgICAgICAgICAgICAgICBjb25z dCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2 ZXJGaWxlcyA9IGRhdGEuZmlsZXMgfHwgW107CgogICAgICAgICAgICAgICAgICAgIC8vIEFuemFo bCBnZWFlbmRlcnQ/CiAgICAgICAgICAgICAgICAgICAgaWYgKHNlcnZlckZpbGVzLmxlbmd0aCAh PT0gdGhpcy5kb2N1bWVudHMubGVuZ3RoKSB7IGNoYW5nZWQgPSB0cnVlOyB9CgogICAgICAgICAg ICAgICAgICAgIC8vIFRpbWVzdGFtcHMgZ2VhZW5kZXJ0PwogICAgICAgICAgICAgICAgICAgIGlm ICghY2hhbmdlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9m IHNlcnZlckZpbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb2NJZCA9 IGVudHJ5LmZpbGVuYW1lLnNwbGl0KCdfJylbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBtZXRhID0gdGhpcy5maWxlVGltZXN0YW1wc1tkb2NJZF07CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIW1ldGEgfHwgZW50cnkubW9kaWZpZWQgIT09IG1ldGEubW9kaWZp ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gRmlsZXN5c3Rl bS1Nb2R1czogRGF0ZWllbiBwcnVlZmVuCiAgICAgICAgICAgICAgICAgICAgbGV0IHRvdGFsRmls ZXMgPSAwOwogICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2F0IG9mICh0aGlzLmNvbmZp Zy5rYXRlZ29yaWVuIHx8IFtdKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2F0RGlyID0gYXdhaXQgdGhpcy5fZGF0YUhh bmRsZS5nZXREaXJlY3RvcnlIYW5kbGUoa2F0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZvciBhd2FpdCAoY29uc3QgW25hbWUsIGhhbmRsZV0gb2Yga2F0RGlyKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuZW5kc1dpdGgoJy5qc29uJykpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxGaWxlcysrOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmdldEZpbGUo KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9jSWQgPSBuYW1l LnNwbGl0KCdfJylbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IG1ldGEgPSB0aGlzLmZpbGVUaW1lc3RhbXBzW2RvY0lkXTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCFtZXRhIHx8IGZpbGUubGFzdE1vZGlmaWVkID4gbWV0YS5tb2Rp ZmllZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9 IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge30KICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgaWYgKHRvdGFsRmlsZXMgIT09IHRoaXMuZG9jdW1lbnRzLmxlbmd0aCkg Y2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gTG9j a3MgaW1tZXIgYWt0dWFsaXNpZXJlbiAodW5hYmhhZW5naWcgdm9uIERva3VtZW50ZW5hZW5kZXJ1 bmdlbikKICAgICAgICAgICAgICAgIGF3YWl0IERyaXZlUG9ydGFsLmxvYWRMb2NrcygpOwoKICAg ICAgICAgICAgICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhp cy5sb2FkQWxsRG9jdW1lbnRzKCk7CiAgICAgICAgICAgICAgICAgICAgYXdhaXQgRHJpdmVHb3Zl cm5hbmNlLmxvYWQoKTsKICAgICAgICAgICAgICAgICAgICBEcml2ZVBvcnRhbC5yZW5kZXIoKTsK ICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3luY0luZm8nKS50 ZXh0Q29udGVudCA9ICdBa3R1YWxpc2llcnQ6ICcgKyBuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0 cmluZygpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBB dWNoIG9obmUgRG9rdW1lbnRlbmFlbmRlcnVuZ2VuIGRpZSBMaXN0ZSBuZXUgcmVuZGVybiAoTG9j ay1TdGF0dXMpCiAgICAgICAgICAgICAgICAgICAgRHJpdmVQb3J0YWwucmVuZGVyTGlzdCgpOwog ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFZpc3VlbGxlIEFuemVpZ2UgaW0g Rm9vdGVyIG51ciBhbGxlIDIwIE1pbnV0ZW4KICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IERh dGUubm93KCk7CiAgICAgICAgICAgICAgICBpZiAobm93IC0gdGhpcy5fbGFzdFZpc3VhbFN5bmMg Pj0gMTIwMDAwMCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RWaXN1YWxTeW5jID0g bm93OwogICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ2Zvb3RlclN5bmNTdGF0dXMnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZWwpIHsKICAg ICAgICAgICAgICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSAnRC5SLkkuVi5FLiBha3R1YWxp c2llcnQnOwogICAgICAgICAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCd2aXNpYmxl Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWwuY2xhc3NMaXN0 LnJlbW92ZSgndmlzaWJsZScpLCA0MDAwKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgY29u c29sZS53YXJuKCdTeW5jLUZlaGxlcjonLCBlcnIpOwogICAgICAgICAgICB9CiAgICAgICAgfSwg MzAwMDAwKTsKICAgIH0KfTsKCi8vID09PT09PT09PT09PT09PT09PT09PSBQT1JUQUwgVUkgPT09 PT09PT09PT09PT09PT09PT09CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBNb2R1bDogRHJp dmVQb3J0YWwgLSBEb2t1bWVudGVubGlzdGUsIEZpbHRlciwgRGV0YWlsYW5zaWNodAovLyBadXN0 YWVuZGlnIGZ1ZXI6IFJlbmRlcm4gZGVyIERva3VtZW50ZW5saXN0ZSwgU3VjaGVyZ2Vibmlzc2Us IERldGFpbC1WaWV3LCBUYWJlbGxlbmFuc2ljaHQKLy8gU2ljaGVyaGVpdDogQWxsZSBCZW51dHpl cmRhdGVuIHdlcmRlbiB2b3IgZGVyIERhcnN0ZWxsdW5nIHVlYmVyIGVzY2FwZUhUTUwoKSAvIGVz Y2FwZUF0dHIoKQovLyAgICAgICAgICAgICBiZXJlaW5pZ3QgKFhTUy1TY2h1dHopLiBTaWNodGJh cmtlaXRzZmlsdGVyIChjYW5TZWVEb2N1bWVudCkgaXN0IHJlaW4gY2xpZW50c2VpdGlnCi8vICAg ICAgICAgICAgIHVuZCBkaWVudCBkZXIgQmVudXR6ZXJmdWVocnVuZyAtIGRpZSBzZXJ2ZXJzZWl0 aWdlIEF1dG9yaXNpZXJ1bmcgYmxlaWJ0IG1hc3NnZWJsaWNoLgovLyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpjb25zdCBEcml2ZVBvcnRhbCA9IHsKICAgIGZpbHRlcmVkRG9jdW1lbnRzOiBbXSwKICAg IHNlbGVjdGVkRG9jSWQ6IG51bGwsCiAgICBjdXJyZW50Q2F0ZWdvcnlGaWx0ZXI6ICdhbGwnLAog ICAgY3VycmVudFN0YXR1c0ZpbHRlcjogJ2FsbCcsCiAgICB0YWJsZVZpZXdBY3RpdmU6IGZhbHNl LAogICAgX3RhYmxlU29ydENvbDogJ2Vyc3RlbGx0JywKICAgIF90YWJsZVNvcnREaXI6ICdkZXNj JywKCiAgICBhc3luYyBpbml0KCkgewogICAgICAgIC8vIFN0YXJ0c2VpdGVuLUhUTUw6IHdpcmQg aW5pdGlhbCBhdXMgZGVtIERPTSBnZWxlc2VuLCBzcGFldGVyIHZvbgogICAgICAgIC8vIGxvYWRT dGFydHNlaXRlKCkvc2F2ZVN0YXJ0c2VpdGUoKSBtaXQgZGVtIGdlc3BlaWNoZXJ0ZW4gSW5oYWx0 IHVlYmVyc2NocmllYmVuLgogICAgICAgIHRoaXMuX3dlbGNvbWVIVE1MID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoJ2RvY3VtZW50RGV0YWlsJykuaW5uZXJIVE1MOwogICAgICAgIHRoaXMuc2V0 dXBGaWx0ZXJzKCk7CiAgICAgICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7CiAgICAgICAg YXdhaXQgdGhpcy5sb2FkTG9ja3MoKTsKICAgICAgICB0aGlzLnJlbmRlcigpOwogICAgfSwKCiAg ICBzZXR1cEZpbHRlcnMoKSB7CiAgICAgICAgY29uc3QgY2F0Q29udGFpbmVyID0gZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoJ2NhdGVnb3J5RmlsdGVycycpOwogICAgICAgIGNhdENvbnRhaW5lci5p bm5lckhUTUwgPSAnJzsKCiAgICAgICAgLy8gIkFsbGUiIEJ1dHRvbgogICAgICAgIGNvbnN0IGFs bEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgICAgIGFsbEJ0bi5j bGFzc05hbWUgPSAnZmlsdGVyLWJ0biBhY3RpdmUnOwogICAgICAgIGFsbEJ0bi5zZXRBdHRyaWJ1 dGUoJ2RhdGEtZmlsdGVyJywgJ2FsbCcpOwogICAgICAgIGFsbEJ0bi50ZXh0Q29udGVudCA9ICdB bGxlJzsKICAgICAgICBhbGxCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlz LnNldENhdGVnb3J5KCdhbGwnKSk7CiAgICAgICAgY2F0Q29udGFpbmVyLmFwcGVuZENoaWxkKGFs bEJ0bik7CgogICAgICAgIC8vIEthdGVnb3JpZS1CdXR0b25zIChhbHBoYWJldGlzY2ggc29ydGll cnQsIGF1c2dlYmxlbmRldGUgdWViZXJzcHJpbmdlbikKICAgICAgICB2YXIgaGlkZGVuS2F0cyA9 IERyaXZlRlMuY29uZmlnLmhpZGRlbkthdGVnb3JpZW4gfHwgW107CiAgICAgICAgKERyaXZlRlMu Y29uZmlnLmthdGVnb3JpZW4gfHwgW10pLnNsaWNlKCkuc29ydChmdW5jdGlvbihhLGIpeyByZXR1 cm4gYS5sb2NhbGVDb21wYXJlKGIsICdkZScpOyB9KS5mb3JFYWNoKGthdCA9PiB7CiAgICAgICAg ICAgIGlmIChoaWRkZW5LYXRzLmluY2x1ZGVzKGthdCkpIHJldHVybjsKICAgICAgICAgICAgY29u c3QgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgICAgICAgIGJ0 bi5jbGFzc05hbWUgPSAnZmlsdGVyLWJ0bic7CiAgICAgICAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUo J2RhdGEtZmlsdGVyJywga2F0KTsKICAgICAgICAgICAgYnRuLnRleHRDb250ZW50ID0ga2F0Owog ICAgICAgICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLnNldENh dGVnb3J5KGthdCkpOwogICAgICAgICAgICBjYXRDb250YWluZXIuYXBwZW5kQ2hpbGQoYnRuKTsK ICAgICAgICB9KTsKCiAgICAgICAgLy8gU3RhdHVzLUZpbHRlciAoaW0gTGVzZW1vZHVzIGF1c2Js ZW5kZW4g4oCTIGVzIGdpYnQgbnVyIGZyZWlnZWdlYmVuZSBEb2t1bWVudGUpCiAgICAgICAgY29u c3Qgc3RhdHVzQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXR1c0ZpbHRl cnMnKTsKICAgICAgICBzdGF0dXNDb250YWluZXIuaW5uZXJIVE1MID0gJyc7CgogICAgICAgIGlm IChEcml2ZUZTLm1vZGUgPT09ICdzdGF0aWMnKSB7CiAgICAgICAgICAgIC8vIExlc2Vtb2R1czog S2VpbmUgU3RhdHVzLUZpbHRlciBub2V0aWcKICAgICAgICAgICAgc3RhdHVzQ29udGFpbmVyLnN0 eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdHVz Q29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgY29uc3QgYWxsU3RhdHVz QnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgICAgICAgIGFsbFN0 YXR1c0J0bi5jbGFzc05hbWUgPSAnc3RhdHVzLWZpbHRlci1idG4gYWN0aXZlJzsKICAgICAgICAg ICAgYWxsU3RhdHVzQnRuLnNldEF0dHJpYnV0ZSgnZGF0YS1zdGF0dXMnLCAnYWxsJyk7CiAgICAg ICAgICAgIGFsbFN0YXR1c0J0bi50ZXh0Q29udGVudCA9ICdBbGxlIFN0YXR1cyc7CiAgICAgICAg ICAgIGFsbFN0YXR1c0J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMuc2V0 U3RhdHVzKCdhbGwnKSk7CiAgICAgICAgICAgIHN0YXR1c0NvbnRhaW5lci5hcHBlbmRDaGlsZChh bGxTdGF0dXNCdG4pOwoKICAgICAgICAgICAgY29uc3QgaXNTVSA9IERyaXZlR292ZXJuYW5jZS5p c1N1cGVyVXNlcigpOwogICAgICAgICAgICBjb25zdCBpc0ZBID0gRHJpdmVHb3Zlcm5hbmNlLmlz RmFjaGF1ZnNpY2h0KCk7CiAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvbmZpZyA9IERyaXZlRlMu Y29uZmlnLnN0YXR1cyB8fCB7fTsKICAgICAgICAgICAgT2JqZWN0LmtleXMoc3RhdHVzQ29uZmln KS5mb3JFYWNoKHN0YXR1cyA9PiB7CiAgICAgICAgICAgICAgICAvLyAiQWJnZWxlaG50IiBudXIg ZnVlciBTdXBlclVzZXIgdW5kIEZhY2hhdWZzaWNodAogICAgICAgICAgICAgICAgaWYgKHN0YXR1 cyA9PT0gJ0FiZ2VsZWhudCcgJiYgIWlzU1UgJiYgIWlzRkEpIHJldHVybjsKICAgICAgICAgICAg ICAgIGNvbnN0IGNmZyA9IHN0YXR1c0NvbmZpZ1tzdGF0dXNdOwogICAgICAgICAgICAgICAgY29u c3QgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgICAgICAgICAg ICBidG4uY2xhc3NOYW1lID0gJ3N0YXR1cy1maWx0ZXItYnRuJzsKICAgICAgICAgICAgICAgIGJ0 bi5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdHVzJywgc3RhdHVzKTsKICAgICAgICAgICAgICAgIGJ0 bi5pbm5lckhUTUwgPSBjZmcubGFiZWw7CiAgICAgICAgICAgICAgICBidG4uc3R5bGUuYm9yZGVy Q29sb3IgPSBjZmcuY29sb3I7CiAgICAgICAgICAgICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcign Y2xpY2snLCAoKSA9PiB0aGlzLnNldFN0YXR1cyhzdGF0dXMpKTsKICAgICAgICAgICAgICAgIHN0 YXR1c0NvbnRhaW5lci5hcHBlbmRDaGlsZChidG4pOwogICAgICAgICAgICB9KTsKICAgICAgICB9 CiAgICB9LAoKICAgIHNldHVwRXZlbnRMaXN0ZW5lcnMoKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoJ3NlYXJjaElucHV0JykuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAoKSA9 PiB0aGlzLnJlbmRlcigpKTsKICAgIH0sCgogICAgc2V0Q2F0ZWdvcnkoY2F0KSB7CiAgICAgICAg dGhpcy5jdXJyZW50Q2F0ZWdvcnlGaWx0ZXIgPSBjYXQ7CiAgICAgICAgZG9jdW1lbnQucXVlcnlT ZWxlY3RvckFsbCgnI2NhdGVnb3J5RmlsdGVycyAuZmlsdGVyLWJ0bicpLmZvckVhY2goYnRuID0+ IHsKICAgICAgICAgICAgYnRuLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScsIGJ0bi5nZXRBdHRy aWJ1dGUoJ2RhdGEtZmlsdGVyJykgPT09IGNhdCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5y ZW5kZXIoKTsKICAgIH0sCgogICAgc2V0U3RhdHVzKHN0YXR1cykgewogICAgICAgIHRoaXMuY3Vy cmVudFN0YXR1c0ZpbHRlciA9IHN0YXR1czsKICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9y QWxsKCcjc3RhdHVzRmlsdGVycyAuc3RhdHVzLWZpbHRlci1idG4nKS5mb3JFYWNoKGJ0biA9PiB7 CiAgICAgICAgICAgIGJ0bi5jbGFzc0xpc3QudG9nZ2xlKCdhY3RpdmUnLCBidG4uZ2V0QXR0cmli dXRlKCdkYXRhLXN0YXR1cycpID09PSBzdGF0dXMpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMu cmVuZGVyKCk7CiAgICB9LAoKICAgIHJlbmRlcigpIHsKICAgICAgICBjb25zdCBzZWFyY2ggPSAo ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlYXJjaElucHV0JykudmFsdWUgfHwgJycpLnRvTG93 ZXJDYXNlKCk7CgogICAgICAgIHRoaXMuZmlsdGVyZWREb2N1bWVudHMgPSBEcml2ZUZTLmRvY3Vt ZW50cy5maWx0ZXIoZG9jID0+IHsKICAgICAgICAgICAgLy8gR292ZXJuYW5jZTogU2ljaHRiYXJr ZWl0c3BydWVmdW5nCiAgICAgICAgICAgIGlmICghRHJpdmVHb3Zlcm5hbmNlLmNhblNlZURvY3Vt ZW50KGRvYykpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudENhdGVn b3J5RmlsdGVyICE9PSAnYWxsJyAmJiBkb2Mua2F0ZWdvcmllICE9PSB0aGlzLmN1cnJlbnRDYXRl Z29yeUZpbHRlcikgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3Rh dHVzRmlsdGVyICE9PSAnYWxsJyAmJiBkb2Muc3RhdHVzICE9PSB0aGlzLmN1cnJlbnRTdGF0dXNG aWx0ZXIpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgaWYgKHNlYXJjaCkgewogICAgICAgICAg ICAgICAgY29uc3QgbWF0Y2ggPSAoZG9jLnRpdGVsIHx8ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1 ZGVzKHNlYXJjaCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvYy5pbmhhbHQg fHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSB8fAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoZG9jLmthdGVnb3JpZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRl cyhzZWFyY2gpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb2Muc2NobGFnd29l cnRlciB8fCBbXSkuc29tZShrID0+IGsudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpKTsK ICAgICAgICAgICAgICAgIGlmICghbWF0Y2gpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQog ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9KTsKCiAgICAgICAgdGhpcy5yZW5kZXJM aXN0KCk7CiAgICAgICAgaWYgKHRoaXMudGFibGVWaWV3QWN0aXZlKSB0aGlzLnJlbmRlclRhYmxl VmlldygpOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2NDb3VudCcpLnRleHRD b250ZW50ID0gdGhpcy5maWx0ZXJlZERvY3VtZW50cy5sZW5ndGggKyAnIC8gJyArIERyaXZlRlMu ZG9jdW1lbnRzLmxlbmd0aDsKCiAgICAgICAgLy8gVXBkYXRlIGNvbm5lY3Rpb24gdGV4dAogICAg ICAgIERyaXZlRlMudXBkYXRlQ29ubmVjdGlvblVJKHRydWUpOwogICAgfSwKCiAgICBhY3RpdmVM b2Nrczoge30sICAvLyBkb2NJZCAtPiB7IHVzZXJuYW1lLCBtaW51dGVzIH0KCiAgICBhc3luYyBs b2FkTG9ja3MoKSB7CiAgICAgICAgaWYgKERyaXZlRlMubW9kZSAhPT0gJ3NlcnZlcicpIHJldHVy bjsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2Fw aS9sb2NrcycpOwogICAgICAgICAgICBpZiAocmVzLm9rKSB7CiAgICAgICAgICAgICAgICBjb25z dCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTsKICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlTG9j a3MgPSB7fTsKICAgICAgICAgICAgICAgIChkYXRhLmxvY2tzIHx8IFtdKS5mb3JFYWNoKGwgPT4g ewogICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlTG9ja3NbbC5kb2NJZF0gPSB7IHVzZXJu YW1lOiBsLnVzZXJuYW1lLCBtaW51dGVzOiBsLm1pbnV0ZXMgfTsKICAgICAgICAgICAgICAgIH0p OwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCB7fQogICAgfSwKCiAgICBfc29ydFdpdGhD aGlsZHJlbihkb2NzKSB7CiAgICAgICAgLy8gU29ydGllcmU6IEVsdGVybmFydGlrZWwgenVlcnN0 LCBLaW5kZXIgZGlyZWt0IGRhaGludGVyCiAgICAgICAgY29uc3QgdG9wTGV2ZWwgPSBkb2NzLmZp bHRlcihmdW5jdGlvbihkKXsgcmV0dXJuICFkLnBhcmVudElkOyB9KTsKICAgICAgICBjb25zdCBj aGlsZE1hcCA9IHt9OwogICAgICAgIGRvY3MuZmlsdGVyKGZ1bmN0aW9uKGQpeyByZXR1cm4gZC5w YXJlbnRJZDsgfSkuZm9yRWFjaChmdW5jdGlvbihkKXsKICAgICAgICAgICAgaWYgKCFjaGlsZE1h cFtkLnBhcmVudElkXSkgY2hpbGRNYXBbZC5wYXJlbnRJZF0gPSBbXTsKICAgICAgICAgICAgY2hp bGRNYXBbZC5wYXJlbnRJZF0ucHVzaChkKTsKICAgICAgICB9KTsKICAgICAgICB2YXIgcmVzdWx0 ID0gW107CiAgICAgICAgdG9wTGV2ZWwuZm9yRWFjaChmdW5jdGlvbihwKXsKICAgICAgICAgICAg cmVzdWx0LnB1c2gocCk7CiAgICAgICAgICAgIGlmIChjaGlsZE1hcFtwLmlkXSkgY2hpbGRNYXBb cC5pZF0uZm9yRWFjaChmdW5jdGlvbihjKXsgcmVzdWx0LnB1c2goYyk7IH0pOwogICAgICAgIH0p OwogICAgICAgIC8vIFdhaXNlbi1LaW5kZXIgKEVsdGVybiBuaWNodCBpbiBkZXIgZ2VmaWx0ZXJ0 ZW4gTGlzdGUpCiAgICAgICAgZG9jcy5maWx0ZXIoZnVuY3Rpb24oZCl7IHJldHVybiBkLnBhcmVu dElkICYmICF0b3BMZXZlbC5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkPT09ZC5wYXJlbnRJ ZDt9KTsgfSkuZm9yRWFjaChmdW5jdGlvbihkKXsKICAgICAgICAgICAgaWYgKHJlc3VsdC5pbmRl eE9mKGQpID09PSAtMSkgcmVzdWx0LnB1c2goZCk7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJu IHJlc3VsdDsKICAgIH0sCgogICAgcmVuZGVyTGlzdCgpIHsKICAgICAgICBjb25zdCBsaXN0Q29u dGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50TGlzdCcpOwogICAgICAg IGNvbnN0IHN0YXR1c0NvbmZpZyA9IERyaXZlRlMuY29uZmlnLnN0YXR1cyB8fCB7fTsKCiAgICAg ICAgaWYgKHRoaXMuZmlsdGVyZWREb2N1bWVudHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAg IGxpc3RDb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj48cD5L ZWluZSBEb2t1bWVudGUgZ2VmdW5kZW4uPC9wPjwvZGl2Pic7CiAgICAgICAgICAgIHJldHVybjsK ICAgICAgICB9CgogICAgICAgIGNvbnN0IHNvcnRlZCA9IHRoaXMuX3NvcnRXaXRoQ2hpbGRyZW4o dGhpcy5maWx0ZXJlZERvY3VtZW50cyk7CiAgICAgICAgbGlzdENvbnRhaW5lci5pbm5lckhUTUwg PSBzb3J0ZWQubWFwKGRvYyA9PiB7CiAgICAgICAgICAgIGNvbnN0IGNmZyA9IHN0YXR1c0NvbmZp Z1tkb2Muc3RhdHVzXSB8fCB7IGNvbG9yOiAnI2VlZScsIHRleHRDb2xvcjogJyMzMzMnLCBpY29u OiAnJyB9OwogICAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuc2VsZWN0ZWREb2NJZCA9 PT0gZG9jLmlkOwogICAgICAgICAgICBjb25zdCBpc0RyYWZ0ID0gZG9jLnN0YXR1cyA9PT0gJ0Vu dHd1cmYnOwogICAgICAgICAgICBjb25zdCBoYXNNZWRpYSA9IGRvYy5tZWRpYXMgJiYgZG9jLm1l ZGlhcy5sZW5ndGggPiAwOwogICAgICAgICAgICBjb25zdCBsb2NrID0gdGhpcy5hY3RpdmVMb2Nr c1tkb2MuaWRdOwogICAgICAgICAgICBjb25zdCBpc0xvY2tlZCA9IGxvY2sgJiYgbG9jay51c2Vy bmFtZSAhPT0gKERyaXZlRlMuZW52aXJvbiA/IERyaXZlRlMuZW52aXJvbi51c2VybmFtZSA6ICcn KTsKCiAgICAgICAgICAgIC8vIFN0YXR1cy1CYWRnZTogIkZyZWlnZWdlYmVuIiBuaWNodCBhbnpl aWdlbiAoaXN0IGRlciBOb3JtYWx6dXN0YW5kKQogICAgICAgICAgICB2YXIgc2hvd1N0YXR1cyA9 IGRvYy5zdGF0dXMgIT09ICdGcmVpZ2VnZWJlbic7CgogICAgICAgICAgICByZXR1cm4gJzxkaXYg Y2xhc3M9ImRvY3VtZW50LWl0ZW0nICsgKGlzQWN0aXZlID8gJyBhY3RpdmUnIDogJycpICsgKGlz RHJhZnQgPyAnIGRyYWZ0JyA6ICcnKSArIChkb2MucGFyZW50SWQgPyAnIGNoaWxkLWFydGljbGUn IDogJycpICsgJyIgb25jbGljaz0iRHJpdmVQb3J0YWwuc2VsZWN0RG9jdW1lbnQoXCcnICsgRHJp dmVQb3J0YWwuZXNjYXBlQXR0cihkb2MuaWQpICsgJ1wnKSI+JyArCiAgICAgICAgICAgICAgICAn PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2Fs aWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ij4nICsKICAgICAgICAgICAgICAgICAgICAnPGRpdiBzdHls ZT0iZmxleDoxO21pbi13aWR0aDowOyI+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2 IGNsYXNzPSJkb2MtaXRlbS10aXRsZSI+JyArIHRoaXMuZXNjYXBlSFRNTChkb2MudGl0ZWwpICsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc0xvY2tlZCA/ICcgPHNwYW4gc3R5bGU9ImZv bnQtc2l6ZToxMXB4OyBjb2xvcjojZGMzNTQ1OyBmb250LXdlaWdodDo0MDA7IiB0aXRsZT0iV2ly ZCBiZWFyYmVpdGV0IHZvbiAnICsgdGhpcy5lc2NhcGVBdHRyKGxvY2sudXNlcm5hbWUpICsgJyI+ W2dlc3BlcnJ0OiAnICsgdGhpcy5lc2NhcGVIVE1MKGxvY2sudXNlcm5hbWUpICsgJ108L3NwYW4+ JyA6ICcnKSArCiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAg ICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImRvYy1pdGVtLW1ldGEiPicgKwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImRvYy1pdGVtLWNhdGVnb3J5Ij4nICsgdGhpcy5l c2NhcGVIVE1MKGRvYy5rYXRlZ29yaWUpICsgJzwvZGl2PicgKwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGhhc01lZGlhID8gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweDsgY29sb3I6 dmFyKC0tdGV4dC1tdXRlZCk7Ij4rTWVkaWVuPC9zcGFuPicgOiAnJykgKwogICAgICAgICAgICAg ICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNz PSJkb2MtaXRlbS1kYXRlIj4nICsgZm9ybWF0RGF0ZShkb2MuZXJzdGVsbHQpICsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChkb2MuYmVhcmJlaXRldFZvbiA/ICcgfCAnICsgdGhpcy5lc2Nh cGVIVE1MKGRvYy5iZWFyYmVpdGV0Vm9uKSA6ICcnKSArCiAgICAgICAgICAgICAgICAgICAgICAg ICc8L2Rpdj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgKGRvYy5wYXJlbnRJZCA/ICc8ZGl2 IGNsYXNzPSJkb2MtcGFyZW50LXJlZiI+4oazIFVudGVyYXJ0aWtlbDwvZGl2PicgOiAnJykgKwog ICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgICAgICAgICAoc2hvd1N0 YXR1cyA/ICc8ZGl2IGNsYXNzPSJzdGF0dXMtYmFkZ2Utc21hbGwiIHN0eWxlPSJiYWNrZ3JvdW5k LWNvbG9yOicgKyBjZmcuY29sb3IgKyAnOyBjb2xvcjonICsgY2ZnLnRleHRDb2xvciArICc7Zmxl eC1zaHJpbms6MDttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXRvcDoycHg7Ij4nICsgZG9jLnN0YXR1 cyArICc8L2Rpdj4nIDogJycpICsKICAgICAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAg ICAgJzwvZGl2Pic7CiAgICAgICAgfSkuam9pbignJyk7CiAgICB9LAoKICAgIHRvZ2dsZVRhYmxl VmlldygpIHsKICAgICAgICB0aGlzLnRhYmxlVmlld0FjdGl2ZSA9ICF0aGlzLnRhYmxlVmlld0Fj dGl2ZTsKICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn Y29udGFpbmVyJyk7CiAgICAgICAgY29uc3QgdGFibGVDb250YWluZXIgPSBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgndGFibGVWaWV3Q29udGFpbmVyJyk7CiAgICAgICAgY29uc3QgYnRuID0gZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0blRhYmxlVmlldycpOwogICAgICAgIGlmICh0aGlzLnRh YmxlVmlld0FjdGl2ZSkgewogICAgICAgICAgICBjb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdu b25lJzsKICAgICAgICAgICAgdGFibGVDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7 CiAgICAgICAgICAgIGJ0bi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndmFyKC0tdGV4dC1oZWFk aW5nKSc7IGJ0bi5zdHlsZS5jb2xvciA9ICd3aGl0ZSc7CiAgICAgICAgICAgIHRoaXMucmVuZGVy VGFibGVWaWV3KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxl LmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgdGFibGVDb250YWluZXIuY2xhc3NMaXN0LnJlbW92 ZSgnYWN0aXZlJyk7CiAgICAgICAgICAgIGJ0bi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnJzsg YnRuLnN0eWxlLmNvbG9yID0gJyc7CiAgICAgICAgfQogICAgfSwKCiAgICBzb3J0VGFibGUoY29s KSB7CiAgICAgICAgaWYgKHRoaXMuX3RhYmxlU29ydENvbCA9PT0gY29sKSB7CiAgICAgICAgICAg IHRoaXMuX3RhYmxlU29ydERpciA9IHRoaXMuX3RhYmxlU29ydERpciA9PT0gJ2FzYycgPyAnZGVz YycgOiAnYXNjJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLl90YWJsZVNvcnRD b2wgPSBjb2w7CiAgICAgICAgICAgIHRoaXMuX3RhYmxlU29ydERpciA9ICdhc2MnOwogICAgICAg IH0KICAgICAgICB0aGlzLnJlbmRlclRhYmxlVmlldygpOwogICAgfSwKCiAgICBfdGFibGVTZWxl Y3RlZDogW10sCgogICAgcmVuZGVyVGFibGVWaWV3KCkgewogICAgICAgIGNvbnN0IGRvY3MgPSB0 aGlzLmZpbHRlcmVkRG9jdW1lbnRzOwogICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuX3RhYmxlU29y dENvbDsKICAgICAgICBjb25zdCBkaXIgPSB0aGlzLl90YWJsZVNvcnREaXIgPT09ICdhc2MnID8g MSA6IC0xOwogICAgICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5kb2NzXS5zb3J0KGZ1bmN0aW9uKGEs IGIpIHsKICAgICAgICAgICAgdmFyIHZhLCB2YjsKICAgICAgICAgICAgaWYgKGNvbCA9PT0gJ3Nj aGxhZ3dvZXJ0ZXInKSB7CiAgICAgICAgICAgICAgICB2YSA9IChhLnNjaGxhZ3dvZXJ0ZXIgfHwg W10pLmpvaW4oJywnKTsgdmIgPSAoYi5zY2hsYWd3b2VydGVyIHx8IFtdKS5qb2luKCcsJyk7CiAg ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YSA9IChhW2NvbF0gfHwgJycpOyB2 YiA9IChiW2NvbF0gfHwgJycpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0eXBlb2Yg dmEgPT09ICdzdHJpbmcnKSByZXR1cm4gdmEubG9jYWxlQ29tcGFyZSh2YiwgJ2RlJykgKiBkaXI7 CiAgICAgICAgICAgIHJldHVybiAodmEgLSB2YikgKiBkaXI7CiAgICAgICAgfSk7CgogICAgICAg IGNvbnN0IHNjID0gdGhpcy5fdGFibGVTb3J0Q29sOwogICAgICAgIGNvbnN0IHNkID0gdGhpcy5f dGFibGVTb3J0RGlyOwogICAgICAgIHZhciBjbHMgPSBmdW5jdGlvbihjKSB7IHJldHVybiBjID09 PSBzYyA/ICcgY2xhc3M9InNvcnRlZC0nICsgc2QgKyAnIicgOiAnJzsgfTsKICAgICAgICBjb25z dCBzdGF0dXNDb25maWcgPSBEcml2ZUZTLmNvbmZpZy5zdGF0dXMgfHwge307CiAgICAgICAgLy8g QWRtaW4tRnVua3Rpb25lbiAoQ2hlY2tib3hlbiwgU3RpZnQpIG51ciB3ZW5uOgogICAgICAgIC8v IDEuIFNlcnZlci1Nb2R1cyBha3RpdiAoc2VydmVyc2VpdGlnZXIgU2NodXR6IHZvcmhhbmRlbikK ICAgICAgICAvLyAyLiBHb3Zlcm5hbmNlLURhdGVuIGdlbGFkZW4gVU5EIFVzZXIgaXN0IFNVL0ZB CiAgICAgICAgdmFyIGhhc0dvdmVybmFuY2UgPSBEcml2ZUdvdmVybmFuY2UuZGF0YSAmJiBEcml2 ZUdvdmVybmFuY2UuZGF0YS5zdXBlclVzZXJzOwogICAgICAgIHZhciBpc0FkbWluID0gRHJpdmVG Uy5tb2RlID09PSAnc2VydmVyJyAmJiBoYXNHb3Zlcm5hbmNlICYmIChEcml2ZUdvdmVybmFuY2Uu aXNTdXBlclVzZXIoKSB8fCBEcml2ZUdvdmVybmFuY2UuaXNGYWNoYXVmc2ljaHQoKSk7CiAgICAg ICAgdGhpcy5fdGFibGVTZWxlY3RlZCA9IFtdOwoKICAgICAgICAvLyBCdWxrLUFrdGlvbnNsZWlz dGUgKG51ciBTVS9GQSkKICAgICAgICB2YXIgaHRtbCA9ICcnOwogICAgICAgIGlmIChpc0FkbWlu KSB7CiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9InRhYmxlQnVsa0JhciIgc3R5bGU9ImRp c3BsYXk6bm9uZTtwYWRkaW5nOjhweCAxNHB4O2JhY2tncm91bmQ6dmFyKC0tdGV4dC1oZWFkaW5n KTtjb2xvcjp3aGl0ZTtib3JkZXItcmFkaXVzOjZweDttYXJnaW4tYm90dG9tOjhweDtkaXNwbGF5 Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2ZvbnQtc2l6ZToxM3B4OyI+JyArCiAg ICAgICAgICAgICAgICAnPHNwYW4gaWQ9InRhYmxlQnVsa0NvdW50Ij4wIGF1c2dld8OkaGx0PC9z cGFuPicgKwogICAgICAgICAgICAgICAgJzxidXR0b24gb25jbGljaz0iRHJpdmVQb3J0YWwuYnVs a1F1aWNrRWRpdCgpIiBzdHlsZT0icGFkZGluZzo0cHggMTJweDtib3JkZXI6MXB4IHNvbGlkIHdo aXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6d2hpdGU7Ym9yZGVyLXJhZGl1czo0cHg7 Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEycHg7Ij5TY2huZWxsYmVhcmJlaXR1bmc8L2J1dHRv bj4nICsKICAgICAgICAgICAgICAgICc8YnV0dG9uIG9uY2xpY2s9IkRyaXZlUG9ydGFsLmJ1bGtE ZWxldGUoKSIgc3R5bGU9InBhZGRpbmc6NHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjZjg4O2Jh Y2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6I2ZhYTtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6 cG9pbnRlcjtmb250LXNpemU6MTJweDsiPkzDtnNjaGVuPC9idXR0b24+JyArCiAgICAgICAgICAg ICc8L2Rpdj4nOwogICAgICAgIH0KCiAgICAgICAgaHRtbCArPSAnPHRhYmxlIGNsYXNzPSJkcml2 ZS10YWJsZSI+PHRoZWFkPjx0cj4nICsKICAgICAgICAgICAgKGlzQWRtaW4gPyAnPHRoIHN0eWxl PSJ3aWR0aDozMHB4OyI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idGFibGVTZWxlY3RBbGwi IG9uY2hhbmdlPSJEcml2ZVBvcnRhbC50YWJsZVRvZ2dsZUFsbCh0aGlzLmNoZWNrZWQpIiB0aXRs ZT0iQWxsZSBhdXN3w6RobGVuIj48L3RoPicgOiAnJykgKwogICAgICAgICAgICAnPHRoJyArIGNs cygndGl0ZWwnKSArICcgb25jbGljaz0iRHJpdmVQb3J0YWwuc29ydFRhYmxlKFwndGl0ZWxcJyki PlRpdGVsPC90aD4nICsKICAgICAgICAgICAgJzx0aCcgKyBjbHMoJ2thdGVnb3JpZScpICsgJyBv bmNsaWNrPSJEcml2ZVBvcnRhbC5zb3J0VGFibGUoXCdrYXRlZ29yaWVcJykiPkthdGVnb3JpZTwv dGg+JyArCiAgICAgICAgICAgICc8dGgnICsgY2xzKCdzdGF0dXMnKSArICcgb25jbGljaz0iRHJp dmVQb3J0YWwuc29ydFRhYmxlKFwnc3RhdHVzXCcpIj5TdGF0dXM8L3RoPicgKwogICAgICAgICAg ICAnPHRoJyArIGNscygnZXJzdGVsbHRWb24nKSArICcgb25jbGljaz0iRHJpdmVQb3J0YWwuc29y dFRhYmxlKFwnZXJzdGVsbHRWb25cJykiPkVyc3RlbGxlcjwvdGg+JyArCiAgICAgICAgICAgICc8 dGgnICsgY2xzKCdlcnN0ZWxsdCcpICsgJyBvbmNsaWNrPSJEcml2ZVBvcnRhbC5zb3J0VGFibGUo XCdlcnN0ZWxsdFwnKSI+RXJzdGVsbHQ8L3RoPicgKwogICAgICAgICAgICAnPHRoJyArIGNscygn Z2VhZW5kZXJ0JykgKyAnIG9uY2xpY2s9IkRyaXZlUG9ydGFsLnNvcnRUYWJsZShcJ2dlYWVuZGVy dFwnKSI+R2XDpG5kZXJ0PC90aD4nICsKICAgICAgICAgICAgJzx0aCcgKyBjbHMoJ3ZlcnNpb24n KSArICcgb25jbGljaz0iRHJpdmVQb3J0YWwuc29ydFRhYmxlKFwndmVyc2lvblwnKSI+VmVyc2lv bjwvdGg+JyArCiAgICAgICAgICAgIChpc0FkbWluID8gJzx0aCBzdHlsZT0id2lkdGg6NDBweDsi PjwvdGg+JyA6ICcnKSArCiAgICAgICAgJzwvdHI+PC90aGVhZD48dGJvZHk+JzsKCiAgICAgICAg c29ydGVkLmZvckVhY2goZnVuY3Rpb24oZG9jKSB7CiAgICAgICAgICAgIHZhciBjZmcgPSBzdGF0 dXNDb25maWdbZG9jLnN0YXR1c10gfHwgeyBjb2xvcjogJyNlZWUnLCB0ZXh0Q29sb3I6ICcjMzMz JywgaWNvbjogJycgfTsKICAgICAgICAgICAgaHRtbCArPSAnPHRyPicgKwogICAgICAgICAgICAg ICAgKGlzQWRtaW4gPyAnPHRkIG9uY2xpY2s9ImV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj48aW5w dXQgdHlwZT0iY2hlY2tib3giIGNsYXNzPSJ0YWJsZS1yb3ctY2IiIHZhbHVlPSInICsgRHJpdmVQ b3J0YWwuZXNjYXBlQXR0cihkb2MuaWQpICsgJyIgb25jaGFuZ2U9IkRyaXZlUG9ydGFsLnRhYmxl U2VsZWN0aW9uQ2hhbmdlZCgpIj48L3RkPicgOiAnJykgKwogICAgICAgICAgICAgICAgJzx0ZCBv bmNsaWNrPSJEcml2ZVBvcnRhbC5fdGFibGVPcGVuRG9jKFwnJyArIERyaXZlUG9ydGFsLmVzY2Fw ZUF0dHIoZG9jLmlkKSArICdcJyk7IiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7Ij48c3Ryb25nPicg KyBEcml2ZVBvcnRhbC5lc2NhcGVIVE1MKGRvYy50aXRlbCkgKyAnPC9zdHJvbmc+PC90ZD4nICsK ICAgICAgICAgICAgICAgICc8dGQ+JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoZG9jLmthdGVn b3JpZSkgKyAnPC90ZD4nICsKICAgICAgICAgICAgICAgICc8dGQ+PHNwYW4gY2xhc3M9InN0YXR1 cy1iYWRnZS1zbWFsbCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6JyArIGNmZy5jb2xvciArICc7 Y29sb3I6JyArIGNmZy50ZXh0Q29sb3IgKyAnOyI+JyArIGRvYy5zdGF0dXMgKyAnPC9zcGFuPjwv dGQ+JyArCiAgICAgICAgICAgICAgICAnPHRkPicgKyBEcml2ZVBvcnRhbC5lc2NhcGVIVE1MKGRv Yy5lcnN0ZWxsdFZvbiB8fCAnLScpICsgJzwvdGQ+JyArCiAgICAgICAgICAgICAgICAnPHRkPicg KyBmb3JtYXREYXRlKGRvYy5lcnN0ZWxsdCkgKyAnPC90ZD4nICsKICAgICAgICAgICAgICAgICc8 dGQ+JyArIGZvcm1hdERhdGUoZG9jLmdlYWVuZGVydCkgKyAnPC90ZD4nICsKICAgICAgICAgICAg ICAgICc8dGQ+JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoZG9jLnZlcnNpb24gfHwgJy0nKSAr ICc8L3RkPicgKwogICAgICAgICAgICAgICAgKGlzQWRtaW4gPyAnPHRkIG9uY2xpY2s9ImV2ZW50 LnN0b3BQcm9wYWdhdGlvbigpIj48YnV0dG9uIG9uY2xpY2s9IkRyaXZlUG9ydGFsLnF1aWNrRWRp dFNpbmdsZShcJycgKyBEcml2ZVBvcnRhbC5lc2NhcGVBdHRyKGRvYy5pZCkgKyAnXCcpIiBzdHls ZT0icGFkZGluZzoycHggOHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTti YWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQtYWx0KTtib3JkZXItcmFkaXVzOjNweDtjdXJzb3I6cG9p bnRlcjtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10ZXh0LXNlY29uZGFyeSk7IiB0aXRsZT0i U2NobmVsbGJlYXJiZWl0dW5nIj7inI48L2J1dHRvbj48L3RkPicgOiAnJykgKwogICAgICAgICAg ICAnPC90cj4nOwogICAgICAgIH0pOwogICAgICAgIGh0bWwgKz0gJzwvdGJvZHk+PC90YWJsZT4n OwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZVZpZXdDb250YWluZXInKS5p bm5lckhUTUwgPSBodG1sOwogICAgfSwKCiAgICBfdGFibGVPcGVuRG9jKGRvY0lkKSB7CiAgICAg ICAgdGhpcy50YWJsZVZpZXdBY3RpdmUgPSBmYWxzZTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVt ZW50QnlJZCgnY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgIGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCd0YWJsZVZpZXdDb250YWluZXInKS5jbGFzc0xpc3QucmVtb3ZlKCdh Y3RpdmUnKTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuVGFibGVWaWV3Jyku c3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ2J0blRhYmxlVmlldycpLnN0eWxlLmNvbG9yID0gJyc7CiAgICAgICAgdGhpcy5zZWxlY3RE b2N1bWVudChkb2NJZCk7CiAgICB9LAoKICAgIHRhYmxlVG9nZ2xlQWxsKGNoZWNrZWQpIHsKICAg ICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGFibGUtcm93LWNiJykuZm9yRWFjaChm dW5jdGlvbihjYikgeyBjYi5jaGVja2VkID0gY2hlY2tlZDsgfSk7CiAgICAgICAgdGhpcy50YWJs ZVNlbGVjdGlvbkNoYW5nZWQoKTsKICAgIH0sCgogICAgdGFibGVTZWxlY3Rpb25DaGFuZ2VkKCkg ewogICAgICAgIHZhciBzZWxlY3RlZCA9IFtdOwogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0 b3JBbGwoJy50YWJsZS1yb3ctY2I6Y2hlY2tlZCcpLmZvckVhY2goZnVuY3Rpb24oY2IpIHsgc2Vs ZWN0ZWQucHVzaChjYi52YWx1ZSk7IH0pOwogICAgICAgIHRoaXMuX3RhYmxlU2VsZWN0ZWQgPSBz ZWxlY3RlZDsKICAgICAgICB2YXIgYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxl QnVsa0JhcicpOwogICAgICAgIGlmIChiYXIpIHsKICAgICAgICAgICAgYmFyLnN0eWxlLmRpc3Bs YXkgPSBzZWxlY3RlZC5sZW5ndGggPiAwID8gJ2ZsZXgnIDogJ25vbmUnOwogICAgICAgICAgICBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFibGVCdWxrQ291bnQnKS50ZXh0Q29udGVudCA9IHNl bGVjdGVkLmxlbmd0aCArICcgYXVzZ2V3w6RobHQnOwogICAgICAgIH0KICAgIH0sCgogICAgYnVs a1F1aWNrRWRpdCgpIHsKICAgICAgICBpZiAodGhpcy5fdGFibGVTZWxlY3RlZC5sZW5ndGggPT09 IDApIHJldHVybjsKICAgICAgICB2YXIgZG9jcyA9IHRoaXMuX3RhYmxlU2VsZWN0ZWQubWFwKGZ1 bmN0aW9uKGlkKSB7IHJldHVybiBEcml2ZUZTLmRvY3VtZW50cy5maW5kKGZ1bmN0aW9uKGQpIHsg cmV0dXJuIGQuaWQgPT09IGlkOyB9KTsgfSkuZmlsdGVyKEJvb2xlYW4pOwogICAgICAgIHZhciBr YXRlZ29yaWVuID0gRHJpdmVGUy5jb25maWcua2F0ZWdvcmllbiB8fCBbXTsKICAgICAgICB2YXIg c3RhdHVzTGlzdCA9IE9iamVjdC5rZXlzKERyaXZlRlMuY29uZmlnLnN0YXR1cyB8fCB7fSk7Cgog ICAgICAgIHZhciBtb2RhbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAg IG1vZGFsLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRo OjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNSk7ei1pbmRleDoxMDUw MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7 JzsKICAgICAgICBtb2RhbC5vbmNsaWNrID0gZnVuY3Rpb24oZSkgeyBpZiAoZS50YXJnZXQgPT09 IG1vZGFsKSBtb2RhbC5yZW1vdmUoKTsgfTsKCiAgICAgICAgdmFyIGlucHV0U3R5bGUgPSAnd2lk dGg6MTAwJTtwYWRkaW5nOjZweCAxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLWNv bG9yKTtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTNweDtiYWNrZ3JvdW5kOnZhcigtLWJn LWlucHV0KTtjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpOyc7CgogICAgICAgIHZhciBodG1sID0g JzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmctY2FyZCk7Ym9yZGVyLXJhZGl1czoxMHB4 O3BhZGRpbmc6MjBweCAyNHB4O21heC13aWR0aDo1MDBweDt3aWR0aDo5MCU7Ym94LXNoYWRvdzow IDhweCAzMnB4IHJnYmEoMCwwLDAsMC4zKTttYXgtaGVpZ2h0Ojg1dmg7b3ZlcmZsb3cteTphdXRv OyI+JyArCiAgICAgICAgICAgICc8aDMgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtaGVhZGluZyk7 bWFyZ2luLWJvdHRvbTo2cHg7Ij5TY2huZWxsYmVhcmJlaXR1bmc8L2gzPicgKwogICAgICAgICAg ICAnPHAgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpO21hcmdp bi1ib3R0b206MTRweDsiPicgKyBkb2NzLmxlbmd0aCArICcgQXJ0aWtlbCBhdXNnZXfDpGhsdC4g TnVyIGF1c2dlZsO8bGx0ZSBGZWxkZXIgd2VyZGVuIGdlw6RuZGVydC48L3A+JyArCgogICAgICAg ICAgICAnPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMHB4OyI+PGxhYmVsIHN0eWxlPSJmb250 LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdGV4dC1zZWNvbmRhcnkpO2Rp c3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTozcHg7Ij5LYXRlZ29yaWUgw6RuZGVybjwvbGFiZWw+ JyArCiAgICAgICAgICAgICc8c2VsZWN0IGlkPSJidWxrS2F0ZWdvcmllIiBzdHlsZT0iJyArIGlu cHV0U3R5bGUgKyAnIj48b3B0aW9uIHZhbHVlPSIiPuKAlCBOaWNodCDDpG5kZXJuIOKAlDwvb3B0 aW9uPic7CiAgICAgICAga2F0ZWdvcmllbi5mb3JFYWNoKGZ1bmN0aW9uKGspIHsgaHRtbCArPSAn PG9wdGlvbiB2YWx1ZT0iJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoaykgKyAnIj4nICsgRHJp dmVQb3J0YWwuZXNjYXBlSFRNTChrKSArICc8L29wdGlvbj4nOyB9KTsKICAgICAgICBodG1sICs9 ICc8L3NlbGVjdD48L2Rpdj4nICsKCiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJtYXJnaW4tYm90 dG9tOjEwcHg7Ij48bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtj b2xvcjp2YXIoLS10ZXh0LXNlY29uZGFyeSk7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjNw eDsiPlN0YXR1cyDDpG5kZXJuPC9sYWJlbD4nICsKICAgICAgICAgICAgJzxzZWxlY3QgaWQ9ImJ1 bGtTdGF0dXMiIHN0eWxlPSInICsgaW5wdXRTdHlsZSArICciPjxvcHRpb24gdmFsdWU9IiI+4oCU IE5pY2h0IMOkbmRlcm4g4oCUPC9vcHRpb24+JzsKICAgICAgICBzdGF0dXNMaXN0LmZvckVhY2go ZnVuY3Rpb24ocykgeyBodG1sICs9ICc8b3B0aW9uIHZhbHVlPSInICsgRHJpdmVQb3J0YWwuZXNj YXBlQXR0cihzKSArICciPicgKyBEcml2ZVBvcnRhbC5lc2NhcGVIVE1MKHMpICsgJzwvb3B0aW9u Pic7IH0pOwogICAgICAgIGh0bWwgKz0gJzwvc2VsZWN0PjwvZGl2PicgKwoKICAgICAgICAgICAg JzxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTBweDsiPjxsYWJlbCBzdHlsZT0iZm9udC1zaXpl OjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXRleHQtc2Vjb25kYXJ5KTtkaXNwbGF5 OmJsb2NrO21hcmdpbi1ib3R0b206M3B4OyI+U2NobGFnd29ydCBoaW56dWbDvGdlbjwvbGFiZWw+ JyArCiAgICAgICAgICAgICc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImJ1bGtBZGRUYWciIHBsYWNl aG9sZGVyPSJOZXVlcyBTY2hsYWd3b3J0Li4uIiBzdHlsZT0iJyArIGlucHV0U3R5bGUgKyAnIj48 L2Rpdj4nICsKCiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHg7Ij48 bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10 ZXh0LXNlY29uZGFyeSk7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjNweDsiPlNjaGxhZ3dv cnQgZW50ZmVybmVuPC9sYWJlbD4nICsKICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBp ZD0iYnVsa1JlbW92ZVRhZyIgcGxhY2Vob2xkZXI9Ilp1IGVudGZlcm5lbmRlcyBTY2hsYWd3b3J0 Li4uIiBzdHlsZT0iJyArIGlucHV0U3R5bGUgKyAnIj48L2Rpdj4nICsKCiAgICAgICAgICAgICc8 ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7 bWFyZ2luLXRvcDoxNHB4OyI+JyArCiAgICAgICAgICAgICAgICAnPGJ1dHRvbiBvbmNsaWNrPSJ0 aGlzLmNsb3Nlc3QoXCdkaXZbc3R5bGVdXCcpLnBhcmVudEVsZW1lbnQucmVtb3ZlKCkiIHN0eWxl PSJwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgdmFy KC0tYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQpO2NvbG9yOnZhcigtLXRl eHQtcHJpbWFyeSk7Y3Vyc29yOnBvaW50ZXI7Ij5BYmJyZWNoZW48L2J1dHRvbj4nICsKICAgICAg ICAgICAgICAgICc8YnV0dG9uIG9uY2xpY2s9IkRyaXZlUG9ydGFsLl9jb25maXJtQnVsa0VkaXQo KSIgc3R5bGU9InBhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOm5vbmU7 YmFja2dyb3VuZDp2YXIoLS10ZXh0LWhlYWRpbmcpO2NvbG9yOndoaXRlO2N1cnNvcjpwb2ludGVy O2ZvbnQtd2VpZ2h0OjYwMDsiPsOEbmRlcnVuZ2VuIGFud2VuZGVuPC9idXR0b24+JyArCiAgICAg ICAgICAgICc8L2Rpdj48L2Rpdj4nOwoKICAgICAgICBtb2RhbC5pbm5lckhUTUwgPSBodG1sOwog ICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobW9kYWwpOwogICAgfSwKCiAgICBhc3lu YyBfY29uZmlybUJ1bGtFZGl0KCkgewogICAgICAgIHZhciBuZXdLYXQgPSBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgnYnVsa0thdGVnb3JpZScpLnZhbHVlOwogICAgICAgIHZhciBuZXdTdGF0dXMg PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnVsa1N0YXR1cycpLnZhbHVlOwogICAgICAgIHZh ciBhZGRUYWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnVsa0FkZFRhZycpLnZhbHVlLnRy aW0oKTsKICAgICAgICB2YXIgcmVtb3ZlVGFnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1 bGtSZW1vdmVUYWcnKS52YWx1ZS50cmltKCk7CgogICAgICAgIGlmICghbmV3S2F0ICYmICFuZXdT dGF0dXMgJiYgIWFkZFRhZyAmJiAhcmVtb3ZlVGFnKSB7CiAgICAgICAgICAgIHNob3dUb2FzdCgn Qml0dGUgbWluZGVzdGVucyBlaW4gRmVsZCBhdXNmw7xsbGVuJywgJ3dhcm5pbmcnKTsKICAgICAg ICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gTW9kYWwgc2NobGllc3NlbgogICAg ICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidWxrS2F0ZWdvcmllJyk7CiAg ICAgICAgaWYgKGVsKSB7IHZhciBtID0gZWw7IHdoaWxlIChtLnBhcmVudEVsZW1lbnQgIT09IGRv Y3VtZW50LmJvZHkpIG0gPSBtLnBhcmVudEVsZW1lbnQ7IG0ucmVtb3ZlKCk7IH0KCiAgICAgICAg dmFyIGNvdW50ID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RhYmxlU2Vs ZWN0ZWQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGRvYyA9IERyaXZlRlMuZG9jdW1l bnRzLmZpbmQoZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5pZCA9PT0gRHJpdmVQb3J0YWwuX3RhYmxl U2VsZWN0ZWRbaV07IH0pOwogICAgICAgICAgICBpZiAoIWRvYykgY29udGludWU7CiAgICAgICAg ICAgIGlmIChuZXdLYXQpIGRvYy5rYXRlZ29yaWUgPSBuZXdLYXQ7CiAgICAgICAgICAgIGlmIChu ZXdTdGF0dXMpIHsKICAgICAgICAgICAgICAgIGRvYy52ZXJzaW9uID0gY2FsY3VsYXRlVmVyc2lv bihkb2MsIGRvYy5pbmhhbHQsIGRvYy5pbmhhbHQsIG5ld1N0YXR1cyk7CiAgICAgICAgICAgICAg ICBkb2Muc3RhdHVzID0gbmV3U3RhdHVzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChh ZGRUYWcpIHsKICAgICAgICAgICAgICAgIGlmICghZG9jLnNjaGxhZ3dvZXJ0ZXIpIGRvYy5zY2hs YWd3b2VydGVyID0gW107CiAgICAgICAgICAgICAgICBpZiAoIWRvYy5zY2hsYWd3b2VydGVyLmlu Y2x1ZGVzKGFkZFRhZykpIGRvYy5zY2hsYWd3b2VydGVyLnB1c2goYWRkVGFnKTsKICAgICAgICAg ICAgfQogICAgICAgICAgICBpZiAocmVtb3ZlVGFnICYmIGRvYy5zY2hsYWd3b2VydGVyKSB7CiAg ICAgICAgICAgICAgICBkb2Muc2NobGFnd29lcnRlciA9IGRvYy5zY2hsYWd3b2VydGVyLmZpbHRl cihmdW5jdGlvbihrKSB7IHJldHVybiBrICE9PSByZW1vdmVUYWc7IH0pOwogICAgICAgICAgICB9 CiAgICAgICAgICAgIGF3YWl0IERyaXZlRlMuc2F2ZURvY3VtZW50KGRvYyk7CiAgICAgICAgICAg IGNvdW50Kys7CiAgICAgICAgfQogICAgICAgIHNob3dUb2FzdChjb3VudCArICcgQXJ0aWtlbCBh a3R1YWxpc2llcnQnLCAnc3VjY2VzcycpOwogICAgICAgIHRoaXMucmVuZGVyKCk7CiAgICAgICAg dGhpcy5yZW5kZXJUYWJsZVZpZXcoKTsKICAgIH0sCgogICAgYnVsa0RlbGV0ZSgpIHsKICAgICAg ICB2YXIgY291bnQgPSB0aGlzLl90YWJsZVNlbGVjdGVkLmxlbmd0aDsKICAgICAgICBpZiAoY291 bnQgPT09IDApIHJldHVybjsKCiAgICAgICAgdmFyIG1vZGFsID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgnZGl2Jyk7CiAgICAgICAgbW9kYWwuc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjpmaXhl ZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOnJnYmEoMCww LDAsMC41KTt6LWluZGV4OjEwNTAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVz dGlmeS1jb250ZW50OmNlbnRlcjsnOwogICAgICAgIG1vZGFsLm9uY2xpY2sgPSBmdW5jdGlvbihl KSB7IGlmIChlLnRhcmdldCA9PT0gbW9kYWwpIG1vZGFsLnJlbW92ZSgpOyB9OwogICAgICAgIG1v ZGFsLmlubmVySFRNTCA9CiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigt LWJnLWNhcmQpO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjI0cHggMjhweDttYXgtd2lkdGg6 NDIwcHg7d2lkdGg6OTAlO2JveC1zaGFkb3c6MCA4cHggMzJweCByZ2JhKDAsMCwwLDAuMyk7Ij4n ICsKICAgICAgICAgICAgICAgICc8aDMgc3R5bGU9ImNvbG9yOiNkYzM1NDU7bWFyZ2luLWJvdHRv bToxMHB4OyI+JyArIGNvdW50ICsgJyBBcnRpa2VsIGzDtnNjaGVuPzwvaDM+JyArCiAgICAgICAg ICAgICAgICAnPHAgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Zm9udC1zaXplOjE0 cHg7bGluZS1oZWlnaHQ6MS43O21hcmdpbi1ib3R0b206MTRweDsiPicgKwogICAgICAgICAgICAg ICAgICAgICdEaWUgYXVzZ2V3w6RobHRlbiBBcnRpa2VsIHdlcmRlbiBpbiBkZW4gUGFwaWVya29y YiB2ZXJzY2hvYmVuIHVuZCBrw7ZubmVuIDI4IFRhZ2UgbGFuZyB3aWVkZXJoZXJnZXN0ZWxsdCB3 ZXJkZW4uJyArCiAgICAgICAgICAgICAgICAnPC9wPicgKwogICAgICAgICAgICAgICAgJzxsYWJl bCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXRleHQt c2Vjb25kYXJ5KTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4OyI+TlctS2VubnVuZyB6 dXIgQmVzdMOkdGlndW5nPC9sYWJlbD4nICsKICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT0i dGV4dCIgaWQ9ImJ1bGtEZWxldGVOVyIgcGxhY2Vob2xkZXI9Ik5XLUtlbm51bmcgZWluZ2ViZW4u Li4iIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2 YXIoLS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtc2l6ZToxNHB4O2JhY2tn cm91bmQ6dmFyKC0tYmctaW5wdXQpO2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7bWFyZ2luLWJv dHRvbToxNHB4OyI+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4 O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kOyI+JyArCiAgICAgICAgICAgICAgICAg ICAgJzxidXR0b24gb25jbGljaz0idGhpcy5jbG9zZXN0KFwnZGl2W3N0eWxlXVwnKS5wYXJlbnRF bGVtZW50LnJlbW92ZSgpIiBzdHlsZT0icGFkZGluZzo4cHggMTZweDtib3JkZXItcmFkaXVzOjRw eDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1i Zy1jYXJkKTtjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpO2N1cnNvcjpwb2ludGVyOyI+QWJicmVj aGVuPC9idXR0b24+JyArCiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gb25jbGljaz0iRHJp dmVQb3J0YWwuX2NvbmZpcm1CdWxrRGVsZXRlKCkiIHN0eWxlPSJwYWRkaW5nOjhweCAxNnB4O2Jv cmRlci1yYWRpdXM6NHB4O2JvcmRlcjpub25lO2JhY2tncm91bmQ6I2RjMzU0NTtjb2xvcjp3aGl0 ZTtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7Ij5Mw7ZzY2hlbjwvYnV0dG9uPicgKwog ICAgICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAnPC9kaXY+JzsKICAgICAgICBk b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1vZGFsKTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0 aW9uKCkgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnVsa0RlbGV0ZU5XJykuZm9jdXMoKTsg fSwgNTApOwogICAgfSwKCiAgICBxdWlja0VkaXRTaW5nbGUoZG9jSWQpIHsKICAgICAgICB2YXIg ZG9jID0gRHJpdmVGUy5kb2N1bWVudHMuZmluZChmdW5jdGlvbihkKSB7IHJldHVybiBkLmlkID09 PSBkb2NJZDsgfSk7CiAgICAgICAgaWYgKCFkb2MpIHJldHVybjsKICAgICAgICB2YXIga2F0ZWdv cmllbiA9IERyaXZlRlMuY29uZmlnLmthdGVnb3JpZW4gfHwgW107CiAgICAgICAgdmFyIHN0YXR1 c0xpc3QgPSBPYmplY3Qua2V5cyhEcml2ZUZTLmNvbmZpZy5zdGF0dXMgfHwge30pOwogICAgICAg IHZhciBpbnB1dFN0eWxlID0gJ3dpZHRoOjEwMCU7cGFkZGluZzo2cHggMTBweDtib3JkZXI6MXB4 IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjEz cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1pbnB1dCk7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5KTsn OwoKICAgICAgICB2YXIgbW9kYWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAg ICAgICBtb2RhbC5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3 aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO3otaW5kZXg6 MTA1MDA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2Vu dGVyOyc7CiAgICAgICAgbW9kYWwub25jbGljayA9IGZ1bmN0aW9uKGUpIHsgaWYgKGUudGFyZ2V0 ID09PSBtb2RhbCkgbW9kYWwucmVtb3ZlKCk7IH07CgogICAgICAgIHZhciBodG1sID0gJzxkaXYg c3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmctY2FyZCk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRp bmc6MjBweCAyNHB4O21heC13aWR0aDo0ODBweDt3aWR0aDo5MCU7Ym94LXNoYWRvdzowIDhweCAz MnB4IHJnYmEoMCwwLDAsMC4zKTsiPicgKwogICAgICAgICAgICAnPGgzIHN0eWxlPSJjb2xvcjp2 YXIoLS10ZXh0LWhlYWRpbmcpO21hcmdpbi1ib3R0b206MTRweDsiPlNjaG5lbGxiZWFyYmVpdHVu ZzwvaDM+JyArCgogICAgICAgICAgICAnPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHg7Ij48 bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10 ZXh0LXNlY29uZGFyeSk7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjNweDsiPlRpdGVsPC9s YWJlbD4nICsKICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3FlVGl0ZWwiIHZh bHVlPSInICsgRHJpdmVQb3J0YWwuZXNjYXBlQXR0cihkb2MudGl0ZWwpICsgJyIgc3R5bGU9Iicg KyBpbnB1dFN0eWxlICsgJyI+PC9kaXY+JyArCgogICAgICAgICAgICAnPGRpdiBzdHlsZT0iZGlz cGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDo4cHg7bWFyZ2luLWJv dHRvbTo4cHg7Ij4nICsKICAgICAgICAgICAgICAgICc8ZGl2PjxsYWJlbCBzdHlsZT0iZm9udC1z aXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXRleHQtc2Vjb25kYXJ5KTtkaXNw bGF5OmJsb2NrO21hcmdpbi1ib3R0b206M3B4OyI+S2F0ZWdvcmllPC9sYWJlbD4nICsKICAgICAg ICAgICAgICAgICc8c2VsZWN0IGlkPSJzcWVLYXRlZ29yaWUiIHN0eWxlPSInICsgaW5wdXRTdHls ZSArICciPic7CiAgICAgICAga2F0ZWdvcmllbi5mb3JFYWNoKGZ1bmN0aW9uKGspIHsgaHRtbCAr PSAnPG9wdGlvbiB2YWx1ZT0iJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoaykgKyAnIicgKyAo ayA9PT0gZG9jLmthdGVnb3JpZSA/ICcgc2VsZWN0ZWQnIDogJycpICsgJz4nICsgRHJpdmVQb3J0 YWwuZXNjYXBlSFRNTChrKSArICc8L29wdGlvbj4nOyB9KTsKICAgICAgICBodG1sICs9ICc8L3Nl bGVjdD48L2Rpdj4nICsKICAgICAgICAgICAgICAgICc8ZGl2PjxsYWJlbCBzdHlsZT0iZm9udC1z aXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXRleHQtc2Vjb25kYXJ5KTtkaXNw bGF5OmJsb2NrO21hcmdpbi1ib3R0b206M3B4OyI+U3RhdHVzPC9sYWJlbD4nICsKICAgICAgICAg ICAgICAgICc8c2VsZWN0IGlkPSJzcWVTdGF0dXMiIHN0eWxlPSInICsgaW5wdXRTdHlsZSArICci Pic7CiAgICAgICAgc3RhdHVzTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsgaHRtbCArPSAnPG9w dGlvbiB2YWx1ZT0iJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIocykgKyAnIicgKyAocyA9PT0g ZG9jLnN0YXR1cyA/ICcgc2VsZWN0ZWQnIDogJycpICsgJz4nICsgRHJpdmVQb3J0YWwuZXNjYXBl SFRNTChzKSArICc8L29wdGlvbj4nOyB9KTsKICAgICAgICBodG1sICs9ICc8L3NlbGVjdD48L2Rp dj48L2Rpdj4nICsKCiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10 ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjhweDttYXJnaW4tYm90dG9tOjhweDsiPicgKwog ICAgICAgICAgICAgICAgJzxkaXY+PGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdl aWdodDo2MDA7Y29sb3I6dmFyKC0tdGV4dC1zZWNvbmRhcnkpO2Rpc3BsYXk6YmxvY2s7bWFyZ2lu LWJvdHRvbTozcHg7Ij5FcnN0ZWxsdCB2b248L2xhYmVsPicgKwogICAgICAgICAgICAgICAgJzxp bnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3FlRXJzdGVsbGVyIiB2YWx1ZT0iJyArIERyaXZlUG9ydGFs LmVzY2FwZUF0dHIoZG9jLmVyc3RlbGx0Vm9uIHx8ICcnKSArICciIHN0eWxlPSInICsgaW5wdXRT dHlsZSArICciPjwvZGl2PicgKwogICAgICAgICAgICAgICAgJzxkaXY+PGxhYmVsIHN0eWxlPSJm b250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdGV4dC1zZWNvbmRhcnkp O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTozcHg7Ij5WZXJzaW9uPC9sYWJlbD4nICsKICAg ICAgICAgICAgICAgICc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InNxZVZlcnNpb24iIHZhbHVlPSIn ICsgRHJpdmVQb3J0YWwuZXNjYXBlQXR0cihkb2MudmVyc2lvbiB8fCAnJykgKyAnIiBzdHlsZT0i JyArIGlucHV0U3R5bGUgKyAnIj48L2Rpdj4nICsKICAgICAgICAgICAgJzwvZGl2PicgKwoKICAg ICAgICAgICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O2p1c3RpZnktY29udGVu dDpmbGV4LWVuZDttYXJnaW4tdG9wOjE0cHg7Ij4nICsKICAgICAgICAgICAgICAgICc8YnV0dG9u IG9uY2xpY2s9InRoaXMuY2xvc2VzdChcJ2RpdltzdHlsZV1cJykucGFyZW50RWxlbWVudC5yZW1v dmUoKSIgc3R5bGU9InBhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFw eCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tYmctY2FyZCk7Y29s b3I6dmFyKC0tdGV4dC1wcmltYXJ5KTtjdXJzb3I6cG9pbnRlcjsiPkFiYnJlY2hlbjwvYnV0dG9u PicgKwogICAgICAgICAgICAgICAgJzxidXR0b24gb25jbGljaz0iRHJpdmVQb3J0YWwuX2NvbmZp cm1TaW5nbGVFZGl0KFwnJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoZG9jSWQpICsgJ1wnKSIg c3R5bGU9InBhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOm5vbmU7YmFj a2dyb3VuZDp2YXIoLS10ZXh0LWhlYWRpbmcpO2NvbG9yOndoaXRlO2N1cnNvcjpwb2ludGVyO2Zv bnQtd2VpZ2h0OjYwMDsiPlNwZWljaGVybjwvYnV0dG9uPicgKwogICAgICAgICAgICAnPC9kaXY+ PC9kaXY+JzsKCiAgICAgICAgbW9kYWwuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgICBkb2N1bWVu dC5ib2R5LmFwcGVuZENoaWxkKG1vZGFsKTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg eyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3FlVGl0ZWwnKS5mb2N1cygpOyB9LCA1MCk7CiAg ICB9LAoKICAgIGFzeW5jIF9jb25maXJtU2luZ2xlRWRpdChkb2NJZCkgewogICAgICAgIHZhciBk b2MgPSBEcml2ZUZTLmRvY3VtZW50cy5maW5kKGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQuaWQgPT09 IGRvY0lkOyB9KTsKICAgICAgICBpZiAoIWRvYykgcmV0dXJuOwoKICAgICAgICBkb2MudGl0ZWwg PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3FlVGl0ZWwnKS52YWx1ZS50cmltKCkgfHwgZG9j LnRpdGVsOwogICAgICAgIGRvYy5rYXRlZ29yaWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn c3FlS2F0ZWdvcmllJykudmFsdWU7CiAgICAgICAgdmFyIG5ld1N0YXR1cyA9IGRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKCdzcWVTdGF0dXMnKS52YWx1ZTsKICAgICAgICBpZiAobmV3U3RhdHVzICE9 PSBkb2Muc3RhdHVzKSB7CiAgICAgICAgICAgIGRvYy52ZXJzaW9uID0gY2FsY3VsYXRlVmVyc2lv bihkb2MsIGRvYy5pbmhhbHQsIGRvYy5pbmhhbHQsIG5ld1N0YXR1cyk7CiAgICAgICAgICAgIGRv Yy5zdGF0dXMgPSBuZXdTdGF0dXM7CiAgICAgICAgfQogICAgICAgIGRvYy5lcnN0ZWxsdFZvbiA9 IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcWVFcnN0ZWxsZXInKS52YWx1ZS50cmltKCkgfHwg ZG9jLmVyc3RlbGx0Vm9uOwogICAgICAgIGRvYy52ZXJzaW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoJ3NxZVZlcnNpb24nKS52YWx1ZS50cmltKCkgfHwgZG9jLnZlcnNpb247CgogICAgICAg IC8vIE1vZGFsIHNjaGxpZXNzZW4KICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCgnc3FlVGl0ZWwnKTsKICAgICAgICBpZiAoZWwpIHsgdmFyIG0gPSBlbDsgd2hpbGUgKG0u cGFyZW50RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkgbSA9IG0ucGFyZW50RWxlbWVudDsgbS5y ZW1vdmUoKTsgfQoKICAgICAgICBhd2FpdCBEcml2ZUZTLnNhdmVEb2N1bWVudChkb2MpOwogICAg ICAgIHNob3dUb2FzdCgnQXJ0aWtlbCBha3R1YWxpc2llcnQ6ICcgKyBkb2MudGl0ZWwsICdzdWNj ZXNzJyk7CiAgICAgICAgdGhpcy5yZW5kZXIoKTsKICAgICAgICB0aGlzLnJlbmRlclRhYmxlVmll dygpOwogICAgfSwKCiAgICBhc3luYyBfY29uZmlybUJ1bGtEZWxldGUoKSB7CiAgICAgICAgdmFy IG53SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnVsa0RlbGV0ZU5XJyk7CiAgICAg ICAgdmFyIG53S2VubnVuZyA9IG53SW5wdXQgPyBud0lucHV0LnZhbHVlLnRyaW0oKSA6ICcnOwog ICAgICAgIGlmICghbndLZW5udW5nKSB7IHNob3dUb2FzdCgnQml0dGUgTlctS2VubnVuZyBlaW5n ZWJlbicsICd3YXJuaW5nJyk7IG53SW5wdXQuZm9jdXMoKTsgcmV0dXJuOyB9CgogICAgICAgIC8v IE1vZGFsIHNjaGxpZXNzZW4KICAgICAgICB2YXIgbSA9IG53SW5wdXQ7IHdoaWxlIChtLnBhcmVu dEVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkpIG0gPSBtLnBhcmVudEVsZW1lbnQ7IG0ucmVtb3Zl KCk7CgogICAgICAgIHZhciBkZWxldGVkID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8 IHRoaXMuX3RhYmxlU2VsZWN0ZWQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGRvY0lk ID0gdGhpcy5fdGFibGVTZWxlY3RlZFtpXTsKICAgICAgICAgICAgdmFyIGRvYyA9IERyaXZlRlMu ZG9jdW1lbnRzLmZpbmQoZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5pZCA9PT0gZG9jSWQ7IH0pOwog ICAgICAgICAgICBpZiAoIWRvYykgY29udGludWU7CgogICAgICAgICAgICAvLyBJbiBQYXBpZXJr b3JiIHZlcnNjaGllYmVuCiAgICAgICAgICAgIHZhciB0cmFzaCA9IGF3YWl0IHRoaXMuX2xvYWRU cmFzaCgpOwogICAgICAgICAgICB0cmFzaC5wdXNoKHsKICAgICAgICAgICAgICAgIGRvYzogZG9j LAogICAgICAgICAgICAgICAgZGVsZXRlZEJ5OiBud0tlbm51bmcudHJpbSgpLAogICAgICAgICAg ICAgICAgZGVsZXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksCiAgICAgICAgICAgICAg ICBleHBpcmVzQXQ6IG5ldyBEYXRlKERhdGUubm93KCkgKyAyOCAqIDI0ICogNjAgKiA2MCAqIDEw MDApLnRvSVNPU3RyaW5nKCkKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGF3YWl0IHRoaXMu X3NhdmVUcmFzaCh0cmFzaCk7CgogICAgICAgICAgICAvLyBBdWRpdC1Mb2cKICAgICAgICAgICAg YXdhaXQgdGhpcy5fYXBwZW5kRGVsZXRlTG9nKHsKICAgICAgICAgICAgICAgIGRvY0lkOiBkb2Mu aWQsCiAgICAgICAgICAgICAgICB0aXRlbDogZG9jLnRpdGVsLAogICAgICAgICAgICAgICAga2F0 ZWdvcmllOiBkb2Mua2F0ZWdvcmllLAogICAgICAgICAgICAgICAgZGVsZXRlZEJ5OiBud0tlbm51 bmcudHJpbSgpLAogICAgICAgICAgICAgICAgZGVsZXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3Ry aW5nKCkKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBEYXRlaSBsb2VzY2hlbiArIE1l ZGllbi1PcmRuZXIKICAgICAgICAgICAgdmFyIHBhdGggPSBEcml2ZUZTLmZpbGVUaW1lc3RhbXBz W2RvY0lkXSA/IERyaXZlRlMuZmlsZVRpbWVzdGFtcHNbZG9jSWRdLnBhdGggOiBudWxsOwogICAg ICAgICAgICBpZiAocGF0aCkgYXdhaXQgRHJpdmVGUy5kZWxldGVGaWxlKHBhdGgpOwoKICAgICAg ICAgICAgLy8gTWVkaWVuLU9yZG5lciB2ZXJzY2hpZWJlbiAoU2VydmVyLU1vZHVzKQogICAgICAg ICAgICBpZiAoRHJpdmVGUy5tb2RlID09PSAnc2VydmVyJykgewogICAgICAgICAgICAgICAgdHJ5 IHsKICAgICAgICAgICAgICAgICAgICAvLyBNZWRpZW4gYmxlaWJlbiBpbSBtZWRpYS8tT3JkbmVy IGVyaGFsdGVuIChQYXBpZXJrb3JiLVdpZWRlcmhlcnN0ZWxsdW5nKQogICAgICAgICAgICAgICAg fSBjYXRjaChlKSB7fQogICAgICAgICAgICB9CgogICAgICAgICAgICBEcml2ZUZTLmRvY3VtZW50 cyA9IERyaXZlRlMuZG9jdW1lbnRzLmZpbHRlcihmdW5jdGlvbihkKSB7IHJldHVybiBkLmlkICE9 PSBkb2NJZDsgfSk7CiAgICAgICAgICAgIGRlbGV0ZWQrKzsKICAgICAgICB9CgogICAgICAgIGF3 YWl0IERyaXZlRlMudXBkYXRlSW5kZXgoKTsKICAgICAgICBzaG93VG9hc3QoZGVsZXRlZCArICcg QXJ0aWtlbCBpbiBkZW4gUGFwaWVya29yYiB2ZXJzY2hvYmVuJywgJ3N1Y2Nlc3MnKTsKICAgICAg ICB0aGlzLl90YWJsZVNlbGVjdGVkID0gW107CiAgICAgICAgdGhpcy5yZW5kZXIoKTsKICAgICAg ICB0aGlzLnJlbmRlclRhYmxlVmlldygpOwogICAgfSwKCiAgICBzaG93SG9tZSgpIHsKICAgICAg ICB0aGlzLnNlbGVjdGVkRG9jSWQgPSBudWxsOwogICAgICAgIC8vIFN0YXJ0c2VpdGUgd2llZGVy aGVyc3RlbGxlbgogICAgICAgIGlmICh0aGlzLl93ZWxjb21lSFRNTCkgewogICAgICAgICAgICBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnREZXRhaWwnKS5pbm5lckhUTUwgPSB0aGlz Ll93ZWxjb21lSFRNTDsKICAgICAgICB9CiAgICAgICAgLy8gQWt0aXZlcyBFbGVtZW50IGluIGRl ciBMaXN0ZSBhYndhZWhsZW4KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZG9j dW1lbnQtaXRlbS5hY3RpdmUnKS5mb3JFYWNoKGZ1bmN0aW9uKGVsKSB7IGVsLmNsYXNzTGlzdC5y ZW1vdmUoJ2FjdGl2ZScpOyB9KTsKICAgIH0sCgogICAgX2RpZmZWaXNpYmxlOiBmYWxzZSwKCiAg ICB0b2dnbGVEaWZmKGRvY0lkKSB7CiAgICAgICAgdmFyIGRvYyA9IERyaXZlRlMuZG9jdW1lbnRz LmZpbmQoZnVuY3Rpb24oZCl7IHJldHVybiBkLmlkID09PSBkb2NJZDsgfSk7CiAgICAgICAgaWYg KCFkb2MpIHJldHVybjsKICAgICAgICAvLyBWZXJnbGVpY2hzYmFzaXM6IGxldHp0ZSBSZXZpc2lv biAocGVyc2lzdGllcnQpIG9kZXIgX3ByZXZpb3VzSW5oYWx0IChMZWdhY3kpCiAgICAgICAgdmFy IHByZXZJbmhhbHQgPSBkb2MuX3ByZXZpb3VzSW5oYWx0OwogICAgICAgIGlmICghcHJldkluaGFs dCAmJiBkb2MucmV2aXNpb25zICYmIGRvYy5yZXZpc2lvbnMubGVuZ3RoID4gMCkgewogICAgICAg ICAgICBwcmV2SW5oYWx0ID0gZG9jLnJldmlzaW9uc1tkb2MucmV2aXNpb25zLmxlbmd0aCAtIDFd LmluaGFsdDsKICAgICAgICB9CiAgICAgICAgaWYgKCFwcmV2SW5oYWx0KSByZXR1cm47CgogICAg ICAgIHZhciBjb250ZW50RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGV0YWlsQ29udGVu dCcpOwogICAgICAgIHZhciBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuRGlmZicp OwogICAgICAgIGlmICghY29udGVudEVsKSByZXR1cm47CgogICAgICAgIGlmICh0aGlzLl9kaWZm VmlzaWJsZSkgewogICAgICAgICAgICAvLyBadXJ1ZWNrIHp1ciBub3JtYWxlbiBBbnNpY2h0CiAg ICAgICAgICAgIGNvbnRlbnRFbC5pbm5lckhUTUwgPSBEcml2ZVBvcnRhbC5zYW5pdGl6ZUhUTUwo ZG9jLmluaGFsdCk7CiAgICAgICAgICAgIGlmIChidG4pIGJ0bi50ZXh0Q29udGVudCA9ICfDhG5k ZXJ1bmdlbiBhbnplaWdlbic7CiAgICAgICAgICAgIHRoaXMuX2RpZmZWaXNpYmxlID0gZmFsc2U7 CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gRGlmZiBiZXJlY2huZW4gdW5kIGFuemVp Z2VuCiAgICAgICAgICAgIHZhciBkaWZmSHRtbCA9IHRoaXMuX2NvbXB1dGVEaWZmKHByZXZJbmhh bHQsIGRvYy5pbmhhbHQgfHwgJycpOwogICAgICAgICAgICBjb250ZW50RWwuaW5uZXJIVE1MID0K ICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJkaWZmLWxlZ2VuZCI+JyArCiAgICAgICAgICAg ICAgICAgICAgJzxzcGFuPjxzcGFuIGNsYXNzPSJkaWZmLWFkZGVkIj5CZWlzcGllbDwvc3Bhbj4g SGluenVnZWbDvGd0PC9zcGFuPicgKwogICAgICAgICAgICAgICAgICAgICc8c3Bhbj48c3BhbiBj bGFzcz0iZGlmZi1yZW1vdmVkIj5CZWlzcGllbDwvc3Bhbj4gRW50ZmVybnQ8L3NwYW4+JyArCiAg ICAgICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICBkaWZmSHRtbDsKICAgICAg ICAgICAgaWYgKGJ0bikgYnRuLnRleHRDb250ZW50ID0gJ09yaWdpbmFsYW5zaWNodCc7CiAgICAg ICAgICAgIHRoaXMuX2RpZmZWaXNpYmxlID0gdHJ1ZTsKICAgICAgICB9CiAgICB9LAoKICAgIF9j b21wdXRlRGlmZihvbGRIdG1sLCBuZXdIdG1sKSB7CiAgICAgICAgLy8gSFRNTCBpbiBXb2VydGVy IHplcmxlZ2VuIChUYWdzIGFscyBFaW5oZWl0IGJlaGFsdGVuKQogICAgICAgIGZ1bmN0aW9uIHRv a2VuaXplKGh0bWwpIHsKICAgICAgICAgICAgdmFyIHRva2VucyA9IFtdOwogICAgICAgICAgICB2 YXIgcmUgPSAvPFtePl0rPnxbXlxzPF0rfFxzKy9nOwogICAgICAgICAgICB2YXIgbTsKICAgICAg ICAgICAgd2hpbGUgKChtID0gcmUuZXhlYyhodG1sKSkgIT09IG51bGwpIHsKICAgICAgICAgICAg ICAgIHRva2Vucy5wdXNoKG1bMF0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0 b2tlbnM7CiAgICAgICAgfQoKICAgICAgICB2YXIgb2xkVG9rZW5zID0gdG9rZW5pemUob2xkSHRt bCk7CiAgICAgICAgdmFyIG5ld1Rva2VucyA9IHRva2VuaXplKG5ld0h0bWwpOwoKICAgICAgICAv LyBMQ1MgKExvbmdlc3QgQ29tbW9uIFN1YnNlcXVlbmNlKSBiZXJlY2huZW4KICAgICAgICB2YXIg biA9IG9sZFRva2Vucy5sZW5ndGgsIG0gPSBuZXdUb2tlbnMubGVuZ3RoOwoKICAgICAgICAvLyBG dWVyIHNlaHIgZ3Jvc3NlIERva3VtZW50ZTogdmVyZWluZmFjaHRlciBBbnNhdHogbWl0IGJlZ3Jl bnp0ZXIgTWF0cml4CiAgICAgICAgaWYgKG4gKiBtID4gMjAwMDAwMCkgewogICAgICAgICAgICAv LyBGYWxsYmFjazogWmVpbGVud2Vpc2VyIFZlcmdsZWljaAogICAgICAgICAgICByZXR1cm4gdGhp cy5fY29tcHV0ZUxpbmVEaWZmKG9sZEh0bWwsIG5ld0h0bWwpOwogICAgICAgIH0KCiAgICAgICAg dmFyIGRwID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbjsgaSsrKSB7CiAgICAg ICAgICAgIGRwW2ldID0gbmV3IFVpbnQxNkFycmF5KG0gKyAxKTsKICAgICAgICB9CgogICAgICAg IGZvciAodmFyIGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICBmb3IgKHZhciBqID0g MTsgaiA8PSBtOyBqKyspIHsKICAgICAgICAgICAgICAgIGlmIChvbGRUb2tlbnNbaS0xXSA9PT0g bmV3VG9rZW5zW2otMV0pIHsKICAgICAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IGRwW2ktMV1b ai0xXSArIDE7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGRw W2ldW2pdID0gTWF0aC5tYXgoZHBbaS0xXVtqXSwgZHBbaV1bai0xXSk7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEJhY2t0cmFjazogRGlmZi1T ZXF1ZW56IGVyc3RlbGxlbgogICAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgICB2YXIgaSA9 IG4sIGogPSBtOwogICAgICAgIHdoaWxlIChpID4gMCB8fCBqID4gMCkgewogICAgICAgICAgICBp ZiAoaSA+IDAgJiYgaiA+IDAgJiYgb2xkVG9rZW5zW2ktMV0gPT09IG5ld1Rva2Vuc1tqLTFdKSB7 CiAgICAgICAgICAgICAgICByZXN1bHQudW5zaGlmdCh7IHR5cGU6ICdzYW1lJywgdGV4dDogb2xk VG9rZW5zW2ktMV0gfSk7CiAgICAgICAgICAgICAgICBpLS07IGotLTsKICAgICAgICAgICAgfSBl bHNlIGlmIChqID4gMCAmJiAoaSA9PT0gMCB8fCBkcFtpXVtqLTFdID49IGRwW2ktMV1bal0pKSB7 CiAgICAgICAgICAgICAgICByZXN1bHQudW5zaGlmdCh7IHR5cGU6ICdhZGQnLCB0ZXh0OiBuZXdU b2tlbnNbai0xXSB9KTsKICAgICAgICAgICAgICAgIGotLTsKICAgICAgICAgICAgfSBlbHNlIHsK ICAgICAgICAgICAgICAgIHJlc3VsdC51bnNoaWZ0KHsgdHlwZTogJ2RlbCcsIHRleHQ6IG9sZFRv a2Vuc1tpLTFdIH0pOwogICAgICAgICAgICAgICAgaS0tOwogICAgICAgICAgICB9CiAgICAgICAg fQoKICAgICAgICAvLyBFcmdlYm5pcyBhbHMgSFRNTCByZW5kZXJuCiAgICAgICAgdmFyIGh0bWwg PSAnJzsKICAgICAgICB2YXIgaW5BZGQgPSBmYWxzZSwgaW5EZWwgPSBmYWxzZTsKCiAgICAgICAg Zm9yICh2YXIgayA9IDA7IGsgPCByZXN1bHQubGVuZ3RoOyBrKyspIHsKICAgICAgICAgICAgdmFy IHIgPSByZXN1bHRba107CiAgICAgICAgICAgIHZhciBpc1RhZyA9IHIudGV4dC5jaGFyQXQoMCkg PT09ICc8JzsKCiAgICAgICAgICAgIGlmIChyLnR5cGUgPT09ICdzYW1lJykgewogICAgICAgICAg ICAgICAgaWYgKGluQWRkKSB7IGh0bWwgKz0gJzwvc3Bhbj4nOyBpbkFkZCA9IGZhbHNlOyB9CiAg ICAgICAgICAgICAgICBpZiAoaW5EZWwpIHsgaHRtbCArPSAnPC9zcGFuPic7IGluRGVsID0gZmFs c2U7IH0KICAgICAgICAgICAgICAgIGh0bWwgKz0gci50ZXh0OwogICAgICAgICAgICB9IGVsc2Ug aWYgKHIudHlwZSA9PT0gJ2FkZCcpIHsKICAgICAgICAgICAgICAgIGlmIChpbkRlbCkgeyBodG1s ICs9ICc8L3NwYW4+JzsgaW5EZWwgPSBmYWxzZTsgfQogICAgICAgICAgICAgICAgaWYgKGlzVGFn KSB7IGh0bWwgKz0gci50ZXh0OyBjb250aW51ZTsgfQogICAgICAgICAgICAgICAgaWYgKCFpbkFk ZCkgeyBodG1sICs9ICc8c3BhbiBjbGFzcz0iZGlmZi1hZGRlZCI+JzsgaW5BZGQgPSB0cnVlOyB9 CiAgICAgICAgICAgICAgICBodG1sICs9IHIudGV4dDsKICAgICAgICAgICAgfSBlbHNlIGlmIChy LnR5cGUgPT09ICdkZWwnKSB7CiAgICAgICAgICAgICAgICBpZiAoaW5BZGQpIHsgaHRtbCArPSAn PC9zcGFuPic7IGluQWRkID0gZmFsc2U7IH0KICAgICAgICAgICAgICAgIGlmIChpc1RhZykgY29u dGludWU7IC8vIEVudGZlcm50ZSBUYWdzIG5pY2h0IGFuemVpZ2VuCiAgICAgICAgICAgICAgICBp ZiAoIWluRGVsKSB7IGh0bWwgKz0gJzxzcGFuIGNsYXNzPSJkaWZmLXJlbW92ZWQiPic7IGluRGVs ID0gdHJ1ZTsgfQogICAgICAgICAgICAgICAgaHRtbCArPSByLnRleHQ7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgICAgaWYgKGluQWRkKSBodG1sICs9ICc8L3NwYW4+JzsKICAgICAgICBp ZiAoaW5EZWwpIGh0bWwgKz0gJzwvc3Bhbj4nOwoKICAgICAgICByZXR1cm4gaHRtbDsKICAgIH0s CgogICAgX2NvbXB1dGVMaW5lRGlmZihvbGRIdG1sLCBuZXdIdG1sKSB7CiAgICAgICAgLy8gRWlu ZmFjaGVyIEZhbGxiYWNrIGZ1ZXIgc2VociBncm9zc2UgRG9rdW1lbnRlOiBBYnNhdHp3ZWlzZXIg VmVyZ2xlaWNoCiAgICAgICAgZnVuY3Rpb24gZ2V0UGFyYXMoaHRtbCkgewogICAgICAgICAgICB2 YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgIGRpdi5p bm5lckhUTUwgPSBodG1sOwogICAgICAgICAgICB2YXIgYmxvY2tzID0gW107CiAgICAgICAgICAg IGRpdi5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgYmxv Y2tzLnB1c2gobi5vdXRlckhUTUwgfHwgbi50ZXh0Q29udGVudCk7CiAgICAgICAgICAgIH0pOwog ICAgICAgICAgICByZXR1cm4gYmxvY2tzOwogICAgICAgIH0KCiAgICAgICAgdmFyIG9sZFBhcmFz ID0gZ2V0UGFyYXMob2xkSHRtbCk7CiAgICAgICAgdmFyIG5ld1BhcmFzID0gZ2V0UGFyYXMobmV3 SHRtbCk7CiAgICAgICAgdmFyIG9sZFNldCA9IG5ldyBTZXQob2xkUGFyYXMpOwogICAgICAgIHZh ciBuZXdTZXQgPSBuZXcgU2V0KG5ld1BhcmFzKTsKCiAgICAgICAgdmFyIGh0bWwgPSAnJzsKICAg ICAgICBuZXdQYXJhcy5mb3JFYWNoKGZ1bmN0aW9uKHApIHsKICAgICAgICAgICAgaWYgKG9sZFNl dC5oYXMocCkpIHsKICAgICAgICAgICAgICAgIGh0bWwgKz0gcDsKICAgICAgICAgICAgfSBlbHNl IHsKICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImRpZmYtYWRkZWQiIHN0eWxl PSJkaXNwbGF5OmJsb2NrO3BhZGRpbmc6NHB4IDhweDttYXJnaW46NHB4IDA7Ym9yZGVyLXJhZGl1 czo0cHg7Ij4nICsgcCArICc8L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAg ICAgb2xkUGFyYXMuZm9yRWFjaChmdW5jdGlvbihwKSB7CiAgICAgICAgICAgIGlmICghbmV3U2V0 LmhhcyhwKSkgewogICAgICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iZGlmZi1yZW1v dmVkIiBzdHlsZT0iZGlzcGxheTpibG9jaztwYWRkaW5nOjRweCA4cHg7bWFyZ2luOjRweCAwO2Jv cmRlci1yYWRpdXM6NHB4OyI+JyArIHAgKyAnPC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAg IH0pOwoKICAgICAgICByZXR1cm4gaHRtbDsKICAgIH0sCgogICAgLy8gPT09PSBSZXZpc2lvbnNo aXN0b3JpZSA9PT09CiAgICBfcmV2RG9jSWQ6IG51bGwsCiAgICBfcmV2U2VsZWN0ZWRJZHg6IC0x LAogICAgX3Jldk1vZGU6ICdjb250ZW50JywgLy8gJ2NvbnRlbnQnIG9kZXIgJ2RpZmYnCgogICAg b3BlblJldmlzaW9ucyhkb2NJZCkgewogICAgICAgIHZhciBkb2MgPSBEcml2ZUZTLmRvY3VtZW50 cy5maW5kKGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQuaWQgPT09IGRvY0lkOyB9KTsKICAgICAgICBp ZiAoIWRvYykgcmV0dXJuOwogICAgICAgIHRoaXMuX3JldkRvY0lkID0gZG9jSWQ7CiAgICAgICAg dGhpcy5fcmV2U2VsZWN0ZWRJZHggPSAtMTsKICAgICAgICB0aGlzLl9yZXZNb2RlID0gJ2NvbnRl bnQnOwoKICAgICAgICB2YXIgcmV2aXNpb25zID0gZG9jLnJldmlzaW9ucyB8fCBbXTsKICAgICAg ICB2YXIgbGlzdEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JldmlzaW9uTGlzdCcpOwoK ICAgICAgICBpZiAocmV2aXNpb25zLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBzaG93VG9h c3QoJ0tlaW5lIGZydWVoZXJlbiBWZXJzaW9uZW4gdm9yaGFuZGVuJywgJ2luZm8nKTsKICAgICAg ICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gTGlzdGUgYXVmYmF1ZW4gKG5ldWVz dGUgenVlcnN0KQogICAgICAgIHZhciBodG1sID0gJyc7CiAgICAgICAgLy8gQWt0dWVsbGUgVmVy c2lvbiBhbHMgZXJzdGVzIEVsZW1lbnQKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJyZXZp c2lvbi1pdGVtIiBvbmNsaWNrPSJEcml2ZVBvcnRhbC5zZWxlY3RSZXZpc2lvbigtMSkiPicgKwog ICAgICAgICAgICAnPGRpdiBjbGFzcz0icmV2LWxhYmVsIj5Ba3R1ZWxsZSBWZXJzaW9uIDxzcGFu IGNsYXNzPSJyZXYtYmFkZ2UiPkxpdmU8L3NwYW4+PC9kaXY+JyArCiAgICAgICAgICAgICc8ZGl2 IGNsYXNzPSJyZXYtZGF0ZSI+JyArIChkb2MudGl0ZWwgfHwgJ09obmUgVGl0ZWwnKSArICc8L2Rp dj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9InJldi11c2VyIj5TdGF0dXM6ICcgKyBEcml2 ZVBvcnRhbC5lc2NhcGVIVE1MKGRvYy5zdGF0dXMgfHwgJ0VudHd1cmYnKSArICc8L2Rpdj4nICsK ICAgICAgICAnPC9kaXY+JzsKCiAgICAgICAgZm9yICh2YXIgaSA9IHJldmlzaW9ucy5sZW5ndGgg LSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICB2YXIgcmV2ID0gcmV2aXNpb25zW2ldOwog ICAgICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKHJldi5zYXZlZEF0KTsKICAgICAgICAgICAgdmFy IGRhdGVTdHIgPSBkLnRvTG9jYWxlRGF0ZVN0cmluZygnZGUtREUnLCB7IGRheTogJzItZGlnaXQn LCBtb250aDogJzItZGlnaXQnLCB5ZWFyOiAnbnVtZXJpYycgfSk7CiAgICAgICAgICAgIHZhciB0 aW1lU3RyID0gZC50b0xvY2FsZVRpbWVTdHJpbmcoJ2RlLURFJywgeyBob3VyOiAnMi1kaWdpdCcs IG1pbnV0ZTogJzItZGlnaXQnIH0pOwogICAgICAgICAgICB2YXIgcmV2TnVtID0gaSArIDE7CiAg ICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InJldmlzaW9uLWl0ZW0iIG9uY2xpY2s9IkRy aXZlUG9ydGFsLnNlbGVjdFJldmlzaW9uKCcgKyBpICsgJykiPicgKwogICAgICAgICAgICAgICAg JzxkaXYgY2xhc3M9InJldi1sYWJlbCI+VmVyc2lvbiAnICsgcmV2TnVtICsgJyA8c3BhbiBjbGFz cz0icmV2LWJhZGdlIj52JyArIHJldk51bSArICc8L3NwYW4+PC9kaXY+JyArCiAgICAgICAgICAg ICAgICAnPGRpdiBjbGFzcz0icmV2LWRhdGUiPicgKyBkYXRlU3RyICsgJyB1bSAnICsgdGltZVN0 ciArICc8L2Rpdj4nICsKICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJyZXYtdXNlciI+dm9u ICcgKyBEcml2ZVBvcnRhbC5lc2NhcGVIVE1MKHJldi5zYXZlZEJ5IHx8ICdVbmJla2FubnQnKSAr CiAgICAgICAgICAgICAgICAgICAgKHJldi5zdGF0dXMgPyAnICZtaWRkb3Q7ICcgKyBEcml2ZVBv cnRhbC5lc2NhcGVIVE1MKHJldi5zdGF0dXMpIDogJycpICsgJzwvZGl2PicgKwogICAgICAgICAg ICAnPC9kaXY+JzsKICAgICAgICB9CiAgICAgICAgbGlzdEVsLmlubmVySFRNTCA9IGh0bWw7Cgog ICAgICAgIC8vIFRvb2xiYXIgdW5kIENvbnRlbnQgenVydWVja3NldHplbgogICAgICAgIGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKCdyZXZpc2lvblRvb2xiYXInKS5pbm5lckhUTUwgPSAnJzsKICAg ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmV2aXNpb25Db250ZW50JykuaW5uZXJIVE1M ID0KICAgICAgICAgICAgJzxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigt LXRleHQtbXV0ZWQpO21hcmdpbi10b3A6NjBweDsiPlZlcnNpb24gYXVzIGRlciBMaXN0ZSBhdXN3 YWVobGVuPC9kaXY+JzsKCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JldmlzaW9u TW9kYWwnKS5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7CiAgICB9LAoKICAgIGNsb3NlUmV2aXNpb25z KCkgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXZpc2lvbk1vZGFsJykuY2xh c3NMaXN0LnJlbW92ZSgnb3BlbicpOwogICAgICAgIHRoaXMuX3JldkRvY0lkID0gbnVsbDsKICAg IH0sCgogICAgc2VsZWN0UmV2aXNpb24oaWR4KSB7CiAgICAgICAgdmFyIGRvYyA9IERyaXZlRlMu ZG9jdW1lbnRzLmZpbmQoZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5pZCA9PT0gRHJpdmVQb3J0YWwu X3JldkRvY0lkOyB9KTsKICAgICAgICBpZiAoIWRvYykgcmV0dXJuOwogICAgICAgIHRoaXMuX3Jl dlNlbGVjdGVkSWR4ID0gaWR4OwogICAgICAgIHRoaXMuX3Jldk1vZGUgPSAnY29udGVudCc7Cgog ICAgICAgIC8vIEFrdGl2ZSBNYXJraWVydW5nIHNldHplbgogICAgICAgIHZhciBpdGVtcyA9IGRv Y3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNyZXZpc2lvbkxpc3QgLnJldmlzaW9uLWl0ZW0nKTsK ICAgICAgICB2YXIgcmV2aXNpb25zID0gZG9jLnJldmlzaW9ucyB8fCBbXTsKICAgICAgICAvLyBp ZHg9LTEgaXN0ICJBa3R1ZWxsZSBWZXJzaW9uIiAoZXJzdGVyIEVpbnRyYWcpLCBzb25zdCB1bWdl a2VocnQgd2VpbCBMaXN0ZSBpbnZlcnRpZXJ0CiAgICAgICAgdmFyIGFjdGl2ZVBvcyA9IChpZHgg PT09IC0xKSA/IDAgOiAocmV2aXNpb25zLmxlbmd0aCAtIGlkeCk7CiAgICAgICAgaXRlbXMuZm9y RWFjaChmdW5jdGlvbihlbCwgaSkgewogICAgICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKCdh Y3RpdmUnLCBpID09PSBhY3RpdmVQb3MpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBUb29sYmFy CiAgICAgICAgdmFyIHJldiA9IChpZHggPT09IC0xKSA/IG51bGwgOiByZXZpc2lvbnNbaWR4XTsK ICAgICAgICB2YXIgdG9vbGJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXZpc2lvblRv b2xiYXInKTsKICAgICAgICB2YXIgbGFiZWwgPSAnJzsKICAgICAgICBpZiAoaWR4ID09PSAtMSkg ewogICAgICAgICAgICBsYWJlbCA9ICdBa3R1ZWxsZSBWZXJzaW9uJzsKICAgICAgICB9IGVsc2Ug ewogICAgICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKHJldi5zYXZlZEF0KTsKICAgICAgICAgICAg bGFiZWwgPSAnVmVyc2lvbiAnICsgKGlkeCArIDEpICsgJyAmbWlkZG90OyAnICsKICAgICAgICAg ICAgICAgIGQudG9Mb2NhbGVEYXRlU3RyaW5nKCdkZS1ERScsIHsgZGF5OiAnMi1kaWdpdCcsIG1v bnRoOiAnMi1kaWdpdCcsIHllYXI6ICdudW1lcmljJyB9KSArICcgJyArCiAgICAgICAgICAgICAg ICBkLnRvTG9jYWxlVGltZVN0cmluZygnZGUtREUnLCB7IGhvdXI6ICcyLWRpZ2l0JywgbWludXRl OiAnMi1kaWdpdCcsIHNlY29uZDogJzItZGlnaXQnIH0pICsKICAgICAgICAgICAgICAgICcgJm1p ZGRvdDsgJyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwocmV2LnNhdmVkQnkgfHwgJ1VuYmVrYW5u dCcpOwogICAgICAgIH0KCiAgICAgICAgdG9vbGJhci5pbm5lckhUTUwgPQogICAgICAgICAgICAn PGJ1dHRvbiBjbGFzcz0iYWN0aXZlIiBpZD0icmV2QnRuQ29udGVudCIgb25jbGljaz0iRHJpdmVQ b3J0YWwuc2hvd1JldkNvbnRlbnQoKSI+SW5oYWx0PC9idXR0b24+JyArCiAgICAgICAgICAgICc8 YnV0dG9uIGlkPSJyZXZCdG5EaWZmIiBvbmNsaWNrPSJEcml2ZVBvcnRhbC5zaG93UmV2RGlmZigp Ij5EaWZmIHp1ciBha3R1ZWxsZW4gVmVyc2lvbjwvYnV0dG9uPicgKwogICAgICAgICAgICAoaWR4 ID49IDAgPyAnPGJ1dHRvbiBpZD0icmV2QnRuUmVzdG9yZSIgb25jbGljaz0iRHJpdmVQb3J0YWwu cmVzdG9yZVJldmlzaW9uKCkiPkRpZXNlIFZlcnNpb24gd2llZGVyaGVyc3RlbGxlbjwvYnV0dG9u PicgOiAnJykgKwogICAgICAgICAgICAnPHNwYW4gY2xhc3M9InJldi1pbmZvIj4nICsgbGFiZWwg KyAnPC9zcGFuPic7CgogICAgICAgIHRoaXMuc2hvd1JldkNvbnRlbnQoKTsKICAgIH0sCgogICAg c2hvd1JldkNvbnRlbnQoKSB7CiAgICAgICAgdmFyIGRvYyA9IERyaXZlRlMuZG9jdW1lbnRzLmZp bmQoZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5pZCA9PT0gRHJpdmVQb3J0YWwuX3JldkRvY0lkOyB9 KTsKICAgICAgICBpZiAoIWRvYykgcmV0dXJuOwogICAgICAgIHRoaXMuX3Jldk1vZGUgPSAnY29u dGVudCc7CgogICAgICAgIHZhciBjb250ZW50RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn cmV2aXNpb25Db250ZW50Jyk7CiAgICAgICAgdmFyIHJldiA9ICh0aGlzLl9yZXZTZWxlY3RlZElk eCA9PT0gLTEpID8gbnVsbCA6IChkb2MucmV2aXNpb25zIHx8IFtdKVt0aGlzLl9yZXZTZWxlY3Rl ZElkeF07CiAgICAgICAgdmFyIGluaGFsdCA9IHJldiA/IHJldi5pbmhhbHQgOiBkb2MuaW5oYWx0 OwogICAgICAgIHZhciB0aXRlbCA9IHJldiA/IHJldi50aXRlbCA6IGRvYy50aXRlbDsKCiAgICAg ICAgY29udGVudEVsLmlubmVySFRNTCA9CiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNp emU6MThweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTttYXJnaW4t Ym90dG9tOjE2cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZh cigtLWJvcmRlci1saWdodCk7Ij4nICsKICAgICAgICAgICAgICAgIERyaXZlUG9ydGFsLmVzY2Fw ZUhUTUwodGl0ZWwgfHwgJ09obmUgVGl0ZWwnKSArCiAgICAgICAgICAgICc8L2Rpdj4nICsKICAg ICAgICAgICAgKGluaGFsdCB8fCAnPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtbXV0ZWQp OyI+S2VpbiBJbmhhbHQ8L3NwYW4+Jyk7CgogICAgICAgIC8vIEJ1dHRvbi1TdGF0dXMKICAgICAg ICB2YXIgYnRuQyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXZCdG5Db250ZW50Jyk7CiAg ICAgICAgdmFyIGJ0bkQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmV2QnRuRGlmZicpOwog ICAgICAgIGlmIChidG5DKSBidG5DLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICAgIGlm IChidG5EKSBidG5ELmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgfSwKCiAgICBzaG93 UmV2RGlmZigpIHsKICAgICAgICB2YXIgZG9jID0gRHJpdmVGUy5kb2N1bWVudHMuZmluZChmdW5j dGlvbihkKSB7IHJldHVybiBkLmlkID09PSBEcml2ZVBvcnRhbC5fcmV2RG9jSWQ7IH0pOwogICAg ICAgIGlmICghZG9jKSByZXR1cm47CiAgICAgICAgdGhpcy5fcmV2TW9kZSA9ICdkaWZmJzsKCiAg ICAgICAgdmFyIGNvbnRlbnRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXZpc2lvbkNv bnRlbnQnKTsKICAgICAgICB2YXIgcmV2ID0gKHRoaXMuX3JldlNlbGVjdGVkSWR4ID09PSAtMSkg PyBudWxsIDogKGRvYy5yZXZpc2lvbnMgfHwgW10pW3RoaXMuX3JldlNlbGVjdGVkSWR4XTsKCiAg ICAgICAgaWYgKCFyZXYgfHwgdGhpcy5fcmV2U2VsZWN0ZWRJZHggPT09IC0xKSB7CiAgICAgICAg ICAgIGNvbnRlbnRFbC5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7 Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCk7bWFyZ2luLXRvcDo2MHB4OyI+RGlmZiBudXIgZsO8ciBm csO8aGVyZSBWZXJzaW9uZW4gdmVyZnVlZ2JhcjwvZGl2Pic7CiAgICAgICAgICAgIHJldHVybjsK ICAgICAgICB9CgogICAgICAgIHZhciBvbGRJbmhhbHQgPSByZXYuaW5oYWx0IHx8ICcnOwogICAg ICAgIHZhciBuZXdJbmhhbHQgPSBkb2MuaW5oYWx0IHx8ICcnOwogICAgICAgIHZhciBkaWZmSHRt bCA9IHRoaXMuX2NvbXB1dGVEaWZmKG9sZEluaGFsdCwgbmV3SW5oYWx0KTsKCiAgICAgICAgdmFy IHRpdGVsQ2hhbmdlZCA9IHJldi50aXRlbCAhPT0gZG9jLnRpdGVsOwoKICAgICAgICBjb250ZW50 RWwuaW5uZXJIVE1MID0KICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImRpZmYtbGVnZW5kIj4nICsK ICAgICAgICAgICAgICAgICc8c3Bhbj48c3BhbiBjbGFzcz0iZGlmZi1hZGRlZCI+QmVpc3BpZWw8 L3NwYW4+IEhpbnp1Z2VmdWVndDwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICc8c3Bhbj48c3Bh biBjbGFzcz0iZGlmZi1yZW1vdmVkIj5CZWlzcGllbDwvc3Bhbj4gRW50ZmVybnQ8L3NwYW4+JyAr CiAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgKHRpdGVsQ2hhbmdlZCA/CiAgICAg ICAgICAgICAgICAnPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmc6OHB4IDEy cHg7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkLWFsdCk7Zm9udC1z aXplOjEzcHg7Ij4nICsKICAgICAgICAgICAgICAgICAgICAnVGl0ZWw6IDxzcGFuIGNsYXNzPSJk aWZmLXJlbW92ZWQiPicgKyBEcml2ZVBvcnRhbC5lc2NhcGVIVE1MKHJldi50aXRlbCB8fCAnJykg KyAnPC9zcGFuPiAmcmFycjsgJyArCiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJk aWZmLWFkZGVkIj4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChkb2MudGl0ZWwgfHwgJycpICsg Jzwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICc8L2Rpdj4nIDogJycpICsKICAgICAgICAgICAg ZGlmZkh0bWw7CgogICAgICAgIC8vIEJ1dHRvbi1TdGF0dXMKICAgICAgICB2YXIgYnRuQyA9IGRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXZCdG5Db250ZW50Jyk7CiAgICAgICAgdmFyIGJ0bkQg PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmV2QnRuRGlmZicpOwogICAgICAgIGlmIChidG5D KSBidG5DLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgIGlmIChidG5EKSBidG5E LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgfSwKCiAgICBhc3luYyByZXN0b3JlUmV2aXNp b24oKSB7CiAgICAgICAgdmFyIGRvYyA9IERyaXZlRlMuZG9jdW1lbnRzLmZpbmQoZnVuY3Rpb24o ZCkgeyByZXR1cm4gZC5pZCA9PT0gRHJpdmVQb3J0YWwuX3JldkRvY0lkOyB9KTsKICAgICAgICBp ZiAoIWRvYyB8fCB0aGlzLl9yZXZTZWxlY3RlZElkeCA8IDApIHJldHVybjsKICAgICAgICB2YXIg cmV2ID0gKGRvYy5yZXZpc2lvbnMgfHwgW10pW3RoaXMuX3JldlNlbGVjdGVkSWR4XTsKICAgICAg ICBpZiAoIXJldikgcmV0dXJuOwoKICAgICAgICBpZiAoIWNvbmZpcm0oJ1ZlcnNpb24gJyArICh0 aGlzLl9yZXZTZWxlY3RlZElkeCArIDEpICsgJyB3aWVkZXJoZXJzdGVsbGVuP1xuXG5EZXIgYWt0 dWVsbGUgSW5oYWx0IHdpcmQgYWxzIG5ldWUgUmV2aXNpb24gZ2VzaWNoZXJ0LicpKSByZXR1cm47 CgogICAgICAgIHZhciB1c2VybmFtZSA9IChEcml2ZUZTLmVudmlyb24gJiYgRHJpdmVGUy5lbnZp cm9uLnVzZXJuYW1lKSA/IERyaXZlRlMuZW52aXJvbi51c2VybmFtZSA6ICdVbmJla2FubnQnOwoK ICAgICAgICAvLyBBa3R1ZWxsZW4gU3RhbmQgYWxzIFJldmlzaW9uIHNpY2hlcm4KICAgICAgICBp ZiAoIWRvYy5yZXZpc2lvbnMpIGRvYy5yZXZpc2lvbnMgPSBbXTsKICAgICAgICBkb2MucmV2aXNp b25zLnB1c2goewogICAgICAgICAgICBpbmhhbHQ6IGRvYy5pbmhhbHQsCiAgICAgICAgICAgIHRp dGVsOiBkb2MudGl0ZWwsCiAgICAgICAgICAgIHN0YXR1czogZG9jLnN0YXR1cywKICAgICAgICAg ICAgc2F2ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLAogICAgICAgICAgICBzYXZlZEJ5 OiB1c2VybmFtZQogICAgICAgIH0pOwogICAgICAgIHdoaWxlIChkb2MucmV2aXNpb25zLmxlbmd0 aCA+IDYpIHsKICAgICAgICAgICAgZG9jLnJldmlzaW9ucy5zaGlmdCgpOwogICAgICAgIH0KCiAg ICAgICAgLy8gUmV2aXNpb24gd2llZGVyaGVyc3RlbGxlbgogICAgICAgIGRvYy5pbmhhbHQgPSBy ZXYuaW5oYWx0OwogICAgICAgIGRvYy50aXRlbCA9IHJldi50aXRlbDsKCiAgICAgICAgdHJ5IHsK ICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IERyaXZlRlMuc2F2ZURvY3VtZW50KGRvYyk7 CiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgIHNob3dU b2FzdCgnVmVyc2lvbiAnICsgKHRoaXMuX3JldlNlbGVjdGVkSWR4ICsgMSkgKyAnIHdpZWRlcmhl cmdlc3RlbGx0JywgJ3N1Y2Nlc3MnKTsKICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VSZXZpc2lv bnMoKTsKICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7CiAgICAgICAgICAgICAgICBhd2Fp dCB0aGlzLnNlbGVjdERvY3VtZW50KGRvYy5pZCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICAgICAgICBzaG93VG9hc3QoJ0ZlaGxlcjogJyArIHJlc3VsdCwgJ2Vycm9yJyk7CiAgICAg ICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIHNob3dUb2FzdCgnRmVo bGVyOiAnICsgZS5tZXNzYWdlLCAnZXJyb3InKTsKICAgICAgICB9CiAgICB9LAoKICAgIGFzeW5j IHNlbGVjdERvY3VtZW50KGRvY0lkKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZERvY0lkID0gZG9j SWQ7CiAgICAgICAgdGhpcy5fZGlmZlZpc2libGUgPSBmYWxzZTsKCiAgICAgICAgLy8gTGFkZSBh a3R1ZWxsc3RlIFZlcnNpb24gdm9uIERpc2sKICAgICAgICBjb25zdCBkb2MgPSBhd2FpdCBEcml2 ZUZTLmxvYWREb2N1bWVudChkb2NJZCk7CiAgICAgICAgaWYgKCFkb2MpIHsKICAgICAgICAgICAg c2hvd1RvYXN0KCdEb2t1bWVudCBrb25udGUgbmljaHQgZ2VsYWRlbiB3ZXJkZW4nLCAnZXJyb3In KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gSW4tTWVtb3J5IGFr dHVhbGlzaWVyZW4KICAgICAgICBjb25zdCBpZHggPSBEcml2ZUZTLmRvY3VtZW50cy5maW5kSW5k ZXgoZCA9PiBkLmlkID09PSBkb2NJZCk7CiAgICAgICAgaWYgKGlkeCA+PSAwKSBEcml2ZUZTLmRv Y3VtZW50c1tpZHhdID0gZG9jOwoKICAgICAgICB0aGlzLnJlbmRlckxpc3QoKTsKICAgICAgICB0 aGlzLnJlbmRlckRldGFpbChkb2MpOwogICAgfSwKCiAgICByZW5kZXJEZXRhaWwoZG9jKSB7CiAg ICAgICAgY29uc3QgZGV0YWlsQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rv Y3VtZW50RGV0YWlsJyk7CiAgICAgICAgY29uc3Qgc3RhdHVzQ29uZmlnID0gRHJpdmVGUy5jb25m aWcuc3RhdHVzIHx8IHt9OwogICAgICAgIGNvbnN0IGNmZyA9IHN0YXR1c0NvbmZpZ1tkb2Muc3Rh dHVzXSB8fCB7IGNvbG9yOiAnI2VlZScsIHRleHRDb2xvcjogJyMzMzMnLCBpY29uOiAnJywgbGFi ZWw6IGRvYy5zdGF0dXMgfTsKCiAgICAgICAgbGV0IG1lZGlhSFRNTCA9ICcnOwogICAgICAgIGlm IChkb2MubWVkaWFzICYmIGRvYy5tZWRpYXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAvLyBP bmx5IHNob3cgYXR0YWNobWVudHMgc2VjdGlvbiAoaW5saW5lIG1lZGlhIGlzIHJlbmRlcmVkIGlu IGRvYy5pbmhhbHQpCiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gZG9jLm1lZGlhcy5m aWx0ZXIobSA9PiAhbS5kaXNwbGF5TW9kZSB8fCBtLmRpc3BsYXlNb2RlID09PSAnYXR0YWNobWVu dCcpOwogICAgICAgICAgICBjb25zdCBpbmxpbmVNZWRpYSA9IGRvYy5tZWRpYXMuZmlsdGVyKG0g PT4gbS5kaXNwbGF5TW9kZSAmJiBtLmRpc3BsYXlNb2RlICE9PSAnYXR0YWNobWVudCcpOwoKICAg ICAgICAgICAgbGV0IHNlY3Rpb25zID0gJyc7CgogICAgICAgICAgICBpZiAoYXR0YWNobWVudHMu bGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgc2VjdGlvbnMgKz0gJzxoMyBzdHlsZT0iZm9u dC1zaXplOjE2cHg7IGZvbnQtd2VpZ2h0OjYwMDsgY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTsg bWFyZ2luLWJvdHRvbToxMnB4OyI+QW5ow6RuZ2UgKCcgKyBhdHRhY2htZW50cy5sZW5ndGggKyAn KTwvaDM+JzsKICAgICAgICAgICAgICAgIHNlY3Rpb25zICs9ICc8ZGl2IHN0eWxlPSJkaXNwbGF5 OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgZ2FwOjhweDsgbWFyZ2luLWJvdHRvbToyMHB4 OyI+JzsKICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLmZvckVhY2gobWVkaWEgPT4gewogICAg ICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBtZWRpYS50eXBlIHx8ICdmaWxlJzsKICAgICAg ICAgICAgICAgICAgICBjb25zdCB0eXBlTGFiZWwgPSB0eXBlLnRvVXBwZXJDYXNlKCk7CiAgICAg ICAgICAgICAgICAgICAgY29uc3Qgc2FmZVVybCA9IHRoaXMuZXNjYXBlQXR0cihtZWRpYS51cmwp OwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHNhZmVUaXRsZSA9IHRoaXMuZXNjYXBlQXR0ciht ZWRpYS50aXRsZSB8fCAnJyk7CgogICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zICs9ICc8ZGl2 IGNsYXNzPSJhdHRhY2htZW50LWl0ZW0iIG9uY2xpY2s9Im9wZW5NZWRpYU1vZGFsKFwnJyArIHNh ZmVVcmwgKyAnXCcsXCcnICsgdHlwZSArICdcJyxcJycgKyBzYWZlVGl0bGUgKyAnXCcpIj4nICsK ICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJkcml2ZS1maWxlLWljb24gJyAr IHR5cGUgKyAnIj4nICsgdHlwZUxhYmVsICsgJzwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICAg ICAgICAgJzxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtaW5mbyI+JyArCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnPGRpdiBjbGFzcz0iYXR0YWNobWVudC10aXRsZSI+JyArIHRoaXMuZXNjYXBl SFRNTChtZWRpYS50aXRsZSB8fCBtZWRpYS51cmwuc3BsaXQoJy8nKS5wb3AoKSkgKyAnPC9kaXY+ JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iYXR0YWNobWVudC1t ZXRhIj4nICsgdGhpcy5lc2NhcGVIVE1MKG1lZGlhLmRlc2NyaXB0aW9uIHx8ICcnKSArICc8L2Rp dj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAgICAg ICAgICAgICAnPGRpdiBjbGFzcz0iYXR0YWNobWVudC1hY3Rpb25zIiBvbmNsaWNrPSJldmVudC5z dG9wUHJvcGFnYXRpb24oKSI+JzsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdw ZGYnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zICs9ICc8YnV0dG9uIG9uY2xp Y2s9IndpbmRvdy5vcGVuKFwnJyArIHNhZmVVcmwgKyAnXCcsXCdfYmxhbmtcJykiPk5ldWVyIFRh YjwvYnV0dG9uPic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHNl Y3Rpb25zICs9ICc8YnV0dG9uIG9uY2xpY2s9Im9wZW5NZWRpYU1vZGFsKFwnJyArIHNhZmVVcmwg KyAnXCcsXCcnICsgdHlwZSArICdcJyxcJycgKyBzYWZlVGl0bGUgKyAnXCcpIj5BbnplaWdlbjwv YnV0dG9uPic7CiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMgKz0gJzwvZGl2PjwvZGl2Pic7 CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHNlY3Rpb25zICs9ICc8L2Rpdj4n OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaW5saW5lTWVkaWEubGVuZ3RoID4gMCkg ewogICAgICAgICAgICAgICAgc2VjdGlvbnMgKz0gJzxoMyBzdHlsZT0iZm9udC1zaXplOjE2cHg7 IGZvbnQtd2VpZ2h0OjYwMDsgY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTsgbWFyZ2luLWJvdHRv bToxMnB4OyI+RWluZ2ViZXR0ZXRlIE1lZGllbiAoJyArIGlubGluZU1lZGlhLmxlbmd0aCArICcp PC9oMz4nOwogICAgICAgICAgICAgICAgc2VjdGlvbnMgKz0gJzxkaXYgc3R5bGU9ImRpc3BsYXk6 ZmxleDsgZmxleC1kaXJlY3Rpb246Y29sdW1uOyBnYXA6OHB4OyI+JzsKICAgICAgICAgICAgICAg IGlubGluZU1lZGlhLmZvckVhY2gobWVkaWEgPT4gewogICAgICAgICAgICAgICAgICAgIGNvbnN0 IHR5cGUgPSBtZWRpYS50eXBlIHx8ICdmaWxlJzsKICAgICAgICAgICAgICAgICAgICBjb25zdCB0 eXBlTGFiZWwgPSB0eXBlLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qg c2FmZVVybCA9IHRoaXMuZXNjYXBlQXR0cihtZWRpYS51cmwpOwogICAgICAgICAgICAgICAgICAg IGNvbnN0IHNhZmVUaXRsZSA9IHRoaXMuZXNjYXBlQXR0cihtZWRpYS50aXRsZSB8fCAnJyk7CiAg ICAgICAgICAgICAgICAgICAgY29uc3QgbW9kZUxhYmVsID0gbWVkaWEuZGlzcGxheU1vZGUgPT09 ICdpbmxpbmUnID8gJ0JpbGQnIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtZWRpYS5kaXNwbGF5TW9kZSA9PT0gJ3BkZi1saW5rJyA/ICdQREYtTGluaycgOgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhLmRpc3BsYXlNb2RlID09PSAncGRm LWlmcmFtZScgPyAnUERGIGVpbmdlYmV0dGV0JyA6IG1lZGlhLmRpc3BsYXlNb2RlOwoKICAgICAg ICAgICAgICAgICAgICBzZWN0aW9ucyArPSAnPGRpdiBjbGFzcz0iYXR0YWNobWVudC1pdGVtIiBv bmNsaWNrPSJvcGVuTWVkaWFNb2RhbChcJycgKyBzYWZlVXJsICsgJ1wnLFwnJyArIHR5cGUgKyAn XCcsXCcnICsgc2FmZVRpdGxlICsgJ1wnKSI+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8 c3BhbiBjbGFzcz0iZHJpdmUtZmlsZS1pY29uICcgKyB0eXBlICsgJyI+JyArIHR5cGVMYWJlbCAr ICc8L3NwYW4+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJhdHRhY2ht ZW50LWluZm8iPicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImF0 dGFjaG1lbnQtdGl0bGUiPicgKyB0aGlzLmVzY2FwZUhUTUwobWVkaWEudGl0bGUgfHwgJycpICsg JzwvZGl2PicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImF0dGFj aG1lbnQtbWV0YSI+JyArIHRoaXMuZXNjYXBlSFRNTChtb2RlTGFiZWwpICsgKG1lZGlhLmFsaWdu bWVudCA/ICcgfCAnICsgbWVkaWEuYWxpZ25tZW50IDogJycpICsgJzwvZGl2PicgKwogICAgICAg ICAgICAgICAgICAgICAgICAnPC9kaXY+PC9kaXY+JzsKICAgICAgICAgICAgICAgIH0pOwogICAg ICAgICAgICAgICAgc2VjdGlvbnMgKz0gJzwvZGl2Pic7CiAgICAgICAgICAgIH0KCiAgICAgICAg ICAgIGlmIChzZWN0aW9ucykgewogICAgICAgICAgICAgICAgbWVkaWFIVE1MID0gJzxkaXYgY2xh c3M9Im1lZGlhLXNlY3Rpb24iPicgKyBzZWN0aW9ucyArICc8L2Rpdj4nOwogICAgICAgICAgICB9 CiAgICAgICAgfQoKICAgICAgICBkZXRhaWxDb250YWluZXIuaW5uZXJIVE1MID0KICAgICAgICAg ICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdl ZW47IGFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7IG1hcmdpbi1ib3R0b206MjBweDsiPicgKwogICAg ICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImRldGFpbC1oZWFkZXIiIHN0eWxlPSJmbGV4OjE7Ij4n ICsKICAgICAgICAgICAgICAgICAgICAnPGgxIGNsYXNzPSJkZXRhaWwtdGl0bGUiPicgKyB0aGlz LmVzY2FwZUhUTUwoZG9jLnRpdGVsKSArICc8L2gxPicgKwogICAgICAgICAgICAgICAgICAgICc8 ZGl2IGNsYXNzPSJkZXRhaWwtbWV0YSI+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2 IGNsYXNzPSJtZXRhLWl0ZW0iPjxkaXYgY2xhc3M9Im1ldGEtbGFiZWwiPkthdGVnb3JpZTwvZGl2 PjxkaXY+JyArIHRoaXMuZXNjYXBlSFRNTChkb2Mua2F0ZWdvcmllKSArICc8L2Rpdj48L2Rpdj4n ICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9Im1ldGEtaXRlbSI+PGRpdiBj bGFzcz0ibWV0YS1sYWJlbCI+U3RhdHVzPC9kaXY+PGRpdj4nICsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICc8c3BhbiBjbGFzcz0ic3RhdHVzLWJhZGdlIiBzdHlsZT0iYmFja2dyb3VuZC1j b2xvcjonICsgY2ZnLmNvbG9yICsgJzsgY29sb3I6JyArIGNmZy50ZXh0Q29sb3IgKyAnOyI+JyAr IGNmZy5sYWJlbCArICc8L3NwYW4+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj48 L2Rpdj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9Im1ldGEtaXRlbSI+ PGRpdiBjbGFzcz0ibWV0YS1sYWJlbCI+VmVyc2lvbjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImN1 cnNvcjpwb2ludGVyO2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCB2YXIoLS10ZXh0LW11dGVkKTsi IG9uY2xpY2s9InNob3dWZXJzaW9uTG9naWMoKSIgdGl0bGU9IktsaWNrZSBmw7xyIGVpbmUgRXJr bMOkcnVuZyBkZXIgVmVyc2lvbmllcnVuZyI+JyArIHRoaXMuZXNjYXBlSFRNTChkb2MudmVyc2lv biB8fCAnLScpICsgJzwvc3Bhbj48L2Rpdj48L2Rpdj4nICsKICAgICAgICAgICAgICAgICAgICAg ICAgJzxkaXYgY2xhc3M9Im1ldGEtaXRlbSI+PGRpdiBjbGFzcz0ibWV0YS1sYWJlbCI+RXJzdGVs bHQ8L2Rpdj48ZGl2PicgKyBmb3JtYXREYXRlKGRvYy5lcnN0ZWxsdCkgKyAnPC9kaXY+PC9kaXY+ JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJtZXRhLWl0ZW0iPjxkaXYg Y2xhc3M9Im1ldGEtbGFiZWwiPkdlw6RuZGVydDwvZGl2PjxkaXY+JyArIGZvcm1hdERhdGUoZG9j LmdlYWVuZGVydCkgKyAnPC9kaXY+PC9kaXY+JyArCiAgICAgICAgICAgICAgICAgICAgICAgIChk b2MuZXJzdGVsbHRWb24gPyAnPGRpdiBjbGFzcz0ibWV0YS1pdGVtIj48ZGl2IGNsYXNzPSJtZXRh LWxhYmVsIj5FcnN0ZWxsdCB2b248L2Rpdj48ZGl2PicgKyB0aGlzLmVzY2FwZUhUTUwoZG9jLmVy c3RlbGx0Vm9uKSArICc8L2Rpdj48L2Rpdj4nIDogJycpICsKICAgICAgICAgICAgICAgICAgICAg ICAgKGRvYy5iZWFyYmVpdGV0Vm9uID8gJzxkaXYgY2xhc3M9Im1ldGEtaXRlbSI+PGRpdiBjbGFz cz0ibWV0YS1sYWJlbCI+QmVhcmJlaXRldCB2b248L2Rpdj48ZGl2PicgKyB0aGlzLmVzY2FwZUhU TUwoZG9jLmJlYXJiZWl0ZXRWb24pICsgJzwvZGl2PjwvZGl2PicgOiAnJykgKwogICAgICAgICAg ICAgICAgICAgICAgICAoZG9jLnBhcmVudElkID8gJzxkaXYgY2xhc3M9Im1ldGEtaXRlbSI+PGRp diBjbGFzcz0ibWV0YS1sYWJlbCI+w5xiZXJhcnRpa2VsPC9kaXY+PGRpdj48YSBzdHlsZT0iY29s b3I6dmFyKC0tdGV4dC1oZWFkaW5nKTtjdXJzb3I6cG9pbnRlcjsiIG9uY2xpY2s9IkRyaXZlUG9y dGFsLnNlbGVjdERvY3VtZW50KFwnJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoZG9jLnBhcmVu dElkKSArICdcJykiPicgKyB0aGlzLmVzY2FwZUhUTUwoKERyaXZlRlMuZG9jdW1lbnRzLmZpbmQo ZnVuY3Rpb24oZCl7cmV0dXJuIGQuaWQ9PT1kb2MucGFyZW50SWR9KXx8e30pLnRpdGVsIHx8IGRv Yy5wYXJlbnRJZCkgKyAnPC9hPjwvZGl2PjwvZGl2PicgOiAnJykgKwogICAgICAgICAgICAgICAg ICAgICAgICAoKGRvYy5zY2hsYWd3b2VydGVyICYmIGRvYy5zY2hsYWd3b2VydGVyLmxlbmd0aCkg PyAnPGRpdiBjbGFzcz0ibWV0YS1pdGVtIiBzdHlsZT0iZmxleC1iYXNpczoxMDAlOyI+PGRpdiBj bGFzcz0ibWV0YS1sYWJlbCI+U2NobGFnd8O2cnRlcjwvZGl2PjxkaXY+JyArIGRvYy5zY2hsYWd3 b2VydGVyLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gJzxzcGFuIGNsYXNzPSJrZXl3b3JkLXRhZyI+ JytEcml2ZVBvcnRhbC5lc2NhcGVIVE1MKGspKyc8L3NwYW4+Jzt9KS5qb2luKCcgJykgKyAnPC9k aXY+PC9kaXY+JyA6ICcnKSArCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlckNo aWxkQXJ0aWNsZXMoZG9jKSArCiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAg ICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImRldGFpbC1h Y3Rpb25zIj4nICsKICAgICAgICAgICAgICAgICAgICAoRHJpdmVGUy5yZWFkT25seSA/ICcnIDog JzxidXR0b24gb25jbGljaz0iRHJpdmVFZGl0b3IuZWRpdChcJycgKyBEcml2ZVBvcnRhbC5lc2Nh cGVBdHRyKGRvYy5pZCkgKyAnXCcpIj5CZWFyYmVpdGVuPC9idXR0b24+JykgKwogICAgICAgICAg ICAgICAgICAgICh0aGlzLl9jYW5TZWVSZXZpc2lvbnMoZG9jKSAmJiBkb2MucmV2aXNpb25zICYm IGRvYy5yZXZpc2lvbnMubGVuZ3RoID4gMCA/ICc8YnV0dG9uIHN0eWxlPSJib3JkZXItY29sb3I6 IzNiODJmNjtjb2xvcjojM2I4MmY2OyIgb25jbGljaz0iRHJpdmVQb3J0YWwub3BlblJldmlzaW9u cyhcJycgKyBEcml2ZVBvcnRhbC5lc2NhcGVBdHRyKGRvYy5pZCkgKyAnXCcpIj5WZXJzaW9uZW4g KCcgKyBkb2MucmV2aXNpb25zLmxlbmd0aCArICcpPC9idXR0b24+JyA6ICcnKSArCiAgICAgICAg ICAgICAgICAgICAgKERyaXZlRlMucmVhZE9ubHkgPyAnJyA6ICc8YnV0dG9uIGNsYXNzPSJidG4t ZGFuZ2VyIiBvbmNsaWNrPSJEcml2ZVBvcnRhbC5kZWxldGVEb2N1bWVudChcJycgKyBEcml2ZVBv cnRhbC5lc2NhcGVBdHRyKGRvYy5pZCkgKyAnXCcpIj5Mw7ZzY2hlbjwvYnV0dG9uPicpICsKICAg ICAgICAgICAgICAgICAgICAoZG9jLnN0YXR1cyA9PT0gJ1Byw7xmdW5nJyAmJiBEcml2ZUdvdmVy bmFuY2UuY2FuQXBwcm92ZShkb2MpID8KICAgICAgICAgICAgICAgICAgICAgICAgKChkb2MucmV2 aXNpb25zICYmIGRvYy5yZXZpc2lvbnMubGVuZ3RoID4gMCkgPyAnPGJ1dHRvbiBzdHlsZT0iYm9y ZGVyLWNvbG9yOnZhcigtLXRleHQtaGVhZGluZyk7Y29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTsi IG9uY2xpY2s9IkRyaXZlUG9ydGFsLnRvZ2dsZURpZmYoXCcnICsgRHJpdmVQb3J0YWwuZXNjYXBl QXR0cihkb2MuaWQpICsgJ1wnKSIgaWQ9ImJ0bkRpZmYiPsOEbmRlcnVuZ2VuIGFuemVpZ2VuPC9i dXR0b24+JyA6ICcnKSArCiAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHN0eWxlPSJi b3JkZXItY29sb3I6IzI4YTc0NTtjb2xvcjojMjhhNzQ1OyIgb25jbGljaz0iRHJpdmVHb3Zlcm5h bmNlLm9wZW5SZXZpZXdEaWFsb2coXCcnICsgRHJpdmVQb3J0YWwuZXNjYXBlQXR0cihkb2MuaWQp ICsgJ1wnLFwnYXBwcm92ZVwnKSI+RnJlaWdlYmVuPC9idXR0b24+JyArCiAgICAgICAgICAgICAg ICAgICAgICAgICc8YnV0dG9uIHN0eWxlPSJib3JkZXItY29sb3I6I2RjMzU0NTtjb2xvcjojZGMz NTQ1OyIgb25jbGljaz0iRHJpdmVHb3Zlcm5hbmNlLm9wZW5SZXZpZXdEaWFsb2coXCcnICsgRHJp dmVQb3J0YWwuZXNjYXBlQXR0cihkb2MuaWQpICsgJ1wnLFwncmVqZWN0XCcpIj5BYmxlaG5lbjwv YnV0dG9uPicgOiAnJykgKwogICAgICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAn PC9kaXY+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJkZXRhaWwtY29udGVudCIgaWQ9ImRl dGFpbENvbnRlbnQiPicgKyAoZG9jLmluaGFsdCB8fCAnJykgKyAnPC9kaXY+JyArCiAgICAgICAg ICAgIHRoaXMucmVuZGVyQ29udHJpYnV0b3JzKGRvYykgKwogICAgICAgICAgICB0aGlzLnJlbmRl clJldmlld0hpc3RvcnkoZG9jKSArCiAgICAgICAgICAgIG1lZGlhSFRNTDsKCiAgICAgICAgLy8g UG9zdC1SZW5kZXI6IEFsbGUgTWVkaWVuIGltIEluaGFsdCBrbGlja2JhciBtYWNoZW4gKG9lZmZu ZXQgTW9kYWwpCiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGNv bnRlbnQgPSBkZXRhaWxDb250YWluZXIucXVlcnlTZWxlY3RvcignLmRldGFpbC1jb250ZW50Jyk7 CiAgICAgICAgICAgIGlmICghY29udGVudCkgcmV0dXJuOwoKICAgICAgICAgICAgLy8gQmlsZGVy OiBLbGljayBvZWZmbmV0IE1vZGFsCiAgICAgICAgICAgIGNvbnRlbnQucXVlcnlTZWxlY3RvckFs bCgnLmRyaXZlLW1lZGlhIGltZywgLmRldGFpbC1jb250ZW50ID4gaW1nJykuZm9yRWFjaChpbWcg PT4gewogICAgICAgICAgICAgICAgaWYgKGltZy5fbW9kYWxCb3VuZCkgcmV0dXJuOwogICAgICAg ICAgICAgICAgaW1nLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJzsKICAgICAgICAgICAgICAgIGlt Zy5vbmNsaWNrID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3Bh Z2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgb3Blbk1lZGlhTW9kYWwoaW1nLnNyYywgJ2lt YWdlJywgaW1nLmFsdCB8fCAnJyk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAg aW1nLl9tb2RhbEJvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBQ REYtTGlua3M6IDxhIHRhcmdldD0iX2JsYW5rIj4gaW4gTW9kYWwtS2xpY2sgdW13YW5kZWxuCiAg ICAgICAgICAgIGNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyaXZlLW1lZGlhLXBkZi1saW5r JykuZm9yRWFjaChlbCA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gZWwucXVlcnlT ZWxlY3RvcignYScpOwogICAgICAgICAgICAgICAgY29uc3QgdGl0bGVTcGFuID0gZWwucXVlcnlT ZWxlY3RvcignLnBkZi10aXRsZScpOwogICAgICAgICAgICAgICAgY29uc3QgcGRmVXJsID0gbGlu ayA/IGxpbmsuaHJlZiA6ICcnOwogICAgICAgICAgICAgICAgY29uc3QgcGRmVGl0bGUgPSAodGl0 bGVTcGFuIHx8IGxpbmsgfHwge30pLnRleHRDb250ZW50IHx8ICdQREYnOwogICAgICAgICAgICAg ICAgaWYgKGxpbmspIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICAgICAgICAgICAgICAgIHNwYW4uY2xhc3NOYW1l ID0gJ3BkZi10aXRsZSc7CiAgICAgICAgICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IGxp bmsudGV4dENvbnRlbnQ7CiAgICAgICAgICAgICAgICAgICAgbGluay5yZXBsYWNlV2l0aChzcGFu KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsLm9uY2xpY2sgPSBmdW5jdGlv bihlKSB7IGUucHJldmVudERlZmF1bHQoKTsgZS5zdG9wUHJvcGFnYXRpb24oKTsgb3Blbk1lZGlh TW9kYWwocGRmVXJsLCAncGRmJywgcGRmVGl0bGUpOyB9OwogICAgICAgICAgICB9KTsKCiAgICAg ICAgICAgIC8vIFBERi1pRnJhbWVzOiBLbGljayBvZWZmbmV0IE1vZGFsCiAgICAgICAgICAgIGNv bnRlbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyaXZlLW1lZGlhLXBkZi1pZnJhbWUnKS5mb3JFYWNo KGVsID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IGlmcmFtZSA9IGVsLnF1ZXJ5U2VsZWN0b3Io J2lmcmFtZScpOwogICAgICAgICAgICAgICAgaWYgKGlmcmFtZSkgewogICAgICAgICAgICAgICAg ICAgIGVsLm9uY2xpY2sgPSBmdW5jdGlvbihlKSB7IGUucHJldmVudERlZmF1bHQoKTsgZS5zdG9w UHJvcGFnYXRpb24oKTsgb3Blbk1lZGlhTW9kYWwoaWZyYW1lLnNyYywgJ3BkZicsICdQREYnKTsg fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBWaWRl bzogS2xpY2sgYXVmIENvbnRhaW5lciBvZWZmbmV0IE1vZGFsIChmYWxscyBuaWNodCBiZXJlaXRz IGNvbnRyb2xzLWFrdGl2KQogICAgICAgICAgICBjb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3Zp ZGVvJykuZm9yRWFjaCh2aWQgPT4gewogICAgICAgICAgICAgICAgaWYgKHZpZC5fbW9kYWxCb3Vu ZCkgcmV0dXJuOwogICAgICAgICAgICAgICAgY29uc3Qgc3JjID0gdmlkLnF1ZXJ5U2VsZWN0b3Io J3NvdXJjZScpID8gdmlkLnF1ZXJ5U2VsZWN0b3IoJ3NvdXJjZScpLnNyYyA6IHZpZC5zcmM7CiAg ICAgICAgICAgICAgICBpZiAoc3JjKSB7CiAgICAgICAgICAgICAgICAgICAgdmlkLnN0eWxlLmN1 cnNvciA9ICdwb2ludGVyJzsKICAgICAgICAgICAgICAgICAgICB2aWQub25kYmxjbGljayA9IGZ1 bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsK ICAgICAgICAgICAgICAgICAgICAgICAgb3Blbk1lZGlhTW9kYWwoc3JjLCAndmlkZW8nLCAnJyk7 CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg IHZpZC5fbW9kYWxCb3VuZCA9IHRydWU7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLy8g QXVkaW86IERvcHBlbGtsaWNrIG9lZmZuZXQgTW9kYWwKICAgICAgICAgICAgY29udGVudC5xdWVy eVNlbGVjdG9yQWxsKCdhdWRpbycpLmZvckVhY2goYXVkID0+IHsKICAgICAgICAgICAgICAgIGlm IChhdWQuX21vZGFsQm91bmQpIHJldHVybjsKICAgICAgICAgICAgICAgIGNvbnN0IHNyYyA9IGF1 ZC5zcmMgfHwgKGF1ZC5xdWVyeVNlbGVjdG9yKCdzb3VyY2UnKSA/IGF1ZC5xdWVyeVNlbGVjdG9y KCdzb3VyY2UnKS5zcmMgOiAnJyk7CiAgICAgICAgICAgICAgICBpZiAoc3JjKSB7CiAgICAgICAg ICAgICAgICAgICAgYXVkLm9uZGJsY2xpY2sgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG9w ZW5NZWRpYU1vZGFsKHNyYywgJ2F1ZGlvJywgJycpOwogICAgICAgICAgICAgICAgICAgIH07CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBhdWQuX21vZGFsQm91bmQgPSB0cnVlOwog ICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIElubGluZS1FbWJlZHMgKFZpZGVvLCBBdWRp bywgT2ZmaWNlKTogS2xpY2sgb2VmZm5ldCBNb2RhbAogICAgICAgICAgICBjb250ZW50LnF1ZXJ5 U2VsZWN0b3JBbGwoJy5kcml2ZS1tZWRpYS1lbWJlZCcpLmZvckVhY2goZWwgPT4gewogICAgICAg ICAgICAgICAgaWYgKGVsLl9tb2RhbEJvdW5kKSByZXR1cm47CiAgICAgICAgICAgICAgICBjb25z dCBtZWRpYVVybCA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1tZWRpYS11cmwnKTsKICAgICAgICAg ICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1tZWRpYS10eXBl Jyk7CiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5kcml2 ZS1lbWJlZC1sYWJlbCcpOwogICAgICAgICAgICAgICAgY29uc3QgbWVkaWFUaXRsZSA9IGxhYmVs ID8gbGFiZWwudGV4dENvbnRlbnQgOiAnJzsKICAgICAgICAgICAgICAgIGlmIChtZWRpYVVybCkg ewogICAgICAgICAgICAgICAgICAgIGVsLm9uY2xpY2sgPSBmdW5jdGlvbihlKSB7IGUucHJldmVu dERlZmF1bHQoKTsgZS5zdG9wUHJvcGFnYXRpb24oKTsgb3Blbk1lZGlhTW9kYWwobWVkaWFVcmws IG1lZGlhVHlwZSwgbWVkaWFUaXRsZSk7IH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICBlbC5fbW9kYWxCb3VuZCA9IHRydWU7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAg Ly8gPT09IEFjY29yZGlvbnMgYWt0aXZpZXJlbiAoQXVmLS9adWtsYXBwZW4sIHN0YW5kYXJkbWFl c3NpZyBlaW5nZWtsYXBwdCkgPT09CiAgICAgICAgICAgIGNvbnRlbnQucXVlcnlTZWxlY3RvckFs bCgnLmRyaXZlLWFjY29yZGlvbicpLmZvckVhY2goZnVuY3Rpb24oYWNjKSB7CiAgICAgICAgICAg ICAgICBhY2Muc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKTsKICAgICAg ICAgICAgICAgIGFjYy5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7CiAgICAgICAgICAgICAgICB2 YXIgaGVhZGVyID0gYWNjLnF1ZXJ5U2VsZWN0b3IoJy5kcml2ZS1hY2NvcmRpb24taGVhZGVyJyk7 CiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyICYmICFoZWFkZXIuX2FjY0JvdW5kKSB7CiAgICAg ICAgICAgICAgICAgICAgaGVhZGVyLm9uY2xpY2sgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAg ZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgYWNjLmNsYXNzTGlz dC50b2dnbGUoJ29wZW4nKTsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAg ICAgIGhlYWRlci5fYWNjQm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICB9KTsKCiAgICAgICAgICAgIC8vID09PSBGQVEtQmVyZWljaGUgYWt0aXZpZXJlbiAoQXVmLS9a dWtsYXBwZW4sIHN0YW5kYXJkbWFlc3NpZyBlaW5nZWtsYXBwdCkgPT09CiAgICAgICAgICAgIGNv bnRlbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyaXZlLWZhcScpLmZvckVhY2goZnVuY3Rpb24oZmFx KSB7CiAgICAgICAgICAgICAgICBmYXEuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAn ZmFsc2UnKTsKICAgICAgICAgICAgICAgIGZhcS5xdWVyeVNlbGVjdG9yQWxsKCcuZHJpdmUtZmFx LWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHsgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdv cGVuJyk7IH0pOwogICAgICAgICAgICAgICAgZmFxLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kcml2ZS1m YXEtcXVlc3Rpb24nKS5mb3JFYWNoKGZ1bmN0aW9uKHEpIHsKICAgICAgICAgICAgICAgICAgICBp ZiAocS5fZmFxQm91bmQpIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBxLm9uY2xpY2sgPSBm dW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsK ICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAg ICAgICAgICAgICAgcS5jbG9zZXN0KCcuZHJpdmUtZmFxLWl0ZW0nKS5jbGFzc0xpc3QudG9nZ2xl KCdvcGVuJyk7CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICBxLl9m YXFCb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CgogICAg ICAgICAgICAvLyA9PT0gU29ydGllcmJhcmUgVGFiZWxsZW4gYWt0aXZpZXJlbiA9PT0KICAgICAg ICAgICAgY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJpdmUtdGFibGVbZGF0YS1zb3J0YWJs ZT0idHJ1ZSJdJykuZm9yRWFjaChmdW5jdGlvbih0YWJsZSkgewogICAgICAgICAgICAgICAgdGFi bGUucXVlcnlTZWxlY3RvckFsbCgndGguc29ydGFibGUnKS5mb3JFYWNoKGZ1bmN0aW9uKHRoKSB7 CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoLl9zb3J0Qm91bmQpIHJldHVybjsKICAgICAgICAg ICAgICAgICAgICB0aC5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICdmYWxzZScpOwog ICAgICAgICAgICAgICAgICAgIHRoLm9uY2xpY2sgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAg ZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IEFy cmF5LmZyb20odGgucGFyZW50RWxlbWVudC5jaGlsZHJlbikuaW5kZXhPZih0aCk7CiAgICAgICAg ICAgICAgICAgICAgICAgIHZhciB0Ym9keSA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5Jyk7 CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGJvZHkpIHJldHVybjsKICAgICAgICAgICAg ICAgICAgICAgICAgdmFyIGFzYyA9ICF0aC5jbGFzc0xpc3QuY29udGFpbnMoJ3NvcnQtYXNjJyk7 CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsbGUgU29ydC1NYXJrZXIgZW50ZmVybmVuCiAg ICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoJykuZm9yRWFj aChmdW5jdGlvbihoKSB7IGguY2xhc3NMaXN0LnJlbW92ZSgnc29ydC1hc2MnLCAnc29ydC1kZXNj Jyk7IH0pOwogICAgICAgICAgICAgICAgICAgICAgICB0aC5jbGFzc0xpc3QuYWRkKGFzYyA/ICdz b3J0LWFzYycgOiAnc29ydC1kZXNjJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByb3dz ID0gQXJyYXkuZnJvbSh0Ym9keS5xdWVyeVNlbGVjdG9yQWxsKCd0cicpKTsKICAgICAgICAgICAg ICAgICAgICAgICAgcm93cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhciBhVGV4dCA9IChhLmNlbGxzW2lkeF0gPyBhLmNlbGxzW2lkeF0udGV4dENv bnRlbnQudHJpbSgpIDogJycpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2YXIgYlRleHQgPSAoYi5jZWxsc1tpZHhdID8gYi5jZWxsc1tpZHhdLnRleHRDb250ZW50 LnRyaW0oKSA6ICcnKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8gTnVtZXJpc2NoZSBTb3J0aWVydW5nIHdlbm4gbW9lZ2xpY2gKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhciBhTnVtID0gcGFyc2VGbG9hdChhVGV4dCksIGJOdW0gPSBwYXJzZUZsb2F0 KGJUZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oYU51bSkgJiYg IWlzTmFOKGJOdW0pKSByZXR1cm4gYXNjID8gYU51bSAtIGJOdW0gOiBiTnVtIC0gYU51bTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhc2MgPyBhVGV4dC5sb2NhbGVDb21wYXJl KGJUZXh0LCAnZGUnKSA6IGJUZXh0LmxvY2FsZUNvbXBhcmUoYVRleHQsICdkZScpOwogICAgICAg ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5mb3JFYWNo KGZ1bmN0aW9uKHJvdykgeyB0Ym9keS5hcHBlbmRDaGlsZChyb3cpOyB9KTsKICAgICAgICAgICAg ICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIHRoLl9zb3J0Qm91bmQgPSB0cnVlOwogICAg ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLy8gPT09IMOcYmVy c2NocmlmdGVuIG1pdCBBbmNob3ItSURzIHZlcnNlaGVuID09PQogICAgICAgICAgICBjb250ZW50 LnF1ZXJ5U2VsZWN0b3JBbGwoJ2gxLCBoMiwgaDMsIGg0JykuZm9yRWFjaChmdW5jdGlvbihoKSB7 CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IGgudGV4dENvbnRlbnQudHJpbSgpOwogICAgICAg ICAgICAgICAgaWYgKCF0ZXh0KSByZXR1cm47CiAgICAgICAgICAgICAgICB2YXIgc2x1ZyA9IHRl eHQudG9Mb3dlckNhc2UoKQogICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC/DpC9nLCAnYWUn KS5yZXBsYWNlKC/Dti9nLCAnb2UnKS5yZXBsYWNlKC/DvC9nLCAndWUnKS5yZXBsYWNlKC/Dny9n LCAnc3MnKQogICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJyku cmVwbGFjZSgvXi18LSQvZywgJycpOwogICAgICAgICAgICAgICAgaC5pZCA9IHNsdWc7CiAgICAg ICAgICAgIH0pOwoKICAgICAgICAgICAgLy8gPT09IE1hbnVlbGxlIENyb3NzbGlua3MgKC5kcml2 ZS14cmVmKSBrbGlja2JhciBtYWNoZW4gPT09CiAgICAgICAgICAgIGNvbnRlbnQucXVlcnlTZWxl Y3RvckFsbCgnLmRyaXZlLXhyZWYnKS5mb3JFYWNoKGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgICAg ICAgICB2YXIgdGFyZ2V0ID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXhyZWYtdGFyZ2V0Jyk7CiAg ICAgICAgICAgICAgICBpZiAoIXRhcmdldCkgcmV0dXJuOwogICAgICAgICAgICAgICAgZWwub25j bGljayA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0 KCk7CiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAg ICAgICAgICB2YXIgcGFydHMgPSB0YXJnZXQuc3BsaXQoJyMnKTsKICAgICAgICAgICAgICAgICAg ICB2YXIgZG9jSWQgPSBwYXJ0c1swXTsKICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGluZ1Ns dWcgPSBwYXJ0c1sxXSB8fCAnJzsKICAgICAgICAgICAgICAgICAgICBEcml2ZVBvcnRhbC5zZWxl Y3REb2N1bWVudChkb2NJZCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAg ICAgRHJpdmVQb3J0YWwuaGlnaGxpZ2h0SXRlbShkb2NJZCk7CiAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChoZWFkaW5nU2x1ZykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmFj aCBSZW5kZXIgenVtIEhlYWRpbmcgc2Nyb2xsZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmFyIGhlYWRpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoZWFkaW5nU2x1Zyk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRpbmcpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaGVhZGluZy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAn c21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGhlYWRpbmcuc3R5bGUudHJhbnNpdGlvbiA9ICdiYWNrZ3JvdW5kIDAuM3MnOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkaW5nLnN0eWxlLmJhY2tncm91bmQg PSAndmFyKC0tYmctYWN0aXZlKSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGhlYWRpbmcuc3R5bGUuYmFja2dyb3VuZCA9ICcnOyB9 LCAyMDAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9LCAyMDApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgLy8gTW91 c2VvdmVyOiBQb3BvdmVyIG1pdCBaaWVsLUluZm8KICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50 TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBmdW5jdGlvbihldikgewogICAgICAgICAgICAgICAgICAg IHZhciBwYXJ0cyA9IHRhcmdldC5zcGxpdCgnIycpOwogICAgICAgICAgICAgICAgICAgIHZhciBk b2NJZCA9IHBhcnRzWzBdOwogICAgICAgICAgICAgICAgICAgIHZhciBkb2MgPSBEcml2ZUZTLmRv Y3VtZW50cy5maW5kKGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQuaWQgPT09IGRvY0lkOyB9KTsKICAg ICAgICAgICAgICAgICAgICBpZiAoZG9jKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIERyaXZl UG9ydGFsLl9zaG93Q3Jvc3NsaW5rUG9wb3ZlcihldiwgW3sgdGVybTogZG9jLnRpdGVsLCB0eXBl OiAncmVmZXJlbnonLCBkb2M6IGRvYyB9XSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxl YXZlJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgRHJpdmVQb3J0YWwuX2hpZGVD cm9zc2xpbmtQb3BvdmVyKCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7Cgog ICAgICAgICAgICAvLyA9PT0gQXV0b21hdGlzY2hlIENyb3NzbGluay1Fcmtlbm51bmcgPT09CiAg ICAgICAgICAgIHRoaXMuX2FwcGx5Q3Jvc3NsaW5rcyhjb250ZW50LCBkb2MpOwogICAgICAgIH0s IDUwKTsKICAgIH0sCgogICAgLy8gQ3Jvc3NsaW5rLUVuZ2luZTogRXJrZW5udCBWZXJ3ZWlzZSBh dWYgYW5kZXJlIEFydGlrZWwgaW0gSW5oYWx0CiAgICBfY3Jvc3NsaW5rUG9wb3ZlcjogbnVsbCwK ICAgIF9jcm9zc2xpbmtUaW1lb3V0OiBudWxsLAoKICAgIF9idWlsZENyb3NzbGlua0luZGV4KGV4 Y2x1ZGVEb2NJZCkgewogICAgICAgIC8vIEluZGV4IGFsbGVyIERva3VtZW50ZSBtaXQgVGl0ZWxu IHVuZCBTY2hsYWd3b2VydGVybgogICAgICAgIHZhciBpbmRleCA9IFtdOwogICAgICAgIERyaXZl RlMuZG9jdW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZCkgewogICAgICAgICAgICBpZiAoZC5pZCA9 PT0gZXhjbHVkZURvY0lkKSByZXR1cm47CiAgICAgICAgICAgIC8vIFRpdGVsIGFscyBTdWNoYmVn cmlmZiAobWluIDQgWmVpY2hlbikKICAgICAgICAgICAgaWYgKGQudGl0ZWwgJiYgZC50aXRlbC5s ZW5ndGggPj0gNCkgewogICAgICAgICAgICAgICAgaW5kZXgucHVzaCh7IHRlcm06IGQudGl0ZWws IHR5cGU6ICd0aXRlbCcsIGRvYzogZCB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBT Y2hsYWd3b2VydGVyIGFscyBTdWNoYmVncmlmZmUgKG1pbiAzIFplaWNoZW4pCiAgICAgICAgICAg IChkLnNjaGxhZ3dvZXJ0ZXIgfHwgW10pLmZvckVhY2goZnVuY3Rpb24oa3cpIHsKICAgICAgICAg ICAgICAgIGlmIChrdyAmJiBrdy5sZW5ndGggPj0gMykgewogICAgICAgICAgICAgICAgICAgIGlu ZGV4LnB1c2goeyB0ZXJtOiBrdywgdHlwZTogJ3NjaGxhZ3dvcnQnLCBkb2M6IGQgfSk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIC8vIExhZW5n c3RlIEJlZ3JpZmZlIHp1ZXJzdCAodmVyaGluZGVydCBUZWlsbWF0Y2hlcykKICAgICAgICBpbmRl eC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGIudGVybS5sZW5ndGggLSBhLnRlcm0ubGVu Z3RoOyB9KTsKICAgICAgICByZXR1cm4gaW5kZXg7CiAgICB9LAoKICAgIF9hcHBseUNyb3NzbGlu a3MoY29udGVudEVsLCBjdXJyZW50RG9jKSB7CiAgICAgICAgLy8gR292ZXJuYW5jZS1FaW5zdGVs bHVuZyBwcsO8ZmVuCiAgICAgICAgdmFyIHNldHRpbmdzID0gKERyaXZlR292ZXJuYW5jZS5kYXRh ICYmIERyaXZlR292ZXJuYW5jZS5kYXRhLnNldHRpbmdzKSA/IERyaXZlR292ZXJuYW5jZS5kYXRh LnNldHRpbmdzIDoge307CiAgICAgICAgaWYgKHNldHRpbmdzLmNyb3NzbGlua01vZGUgPT09ICdk aXNhYmxlZCcpIHJldHVybjsKCiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fYnVpbGRDcm9zc2xp bmtJbmRleChjdXJyZW50RG9jLmlkKTsKICAgICAgICBpZiAoaW5kZXgubGVuZ3RoID09PSAwKSBy ZXR1cm47CgogICAgICAgIC8vIEJlcmVpdHMgdmVybGlua3RlIFRlcm1lIHRyYWNrZW4gKGtlaW4g ZG9wcGVsdGVzIE1hdGNoaW5nKQogICAgICAgIHZhciBtYXRjaGVkID0gbmV3IFNldCgpOwogICAg ICAgIC8vIFNhbW1sZSBhbGxlIHVuaXF1ZSBEb2t1bWVudC1JRHMgZGllIGplIFRlcm0gbWF0Y2hl bgogICAgICAgIHZhciB0ZXJtRG9jcyA9IHt9OwogICAgICAgIGluZGV4LmZvckVhY2goZnVuY3Rp b24oZW50cnkpIHsKICAgICAgICAgICAgdmFyIGtleSA9IGVudHJ5LnRlcm0udG9Mb3dlckNhc2Uo KTsKICAgICAgICAgICAgaWYgKCF0ZXJtRG9jc1trZXldKSB0ZXJtRG9jc1trZXldID0gW107CiAg ICAgICAgICAgIC8vIE51ciB1bmlxdWUgRG9jcyBwcm8gVGVybQogICAgICAgICAgICBpZiAoIXRl cm1Eb2NzW2tleV0uZmluZChmdW5jdGlvbihlKSB7IHJldHVybiBlLmRvYy5pZCA9PT0gZW50cnku ZG9jLmlkOyB9KSkgewogICAgICAgICAgICAgICAgdGVybURvY3Nba2V5XS5wdXNoKGVudHJ5KTsK ICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICB2YXIgd2Fsa2VyID0gZG9jdW1lbnQu Y3JlYXRlVHJlZVdhbGtlcihjb250ZW50RWwsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsLCBm YWxzZSk7CiAgICAgICAgdmFyIHRleHROb2RlcyA9IFtdOwogICAgICAgIHdoaWxlICh3YWxrZXIu bmV4dE5vZGUoKSkgewogICAgICAgICAgICB2YXIgbm9kZSA9IHdhbGtlci5jdXJyZW50Tm9kZTsK ICAgICAgICAgICAgLy8gTmljaHQgaW5uZXJoYWxiIHZvbiBMaW5rcywgQnV0dG9ucywgYmVyZWl0 cyBtYXJraWVydGVuIENyb3NzbGlua3MsIG9kZXIgZHJpdmUtbWVkaWEgRWxlbWVudGVuCiAgICAg ICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudEVsZW1lbnQ7CiAgICAgICAgICAgIGlmIChw YXJlbnQgJiYgKHBhcmVudC5jbG9zZXN0KCdhJykgfHwgcGFyZW50LmNsb3Nlc3QoJ2J1dHRvbicp IHx8IHBhcmVudC5jbG9zZXN0KCcuY3Jvc3NsaW5rJykgfHwgcGFyZW50LmNsb3Nlc3QoJy5kcml2 ZS1tZWRpYScpKSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChub2RlLnRleHRDb250ZW50LnRy aW0oKS5sZW5ndGggPiAyKSB7CiAgICAgICAgICAgICAgICB0ZXh0Tm9kZXMucHVzaChub2RlKTsK ICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIG1heExpbmtzID0gMzA7IC8vIFBl cmZvcm1hbmNlLUxpbWl0CiAgICAgICAgdmFyIGxpbmtDb3VudCA9IDA7CgogICAgICAgIHRleHRO b2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHRleHROb2RlKSB7CiAgICAgICAgICAgIGlmIChsaW5rQ291 bnQgPj0gbWF4TGlua3MpIHJldHVybjsKICAgICAgICAgICAgdmFyIHRleHQgPSB0ZXh0Tm9kZS50 ZXh0Q29udGVudDsKICAgICAgICAgICAgdmFyIHJlcGxhY2VtZW50cyA9IFtdOwoKICAgICAgICAg ICAgaW5kZXguZm9yRWFjaChmdW5jdGlvbihlbnRyeSkgewogICAgICAgICAgICAgICAgaWYgKGxp bmtDb3VudCA+PSBtYXhMaW5rcykgcmV0dXJuOwogICAgICAgICAgICAgICAgdmFyIHRlcm1Mb3dl ciA9IGVudHJ5LnRlcm0udG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIGlmIChtYXRjaGVk Lmhhcyh0ZXJtTG93ZXIpKSByZXR1cm47CgogICAgICAgICAgICAgICAgLy8gV29ydGdyZW56ZW4t U3VjaGUgKGNhc2UtaW5zZW5zaXRpdmUpCiAgICAgICAgICAgICAgICB2YXIgZXNjYXBlZCA9IGVu dHJ5LnRlcm0ucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csICdcXCQmJyk7CiAgICAgICAg ICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKCdcXGInICsgZXNjYXBlZCArICdcXGInLCAnaScp OwogICAgICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKHRleHQpOwogICAgICAgICAgICAgICAg aWYgKG0pIHsKICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMucHVzaCh7CiAgICAgICAg ICAgICAgICAgICAgICAgIHN0YXJ0OiBtLmluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICBl bmQ6IG0uaW5kZXggKyBtWzBdLmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2lu YWw6IG1bMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5OiBlbnRyeSwKICAgICAgICAg ICAgICAgICAgICAgICAgZW50cmllczogdGVybURvY3NbdGVybUxvd2VyXSB8fCBbZW50cnldCiAg ICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hZGQodGVy bUxvd2VyKTsKICAgICAgICAgICAgICAgICAgICBsaW5rQ291bnQrKzsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRzLmxlbmd0aCA9 PT0gMCkgcmV0dXJuOwoKICAgICAgICAgICAgLy8gTmFjaCBQb3NpdGlvbiBzb3J0aWVyZW4gKHJ1 ZWNrd2FlcnRzIGVyc2V0emVuKQogICAgICAgICAgICByZXBsYWNlbWVudHMuc29ydChmdW5jdGlv bihhLCBiKSB7IHJldHVybiBiLnN0YXJ0IC0gYS5zdGFydDsgfSk7CgogICAgICAgICAgICAvLyBV ZWJlcmxhcHB1bmdlbiBlbnRmZXJuZW4KICAgICAgICAgICAgdmFyIGNsZWFuID0gW3JlcGxhY2Vt ZW50c1swXV07CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcmVwbGFjZW1lbnRzLmxl bmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRzW2ldLmVuZCA8PSBj bGVhbltjbGVhbi5sZW5ndGggLSAxXS5zdGFydCkgewogICAgICAgICAgICAgICAgICAgIGNsZWFu LnB1c2gocmVwbGFjZW1lbnRzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoK ICAgICAgICAgICAgLy8gRnJhZ21lbnQgYmF1ZW4KICAgICAgICAgICAgdmFyIGZyYWcgPSBkb2N1 bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICAgICAgICAgIHZhciBsYXN0SWR4ID0g MDsKICAgICAgICAgICAgLy8gVm9yd2FlcnRzIHNvcnRpZXJlbiBmdWVyIEZyYWdtZW50LUF1ZmJh dQogICAgICAgICAgICBjbGVhbi5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEuc3RhcnQg LSBiLnN0YXJ0OyB9KTsKCiAgICAgICAgICAgIGNsZWFuLmZvckVhY2goZnVuY3Rpb24ocikgewog ICAgICAgICAgICAgICAgLy8gVGV4dCB2b3IgZGVtIE1hdGNoCiAgICAgICAgICAgICAgICBpZiAo ci5zdGFydCA+IGxhc3RJZHgpIHsKICAgICAgICAgICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxk KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQuc3Vic3RyaW5nKGxhc3RJZHgsIHIuc3RhcnQp KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBDcm9zc2xpbmstU3Bhbgog ICAgICAgICAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7 CiAgICAgICAgICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICdjcm9zc2xpbmsnOwogICAgICAgICAg ICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IHIub3JpZ2luYWw7CiAgICAgICAgICAgICAgICAvLyBE YXRlbiBmdWVyIFBvcG92ZXIKICAgICAgICAgICAgICAgIHZhciBkb2NzID0gci5lbnRyaWVzLm1h cChmdW5jdGlvbihlKSB7IHJldHVybiBlLmRvYzsgfSk7CiAgICAgICAgICAgICAgICB2YXIgdHlw ZXMgPSByLmVudHJpZXMubWFwKGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGUudHlwZTsgfSk7CiAgICAg ICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnZGF0YS14bGluay1kb2NzJywgSlNPTi5zdHJp bmdpZnkoZG9jcy5tYXAoZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5pZDsgfSkpKTsKICAgICAgICAg ICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdkYXRhLXhsaW5rLXR5cGUnLCB0eXBlc1swXSk7Cgog ICAgICAgICAgICAgICAgc3Bhbi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgZnVuY3Rp b24oZXYpIHsKICAgICAgICAgICAgICAgICAgICBEcml2ZVBvcnRhbC5fc2hvd0Nyb3NzbGlua1Bv cG92ZXIoZXYsIHIuZW50cmllcyk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg IHNwYW4uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIGZ1bmN0aW9uKCkgewogICAgICAg ICAgICAgICAgICAgIERyaXZlUG9ydGFsLl9oaWRlQ3Jvc3NsaW5rUG9wb3ZlcigpOwogICAgICAg ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBzcGFuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNr JywgZnVuY3Rpb24oZXYpIHsKICAgICAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgp OwogICAgICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAg ICAgICAgIC8vIEJlaSBudXIgZWluZW0gVHJlZmZlcjogZGlyZWt0IG9lZmZuZW4KICAgICAgICAg ICAgICAgICAgICBpZiAoZG9jcy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAg ICAgRHJpdmVQb3J0YWwuc2VsZWN0RG9jdW1lbnQoZG9jc1swXS5pZCk7CiAgICAgICAgICAgICAg ICAgICAgICAgIERyaXZlUG9ydGFsLmhpZ2hsaWdodEl0ZW0oZG9jc1swXS5pZCk7CiAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgZnJhZy5h cHBlbmRDaGlsZChzcGFuKTsKICAgICAgICAgICAgICAgIGxhc3RJZHggPSByLmVuZDsKICAgICAg ICAgICAgfSk7CgogICAgICAgICAgICAvLyBSZXN0LVRleHQKICAgICAgICAgICAgaWYgKGxhc3RJ ZHggPCB0ZXh0Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChkb2N1 bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0LnN1YnN0cmluZyhsYXN0SWR4KSkpOwogICAgICAgICAg ICB9CgogICAgICAgICAgICB0ZXh0Tm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnLCB0 ZXh0Tm9kZSk7CiAgICAgICAgfSk7CiAgICB9LAoKICAgIF9zaG93Q3Jvc3NsaW5rUG9wb3Zlcihl diwgZW50cmllcykgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jcm9zc2xpbmtUaW1lb3V0 KTsKICAgICAgICB2YXIgcG9wb3ZlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcm9zc2xp bmtQb3BvdmVyJyk7CiAgICAgICAgaWYgKCFwb3BvdmVyKSByZXR1cm47CgogICAgICAgIC8vIE1l aHJlcmUgRG9rdW1lbnRlIGtvZW5uZW4gZGVuc2VsYmVuIEJlZ3JpZmYgbWF0Y2hlbgogICAgICAg IHZhciBzZWVuID0gbmV3IFNldCgpOwogICAgICAgIHZhciB1bmlxdWVFbnRyaWVzID0gZW50cmll cy5maWx0ZXIoZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoc2Vlbi5oYXMoZS5kb2MuaWQp KSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIHNlZW4uYWRkKGUuZG9jLmlkKTsKICAgICAgICAg ICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSk7CgogICAgICAgIHZhciBodG1sID0gJyc7CiAgICAg ICAgdW5pcXVlRW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGVudHJ5LCBpZHgpIHsKICAgICAgICAg ICAgdmFyIGRvYyA9IGVudHJ5LmRvYzsKICAgICAgICAgICAgdmFyIG1hdGNoVHlwZSA9IGVudHJ5 LnR5cGUgPT09ICd0aXRlbCcgPyAnQXJ0aWtlbHRpdGVsJyA6ICdTY2hsYWd3b3J0JzsKICAgICAg ICAgICAgLy8gVGV4dGF1c3p1ZyAoZXJzdGUgMTIwIFplaWNoZW4gZGVzIEluaGFsdHMsIEhUTUwt VGFncyBlbnRmZXJudCkKICAgICAgICAgICAgdmFyIGV4Y2VycHQgPSAnJzsKICAgICAgICAgICAg aWYgKGRvYy5pbmhhbHQpIHsKICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVh dGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSBEcml2ZVBv cnRhbC5zYW5pdGl6ZUhUTUwoZG9jLmluaGFsdCk7CiAgICAgICAgICAgICAgICBleGNlcnB0ID0g ZGl2LnRleHRDb250ZW50LnN1YnN0cmluZygwLCAxMjApOwogICAgICAgICAgICAgICAgaWYgKGRp di50ZXh0Q29udGVudC5sZW5ndGggPiAxMjApIGV4Y2VycHQgKz0gJy4uLic7CiAgICAgICAgICAg IH0KICAgICAgICAgICAgaWYgKGlkeCA+IDApIGh0bWwgKz0gJzxkaXYgc3R5bGU9ImJvcmRlci10 b3A6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7bWFyZ2luOjhweCAwOyI+PC9kaXY+JzsK ICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ieGxpbmstaGVhZGVyIj48c3BhbiBjbGFz cz0ieGxpbmstaWNvbiI+JiN4MUY1MTc7PC9zcGFuPiAnICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRN TChkb2MudGl0ZWwpICsgJzwvZGl2Pic7CiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9 InhsaW5rLW1ldGEiPic7CiAgICAgICAgICAgIGh0bWwgKz0gJzxzcGFuPicgKyBEcml2ZVBvcnRh bC5lc2NhcGVIVE1MKGRvYy5rYXRlZ29yaWUpICsgJzwvc3Bhbj4nOwogICAgICAgICAgICBodG1s ICs9ICc8c3Bhbj5UcmVmZmVyOiAnICsgbWF0Y2hUeXBlICsgJzwvc3Bhbj4nOwogICAgICAgICAg ICBodG1sICs9ICc8c3Bhbj4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChkb2Muc3RhdHVzIHx8 ICdFbnR3dXJmJykgKyAnPC9zcGFuPic7CiAgICAgICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7CiAg ICAgICAgICAgIGlmIChleGNlcnB0KSB7CiAgICAgICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNs YXNzPSJ4bGluay1leGNlcnB0Ij4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChleGNlcnB0KSAr ICc8L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChkb2Muc2NobGFnd29lcnRl ciAmJiBkb2Muc2NobGFnd29lcnRlci5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICBodG1s ICs9ICc8ZGl2IGNsYXNzPSJ4bGluay10YWdzIj4nICsgZG9jLnNjaGxhZ3dvZXJ0ZXIuc2xpY2Uo MCwgNSkubWFwKGZ1bmN0aW9uKGspIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzxzcGFu PicgKyBEcml2ZVBvcnRhbC5lc2NhcGVIVE1MKGspICsgJzwvc3Bhbj4nOwogICAgICAgICAgICAg ICAgfSkuam9pbignJykgKyAnPC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAo dW5pcXVlRW50cmllcy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxk aXYgY2xhc3M9InhsaW5rLWFjdGlvbiIgb25jbGljaz0iRHJpdmVQb3J0YWwuc2VsZWN0RG9jdW1l bnQoXCcnICsgRHJpdmVQb3J0YWwuZXNjYXBlQXR0cihkb2MuaWQpICsgJ1wnKTtEcml2ZVBvcnRh bC5oaWdobGlnaHRJdGVtKFwnJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoZG9jLmlkKSArICdc Jyk7Ij5BcnRpa2VsIMO2ZmZuZW4g4oaSPC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAgIH0p OwoKICAgICAgICBpZiAodW5pcXVlRW50cmllcy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIGh0 bWwgKz0gJzxkaXYgc3R5bGU9ImJvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdo dCk7bWFyZ2luLXRvcDo4cHg7cGFkZGluZy10b3A6NnB4O2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZh cigtLXRleHQtbXV0ZWQpOyI+JyArIHVuaXF1ZUVudHJpZXMubGVuZ3RoICsgJyB2ZXJ3YW5kdGUg QXJ0aWtlbCBnZWZ1bmRlbjwvZGl2Pic7CiAgICAgICAgfQoKICAgICAgICBwb3BvdmVyLmlubmVy SFRNTCA9IGh0bWw7CiAgICAgICAgcG9wb3Zlci5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJyk7Cgog ICAgICAgIC8vIFBvc2l0aW9uIHJlbGF0aXYgenVtIFRyaWdnZXItRWxlbWVudAogICAgICAgIHZh ciByZWN0ID0gZXYudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHZhciBw b3BXID0gMzIwOwogICAgICAgIHZhciBwb3BIID0gcG9wb3Zlci5vZmZzZXRIZWlnaHQgfHwgMjAw OwogICAgICAgIHZhciBsZWZ0ID0gcmVjdC5sZWZ0OwogICAgICAgIHZhciB0b3AgPSByZWN0LmJv dHRvbSArIDY7CiAgICAgICAgLy8gUmVjaHRzIHJhdXM/IExpbmtzIHZlcnNjaGllYmVuCiAgICAg ICAgaWYgKGxlZnQgKyBwb3BXID4gd2luZG93LmlubmVyV2lkdGggLSAxMCkgewogICAgICAgICAg ICBsZWZ0ID0gd2luZG93LmlubmVyV2lkdGggLSBwb3BXIC0gMTA7CiAgICAgICAgfQogICAgICAg IC8vIFVudGVuIHJhdXM/IFVlYmVyIGRlbSBFbGVtZW50IGFuemVpZ2VuCiAgICAgICAgaWYgKHRv cCArIHBvcEggPiB3aW5kb3cuaW5uZXJIZWlnaHQgLSAxMCkgewogICAgICAgICAgICB0b3AgPSBy ZWN0LnRvcCAtIHBvcEggLSA2OwogICAgICAgIH0KICAgICAgICBwb3BvdmVyLnN0eWxlLmxlZnQg PSBNYXRoLm1heCgxMCwgbGVmdCkgKyAncHgnOwogICAgICAgIHBvcG92ZXIuc3R5bGUudG9wID0g TWF0aC5tYXgoMTAsIHRvcCkgKyAncHgnOwogICAgfSwKCiAgICBfaGlkZUNyb3NzbGlua1BvcG92 ZXIoKSB7CiAgICAgICAgdGhpcy5fY3Jvc3NsaW5rVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rp b24oKSB7CiAgICAgICAgICAgIHZhciBwb3BvdmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo J2Nyb3NzbGlua1BvcG92ZXInKTsKICAgICAgICAgICAgaWYgKHBvcG92ZXIpIHBvcG92ZXIuY2xh c3NMaXN0LnJlbW92ZSgndmlzaWJsZScpOwogICAgICAgIH0sIDIwMCk7CiAgICB9LAoKICAgIC8v IFBydWVmZW4gb2IgZGVyIGFrdHVlbGxlIFVzZXIgUmV2aXNpb25lbi9EaWZmIHNlaGVuIGRhcmY6 CiAgICAvLyAtIExlc2Vtb2R1czogbmllCiAgICAvLyAtIFN1cGVyVXNlciAvIEZhY2hhdWZzaWNo dDogaW1tZXIKICAgIC8vIC0gWnVzdGFlbmRpZ2VyIFJldmlld2VyIGZ1ZXIgZGllIEthdGVnb3Jp ZTogamEKICAgIC8vIC0gTWl0d2lya2VuZGVyIGFtIEFydGlrZWwgKENvbnRyaWJ1dG9yKTogamEK ICAgIC8vIC0gQWxsZSBhbmRlcmVuOiBuZWluCiAgICBfY2FuU2VlUmV2aXNpb25zKGRvYykgewog ICAgICAgIGlmIChEcml2ZUZTLm1vZGUgPT09ICdzdGF0aWMnKSByZXR1cm4gZmFsc2U7CiAgICAg ICAgaWYgKERyaXZlR292ZXJuYW5jZS5pc1N1cGVyVXNlcigpIHx8IERyaXZlR292ZXJuYW5jZS5p c0ZhY2hhdWZzaWNodCgpKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoRHJpdmVHb3Zlcm5hbmNl LmlzUmV2aWV3ZXIoZG9jLmthdGVnb3JpZSkpIHJldHVybiB0cnVlOwogICAgICAgIC8vIE1pdHdp cmtlbmRlOiBVc2VybmFtZSBwcnVlZmVuCiAgICAgICAgdmFyIHVzZXJuYW1lID0gKERyaXZlRlMu ZW52aXJvbiAmJiBEcml2ZUZTLmVudmlyb24udXNlcm5hbWUpID8gRHJpdmVGUy5lbnZpcm9uLnVz ZXJuYW1lLnRvTG93ZXJDYXNlKCkgOiAnJzsKICAgICAgICBpZiAodXNlcm5hbWUgJiYgZG9jLmNv bnRyaWJ1dG9ycykgewogICAgICAgICAgICBpZiAoZG9jLmNvbnRyaWJ1dG9ycy5zb21lKGZ1bmN0 aW9uKGMpIHsgcmV0dXJuIChjLnVzZXJuYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSB1c2Vy bmFtZTsgfSkpIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvLyBFcnN0ZWxsZXIgb2Rl ciBsZXR6dGVyIEJlYXJiZWl0ZXIKICAgICAgICBpZiAodXNlcm5hbWUgJiYgKChkb2MuZXJzdGVs bHRWb24gfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09IHVzZXJuYW1lIHx8IChkb2MuYmVhcmJlaXRl dFZvbiB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gdXNlcm5hbWUpKSByZXR1cm4gdHJ1ZTsKICAg ICAgICByZXR1cm4gZmFsc2U7CiAgICB9LAoKICAgIF9yZW5kZXJDaGlsZEFydGljbGVzKGRvYykg ewogICAgICAgIGNvbnN0IGNoaWxkcmVuID0gRHJpdmVGUy5kb2N1bWVudHMuZmlsdGVyKGZ1bmN0 aW9uKGQpeyByZXR1cm4gZC5wYXJlbnRJZCA9PT0gZG9jLmlkOyB9KTsKICAgICAgICBpZiAoY2hp bGRyZW4ubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7CiAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNz PSJtZXRhLWl0ZW0iIHN0eWxlPSJmbGV4LWJhc2lzOjEwMCU7Ij48ZGl2IGNsYXNzPSJtZXRhLWxh YmVsIj5VbnRlcmFydGlrZWw8L2Rpdj48ZGl2PicgKwogICAgICAgICAgICBjaGlsZHJlbi5tYXAo ZnVuY3Rpb24oYyl7IHJldHVybiAnPGEgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtaGVhZGluZyk7 Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLXJpZ2h0OjhweDsiIG9uY2xpY2s9IkRyaXZlUG9ydGFsLnNl bGVjdERvY3VtZW50KFwnJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoYy5pZCkgKyAnXCcpIj4n ICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChjLnRpdGVsKSArICc8L2E+JzsgfSkuam9pbignJykg KwogICAgICAgICc8L2Rpdj48L2Rpdj4nOwogICAgfSwKCiAgICByZW5kZXJDb250cmlidXRvcnMo ZG9jKSB7CiAgICAgICAgaWYgKCFkb2MuY29udHJpYnV0b3JzIHx8IGRvYy5jb250cmlidXRvcnMu bGVuZ3RoID09PSAwKSByZXR1cm4gJyc7CgogICAgICAgIC8vIEdld2ljaHR1bmdlbiBiZXJlY2hu ZW4KICAgICAgICBjb25zdCByb2xlV2VpZ2h0cyA9IHsgYXV0b3I6IDMsIHJlZGFrdGlvbjogMSwg cmV2aWV3OiAxLjUgfTsKICAgICAgICBsZXQgdG90YWxXZWlnaHQgPSAwOwogICAgICAgIGNvbnN0 IHdlaWdodGVkID0gZG9jLmNvbnRyaWJ1dG9ycy5tYXAoYyA9PiB7CiAgICAgICAgICAgIGNvbnN0 IHcgPSAoYy5lbnRyaWVzIHx8IDEpICogKHJvbGVXZWlnaHRzW2Mucm9sZV0gfHwgMSk7CiAgICAg ICAgICAgIHRvdGFsV2VpZ2h0ICs9IHc7CiAgICAgICAgICAgIHJldHVybiB7IC4uLmMsIHdlaWdo dDogdyB9OwogICAgICAgIH0pOwoKICAgICAgICBjb25zdCByb2xlTGFiZWxzID0geyBhdXRvcjog J0F1dG9yJywgcmVkYWt0aW9uOiAnUmVkYWt0aW9uJywgcmV2aWV3OiAnUmV2aWV3JyB9OwoKICAg ICAgICBsZXQgaHRtbCA9ICc8ZGl2IGNsYXNzPSJjb250cmlidXRvcnMtc2VjdGlvbiI+PGgzPk1p dHdpcmtlbmRlPC9oMz4nOwogICAgICAgIHdlaWdodGVkCiAgICAgICAgICAgIC5zb3J0KChhLCBi KSA9PiBiLndlaWdodCAtIGEud2VpZ2h0KQogICAgICAgICAgICAuZm9yRWFjaChjID0+IHsKICAg ICAgICAgICAgICAgIGNvbnN0IHBjdCA9IHRvdGFsV2VpZ2h0ID4gMCA/IE1hdGgucm91bmQoKGMu d2VpZ2h0IC8gdG90YWxXZWlnaHQpICogMTAwKSA6IDA7CiAgICAgICAgICAgICAgICBjb25zdCBy b2xlID0gYy5yb2xlIHx8ICdhdXRvcic7CiAgICAgICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNs YXNzPSJjb250cmlidXRvci1yb3ciPicgKwogICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFz cz0iY29udHJpYnV0b3ItbmFtZSI+JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoYy51c2VybmFt ZSkgKyAnPC9zcGFuPicgKwogICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz0iY29udHJp YnV0b3Itcm9sZSAnICsgcm9sZSArICciPicgKyAocm9sZUxhYmVsc1tyb2xlXSB8fCByb2xlKSAr ICc8L3NwYW4+JyArCiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIHN0eWxlPSJmb250LXNpemU6 MTFweDtjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTt3aWR0aDoyNHB4O3RleHQtYWxpZ246cmlnaHQ7 ZmxleC1zaHJpbms6MDsiPicgKyAoYy5lbnRyaWVzID4gMSA/IGMuZW50cmllcyArICd4JyA6ICcn KSArICc8L3NwYW4+JyArCiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImNvbnRyaWJ1 dG9yLWJhciI+PGRpdiBjbGFzcz0iY29udHJpYnV0b3ItYmFyLWZpbGwgJyArIHJvbGUgKyAnIiBz dHlsZT0id2lkdGg6JyArIHBjdCArICclOyI+PC9kaXY+PC9kaXY+JyArCiAgICAgICAgICAgICAg ICAgICAgJzxzcGFuIGNsYXNzPSJjb250cmlidXRvci1wY3QiPicgKyBwY3QgKyAnJTwvc3Bhbj4n ICsKICAgICAgICAgICAgICAgICc8L2Rpdj4nOwogICAgICAgICAgICB9KTsKICAgICAgICBodG1s ICs9ICc8L2Rpdj4nOwogICAgICAgIHJldHVybiBodG1sOwogICAgfSwKCiAgICByZW5kZXJSZXZp ZXdIaXN0b3J5KGRvYykgewogICAgICAgIC8vIFBydWVmdW5nc3ZlcmxhdWYgbnVyIGZ1ZXIgU1Us IEZBIHVuZCB6dXN0YWVuZGlnZSBSZXZpZXdlciBhbnplaWdlbgogICAgICAgIGlmICghRHJpdmVH b3Zlcm5hbmNlLmlzU3VwZXJVc2VyKCkgJiYgIURyaXZlR292ZXJuYW5jZS5pc0ZhY2hhdWZzaWNo dCgpICYmICFEcml2ZUdvdmVybmFuY2UuaXNSZXZpZXdlcihkb2Mua2F0ZWdvcmllKSkgcmV0dXJu ICcnOwoKICAgICAgICBjb25zdCBnb3YgPSBkb2MuZ292ZXJuYW5jZTsKICAgICAgICBpZiAoIWdv diB8fCAhZ292LnJldmlld0hpc3RvcnkgfHwgZ292LnJldmlld0hpc3RvcnkubGVuZ3RoID09PSAw KSByZXR1cm4gJyc7CgogICAgICAgIGxldCBodG1sID0gJzxkaXYgY2xhc3M9InJldmlldy1oaXN0 b3J5Ij48aDM+UHLDvGZ1bmdzdmVybGF1ZjwvaDM+JzsKICAgICAgICBnb3YucmV2aWV3SGlzdG9y eS5zbGljZSgpLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uKGVudHJ5LCBpZHgpIHsKICAgICAg ICAgICAgdmFyIGFjdGlvbkxhYmVsID0gZW50cnkuYWN0aW9uID09PSAnYXBwcm92ZWQnID8gJ0Zy ZWlnZWdlYmVuJyA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuYWN0aW9u ID09PSAncmVqZWN0ZWQnID8gJ0FiZ2VsZWhudCcgOgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVudHJ5LmFjdGlvbiA9PT0gJ3N1Ym1pdHRlZCcgPyAnWnVyIFByw7xmdW5nJyA6IGVu dHJ5LmFjdGlvbjsKICAgICAgICAgICAgdmFyIGRhdGUgPSBmb3JtYXREYXRlVGltZShlbnRyeS5h dCk7CiAgICAgICAgICAgIHZhciBjb21tZW50SHRtbCA9ICcnOwogICAgICAgICAgICBpZiAoZW50 cnkuY29tbWVudCkgewogICAgICAgICAgICAgICAgLy8gS29tbWVudGFyIGFscyBzaWNoZXJlcyBI VE1MIHJlbmRlcm4gKGVybGF1YnQ6IGIsIGksIHUsIHVsLCBsaSwgYnIsIGZvbnQpCiAgICAgICAg ICAgICAgICAvLyBBbGxlcyBhbmRlcmU6IFRhZ3MgYWxzIGdlcmVuZGVydGVuIFRleHQgemVpZ2Vu CiAgICAgICAgICAgICAgICB2YXIgc2FmZUNvbW1lbnQgPSBlbnRyeS5jb21tZW50OwogICAgICAg ICAgICAgICAgLy8gRmFsbHMgZGVyIEtvbW1lbnRhciByYXctSFRNTC1UYWdzIGFscyBUZXh0IGVu dGhhZWx0IChhbHRlIEVpbnRyYWVnZSksIGVzY2FwZW4KICAgICAgICAgICAgICAgIGlmIChzYWZl Q29tbWVudC5pbmRleE9mKCc8c3BhbiBzdHlsZT0nKSA+PSAwIHx8IHNhZmVDb21tZW50LmluZGV4 T2YoJzxkaXYnKSA+PSAwIHx8IHNhZmVDb21tZW50LmluZGV4T2YoJzxhIGhyZWY9JykgPj0gMCkg ewogICAgICAgICAgICAgICAgICAgIC8vIEFsdGVzIHVuc2FuaXRpZXJ0ZXMgSFRNTDogQWxzIEts YXJ0ZXh0IGRhcnN0ZWxsZW4KICAgICAgICAgICAgICAgICAgICB2YXIgdG1wRGl2ID0gZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgICAgICAgICAgdG1wRGl2LmlubmVy SFRNTCA9IHNhZmVDb21tZW50OwogICAgICAgICAgICAgICAgICAgIHNhZmVDb21tZW50ID0gRHJp dmVQb3J0YWwuZXNjYXBlSFRNTCh0bXBEaXYudGV4dENvbnRlbnQpOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgdmFyIHVpZCA9ICdyY18nICsgaWR4OwogICAgICAgICAgICAgICAg Y29tbWVudEh0bWwgPSAnPGRpdiBzdHlsZT0iZmxleC1iYXNpczoxMDAlO21hcmdpbi10b3A6NHB4 OyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzxkaXYgaWQ9IicgKyB1aWQgKyAnIiBzdHlsZT0i YmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkLWFsdCk7cGFkZGluZzowIDEwcHg7Ym9yZGVyLXJhZGl1 czo0cHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkICNkYzM1NDU7Zm9udC1zaXplOjEycHg7Y29sb3I6 dmFyKC0tdGV4dC1wcmltYXJ5KTtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4O292ZXJmbG93 OmhpZGRlbjtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmhlaWdodCAwLjNzO3doaXRlLXNwYWNl Om5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzOyIgb25jbGljaz0idmFyIGVsPWRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKFwnJyArIHVpZCArICdcJyk7aWYoZWwuc3R5bGUuaGVpZ2h0PT09XCdh dXRvXCcpe2VsLnN0eWxlLmhlaWdodD1cJzI4cHhcJztlbC5zdHlsZS5saW5lSGVpZ2h0PVwnMjhw eFwnO2VsLnN0eWxlLndoaXRlU3BhY2U9XCdub3dyYXBcJztlbC5zdHlsZS5wYWRkaW5nPVwnMCAx MHB4XCc7fWVsc2V7ZWwuc3R5bGUuaGVpZ2h0PVwnYXV0b1wnO2VsLnN0eWxlLmxpbmVIZWlnaHQ9 XCcxLjVcJztlbC5zdHlsZS53aGl0ZVNwYWNlPVwnbm9ybWFsXCc7ZWwuc3R5bGUucGFkZGluZz1c JzhweCAxMHB4XCc7fSIgdGl0bGU9IktsaWNrZSB6dW0gQXVmLS9adWtsYXBwZW4iPicgKwogICAg ICAgICAgICAgICAgICAgICAgICBzYWZlQ29tbWVudCArCiAgICAgICAgICAgICAgICAgICAgJzwv ZGl2PicgKwogICAgICAgICAgICAgICAgJzwvZGl2Pic7CiAgICAgICAgICAgIH0KICAgICAgICAg ICAgaHRtbCArPSAnPGRpdiBjbGFzcz0icmV2aWV3LWhpc3RvcnktaXRlbSIgc3R5bGU9ImZsZXgt d3JhcDp3cmFwOyI+JyArCiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9ImFjdGlvbi1iYWRn ZSAnICsgZW50cnkuYWN0aW9uICsgJyI+JyArIGFjdGlvbkxhYmVsICsgJzwvc3Bhbj4nICsKICAg ICAgICAgICAgICAgICc8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1zZWNvbmRhcnkpOyI+ JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoZW50cnkuYnkgfHwgJy0nKSArICc8L3NwYW4+JyAr CiAgICAgICAgICAgICAgICAnPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtbXV0ZWQpOyI+ JyArIGRhdGUgKyAnPC9zcGFuPicgKwogICAgICAgICAgICAgICAgY29tbWVudEh0bWwgKwogICAg ICAgICAgICAnPC9kaXY+JzsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gaHRtbCArICc8L2Rp dj4nOwogICAgfSwKCiAgICBfZGVsZXRlRG9jSWQ6IG51bGwsCgogICAgYXN5bmMgZGVsZXRlRG9j dW1lbnQoZG9jSWQpIHsKICAgICAgICBpZiAoRHJpdmVGUy5yZWFkT25seSkgewogICAgICAgICAg ICB2YXIgZ3JhbnRlZCA9IGF3YWl0IERyaXZlRlMuZW5zdXJlV3JpdGVBY2Nlc3MoKTsKICAgICAg ICAgICAgaWYgKCFncmFudGVkKSByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBkb2MgPSBE cml2ZUZTLmRvY3VtZW50cy5maW5kKGZ1bmN0aW9uKGQpeyByZXR1cm4gZC5pZCA9PT0gZG9jSWQ7 IH0pOwogICAgICAgIGlmICghZG9jKSByZXR1cm47CiAgICAgICAgdGhpcy5fZGVsZXRlRG9jSWQg PSBkb2NJZDsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlQ29uZmlybVRl eHQnKS50ZXh0Q29udGVudCA9ICdEb2t1bWVudDog4oCeJyArIGRvYy50aXRlbCArICciICgnICsg ZG9jLmthdGVnb3JpZSArICcpJzsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVs ZXRlQ29uZmlybUlucHV0JykudmFsdWUgPSAnJzsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCgnZGVsZXRlQ29uZmlybUJ0bicpLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICBkb2N1bWVu dC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlQ29uZmlybU1vZGFsJykuY2xhc3NMaXN0LmFkZCgnYWN0 aXZlJyk7CiAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlbGV0 ZUNvbmZpcm1JbnB1dCcpOwogICAgICAgIGlucHV0LmZvY3VzKCk7CiAgICAgICAgaW5wdXQub25p bnB1dCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn ZGVsZXRlQ29uZmlybUJ0bicpLmRpc2FibGVkID0gIWlucHV0LnZhbHVlLnRyaW0oKTsKICAgICAg ICB9OwogICAgfSwKCiAgICBjYW5jZWxEZWxldGUoKSB7CiAgICAgICAgdGhpcy5fZGVsZXRlRG9j SWQgPSBudWxsOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWxldGVDb25maXJt TW9kYWwnKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgIH0sCgogICAgYXN5bmMgY29u ZmlybURlbGV0ZSgpIHsKICAgICAgICB2YXIgZG9jSWQgPSB0aGlzLl9kZWxldGVEb2NJZDsKICAg ICAgICBpZiAoIWRvY0lkKSByZXR1cm47CiAgICAgICAgdmFyIG53S2VubnVuZyA9IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCdkZWxldGVDb25maXJtSW5wdXQnKS52YWx1ZS50cmltKCk7CiAgICAg ICAgaWYgKCFud0tlbm51bmcpIHsgc2hvd1RvYXN0KCdCaXR0ZSBOVy1LZW5udW5nIGVpbmdlYmVu JywgJ3dhcm5pbmcnKTsgcmV0dXJuOyB9CgogICAgICAgIHZhciBkb2MgPSBEcml2ZUZTLmRvY3Vt ZW50cy5maW5kKGZ1bmN0aW9uKGQpeyByZXR1cm4gZC5pZCA9PT0gZG9jSWQ7IH0pOwogICAgICAg IGlmICghZG9jKSByZXR1cm47CgogICAgICAgIC8vIFNvZnQtRGVsZXRlOiBJbiBQYXBpZXJrb3Ji IHZlcnNjaGllYmVuIHN0YXR0IHBoeXNpc2NoIGzDtnNjaGVuCiAgICAgICAgdmFyIHRyYXNoRW50 cnkgPSB7CiAgICAgICAgICAgIGRvYzogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkb2MpKSwK ICAgICAgICAgICAgZGVsZXRlZEJ5OiBud0tlbm51bmcsCiAgICAgICAgICAgIGRlbGV0ZWRBdDog bmV3IERhdGUoKS50b0lTT1N0cmluZygpLAogICAgICAgICAgICBleHBpcmVzQXQ6IG5ldyBEYXRl KERhdGUubm93KCkgKyAyOCAqIDI0ICogNjAgKiA2MCAqIDEwMDApLnRvSVNPU3RyaW5nKCkKICAg ICAgICB9OwoKICAgICAgICAvLyBQYXBpZXJrb3JiIGxhZGVuL2Vyc3RlbGxlbgogICAgICAgIHZh ciB0cmFzaCA9IGF3YWl0IHRoaXMuX2xvYWRUcmFzaCgpOwogICAgICAgIHRyYXNoLnB1c2godHJh c2hFbnRyeSk7CiAgICAgICAgYXdhaXQgdGhpcy5fc2F2ZVRyYXNoKHRyYXNoKTsKCiAgICAgICAg Ly8gTMO2c2NoLUxvZwogICAgICAgIHZhciBsb2dFbnRyeSA9IHsgYWN0aW9uOiAnZGVsZXRlJywg ZG9jSWQ6IGRvY0lkLCB0aXRlbDogZG9jLnRpdGVsLCBrYXRlZ29yaWU6IGRvYy5rYXRlZ29yaWUs IGRlbGV0ZWRCeTogbndLZW5udW5nLCB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmco KSB9OwogICAgICAgIGF3YWl0IHRoaXMuX2FwcGVuZERlbGV0ZUxvZyhsb2dFbnRyeSk7CgogICAg ICAgIC8vIERva3VtZW50IHBoeXNpc2NoIGzDtnNjaGVuCiAgICAgICAgdmFyIHN1Y2Nlc3MgPSBh d2FpdCBEcml2ZUZTLmRlbGV0ZURvY3VtZW50KGRvY0lkKTsKICAgICAgICBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgnZGVsZXRlQ29uZmlybU1vZGFsJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZl Jyk7CiAgICAgICAgdGhpcy5fZGVsZXRlRG9jSWQgPSBudWxsOwoKICAgICAgICBpZiAoc3VjY2Vz cykgewogICAgICAgICAgICB0aGlzLnNlbGVjdGVkRG9jSWQgPSBudWxsOwogICAgICAgICAgICBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnREZXRhaWwnKS5pbm5lckhUTUwgPSAnPGRp diBjbGFzcz0iZGV0YWlsLWVtcHR5Ij48cD5Eb2t1bWVudCBnZWzDtnNjaHQuIFfDpGhsZSBlaW4g YW5kZXJlcyBEb2t1bWVudC48L3A+PC9kaXY+JzsKICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTsK ICAgICAgICAgICAgc2hvd1RvYXN0KCdEb2t1bWVudCBnZWzDtnNjaHQgKDI4IFRhZ2Ugd2llZGVy aGVyc3RlbGxiYXIpJywgJ3N1Y2Nlc3MnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBz aG93VG9hc3QoJ0ZlaGxlciBiZWltIEzDtnNjaGVuJywgJ2Vycm9yJyk7CiAgICAgICAgfQogICAg fSwKCiAgICBhc3luYyBfbG9hZFRyYXNoKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlm IChEcml2ZUZTLm1vZGUgPT09ICdzZXJ2ZXInKSB7CiAgICAgICAgICAgICAgICB2YXIgcmVzID0g YXdhaXQgZmV0Y2goJy9kYXRhLy50cmFzaC5qc29uJyk7CiAgICAgICAgICAgICAgICBpZiAocmVz Lm9rKSByZXR1cm4gYXdhaXQgcmVzLmpzb24oKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChEcml2 ZUZTLm1vZGUgPT09ICdmaWxlc3lzdGVtJyAmJiBEcml2ZUZTLl9kYXRhSGFuZGxlKSB7CiAgICAg ICAgICAgICAgICB2YXIgZmggPSBhd2FpdCBEcml2ZUZTLl9kYXRhSGFuZGxlLmdldEZpbGVIYW5k bGUoJy50cmFzaC5qc29uJyk7CiAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IGF3YWl0IGZoLmdl dEZpbGUoKTsKICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGF3YWl0IGZpbGUudGV4 dCgpKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2goZSkge30KICAgICAgICByZXR1cm4g W107CiAgICB9LAoKICAgIGFzeW5jIF9zYXZlVHJhc2godHJhc2gpIHsKICAgICAgICAvLyBBYmdl bGF1ZmVuZSBlbnRmZXJuZW4gKD4yOCBUYWdlKQogICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgp LnRvSVNPU3RyaW5nKCk7CiAgICAgICAgdHJhc2ggPSB0cmFzaC5maWx0ZXIoZnVuY3Rpb24odCl7 IHJldHVybiB0LmV4cGlyZXNBdCA+IG5vdzsgfSk7CiAgICAgICAgaWYgKERyaXZlRlMubW9kZSA9 PT0gJ3NlcnZlcicpIHsKICAgICAgICAgICAgYXdhaXQgZmV0Y2goJy9hcGkvd3JpdGUnLCB7IG1l dGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb247 IGNoYXJzZXQ9dXRmLTgnfSwKICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsg cGF0aDogJ2RhdGEvLnRyYXNoLmpzb24nLCBkYXRhOiB0cmFzaCB9KSB9KTsKICAgICAgICB9IGVs c2UgaWYgKERyaXZlRlMubW9kZSA9PT0gJ2ZpbGVzeXN0ZW0nICYmIERyaXZlRlMuX2RhdGFIYW5k bGUpIHsKICAgICAgICAgICAgdmFyIGZoID0gYXdhaXQgRHJpdmVGUy5fZGF0YUhhbmRsZS5nZXRG aWxlSGFuZGxlKCcudHJhc2guanNvbicsIHsgY3JlYXRlOiB0cnVlIH0pOwogICAgICAgICAgICB2 YXIgd3JpdGFibGUgPSBhd2FpdCBmaC5jcmVhdGVXcml0YWJsZSgpOwogICAgICAgICAgICBhd2Fp dCB3cml0YWJsZS53cml0ZShKU09OLnN0cmluZ2lmeSh0cmFzaCwgbnVsbCwgMikpOwogICAgICAg ICAgICBhd2FpdCB3cml0YWJsZS5jbG9zZSgpOwogICAgICAgIH0KICAgIH0sCgogICAgYXN5bmMg X2FwcGVuZERlbGV0ZUxvZyhlbnRyeSkgewogICAgICAgIHZhciBsb2cgPSBbXTsKICAgICAgICB0 cnkgewogICAgICAgICAgICBpZiAoRHJpdmVGUy5tb2RlID09PSAnc2VydmVyJykgewogICAgICAg ICAgICAgICAgdmFyIHJlcyA9IGF3YWl0IGZldGNoKCcvZGF0YS8uZGVsZXRlLWxvZy5qc29uJyk7 CiAgICAgICAgICAgICAgICBpZiAocmVzLm9rKSBsb2cgPSBhd2FpdCByZXMuanNvbigpOwogICAg ICAgICAgICB9IGVsc2UgaWYgKERyaXZlRlMubW9kZSA9PT0gJ2ZpbGVzeXN0ZW0nICYmIERyaXZl RlMuX2RhdGFIYW5kbGUpIHsKICAgICAgICAgICAgICAgIHZhciBmaCA9IGF3YWl0IERyaXZlRlMu X2RhdGFIYW5kbGUuZ2V0RmlsZUhhbmRsZSgnLmRlbGV0ZS1sb2cuanNvbicpOwogICAgICAgICAg ICAgICAgdmFyIGZpbGUgPSBhd2FpdCBmaC5nZXRGaWxlKCk7CiAgICAgICAgICAgICAgICBsb2cg PSBKU09OLnBhcnNlKGF3YWl0IGZpbGUudGV4dCgpKTsKICAgICAgICAgICAgfQogICAgICAgIH0g Y2F0Y2goZSkge30KICAgICAgICBsb2cucHVzaChlbnRyeSk7CiAgICAgICAgaWYgKERyaXZlRlMu bW9kZSA9PT0gJ3NlcnZlcicpIHsKICAgICAgICAgICAgYXdhaXQgZmV0Y2goJy9hcGkvd3JpdGUn LCB7IG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9u L2pzb247IGNoYXJzZXQ9dXRmLTgnfSwKICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5n aWZ5KHsgcGF0aDogJ2RhdGEvLmRlbGV0ZS1sb2cuanNvbicsIGRhdGE6IGxvZyB9KSB9KTsKICAg ICAgICB9IGVsc2UgaWYgKERyaXZlRlMubW9kZSA9PT0gJ2ZpbGVzeXN0ZW0nICYmIERyaXZlRlMu X2RhdGFIYW5kbGUpIHsKICAgICAgICAgICAgdmFyIGZoMiA9IGF3YWl0IERyaXZlRlMuX2RhdGFI YW5kbGUuZ2V0RmlsZUhhbmRsZSgnLmRlbGV0ZS1sb2cuanNvbicsIHsgY3JlYXRlOiB0cnVlIH0p OwogICAgICAgICAgICB2YXIgd3JpdGFibGUgPSBhd2FpdCBmaDIuY3JlYXRlV3JpdGFibGUoKTsK ICAgICAgICAgICAgYXdhaXQgd3JpdGFibGUud3JpdGUoSlNPTi5zdHJpbmdpZnkobG9nLCBudWxs LCAyKSk7CiAgICAgICAgICAgIGF3YWl0IHdyaXRhYmxlLmNsb3NlKCk7CiAgICAgICAgfQogICAg fSwKCiAgICBhc3luYyBzaG93VHJhc2goKSB7CiAgICAgICAgdmFyIHRyYXNoID0gYXdhaXQgdGhp cy5fbG9hZFRyYXNoKCk7CiAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmco KTsKICAgICAgICB0cmFzaCA9IHRyYXNoLmZpbHRlcihmdW5jdGlvbih0KXsgcmV0dXJuIHQuZXhw aXJlc0F0ID4gbm93OyB9KTsKICAgICAgICB2YXIgaHRtbCA9ICcnOwogICAgICAgIGlmICh0cmFz aC5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgaHRtbCA9ICc8ZGl2IGNsYXNzPSJnb3YtZW1w dHkiPlBhcGllcmtvcmIgaXN0IGxlZXI8L2Rpdj4nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAg ICAgIHRyYXNoLmZvckVhY2goZnVuY3Rpb24odCwgaSkgewogICAgICAgICAgICAgICAgdmFyIGRh eXNMZWZ0ID0gTWF0aC5jZWlsKChuZXcgRGF0ZSh0LmV4cGlyZXNBdCkgLSBuZXcgRGF0ZSgpKSAv ICgyNCo2MCo2MCoxMDAwKSk7CiAgICAgICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJ0 cmFzaC1pdGVtIj4nICsKICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0idHJhc2gtaXRl bS10aXRsZSI+JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwodC5kb2MudGl0ZWwpICsgJzwvZGl2 PicgKwogICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJ0cmFzaC1pdGVtLW1ldGEiPkdl bMO2c2NodCB2b24gJyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwodC5kZWxldGVkQnkpICsgJyBh bSAnICsgZm9ybWF0RGF0ZVRpbWUodC5kZWxldGVkQXQpICsgJyB8IE5vY2ggJyArIGRheXNMZWZ0 ICsgJyBUYWdlIHZlcmbDvGdiYXI8L2Rpdj4nICsKICAgICAgICAgICAgICAgICAgICAnPGRpdiBj bGFzcz0idHJhc2gtaXRlbS1hY3Rpb25zIj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxi dXR0b24gY2xhc3M9ImJ0bi1yZXN0b3JlIiBvbmNsaWNrPSJEcml2ZVBvcnRhbC5yZXN0b3JlRnJv bVRyYXNoKCcgKyBpICsgJykiPldpZWRlcmhlcnN0ZWxsZW48L2J1dHRvbj4nICsKICAgICAgICAg ICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAnPC9kaXY+JzsKICAgICAgICAg ICAgfSk7CiAgICAgICAgfQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVu dERldGFpbCcpLmlubmVySFRNTCA9CiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjIw cHg7Ij48aDIgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtaGVhZGluZyk7bWFyZ2luLWJvdHRvbTox NXB4OyI+UGFwaWVya29yYiAoJyArIHRyYXNoLmxlbmd0aCArICcpPC9oMj4nICsgaHRtbCArICc8 L2Rpdj4nOwogICAgfSwKCiAgICBhc3luYyByZXN0b3JlRnJvbVRyYXNoKGluZGV4KSB7CiAgICAg ICAgdmFyIHRyYXNoID0gYXdhaXQgdGhpcy5fbG9hZFRyYXNoKCk7CiAgICAgICAgaWYgKCF0cmFz aFtpbmRleF0pIHJldHVybjsKICAgICAgICB2YXIgZW50cnkgPSB0cmFzaFtpbmRleF07CiAgICAg ICAgdmFyIGRvYyA9IGVudHJ5LmRvYzsKICAgICAgICB2YXIgc2F2ZVJlc3VsdCA9IGF3YWl0IERy aXZlRlMuc2F2ZURvY3VtZW50KGRvYyk7CiAgICAgICAgaWYgKHNhdmVSZXN1bHQgPT09IHRydWUp IHsKICAgICAgICAgICAgdHJhc2guc3BsaWNlKGluZGV4LCAxKTsKICAgICAgICAgICAgYXdhaXQg dGhpcy5fc2F2ZVRyYXNoKHRyYXNoKTsKICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTsKICAgICAg ICAgICAgdGhpcy5zZWxlY3REb2N1bWVudChkb2MuaWQpOwogICAgICAgICAgICBzaG93VG9hc3Qo J0Rva3VtZW50IOKAnicgKyBkb2MudGl0ZWwgKyAnIiB3aWVkZXJoZXJnZXN0ZWxsdCcsICdzdWNj ZXNzJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2hvd1RvYXN0KCdGZWhsZXIgYmVp bSBXaWVkZXJoZXJzdGVsbGVuJywgJ2Vycm9yJyk7CiAgICAgICAgfQogICAgfSwKCiAgICAvLyBY U1MtU2NodXR6OiBCZXJlaW5pZ3QgWmVpY2hlbmtldHRlbiBiZXZvciBzaWUgYWxzIEhUTUwgZGFy Z2VzdGVsbHQgd2VyZGVuLgogICAgICAgIC8vIGVzY2FwZUhUTUwoKSAtIGZ1ZXIgRWxlbWVudC1J bmhhbHRlICh0ZXh0Q29udGVudC1iYXNpZXJ0LCBicm93c2Vyc2ljaGVyKQogICAgICAgIC8vIGVz Y2FwZUF0dHIoKSAtIGZ1ZXIgSFRNTC1BdHRyaWJ1dHdlcnRlIChtYW51ZWxsZXMgRXNjYXBpbmcg YWxsZXIgcmVsZXZhbnRlbiBaZWljaGVuKQogICAgICAgIC8vIEJlaWRlIEZ1bmt0aW9uZW4gd2Vy ZGVuIGluIERyaXZlUG9ydGFsIGJlaSBqZWRlciBEYXJzdGVsbHVuZyB2b24gQmVudXR6ZXJkYXRl biBhdWZnZXJ1ZmVuLgogICAgZXNjYXBlSFRNTChzdHIpIHsKICAgICAgICBpZiAoIXN0cikgcmV0 dXJuICcnOwogICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp OwogICAgICAgIGRpdi50ZXh0Q29udGVudCA9IHN0cjsKICAgICAgICByZXR1cm4gZGl2LmlubmVy SFRNTDsKICAgIH0sCgogICAgZXNjYXBlQXR0cihzdHIpIHsKICAgICAgICBpZiAoIXN0cikgcmV0 dXJuICcnOwogICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNl KC8iL2csICcmcXVvdDsnKS5yZXBsYWNlKC8nL2csICcmIzM5OycpLnJlcGxhY2UoLzwvZywgJyZs dDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7JykucmVwbGFjZSgvYC9nLCAnJiM5NjsnKTsKICAgIH0s CgogICAgLy8gU2FuaXRpemUtRnVua3Rpb24gZnVlciBSaWNoLVRleHQtSW5oYWx0ZSAoZG9jLmlu aGFsdCkuCiAgICAvLyBFbnRmZXJudCBnZWZhZWhybGljaGUgRWxlbWVudGUgKHNjcmlwdCwgaWZy YW1lLCBvYmplY3QsIGVtYmVkLCBmb3JtLCBldGMuKQogICAgLy8gdW5kIGFsbGUgRXZlbnQtSGFu ZGxlciAob25jbGljaywgb25lcnJvciwgb25sb2FkLCAuLi4pIHNvd2llIGphdmFzY3JpcHQ6LVVS THMsCiAgICAvLyBiZWhhZWx0IGFiZXIgYWxsZSBGb3JtYXRpZXJ1bmdlbiAoYiwgaSwgdSwgaDEt aDYsIHAsIHVsLCBvbCwgdGFibGUsIGltZywgYSwgZXRjLikKICAgIHNhbml0aXplSFRNTChodG1s KSB7CiAgICAgICAgaWYgKCFodG1sKSByZXR1cm4gJyc7CiAgICAgICAgdmFyIGRvYyA9IG5ldyBE T01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpOwogICAgICAgIC8v IEdlZmFlaHJsaWNoZSBUYWdzIGtvbXBsZXR0IGVudGZlcm5lbgogICAgICAgIC8vIGlmcmFtZXMg d2VyZGVuIG51ciBlbnRmZXJudCB3ZW5uIHNpZSBOSUNIVCBpbiBlaW5lbSBEUklWRS1laWdlbmVu IFBERi1Db250YWluZXIgc3RlY2tlbgogICAgICAgIC8vIChkcml2ZS1tZWRpYS1wZGYtaWZyYW1l KSB1bmQga2VpbmUgbG9rYWxlIHNyYyBoYWJlbgogICAgICAgIHZhciBkYW5nZXJvdXNUYWdzID0g WydzY3JpcHQnLCdvYmplY3QnLCdlbWJlZCcsJ2Zvcm0nLCdtYXRoJywnYmFzZScsJ2xpbmsnLCdt ZXRhJywnbm9zY3JpcHQnLCdzdHlsZSddOwogICAgICAgIGRhbmdlcm91c1RhZ3MuZm9yRWFjaChm dW5jdGlvbih0YWcpIHsKICAgICAgICAgICAgZG9jLnF1ZXJ5U2VsZWN0b3JBbGwodGFnKS5mb3JF YWNoKGZ1bmN0aW9uKGVsKSB7IGVsLnJlbW92ZSgpOyB9KTsKICAgICAgICB9KTsKICAgICAgICAv LyBpZnJhbWVzIHNlcGFyYXQ6IG51ciBmcmVtZGUvZ2VmYWVocmxpY2hlIGVudGZlcm5lbiwgbG9r YWxlIFBERi1FaW5iZXR0dW5nZW4gYmVpYmVoYWx0ZW4KICAgICAgICBkb2MucXVlcnlTZWxlY3Rv ckFsbCgnaWZyYW1lJykuZm9yRWFjaChmdW5jdGlvbihlbCkgewogICAgICAgICAgICB2YXIgc3Jj ID0gKGVsLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwog ICAgICAgICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50RWxlbWVudDsKICAgICAgICAgICAgdmFy IGlzRHJpdmVQZGYgPSBwYXJlbnQgJiYgcGFyZW50LmNsYXNzTGlzdCAmJiBwYXJlbnQuY2xhc3NM aXN0LmNvbnRhaW5zKCdkcml2ZS1tZWRpYS1wZGYtaWZyYW1lJyk7CiAgICAgICAgICAgIHZhciBp c0xvY2FsU3JjID0gc3JjLnN0YXJ0c1dpdGgoJ21lZGlhLycpIHx8IHNyYy5zdGFydHNXaXRoKCcv bWVkaWEvJykgfHwgc3JjLnN0YXJ0c1dpdGgoJy4vbWVkaWEvJyk7CiAgICAgICAgICAgIGlmICgh aXNEcml2ZVBkZiAmJiAhaXNMb2NhbFNyYykgZWwucmVtb3ZlKCk7CiAgICAgICAgfSk7CiAgICAg ICAgLy8gQWxsZSBFdmVudC1IYW5kbGVyIHVuZCBqYXZhc2NyaXB0Oi1VUkxzIGVudGZlcm5lbgog ICAgICAgIGRvYy5xdWVyeVNlbGVjdG9yQWxsKCcqJykuZm9yRWFjaChmdW5jdGlvbihlbCkgewog ICAgICAgICAgICB2YXIgYXR0cnMgPSBBcnJheS5mcm9tKGVsLmF0dHJpYnV0ZXMpOwogICAgICAg ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAg ICAgICB2YXIgbmFtZSA9IGF0dHJzW2ldLm5hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAg ICAgIC8vIG9uKi1FdmVudC1IYW5kbGVyIGVudGZlcm5lbgogICAgICAgICAgICAgICAgaWYgKG5h bWUuc3RhcnRzV2l0aCgnb24nKSkgewogICAgICAgICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJp YnV0ZShhdHRyc1tpXS5uYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8v IGphdmFzY3JpcHQ6L2RhdGE6IFVSTHMgaW4gaHJlZi9zcmMvYWN0aW9uIGVudGZlcm5lbgogICAg ICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdocmVmJyB8fCBuYW1lID09PSAnc3JjJyB8fCBuYW1l ID09PSAnYWN0aW9uJykgewogICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSAoYXR0cnNbaV0u dmFsdWUgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgIGlm ICh2YWwuc3RhcnRzV2l0aCgnamF2YXNjcmlwdDonKSB8fCB2YWwuc3RhcnRzV2l0aCgnZGF0YTp0 ZXh0L2h0bWwnKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUo YXR0cnNbaV0ubmFtZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgLy8gQWxsZSBMaW5rcyBtdWVzc2VuIGlu IG5ldWVtIFRhYiBvZWZmbmVuIChQb3J0YWwgZGFyZiBuaWNodCB2ZXJsYXNzZW4gd2VyZGVuKQog ICAgICAgIGRvYy5xdWVyeVNlbGVjdG9yQWxsKCdhW2hyZWZdJykuZm9yRWFjaChmdW5jdGlvbihh KSB7CiAgICAgICAgICAgIHZhciBocmVmID0gKGEuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJycp LnRyaW0oKTsKICAgICAgICAgICAgLy8gSW50ZXJuZSBBbmtlciAoIy4uLikgdW5kIERSSVZFLUNy b3NzbGlua3MgKC5kcml2ZS14cmVmKSBhdXNuZWhtZW4KICAgICAgICAgICAgaWYgKGhyZWYuc3Rh cnRzV2l0aCgnIycpIHx8IGEuY2xhc3NMaXN0LmNvbnRhaW5zKCdkcml2ZS14cmVmJykpIHJldHVy bjsKICAgICAgICAgICAgYS5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTsKICAgICAg ICAgICAgYS5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdub29wZW5lciBub3JlZmVycmVyJyk7CiAgICAg ICAgfSk7CiAgICAgICAgcmV0dXJuIGRvYy5ib2R5LmlubmVySFRNTDsKICAgIH0sCgogICAgaGln aGxpZ2h0SXRlbShkb2NJZCkgewogICAgICAgIGNvbnN0IGl0ZW1zID0gZG9jdW1lbnQucXVlcnlT ZWxlY3RvckFsbCgnI2RvY3VtZW50TGlzdCAuZG9jdW1lbnQtaXRlbScpOwogICAgICAgIGl0ZW1z LmZvckVhY2goaXRlbSA9PiB7CiAgICAgICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnb25j bGljaycpICYmIGl0ZW0uZ2V0QXR0cmlidXRlKCdvbmNsaWNrJykuaW5jbHVkZXMoZG9jSWQpKSB7 CiAgICAgICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ2hpZ2hsaWdodC1zYXZlZCcpOwog ICAgICAgICAgICAgICAgaXRlbS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywg YmxvY2s6ICduZWFyZXN0JyB9KTsKICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5l cignYW5pbWF0aW9uZW5kJywgKCkgPT4gaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdoaWdobGlnaHQt c2F2ZWQnKSwgeyBvbmNlOiB0cnVlIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9 Cn07CgovLyA9PT09PT09PT09PT09PT09PT09PT0gRURJVE9SID09PT09PT09PT09PT09PT09PT09 PQoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gTW9kdWw6IERyaXZlRWRpdG9yIC0gV1lTSVdZ Ry1FZGl0b3IsIE1lZGllbi1VcGxvYWQsIERva3VtZW50ZW5iZWFyYmVpdHVuZwovLyBadXN0YWVu ZGlnIGZ1ZXI6IEVkaXRvci1Nb2RhbCwgRm9ybWF0aWVydW5nLCBNZWRpZW4tVXBsb2FkLURpYWxv ZywgU3BlaWNoZXJuCi8vIFNpY2hlcmhlaXQ6IEVpbmdlZnVlZ3RlIEhUTUwtSW5oYWx0ZSAoUGFz dGUpIHdlcmRlbiB2aWEgRE9NUGFyc2VyIG5vcm1hbGlzaWVydC4KLy8gICAgICAgICAgICAgRGF0 ZWluYW1lbiB3ZXJkZW4gdWViZXIgc2FuaXRpemVGaWxlbmFtZSgpIGJlcmVpbmlndCAoa2VpbmUg U29uZGVyemVpY2hlbi9QZmFkdHJlbm5lcikuCi8vICAgICAgICAgICAgIFNwZWljaGVybiBzZW5k ZXQgRGF0ZW4gYW4gL2FwaS93cml0ZSwgd28gc2VydmVyc2VpdGlnZSBBdXRvcmlzaWVydW5nIGdy ZWlmdC4KLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KY29uc3QgRHJpdmVFZGl0b3IgPSB7CiAgICBj dXJyZW50RG9jOiBudWxsLAogICAgaXNOZXc6IGZhbHNlLAogICAgaGlzdG9yeTogW10sCiAgICBo aXN0b3J5SW5kZXg6IC0xLAogICAgaXNSZXN0b3Jpbmc6IGZhbHNlLAoKICAgIGFzeW5jIGNyZWF0 ZU5ldygpIHsKICAgICAgICBpZiAoIURyaXZlRlMuY29ubmVjdGVkKSB7CiAgICAgICAgICAgIHNo b3dUb2FzdCgnWnVtIEJlYXJiZWl0ZW4gYml0dGUgRFJJVkVfU3RhcnQuYmF0IHN0YXJ0ZW4nLCAn d2FybmluZycpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChEcml2 ZUZTLnJlYWRPbmx5KSB7CiAgICAgICAgICAgIGNvbnN0IGdyYW50ZWQgPSBhd2FpdCBEcml2ZUZT LmVuc3VyZVdyaXRlQWNjZXNzKCk7CiAgICAgICAgICAgIGlmICghZ3JhbnRlZCkgcmV0dXJuOwog ICAgICAgIH0KCiAgICAgICAgdGhpcy5pc05ldyA9IHRydWU7CiAgICAgICAgY29uc3QgdXNlcm5h bWUgPSAoRHJpdmVGUy5lbnZpcm9uICYmIERyaXZlRlMuZW52aXJvbi51c2VybmFtZSkgPyBEcml2 ZUZTLmVudmlyb24udXNlcm5hbWUgOiBudWxsOwogICAgICAgIHRoaXMuY3VycmVudERvYyA9IHsK ICAgICAgICAgICAgaWQ6IERyaXZlRlMuZ2VuZXJhdGVJZCgpLAogICAgICAgICAgICB0aXRlbDog JycsCiAgICAgICAgICAgIGthdGVnb3JpZTogKERyaXZlRlMuY29uZmlnLmthdGVnb3JpZW4gfHwg WydWZXJrZWhyJ10pWzBdLAogICAgICAgICAgICBpbmhhbHQ6ICcnLAogICAgICAgICAgICBzdGF0 dXM6ICdFbnR3dXJmJywKICAgICAgICAgICAgZXJzdGVsbHQ6IG5ldyBEYXRlKCkudG9JU09TdHJp bmcoKS5zcGxpdCgnVCcpWzBdLAogICAgICAgICAgICBnZWFlbmRlcnQ6IG5ldyBEYXRlKCkudG9J U09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdLAogICAgICAgICAgICBlcnN0ZWxsdFZvbjogdXNlcm5h bWUsCiAgICAgICAgICAgIGJlYXJiZWl0ZXRWb246IHVzZXJuYW1lLAogICAgICAgICAgICB2ZXJz aW9uOiAndjAuMScsCiAgICAgICAgICAgIG1lZGlhczogW10sCiAgICAgICAgICAgIHNjaGxhZ3dv ZXJ0ZXI6IFtdLAogICAgICAgICAgICBwYXJlbnRJZDogbnVsbAogICAgICAgIH07CgogICAgICAg IHRoaXMub3Blbk1vZGFsKCdOZXVlcyBEb2t1bWVudCBlcnN0ZWxsZW4nKTsKICAgIH0sCgogICAg X2xvY2tlZERvY0lkOiBudWxsLAoKICAgIGFzeW5jIGVkaXQoZG9jSWQpIHsKICAgICAgICBpZiAo RHJpdmVGUy5yZWFkT25seSkgewogICAgICAgICAgICBjb25zdCBncmFudGVkID0gYXdhaXQgRHJp dmVGUy5lbnN1cmVXcml0ZUFjY2VzcygpOwogICAgICAgICAgICBpZiAoIWdyYW50ZWQpIHJldHVy bjsKICAgICAgICB9CgogICAgICAgIC8vIFBlc3NpbWlzdGljIExvY2tpbmc6IExvY2sgYW5mb3Jk ZXJuIGJldm9yIEVkaXRvciBvZWZmbmV0CiAgICAgICAgY29uc3QgbG9ja1Jlc3VsdCA9IGF3YWl0 IHRoaXMuYWNxdWlyZUxvY2soZG9jSWQpOwogICAgICAgIGlmICghbG9ja1Jlc3VsdC5vaykgewog ICAgICAgICAgICBzaG93VG9hc3QoJ0Rva3VtZW50IHdpcmQgdm9uICcgKyBsb2NrUmVzdWx0LmJ5 ICsgJyBiZWFyYmVpdGV0IChzZWl0ICcgKyBsb2NrUmVzdWx0Lm1pbnV0ZXMgKyAnIE1pbi4pJywg J3dhcm5pbmcnLCA1MDAwKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAg Y29uc3QgZG9jID0gYXdhaXQgRHJpdmVGUy5sb2FkRG9jdW1lbnQoZG9jSWQpOwogICAgICAgIGlm ICghZG9jKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVsZWFzZUxvY2soZG9jSWQpOwogICAg ICAgICAgICBzaG93VG9hc3QoJ0Rva3VtZW50IGtvbm50ZSBuaWNodCBnZWxhZGVuIHdlcmRlbics ICdlcnJvcicpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB0aGlzLmlz TmV3ID0gZmFsc2U7CiAgICAgICAgdGhpcy5fbG9ja2VkRG9jSWQgPSBkb2NJZDsKICAgICAgICB0 aGlzLmN1cnJlbnREb2MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRvYykpOyAvLyBEZWVw IGNvcHkKICAgICAgICB0aGlzLm9wZW5Nb2RhbCgnRG9rdW1lbnQgYmVhcmJlaXRlbjogJyArIGRv Yy50aXRlbCk7CiAgICB9LAoKICAgIG9wZW5Nb2RhbCh0aXRsZSkgewogICAgICAgIGNvbnN0IGRv YyA9IHRoaXMuY3VycmVudERvYzsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRp dG9yTW9kYWxUaXRsZScpLnRleHRDb250ZW50ID0gdGl0bGU7CiAgICAgICAgZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoJ2VkaXRvclRpdGVsJykudmFsdWUgPSBkb2MudGl0ZWwgfHwgJyc7CgogICAg ICAgIC8vIEthdGVnb3JpZS1TZWxlY3QgZnVlbGxlbiAoYXVzZ2VibGVuZGV0ZSBLYXRlZ29yaWVu IHVlYmVyc3ByaW5nZW4sIGVzIHNlaSBkZW5uIGRhcyBEb2t1bWVudCBoYXQgZGllc2UgS2F0ZWdv cmllKQogICAgICAgIGNvbnN0IGthdFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdl ZGl0b3JLYXRlZ29yaWUnKTsKICAgICAgICBrYXRTZWxlY3QuaW5uZXJIVE1MID0gJyc7CiAgICAg ICAgdmFyIGVkaXRvckhpZGRlbkthdHMgPSBEcml2ZUZTLmNvbmZpZy5oaWRkZW5LYXRlZ29yaWVu IHx8IFtdOwogICAgICAgIChEcml2ZUZTLmNvbmZpZy5rYXRlZ29yaWVuIHx8IFtdKS5mb3JFYWNo KGthdCA9PiB7CiAgICAgICAgICAgIGlmIChlZGl0b3JIaWRkZW5LYXRzLmluY2x1ZGVzKGthdCkg JiYga2F0ICE9PSBkb2Mua2F0ZWdvcmllKSByZXR1cm47CiAgICAgICAgICAgIGNvbnN0IG9wdCA9 IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwogICAgICAgICAgICBvcHQudmFsdWUg PSBrYXQ7CiAgICAgICAgICAgIG9wdC50ZXh0Q29udGVudCA9IGthdDsKICAgICAgICAgICAgaWYg KGthdCA9PT0gZG9jLmthdGVnb3JpZSkgb3B0LnNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAg a2F0U2VsZWN0LmFwcGVuZENoaWxkKG9wdCk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIFVudGVy a2F0ZWdvcmllbi1IaW53ZWlzIGJlaSBLYXRlZ29yaWUtV2VjaHNlbAogICAgICAgIGNvbnN0IHRp dGVsSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yVGl0ZWwnKTsKICAgICAg ICBjb25zdCB1cGRhdGVTdWJ0YWdIaW50ID0gKCkgPT4gewogICAgICAgICAgICBjb25zdCBzdWJz ID0gRHJpdmVFZGl0b3IuQ0FURUdPUllfU1VCVEFHU1trYXRTZWxlY3QudmFsdWVdOwogICAgICAg ICAgICBpZiAoc3VicykgewogICAgICAgICAgICAgICAgdGl0ZWxJbnB1dC5wbGFjZWhvbGRlciA9 ICdUaXRlbCB6LkIuICcgKyBrYXRTZWxlY3QudmFsdWUgKyAnICgnICsgc3Vicy5qb2luKCcgLyAn KSArICcpJzsKICAgICAgICAgICAgICAgIC8vIFN1Yi1UYWdzIGF1dG9tYXRpc2NoIGFscyBLZXl3 b3JkLVZvcnNjaGxhZWdlIHByaW9yaXNpZXJlbgogICAgICAgICAgICAgICAgc3Vicy5mb3JFYWNo KHMgPT4gewogICAgICAgICAgICAgICAgICAgIGlmICghRHJpdmVFZGl0b3IuX2N1cnJlbnRLZXl3 b3Jkcy5pbmNsdWRlcyhzKSkgewogICAgICAgICAgICAgICAgICAgICAgICBEcml2ZUVkaXRvci5f cmVuZGVyU3VnZ2VzdGlvbnMoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRpdGVsSW5wdXQucGxh Y2Vob2xkZXIgPSAnVGl0ZWwgZGVzIERva3VtZW50cyc7CiAgICAgICAgICAgIH0KICAgICAgICB9 OwogICAgICAgIGthdFNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB1cGRhdGVTdWJ0 YWdIaW50KTsKICAgICAgICB1cGRhdGVTdWJ0YWdIaW50KCk7CgogICAgICAgIC8vIFN0YXR1cy1T ZWxlY3QgZnVlbGxlbiAoZ2VmaWx0ZXJ0IG5hY2ggR292ZXJuYW5jZS1Sb2xsZSkKICAgICAgICBj b25zdCBzdGF0dXNTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yU3RhdHVz Jyk7CiAgICAgICAgc3RhdHVzU2VsZWN0LmlubmVySFRNTCA9ICcnOwogICAgICAgIGNvbnN0IGlz U1UgPSBEcml2ZUdvdmVybmFuY2UuaXNTdXBlclVzZXIoKTsKICAgICAgICBjb25zdCBpc0ZBID0g RHJpdmVHb3Zlcm5hbmNlLmlzRmFjaGF1ZnNpY2h0KCk7CiAgICAgICAgY29uc3QgaXNSZXYgPSBE cml2ZUdvdmVybmFuY2UuaXNSZXZpZXdlcihkb2Mua2F0ZWdvcmllKTsKICAgICAgICBPYmplY3Qu a2V5cyhEcml2ZUZTLmNvbmZpZy5zdGF0dXMgfHwge30pLmZvckVhY2goc3RhdHVzID0+IHsKICAg ICAgICAgICAgLy8gTm9ybWFsZSBVc2VyOiBudXIgRW50d3VyZiArIFBydWVmdW5nCiAgICAgICAg ICAgIGlmICghaXNTVSAmJiAhaXNGQSAmJiAhaXNSZXYgJiYgKHN0YXR1cyA9PT0gJ0ZyZWlnZWdl YmVuJyB8fCBzdGF0dXMgPT09ICdBYmdlbGVobnQnKSkgcmV0dXJuOwogICAgICAgICAgICBjb25z dCBjZmcgPSBEcml2ZUZTLmNvbmZpZy5zdGF0dXNbc3RhdHVzXTsKICAgICAgICAgICAgY29uc3Qg b3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgICAgICAgIG9wdC52 YWx1ZSA9IHN0YXR1czsKICAgICAgICAgICAgb3B0LnRleHRDb250ZW50ID0gY2ZnLmxhYmVsOwog ICAgICAgICAgICBpZiAoc3RhdHVzID09PSBkb2Muc3RhdHVzKSBvcHQuc2VsZWN0ZWQgPSB0cnVl OwogICAgICAgICAgICBzdGF0dXNTZWxlY3QuYXBwZW5kQ2hpbGQob3B0KTsKICAgICAgICB9KTsK CiAgICAgICAgLy8gw5xiZXJhcnRpa2VsLVNlbGVjdCBmw7xsbGVuCiAgICAgICAgY29uc3QgcGFy ZW50U2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvclBhcmVudCcpOwogICAg ICAgIHBhcmVudFNlbGVjdC5pbm5lckhUTUwgPSAnPG9wdGlvbiB2YWx1ZT0iIj4tLSBLZWluIMOc YmVyYXJ0aWtlbCAtLTwvb3B0aW9uPic7CiAgICAgICAgRHJpdmVGUy5kb2N1bWVudHMuZm9yRWFj aChkID0+IHsKICAgICAgICAgICAgaWYgKGQuaWQgPT09IGRvYy5pZCkgcmV0dXJuOyAvLyBzaWNo IHNlbGJzdCBhdXNzY2hsaWXDn2VuCiAgICAgICAgICAgIGlmIChkLnBhcmVudElkID09PSBkb2Mu aWQpIHJldHVybjsgLy8gS2luZGVyIGF1c3NjaGxpZcOfZW4gKFppcmtlbHZlcm1laWR1bmcpCiAg ICAgICAgICAgIGNvbnN0IG9wdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwog ICAgICAgICAgICBvcHQudmFsdWUgPSBkLmlkOwogICAgICAgICAgICBvcHQudGV4dENvbnRlbnQg PSBkLnRpdGVsOwogICAgICAgICAgICBpZiAoZC5pZCA9PT0gZG9jLnBhcmVudElkKSBvcHQuc2Vs ZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICBwYXJlbnRTZWxlY3QuYXBwZW5kQ2hpbGQob3B0KTsK ICAgICAgICB9KTsKCiAgICAgICAgLy8gU2NobGFnd8O2cnRlciBpbml0aWFsaXNpZXJlbiAoYWJo YWVuZ2lnIHZvbiBHb3Zlcm5hbmNlLU1vZHVzKQogICAgICAgIGNvbnN0IGt3TW9kZSA9IChEcml2 ZUdvdmVybmFuY2UuZGF0YSAmJiBEcml2ZUdvdmVybmFuY2UuZGF0YS5zZXR0aW5ncykgPyAoRHJp dmVHb3Zlcm5hbmNlLmRhdGEuc2V0dGluZ3Mua2V5d29yZE1vZGUgfHwgJ3JlcXVpcmVkJykgOiAn cmVxdWlyZWQnOwogICAgICAgIGNvbnN0IGt3Um93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo J2VkaXRvcktleXdvcmRSb3cnKTsKICAgICAgICBpZiAoa3dSb3cpIGt3Um93LnN0eWxlLmRpc3Bs YXkgPSAoa3dNb2RlID09PSAnZGlzYWJsZWQnKSA/ICdub25lJyA6ICcnOwogICAgICAgIHRoaXMu X2N1cnJlbnRLZXl3b3JkcyA9IFsuLi4oZG9jLnNjaGxhZ3dvZXJ0ZXIgfHwgW10pXTsKICAgICAg ICB0aGlzLl9yZW5kZXJLZXl3b3JkcygpOwogICAgICAgIHRoaXMuX3NldHVwS2V5d29yZElucHV0 KCk7CgogICAgICAgIC8vIEluaGFsdCBsYWRlbgogICAgICAgIGNvbnN0IGVkaXRvcklucHV0ID0g ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcklucHV0Jyk7CiAgICAgICAgZWRpdG9ySW5w dXQuaW5uZXJIVE1MID0gRHJpdmVQb3J0YWwuc2FuaXRpemVIVE1MKGRvYy5pbmhhbHQpOwoKICAg ICAgICAvLyBNb2RhbCB6ZWlnZW4KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRp dG9yTW9kYWwnKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgICAgICBlZGl0b3JJbnB1dC5m b2N1cygpOwoKICAgICAgICAvLyBIaXN0b3J5IGluaXRpYWxpc2llcmVuCiAgICAgICAgdGhpcy5p bml0SGlzdG9yeSgpOwoKICAgICAgICAvLyBNZWRpYSBjb250ZXh0IG1lbnUgZXZlbnRzCiAgICAg ICAgdGhpcy5zZXR1cEVkaXRvck1lZGlhRXZlbnRzKCk7CiAgICB9LAoKICAgIGFzeW5jIGNhbmNl bFdpdGhQcm9tcHQoKSB7CiAgICAgICAgLy8gUHJ1ZWZlbiBvYiBJbmhhbHQgdm9yaGFuZGVuCiAg ICAgICAgdmFyIGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3JJbnB1dCcp OwogICAgICAgIHZhciB0aXRlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3JUaXRl bCcpOwogICAgICAgIHZhciBoYXNDb250ZW50ID0gKGVkaXRvciAmJiBlZGl0b3IudGV4dENvbnRl bnQudHJpbSgpLmxlbmd0aCA+IDApIHx8ICh0aXRlbCAmJiB0aXRlbC52YWx1ZS50cmltKCkubGVu Z3RoID4gMCk7CgogICAgICAgIGlmIChoYXNDb250ZW50KSB7CiAgICAgICAgICAgIHZhciBtb2Rh bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICBtb2RhbC5zdHls ZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdo dDoxMDAlO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO3otaW5kZXg6MTA2MDA7ZGlzcGxheTpm bGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyc7CiAgICAgICAg ICAgIG1vZGFsLmlubmVySFRNTCA9CiAgICAgICAgICAgICAgICAnPGRpdiBzdHlsZT0iYmFja2dy b3VuZDp2YXIoLS1iZy1jYXJkKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoyNHB4IDI4cHg7 bWF4LXdpZHRoOjQyMHB4O3dpZHRoOjkwJTtib3gtc2hhZG93OjAgOHB4IDMycHggcmdiYSgwLDAs MCwwLjMpOyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzxoMyBzdHlsZT0iY29sb3I6dmFyKC0t dGV4dC1oZWFkaW5nKTttYXJnaW4tYm90dG9tOjEycHg7Ij5BcnRpa2VsIHNjaGxpZcOfZW4/PC9o Mz4nICsKICAgICAgICAgICAgICAgICAgICAnPHAgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtcHJp bWFyeSk7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS43O21hcmdpbi1ib3R0b206MTZweDsi PicgKwogICAgICAgICAgICAgICAgICAgICAgICAnTcO2Y2h0ZXN0IGR1IGRlbiBha3R1ZWxsZW4g U3RhbmQgYWxzIEVudHd1cmYgc3BlaWNoZXJuLCBkYW1pdCBkdSBzcMOkdGVyIGRhcmFuIHdlaXRl cmFyYmVpdGVuIGthbm5zdD8nICsKICAgICAgICAgICAgICAgICAgICAnPC9wPicgKwogICAgICAg ICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDtqdXN0aWZ5LWNv bnRlbnQ6ZmxleC1lbmQ7Ij4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gaWQ9 ImNhbmNlbERpc2NhcmQiIHN0eWxlPSJwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4 O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kOnZhcigtLWJn LWNhcmQpO2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Y3Vyc29yOnBvaW50ZXI7Ij5WZXJ3ZXJm ZW48L2J1dHRvbj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gaWQ9ImNhbmNl bFNhdmVEcmFmdCIgc3R5bGU9InBhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9y ZGVyOm5vbmU7YmFja2dyb3VuZDp2YXIoLS10ZXh0LWhlYWRpbmcpO2NvbG9yOndoaXRlO2N1cnNv cjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDsiPkFscyBFbnR3dXJmIHNwZWljaGVybjwvYnV0dG9u PicgKwogICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgICAgICc8L2Rp dj4nOwogICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1vZGFsKTsKCiAgICAg ICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ2NhbmNlbERpc2NhcmQnKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAg ICBtb2RhbC5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKTsKICAgICAgICAg ICAgfTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbmNlbFNhdmVEcmFm dCcpLm9uY2xpY2sgPSBhc3luYyBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIG1vZGFsLnJl bW92ZSgpOwogICAgICAgICAgICAgICAgLy8gU3RhdHVzIGF1ZiBFbnR3dXJmIHNldHplbiB1bmQg c3BlaWNoZXJuCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9y U3RhdHVzJykudmFsdWUgPSAnRW50d3VyZic7CiAgICAgICAgICAgICAgICBhd2FpdCBzZWxmLnNh dmUodHJ1ZSk7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhp cy5jbG9zZSgpOwogICAgICAgIH0KICAgIH0sCgogICAgY2xvc2UoKSB7CiAgICAgICAgZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvck1vZGFsJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZl Jyk7CiAgICAgICAgdGhpcy5oaWRlQ29udGV4dE1lbnUoKTsKICAgICAgICB0aGlzLmNsb3NlVXBs b2FkRGlhbG9nKCk7CiAgICAgICAgdGhpcy5jbG9zZUNvbnRyaWJEaWFsb2coKTsKICAgICAgICAv LyBNZXRhLVplaWxlbiB3aWVkZXIgZWluYmxlbmRlbiAoa29lbm5lbiBiZWkgU3RhcnRzZWl0ZW4t QmVhcmJlaXR1bmcgYXVzZ2VibGVuZGV0IHNlaW4pCiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxl Y3RvckFsbCgnLmVkaXRvci1tZXRhLXJvdycpLmZvckVhY2goZnVuY3Rpb24ocm93KSB7IHJvdy5z dHlsZS5kaXNwbGF5ID0gJyc7IH0pOwogICAgICAgIHRoaXMuX2lzU3RhcnRzZWl0ZSA9IGZhbHNl OwogICAgICAgIC8vIExvY2sgZnJlaWdlYmVuCiAgICAgICAgaWYgKHRoaXMuX2xvY2tlZERvY0lk KSB7CiAgICAgICAgICAgIHRoaXMucmVsZWFzZUxvY2sodGhpcy5fbG9ja2VkRG9jSWQpOwogICAg ICAgICAgICB0aGlzLl9sb2NrZWREb2NJZCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHRoaXMu Y3VycmVudERvYyA9IG51bGw7CiAgICAgICAgdGhpcy5pc05ldyA9IGZhbHNlOwogICAgICAgIHRo aXMuX3BlbmRpbmdDb250cmliVHlwZSA9IG51bGw7CiAgICB9LAoKICAgIF9wZW5kaW5nQ29udHJp YlR5cGU6IG51bGwsCgogICAgX2lzU3RhcnRzZWl0ZTogZmFsc2UsCgogICAgYXN5bmMgc2F2ZUFu ZENsb3NlKCkgewogICAgICAgIGF3YWl0IHRoaXMuc2F2ZSh0cnVlKTsKICAgIH0sCgogICAgYXN5 bmMgc2F2ZShjbG9zZUFmdGVyKSB7CiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnREb2MpIHJldHVy bjsKCiAgICAgICAgLy8gU29uZGVyZmFsbDogU3RhcnRzZWl0ZW4tQmVhcmJlaXR1bmcKICAgICAg ICBpZiAodGhpcy5faXNTdGFydHNlaXRlKSB7CiAgICAgICAgICAgIHZhciBjb250ZW50ID0gZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcklucHV0JykuaW5uZXJIVE1MOwogICAgICAgICAg ICBhd2FpdCBEcml2ZUdvdmVybmFuY2Uuc2F2ZVN0YXJ0c2VpdGUoY29udGVudCk7CiAgICAgICAg ICAgIGlmIChjbG9zZUFmdGVyKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9pc1N0YXJ0c2VpdGUg PSBmYWxzZTsKICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKICAgICAgICAgICAgICAgIC8v IFp1csO8Y2sgaW5zIEdvdmVybmFuY2UtTW9kYWwKICAgICAgICAgICAgICAgIERyaXZlR292ZXJu YW5jZS5zaG93QWRtaW4oKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAg ICAgfQoKICAgICAgICBjb25zdCB0aXRlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0 b3JUaXRlbCcpLnZhbHVlLnRyaW0oKTsKICAgICAgICBpZiAoIXRpdGVsKSB7CiAgICAgICAgICAg IHNob3dUb2FzdCgnQml0dGUgZWluZW4gVGl0ZWwgZWluZ2ViZW4nLCAnd2FybmluZycpOwogICAg ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yVGl0ZWwnKS5mb2N1cygpOwog ICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBCZWkgYmVzdGVoZW5kZW4g RG9rdW1lbnRlbjogQmVpdHJhZ3NhcnQgYWJmcmFnZW4gZmFsbHMgbm9jaCBuaWNodCBnZXdhZWhs dAogICAgICAgIGlmICghdGhpcy5pc05ldyAmJiAhdGhpcy5fcGVuZGluZ0NvbnRyaWJUeXBlKSB7 CiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdDbG9zZUFmdGVyID0gY2xvc2VBZnRlciB8fCBmYWxz ZTsKICAgICAgICAgICAgdGhpcy5zaG93Q29udHJpYkRpYWxvZygpOwogICAgICAgICAgICByZXR1 cm47CiAgICAgICAgfQoKICAgICAgICAvLyBTY2hsYWd3w7ZydGVyIFBmbGljaHRmZWxkIChudXIg d2VubiBNb2R1cyA9ICJyZXF1aXJlZCIpCiAgICAgICAgY29uc3Qga3dNb2RlID0gKERyaXZlR292 ZXJuYW5jZS5kYXRhICYmIERyaXZlR292ZXJuYW5jZS5kYXRhLnNldHRpbmdzKSA/IChEcml2ZUdv dmVybmFuY2UuZGF0YS5zZXR0aW5ncy5rZXl3b3JkTW9kZSB8fCAncmVxdWlyZWQnKSA6ICdyZXF1 aXJlZCc7CiAgICAgICAgaWYgKGt3TW9kZSA9PT0gJ3JlcXVpcmVkJyAmJiAoIXRoaXMuX2N1cnJl bnRLZXl3b3JkcyB8fCB0aGlzLl9jdXJyZW50S2V5d29yZHMubGVuZ3RoID09PSAwKSkgewogICAg ICAgICAgICBzaG93VG9hc3QoJ0JpdHRlIG1pbmRlc3RlbnMgZWluIFNjaGxhZ3dvcnQgZWluZ2Vi ZW4nLCAnd2FybmluZycpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRp dG9yS2V5d29yZElucHV0JykuZm9jdXMoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0K CiAgICAgICAgdGhpcy5jdXJyZW50RG9jLnRpdGVsID0gdGl0ZWw7CiAgICAgICAgdGhpcy5jdXJy ZW50RG9jLmthdGVnb3JpZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3JLYXRlZ29y aWUnKS52YWx1ZTsKICAgICAgICB0aGlzLmN1cnJlbnREb2MucGFyZW50SWQgPSBkb2N1bWVudC5n ZXRFbGVtZW50QnlJZCgnZWRpdG9yUGFyZW50JykudmFsdWUgfHwgbnVsbDsKICAgICAgICBpZiAo a3dNb2RlICE9PSAnZGlzYWJsZWQnKSB7CiAgICAgICAgICAgIHRoaXMuY3VycmVudERvYy5zY2hs YWd3b2VydGVyID0gWy4uLnRoaXMuX2N1cnJlbnRLZXl3b3Jkc107CiAgICAgICAgfQogICAgICAg IGNvbnN0IHNlbGVjdGVkU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvclN0 YXR1cycpLnZhbHVlOwogICAgICAgIGNvbnN0IG5ld0luaGFsdCA9IGRvY3VtZW50LmdldEVsZW1l bnRCeUlkKCdlZGl0b3JJbnB1dCcpLmlubmVySFRNTDsKCiAgICAgICAgLy8gQ29udHJpYnV0b3It VHJhY2tpbmc6IEJlaXRyYWdzYXJ0IGJlc3RpbW1lbgogICAgICAgIGNvbnN0IHVzZXJuYW1lID0g KERyaXZlRlMuZW52aXJvbiAmJiBEcml2ZUZTLmVudmlyb24udXNlcm5hbWUpID8gRHJpdmVGUy5l bnZpcm9uLnVzZXJuYW1lIDogJ1VuYmVrYW5udCc7CiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRE b2MuY29udHJpYnV0b3JzKSB0aGlzLmN1cnJlbnREb2MuY29udHJpYnV0b3JzID0gW107CgogICAg ICAgIGlmICh0aGlzLmlzTmV3KSB7CiAgICAgICAgICAgIC8vIE5ldWVzIERva3VtZW50OiBFcnN0 ZWxsZXIgPSAxMDAlIEF1dG9yCiAgICAgICAgICAgIHRoaXMuY3VycmVudERvYy5jb250cmlidXRv cnMgPSBbeyB1c2VybmFtZTogdXNlcm5hbWUsIHJvbGU6ICdhdXRvcicsIGVudHJpZXM6IDEsIGZp cnN0Q29udHJpYjogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH1dOwogICAgICAgIH0gZWxzZSBp ZiAodGhpcy5fcGVuZGluZ0NvbnRyaWJUeXBlKSB7CiAgICAgICAgICAgIC8vIEJlc3RlaGVuZDog RWludHJhZyBnZW1hZXNzIGdld2FlaGx0ZXIgQmVpdHJhZ3NhcnQgaGluenVmdWVnZW4KICAgICAg ICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmN1cnJlbnREb2MuY29udHJpYnV0b3JzLmZpbmQo YyA9PiBjLnVzZXJuYW1lID09PSB1c2VybmFtZSAmJiBjLnJvbGUgPT09IHRoaXMuX3BlbmRpbmdD b250cmliVHlwZSk7CiAgICAgICAgICAgIGlmIChleGlzdGluZykgewogICAgICAgICAgICAgICAg ZXhpc3RpbmcuZW50cmllcyA9IChleGlzdGluZy5lbnRyaWVzIHx8IDEpICsgMTsKICAgICAgICAg ICAgICAgIGV4aXN0aW5nLmxhc3RDb250cmliID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpOwog ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RG9jLmNvbnRy aWJ1dG9ycy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsCiAg ICAgICAgICAgICAgICAgICAgcm9sZTogdGhpcy5fcGVuZGluZ0NvbnRyaWJUeXBlLAogICAgICAg ICAgICAgICAgICAgIGVudHJpZXM6IDEsCiAgICAgICAgICAgICAgICAgICAgZmlyc3RDb250cmli OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg ICB9CiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdDb250cmliVHlwZSA9IG51bGw7CiAgICAgICAg fQoKICAgICAgICAvLyBSZXZpc2lvbiBzaWNoZXJuOiBWb3JoZXJpZ2VuIFN0YW5kIHNwZWljaGVy biAobWF4IDYgUmV2aXNpb25lbikKICAgICAgICBpZiAoIXRoaXMuaXNOZXcgJiYgdGhpcy5jdXJy ZW50RG9jLmluaGFsdCAmJiB0aGlzLmN1cnJlbnREb2MuaW5oYWx0ICE9PSBuZXdJbmhhbHQpIHsK ICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnREb2MucmV2aXNpb25zKSB0aGlzLmN1cnJlbnRE b2MucmV2aXNpb25zID0gW107CiAgICAgICAgICAgIHRoaXMuY3VycmVudERvYy5yZXZpc2lvbnMu cHVzaCh7CiAgICAgICAgICAgICAgICBpbmhhbHQ6IHRoaXMuY3VycmVudERvYy5pbmhhbHQsCiAg ICAgICAgICAgICAgICB0aXRlbDogdGhpcy5jdXJyZW50RG9jLnRpdGVsLAogICAgICAgICAgICAg ICAgc3RhdHVzOiB0aGlzLmN1cnJlbnREb2Muc3RhdHVzLAogICAgICAgICAgICAgICAgc2F2ZWRB dDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLAogICAgICAgICAgICAgICAgc2F2ZWRCeTogdXNl cm5hbWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIE1heCA2IFJldmlzaW9uZW4gYmVo YWx0ZW4gKGFlbHRlc3RlIGVudGZlcm5lbikKICAgICAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVu dERvYy5yZXZpc2lvbnMubGVuZ3RoID4gNikgewogICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50 RG9jLnJldmlzaW9ucy5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAv LyBWZXJzaW9uIGF1dG9tYXRpc2NoIGJlcmVjaG5lbgogICAgICAgIHRoaXMuY3VycmVudERvYy52 ZXJzaW9uID0gY2FsY3VsYXRlVmVyc2lvbih0aGlzLmN1cnJlbnREb2MsIHRoaXMuY3VycmVudERv Yy5pbmhhbHQsIG5ld0luaGFsdCwgc2VsZWN0ZWRTdGF0dXMpOwoKICAgICAgICB0aGlzLmN1cnJl bnREb2MuaW5oYWx0ID0gbmV3SW5oYWx0OwoKICAgICAgICAvLyBHb3Zlcm5hbmNlLVdvcmtmbG93 OiBTdGF0dXMtVWViZXJnYWVuZ2UgcHJ1ZWZlbgogICAgICAgIGNvbnN0IGdvdiA9IERyaXZlR292 ZXJuYW5jZS5kYXRhOwogICAgICAgIGNvbnN0IHNldHRpbmdzID0gZ292ID8gZ292LnNldHRpbmdz IDoge307CiAgICAgICAgY29uc3QgaXNTVSA9IERyaXZlR292ZXJuYW5jZS5pc1N1cGVyVXNlcigp OwogICAgICAgIGNvbnN0IGlzRkEgPSBEcml2ZUdvdmVybmFuY2UuaXNGYWNoYXVmc2ljaHQoKTsK ICAgICAgICBjb25zdCBpc1JldiA9IERyaXZlR292ZXJuYW5jZS5pc1Jldmlld2VyKHRoaXMuY3Vy cmVudERvYy5rYXRlZ29yaWUpOwoKICAgICAgICBpZiAoc2VsZWN0ZWRTdGF0dXMgPT09ICdQcsO8 ZnVuZycgJiYgIWlzU1UgJiYgIWlzRkEpIHsKICAgICAgICAgICAgLy8gWnVyIFBydWVmdW5nIGVp bnJlaWNoZW4KICAgICAgICAgICAgYXdhaXQgRHJpdmVHb3Zlcm5hbmNlLnN1Ym1pdEZvclJldmll dyh0aGlzLmN1cnJlbnREb2MpOwogICAgICAgICAgICBzaG93VG9hc3QoJ0Rva3VtZW50IHp1ciBQ csO8ZnVuZyBlaW5nZXJlaWNodCcsICdpbmZvJyk7CiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rl ZFN0YXR1cyA9PT0gJ0ZyZWlnZWdlYmVuJyAmJiAhaXNTVSAmJiAhaXNGQSAmJiAhaXNSZXYpIHsK ICAgICAgICAgICAgLy8gTm9ybWFsZXIgVXNlciBkYXJmIG5pY2h0IGRpcmVrdCBmcmVpZ2ViZW4K ICAgICAgICAgICAgc2hvd1RvYXN0KCdLZWluZSBCZXJlY2h0aWd1bmcgenVyIEZyZWlnYWJlLiBC aXR0ZSB6dXIgUHLDvGZ1bmcgZWlucmVpY2hlbi4nLCAnd2FybmluZycpOwogICAgICAgICAgICBy ZXR1cm47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gV2VubiBTdGF0dXMgYXVmIFBy dWVmdW5nIGdlc2V0enQgd2lyZDogdm9yaGVyaWdlbiBJbmhhbHQgc2ljaGVybiBmdWVyIERpZmYK ICAgICAgICAgICAgaWYgKHNlbGVjdGVkU3RhdHVzID09PSAnUHLDvGZ1bmcnICYmIHRoaXMuY3Vy cmVudERvYy5zdGF0dXMgIT09ICdQcsO8ZnVuZycpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAg ICAgICAgICAgICAgICAgICAgdmFyIHNhdmVkRG9jID0gYXdhaXQgRHJpdmVGUy5sb2FkRG9jdW1l bnQodGhpcy5jdXJyZW50RG9jLmlkKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc2F2ZWREb2Mg JiYgc2F2ZWREb2MuaW5oYWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVu dERvYy5fcHJldmlvdXNJbmhhbHQgPSBzYXZlZERvYy5pbmhhbHQ7CiAgICAgICAgICAgICAgICAg ICAgICAgIHRoaXMuY3VycmVudERvYy5fcHJldmlvdXNUaXRlbCA9IHNhdmVkRG9jLnRpdGVsOwog ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge30KICAgICAg ICAgICAgfQogICAgICAgICAgICB0aGlzLmN1cnJlbnREb2Muc3RhdHVzID0gc2VsZWN0ZWRTdGF0 dXM7CiAgICAgICAgfQoKICAgICAgICAvLyBCZWkgbmV1ZW0gRG9rdW1lbnQ6IEdvdmVybmFuY2Ug ZXJ6d2luZ2VuCiAgICAgICAgaWYgKHRoaXMuaXNOZXcgJiYgc2V0dGluZ3MucmVxdWlyZUFwcHJv dmFsRm9yTmV3ICYmICFpc1NVKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnREb2Muc3Rh dHVzICE9PSAnRW50d3VyZicgJiYgdGhpcy5jdXJyZW50RG9jLnN0YXR1cyAhPT0gJ1Byw7xmdW5n JykgewogICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RG9jLnN0YXR1cyA9ICdFbnR3dXJmJzsK ICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3Qg c2F2ZVJlc3VsdCA9IGF3YWl0IERyaXZlRlMuc2F2ZURvY3VtZW50KHRoaXMuY3VycmVudERvYyk7 CiAgICAgICAgICAgIGlmIChzYXZlUmVzdWx0ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBj b25zdCBzYXZlZERvY0lkID0gdGhpcy5jdXJyZW50RG9jLmlkOwogICAgICAgICAgICAgICAgc2hv d1RvYXN0KCdEb2t1bWVudCAiJyArIHRpdGVsICsgJyIgZ2VzcGVpY2hlcnQnLCAnc3VjY2Vzcycp OwogICAgICAgICAgICAgICAgRHJpdmVHb3Zlcm5hbmNlLnVwZGF0ZVVJKCk7CiAgICAgICAgICAg ICAgICBEcml2ZVBvcnRhbC5yZW5kZXIoKTsKICAgICAgICAgICAgICAgIGlmIChjbG9zZUFmdGVy KSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAg IGF3YWl0IERyaXZlUG9ydGFsLnNlbGVjdERvY3VtZW50KHNhdmVkRG9jSWQpOwogICAgICAgICAg ICAgICAgICAgIERyaXZlUG9ydGFsLmhpZ2hsaWdodEl0ZW0oc2F2ZWREb2NJZCk7CiAgICAgICAg ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIEVkaXRvciBvZmZlbiBsYXNz ZW4sIGFiZXIgRG9rdW1lbnRlbmxpc3RlIGFrdHVhbGlzaWVyZW4KICAgICAgICAgICAgICAgICAg ICB0aGlzLmlzTmV3ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0Nv bnRyaWJUeXBlID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsK ICAgICAgICAgICAgICAgIHNob3dUb2FzdCgnU3BlaWNoZXJuIGZlaGxnZXNjaGxhZ2VuOiAnICsg c2F2ZVJlc3VsdCwgJ2Vycm9yJywgNTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNo IChlcnIpIHsKICAgICAgICAgICAgc2hvd1RvYXN0KCdTcGVpY2hlcm4gZmVobGdlc2NobGFnZW46 ICcgKyBlcnIubWVzc2FnZSwgJ2Vycm9yJywgNTAwMCk7CiAgICAgICAgfQogICAgfSwKCiAgICAv LyAtLS0gSGlzdG9yeSAoVW5kby9SZWRvKSAtLS0KICAgIGluaXRIaXN0b3J5KCkgewogICAgICAg IGNvbnN0IGVkaXRvcklucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcklucHV0 Jyk7CiAgICAgICAgdGhpcy5oaXN0b3J5ID0gW2VkaXRvcklucHV0LmlubmVySFRNTF07CiAgICAg ICAgdGhpcy5oaXN0b3J5SW5kZXggPSAwOwoKICAgICAgICAvLyBQYXN0ZS1IYW5kbGVyOiBIVE1M LUluaGFsdGUgbm9ybWFsaXNpZXJlbiArIGV4dGVybmUgQmlsZGVyIGxva2FsIHNwZWljaGVybgog ICAgICAgIGVkaXRvcklucHV0Lm9ucGFzdGUgPSAoZSkgPT4gewogICAgICAgICAgICBlLnByZXZl bnREZWZhdWx0KCk7CgogICAgICAgICAgICAvLyBCaWxkZXIgYXVzIENsaXBib2FyZCAoU2NyZWVu c2hvdCAvIENvcHktSW1hZ2UpCiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbShl LmNsaXBib2FyZERhdGEuaXRlbXMgfHwgW10pOwogICAgICAgICAgICBjb25zdCBpbWdJdGVtID0g aXRlbXMuZmluZChpID0+IGkudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSk7CiAgICAgICAgICAg IGlmIChpbWdJdGVtICYmIHRoaXMuY3VycmVudERvYykgewogICAgICAgICAgICAgICAgY29uc3Qg YmxvYiA9IGltZ0l0ZW0uZ2V0QXNGaWxlKCk7CiAgICAgICAgICAgICAgICBpZiAoYmxvYikgewog ICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3RlSW1hZ2VCbG9iKGJsb2IpOwogICAgICAgICAg ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAg ICAgICAgY29uc3QgY2xpcEh0bWwgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1s Jyk7CiAgICAgICAgICAgIGNvbnN0IGNsaXBUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEo J3RleHQvcGxhaW4nKTsKCiAgICAgICAgICAgIGlmIChjbGlwSHRtbCkgewogICAgICAgICAgICAg ICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOwogICAgICAgICAgICAgICAgY29uc3Qg cGFyc2VkID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhjbGlwSHRtbCwgJ3RleHQvaHRtbCcpOwog ICAgICAgICAgICAgICAgY29uc3QgaW1ncyA9IHBhcnNlZC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwo J2ltZycpOwogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuYWxJbWdzID0gQXJyYXkuZnJvbShp bWdzKS5maWx0ZXIoaW1nID0+CiAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyAmJiAoaW1nLnNy Yy5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgaW1nLnNyYy5zdGFydHNXaXRoKCdodHRwczovLycp KQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAvLyBJbmxpbmUtU3R5bGVzIGJl cmVpbmlnZW46IEZhcmJlbiwgSGludGVyZ3J1ZW5kZSB1bmQgU2NocmlmdGFydGVuIGVudGZlcm5l biwKICAgICAgICAgICAgICAgIC8vIGRhbWl0IGVpbmdlZnVlZ3RlciBUZXh0IGltIERhcmstL0xp Z2h0LU1vZGUga29ycmVrdCBkYXJnZXN0ZWxsdCB3aXJkLgogICAgICAgICAgICAgICAgLy8gTGlz dGVuICh1bC9vbC9saSkgdW5kIFRhYmVsbGVuICh0YWJsZS90ci90ZC90aCkgd2VyZGVuIGdlc2No b250LAogICAgICAgICAgICAgICAgLy8gZGFtaXQgU3RydWt0dXIgdW5kIEVpbnJ1ZWNrdW5nIGVy aGFsdGVuIGJsZWliZW4uCiAgICAgICAgICAgICAgICB2YXIgbGlzdFRhZ3MgPSBbJ1VMJywnT0wn LCdMSSddOwogICAgICAgICAgICAgICAgdmFyIHRhYmxlVGFncyA9IFsnVEFCTEUnLCdUSEVBRCcs J1RCT0RZJywnVFInLCdURCcsJ1RIJ107CiAgICAgICAgICAgICAgICBwYXJzZWQuYm9keS5xdWVy eVNlbGVjdG9yQWxsKCcqJykuZm9yRWFjaChlbCA9PiB7CiAgICAgICAgICAgICAgICAgICAgdmFy IHRhZyA9IGVsLnRhZ05hbWU7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlzTGlzdCA9IGxpc3RU YWdzLmluY2x1ZGVzKHRhZyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlzVGFibGUgPSB0YWJs ZVRhZ3MuaW5jbHVkZXModGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZWwuc3R5bGUpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2NvbG9yJyk7 CiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdiYWNrZ3Jv dW5kLWNvbG9yJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLnJlbW92ZVByb3Bl cnR5KCdiYWNrZ3JvdW5kJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLnJlbW92 ZVByb3BlcnR5KCdmb250LWZhbWlseScpOwogICAgICAgICAgICAgICAgICAgICAgICBlbC5zdHls ZS5yZW1vdmVQcm9wZXJ0eSgnZm9udC1zaXplJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVs LnN0eWxlLnJlbW92ZVByb3BlcnR5KCd3aGl0ZS1zcGFjZScpOwogICAgICAgICAgICAgICAgICAg ICAgICBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnb3ZlcmZsb3ctd3JhcCcpOwogICAgICAgICAg ICAgICAgICAgICAgICBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnd29yZC1icmVhaycpOwogICAg ICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgndGV4dC1kZWNvcmF0 aW9uLWxpbmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUucmVtb3ZlUHJvcGVy dHkoJ2JvcmRlci1yYWRpdXMnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RhYmxl KSBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnYm9yZGVyJyk7CiAgICAgICAgICAgICAgICAgICAg ICAgIGlmICghaXNMaXN0ICYmICFpc1RhYmxlKSBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnbWFy Z2luJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNMaXN0ICYmICFpc1RhYmxlKSBl bC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgncGFkZGluZycpOwogICAgICAgICAgICAgICAgICAgICAg ICBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnbGluZS1oZWlnaHQnKTsKICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFpc0xpc3QpIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7 CiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdtYXgtd2lk dGgnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RhYmxlKSBlbC5zdHlsZS5yZW1v dmVQcm9wZXJ0eSgnd2lkdGgnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgLy8gY2xhc3MtIHVuZCBzdHlsZS1BdHRyaWJ1dGUgZXh0ZXJuZXIgU2VpdGVuIGVudGZl cm5lbiB3ZW5uIHN0eWxlIGxlZXIKICAgICAgICAgICAgICAgICAgICAvLyBEUklWRS1pbnRlcm5l IEtsYXNzZW4gKGRyaXZlLSopIGJlaWJlaGFsdGVuCiAgICAgICAgICAgICAgICAgICAgaWYgKGVs LmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xh c3NlcyA9IGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKS5zcGxpdCgnICcpLmZpbHRlcihmdW5jdGlv bihjKSB7IHJldHVybiBjLnN0YXJ0c1dpdGgoJ2RyaXZlLScpOyB9KTsKICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGNsYXNzZXMubGVuZ3RoID4gMCkgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycs IGNsYXNzZXMuam9pbignICcpKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBlbC5yZW1v dmVBdHRyaWJ1dGUoJ2NsYXNzJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykgPT09ICcnKSBlbC5yZW1vdmVBdHRy aWJ1dGUoJ3N0eWxlJyk7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyBB bGxlIExpbmtzIGF1ZiB0YXJnZXQ9X2JsYW5rIHNldHplbiAoUG9ydGFsIGRhcmYgbmljaHQgdmVy bGFzc2VuIHdlcmRlbikKICAgICAgICAgICAgICAgIHBhcnNlZC5ib2R5LnF1ZXJ5U2VsZWN0b3JB bGwoJ2FbaHJlZl0nKS5mb3JFYWNoKGZ1bmN0aW9uKGEpIHsKICAgICAgICAgICAgICAgICAgICB2 YXIgaHJlZiA9IChhLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnKS50cmltKCk7CiAgICAgICAg ICAgICAgICAgICAgaWYgKGhyZWYuc3RhcnRzV2l0aCgnIycpKSByZXR1cm47CiAgICAgICAgICAg ICAgICAgICAgYS5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTsKICAgICAgICAgICAg ICAgICAgICBhLnNldEF0dHJpYnV0ZSgncmVsJywgJ25vb3BlbmVyIG5vcmVmZXJyZXInKTsKICAg ICAgICAgICAgICAgICAgICAvLyB0YXJnZXQ9X3NlbGYgZXhwbGl6aXQgZW50ZmVybmVuIGZhbGxz IGdlc2V0enQKICAgICAgICAgICAgICAgICAgICBpZiAoYS5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcp ID09PSAnX3NlbGYnKSBhLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpOwogICAgICAg ICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaWYgKGV4dGVybmFsSW1ncy5sZW5ndGggPiAw ICYmIHRoaXMuY3VycmVudERvYyAmJiBEcml2ZUZTLmNvbm5lY3RlZCkgewogICAgICAgICAgICAg ICAgICAgIC8vIEV4dGVybmUgQmlsZGVyIGhlcnVudGVybGFkZW4gdW5kIGxva2FsIHNwZWljaGVy bgogICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3RlSHRtbFdpdGhFeHRlcm5hbEltYWdlcyhw YXJzZWQuYm9keSwgZXh0ZXJuYWxJbWdzKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwg cGFyc2VkLmJvZHkuaW5uZXJIVE1MKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBl bHNlIGlmIChjbGlwVGV4dCkgewogICAgICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo J2luc2VydFRleHQnLCBmYWxzZSwgY2xpcFRleHQpOwogICAgICAgICAgICB9CiAgICAgICAgfTsK CiAgICAgICAgbGV0IHNhdmVUaW1lb3V0OwogICAgICAgIGVkaXRvcklucHV0Lm9uaW5wdXQgPSAo KSA9PiB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dChzYXZlVGltZW91dCk7CiAgICAgICAgICAg IHNhdmVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnNhdmVTdGF0ZSgpLCA1MDApOwog ICAgICAgIH07CgogICAgICAgIGVkaXRvcklucHV0Lm9ua2V5ZG93biA9IChlKSA9PiB7CiAgICAg ICAgICAgIC8vICMtUmVmZXJlbnogRHJvcGRvd24gc2NobGllc3NlbiBiZWkgRXNjYXBlCiAgICAg ICAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScgJiYgdGhpcy5feHJlZlZpc2libGUpIHsKICAg ICAgICAgICAgICAgIHRoaXMuY2xvc2VYcmVmRHJvcGRvd24oKTsKICAgICAgICAgICAgICAgIGUu cHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQog ICAgICAgICAgICBpZiAoKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpICYmIGUua2V5ID09PSAneicg JiYgIWUuc2hpZnRLZXkpIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAg ICAgICAgICAgICAgIHRoaXMudW5kbygpOwogICAgICAgICAgICB9IGVsc2UgaWYgKChlLmN0cmxL ZXkgfHwgZS5tZXRhS2V5KSAmJiAoZS5rZXkgPT09ICd5JyB8fCAoZS5rZXkgPT09ICd6JyAmJiBl LnNoaWZ0S2V5KSkpIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAg ICAgICAgICAgIHRoaXMucmVkbygpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAn IycgJiYgIWUuY3RybEtleSAmJiAhZS5tZXRhS2V5KSB7CiAgICAgICAgICAgICAgICAvLyAjLVRy aWdnZXI6IEFydGlrZWwtUmVmZXJlbnotRHJvcGRvd24gw7ZmZm5lbgogICAgICAgICAgICAgICAg c2V0VGltZW91dCgoKSA9PiB0aGlzLm9wZW5YcmVmRHJvcGRvd24oKSwgMTApOwogICAgICAgICAg ICB9IGVsc2UgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7CiAgICAgICAgICAgICAgICBlLnByZXZl bnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0 aW9uKCk7CiAgICAgICAgICAgICAgICBpZiAoIXNlbC5yYW5nZUNvdW50KSByZXR1cm47CiAgICAg ICAgICAgICAgICBjb25zdCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApOwogICAgICAgICAgICAg ICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKCiAgICAgICAgICAgICAgICAvLyBCbG9jay1Lb250 ZXh0IGVybWl0dGVsbgogICAgICAgICAgICAgICAgbGV0IGJsb2NrID0gcmFuZ2Uuc3RhcnRDb250 YWluZXI7CiAgICAgICAgICAgICAgICB3aGlsZSAoYmxvY2sgJiYgYmxvY2sgIT09IGlucHV0ICYm ICFbJ1AnLCdESVYnLCdIMScsJ0gyJywnSDMnLCdINCcsJ0g1JywnSDYnLCdMSSddLmluY2x1ZGVz KGJsb2NrLm5vZGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgIGJsb2NrID0gYmxvY2sucGFy ZW50Tm9kZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoYmxvY2sgJiYg WydIMScsJ0gyJywnSDMnLCdINCcsJ0g1JywnSDYnXS5pbmNsdWRlcyhibG9jay5ub2RlTmFtZSkp IHsKICAgICAgICAgICAgICAgICAgICAvLyBJbiBIZWFkaW5nOiBDdXJzb3IgYW0gRW5kZT8gLT4g bmV1ZXIgPHA+IG5hY2ggSGVhZGluZwogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyUmFu Z2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICAgICAgICAgICAgICAgIGFmdGVyUmFu Z2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGJsb2NrKTsKICAgICAgICAgICAgICAgICAgICBhZnRlclJh bmdlLnNldFN0YXJ0KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTsKICAgICAg ICAgICAgICAgICAgICBjb25zdCB0cmFpbGluZyA9IGFmdGVyUmFuZ2UuY2xvbmVDb250ZW50cygp LnRleHRDb250ZW50OwogICAgICAgICAgICAgICAgICAgIGlmICghdHJhaWxpbmcudHJpbSgpKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN1cnNvciBhbSBFbmRlIGRlcyBIZWFkaW5ncyAt PiBuZXVlciBBYnNhdHoKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ3AnKTsKICAgICAgICAgICAgICAgICAgICAgICAgcC5pbm5lckhUTUwg PSAnPGJyPic7CiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLnBhcmVudE5vZGUuaW5zZXJ0 QmVmb3JlKHAsIGJsb2NrLm5leHRTaWJsaW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICAgICAgICAgICAgICAg ICAgICBuZXdSYW5nZS5zZXRTdGFydChwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgbmV3 UmFuZ2UuY29sbGFwc2UodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbC5yZW1vdmVB bGxSYW5nZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsLmFkZFJhbmdlKG5ld1Jhbmdl KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAv LyBDdXJzb3IgbWl0dGVuIGltIEhlYWRpbmcgLT4gSGVhZGluZyB0ZWlsZW4sIFJlc3QgaW4gPHA+ CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3RGcmFnID0gYWZ0ZXJSYW5nZS5leHRy YWN0Q29udGVudHMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ3AnKTsKICAgICAgICAgICAgICAgICAgICAgICAgcC5hcHBlbmRDaGls ZChyZXN0RnJhZyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcC50ZXh0Q29udGVudC50 cmltKCkgJiYgIXAucXVlcnlTZWxlY3RvcignaW1nLGJyJykpIHAuaW5uZXJIVE1MID0gJzxicj4n OwogICAgICAgICAgICAgICAgICAgICAgICBibG9jay5wYXJlbnROb2RlLmluc2VydEJlZm9yZShw LCBibG9jay5uZXh0U2libGluZyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Jh bmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgbmV3 UmFuZ2Uuc2V0U3RhcnQocCwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JhbmdlLmNv bGxhcHNlKHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2Vz KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbC5hZGRSYW5nZShuZXdSYW5nZSk7CiAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChibG9jayAmJiBibG9j ay5ub2RlTmFtZSA9PT0gJ0xJJykgewogICAgICAgICAgICAgICAgICAgIC8vIEluIExpc3RlbmVs ZW1lbnQ6IGxlZXJlcyBMSSAtPiBMaXN0ZSB2ZXJsYXNzZW4KICAgICAgICAgICAgICAgICAgICBp ZiAoIWJsb2NrLnRleHRDb250ZW50LnRyaW0oKSAmJiAhYmxvY2sucXVlcnlTZWxlY3RvcignaW1n JykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdCA9IGJsb2NrLnBhcmVudE5v ZGU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdwJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHAuaW5uZXJIVE1MID0gJzxicj4nOwog ICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHAsIGxp c3QubmV4dFNpYmxpbmcpOwogICAgICAgICAgICAgICAgICAgICAgICBibG9jay5yZW1vdmUoKTsK ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QucXVlcnlTZWxlY3RvckFsbCgnbGknKS5s ZW5ndGggPT09IDApIGxpc3QucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgICAgICAgICAg ICAgbmV3UmFuZ2Uuc2V0U3RhcnQocCwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Jh bmdlLmNvbGxhcHNlKHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBzZWwucmVtb3ZlQWxs UmFuZ2VzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbC5hZGRSYW5nZShuZXdSYW5nZSk7 CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8g TmV1ZXMgTEkgZWluZnVlZ2VuCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0xpID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgYWZ0ZXJSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgICAgICAgICAg ICAgICAgIGFmdGVyUmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGJsb2NrKTsKICAgICAgICAgICAg ICAgICAgICAgICAgYWZ0ZXJSYW5nZS5zZXRTdGFydChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdl LmVuZE9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0xpLmFwcGVuZENoaWxkKGFm dGVyUmFuZ2UuZXh0cmFjdENvbnRlbnRzKCkpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAo IW5ld0xpLnRleHRDb250ZW50LnRyaW0oKSAmJiAhbmV3TGkucXVlcnlTZWxlY3RvcignaW1nLGJy JykpIG5ld0xpLmlubmVySFRNTCA9ICc8YnI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgYmxv Y2sucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3TGksIGJsb2NrLm5leHRTaWJsaW5nKTsKICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5n ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBuZXdSYW5nZS5zZXRTdGFydChuZXdMaSwgMCk7 CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpOwogICAgICAg ICAgICAgICAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICAgICAgICAg ICAgICAgIHNlbC5hZGRSYW5nZShuZXdSYW5nZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxlciBUZXh0 OiA8YnI+IGVpbmZ1ZWdlbiAoU29mdC1CcmVhaykKICAgICAgICAgICAgICAgICAgICBjb25zdCBi ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJyk7CiAgICAgICAgICAgICAgICAgICAgcmFu Z2UuaW5zZXJ0Tm9kZShicik7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGRvY3Vt ZW50LmNyZWF0ZVRleHROb2RlKCdcdTIwMEInKTsKICAgICAgICAgICAgICAgICAgICByYW5nZS5z ZXRTdGFydEFmdGVyKGJyKTsKICAgICAgICAgICAgICAgICAgICByYW5nZS5pbnNlcnROb2RlKHRl eHQpOwogICAgICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIodGV4dCk7CiAgICAg ICAgICAgICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAg c2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgICAgICAgICAgIHNlbC5hZGRSYW5nZShy YW5nZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfSwK CiAgICBzYXZlU3RhdGUoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNSZXN0b3JpbmcpIHJldHVybjsK ICAgICAgICBjb25zdCBlZGl0b3JJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0 b3JJbnB1dCcpOwogICAgICAgIGlmICghZWRpdG9ySW5wdXQpIHJldHVybjsKICAgICAgICBpZiAo dGhpcy5oaXN0b3J5SW5kZXggPCB0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMSkgewogICAgICAgICAg ICB0aGlzLmhpc3RvcnkgPSB0aGlzLmhpc3Rvcnkuc2xpY2UoMCwgdGhpcy5oaXN0b3J5SW5kZXgg KyAxKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZWRpdG9ySW5wdXQuaW5u ZXJIVE1MKTsKICAgICAgICB0aGlzLmhpc3RvcnlJbmRleCsrOwogICAgICAgIGlmICh0aGlzLmhp c3RvcnkubGVuZ3RoID4gNTApIHsgdGhpcy5oaXN0b3J5LnNoaWZ0KCk7IHRoaXMuaGlzdG9yeUlu ZGV4LS07IH0KICAgIH0sCgogICAgdW5kbygpIHsKICAgICAgICBpZiAodGhpcy5oaXN0b3J5SW5k ZXggPiAwKSB7CiAgICAgICAgICAgIHRoaXMuaGlzdG9yeUluZGV4LS07CiAgICAgICAgICAgIHRo aXMuaXNSZXN0b3JpbmcgPSB0cnVlOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgnZWRpdG9ySW5wdXQnKS5pbm5lckhUTUwgPSB0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5SW5k ZXhdOwogICAgICAgICAgICB0aGlzLmlzUmVzdG9yaW5nID0gZmFsc2U7CiAgICAgICAgfQogICAg fSwKCiAgICByZWRvKCkgewogICAgICAgIGlmICh0aGlzLmhpc3RvcnlJbmRleCA8IHRoaXMuaGlz dG9yeS5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgIHRoaXMuaGlzdG9yeUluZGV4Kys7CiAgICAg ICAgICAgIHRoaXMuaXNSZXN0b3JpbmcgPSB0cnVlOwogICAgICAgICAgICBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgnZWRpdG9ySW5wdXQnKS5pbm5lckhUTUwgPSB0aGlzLmhpc3RvcnlbdGhpcy5o aXN0b3J5SW5kZXhdOwogICAgICAgICAgICB0aGlzLmlzUmVzdG9yaW5nID0gZmFsc2U7CiAgICAg ICAgfQogICAgfSwKCiAgICAvLyA9PT0gQXJ0aWtlbC1SZWZlcmVueiAoIy1BdXRvY29tcGxldGUp ID09PQogICAgX3hyZWZWaXNpYmxlOiBmYWxzZSwKICAgIF94cmVmUmFuZ2U6IG51bGwsCiAgICBf eHJlZlNlbGVjdGVkRG9jOiBudWxsLAoKICAgIG9wZW5YcmVmRHJvcGRvd24oKSB7CiAgICAgICAg Ly8gQ3Vyc29yLVBvc2l0aW9uIG1lcmtlbiAoZGFzICMgd3VyZGUgZ2VyYWRlIGdldGlwcHQpCiAg ICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICBpZiAoIXNlbC5y YW5nZUNvdW50KSByZXR1cm47CiAgICAgICAgdGhpcy5feHJlZlJhbmdlID0gc2VsLmdldFJhbmdl QXQoMCkuY2xvbmVSYW5nZSgpOwoKICAgICAgICB2YXIgZHJvcGRvd24gPSBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgneHJlZkRyb3Bkb3duJyk7CiAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoJ3hyZWZTZWFyY2hJbnB1dCcpOwoKICAgICAgICAvLyBQb3NpdGlvbjog dW50ZXIgZGVtIEN1cnNvcgogICAgICAgIHZhciByZWN0ID0gdGhpcy5feHJlZlJhbmdlLmdldEJv dW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHZhciBsZWZ0ID0gcmVjdC5sZWZ0OwogICAgICAg IHZhciB0b3AgPSByZWN0LmJvdHRvbSArIDQ7CiAgICAgICAgaWYgKGxlZnQgKyAzODAgPiB3aW5k b3cuaW5uZXJXaWR0aCkgbGVmdCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gMzkwOwogICAgICAgIGlm ICh0b3AgKyAzNjAgPiB3aW5kb3cuaW5uZXJIZWlnaHQpIHRvcCA9IHJlY3QudG9wIC0gMzY0Owog ICAgICAgIGRyb3Bkb3duLnN0eWxlLmxlZnQgPSBNYXRoLm1heCgxMCwgbGVmdCkgKyAncHgnOwog ICAgICAgIGRyb3Bkb3duLnN0eWxlLnRvcCA9IE1hdGgubWF4KDEwLCB0b3ApICsgJ3B4JzsKCiAg ICAgICAgdGhpcy5feHJlZlNlbGVjdGVkRG9jID0gbnVsbDsKICAgICAgICBpbnB1dC52YWx1ZSA9 ICcnOwogICAgICAgIHRoaXMuX3JlbmRlclhyZWZBcnRpY2xlcygnJyk7CiAgICAgICAgZHJvcGRv d24uY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpOwogICAgICAgIHRoaXMuX3hyZWZWaXNpYmxlID0g dHJ1ZTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGlucHV0LmZvY3VzKCksIDMwKTsKCiAgICAg ICAgLy8gRWluZ2FiZS1IYW5kbGVyCiAgICAgICAgaW5wdXQub25pbnB1dCA9ICgpID0+IHsKICAg ICAgICAgICAgaWYgKHRoaXMuX3hyZWZTZWxlY3RlZERvYykgewogICAgICAgICAgICAgICAgdGhp cy5fcmVuZGVyWHJlZkhlYWRpbmdzKHRoaXMuX3hyZWZTZWxlY3RlZERvYywgaW5wdXQudmFsdWUp OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyWHJlZkFy dGljbGVzKGlucHV0LnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgaW5w dXQub25rZXlkb3duID0gKGUpID0+IHsKICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBl JykgeyB0aGlzLmNsb3NlWHJlZkRyb3Bkb3duKCk7IGUucHJldmVudERlZmF1bHQoKTsgfQogICAg ICAgIH07CgogICAgICAgIC8vIENsaWNrLU91dHNpZGUgc2NobGllc3NlbgogICAgICAgIHNldFRp bWVvdXQoKCkgPT4gewogICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3Vz ZWRvd24nLCB0aGlzLl94cmVmT3V0c2lkZUhhbmRsZXIgPSAoZSkgPT4gewogICAgICAgICAgICAg ICAgaWYgKCFkcm9wZG93bi5jb250YWlucyhlLnRhcmdldCkpIHRoaXMuY2xvc2VYcmVmRHJvcGRv d24oKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwgNTApOwogICAgfSwKCiAgICBjbG9zZVhy ZWZEcm9wZG93bigpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneHJlZkRyb3Bk b3duJykuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpOwogICAgICAgIHRoaXMuX3hyZWZWaXNp YmxlID0gZmFsc2U7CiAgICAgICAgdGhpcy5feHJlZlNlbGVjdGVkRG9jID0gbnVsbDsKICAgICAg ICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLl94cmVmT3V0 c2lkZUhhbmRsZXIpOwogICAgICAgIC8vIEZva3VzIHp1csO8Y2sgenVtIEVkaXRvcgogICAgICAg IHZhciBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9ySW5wdXQnKTsKICAg ICAgICBpZiAoZWRpdG9yKSBlZGl0b3IuZm9jdXMoKTsKICAgIH0sCgogICAgX3JlbmRlclhyZWZB cnRpY2xlcyhxdWVyeSkgewogICAgICAgIHZhciBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ3hyZWZMaXN0Jyk7CiAgICAgICAgdmFyIHEgPSBxdWVyeS50b0xvd2VyQ2FzZSgpLnRyaW0o KTsKICAgICAgICB2YXIgZG9jcyA9IERyaXZlRlMuZG9jdW1lbnRzLmZpbHRlcihmdW5jdGlvbihk KSB7CiAgICAgICAgICAgIGlmIChEcml2ZUVkaXRvci5jdXJyZW50RG9jICYmIGQuaWQgPT09IERy aXZlRWRpdG9yLmN1cnJlbnREb2MuaWQpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgaWYgKCFx KSByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuIChkLnRpdGVsICYmIGQudGl0ZWwudG9M b3dlckNhc2UoKS5pbmNsdWRlcyhxKSkgfHwKICAgICAgICAgICAgICAgICAgIChkLmthdGVnb3Jp ZSAmJiBkLmthdGVnb3JpZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpKSB8fAogICAgICAgICAg ICAgICAgICAgKGQuc2NobGFnd29lcnRlciAmJiBkLnNjaGxhZ3dvZXJ0ZXIuc29tZShmdW5jdGlv bihrKSB7IHJldHVybiBrLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSk7IH0pKTsKICAgICAgICB9 KS5zbGljZSgwLCAyMCk7CgogICAgICAgIGlmIChkb2NzLmxlbmd0aCA9PT0gMCkgewogICAgICAg ICAgICBsaXN0LmlubmVySFRNTCA9ICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjE2cHg7dGV4dC1hbGln bjpjZW50ZXI7Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCk7Zm9udC1zaXplOjEzcHg7Ij5LZWluZSBB cnRpa2VsIGdlZnVuZGVuPC9kaXY+JzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAg ICAgICAgbGlzdC5pbm5lckhUTUwgPSBkb2NzLm1hcChmdW5jdGlvbihkKSB7CiAgICAgICAgICAg IHJldHVybiAnPGRpdiBjbGFzcz0ieHJlZi1pdGVtIiBvbmNsaWNrPSJEcml2ZUVkaXRvci5zZWxl Y3RYcmVmQXJ0aWNsZShcJycgKyBEcml2ZVBvcnRhbC5lc2NhcGVBdHRyKGQuaWQpICsgJ1wnKSI+ JyArCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ieHJlZi10aXRsZSI+JyArIERyaXZlUG9y dGFsLmVzY2FwZUhUTUwoZC50aXRlbCkgKyAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAnPGRp diBjbGFzcz0ieHJlZi1jYXQiPicgKyBEcml2ZVBvcnRhbC5lc2NhcGVIVE1MKGQua2F0ZWdvcmll KSArCiAgICAgICAgICAgICAgICAoZC5zY2hsYWd3b2VydGVyICYmIGQuc2NobGFnd29lcnRlci5s ZW5ndGggPyAnIMK3ICcgKyBkLnNjaGxhZ3dvZXJ0ZXIuc2xpY2UoMCwgMykuam9pbignLCAnKSA6 ICcnKSArCiAgICAgICAgICAgICAgICAnPC9kaXY+PC9kaXY+JzsKICAgICAgICB9KS5qb2luKCcn KTsKICAgIH0sCgogICAgc2VsZWN0WHJlZkFydGljbGUoZG9jSWQpIHsKICAgICAgICB2YXIgZG9j ID0gRHJpdmVGUy5kb2N1bWVudHMuZmluZChmdW5jdGlvbihkKSB7IHJldHVybiBkLmlkID09PSBk b2NJZDsgfSk7CiAgICAgICAgaWYgKCFkb2MpIHJldHVybjsKICAgICAgICB0aGlzLl94cmVmU2Vs ZWN0ZWREb2MgPSBkb2M7CgogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRC eUlkKCd4cmVmU2VhcmNoSW5wdXQnKTsKICAgICAgICBpbnB1dC52YWx1ZSA9ICcnOwogICAgICAg IGlucHV0LnBsYWNlaG9sZGVyID0gJ8OcYmVyc2NocmlmdCBzdWNoZW4gKG9kZXIgbGVlciBsYXNz ZW4gZsO8ciBBcnRpa2VsLUxpbmspLi4uJzsKCiAgICAgICAgdGhpcy5fcmVuZGVyWHJlZkhlYWRp bmdzKGRvYywgJycpOwogICAgICAgIGlucHV0LmZvY3VzKCk7CiAgICB9LAoKICAgIF9leHRyYWN0 SGVhZGluZ3MoaHRtbENvbnRlbnQpIHsKICAgICAgICBpZiAoIWh0bWxDb250ZW50KSByZXR1cm4g W107CiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAg ICAgIGRpdi5pbm5lckhUTUwgPSBodG1sQ29udGVudDsKICAgICAgICB2YXIgaGVhZGluZ3MgPSBb XTsKICAgICAgICBkaXYucXVlcnlTZWxlY3RvckFsbCgnaDEsIGgyLCBoMywgaDQnKS5mb3JFYWNo KGZ1bmN0aW9uKGgpIHsKICAgICAgICAgICAgdmFyIHRleHQgPSBoLnRleHRDb250ZW50LnRyaW0o KTsKICAgICAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgICAgIHZhciBzbHVnID0gdGV4 dC50b0xvd2VyQ2FzZSgpCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL8OkL2csICdhZScp LnJlcGxhY2UoL8O2L2csICdvZScpLnJlcGxhY2UoL8O8L2csICd1ZScpLnJlcGxhY2UoL8OfL2cs ICdzcycpCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgJy0nKS5y ZXBsYWNlKC9eLXwtJC9nLCAnJyk7CiAgICAgICAgICAgICAgICBoZWFkaW5ncy5wdXNoKHsKICAg ICAgICAgICAgICAgICAgICB0ZXh0OiB0ZXh0LAogICAgICAgICAgICAgICAgICAgIGxldmVsOiBw YXJzZUludChoLnRhZ05hbWUuY2hhckF0KDEpKSwKICAgICAgICAgICAgICAgICAgICBzbHVnOiBz bHVnCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAg IHJldHVybiBoZWFkaW5nczsKICAgIH0sCgogICAgX3JlbmRlclhyZWZIZWFkaW5ncyhkb2MsIHF1 ZXJ5KSB7CiAgICAgICAgdmFyIGxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneHJlZkxp c3QnKTsKICAgICAgICB2YXIgaGVhZGluZ3MgPSB0aGlzLl9leHRyYWN0SGVhZGluZ3MoZG9jLmlu aGFsdCk7CiAgICAgICAgdmFyIHEgPSBxdWVyeS50b0xvd2VyQ2FzZSgpLnRyaW0oKTsKCiAgICAg ICAgLy8gWnVyw7xjay1CdXR0b24gKyBBcnRpa2VsLUxpbmsgKG9obmUgw5xiZXJzY2hyaWZ0KQog ICAgICAgIHZhciBodG1sID0gJzxkaXYgY2xhc3M9InhyZWYtYmFjayIgb25jbGljaz0iRHJpdmVF ZGl0b3IuX3hyZWZTZWxlY3RlZERvYz1udWxsO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwneHJl ZlNlYXJjaElucHV0XCcpLnBsYWNlaG9sZGVyPVwnQXJ0aWtlbCBzdWNoZW4uLi5cJztEcml2ZUVk aXRvci5fcmVuZGVyWHJlZkFydGljbGVzKFwnXCcpOyI+4oaQIFp1csO8Y2sgenVyIEFydGlrZWxs aXN0ZTwvZGl2Pic7CiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ieHJlZi1pdGVtIiBvbmNs aWNrPSJEcml2ZUVkaXRvci5pbnNlcnRYcmVmKFwnJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIo ZG9jLmlkKSArICdcJywgXCdcJykiPicgKwogICAgICAgICAgICAnPGRpdiBjbGFzcz0ieHJlZi10 aXRsZSI+JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoZG9jLnRpdGVsKSArICc8L2Rpdj4nICsK ICAgICAgICAgICAgJzxkaXYgY2xhc3M9InhyZWYtY2F0Ij5HZXNhbXRlbiBBcnRpa2VsIHZlcmxp bmtlbjwvZGl2PjwvZGl2Pic7CgogICAgICAgIHZhciBmaWx0ZXJlZCA9IGhlYWRpbmdzLmZpbHRl cihmdW5jdGlvbihoKSB7CiAgICAgICAgICAgIHJldHVybiAhcSB8fCBoLnRleHQudG9Mb3dlckNh c2UoKS5pbmNsdWRlcyhxKTsKICAgICAgICB9KTsKCiAgICAgICAgZmlsdGVyZWQuZm9yRWFjaChm dW5jdGlvbihoKSB7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSAoaC5sZXZlbCAtIDEpICogMTI7 CiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InhyZWYtaXRlbSBoZWFkaW5nIiBzdHls ZT0icGFkZGluZy1sZWZ0OicgKyAoMTYgKyBpbmRlbnQpICsgJ3B4OyIgb25jbGljaz0iRHJpdmVF ZGl0b3IuaW5zZXJ0WHJlZihcJycgKyBEcml2ZVBvcnRhbC5lc2NhcGVBdHRyKGRvYy5pZCkgKyAn XCcsIFwnJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoaC5zbHVnKSArICdcJykiPicgKwogICAg ICAgICAgICAgICAgJzxkaXYgY2xhc3M9InhyZWYtdGl0bGUiPicgKyBEcml2ZVBvcnRhbC5lc2Nh cGVIVE1MKGgudGV4dCkgKyAnPC9kaXY+PC9kaXY+JzsKICAgICAgICB9KTsKCiAgICAgICAgaWYg KGhlYWRpbmdzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxl PSJwYWRkaW5nOjEycHggMTZweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10ZXh0LW11dGVk KTsiPktlaW5lIMOcYmVyc2NocmlmdGVuIGltIEFydGlrZWwgdm9yaGFuZGVuPC9kaXY+JzsKICAg ICAgICB9CgogICAgICAgIGxpc3QuaW5uZXJIVE1MID0gaHRtbDsKICAgIH0sCgogICAgaW5zZXJ0 WHJlZihkb2NJZCwgaGVhZGluZ1NsdWcpIHsKICAgICAgICB2YXIgZG9jID0gRHJpdmVGUy5kb2N1 bWVudHMuZmluZChmdW5jdGlvbihkKSB7IHJldHVybiBkLmlkID09PSBkb2NJZDsgfSk7CiAgICAg ICAgaWYgKCFkb2MpIHJldHVybjsKCiAgICAgICAgdGhpcy5jbG9zZVhyZWZEcm9wZG93bigpOwoK ICAgICAgICAvLyBEYXMgIyBlbnRmZXJuZW4gZGFzIGRlbiBEcm9wZG93biBnZXRyaWdnZXJ0IGhh dAogICAgICAgIHZhciBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9ySW5w dXQnKTsKICAgICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwoKICAgICAgICAv LyBDdXJzb3ItUG9zaXRpb24gd2llZGVyaGVyc3RlbGxlbgogICAgICAgIGlmICh0aGlzLl94cmVm UmFuZ2UpIHsKICAgICAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgICBz ZWwuYWRkUmFuZ2UodGhpcy5feHJlZlJhbmdlKTsKICAgICAgICB9CgogICAgICAgIC8vIEVpbiBa ZWljaGVuIHp1csO8Y2sgKGRhcyAjKSBsw7ZzY2hlbgogICAgICAgIGlmIChzZWwucmFuZ2VDb3Vu dCkgewogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAg ICAgcmFuZ2Uuc2V0U3RhcnQocmFuZ2Uuc3RhcnRDb250YWluZXIsIE1hdGgubWF4KDAsIHJhbmdl LnN0YXJ0T2Zmc2V0IC0gMSkpOwogICAgICAgICAgICByYW5nZS5kZWxldGVDb250ZW50cygpOwog ICAgICAgIH0KCiAgICAgICAgLy8gQ3Jvc3NsaW5rLUVsZW1lbnQgZWluZsO8Z2VuCiAgICAgICAg dmFyIGFuY2hvciA9IGhlYWRpbmdTbHVnID8gZG9jSWQgKyAnIycgKyBoZWFkaW5nU2x1ZyA6IGRv Y0lkOwogICAgICAgIHZhciBsYWJlbCA9IGRvYy50aXRlbDsKICAgICAgICBpZiAoaGVhZGluZ1Ns dWcpIHsKICAgICAgICAgICAgdmFyIGhlYWRpbmdzID0gdGhpcy5fZXh0cmFjdEhlYWRpbmdzKGRv Yy5pbmhhbHQpOwogICAgICAgICAgICB2YXIgbWF0Y2ggPSBoZWFkaW5ncy5maW5kKGZ1bmN0aW9u KGgpIHsgcmV0dXJuIGguc2x1ZyA9PT0gaGVhZGluZ1NsdWc7IH0pOwogICAgICAgICAgICBpZiAo bWF0Y2gpIGxhYmVsID0gZG9jLnRpdGVsICsgJyDihpIgJyArIG1hdGNoLnRleHQ7CiAgICAgICAg fQoKICAgICAgICB2YXIgeHJlZkh0bWwgPSAnPHNwYW4gY2xhc3M9ImRyaXZlLXhyZWYiIGRhdGEt eHJlZi10YXJnZXQ9IicgKyBEcml2ZVBvcnRhbC5lc2NhcGVBdHRyKGFuY2hvcikgKyAnIiBjb250 ZW50ZWRpdGFibGU9ImZhbHNlIj4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChsYWJlbCkgKyAn PC9zcGFuPiZuYnNwOyc7CgogICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1M JywgZmFsc2UsIHhyZWZIdG1sKTsKICAgICAgICB0aGlzLnNhdmVTdGF0ZSgpOwogICAgfSwKCiAg ICAvLyAtLS0gQWNjb3JkaW9uIChBdWZrbGFwcGJhcmVyIFRleHRiZXJlaWNoKSAtLS0KICAgIF9h Y2NDb3VudGVyOiAwLAoKICAgIGluc2VydEFjY29yZGlvbigpIHsKICAgICAgICB2YXIgc2VsID0g d2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIHRoaXMuX2FjY1JhbmdlID0gKHNlbCAmJiBz ZWwucmFuZ2VDb3VudCkgPyBzZWwuZ2V0UmFuZ2VBdCgwKS5jbG9uZVJhbmdlKCkgOiBudWxsOwog ICAgICAgIHRoaXMuX2FjY0NvdW50ZXIgPSAxOwogICAgICAgIHZhciBpbnB1dFN0eWxlID0gJ3dp ZHRoOjEwMCU7cGFkZGluZzo2cHggMTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1j b2xvcik7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjEzcHg7YmFja2dyb3VuZDp2YXIoLS1i Zy1pbnB1dCk7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5KTsnOwoKICAgICAgICB2YXIgbW9kYWwg PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBtb2RhbC5zdHlsZS5jc3NU ZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAl O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO3otaW5kZXg6MTA1MDA7ZGlzcGxheTpmbGV4O2Fs aWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyc7CiAgICAgICAgbW9kYWwu b25jbGljayA9IGZ1bmN0aW9uKGUpIHsgaWYgKGUudGFyZ2V0ID09PSBtb2RhbCkgbW9kYWwucmVt b3ZlKCk7IH07CiAgICAgICAgbW9kYWwuaW5uZXJIVE1MID0KICAgICAgICAgICAgJzxkaXYgc3R5 bGU9ImJhY2tncm91bmQ6dmFyKC0tYmctY2FyZCk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6 MjBweCAyNHB4O21heC13aWR0aDo2MDBweDt3aWR0aDo5MCU7Ym94LXNoYWRvdzowIDhweCAzMnB4 IHJnYmEoMCwwLDAsMC4zKTttYXgtaGVpZ2h0Ojg1dmg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0 aW9uOmNvbHVtbjsiPicgKwogICAgICAgICAgICAgICAgJzxoMyBzdHlsZT0iY29sb3I6dmFyKC0t dGV4dC1oZWFkaW5nKTttYXJnaW4tYm90dG9tOjEwcHg7ZmxleC1zaHJpbms6MDsiPkF1ZmtsYXBw YmFyZSBCZXJlaWNoZSBlaW5mw7xnZW48L2gzPicgKwogICAgICAgICAgICAgICAgJzxwIHN0eWxl PSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTttYXJnaW4tYm90dG9tOjEy cHg7ZmxleC1zaHJpbms6MDsiPkplZGVyIEJlcmVpY2ggaGF0IGVpbmVuIFRpdGVsIChpbW1lciBz aWNodGJhcikgdW5kIGVpbmVuIEluaGFsdCAod2lyZCBiZWltIEtsaWNrIGF1Zmdla2xhcHB0KS4g RHUga2FubnN0IG1laHJlcmUgQmVyZWljaGUgYXVmIGVpbm1hbCBlaW5mw7xnZW4uPC9wPicgKwog ICAgICAgICAgICAgICAgJzxkaXYgaWQ9ImFjY0luc2VydEl0ZW1zIiBzdHlsZT0ib3ZlcmZsb3ct eTphdXRvO2ZsZXg6MTttaW4taGVpZ2h0OjA7cGFkZGluZy1yaWdodDo0cHg7Ij4nICsKICAgICAg ICAgICAgICAgICAgICBEcml2ZUVkaXRvci5fYWNjSXRlbUh0bWwoMSkgKwogICAgICAgICAgICAg ICAgJzwvZGl2PicgKwogICAgICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImZsZXgtc2hyaW5rOjA7 bWFyZ2luLXRvcDoxMHB4O3BhZGRpbmctdG9wOjEwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFy KC0tYm9yZGVyLWxpZ2h0KTsiPicgKwogICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIG9uY2xp Y2s9IkRyaXZlRWRpdG9yLl9hZGRBY2NJdGVtKCkiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6 OHB4O2JvcmRlcjoxcHggZGFzaGVkIHZhcigtLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZDp2YXIo LS1iZy1jYXJkLWFsdCk7Ym9yZGVyLXJhZGl1czo0cHg7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFy KC0tdGV4dC1oZWFkaW5nKTtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHg7Ij4rIFdlaXRl cmVuIEJlcmVpY2ggaGluenVmw7xnZW48L2J1dHRvbj4nICsKICAgICAgICAgICAgICAgICc8L2Rp dj4nICsKICAgICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDtq dXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luLXRvcDoxMHB4O2ZsZXgtc2hyaW5rOjA7Ij4n ICsKICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBvbmNsaWNrPSJ0aGlzLmNsb3Nlc3QoXCdk aXZbc3R5bGVdXCcpLnBhcmVudEVsZW1lbnQucmVtb3ZlKCkiIHN0eWxlPSJwYWRkaW5nOjhweCAx NnB4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9y KTtiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQpO2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Y3Vy c29yOnBvaW50ZXI7Ij5BYmJyZWNoZW48L2J1dHRvbj4nICsKICAgICAgICAgICAgICAgICAgICAn PGJ1dHRvbiBvbmNsaWNrPSJEcml2ZUVkaXRvci5fY29uZmlybUFjY29yZGlvbigpIiBzdHlsZT0i cGFkZGluZzo4cHggMTZweDtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6bm9uZTtiYWNrZ3JvdW5k OnZhcigtLXRleHQtaGVhZGluZyk7Y29sb3I6d2hpdGU7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWln aHQ6NjAwOyI+RWluZsO8Z2VuPC9idXR0b24+JyArCiAgICAgICAgICAgICAgICAnPC9kaXY+JyAr CiAgICAgICAgICAgICc8L2Rpdj4nOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo bW9kYWwpOwogICAgICAgIHRoaXMuX2FjY01vZGFsID0gbW9kYWw7CiAgICAgICAgc2V0VGltZW91 dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGZpcnN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoJ2FjY1RfMScpOwogICAgICAgICAgICBpZiAoZmlyc3QpIGZpcnN0LmZvY3VzKCk7CiAg ICAgICAgfSwgNTApOwogICAgfSwKCiAgICBfYWNjTW9kYWw6IG51bGwsCgogICAgX2FjY0l0ZW1I dG1sKG51bSkgewogICAgICAgIHZhciBpbnB1dFN0eWxlID0gJ3dpZHRoOjEwMCU7cGFkZGluZzo2 cHggMTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1 czo0cHg7Zm9udC1zaXplOjEzcHg7YmFja2dyb3VuZDp2YXIoLS1iZy1pbnB1dCk7Y29sb3I6dmFy KC0tdGV4dC1wcmltYXJ5KTsnOwogICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0iYWNjLWluc2Vy dC1pdGVtIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmc6MTBweCAxMnB4O2JhY2tn cm91bmQ6dmFyKC0tYmctY2FyZC1hbHQpO2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoxcHggc29s aWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsiPicgKwogICAgICAgICAgICAnPGRpdiBzdHlsZT0iZGlz cGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRl cjttYXJnaW4tYm90dG9tOjZweDsiPicgKwogICAgICAgICAgICAgICAgJzxsYWJlbCBzdHlsZT0i Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXRleHQtaGVhZGluZyk7 Ij5CZXJlaWNoICcgKyBudW0gKyAnPC9sYWJlbD4nICsKICAgICAgICAgICAgICAgIChudW0gPiAx ID8gJzxidXR0b24gb25jbGljaz0idGhpcy5jbG9zZXN0KFwnLmFjYy1pbnNlcnQtaXRlbVwnKS5y ZW1vdmUoKSIgc3R5bGU9ImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtjb2xvcjp2YXIoLS10 ZXh0LW11dGVkKTtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTRweDsiIHRpdGxlPSJFbnRmZXJu ZW4iPiZ0aW1lczs8L2J1dHRvbj4nIDogJycpICsKICAgICAgICAgICAgJzwvZGl2PicgKwogICAg ICAgICAgICAnPGlucHV0IHR5cGU9InRleHQiIGlkPSJhY2NUXycgKyBudW0gKyAnIiBwbGFjZWhv bGRlcj0iVGl0ZWwgKGltbWVyIHNpY2h0YmFyKS4uLiIgc3R5bGU9IicgKyBpbnB1dFN0eWxlICsg J21hcmdpbi1ib3R0b206NnB4O2ZvbnQtd2VpZ2h0OjYwMDsiPicgKwogICAgICAgICAgICAnPHRl eHRhcmVhIGlkPSJhY2NDXycgKyBudW0gKyAnIiBwbGFjZWhvbGRlcj0iSW5oYWx0ICh3aXJkIGF1 Zmdla2xhcHB0KS4uLiIgcm93cz0iMyIgc3R5bGU9IicgKyBpbnB1dFN0eWxlICsgJ3Jlc2l6ZTp2 ZXJ0aWNhbDtsaW5lLWhlaWdodDoxLjU7Ij48L3RleHRhcmVhPicgKwogICAgICAgICc8L2Rpdj4n OwogICAgfSwKCiAgICBfYWRkQWNjSXRlbSgpIHsKICAgICAgICB0aGlzLl9hY2NDb3VudGVyKys7 CiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2NJbnNl cnRJdGVtcycpOwogICAgICAgIGlmICghY29udGFpbmVyKSByZXR1cm47CiAgICAgICAgdmFyIGRp diA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIGRpdi5pbm5lckhUTUwg PSB0aGlzLl9hY2NJdGVtSHRtbCh0aGlzLl9hY2NDb3VudGVyKTsKICAgICAgICBjb250YWluZXIu YXBwZW5kQ2hpbGQoZGl2LmZpcnN0Q2hpbGQpOwogICAgICAgIHZhciBuZXdUID0gZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoJ2FjY1RfJyArIHRoaXMuX2FjY0NvdW50ZXIpOwogICAgICAgIGlmIChu ZXdUKSB7IG5ld1QuZm9jdXMoKTsgbmV3VC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21v b3RoJywgYmxvY2s6ICduZWFyZXN0JyB9KTsgfQogICAgfSwKCiAgICBfY29uZmlybUFjY29yZGlv bigpIHsKICAgICAgICB2YXIgaXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjYWNj SW5zZXJ0SXRlbXMgLmFjYy1pbnNlcnQtaXRlbScpOwogICAgICAgIHZhciBlbnRyaWVzID0gW107 CiAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7CiAgICAgICAgICAgIHZhciB0 SW5wdXQgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2lkXj0iYWNjVF8iXScpOwogICAgICAg ICAgICB2YXIgY0lucHV0ID0gaXRlbS5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYVtpZF49ImFjY0Nf Il0nKTsKICAgICAgICAgICAgdmFyIHQgPSB0SW5wdXQgPyB0SW5wdXQudmFsdWUudHJpbSgpIDog Jyc7CiAgICAgICAgICAgIHZhciBjID0gY0lucHV0ID8gY0lucHV0LnZhbHVlLnRyaW0oKSA6ICcn OwogICAgICAgICAgICBpZiAodCkgZW50cmllcy5wdXNoKHsgdGl0bGU6IHQsIGNvbnRlbnQ6IGMg fHwgJycgfSk7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSB7 CiAgICAgICAgICAgIHNob3dUb2FzdCgnQml0dGUgbWluZGVzdGVucyBlaW5lbiBUaXRlbCBlaW5n ZWJlbicsICd3YXJuaW5nJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAg IGlmICh0aGlzLl9hY2NNb2RhbCkgeyB0aGlzLl9hY2NNb2RhbC5yZW1vdmUoKTsgdGhpcy5fYWNj TW9kYWwgPSBudWxsOyB9CgogICAgICAgIHZhciBhY2NIdG1sID0gJyc7CiAgICAgICAgZW50cmll cy5mb3JFYWNoKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBEcml2ZVBv cnRhbC5lc2NhcGVIVE1MKGUuY29udGVudCkucmVwbGFjZSgvXG4vZywgJzxicj4nKSB8fCAnPHA+ PC9wPic7CiAgICAgICAgICAgIGFjY0h0bWwgKz0KICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNz PSJkcml2ZS1hY2NvcmRpb24iIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPicgKwogICAgICAgICAg ICAgICAgICAgICc8ZGl2IGNsYXNzPSJkcml2ZS1hY2NvcmRpb24taGVhZGVyIj4nICsKICAgICAg ICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJkcml2ZS1hY2NvcmRpb24tYXJyb3ciPjxp bWcgc3JjPSJjc3MvaWNvbnMvQ2hldnJvbi5wbmciIHN0eWxlPSJ3aWR0aDoxMnB4O2hlaWdodDox MnB4OyI+PC9zcGFuPicgKwogICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4+JyArIERyaXZl UG9ydGFsLmVzY2FwZUhUTUwoZS50aXRsZSkgKyAnPC9zcGFuPicgKwogICAgICAgICAgICAgICAg ICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iZHJpdmUtYWNj b3JkaW9uLWJvZHkiPicgKyBjb250ZW50ICsgJzwvZGl2PicgKwogICAgICAgICAgICAgICAgJzwv ZGl2Pic7CiAgICAgICAgfSk7CiAgICAgICAgYWNjSHRtbCArPSAnPGJyPic7CgogICAgICAgIHZh ciBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9ySW5wdXQnKTsKICAgICAg ICBlZGl0b3IuZm9jdXMoKTsKICAgICAgICBpZiAodGhpcy5fYWNjUmFuZ2UpIHsKICAgICAgICAg ICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgc2VsLnJlbW92 ZUFsbFJhbmdlcygpOwogICAgICAgICAgICBzZWwuYWRkUmFuZ2UodGhpcy5fYWNjUmFuZ2UpOwog ICAgICAgICAgICB0aGlzLl9hY2NSYW5nZSA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGRvY3Vt ZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIGFjY0h0bWwpOwogICAgICAgIHRo aXMuc2F2ZVN0YXRlKCk7CiAgICB9LAoKICAgIC8vIC0tLSBGQVEtQmVyZWljaCAtLS0KICAgIF9m YXFDb3VudGVyOiAwLAoKICAgIGluc2VydEZBUSgpIHsKICAgICAgICB0aGlzLl9mYXFDb3VudGVy ID0gMTsKICAgICAgICAvLyBDdXJzb3ItUG9zaXRpb24gbWVya2VuCiAgICAgICAgdmFyIHNlbCA9 IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICB0aGlzLl9mYXFSYW5nZSA9IChzZWwgJiYg c2VsLnJhbmdlQ291bnQpID8gc2VsLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpIDogbnVsbDsK ICAgICAgICB2YXIgaW5wdXRTdHlsZSA9ICd3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDEwcHg7Ym9y ZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQt c2l6ZToxM3B4O2JhY2tncm91bmQ6dmFyKC0tYmctaW5wdXQpO2NvbG9yOnZhcigtLXRleHQtcHJp bWFyeSk7JzsKICAgICAgICB2YXIgbW9kYWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn KTsKICAgICAgICBtb2RhbC5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xl ZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO3ot aW5kZXg6MTA1MDA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRl bnQ6Y2VudGVyOyc7CiAgICAgICAgbW9kYWwub25jbGljayA9IGZ1bmN0aW9uKGUpIHsgaWYgKGUu dGFyZ2V0ID09PSBtb2RhbCkgbW9kYWwucmVtb3ZlKCk7IH07CiAgICAgICAgbW9kYWwuaW5uZXJI VE1MID0KICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmctY2FyZCk7 Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MjBweCAyNHB4O21heC13aWR0aDo2NDBweDt3aWR0 aDo5MCU7Ym94LXNoYWRvdzowIDhweCAzMnB4IHJnYmEoMCwwLDAsMC4zKTttYXgtaGVpZ2h0Ojg1 dmg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsiPicgKwogICAgICAgICAgICAg ICAgJzxoMyBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTttYXJnaW4tYm90dG9tOjE0 cHg7ZmxleC1zaHJpbms6MDsiPkZBUS1CZXJlaWNoIGVpbmbDvGdlbjwvaDM+JyArCiAgICAgICAg ICAgICAgICAnPGRpdiBpZD0iZmFxSW5zZXJ0SXRlbXMiIHN0eWxlPSJvdmVyZmxvdy15OmF1dG87 ZmxleDoxO21pbi1oZWlnaHQ6MDtwYWRkaW5nLXJpZ2h0OjRweDsiPicgKwogICAgICAgICAgICAg ICAgICAgIERyaXZlRWRpdG9yLl9mYXFJdGVtSHRtbCgxKSArCiAgICAgICAgICAgICAgICAnPC9k aXY+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBzdHlsZT0iZmxleC1zaHJpbms6MDttYXJnaW4t dG9wOjEwcHg7cGFkZGluZy10b3A6MTBweDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1ib3Jk ZXItbGlnaHQpOyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gb25jbGljaz0iRHJp dmVFZGl0b3IuX2FkZEZhcUl0ZW0oKSIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHg7Ym9y ZGVyOjFweCBkYXNoZWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kOnZhcigtLWJnLWNh cmQtYWx0KTtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIoLS10ZXh0 LWhlYWRpbmcpO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweDsiPisgV2VpdGVyZSBGcmFn ZSBoaW56dWbDvGdlbjwvYnV0dG9uPicgKwogICAgICAgICAgICAgICAgJzwvZGl2PicgKwogICAg ICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O2p1c3RpZnktY29u dGVudDpmbGV4LWVuZDttYXJnaW4tdG9wOjEwcHg7ZmxleC1zaHJpbms6MDsiPicgKwogICAgICAg ICAgICAgICAgICAgICc8YnV0dG9uIG9uY2xpY2s9InRoaXMuY2xvc2VzdChcJ2RpdltzdHlsZV1c JykucGFyZW50RWxlbWVudC5yZW1vdmUoKSIgc3R5bGU9InBhZGRpbmc6OHB4IDE2cHg7Ym9yZGVy LXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO2JhY2tncm91 bmQ6dmFyKC0tYmctY2FyZCk7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5KTtjdXJzb3I6cG9pbnRl cjsiPkFiYnJlY2hlbjwvYnV0dG9uPicgKwogICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIG9u Y2xpY2s9IkRyaXZlRWRpdG9yLl9jb25maXJtRkFRKCkiIHN0eWxlPSJwYWRkaW5nOjhweCAxNnB4 O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjpub25lO2JhY2tncm91bmQ6dmFyKC0tdGV4dC1oZWFk aW5nKTtjb2xvcjp3aGl0ZTtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7Ij5FaW5mw7xn ZW48L2J1dHRvbj4nICsKICAgICAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgJzwv ZGl2Pic7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtb2RhbCk7CiAgICAgICAg dGhpcy5fZmFxTW9kYWwgPSBtb2RhbDsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewog ICAgICAgICAgICB2YXIgZmlyc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFxUV8xJyk7 CiAgICAgICAgICAgIGlmIChmaXJzdCkgZmlyc3QuZm9jdXMoKTsKICAgICAgICB9LCA1MCk7CiAg ICB9LAoKICAgIF9mYXFNb2RhbDogbnVsbCwKCiAgICBfZmFxSXRlbUh0bWwobnVtKSB7CiAgICAg ICAgdmFyIGlucHV0U3R5bGUgPSAnd2lkdGg6MTAwJTtwYWRkaW5nOjZweCAxMHB4O2JvcmRlcjox cHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6 MTNweDtiYWNrZ3JvdW5kOnZhcigtLWJnLWlucHV0KTtjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkp Oyc7CiAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJmYXEtaW5zZXJ0LWl0ZW0iIHN0eWxlPSJt YXJnaW4tYm90dG9tOjEycHg7cGFkZGluZzoxMHB4IDEycHg7YmFja2dyb3VuZDp2YXIoLS1iZy1j YXJkLWFsdCk7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIt bGlnaHQpOyI+JyArCiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlm eS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206 NnB4OyI+JyArCiAgICAgICAgICAgICAgICAnPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTFweDtm b250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTsiPkZyYWdlICcgKyBudW0g KyAnPC9sYWJlbD4nICsKICAgICAgICAgICAgICAgIChudW0gPiAxID8gJzxidXR0b24gb25jbGlj az0idGhpcy5jbG9zZXN0KFwnLmZhcS1pbnNlcnQtaXRlbVwnKS5yZW1vdmUoKSIgc3R5bGU9ImJh Y2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTtjdXJzb3I6 cG9pbnRlcjtmb250LXNpemU6MTRweDsiIHRpdGxlPSJFbnRmZXJuZW4iPiZ0aW1lczs8L2J1dHRv bj4nIDogJycpICsKICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAnPGlucHV0IHR5 cGU9InRleHQiIGlkPSJmYXFRXycgKyBudW0gKyAnIiBwbGFjZWhvbGRlcj0iRnJhZ2UgZWluZ2Vi ZW4uLi4iIHN0eWxlPSInICsgaW5wdXRTdHlsZSArICdtYXJnaW4tYm90dG9tOjZweDtmb250LXdl aWdodDo2MDA7Ij4nICsKICAgICAgICAgICAgJzx0ZXh0YXJlYSBpZD0iZmFxQV8nICsgbnVtICsg JyIgcGxhY2Vob2xkZXI9IkFudHdvcnQgZWluZ2ViZW4uLi4iIHJvd3M9IjMiIHN0eWxlPSInICsg aW5wdXRTdHlsZSArICdyZXNpemU6dmVydGljYWw7bGluZS1oZWlnaHQ6MS41OyI+PC90ZXh0YXJl YT4nICsKICAgICAgICAnPC9kaXY+JzsKICAgIH0sCgogICAgX2FkZEZhcUl0ZW0oKSB7CiAgICAg ICAgdGhpcy5fZmFxQ291bnRlcisrOwogICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5n ZXRFbGVtZW50QnlJZCgnZmFxSW5zZXJ0SXRlbXMnKTsKICAgICAgICBpZiAoIWNvbnRhaW5lcikg cmV0dXJuOwogICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK ICAgICAgICBkaXYuaW5uZXJIVE1MID0gdGhpcy5fZmFxSXRlbUh0bWwodGhpcy5fZmFxQ291bnRl cik7CiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGRpdi5maXJzdENoaWxkKTsKICAgICAg ICB2YXIgbmV3USA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYXFRXycgKyB0aGlzLl9mYXFD b3VudGVyKTsKICAgICAgICBpZiAobmV3USkgeyBuZXdRLmZvY3VzKCk7IG5ld1Euc2Nyb2xsSW50 b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcgfSk7IH0KICAgIH0s CgogICAgX2NvbmZpcm1GQVEoKSB7CiAgICAgICAgdmFyIGl0ZW1zID0gZG9jdW1lbnQucXVlcnlT ZWxlY3RvckFsbCgnI2ZhcUluc2VydEl0ZW1zIC5mYXEtaW5zZXJ0LWl0ZW0nKTsKICAgICAgICB2 YXIgcGFpcnMgPSBbXTsKICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHsKICAg ICAgICAgICAgdmFyIHFJbnB1dCA9IGl0ZW0ucXVlcnlTZWxlY3RvcignaW5wdXRbaWRePSJmYXFR XyJdJyk7CiAgICAgICAgICAgIHZhciBhSW5wdXQgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ3RleHRh cmVhW2lkXj0iZmFxQV8iXScpOwogICAgICAgICAgICB2YXIgcSA9IHFJbnB1dCA/IHFJbnB1dC52 YWx1ZS50cmltKCkgOiAnJzsKICAgICAgICAgICAgdmFyIGEgPSBhSW5wdXQgPyBhSW5wdXQudmFs dWUudHJpbSgpIDogJyc7CiAgICAgICAgICAgIGlmIChxKSBwYWlycy5wdXNoKHsgcTogcSwgYTog YSB8fCAnQW50d29ydCBhdXNzdGVoZW5kLicgfSk7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHBh aXJzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBzaG93VG9hc3QoJ0JpdHRlIG1pbmRlc3Rl bnMgZWluZSBGcmFnZSBlaW5nZWJlbicsICd3YXJuaW5nJyk7CiAgICAgICAgICAgIHJldHVybjsK ICAgICAgICB9CgogICAgICAgIGlmICh0aGlzLl9mYXFNb2RhbCkgeyB0aGlzLl9mYXFNb2RhbC5y ZW1vdmUoKTsgdGhpcy5fZmFxTW9kYWwgPSBudWxsOyB9CgogICAgICAgIC8vIFNwcnVuZ21hcmtl OiBmYXEte2FydGlrZWx0aXRlbC1zbHVnfQogICAgICAgIHZhciBzbHVnID0gJ2ZhcSc7CiAgICAg ICAgaWYgKHRoaXMuY3VycmVudERvYyAmJiB0aGlzLmN1cnJlbnREb2MudGl0ZWwpIHsKICAgICAg ICAgICAgc2x1ZyA9ICdmYXEtJyArIHRoaXMuY3VycmVudERvYy50aXRlbC50b0xvd2VyQ2FzZSgp CiAgICAgICAgICAgICAgICAucmVwbGFjZSgvw6QvZywnYWUnKS5yZXBsYWNlKC/Dti9nLCdvZScp LnJlcGxhY2UoL8O8L2csJ3VlJykucmVwbGFjZSgvw58vZywnc3MnKQogICAgICAgICAgICAgICAg LnJlcGxhY2UoL1teYS16MC05XSsvZywnLScpLnJlcGxhY2UoL14tfC0kL2csJycpOwogICAgICAg IH0KCiAgICAgICAgdmFyIGZhcUh0bWwgPSAnPGRpdiBjbGFzcz0iZHJpdmUtZmFxIiBpZD0iJyAr IERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoc2x1ZykgKyAnIiBjb250ZW50ZWRpdGFibGU9ImZhbHNl Ij4nOwogICAgICAgIGZhcUh0bWwgKz0gJzxkaXYgY2xhc3M9ImRyaXZlLWZhcS1oZWFkZXIiPjxp bWcgc3JjPSJjc3MvaWNvbnMvZmFxLnBuZyIgc3R5bGU9IndpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7 ZmlsdGVyOmludmVydCgxKSBicmlnaHRuZXNzKDIpOyI+IEZBUTwvZGl2Pic7CiAgICAgICAgZmFx SHRtbCArPSAnPGRpdiBjbGFzcz0iZHJpdmUtZmFxLWJvZHkiPic7CiAgICAgICAgcGFpcnMuZm9y RWFjaChmdW5jdGlvbihwKSB7CiAgICAgICAgICAgIGZhcUh0bWwgKz0gJzxkaXYgY2xhc3M9ImRy aXZlLWZhcS1pdGVtIj4nICsKICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJkcml2ZS1mYXEt cXVlc3Rpb24iPjxzcGFuIGNsYXNzPSJkcml2ZS1mYXEtYXJyb3ciPjxpbWcgc3JjPSJjc3MvaWNv bnMvQ2hldnJvbi5wbmciIHN0eWxlPSJ3aWR0aDoxMHB4O2hlaWdodDoxMHB4OyI+PC9zcGFuPjxz cGFuPicgKyBEcml2ZVBvcnRhbC5lc2NhcGVIVE1MKHAucSkgKyAnPC9zcGFuPjwvZGl2PicgKwog ICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImRyaXZlLWZhcS1hbnN3ZXIiPicgKyBEcml2ZVBv cnRhbC5lc2NhcGVIVE1MKHAuYSkucmVwbGFjZSgvXG4vZywgJzxicj4nKSArICc8L2Rpdj4nICsK ICAgICAgICAgICAgJzwvZGl2Pic7CiAgICAgICAgfSk7CiAgICAgICAgZmFxSHRtbCArPSAnPC9k aXY+PC9kaXY+PGJyPic7CgogICAgICAgIHZhciBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCgnZWRpdG9ySW5wdXQnKTsKICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgICAvLyBD dXJzb3ItUG9zaXRpb24gd2llZGVyaGVyc3RlbGxlbgogICAgICAgIGlmICh0aGlzLl9mYXFSYW5n ZSkgewogICAgICAgICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAg ICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICAgIHNlbC5hZGRSYW5nZSh0aGlz Ll9mYXFSYW5nZSk7CiAgICAgICAgICAgIHRoaXMuX2ZhcVJhbmdlID0gbnVsbDsKICAgICAgICB9 CiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgZmFxSHRt bCk7CiAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTsKICAgIH0sCgogICAgLy8gLS0tIFRhYmVsbGUg ZWluZsO8Z2VuIC0tLQogICAgaW5zZXJ0VGFibGUoKSB7CiAgICAgICAgdmFyIHNlbCA9IHdpbmRv dy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICB0aGlzLl90YmxSYW5nZSA9IChzZWwgJiYgc2VsLnJh bmdlQ291bnQpID8gc2VsLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpIDogbnVsbDsKICAgICAg ICB2YXIgbGFiZWxTdHlsZSA9ICdmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6 dmFyKC0tdGV4dC1zZWNvbmRhcnkpO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTozcHg7JzsK ICAgICAgICB2YXIgaW5wdXRTdHlsZSA9ICd3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDEwcHg7Ym9y ZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQt c2l6ZToxNHB4O2JhY2tncm91bmQ6dmFyKC0tYmctaW5wdXQpO2NvbG9yOnZhcigtLXRleHQtcHJp bWFyeSk7JzsKICAgICAgICB2YXIgY2JTdHlsZSA9ICdkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6 Y2VudGVyO2dhcDo2cHg7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5KTtj dXJzb3I6cG9pbnRlcjsnOwoKICAgICAgICB2YXIgbW9kYWwgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdkaXYnKTsKICAgICAgICBtb2RhbC5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVk O3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6cmdiYSgwLDAs MCwwLjUpO3otaW5kZXg6MTA1MDA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0 aWZ5LWNvbnRlbnQ6Y2VudGVyOyc7CiAgICAgICAgbW9kYWwub25jbGljayA9IGZ1bmN0aW9uKGUp IHsgaWYgKGUudGFyZ2V0ID09PSBtb2RhbCkgbW9kYWwucmVtb3ZlKCk7IH07CiAgICAgICAgbW9k YWwuaW5uZXJIVE1MID0KICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0t YmctY2FyZCk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MjBweCAyNHB4O21heC13aWR0aDo0 NDBweDt3aWR0aDo5MCU7Ym94LXNoYWRvdzowIDhweCAzMnB4IHJnYmEoMCwwLDAsMC4zKTsiPicg KwogICAgICAgICAgICAgICAgJzxoMyBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTtt YXJnaW4tYm90dG9tOjE2cHg7Ij5UYWJlbGxlIGVpbmbDvGdlbjwvaDM+JyArCgogICAgICAgICAg ICAgICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZy IDFmcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjE0cHg7Ij4nICsKICAgICAgICAgICAgICAgICAg ICAnPGRpdj48bGFiZWwgc3R5bGU9IicgKyBsYWJlbFN0eWxlICsgJyI+U3BhbHRlbjwvbGFiZWw+ JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0idGJs Q29scyIgdmFsdWU9IjMiIG1pbj0iMSIgbWF4PSIyMCIgc3R5bGU9IicgKyBpbnB1dFN0eWxlICsg JyI+PC9kaXY+JyArCiAgICAgICAgICAgICAgICAgICAgJzxkaXY+PGxhYmVsIHN0eWxlPSInICsg bGFiZWxTdHlsZSArICciPlplaWxlbjwvbGFiZWw+JyArCiAgICAgICAgICAgICAgICAgICAgICAg ICc8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0idGJsUm93cyIgdmFsdWU9IjQiIG1pbj0iMSIgbWF4 PSI1MCIgc3R5bGU9IicgKyBpbnB1dFN0eWxlICsgJyI+PC9kaXY+JyArCiAgICAgICAgICAgICAg ICAnPC9kaXY+JyArCgogICAgICAgICAgICAgICAgJzxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206 MTRweDtwYWRkaW5nOjEycHg7YmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkLWFsdCk7Ym9yZGVyLXJh ZGl1czo2cHg7Ij4nICsKICAgICAgICAgICAgICAgICAgICAnPGRpdiBzdHlsZT0iJyArIGxhYmVs U3R5bGUgKyAnbWFyZ2luLWJvdHRvbTo4cHg7Ij7DnGJlcnNjaHJpZnRlbjwvZGl2PicgKwogICAg ICAgICAgICAgICAgICAgICc8bGFiZWwgc3R5bGU9IicgKyBjYlN0eWxlICsgJ21hcmdpbi1ib3R0 b206NnB4OyI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idGJsQ29sSGVhZGVycyIgY2hlY2tl ZD4gU3BhbHRlbsO8YmVyc2NocmlmdGVuIChlcnN0ZSBaZWlsZSBmZXR0KTwvbGFiZWw+JyArCiAg ICAgICAgICAgICAgICAgICAgJzxsYWJlbCBzdHlsZT0iJyArIGNiU3R5bGUgKyAnIj48aW5wdXQg dHlwZT0iY2hlY2tib3giIGlkPSJ0YmxSb3dIZWFkZXJzIj4gWmVpbGVuw7xiZXJzY2hyaWZ0ZW4g KGVyc3RlIFNwYWx0ZSBmZXR0KTwvbGFiZWw+JyArCiAgICAgICAgICAgICAgICAnPC9kaXY+JyAr CgogICAgICAgICAgICAgICAgJzxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweDtwYWRkaW5n OjEycHg7YmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkLWFsdCk7Ym9yZGVyLXJhZGl1czo2cHg7Ij4n ICsKICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIHN0eWxlPSInICsgY2JTdHlsZSArICciPjxp bnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InRibFNvcnRhYmxlIj4gU29ydGllcmJhciAoS2xpY2sg YXVmIFNwYWx0ZW7DvGJlcnNjaHJpZnQgc29ydGllcnQpPC9sYWJlbD4nICsKICAgICAgICAgICAg ICAgICc8L2Rpdj4nICsKCiAgICAgICAgICAgICAgICAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4 O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kOyI+JyArCiAgICAgICAgICAgICAgICAg ICAgJzxidXR0b24gb25jbGljaz0idGhpcy5jbG9zZXN0KFwnZGl2W3N0eWxlXVwnKS5wYXJlbnRF bGVtZW50LnJlbW92ZSgpIiBzdHlsZT0icGFkZGluZzo4cHggMTZweDtib3JkZXItcmFkaXVzOjRw eDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1i Zy1jYXJkKTtjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpO2N1cnNvcjpwb2ludGVyOyI+QWJicmVj aGVuPC9idXR0b24+JyArCiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gb25jbGljaz0iRHJp dmVFZGl0b3IuX2NvbmZpcm1UYWJsZSgpIiBzdHlsZT0icGFkZGluZzo4cHggMTZweDtib3JkZXIt cmFkaXVzOjRweDtib3JkZXI6bm9uZTtiYWNrZ3JvdW5kOnZhcigtLXRleHQtaGVhZGluZyk7Y29s b3I6d2hpdGU7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwOyI+RWluZsO8Z2VuPC9idXR0 b24+JyArCiAgICAgICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICc8L2Rpdj4nOwog ICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobW9kYWwpOwogICAgICAgIHRoaXMuX3Ri bE1vZGFsID0gbW9kYWw7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoJ3RibENvbHMnKS5mb2N1cygpOyB9LCA1MCk7CiAgICB9LAoKICAgIF90 YmxNb2RhbDogbnVsbCwKCiAgICBfY29uZmlybVRhYmxlKCkgewogICAgICAgIHZhciBjb2xzID0g cGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RibENvbHMnKS52YWx1ZSkgfHwgMzsK ICAgICAgICB2YXIgcm93cyA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YmxS b3dzJykudmFsdWUpIHx8IDQ7CiAgICAgICAgdmFyIGNvbEhlYWRlcnMgPSBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgndGJsQ29sSGVhZGVycycpLmNoZWNrZWQ7CiAgICAgICAgdmFyIHJvd0hlYWRl cnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJsUm93SGVhZGVycycpLmNoZWNrZWQ7CiAg ICAgICAgdmFyIHNvcnRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RibFNvcnRhYmxl JykuY2hlY2tlZDsKCiAgICAgICAgY29scyA9IE1hdGgubWF4KDEsIE1hdGgubWluKDIwLCBjb2xz KSk7CiAgICAgICAgcm93cyA9IE1hdGgubWF4KDEsIE1hdGgubWluKDUwLCByb3dzKSk7CgogICAg ICAgIGlmICh0aGlzLl90YmxNb2RhbCkgeyB0aGlzLl90YmxNb2RhbC5yZW1vdmUoKTsgdGhpcy5f dGJsTW9kYWwgPSBudWxsOyB9CgogICAgICAgIHZhciBzb3J0Q2xhc3MgPSBzb3J0YWJsZSA/ICcg c29ydGFibGUnIDogJyc7CiAgICAgICAgdmFyIGh0bWwgPSAnPGRpdiBjbGFzcz0iZHJpdmUtdGFi bGUtd3JhcCIgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+PHRhYmxlIGNsYXNzPSJkcml2ZS10YWJs ZSInICsgKHNvcnRhYmxlID8gJyBkYXRhLXNvcnRhYmxlPSJ0cnVlIicgOiAnJykgKyAnPic7Cgog ICAgICAgIC8vIFNwYWx0ZW4tSGVhZGVyCiAgICAgICAgaWYgKGNvbEhlYWRlcnMpIHsKICAgICAg ICAgICAgaHRtbCArPSAnPHRoZWFkPjx0cj4nOwogICAgICAgICAgICBmb3IgKHZhciBjID0gMDsg YyA8IGNvbHM7IGMrKykgewogICAgICAgICAgICAgICAgaHRtbCArPSAnPHRoIGNsYXNzPSInICsg c29ydENsYXNzICsgJyIgY29udGVudGVkaXRhYmxlPSJ0cnVlIj5TcGFsdGUgJyArIChjICsgMSkg KyAnPC90aD4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGh0bWwgKz0gJzwvdHI+PC90aGVh ZD4nOwogICAgICAgIH0KCiAgICAgICAgaHRtbCArPSAnPHRib2R5Pic7CiAgICAgICAgdmFyIGRh dGFSb3dzID0gY29sSGVhZGVycyA/IHJvd3MgLSAxIDogcm93czsKICAgICAgICBmb3IgKHZhciBy ID0gMDsgciA8IGRhdGFSb3dzOyByKyspIHsKICAgICAgICAgICAgaHRtbCArPSAnPHRyPic7CiAg ICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29sczsgYysrKSB7CiAgICAgICAgICAgICAg ICBpZiAoYyA9PT0gMCAmJiByb3dIZWFkZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgaHRtbCAr PSAnPHRkIGNsYXNzPSJyb3ctaGVhZGVyIiBjb250ZW50ZWRpdGFibGU9InRydWUiPlplaWxlICcg KyAociArIDEpICsgJzwvdGQ+JzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg ICAgICAgICAgaHRtbCArPSAnPHRkIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+PC90ZD4nOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGh0bWwgKz0gJzwvdHI+JzsK ICAgICAgICB9CiAgICAgICAgaHRtbCArPSAnPC90Ym9keT48L3RhYmxlPjwvZGl2Pjxicj4nOwoK ICAgICAgICB2YXIgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcklucHV0 Jyk7CiAgICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICAgICAgaWYgKHRoaXMuX3RibFJhbmdlKSB7 CiAgICAgICAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICAg IHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHRoaXMuX3Ri bFJhbmdlKTsKICAgICAgICAgICAgdGhpcy5fdGJsUmFuZ2UgPSBudWxsOwogICAgICAgIH0KICAg ICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBodG1sKTsKICAg ICAgICB0aGlzLnNhdmVTdGF0ZSgpOwogICAgfSwKCiAgICAvLyAtLS0gVHJlbm5saW5pZSArIElu Zm9ib3ggLS0tCiAgICAvLyAtLS0gUkFXLU1vZHVzIChIVE1MLVF1ZWxsdGV4dCkgLS0tCiAgICBf cmF3TW9kZTogZmFsc2UsCgogICAgdG9nZ2xlUmF3KCkgewogICAgICAgIHZhciBlZGl0b3IgPSBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9ySW5wdXQnKTsKICAgICAgICB2YXIgYnRuID0g ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0blJhd01vZGUnKTsKICAgICAgICBpZiAoIWVkaXRv cikgcmV0dXJuOwoKICAgICAgICBpZiAodGhpcy5fcmF3TW9kZSkgewogICAgICAgICAgICAvLyBS QVcg4oaSIFdZU0lXWUc6IHRleHRhcmVhLUluaGFsdCB6dXJ1ZWNrIGluIGRlbiBFZGl0b3IKICAg ICAgICAgICAgdmFyIHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvclJh d1RleHRhcmVhJyk7CiAgICAgICAgICAgIGlmICh0ZXh0YXJlYSkgewogICAgICAgICAgICAgICAg ZWRpdG9yLmlubmVySFRNTCA9IHRleHRhcmVhLnZhbHVlOwogICAgICAgICAgICAgICAgdGV4dGFy ZWEucmVtb3ZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWRpdG9yLnN0eWxlLmRpc3Bs YXkgPSAnJzsKICAgICAgICAgICAgZWRpdG9yLmNvbnRlbnRFZGl0YWJsZSA9ICd0cnVlJzsKICAg ICAgICAgICAgYnRuLnN0eWxlLm9wYWNpdHkgPSAnMC42JzsKICAgICAgICAgICAgYnRuLnN0eWxl LmJhY2tncm91bmQgPSAnJzsKICAgICAgICAgICAgdGhpcy5fcmF3TW9kZSA9IGZhbHNlOwogICAg ICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFdZU0lXWUcg4oaSIFJBVzogRWRpdG9yLUhUTUwg aW4gVGV4dGFyZWEgYW56ZWlnZW4KICAgICAgICAgICAgdmFyIHJhd0h0bWwgPSBlZGl0b3IuaW5u ZXJIVE1MOwogICAgICAgICAgICBlZGl0b3Iuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAg ICAgICAgdmFyIHRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTsK ICAgICAgICAgICAgdGV4dGFyZWEuaWQgPSAnZWRpdG9yUmF3VGV4dGFyZWEnOwogICAgICAgICAg ICB0ZXh0YXJlYS52YWx1ZSA9IHJhd0h0bWw7CiAgICAgICAgICAgIHRleHRhcmVhLnN0eWxlLmNz c1RleHQgPSAnd2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OjMwMHB4O3BhZGRpbmc6 MTJweDtib3JkZXI6bm9uZTtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjEycHg7bGlu ZS1oZWlnaHQ6MS42O2JhY2tncm91bmQ6dmFyKC0tYmctaW5wdXQpO2NvbG9yOnZhcigtLXRleHQt cHJpbWFyeSk7cmVzaXplOm5vbmU7ZmxleDoxOyc7CiAgICAgICAgICAgIGVkaXRvci5wYXJlbnRO b2RlLmluc2VydEJlZm9yZSh0ZXh0YXJlYSwgZWRpdG9yLm5leHRTaWJsaW5nKTsKICAgICAgICAg ICAgYnRuLnN0eWxlLm9wYWNpdHkgPSAnMSc7CiAgICAgICAgICAgIGJ0bi5zdHlsZS5iYWNrZ3Jv dW5kID0gJ3ZhcigtLXRleHQtaGVhZGluZyknOwogICAgICAgICAgICBidG4uc3R5bGUuY29sb3Ig PSAnd2hpdGUnOwogICAgICAgICAgICB0aGlzLl9yYXdNb2RlID0gdHJ1ZTsKICAgICAgICB9CiAg ICB9LAoKICAgIGluc2VydERpdmlkZXIoKSB7CiAgICAgICAgdmFyIGVkaXRvciA9IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCdlZGl0b3JJbnB1dCcpOwogICAgICAgIGVkaXRvci5mb2N1cygpOwog ICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsICc8aHIgY2xh c3M9ImRyaXZlLWRpdmlkZXIiPjxicj4nKTsKICAgICAgICB0aGlzLnNhdmVTdGF0ZSgpOwogICAg fSwKCiAgICBpbnNlcnRJbmZvYm94KCkgewogICAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2Vs ZWN0aW9uKCk7CiAgICAgICAgdGhpcy5faW5mb2JveFJhbmdlID0gKHNlbCAmJiBzZWwucmFuZ2VD b3VudCkgPyBzZWwuZ2V0UmFuZ2VBdCgwKS5jbG9uZVJhbmdlKCkgOiBudWxsOwoKICAgICAgICB2 YXIgYnRuU3R5bGUgPSAnYmFja2dyb3VuZDpub25lO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9y ZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOjNweDtwYWRkaW5nOjNweCA4cHg7Y3Vyc29yOnBvaW50 ZXI7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5KTttaW4td2lkdGg6Mjhw eDsnOwogICAgICAgIHZhciBidG5TdHlsZUJvbGQgPSBidG5TdHlsZSArICdmb250LXdlaWdodDo3 MDA7JzsKICAgICAgICB2YXIgYnRuU3R5bGVJdGFsaWMgPSBidG5TdHlsZSArICdmb250LXN0eWxl Oml0YWxpYzsnOwogICAgICAgIHZhciBidG5TdHlsZVVuZGVybGluZSA9IGJ0blN0eWxlICsgJ3Rl eHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7JzsKICAgICAgICB2YXIgc2VsZWN0U3R5bGUgPSAnYmFj a2dyb3VuZDp2YXIoLS1iZy1pbnB1dCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29s b3IpO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6M3B4IDRweDtmb250LXNpemU6MTFweDtjb2xv cjp2YXIoLS10ZXh0LXByaW1hcnkpO2N1cnNvcjpwb2ludGVyOyc7CgogICAgICAgIHZhciBtb2Rh bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIG1vZGFsLnN0eWxlLmNz c1RleHQgPSAncG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEw MCU7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNSk7ei1pbmRleDoxMDUwMDtkaXNwbGF5OmZsZXg7 YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7JzsKICAgICAgICBtb2Rh bC5vbmNsaWNrID0gZnVuY3Rpb24oZSkgeyBpZiAoZS50YXJnZXQgPT09IG1vZGFsKSBtb2RhbC5y ZW1vdmUoKTsgfTsKICAgICAgICBtb2RhbC5pbm5lckhUTUwgPQogICAgICAgICAgICAnPGRpdiBz dHlsZT0iYmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGlu ZzoyMHB4IDI0cHg7bWF4LXdpZHRoOjUyMHB4O3dpZHRoOjk0JTtib3gtc2hhZG93OjAgOHB4IDMy cHggcmdiYSgwLDAsMCwwLjMpOyI+JyArCiAgICAgICAgICAgICAgICAnPGgzIHN0eWxlPSJjb2xv cjp2YXIoLS10ZXh0LWhlYWRpbmcpO21hcmdpbi1ib3R0b206MTRweDsiPkluZm9ibG9jayBlaW5m w7xnZW48L2gzPicgKwoKICAgICAgICAgICAgICAgICc8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZTox MnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10ZXh0LXNlY29uZGFyeSk7ZGlzcGxheTpi bG9jazttYXJnaW4tYm90dG9tOjRweDsiPsOcYmVyc2NocmlmdDwvbGFiZWw+JyArCiAgICAgICAg ICAgICAgICAnPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbmZvYm94VGl0bGUiIHZhbHVlPSJIaW53 ZWlzIiBwbGFjZWhvbGRlcj0iei5CLiBIaW53ZWlzLCBXaWNodGlnLCBUaXBwLi4uIiAnICsKICAg ICAgICAgICAgICAgICdzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMHB4O2JvcmRlcjox cHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6 MTRweDtiYWNrZ3JvdW5kOnZhcigtLWJnLWlucHV0KTtjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkp O21hcmdpbi1ib3R0b206MTRweDsiPicgKwoKICAgICAgICAgICAgICAgICc8bGFiZWwgc3R5bGU9 ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10ZXh0LXNlY29uZGFy eSk7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweDsiPkluaGFsdDwvbGFiZWw+JyArCiAg ICAgICAgICAgICAgICAnPGRpdiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIt Y29sb3IpO2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OmhpZGRlbjttYXJnaW4tYm90dG9tOjE0 cHg7Ij4nICsKICAgICAgICAgICAgICAgICAgICAnPGRpdiBpZD0iaW5mb2JveFRvb2xiYXIiIHN0 eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjRweDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50 ZXI7cGFkZGluZzo2cHggOHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJvcmRlci1j b2xvcik7YmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkLWFsdCwjZjZmOGZhKTsiPicgKwogICAgICAg ICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBvbmNsaWNrPSJEcml2ZUVkaXRvci5faW5mb2JveENt ZChcJ3VuZG9cJykiIHRpdGxlPSJSw7xja2fDpG5naWciIHN0eWxlPSInICsgYnRuU3R5bGUgKyAn Ij4mIzg2MzA7PC9idXR0b24+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIG9u Y2xpY2s9IkRyaXZlRWRpdG9yLl9pbmZvYm94Q21kKFwncmVkb1wnKSIgdGl0bGU9IldpZWRlcmhv bGVuIiBzdHlsZT0iJyArIGJ0blN0eWxlICsgJyI+JiM4NjMxOzwvYnV0dG9uPicgKwogICAgICAg ICAgICAgICAgICAgICAgICAnPHNwYW4gc3R5bGU9IndpZHRoOjFweDtoZWlnaHQ6MThweDtiYWNr Z3JvdW5kOnZhcigtLWJvcmRlci1jb2xvcik7bWFyZ2luOjAgMnB4OyI+PC9zcGFuPicgKwogICAg ICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBvbmNsaWNrPSJEcml2ZUVkaXRvci5faW5mb2Jv eENtZChcJ2JvbGRcJykiIHRpdGxlPSJGZXR0IiBzdHlsZT0iJyArIGJ0blN0eWxlQm9sZCArICci PkI8L2J1dHRvbj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gb25jbGljaz0i RHJpdmVFZGl0b3IuX2luZm9ib3hDbWQoXCdpdGFsaWNcJykiIHRpdGxlPSJLdXJzaXYiIHN0eWxl PSInICsgYnRuU3R5bGVJdGFsaWMgKyAnIj5JPC9idXR0b24+JyArCiAgICAgICAgICAgICAgICAg ICAgICAgICc8YnV0dG9uIG9uY2xpY2s9IkRyaXZlRWRpdG9yLl9pbmZvYm94Q21kKFwndW5kZXJs aW5lXCcpIiB0aXRsZT0iVW50ZXJzdHJpY2hlbiIgc3R5bGU9IicgKyBidG5TdHlsZVVuZGVybGlu ZSArICciPlU8L2J1dHRvbj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIHN0eWxl PSJ3aWR0aDoxcHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDp2YXIoLS1ib3JkZXItY29sb3IpO21h cmdpbjowIDJweDsiPjwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24g b25jbGljaz0iRHJpdmVFZGl0b3IuX2luZm9ib3hDbWQoXCdpbnNlcnRVbm9yZGVyZWRMaXN0XCcp IiB0aXRsZT0iQXVmesOkaGx1bmciIHN0eWxlPSInICsgYnRuU3R5bGUgKyAnIj4mIzgyMjY7IExp c3RlPC9idXR0b24+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIG9uY2xpY2s9 IkRyaXZlRWRpdG9yLl9pbmZvYm94Q21kKFwnaW5zZXJ0T3JkZXJlZExpc3RcJykiIHRpdGxlPSJO dW1tZXJpZXJ1bmciIHN0eWxlPSInICsgYnRuU3R5bGUgKyAnIj4xLiBMaXN0ZTwvYnV0dG9uPicg KwogICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gc3R5bGU9IndpZHRoOjFweDtoZWlnaHQ6 MThweDtiYWNrZ3JvdW5kOnZhcigtLWJvcmRlci1jb2xvcik7bWFyZ2luOjAgMnB4OyI+PC9zcGFu PicgKwogICAgICAgICAgICAgICAgICAgICAgICAnPHNlbGVjdCBvbmNoYW5nZT0iRHJpdmVFZGl0 b3IuX2luZm9ib3hDbWQoXCdmb250U2l6ZVwnLHRoaXMudmFsdWUpO3RoaXMuc2VsZWN0ZWRJbmRl eD0wOyIgdGl0bGU9IlNjaHJpZnRncsO2w59lIiBzdHlsZT0iJyArIHNlbGVjdFN0eWxlICsgJyI+ JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT0iIiBkaXNhYmxl ZCBzZWxlY3RlZD5HcsO2w59lPC9vcHRpb24+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnPG9wdGlvbiB2YWx1ZT0iMSI+S2xlaW48L29wdGlvbj4nICsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICc8b3B0aW9uIHZhbHVlPSIzIj5Ob3JtYWw8L29wdGlvbj4nICsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPSI0Ij5Hcm/Dnzwvb3B0aW9uPicgKwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9IjUiPlNlaHIgZ3Jvw588 L29wdGlvbj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzwvc2VsZWN0PicgKwogICAgICAg ICAgICAgICAgICAgICAgICAnPHNlbGVjdCBvbmNoYW5nZT0iRHJpdmVFZGl0b3IuX2luZm9ib3hD bWQoXCdmb3JlQ29sb3JcJyx0aGlzLnZhbHVlKTt0aGlzLnNlbGVjdGVkSW5kZXg9MDsiIHRpdGxl PSJUZXh0ZmFyYmUiIHN0eWxlPSInICsgc2VsZWN0U3R5bGUgKyAnIj4nICsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPSIiIGRpc2FibGVkIHNlbGVjdGVkPkZhcmJl PC9vcHRpb24+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT0i IzAwMDAwMCIgc3R5bGU9ImNvbG9yOiMwMDAwMDA7Ij5TY2h3YXJ6PC9vcHRpb24+JyArCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT0iIzJFNEE2MiIgc3R5bGU9ImNv bG9yOiMyRTRBNjI7Ij5Qb2xpemVpLUJsYXU8L29wdGlvbj4nICsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICc8b3B0aW9uIHZhbHVlPSIjM2E3YWEzIiBzdHlsZT0iY29sb3I6IzNhN2FhMzsi PkJsYXU8L29wdGlvbj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8b3B0aW9uIHZh bHVlPSIjOGIzYTYyIiBzdHlsZT0iY29sb3I6IzhiM2E2MjsiPkJvcmRlYXV4PC9vcHRpb24+JyAr CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT0iI2ZmMDAwMCIgc3R5 bGU9ImNvbG9yOiNmZjAwMDA7Ij5Sb3Q8L29wdGlvbj4nICsKICAgICAgICAgICAgICAgICAgICAg ICAgJzwvc2VsZWN0PicgKwogICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gc3R5bGU9Indp ZHRoOjFweDtoZWlnaHQ6MThweDtiYWNrZ3JvdW5kOnZhcigtLWJvcmRlci1jb2xvcik7bWFyZ2lu OjAgMnB4OyI+PC9zcGFuPicgKwogICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBvbmNs aWNrPSJEcml2ZUVkaXRvci5faW5mb2JveENtZChcJ2luc2VydEhvcml6b250YWxSdWxlXCcpIiB0 aXRsZT0iVHJlbm5saW5pZSIgc3R5bGU9IicgKyBidG5TdHlsZSArICciPuKAlSBMaW5pZTwvYnV0 dG9uPicgKwogICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgICAgICAg ICAnPGRpdiBpZD0iaW5mb2JveENvbnRlbnQiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIgJyArCiAg ICAgICAgICAgICAgICAgICAgJ3N0eWxlPSJwYWRkaW5nOjEwcHggMTJweDttaW4taGVpZ2h0OjEw MHB4O21heC1oZWlnaHQ6MjUwcHg7b3ZlcmZsb3cteTphdXRvO2ZvbnQtc2l6ZToxNHB4O2xpbmUt aGVpZ2h0OjEuNjtjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpO2JhY2tncm91bmQ6dmFyKC0tYmct aW5wdXQpO291dGxpbmU6bm9uZTsiPjwvZGl2PicgKwogICAgICAgICAgICAgICAgJzwvZGl2Picg KwoKICAgICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDtqdXN0 aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7Ij4nICsKICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBv bmNsaWNrPSJ0aGlzLmNsb3Nlc3QoXCdkaXZbc3R5bGVdXCcpLnBhcmVudEVsZW1lbnQucmVtb3Zl KCkiIHN0eWxlPSJwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHgg c29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQpO2NvbG9y OnZhcigtLXRleHQtcHJpbWFyeSk7Y3Vyc29yOnBvaW50ZXI7Ij5BYmJyZWNoZW48L2J1dHRvbj4n ICsKICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBvbmNsaWNrPSJEcml2ZUVkaXRvci5fY29u ZmlybUluZm9ib3goKSIgc3R5bGU9InBhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7 Ym9yZGVyOm5vbmU7YmFja2dyb3VuZDp2YXIoLS10ZXh0LWhlYWRpbmcpO2NvbG9yOndoaXRlO2N1 cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDsiPkVpbmbDvGdlbjwvYnV0dG9uPicgKwogICAg ICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAnPC9kaXY+JzsKICAgICAgICB0aGlz Ll9pbmZvYm94TW9kYWwgPSBtb2RhbDsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk KG1vZGFsKTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICBkb2N1 bWVudC5nZXRFbGVtZW50QnlJZCgnaW5mb2JveFRpdGxlJykuc2VsZWN0KCk7CiAgICAgICAgICAg IC8vIEZva3VzLUhhbmRsaW5nOiBUb29sYmFyLUJ1dHRvbnMgc29sbGVuIEZva3VzIGltIENvbnRl bnQgbGFzc2VuCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmZvYm94VG9v bGJhcicpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGZ1bmN0aW9uKGUpIHsKICAgICAg ICAgICAgICAgIGlmIChlLnRhcmdldC50YWdOYW1lID09PSAnQlVUVE9OJykgZS5wcmV2ZW50RGVm YXVsdCgpOwogICAgICAgICAgICB9KTsKICAgICAgICB9LCA1MCk7CiAgICB9LAoKICAgIF9pbmZv Ym94TW9kYWw6IG51bGwsCgogICAgLy8gRm9ybWF0aWVydW5nc2JlZmVobCBpbSBJbmZvYm94LUNv bnRlbnRlZGl0YWJsZSBhdXNmdWVocmVuCiAgICBfaW5mb2JveENtZChjbWQsIHZhbHVlKSB7CiAg ICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5mb2JveENvbnRl bnQnKTsKICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybjsKICAgICAgICBjb250ZW50LmZvY3Vz KCk7CiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY21kLCBmYWxzZSwgdmFsdWUgfHwgbnVs bCk7CiAgICB9LAoKICAgIF9jb25maXJtSW5mb2JveCgpIHsKICAgICAgICB2YXIgdGl0bGVJbnB1 dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmZvYm94VGl0bGUnKTsKICAgICAgICB2YXIg Y29udGVudEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luZm9ib3hDb250ZW50Jyk7CiAg ICAgICAgdmFyIHRpdGxlID0gdGl0bGVJbnB1dCA/IHRpdGxlSW5wdXQudmFsdWUudHJpbSgpIDog J0hpbndlaXMnOwogICAgICAgIGlmICghdGl0bGUpIHRpdGxlID0gJ0hpbndlaXMnOwogICAgICAg IHZhciBjb250ZW50ID0gY29udGVudEVsID8gY29udGVudEVsLmlubmVySFRNTC50cmltKCkgOiAn JzsKICAgICAgICBpZiAoIWNvbnRlbnQgfHwgY29udGVudCA9PT0gJzxicj4nKSBjb250ZW50ID0g JzxwPlRleHQgaGllciBlaW5nZWJlbi4uLjwvcD4nOwoKICAgICAgICAvLyBNb2RhbCBzY2hsaWVz c2VuCiAgICAgICAgaWYgKHRoaXMuX2luZm9ib3hNb2RhbCkgeyB0aGlzLl9pbmZvYm94TW9kYWwu cmVtb3ZlKCk7IHRoaXMuX2luZm9ib3hNb2RhbCA9IG51bGw7IH0KCiAgICAgICAgdmFyIGh0bWwg PSAnPGRpdiBjbGFzcz0iZHJpdmUtaW5mb2JveCI+PGgzPicgKyBEcml2ZVBvcnRhbC5lc2NhcGVI VE1MKHRpdGxlKSArICc8L2gzPicgKyBjb250ZW50ICsgJzwvZGl2PjxwPjxicj48L3A+JzsKCiAg ICAgICAgdmFyIGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3JJbnB1dCcp OwogICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICAgIGlmICh0aGlzLl9pbmZvYm94UmFuZ2Up IHsKICAgICAgICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAg ICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgICBzZWwuYWRkUmFuZ2UodGhpcy5f aW5mb2JveFJhbmdlKTsKICAgICAgICAgICAgdGhpcy5faW5mb2JveFJhbmdlID0gbnVsbDsKICAg ICAgICB9CiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwg aHRtbCk7CiAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTsKICAgIH0sCgogICAgLy8gLS0tIFdpY2h0 aWctQmxvY2sgZWluZnVlZ2VuIC0tLQogICAgX2ltcG9ydGFudE1vZGFsOiBudWxsLAoKICAgIGlu c2VydEltcG9ydGFudCgpIHsKICAgICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigp OwogICAgICAgIHRoaXMuX2ltcG9ydGFudFJhbmdlID0gKHNlbCAmJiBzZWwucmFuZ2VDb3VudCkg PyBzZWwuZ2V0UmFuZ2VBdCgwKS5jbG9uZVJhbmdlKCkgOiBudWxsOwoKICAgICAgICB2YXIgbW9k YWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBtb2RhbC5zdHlsZS5j c3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDox MDAlO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO3otaW5kZXg6MTA1MDA7ZGlzcGxheTpmbGV4 O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyc7CiAgICAgICAgbW9k YWwub25jbGljayA9IGZ1bmN0aW9uKGUpIHsgaWYgKGUudGFyZ2V0ID09PSBtb2RhbCkgbW9kYWwu cmVtb3ZlKCk7IH07CiAgICAgICAgbW9kYWwuaW5uZXJIVE1MID0KICAgICAgICAgICAgJzxkaXYg c3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmctY2FyZCk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRp bmc6MjBweCAyNHB4O21heC13aWR0aDo1MjBweDt3aWR0aDo5NCU7Ym94LXNoYWRvdzowIDhweCAz MnB4IHJnYmEoMCwwLDAsMC4zKTsiPicgKwogICAgICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImRp c3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxNHB4 OyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzxpbWcgc3JjPSJjc3MvaWNvbnMvaW1wb3J0YW50 LnBuZyIgc3R5bGU9IndpZHRoOjIycHg7aGVpZ2h0OjIycHg7Ij4nICsKICAgICAgICAgICAgICAg ICAgICAnPGgzIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpO21hcmdpbjowOyI+V2lj aHRpZ2VuIEhpbndlaXMgZWluZnVlZ2VuPC9oMz4nICsKICAgICAgICAgICAgICAgICc8L2Rpdj4n ICsKICAgICAgICAgICAgICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0t dGV4dC1tdXRlZCk7bWFyZ2luLWJvdHRvbToxMnB4OyI+RGVyIFRleHQgd2lyZCBhbHMgYXVmZmFl bGxpZ2VyIEJsb2NrIGltIEFydGlrZWwgZGFyZ2VzdGVsbHQsIHVtIGF1ZiBiZXNvbmRlcnMgd2lj aHRpZ2UgSW5mb3JtYXRpb25lbiBoaW56dXdlaXNlbi48L3A+JyArCiAgICAgICAgICAgICAgICAn PGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0t dGV4dC1zZWNvbmRhcnkpO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7Ij5IaW53ZWlz dGV4dDwvbGFiZWw+JyArCiAgICAgICAgICAgICAgICAnPHRleHRhcmVhIGlkPSJpbXBvcnRhbnRU ZXh0IiByb3dzPSI0IiBwbGFjZWhvbGRlcj0iei5CLiBCaXR0ZSBiZWFjaHRlbiBTaWUsIGRhc3Mu Li4iICcgKwogICAgICAgICAgICAgICAgJ3N0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6MTBweCAx MnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOjRw eDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjY7YmFja2dyb3VuZDp2YXIoLS1iZy1pbnB1 dCk7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5KTtyZXNpemU6dmVydGljYWw7Ij48L3RleHRhcmVh PicgKwogICAgICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O2p1 c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW4tdG9wOjE0cHg7Ij4nICsKICAgICAgICAgICAg ICAgICAgICAnPGJ1dHRvbiBvbmNsaWNrPSJ0aGlzLmNsb3Nlc3QoXCdkaXZbc3R5bGVdXCcpLnBh cmVudEVsZW1lbnQucmVtb3ZlKCkiIHN0eWxlPSJwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRp dXM6NHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kOnZh cigtLWJnLWNhcmQpO2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Y3Vyc29yOnBvaW50ZXI7Ij5B YmJyZWNoZW48L2J1dHRvbj4nICsKICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBvbmNsaWNr PSJEcml2ZUVkaXRvci5fY29uZmlybUltcG9ydGFudCgpIiBzdHlsZT0icGFkZGluZzo4cHggMTZw eDtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6bm9uZTtiYWNrZ3JvdW5kOiMxYTIzMzI7Y29sb3I6 d2hpdGU7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwOyI+RWluZnVlZ2VuPC9idXR0b24+ JyArCiAgICAgICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICc8L2Rpdj4nOwogICAg ICAgIHRoaXMuX2ltcG9ydGFudE1vZGFsID0gbW9kYWw7CiAgICAgICAgZG9jdW1lbnQuYm9keS5h cHBlbmRDaGlsZChtb2RhbCk7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAg ICAgICAgdmFyIHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltcG9ydGFudFRleHQnKTsK ICAgICAgICAgICAgaWYgKHRhKSB0YS5mb2N1cygpOwogICAgICAgIH0sIDUwKTsKICAgIH0sCgog ICAgX2NvbmZpcm1JbXBvcnRhbnQoKSB7CiAgICAgICAgdmFyIHRleHRFbCA9IGRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKCdpbXBvcnRhbnRUZXh0Jyk7CiAgICAgICAgdmFyIHRleHQgPSB0ZXh0RWwg PyB0ZXh0RWwudmFsdWUudHJpbSgpIDogJyc7CiAgICAgICAgaWYgKCF0ZXh0KSB7CiAgICAgICAg ICAgIHNob3dUb2FzdCgnQml0dGUgZWluZW4gSGlud2Vpc3RleHQgZWluZ2ViZW4nLCAnd2Fybmlu ZycpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBNb2RhbCBzY2hs aWVzc2VuCiAgICAgICAgaWYgKHRoaXMuX2ltcG9ydGFudE1vZGFsKSB7IHRoaXMuX2ltcG9ydGFu dE1vZGFsLnJlbW92ZSgpOyB0aGlzLl9pbXBvcnRhbnRNb2RhbCA9IG51bGw7IH0KCiAgICAgICAg dmFyIGNvbnRlbnQgPSBEcml2ZVBvcnRhbC5lc2NhcGVIVE1MKHRleHQpLnJlcGxhY2UoL1xuL2cs ICc8YnI+Jyk7CiAgICAgICAgdmFyIGh0bWwgPSAnPGRpdiBjbGFzcz0iZHJpdmUtaW1wb3J0YW50 IiBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImRy aXZlLWltcG9ydGFudC1oZWFkZXIiPjxpbWcgc3JjPSJjc3MvaWNvbnMvaW1wb3J0YW50LnBuZyI+ IFdpY2h0aWc8L2Rpdj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImRyaXZlLWltcG9ydGFu dC1ib2R5Ij4nICsgY29udGVudCArICc8L2Rpdj4nICsKICAgICAgICAnPC9kaXY+PHA+PGJyPjwv cD4nOwoKICAgICAgICB2YXIgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRv cklucHV0Jyk7CiAgICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICAgICAgaWYgKHRoaXMuX2ltcG9y dGFudFJhbmdlKSB7CiAgICAgICAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7 CiAgICAgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgICAgc2VsLmFkZFJh bmdlKHRoaXMuX2ltcG9ydGFudFJhbmdlKTsKICAgICAgICAgICAgdGhpcy5faW1wb3J0YW50UmFu Z2UgPSBudWxsOwogICAgICAgIH0KICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0 SFRNTCcsIGZhbHNlLCBodG1sKTsKICAgICAgICB0aGlzLnNhdmVTdGF0ZSgpOwogICAgfSwKCiAg ICAvLyAtLS0gRm9ybWF0aWVydW5nc2JlZmVobGUgLS0tCiAgICBoZWFkaW5nKHRhZykgewogICAg ICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcklucHV0Jyk7 CiAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2Vs ZWN0aW9uKCk7CiAgICAgICAgaWYgKCFzZWwucmFuZ2VDb3VudCkgcmV0dXJuOwogICAgICAgIGNv bnN0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7CgogICAgICAgIC8vIEFrdHVlbGxlbiBCbG9j ayBmaW5kZW4gKFAsIERJViBvZGVyIGJlcmVpdHMgZWluIEhlYWRpbmcpCiAgICAgICAgbGV0IGJs b2NrID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7CiAgICAgICAgd2hpbGUgKGJsb2NrICYmIGJsb2Nr ICE9PSBpbnB1dCAmJiAhWydQJywnRElWJywnSDEnLCdIMicsJ0gzJywnSDQnLCdINScsJ0g2J10u aW5jbHVkZXMoYmxvY2subm9kZU5hbWUpKSB7CiAgICAgICAgICAgIGJsb2NrID0gYmxvY2sucGFy ZW50Tm9kZTsKICAgICAgICB9CgogICAgICAgIGlmICghdGFnKSB7CiAgICAgICAgICAgIC8vICJB YnNhdHoiIGdld2FlaGx0OiBIZWFkaW5nIHp1cnVlY2sgaW4gPHA+IHVtd2FuZGVsbgogICAgICAg ICAgICBpZiAoYmxvY2sgJiYgYmxvY2sgIT09IGlucHV0ICYmIFsnSDEnLCdIMicsJ0gzJywnSDQn LCdINScsJ0g2J10uaW5jbHVkZXMoYmxvY2subm9kZU5hbWUpKSB7CiAgICAgICAgICAgICAgICBj b25zdCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOwogICAgICAgICAgICAgICAgcC5p bm5lckhUTUwgPSBibG9jay5pbm5lckhUTUw7CiAgICAgICAgICAgICAgICBibG9jay5wYXJlbnRO b2RlLnJlcGxhY2VDaGlsZChwLCBibG9jayk7CiAgICAgICAgICAgICAgICBjb25zdCBuZXdSYW5n ZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgICAgICAgICBuZXdSYW5nZS5zZWxl Y3ROb2RlQ29udGVudHMocCk7CiAgICAgICAgICAgICAgICBuZXdSYW5nZS5jb2xsYXBzZShmYWxz ZSk7CiAgICAgICAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICAgICAg ICBzZWwuYWRkUmFuZ2UobmV3UmFuZ2UpOwogICAgICAgICAgICAgICAgdGhpcy5zYXZlU3RhdGUo KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBp ZiAoYmxvY2sgJiYgYmxvY2sgIT09IGlucHV0KSB7CiAgICAgICAgICAgIC8vIEJlc3RlaGVuZGVu IEJsb2NrIGluIEhlYWRpbmcgdW13YW5kZWxuCiAgICAgICAgICAgIGNvbnN0IGhlYWRpbmcgPSBk b2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7CiAgICAgICAgICAgIGhlYWRpbmcuaW5uZXJIVE1M ID0gYmxvY2suaW5uZXJIVE1MOwogICAgICAgICAgICBibG9jay5wYXJlbnROb2RlLnJlcGxhY2VD aGlsZChoZWFkaW5nLCBibG9jayk7CiAgICAgICAgICAgIC8vIEN1cnNvciBhbnMgRW5kZSBzZXR6 ZW4KICAgICAgICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwog ICAgICAgICAgICBuZXdSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoaGVhZGluZyk7CiAgICAgICAg ICAgIG5ld1JhbmdlLmNvbGxhcHNlKGZhbHNlKTsKICAgICAgICAgICAgc2VsLnJlbW92ZUFsbFJh bmdlcygpOwogICAgICAgICAgICBzZWwuYWRkUmFuZ2UobmV3UmFuZ2UpOwogICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICAgIC8vIEtlaW4gQmxvY2s6IE5ldWVzIEhlYWRpbmcgZWluZnVlZ2VuCiAg ICAgICAgICAgIGNvbnN0IGhlYWRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7CiAg ICAgICAgICAgIGhlYWRpbmcudGV4dENvbnRlbnQgPSBzZWwudG9TdHJpbmcoKSB8fCAnw5xiZXJz Y2hyaWZ0JzsKICAgICAgICAgICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKICAgICAgICAgICAg cmFuZ2UuaW5zZXJ0Tm9kZShoZWFkaW5nKTsKICAgICAgICAgICAgLy8gQ3Vyc29yIGFucyBFbmRl CiAgICAgICAgICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAg ICAgICAgICAgbmV3UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGhlYWRpbmcpOwogICAgICAgICAg ICBuZXdSYW5nZS5jb2xsYXBzZShmYWxzZSk7CiAgICAgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5n ZXMoKTsKICAgICAgICAgICAgc2VsLmFkZFJhbmdlKG5ld1JhbmdlKTsKICAgICAgICB9CiAgICAg ICAgdGhpcy5zYXZlU3RhdGUoKTsKICAgIH0sCgogICAgY29tbWFuZChjbWQpIHsKICAgICAgICBj b25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3JJbnB1dCcpOwogICAg ICAgIGlucHV0LmZvY3VzKCk7CiAgICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlv bigpOwogICAgICAgIGlmICghc2VsLnJhbmdlQ291bnQpIHJldHVybjsKCiAgICAgICAgc3dpdGNo IChjbWQpIHsKICAgICAgICAgICAgY2FzZSAnYm9sZCc6IHRoaXMud3JhcFNlbGVjdGlvbignc3Ry b25nJyk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICdpdGFsaWMnOiB0aGlzLndyYXBTZWxlY3Rp b24oJ2VtJyk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICd1bmRlcmxpbmUnOiB0aGlzLndyYXBT ZWxlY3Rpb24oJ3UnKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2luc2VydFVub3JkZXJlZExp c3QnOiB0aGlzLmluc2VydExpc3QoJ3VsJyk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICdpbnNl cnRPcmRlcmVkTGlzdCc6IHRoaXMuaW5zZXJ0TGlzdCgnb2wnKTsgYnJlYWs7CiAgICAgICAgfQog ICAgICAgIGlucHV0LmZvY3VzKCk7CiAgICB9LAoKICAgIHdyYXBTZWxlY3Rpb24odGFnTmFtZSkg ewogICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICBpZiAo IXNlbC5yYW5nZUNvdW50KSByZXR1cm47CiAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWwuZ2V0UmFu Z2VBdCgwKTsKICAgICAgICBpZiAocmFuZ2UuY29sbGFwc2VkKSByZXR1cm47CiAgICAgICAgY29u c3QgVEFHID0gdGFnTmFtZS50b1VwcGVyQ2FzZSgpOwoKICAgICAgICB0cnkgewogICAgICAgICAg ICAvLyBQcnVlZmVuIG9iIGRpZSBnZXNhbXRlIFNlbGVrdGlvbiBiZXJlaXRzIGluIGRpZXNlbSBU YWcgbGllZ3QKICAgICAgICAgICAgbGV0IG5vZGUgPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRh aW5lcjsKICAgICAgICAgICAgbGV0IGV4aXN0aW5nID0gbnVsbDsKICAgICAgICAgICAgd2hpbGUg KG5vZGUgJiYgbm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5ET0NVTUVOVF9OT0RFKSB7CiAgICAgICAg ICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZS50 YWdOYW1lID09PSBUQUcpIHsKICAgICAgICAgICAgICAgICAgICBleGlzdGluZyA9IG5vZGU7CiAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICBub2RlID0gbm9kZS5wYXJlbnROb2RlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAo ZXhpc3RpbmcpIHsKICAgICAgICAgICAgICAgIC8vIFRvZ2dsZSBPRkY6IFRhZyBlbnRmZXJuZW4s IEtpbmRlciBiZWliZWhhbHRlbgogICAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gZXhpc3Rp bmcucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJv bShleGlzdGluZy5jaGlsZE5vZGVzKTsKICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gY2hp bGRyZW5bMF0sIGxhc3QgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXTsKICAgICAgICAg ICAgICAgIHdoaWxlIChleGlzdGluZy5maXJzdENoaWxkKSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGV4 aXN0aW5nLmZpcnN0Q2hpbGQsIGV4aXN0aW5nKTsKICAgICAgICAgICAgICAgIHBhcmVudC5yZW1v dmVDaGlsZChleGlzdGluZyk7CiAgICAgICAgICAgICAgICBpZiAoZmlyc3QgJiYgbGFzdCkgewog ICAgICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0QmVmb3JlKGZpcnN0KTsKICAgICAgICAg ICAgICAgICAgICByYW5nZS5zZXRFbmRBZnRlcihsYXN0KTsKICAgICAgICAgICAgICAgICAgICBz ZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHJh bmdlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg ICAgIGNvbnN0IGZyYWcgPSByYW5nZS5leHRyYWN0Q29udGVudHMoKTsKICAgICAgICAgICAgICAg IC8vIEJlcmVpdHMgdm9yaGFuZGVuZSBnbGVpY2hlIFRhZ3MgaW0gRnJhZ21lbnQgYXVmbG9lc2Vu ICh2ZXJoaW5kZXJ0IFZlcnNjaGFjaHRlbHVuZykKICAgICAgICAgICAgICAgIGZyYWcucXVlcnlT ZWxlY3RvckFsbCh0YWdOYW1lKS5mb3JFYWNoKGZ1bmN0aW9uKGlubmVyKSB7CiAgICAgICAgICAg ICAgICAgICAgd2hpbGUgKGlubmVyLmZpcnN0Q2hpbGQpIGlubmVyLnBhcmVudE5vZGUuaW5zZXJ0 QmVmb3JlKGlubmVyLmZpcnN0Q2hpbGQsIGlubmVyKTsKICAgICAgICAgICAgICAgICAgICBpbm5l ci5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgY29uc3Qgd3Jh cHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7CiAgICAgICAgICAgICAgICB3 cmFwcGVyLmFwcGVuZENoaWxkKGZyYWcpOwogICAgICAgICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9k ZSh3cmFwcGVyKTsKICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyh3cmFw cGVyKTsKICAgICAgICAgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgICAg ICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChl KSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dyYXAgZXJyb3I6JywgZSk7CiAgICAgICAg fQogICAgfSwKCiAgICBpbnNlcnRMaXN0KGxpc3RUeXBlKSB7CiAgICAgICAgY29uc3Qgc2VsID0g d2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmICghc2VsLnJhbmdlQ291bnQpIHJldHVy bjsKICAgICAgICBjb25zdCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApOwogICAgICAgIGNvbnN0 IGxpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGxpc3RUeXBlKTsKCiAgICAgICAgaWYgKCFy YW5nZS5jb2xsYXBzZWQpIHsKICAgICAgICAgICAgY29uc3QgZnJhZyA9IHJhbmdlLmV4dHJhY3RD b250ZW50cygpOwogICAgICAgICAgICAvLyBUZXh0IGF1ZiBaZWlsZW51bWJydWVjaGUgYXVmdGVp bGVuIGZ1ZXIgc2VwYXJhdGUgTEktRWxlbWVudGUKICAgICAgICAgICAgY29uc3QgdGVtcERpdiA9 IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICB0ZW1wRGl2LmFwcGVu ZENoaWxkKGZyYWcpOwogICAgICAgICAgICBjb25zdCB0ZXh0ID0gdGVtcERpdi5pbm5lckhUTUw7 CiAgICAgICAgICAgIC8vIFNwbGl0IGF1ZiA8YnI+LCBcbiBvZGVyIEJsb2NrLUVsZW1lbnRlCiAg ICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdCgvPGJyXHMqXC8/Pi9naSkubWFwKGZ1 bmN0aW9uKGwpIHsgcmV0dXJuIGwudHJpbSgpOyB9KS5maWx0ZXIoZnVuY3Rpb24obCkgeyByZXR1 cm4gbC5sZW5ndGggPiAwOyB9KTsKICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDEpIHsK ICAgICAgICAgICAgICAgIGxpbmVzLmZvckVhY2goZnVuY3Rpb24obGluZSkgewogICAgICAgICAg ICAgICAgICAgIGNvbnN0IGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsKICAgICAg ICAgICAgICAgICAgICBsaS5pbm5lckhUTUwgPSBsaW5lOwogICAgICAgICAgICAgICAgICAgIGxp c3QuYXBwZW5kQ2hpbGQobGkpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICAgICAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xp Jyk7CiAgICAgICAgICAgICAgICBsaS5hcHBlbmRDaGlsZCh0ZW1wRGl2LmZpcnN0Q2hpbGQgfHwg ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGVtcERpdi50ZXh0Q29udGVudCkpOwogICAgICAgICAg ICAgICAgd2hpbGUgKHRlbXBEaXYuZmlyc3RDaGlsZCkgbGkuYXBwZW5kQ2hpbGQodGVtcERpdi5m aXJzdENoaWxkKTsKICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kQ2hpbGQobGkpOwogICAgICAg ICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgbGkgPSBkb2N1bWVudC5j cmVhdGVFbGVtZW50KCdsaScpOwogICAgICAgICAgICBsaS5hcHBlbmRDaGlsZChkb2N1bWVudC5j cmVhdGVUZXh0Tm9kZSgnXHUwMEEwJykpOwogICAgICAgICAgICBsaXN0LmFwcGVuZENoaWxkKGxp KTsKICAgICAgICB9CgogICAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7CiAgICAgICAgcmFu Z2UuaW5zZXJ0Tm9kZShsaXN0KTsKICAgICAgICBjb25zdCBsYXN0TGkgPSBsaXN0LnF1ZXJ5U2Vs ZWN0b3IoJ2xpOmxhc3QtY2hpbGQnKTsKICAgICAgICBpZiAobGFzdExpKSB7CiAgICAgICAgICAg IHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhsYXN0TGkpOwogICAgICAgICAgICByYW5nZS5jb2xs YXBzZShmYWxzZSk7CiAgICAgICAgfQogICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKICAg ICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpOwogICAgfSwKCiAgICBmb250U2l6ZShzaXplKSB7CiAg ICAgICAgaWYgKCFzaXplKSByZXR1cm47CiAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5n ZXRFbGVtZW50QnlJZCgnZWRpdG9ySW5wdXQnKTsKICAgICAgICBpbnB1dC5mb2N1cygpOwogICAg ICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICBpZiAoIXNlbC5y YW5nZUNvdW50KSByZXR1cm47CiAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgw KTsKICAgICAgICBpZiAocmFuZ2UuY29sbGFwc2VkKSByZXR1cm47CgogICAgICAgIGNvbnN0IGZy YWcgPSByYW5nZS5leHRyYWN0Q29udGVudHMoKTsKICAgICAgICAvLyBCZXN0ZWhlbmRlIGZvbnRT aXplLVNwYW5zIGltIEZyYWdtZW50IGF1ZmxvZXNlbgogICAgICAgIGZyYWcucXVlcnlTZWxlY3Rv ckFsbCgnc3BhbicpLmZvckVhY2goZnVuY3Rpb24ocykgewogICAgICAgICAgICBpZiAocy5zdHls ZS5mb250U2l6ZSAmJiBzLnN0eWxlLmxlbmd0aCA8PSAxKSB7CiAgICAgICAgICAgICAgICAvLyBT cGFuIGhhdCBudXIgZm9udC1zaXplIC0+IGR1cmNoIEluaGFsdCBlcnNldHplbgogICAgICAgICAg ICAgICAgd2hpbGUgKHMuZmlyc3RDaGlsZCkgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzLmZp cnN0Q2hpbGQsIHMpOwogICAgICAgICAgICAgICAgcy5yZW1vdmUoKTsKICAgICAgICAgICAgfSBl bHNlIGlmIChzLnN0eWxlLmZvbnRTaXplKSB7CiAgICAgICAgICAgICAgICBzLnN0eWxlLnJlbW92 ZVByb3BlcnR5KCdmb250LXNpemUnKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAg IGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgICAg d3JhcHBlci5zdHlsZS5mb250U2l6ZSA9IHNpemUgKyAncHgnOwogICAgICAgIHdyYXBwZXIuYXBw ZW5kQ2hpbGQoZnJhZyk7CiAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZSh3cmFwcGVyKTsKICAgICAg ICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMod3JhcHBlcik7CiAgICAgICAgc2VsLnJlbW92ZUFs bFJhbmdlcygpOwogICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7CgogICAgICAgIGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCdmb250U2l6ZVNlbGVjdCcpLnZhbHVlID0gJyc7CiAgICAgICAgaW5w dXQuZm9jdXMoKTsKICAgIH0sCgogICAgY29sb3IoY29sb3IpIHsKICAgICAgICBjb25zdCBpbnB1 dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3JJbnB1dCcpOwogICAgICAgIGNvbnN0 IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICBsZXQgc2F2ZWRSYW5nZSA9IG51 bGw7CiAgICAgICAgaWYgKHNlbC5yYW5nZUNvdW50ID4gMCkgc2F2ZWRSYW5nZSA9IHNlbC5nZXRS YW5nZUF0KDApLmNsb25lUmFuZ2UoKTsKCiAgICAgICAgaW5wdXQuZm9jdXMoKTsKCiAgICAgICAg aWYgKHNhdmVkUmFuZ2UgJiYgIXNhdmVkUmFuZ2UuY29sbGFwc2VkKSB7CiAgICAgICAgICAgIHNl bC5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHNhdmVkUmFuZ2Up OwogICAgICAgICAgICBjb25zdCBmcmFnID0gc2F2ZWRSYW5nZS5leHRyYWN0Q29udGVudHMoKTsK ICAgICAgICAgICAgLy8gQmVzdGVoZW5kZSBjb2xvci1TcGFucyBpbSBGcmFnbWVudCBhdWZsb2Vz ZW4KICAgICAgICAgICAgZnJhZy5xdWVyeVNlbGVjdG9yQWxsKCdzcGFuJykuZm9yRWFjaChmdW5j dGlvbihzKSB7CiAgICAgICAgICAgICAgICBpZiAocy5zdHlsZS5jb2xvciAmJiBzLnN0eWxlLmxl bmd0aCA8PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHMuZmlyc3RDaGlsZCkgcy5w YXJlbnROb2RlLmluc2VydEJlZm9yZShzLmZpcnN0Q2hpbGQsIHMpOwogICAgICAgICAgICAgICAg ICAgIHMucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMuc3R5bGUuY29sb3Ip IHsKICAgICAgICAgICAgICAgICAgICBzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdjb2xvcicpOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgd3JhcHBl ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKICAgICAgICAgICAgd3JhcHBlci5z dHlsZS5jb2xvciA9IGNvbG9yOwogICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGZyYWcp OwogICAgICAgICAgICBzYXZlZFJhbmdlLmluc2VydE5vZGUod3JhcHBlcik7CiAgICAgICAgICAg IHNhdmVkUmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHdyYXBwZXIpOwogICAgICAgICAgICBzZWwu cmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICAgIHNlbC5hZGRSYW5nZShzYXZlZFJhbmdlKTsK ICAgICAgICB9CiAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgIH0sCgogICAgLy8gLS0tIE1lZGlh IFR5cGUgRGV0ZWN0aW9uIC0tLQogICAgLy8gLS0tIFBhc3RlOiBFeHRlcm5lIEJpbGRlciBsb2th bCBzcGVpY2hlcm4gLS0tCgogICAgX3Bhc3RlVXBsb2FkSW5Qcm9ncmVzczogZmFsc2UsCgogICAg YXN5bmMgX3Bhc3RlSW1hZ2VCbG9iKGJsb2IpIHsKICAgICAgICBpZiAoIXRoaXMuY3VycmVudERv YyB8fCAhRHJpdmVGUy5jb25uZWN0ZWQpIHJldHVybjsKICAgICAgICBpZiAodGhpcy5fcGFzdGVV cGxvYWRJblByb2dyZXNzKSByZXR1cm47IC8vIERvcHBlbC1FaW5mdWVnZW4gdmVyaGluZGVybgog ICAgICAgIHRoaXMuX3Bhc3RlVXBsb2FkSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgICAgY29uc3Qg ZG9jSWQgPSB0aGlzLmN1cnJlbnREb2MuaWQ7CiAgICAgICAgY29uc3QgZXh0ID0gYmxvYi50eXBl LnNwbGl0KCcvJylbMV0gfHwgJ3BuZyc7CiAgICAgICAgY29uc3QgdHMgPSBEYXRlLm5vdygpOwog ICAgICAgIGNvbnN0IGZpbGVuYW1lID0gJ3Bhc3RlXycgKyB0cyArICcuJyArIGV4dDsKICAgICAg ICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlbmFtZSwgeyB0eXBlOiBibG9iLnR5 cGUgfSk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHNob3dUb2FzdCgnQmlsZCB3aXJkIGdl c3BlaWNoZXJ0Li4uJywgJ2luZm8nLCAzMDAwKTsKICAgICAgICAgICAgY29uc3QgcmVsUGF0aCA9 IGF3YWl0IERyaXZlRlMudXBsb2FkTWVkaWEoZG9jSWQsIGZpbGUpOwogICAgICAgICAgICBjb25z dCBtZWRpYUlkID0gdGhpcy5nZW5lcmF0ZU1lZGlhSWQoKTsKCiAgICAgICAgICAgIGlmICghdGhp cy5jdXJyZW50RG9jLm1lZGlhcykgdGhpcy5jdXJyZW50RG9jLm1lZGlhcyA9IFtdOwogICAgICAg ICAgICB0aGlzLmN1cnJlbnREb2MubWVkaWFzLnB1c2goewogICAgICAgICAgICAgICAgdHlwZTog J2ltYWdlJywgdXJsOiByZWxQYXRoLCB0aXRsZTogZmlsZW5hbWUsCiAgICAgICAgICAgICAgICBk ZXNjcmlwdGlvbjogJycsIGRpc3BsYXlNb2RlOiAnaW5saW5lJywKICAgICAgICAgICAgICAgIGFs aWdubWVudDogJ2NlbnRlcicsIHNpemU6ICdsYXJnZScsIG1lZGlhSWQ6IG1lZGlhSWQKICAgICAg ICAgICAgfSk7CgogICAgICAgICAgICBjb25zdCBmaWd1cmUgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdmaWd1cmUnKTsKICAgICAgICAgICAgZmlndXJlLmNsYXNzTmFtZSA9ICdkcml2ZS1tZWRp YSBtZWRpYS1sYXJnZSBtZWRpYS1jZW50ZXInOwogICAgICAgICAgICBmaWd1cmUuc2V0QXR0cmli dXRlKCdkYXRhLW1lZGlhLWlkJywgbWVkaWFJZCk7CiAgICAgICAgICAgIGZpZ3VyZS5jb250ZW50 RWRpdGFibGUgPSAnZmFsc2UnOwogICAgICAgICAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVh dGVFbGVtZW50KCdpbWcnKTsKICAgICAgICAgICAgaW1nLnNyYyA9IHJlbFBhdGg7CiAgICAgICAg ICAgIGltZy5hbHQgPSBmaWxlbmFtZTsKICAgICAgICAgICAgZmlndXJlLmFwcGVuZENoaWxkKGlt Zyk7CiAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2Us IGZpZ3VyZS5vdXRlckhUTUwpOwogICAgICAgICAgICB0aGlzLl9yZW5kZXJNZWRpYUxpc3QoKTsK ICAgICAgICAgICAgc2hvd1RvYXN0KCdCaWxkIGVpbmdlZsO8Z3QnLCAnc3VjY2VzcycpOwogICAg ICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICBzaG93VG9hc3QoJ0JpbGQga29ubnRlIG5p Y2h0IGdlc3BlaWNoZXJ0IHdlcmRlbjogJyArIGVyci5tZXNzYWdlLCAnZXJyb3InKTsKICAgICAg ICB9IGZpbmFsbHkgewogICAgICAgICAgICB0aGlzLl9wYXN0ZVVwbG9hZEluUHJvZ3Jlc3MgPSBm YWxzZTsKICAgICAgICB9CiAgICB9LAoKICAgIGFzeW5jIF9wYXN0ZUh0bWxXaXRoRXh0ZXJuYWxJ bWFnZXMoYm9keUVsLCBleHRlcm5hbEltZ3MpIHsKICAgICAgICBjb25zdCBkb2NJZCA9IHRoaXMu Y3VycmVudERvYy5pZDsKICAgICAgICBpZiAoIXRoaXMuY3VycmVudERvYy5tZWRpYXMpIHRoaXMu Y3VycmVudERvYy5tZWRpYXMgPSBbXTsKCiAgICAgICAgc2hvd1RvYXN0KCdFeHRlcm5lIEJpbGRl ciB3ZXJkZW4gaGVydW50ZXJnZWxhZGVuICgnICsgZXh0ZXJuYWxJbWdzLmxlbmd0aCArICcpLi4u JywgJ2luZm8nLCA0MDAwKTsKICAgICAgICBsZXQgc2F2ZWQgPSAwOwoKICAgICAgICBmb3IgKGNv bnN0IGltZyBvZiBleHRlcm5hbEltZ3MpIHsKICAgICAgICAgICAgY29uc3Qgc3JjID0gaW1nLnNy YzsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIEJpbGQgaGVydW50ZXJsYWRl bjogSW0gU2VydmVyLU1vZHVzIHVlYmVyIFByb3h5ICh1bWdlaHQgQ09SUykKICAgICAgICAgICAg ICAgIGxldCByZXNwb25zZTsKICAgICAgICAgICAgICAgIGlmIChEcml2ZUZTLm1vZGUgPT09ICdz ZXJ2ZXInKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2Fw aS9mZXRjaC1pbWFnZScsIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcs CiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBs aWNhdGlvbi9qc29uJyB9LAogICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmlu Z2lmeSh7IHVybDogc3JjIH0pCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goc3Jj LCB7IG1vZGU6ICdjb3JzJyB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlm ICghcmVzcG9uc2Uub2spIHsgaW1nLnJlbW92ZSgpOyBjb250aW51ZTsgfQogICAgICAgICAgICAg ICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKTsKCiAgICAgICAgICAgICAgICAv LyBOdXIgZWNodGUgQmlsZGVyIHZlcmFyYmVpdGVuIChrZWluZSAwLUJ5dGUgdHJhY2tpbmctcGl4 ZWwgb2RlciBGZWhsZXIpCiAgICAgICAgICAgICAgICBpZiAoIWJsb2IudHlwZS5zdGFydHNXaXRo KCdpbWFnZS8nKSB8fCBibG9iLnNpemUgPCAxMDApIHsKICAgICAgICAgICAgICAgICAgICBpbWcu cmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9 CgogICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gYmxvYi50eXBlLnNwbGl0KCcvJylbMV0gfHwg J3BuZyc7CiAgICAgICAgICAgICAgICBjb25zdCB0cyA9IERhdGUubm93KCkgKyAnXycgKyBzYXZl ZDsKICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gJ3dlYl8nICsgdHMgKyAnLicgKyBl eHQ7CiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlbmFt ZSwgeyB0eXBlOiBibG9iLnR5cGUgfSk7CgogICAgICAgICAgICAgICAgY29uc3QgcmVsUGF0aCA9 IGF3YWl0IERyaXZlRlMudXBsb2FkTWVkaWEoZG9jSWQsIGZpbGUpOwogICAgICAgICAgICAgICAg Y29uc3QgbWVkaWFJZCA9IHRoaXMuZ2VuZXJhdGVNZWRpYUlkKCk7CgogICAgICAgICAgICAgICAg dGhpcy5jdXJyZW50RG9jLm1lZGlhcy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAn aW1hZ2UnLCB1cmw6IHJlbFBhdGgsIHRpdGxlOiBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAg ICBkZXNjcmlwdGlvbjogJycsIGRpc3BsYXlNb2RlOiAnaW5saW5lJywKICAgICAgICAgICAgICAg ICAgICBhbGlnbm1lbnQ6ICcnLCBzaXplOiAnbGFyZ2UnLCBtZWRpYUlkOiBtZWRpYUlkCiAgICAg ICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyBmaWd1cmUtRWxlbWVudCBlcnN0ZWxs ZW4gZGFtaXQgZXMgb2ZmbGluZSBmdW5rdGlvbmllcnQKICAgICAgICAgICAgICAgIGNvbnN0IGZp Z3VyZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZ3VyZScpOwogICAgICAgICAgICAgICAg ZmlndXJlLmNsYXNzTmFtZSA9ICdkcml2ZS1tZWRpYSBtZWRpYS1sYXJnZSc7CiAgICAgICAgICAg ICAgICBmaWd1cmUuc2V0QXR0cmlidXRlKCdkYXRhLW1lZGlhLWlkJywgbWVkaWFJZCk7CiAgICAg ICAgICAgICAgICBmaWd1cmUuY29udGVudEVkaXRhYmxlID0gJ2ZhbHNlJzsKICAgICAgICAgICAg ICAgIGNvbnN0IG5ld0ltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOwogICAgICAg ICAgICAgICAgbmV3SW1nLnNyYyA9IHJlbFBhdGg7CiAgICAgICAgICAgICAgICBuZXdJbWcuYWx0 ID0gaW1nLmFsdCB8fCBmaWxlbmFtZTsKICAgICAgICAgICAgICAgIGZpZ3VyZS5hcHBlbmRDaGls ZChuZXdJbWcpOwoKICAgICAgICAgICAgICAgIC8vIE9yaWdpbmFsIGltZyBkdXJjaCBmaWd1cmUg ZXJzZXR6ZW4KICAgICAgICAgICAgICAgIGltZy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmaWd1 cmUsIGltZyk7CiAgICAgICAgICAgICAgICBzYXZlZCsrOwogICAgICAgICAgICB9IGNhdGNoIHsK ICAgICAgICAgICAgICAgIC8vIEJpbGQga29ubnRlIG5pY2h0IGdlbGFkZW4gd2VyZGVuIC0gZW50 ZmVybmVuIHN0YXR0IGthcHV0dGUgUmVmZXJlbnoKICAgICAgICAgICAgICAgIGltZy5yZW1vdmUo KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQmVyZWluaWd0ZXMgSFRNTCBl aW5mdWVnZW4KICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNl LCBib2R5RWwuaW5uZXJIVE1MKTsKICAgICAgICB0aGlzLl9yZW5kZXJNZWRpYUxpc3QoKTsKICAg ICAgICBpZiAoc2F2ZWQgPiAwKSB7CiAgICAgICAgICAgIHNob3dUb2FzdChzYXZlZCArICcgQmls ZCcgKyAoc2F2ZWQgPiAxID8gJ2VyJyA6ICcnKSArICcgbG9rYWwgZ2VzcGVpY2hlcnQnLCAnc3Vj Y2VzcycpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNob3dUb2FzdCgnS2VpbmUgQmls ZGVyIGtvbm50ZW4gaGVydW50ZXJnZWxhZGVuIHdlcmRlbiAoZXZ0bC4gQ09SUy1TY2h1dHopJywg J3dhcm5pbmcnKTsKICAgICAgICB9CiAgICB9LAoKICAgIGRldGVjdE1lZGlhVHlwZShmaWxlKSB7 CiAgICAgICAgaWYgKGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgcmV0dXJuICdpbWFn ZSc7CiAgICAgICAgaWYgKGZpbGUudHlwZS5zdGFydHNXaXRoKCd2aWRlby8nKSkgcmV0dXJuICd2 aWRlbyc7CiAgICAgICAgaWYgKGZpbGUudHlwZS5zdGFydHNXaXRoKCdhdWRpby8nKSkgcmV0dXJu ICdhdWRpbyc7CiAgICAgICAgaWYgKGZpbGUudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicpIHJl dHVybiAncGRmJzsKICAgICAgICBjb25zdCBleHQgPSBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3Ao KS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmIChleHQgPT09ICdkb2N4JykgcmV0dXJuICdkb2N4 JzsKICAgICAgICBpZiAoZXh0ID09PSAneGxzeCcpIHJldHVybiAneGxzeCc7CiAgICAgICAgaWYg KGV4dCA9PT0gJ3BwdHgnKSByZXR1cm4gJ3BwdHgnOwogICAgICAgIHJldHVybiAnZmlsZSc7CiAg ICB9LAoKICAgIGdlbmVyYXRlTWVkaWFJZCgpIHsKICAgICAgICBpZiAoIXRoaXMuY3VycmVudERv YyB8fCAhdGhpcy5jdXJyZW50RG9jLm1lZGlhcykgcmV0dXJuICdtMDAxJzsKICAgICAgICBsZXQg bWF4ID0gMDsKICAgICAgICB0aGlzLmN1cnJlbnREb2MubWVkaWFzLmZvckVhY2gobSA9PiB7CiAg ICAgICAgICAgIGlmIChtLm1lZGlhSWQpIHsKICAgICAgICAgICAgICAgIGNvbnN0IG4gPSBwYXJz ZUludChtLm1lZGlhSWQucmVwbGFjZSgnbScsICcnKSwgMTApOwogICAgICAgICAgICAgICAgaWYg KG4gPiBtYXgpIG1heCA9IG47CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1 cm4gJ20nICsgU3RyaW5nKG1heCArIDEpLnBhZFN0YXJ0KDMsICcwJyk7CiAgICB9LAoKICAgIC8v IC0tLSBVcGxvYWQgRGlhbG9nIC0tLQogICAgX3BlbmRpbmdGaWxlczogW10sCiAgICBfcGVuZGlu Z0luZGV4OiAwLAogICAgX3VwbG9hZE9wdGlvbnM6IHsgZGlzcGxheU1vZGU6ICdhdHRhY2htZW50 JywgYWxpZ246ICdjZW50ZXInLCBzaXplOiAndGh1bWJuYWlsJyB9LAogICAgX3NhdmVkRWRpdG9y UmFuZ2U6IG51bGwsCgogICAgLy8gVXBsb2FkLUVpbnN0aWVncy1Nb2RhbCBtaXQgRHJhZyZEcm9w IHVuZCBFcmtsYWVydW5nIG9lZmZuZW4KICAgIHNob3dVcGxvYWRNb2RhbCgpIHsKICAgICAgICBp ZiAoIXRoaXMuY3VycmVudERvYyB8fCAhRHJpdmVGUy5jb25uZWN0ZWQpIHsKICAgICAgICAgICAg c2hvd1RvYXN0KCdCaXR0ZSB6dWVyc3QgZWluIERva3VtZW50IMO2ZmZuZW4nLCAnd2FybmluZycp OwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC8vIEN1cnNvci1Qb3NpdGlv biBtZXJrZW4KICAgICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAg ICAgaWYgKHNlbC5yYW5nZUNvdW50ID4gMCkgewogICAgICAgICAgICB0aGlzLl9zYXZlZEVkaXRv clJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpOwogICAgICAgIH0KICAgICAg ICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWRpYVVwbG9hZFN0YXJ0 TW9kYWwnKTsKICAgICAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKCiAgICAgICAg Ly8gRHJhZyAmIERyb3AgU2V0dXAgKG51ciBlaW5tYWwpCiAgICAgICAgY29uc3QgZHJvcFpvbmUg PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkRHJvcFpvbmUnKTsKICAgICAgICBpZiAo IWRyb3Bab25lLl9kcmFnU2V0dXApIHsKICAgICAgICAgICAgZHJvcFpvbmUuX2RyYWdTZXR1cCA9 IHRydWU7CiAgICAgICAgICAgIGRyb3Bab25lLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywg KGUpID0+IHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBkcm9wWm9uZS5jbGFzc0xpc3QuYWRkKCdkcmFn LW92ZXInKTsgfSk7CiAgICAgICAgICAgIGRyb3Bab25lLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWds ZWF2ZScsICgpID0+IHsgZHJvcFpvbmUuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZy1vdmVyJyk7IH0p OwogICAgICAgICAgICBkcm9wWm9uZS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgKGUpID0+IHsK ICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIGRyb3Ba b25lLmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWctb3ZlcicpOwogICAgICAgICAgICAgICAgY29uc3Qg ZmlsZXMgPSBBcnJheS5mcm9tKGUuZGF0YVRyYW5zZmVyLmZpbGVzKS5maWx0ZXIoZiA9PiB7CiAg ICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gZi5uYW1lLnNwbGl0KCcuJykucG9wKCkudG9M b3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZi50eXBlLnN0YXJ0c1dpdGgo J2ltYWdlLycpIHx8IGYudHlwZS5zdGFydHNXaXRoKCd2aWRlby8nKSB8fCBmLnR5cGUuc3RhcnRz V2l0aCgnYXVkaW8vJykgfHwKICAgICAgICAgICAgICAgICAgICAgICAgZi50eXBlID09PSAnYXBw bGljYXRpb24vcGRmJyB8fCBbJ2RvY3gnLCd4bHN4JywncHB0eCddLmluY2x1ZGVzKGV4dCk7CiAg ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDAp IHsKICAgICAgICAgICAgICAgICAgICBzaG93VG9hc3QoJ0RhdGVpdHlwIG5pY2h0IHVudGVyc3TD vHR6dCcsICd3YXJuaW5nJyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgRHJpdmVFZGl0b3IuX3N0YXJ0RmlsZXNVcGxvYWQoZmls ZXMpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgLy8gS2xpY2sgYXVmIFpvbmUgPSBEYXRl aWF1c3dhaGwKICAgICAgICAgICAgZHJvcFpvbmUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAo ZSkgPT4gewogICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnRhZ05hbWUgIT09ICdCVVRUT04n KSBEcml2ZUVkaXRvci51cGxvYWRNZWRpYSgpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAg ICB9LAoKICAgIGNsb3NlVXBsb2FkU3RhcnRNb2RhbCgpIHsKICAgICAgICBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgnbWVkaWFVcGxvYWRTdGFydE1vZGFsJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0 aXZlJyk7CiAgICB9LAoKICAgIC8vIERhdGVpYXVzd2FobC1EaWFsb2cgKG5hdGl2KSBvZWZmbmVu CiAgICB1cGxvYWRNZWRpYSgpIHsKICAgICAgICBpZiAoIXRoaXMuY3VycmVudERvYyB8fCAhRHJp dmVGUy5jb25uZWN0ZWQpIHsKICAgICAgICAgICAgc2hvd1RvYXN0KCdCaXR0ZSB6dWVyc3QgZWlu IERva3VtZW50IMO2ZmZuZW4nLCAnd2FybmluZycpOwogICAgICAgICAgICByZXR1cm47CiAgICAg ICAgfQoKICAgICAgICBjb25zdCBmaWxlSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdp bnB1dCcpOwogICAgICAgIGZpbGVJbnB1dC50eXBlID0gJ2ZpbGUnOwogICAgICAgIGZpbGVJbnB1 dC5hY2NlcHQgPSAnaW1hZ2UvKix2aWRlby8qLGF1ZGlvLyosLnBkZiwuZG9jeCwueGxzeCwucHB0 eCc7CiAgICAgICAgZmlsZUlucHV0Lm11bHRpcGxlID0gdHJ1ZTsKCiAgICAgICAgZmlsZUlucHV0 Lm9uY2hhbmdlID0gKGUpID0+IHsKICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBBcnJheS5mcm9t KGUudGFyZ2V0LmZpbGVzKTsKICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0 dXJuOwogICAgICAgICAgICB0aGlzLl9zdGFydEZpbGVzVXBsb2FkKGZpbGVzKTsKICAgICAgICB9 OwoKICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTsKICAgIH0sCgogICAgLy8gR2VtZWluc2FtZXIg RWluc3RpZWc6IERhdGVpZW4gaW4gRm9ybWF0aWVydW5ncy1RdWV1ZSBzdGVsbGVuCiAgICBfc3Rh cnRGaWxlc1VwbG9hZChmaWxlcykgewogICAgICAgIC8vIEN1cnNvci1Qb3NpdGlvbiBtZXJrZW4g ZmFsbHMgbm9jaCBuaWNodCBnZXNjaGVoZW4KICAgICAgICBpZiAoIXRoaXMuX3NhdmVkRWRpdG9y UmFuZ2UpIHsKICAgICAgICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwog ICAgICAgICAgICBpZiAoc2VsLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICAgICAgICB0aGlz Ll9zYXZlZEVkaXRvclJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpOwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuX3BlbmRpbmdGaWxlcyA9IGZpbGVzOwog ICAgICAgIHRoaXMuX3BlbmRpbmdJbmRleCA9IDA7CiAgICAgICAgLy8gRWluc3RpZWdzLU1vZGFs IHNjaGxpZXNzZW4sIEZvcm1hdGllcnVuZ3MtRGlhbG9nIG9lZmZuZW4KICAgICAgICB0aGlzLmNs b3NlVXBsb2FkU3RhcnRNb2RhbCgpOwogICAgICAgIHRoaXMuc2hvd1VwbG9hZERpYWxvZygpOwog ICAgfSwKCiAgICBzaG93VXBsb2FkRGlhbG9nKCkgewogICAgICAgIGlmICh0aGlzLl9wZW5kaW5n SW5kZXggPj0gdGhpcy5fcGVuZGluZ0ZpbGVzLmxlbmd0aCkgewogICAgICAgICAgICB0aGlzLmNs b3NlVXBsb2FkRGlhbG9nKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAg IGNvbnN0IGZpbGUgPSB0aGlzLl9wZW5kaW5nRmlsZXNbdGhpcy5fcGVuZGluZ0luZGV4XTsKICAg ICAgICBjb25zdCB0eXBlID0gdGhpcy5kZXRlY3RNZWRpYVR5cGUoZmlsZSk7CiAgICAgICAgY29u c3QgcmVtYWluaW5nID0gdGhpcy5fcGVuZGluZ0ZpbGVzLmxlbmd0aCAtIHRoaXMuX3BlbmRpbmdJ bmRleDsKCiAgICAgICAgLy8gUmVzZXQgb3B0aW9ucwogICAgICAgIHRoaXMuX3VwbG9hZE9wdGlv bnMgPSB7IGRpc3BsYXlNb2RlOiAnYXR0YWNobWVudCcsIGFsaWduOiAnY2VudGVyJywgc2l6ZTog J3RodW1ibmFpbCcgfTsKCiAgICAgICAgLy8gSGVhZGVyIG1pdCBGb3J0c2Nocml0dAogICAgICAg IGNvbnN0IHRpdGxlRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkRGlhbG9nVGl0 bGUnKTsKICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0ZpbGVzLmxlbmd0aCA+IDEpIHsKICAgICAg ICAgICAgdGl0bGVFbC5pbm5lckhUTUwgPSAnRGF0ZWkga29uZmlndXJpZXJlbiA8c3BhbiBzdHls ZT0iZm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxM3B4O29wYWNpdHk6MC44OyI+KCcgKyAodGhp cy5fcGVuZGluZ0luZGV4ICsgMSkgKyAnIHZvbiAnICsgdGhpcy5fcGVuZGluZ0ZpbGVzLmxlbmd0 aCArICcpPC9zcGFuPic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGl0bGVFbC50ZXh0 Q29udGVudCA9ICdEYXRlaSBrb25maWd1cmllcmVuJzsKICAgICAgICB9CgogICAgICAgIC8vIFBy ZXZpZXcgbWl0IERhdGVpaW5mbwogICAgICAgIGNvbnN0IHByZXZpZXcgPSBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgndXBsb2FkUHJldmlldycpOwogICAgICAgIGNvbnN0IGZpbGVTaXplTUIgPSAo ZmlsZS5zaXplIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgxKTsKICAgICAgICBjb25zdCBmaWxl U2l6ZVRleHQgPSBmaWxlLnNpemUgPCAxMDI0KjEwMjQKICAgICAgICAgICAgPyBNYXRoLnJvdW5k KGZpbGUuc2l6ZSAvIDEwMjQpICsgJyBLQicKICAgICAgICAgICAgOiBmaWxlU2l6ZU1CICsgJyBN Qic7CiAgICAgICAgY29uc3QgZmlsZUluZm9IdG1sID0gJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjhw eDtjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTtmb250LXNpemU6MTJweDsiPicgKwogICAgICAgICAg ICBEcml2ZVBvcnRhbC5lc2NhcGVIVE1MKGZpbGUubmFtZSkgKyAnICgnICsgZmlsZVNpemVUZXh0 ICsgJyk8L3A+JzsKCiAgICAgICAgaWYgKHR5cGUgPT09ICdpbWFnZScpIHsKICAgICAgICAgICAg Y29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICAgICAgcmVhZGVyLm9ubG9h ZCA9IChlKSA9PiB7IHByZXZpZXcuaW5uZXJIVE1MID0gJzxpbWcgc3JjPSInICsgZS50YXJnZXQu cmVzdWx0ICsgJyI+JyArIGZpbGVJbmZvSHRtbDsgfTsKICAgICAgICAgICAgcmVhZGVyLnJlYWRB c0RhdGFVUkwoZmlsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgaWNvbkNs YXNzID0gdHlwZTsKICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0eXBlLnRvVXBwZXJDYXNlKCk7 CiAgICAgICAgICAgIHByZXZpZXcuaW5uZXJIVE1MID0gJzxzcGFuIGNsYXNzPSJkcml2ZS1maWxl LWljb24gJyArIGljb25DbGFzcyArICciIHN0eWxlPSJ3aWR0aDo2MHB4O2hlaWdodDo2MHB4O2Zv bnQtc2l6ZToxOHB4O21hcmdpbjoxMHB4IGF1dG87Ij4nICsgbGFiZWwgKyAnPC9zcGFuPicgKyBm aWxlSW5mb0h0bWw7CiAgICAgICAgfQoKICAgICAgICAvLyBUaXRsZSArIENhcHRpb24KICAgICAg ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkVGl0bGUnKS52YWx1ZSA9IGZpbGUubmFt ZS5yZXBsYWNlKC9cLlteLl0rJC8sICcnKTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgndXBsb2FkQ2FwdGlvbicpLnZhbHVlID0gJyc7CgogICAgICAgIC8vIERpc3BsYXkgbW9kZSBv cHRpb25zICh0eXBlLWRlcGVuZGVudCkKICAgICAgICBjb25zdCBkaXNwbGF5R3JvdXAgPSBkb2N1 bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkRGlzcGxheU9wdGlvbnMnKTsKICAgICAgICBsZXQg b3B0aW9ucyA9ICc8YnV0dG9uIGNsYXNzPSJ1cGxvYWQtb3B0aW9uLWJ0biBhY3RpdmUiIGRhdGEt ZGlzcGxheT0iYXR0YWNobWVudCIgb25jbGljaz0iRHJpdmVFZGl0b3Iuc2V0VXBsb2FkT3B0aW9u KFwnZGlzcGxheVwnLHRoaXMpIj5Bbmhhbmc8L2J1dHRvbj4nOwoKICAgICAgICBpZiAodHlwZSA9 PT0gJ2ltYWdlJykgewogICAgICAgICAgICBvcHRpb25zICs9ICc8YnV0dG9uIGNsYXNzPSJ1cGxv YWQtb3B0aW9uLWJ0biIgZGF0YS1kaXNwbGF5PSJpbmxpbmUiIG9uY2xpY2s9IkRyaXZlRWRpdG9y LnNldFVwbG9hZE9wdGlvbihcJ2Rpc3BsYXlcJyx0aGlzKSI+SW0gQXJ0aWtlbDwvYnV0dG9uPic7 CiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncGRmJykgewogICAgICAgICAgICBvcHRpb25z ICs9ICc8YnV0dG9uIGNsYXNzPSJ1cGxvYWQtb3B0aW9uLWJ0biIgZGF0YS1kaXNwbGF5PSJwZGYt bGluayIgb25jbGljaz0iRHJpdmVFZGl0b3Iuc2V0VXBsb2FkT3B0aW9uKFwnZGlzcGxheVwnLHRo aXMpIj5QREYtTGluayBpbSBBcnRpa2VsPC9idXR0b24+JzsKICAgICAgICAgICAgb3B0aW9ucyAr PSAnPGJ1dHRvbiBjbGFzcz0idXBsb2FkLW9wdGlvbi1idG4iIGRhdGEtZGlzcGxheT0icGRmLWlm cmFtZSIgb25jbGljaz0iRHJpdmVFZGl0b3Iuc2V0VXBsb2FkT3B0aW9uKFwnZGlzcGxheVwnLHRo aXMpIj5QREYgZWluZ2ViZXR0ZXQ8L2J1dHRvbj4nOwogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9 PT0gJ3ZpZGVvJyB8fCB0eXBlID09PSAnYXVkaW8nKSB7CiAgICAgICAgICAgIG9wdGlvbnMgKz0g JzxidXR0b24gY2xhc3M9InVwbG9hZC1vcHRpb24tYnRuIiBkYXRhLWRpc3BsYXk9Im1lZGlhLWlu bGluZSIgb25jbGljaz0iRHJpdmVFZGl0b3Iuc2V0VXBsb2FkT3B0aW9uKFwnZGlzcGxheVwnLHRo aXMpIj5JbSBBcnRpa2VsPC9idXR0b24+JzsKICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdk b2N4JyB8fCB0eXBlID09PSAneGxzeCcgfHwgdHlwZSA9PT0gJ3BwdHgnKSB7CiAgICAgICAgICAg IG9wdGlvbnMgKz0gJzxidXR0b24gY2xhc3M9InVwbG9hZC1vcHRpb24tYnRuIiBkYXRhLWRpc3Bs YXk9Im9mZmljZS1pbmxpbmUiIG9uY2xpY2s9IkRyaXZlRWRpdG9yLnNldFVwbG9hZE9wdGlvbihc J2Rpc3BsYXlcJyx0aGlzKSI+SW0gQXJ0aWtlbDwvYnV0dG9uPic7CiAgICAgICAgfQoKICAgICAg ICBkaXNwbGF5R3JvdXAuaW5uZXJIVE1MID0gb3B0aW9uczsKCiAgICAgICAgLy8gSGlkZSBpbWFn ZS1zcGVjaWZpYyBvcHRpb25zIGluaXRpYWxseQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC eUlkKCd1cGxvYWRBbGlnbkdyb3VwJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkU2l6ZUdyb3VwJykuc3R5bGUuZGlzcGxheSA9 ICdub25lJzsKCiAgICAgICAgLy8gQ29uZmlybS1CdXR0b24gQmVzY2hyaWZ0dW5nCiAgICAgICAg Y29uc3QgY29uZmlybUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWRDb25maXJt QnRuJyk7CiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdJbmRleCA8IHRoaXMuX3BlbmRpbmdGaWxl cy5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgIGNvbmZpcm1CdG4udGV4dENvbnRlbnQgPSAnRWlu ZsO8Z2VuICYgbsOkY2hzdGUgRGF0ZWknOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNv bmZpcm1CdG4udGV4dENvbnRlbnQgPSAnRWluZsO8Z2VuJzsKICAgICAgICB9CgogICAgICAgIC8v IFNob3cgZGlhbG9nCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lZGlhVXBsb2Fk RGlhbG9nJykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICB9LAoKICAgIHNldFVwbG9hZE9w dGlvbihncm91cCwgYnRuKSB7CiAgICAgICAgLy8gVG9nZ2xlIGFjdGl2ZSBpbiBncm91cAogICAg ICAgIGJ0bi5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy51cGxvYWQtb3B0aW9uLWJ0 bicpLmZvckVhY2goYiA9PiBiLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTsKICAgICAgICBi dG4uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CgogICAgICAgIGlmIChncm91cCA9PT0gJ2Rpc3Bs YXknKSB7CiAgICAgICAgICAgIGNvbnN0IG1vZGUgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWRp c3BsYXknKTsKICAgICAgICAgICAgdGhpcy5fdXBsb2FkT3B0aW9ucy5kaXNwbGF5TW9kZSA9IG1v ZGU7CiAgICAgICAgICAgIGNvbnN0IGlzSW5saW5lSW1hZ2UgPSAobW9kZSA9PT0gJ2lubGluZScp OwogICAgICAgICAgICBjb25zdCBpc0lubGluZVBkZiA9IChtb2RlID09PSAncGRmLWxpbmsnIHx8 IG1vZGUgPT09ICdwZGYtaWZyYW1lJyk7CiAgICAgICAgICAgIGNvbnN0IGlzSW5saW5lTWVkaWEg PSAobW9kZSA9PT0gJ21lZGlhLWlubGluZScgfHwgbW9kZSA9PT0gJ29mZmljZS1pbmxpbmUnKTsK ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZEFsaWduR3JvdXAnKS5z dHlsZS5kaXNwbGF5ID0gKGlzSW5saW5lSW1hZ2UgfHwgaXNJbmxpbmVQZGYgfHwgaXNJbmxpbmVN ZWRpYSkgPyAnJyA6ICdub25lJzsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo J3VwbG9hZFNpemVHcm91cCcpLnN0eWxlLmRpc3BsYXkgPSBpc0lubGluZUltYWdlID8gJycgOiAn bm9uZSc7CiAgICAgICAgfSBlbHNlIGlmIChncm91cCA9PT0gJ2FsaWduJykgewogICAgICAgICAg ICB0aGlzLl91cGxvYWRPcHRpb25zLmFsaWduID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1hbGln bicpOwogICAgICAgIH0gZWxzZSBpZiAoZ3JvdXAgPT09ICdzaXplJykgewogICAgICAgICAgICB0 aGlzLl91cGxvYWRPcHRpb25zLnNpemUgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLXNpemUnKTsK ICAgICAgICB9CiAgICB9LAoKICAgIGNsb3NlVXBsb2FkRGlhbG9nKCkgewogICAgICAgIGlmICh0 aGlzLl91cGxvYWRJblByb2dyZXNzKSByZXR1cm47IC8vIExhdWZlbmRlbiBVcGxvYWQgbmljaHQg YWJicmVjaGVuCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lZGlhVXBsb2FkRGlh bG9nJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICAgICAgdGhpcy5fcGVuZGluZ0Zp bGVzID0gW107CiAgICAgICAgdGhpcy5fcGVuZGluZ0luZGV4ID0gMDsKICAgICAgICB0aGlzLl9z aG93VXBsb2FkUHJvZ3Jlc3MoZmFsc2UpOwogICAgfSwKCiAgICBfdXBsb2FkSW5Qcm9ncmVzczog ZmFsc2UsCgogICAgX2Zvcm1hdEJ5dGVzKGJ5dGVzKSB7CiAgICAgICAgaWYgKGJ5dGVzIDwgMTAy NCkgcmV0dXJuIGJ5dGVzICsgJyBCJzsKICAgICAgICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkg cmV0dXJuIChieXRlcyAvIDEwMjQpLnRvRml4ZWQoMCkgKyAnIEtCJzsKICAgICAgICByZXR1cm4g KGJ5dGVzIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgxKSArICcgTUInOwogICAgfSwKCiAgICBf c2hvd1VwbG9hZFByb2dyZXNzKHNob3cpIHsKICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZFByb2dyZXNzQ29udGFpbmVyJyk7CiAgICAgICAgdmFy IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWRDb25maXJtQnRuJyk7CiAgICAg ICAgaWYgKGNvbnRhaW5lcikgY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBzaG93ID8gJycgOiAn bm9uZSc7CiAgICAgICAgaWYgKGJ0bikgewogICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBzaG93 OwogICAgICAgICAgICBidG4udGV4dENvbnRlbnQgPSBzaG93ID8gJ1dpcmQgaG9jaGdlbGFkZW4u Li4nIDogJ0VpbmbDvGdlbic7CiAgICAgICAgICAgIGJ0bi5zdHlsZS5vcGFjaXR5ID0gc2hvdyA/ ICcwLjUnIDogJyc7CiAgICAgICAgICAgIGJ0bi5zdHlsZS5jdXJzb3IgPSBzaG93ID8gJ25vdC1h bGxvd2VkJyA6ICcnOwogICAgICAgIH0KICAgICAgICBpZiAoc2hvdykgewogICAgICAgICAgICB2 YXIgYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZFByb2dyZXNzQmFyJyk7CiAg ICAgICAgICAgIHZhciBwY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkUHJvZ3Jl c3NQY3QnKTsKICAgICAgICAgICAgdmFyIHNpemVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk KCd1cGxvYWRQcm9ncmVzc1NpemUnKTsKICAgICAgICAgICAgaWYgKGJhcikgYmFyLnN0eWxlLndp ZHRoID0gJzAlJzsKICAgICAgICAgICAgaWYgKHBjdCkgcGN0LnRleHRDb250ZW50ID0gJzAlJzsK ICAgICAgICAgICAgaWYgKHNpemVFbCkgc2l6ZUVsLnRleHRDb250ZW50ID0gJyc7CiAgICAgICAg fQogICAgfSwKCiAgICBhc3luYyBjb25maXJtVXBsb2FkKCkgewogICAgICAgIGNvbnN0IGZpbGUg PSB0aGlzLl9wZW5kaW5nRmlsZXNbdGhpcy5fcGVuZGluZ0luZGV4XTsKICAgICAgICBpZiAoIWZp bGUgfHwgdGhpcy5fdXBsb2FkSW5Qcm9ncmVzcykgcmV0dXJuOwoKICAgICAgICBjb25zdCB0eXBl ID0gdGhpcy5kZXRlY3RNZWRpYVR5cGUoZmlsZSk7CiAgICAgICAgY29uc3QgdGl0bGUgPSBkb2N1 bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkVGl0bGUnKS52YWx1ZS50cmltKCkgfHwgZmlsZS5u YW1lOwogICAgICAgIGNvbnN0IGNhcHRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBs b2FkQ2FwdGlvbicpLnZhbHVlLnRyaW0oKTsKICAgICAgICBjb25zdCBvcHRzID0gdGhpcy5fdXBs b2FkT3B0aW9uczsKICAgICAgICBjb25zdCBtZWRpYUlkID0gdGhpcy5nZW5lcmF0ZU1lZGlhSWQo KTsKICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICAgIC8vIFVwbG9hZC1VSTogQnV0dG9u IGRlYWt0aXZpZXJlbiArIEZvcnRzY2hyaXR0c2JhbGtlbiBhbnplaWdlbgogICAgICAgIHRoaXMu X3VwbG9hZEluUHJvZ3Jlc3MgPSB0cnVlOwogICAgICAgIHRoaXMuX3Nob3dVcGxvYWRQcm9ncmVz cyh0cnVlKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8gVXBsb2FkIGZpbGUgbWl0IEZv cnRzY2hyaXR0c2FuemVpZ2UKICAgICAgICAgICAgY29uc3QgcmVsUGF0aCA9IGF3YWl0IERyaXZl RlMudXBsb2FkTWVkaWEodGhpcy5jdXJyZW50RG9jLmlkLCBmaWxlLCBmdW5jdGlvbihwY3QsIGxv YWRlZCwgdG90YWwpIHsKICAgICAgICAgICAgICAgIHZhciBiYXIgPSBkb2N1bWVudC5nZXRFbGVt ZW50QnlJZCgndXBsb2FkUHJvZ3Jlc3NCYXInKTsKICAgICAgICAgICAgICAgIHZhciBwY3RFbCA9 IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWRQcm9ncmVzc1BjdCcpOwogICAgICAgICAg ICAgICAgdmFyIHNpemVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWRQcm9ncmVz c1NpemUnKTsKICAgICAgICAgICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRC eUlkKCd1cGxvYWRQcm9ncmVzc0xhYmVsJyk7CiAgICAgICAgICAgICAgICBpZiAoYmFyKSBiYXIu c3R5bGUud2lkdGggPSBwY3QgKyAnJSc7CiAgICAgICAgICAgICAgICBpZiAocGN0RWwpIHBjdEVs LnRleHRDb250ZW50ID0gcGN0ICsgJyUnOwogICAgICAgICAgICAgICAgaWYgKHNpemVFbCkgc2l6 ZUVsLnRleHRDb250ZW50ID0gc2VsZi5fZm9ybWF0Qnl0ZXMobG9hZGVkKSArICcgLyAnICsgc2Vs Zi5fZm9ybWF0Qnl0ZXModG90YWwpOwogICAgICAgICAgICAgICAgaWYgKGxhYmVsICYmIHBjdCA+ PSAxMDApIGxhYmVsLnRleHRDb250ZW50ID0gJ1dpcmQgdmVyYXJiZWl0ZXQuLi4nOwogICAgICAg ICAgICB9KTsKCiAgICAgICAgICAgIC8vIEFkZCB0byBkb2N1bWVudCBtZWRpYSBsaXN0CiAgICAg ICAgICAgIGlmICghdGhpcy5jdXJyZW50RG9jLm1lZGlhcykgdGhpcy5jdXJyZW50RG9jLm1lZGlh cyA9IFtdOwogICAgICAgICAgICB0aGlzLmN1cnJlbnREb2MubWVkaWFzLnB1c2goewogICAgICAg ICAgICAgICAgdHlwZTogdHlwZSwKICAgICAgICAgICAgICAgIHVybDogcmVsUGF0aCwKICAgICAg ICAgICAgICAgIHRpdGxlOiB0aXRsZSwKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjYXB0 aW9uLAogICAgICAgICAgICAgICAgZGlzcGxheU1vZGU6IG9wdHMuZGlzcGxheU1vZGUsCiAgICAg ICAgICAgICAgICBhbGlnbm1lbnQ6IG9wdHMuYWxpZ24sCiAgICAgICAgICAgICAgICBzaXplOiBv cHRzLnNpemUsCiAgICAgICAgICAgICAgICBtZWRpYUlkOiBtZWRpYUlkCiAgICAgICAgICAgIH0p OwoKICAgICAgICAgICAgLy8gSW5zZXJ0IGlubGluZSBIVE1MIGlmIHJlcXVlc3RlZAogICAgICAg ICAgICBpZiAob3B0cy5kaXNwbGF5TW9kZSAhPT0gJ2F0dGFjaG1lbnQnKSB7CiAgICAgICAgICAg ICAgICB0aGlzLmluc2VydElubGluZU1lZGlhKHJlbFBhdGgsIHR5cGUsIHRpdGxlLCBjYXB0aW9u LCBvcHRzLCBtZWRpYUlkKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhpcy5fcmVuZGVy TWVkaWFMaXN0KCk7CiAgICAgICAgICAgIHNob3dUb2FzdCh0aXRsZSArICcgaGluenVnZWbDvGd0 JywgJ3N1Y2Nlc3MnKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgc2hvd1Rv YXN0KCdGZWhsZXI6ICcgKyBlcnIubWVzc2FnZSwgJ2Vycm9yJyk7CiAgICAgICAgfQoKICAgICAg ICAvLyBVcGxvYWQgYWJnZXNjaGxvc3NlbiAtIFVJIHp1cnVlY2tzZXR6ZW4KICAgICAgICB0aGlz Ll91cGxvYWRJblByb2dyZXNzID0gZmFsc2U7CiAgICAgICAgdGhpcy5fc2hvd1VwbG9hZFByb2dy ZXNzKGZhbHNlKTsKCiAgICAgICAgLy8gUHJvY2VzcyBuZXh0IGZpbGUgb3IgY2xvc2UKICAgICAg ICB0aGlzLl9wZW5kaW5nSW5kZXgrKzsKICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0luZGV4IDwg dGhpcy5fcGVuZGluZ0ZpbGVzLmxlbmd0aCkgewogICAgICAgICAgICB0aGlzLnNob3dVcGxvYWRE aWFsb2coKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmNsb3NlVXBsb2FkRGlh bG9nKCk7CiAgICAgICAgfQogICAgfSwKCiAgICBpbnNlcnRJbmxpbmVNZWRpYSh1cmwsIHR5cGUs IHRpdGxlLCBjYXB0aW9uLCBvcHRzLCBtZWRpYUlkKSB7CiAgICAgICAgY29uc3QgZWRpdG9ySW5w dXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9ySW5wdXQnKTsKICAgICAgICBsZXQg ZWxlbWVudDsKCiAgICAgICAgaWYgKHR5cGUgPT09ICdpbWFnZScgJiYgb3B0cy5kaXNwbGF5TW9k ZSA9PT0gJ2lubGluZScpIHsKICAgICAgICAgICAgLy8gSW1hZ2UgZmlndXJlCiAgICAgICAgICAg IGNvbnN0IHNpemVDbGFzcyA9IG9wdHMuc2l6ZSA9PT0gJ2xhcmdlJyA/ICdkcml2ZS1tZWRpYS1s YXJnZScgOiAnZHJpdmUtbWVkaWEtdGh1bWJuYWlsJzsKICAgICAgICAgICAgY29uc3QgYWxpZ25D bGFzcyA9ICdkcml2ZS1hbGlnbi0nICsgb3B0cy5hbGlnbjsKCiAgICAgICAgICAgIGVsZW1lbnQg PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWd1cmUnKTsKICAgICAgICAgICAgZWxlbWVudC5j bGFzc05hbWUgPSAnZHJpdmUtbWVkaWEgJyArIHNpemVDbGFzcyArICcgJyArIGFsaWduQ2xhc3M7 CiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1lZGlhLWlkJywgbWVkaWFJ ZCk7CiAgICAgICAgICAgIGVsZW1lbnQuY29udGVudEVkaXRhYmxlID0gJ2ZhbHNlJzsKCiAgICAg ICAgICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOwogICAgICAg ICAgICBpbWcuc3JjID0gdXJsOwogICAgICAgICAgICBpbWcuYWx0ID0gdGl0bGU7CiAgICAgICAg ICAgIGltZy5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7CiAgICAgICAgICAgIGltZy5vbmNsaWNr ID0gZnVuY3Rpb24oZSkgeyBlLnByZXZlbnREZWZhdWx0KCk7IGUuc3RvcFByb3BhZ2F0aW9uKCk7 IG9wZW5NZWRpYU1vZGFsKHVybCwgJ2ltYWdlJywgdGl0bGUpOyB9OwogICAgICAgICAgICBlbGVt ZW50LmFwcGVuZENoaWxkKGltZyk7CgogICAgICAgICAgICBpZiAoY2FwdGlvbikgewogICAgICAg ICAgICAgICAgY29uc3QgZmlnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmlnY2FwdGlvbicp OwogICAgICAgICAgICAgICAgZmlnLnRleHRDb250ZW50ID0gY2FwdGlvbjsKICAgICAgICAgICAg ICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZmlnKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxz ZSBpZiAodHlwZSA9PT0gJ3BkZicgJiYgb3B0cy5kaXNwbGF5TW9kZSA9PT0gJ3BkZi1saW5rJykg ewogICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAg ICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gJ2RyaXZlLW1lZGlhIGRyaXZlLW1lZGlhLXBk Zi1saW5rIGRyaXZlLWFsaWduLScgKyBvcHRzLmFsaWduOwogICAgICAgICAgICBlbGVtZW50LnNl dEF0dHJpYnV0ZSgnZGF0YS1tZWRpYS1pZCcsIG1lZGlhSWQpOwogICAgICAgICAgICBlbGVtZW50 LmNvbnRlbnRFZGl0YWJsZSA9ICdmYWxzZSc7CiAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1M ID0gJzxzcGFuIGNsYXNzPSJkcml2ZS1wZGYtaWNvbiI+UERGPC9zcGFuPicgKwogICAgICAgICAg ICAgICAgJzxzcGFuIGNsYXNzPSJwZGYtdGl0bGUiPicgKyBEcml2ZVBvcnRhbC5lc2NhcGVIVE1M KHRpdGxlKSArICc8L3NwYW4+JzsKICAgICAgICAgICAgZWxlbWVudC5vbmNsaWNrID0gZnVuY3Rp b24oZSkgeyBlLnByZXZlbnREZWZhdWx0KCk7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5NZWRp YU1vZGFsKHVybCwgJ3BkZicsIHRpdGxlKTsgfTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09 ICdwZGYnICYmIG9wdHMuZGlzcGxheU1vZGUgPT09ICdwZGYtaWZyYW1lJykgewogICAgICAgICAg ICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgIGVs ZW1lbnQuY2xhc3NOYW1lID0gJ2RyaXZlLW1lZGlhIGRyaXZlLW1lZGlhLXBkZi1pZnJhbWUgZHJp dmUtYWxpZ24tJyArIG9wdHMuYWxpZ247CiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRl KCdkYXRhLW1lZGlhLWlkJywgbWVkaWFJZCk7CiAgICAgICAgICAgIGVsZW1lbnQuY29udGVudEVk aXRhYmxlID0gJ2ZhbHNlJzsKICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPGlmcmFt ZSBzcmM9IicgKyBEcml2ZVBvcnRhbC5lc2NhcGVBdHRyKHVybCkgKyAnIj48L2lmcmFtZT4nICsK ICAgICAgICAgICAgICAgIChjYXB0aW9uID8gJzxwIGNsYXNzPSJkcml2ZS1tZWRpYS1jYXB0aW9u Ij4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChjYXB0aW9uKSArICc8L3A+JyA6ICcnKTsKICAg ICAgICAgICAgZWxlbWVudC5vbmNsaWNrID0gZnVuY3Rpb24oZSkgeyBlLnByZXZlbnREZWZhdWx0 KCk7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5NZWRpYU1vZGFsKHVybCwgJ3BkZicsIHRpdGxl KTsgfTsKICAgICAgICB9IGVsc2UgaWYgKG9wdHMuZGlzcGxheU1vZGUgPT09ICdtZWRpYS1pbmxp bmUnICYmICh0eXBlID09PSAndmlkZW8nIHx8IHR5cGUgPT09ICdhdWRpbycpKSB7CiAgICAgICAg ICAgIC8vIFZpZGVvL0F1ZGlvIGFscyBrbGlja2JhcmVzIEljb24tRWxlbWVudCBpbSBBcnRpa2Vs CiAgICAgICAgICAgIHZhciBpY29uID0gdHlwZSA9PT0gJ3ZpZGVvJyA/ICcmIzEyNzkxMDsnIDog JyYjMTI3OTI1Oyc7CiAgICAgICAgICAgIHZhciBsYWJlbCA9IHR5cGUgPT09ICd2aWRlbycgPyAn VmlkZW8nIDogJ0F1ZGlvJzsKICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs ZW1lbnQoJ2RpdicpOwogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICdkcml2ZS1tZWRp YSBkcml2ZS1tZWRpYS1lbWJlZCBkcml2ZS1hbGlnbi0nICsgb3B0cy5hbGlnbjsKICAgICAgICAg ICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVkaWEtaWQnLCBtZWRpYUlkKTsKICAgICAg ICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVkaWEtdHlwZScsIHR5cGUpOwogICAg ICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tZWRpYS11cmwnLCB1cmwpOwogICAg ICAgICAgICBlbGVtZW50LmNvbnRlbnRFZGl0YWJsZSA9ICdmYWxzZSc7CiAgICAgICAgICAgIGVs ZW1lbnQudGl0bGUgPSBsYWJlbCArICcgYWJzcGllbGVuOiAnICsgdGl0bGU7CiAgICAgICAgICAg IGVsZW1lbnQuaW5uZXJIVE1MID0gJzxzcGFuIGNsYXNzPSJkcml2ZS1lbWJlZC1pY29uIGljb24t JyArIHR5cGUgKyAnIj48L3NwYW4+JyArCiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9ImRy aXZlLWVtYmVkLWxhYmVsIj4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTCh0aXRsZSkgKyAnPC9z cGFuPic7CiAgICAgICAgICAgIGVsZW1lbnQub25jbGljayA9IGZ1bmN0aW9uKGUpIHsgZS5wcmV2 ZW50RGVmYXVsdCgpOyBlLnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuTWVkaWFNb2RhbCh1cmwsIHR5 cGUsIHRpdGxlKTsgfTsKICAgICAgICB9IGVsc2UgaWYgKG9wdHMuZGlzcGxheU1vZGUgPT09ICdv ZmZpY2UtaW5saW5lJyAmJiAodHlwZSA9PT0gJ2RvY3gnIHx8IHR5cGUgPT09ICd4bHN4JyB8fCB0 eXBlID09PSAncHB0eCcpKSB7CiAgICAgICAgICAgIC8vIE9mZmljZS1EYXRlaWVuIGFscyBrbGlj a2JhcmVzIEljb24tRWxlbWVudCBpbSBBcnRpa2VsCiAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUg PSAnZHJpdmUtbWVkaWEgZHJpdmUtbWVkaWEtZW1iZWQgZHJpdmUtYWxpZ24tJyArIG9wdHMuYWxp Z247CiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1lZGlhLWlkJywgbWVk aWFJZCk7CiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1lZGlhLXR5cGUn LCB0eXBlKTsKICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVkaWEtdXJs JywgdXJsKTsKICAgICAgICAgICAgZWxlbWVudC5jb250ZW50RWRpdGFibGUgPSAnZmFsc2UnOwog ICAgICAgICAgICBlbGVtZW50LnRpdGxlID0gdHlwZS50b1VwcGVyQ2FzZSgpICsgJyBoZXJ1bnRl cmxhZGVuOiAnICsgdGl0bGU7CiAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJzxzcGFu IGNsYXNzPSJkcml2ZS1lbWJlZC1pY29uIGljb24tJyArIHR5cGUgKyAnIj48L3NwYW4+JyArCiAg ICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9ImRyaXZlLWVtYmVkLWxhYmVsIj4nICsgRHJpdmVQ b3J0YWwuZXNjYXBlSFRNTCh0aXRsZSkgKyAnPC9zcGFuPic7CiAgICAgICAgICAgIGVsZW1lbnQu b25jbGljayA9IGZ1bmN0aW9uKGUpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBlLnN0b3BQcm9wYWdh dGlvbigpOyBvcGVuTWVkaWFNb2RhbCh1cmwsIHR5cGUsIHRpdGxlKTsgfTsKICAgICAgICB9Cgog ICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuOwoKICAgICAgICAvLyBJbnNlcnQgYXQgY3Vyc29y IHBvc2l0aW9uIG9yIGFwcGVuZAogICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rp b24oKTsKICAgICAgICBpZiAodGhpcy5fc2F2ZWRFZGl0b3JSYW5nZSAmJiBlZGl0b3JJbnB1dC5j b250YWlucyh0aGlzLl9zYXZlZEVkaXRvclJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSkg ewogICAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICAgIHNlbC5hZGRS YW5nZSh0aGlzLl9zYXZlZEVkaXRvclJhbmdlKTsKICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBz ZWwuZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAgICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKICAg ICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShlbGVtZW50KTsKICAgICAgICAgICAgLy8gUGxhY2Ug Y3Vyc29yIGFmdGVyIGVsZW1lbnQKICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcihlbGVt ZW50KTsKICAgICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7CiAgICAgICAgICAgIHNlbC5y ZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlKTsKICAgICAg ICAgICAgdGhpcy5fc2F2ZWRFZGl0b3JSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTsKICAgICAg ICB9IGVsc2UgewogICAgICAgICAgICBlZGl0b3JJbnB1dC5hcHBlbmRDaGlsZChlbGVtZW50KTsK ICAgICAgICB9CiAgICB9LAoKICAgIC8vIC0tLSBNZWRpYSBDb250ZXh0IE1lbnUgKGluIEVkaXRv cikgLS0tCiAgICBfY29udGV4dFRhcmdldDogbnVsbCwKCiAgICAvLyAtLS0gU2NobGFnd8O2cnRl ciAtLS0KICAgIFBSRURFRklORURfS0VZV09SRFM6IFsKICAgICAgICAnU296aWFsdm9yc2Nocmlm dGVuJywgJ0xhZHVuZ3NzaWNoZXJ1bmcnLCAnw5xiZXJsYWR1bmcnLCAnS09NJywgJ0dHVlMnLAog ICAgICAgICdGYWhyemV1Z3RlY2huaWsnLCAnVGVjaEtvbnRyb2xsVk8nLCAnS2Fib3RhZ2UnLCAn RG9rdW1lbnRlbmbDpGxzY2h1bmcnLAogICAgICAgICdadWxhc3N1bmdlbicsICdadWxhc3N1bmdl biBuYXRpb25hbCcsICdadWxhc3N1bmdlbiBpbnRlcm5hdGlvbmFsJywKICAgICAgICAnQWxrb2hv bCcsICdCVE0nLCAnR2VzY2h3aW5kaWdrZWl0JywgJ0Fic3RhbmQnLCAnRmFsc2NoZmFocmVyJywK ICAgICAgICAnVmVyZm9sZ3VuZ3NmYWhydCcsICdUdW5uZWwnLCAnU3TDtnJmYWxsJywgJ0ZvdG9n cmFmaWUnLAogICAgICAgICdGb3RvZ3JhZmllIEJyw7xja2UnLCAnRm90b2dyYWZpZSBCYXVzdGVs bGUnLCAnRm90b2dyYWZpZSBBYnN0YW5kJywKICAgICAgICAnVHVuaW5nJywgJ1ZLUicsICdTY2hs ZXBwZW4nLCAnU2Nocm90dHNhbW1sZXInCiAgICBdLAogICAgLy8gVW50ZXJrYXRlZ29yaWVuOiBL YXRlZ29yaWUgLT4gU3ViLVRhZ3MgKGZ1ZXIgS2xhbW1lcnZlcm1lcmsgaW0gVGl0ZWwgKyBBdXRv LVRhZykKICAgIENBVEVHT1JZX1NVQlRBR1M6IHsKICAgICAgICAnWnVsYXNzdW5nZW4nOiBbJ25h dGlvbmFsJywgJ2ludGVybmF0aW9uYWwnXSwKICAgICAgICAnRm90b2dyYWZpZSc6ICBbJ0Jyw7xj a2UnLCAnQmF1c3RlbGxlJywgJ0Fic3RhbmQnXQogICAgfSwKICAgIF9jdXJyZW50S2V5d29yZHM6 IFtdLAoKICAgIF9nZXRBbGxLbm93bktleXdvcmRzKCkgewogICAgICAgIGNvbnN0IHNldCA9IG5l dyBTZXQodGhpcy5QUkVERUZJTkVEX0tFWVdPUkRTKTsKICAgICAgICBEcml2ZUZTLmRvY3VtZW50 cy5mb3JFYWNoKGQgPT4gKGQuc2NobGFnd29lcnRlciB8fCBbXSkuZm9yRWFjaChrID0+IHNldC5h ZGQoaykpKTsKICAgICAgICByZXR1cm4gWy4uLnNldF0uc29ydCgoYSwgYikgPT4gYS5sb2NhbGVD b21wYXJlKGIsICdkZScpKTsKICAgIH0sCgogICAgX3JlbmRlcktleXdvcmRzKCkgewogICAgICAg IGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3JLZXl3b3Jk cycpOwogICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRv cktleXdvcmRJbnB1dCcpOwogICAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcua2V5 d29yZC1waWxsJykuZm9yRWFjaChwID0+IHAucmVtb3ZlKCkpOwogICAgICAgIHRoaXMuX2N1cnJl bnRLZXl3b3Jkcy5mb3JFYWNoKChrdywgaSkgPT4gewogICAgICAgICAgICBjb25zdCBwaWxsID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICAgICAgICBwaWxsLmNsYXNzTmFt ZSA9ICdrZXl3b3JkLXBpbGwnOwogICAgICAgICAgICBwaWxsLmlubmVySFRNTCA9IERyaXZlUG9y dGFsLmVzY2FwZUhUTUwoa3cpICsgJyA8c3BhbiBjbGFzcz0ia3ctcmVtb3ZlIiBvbmNsaWNrPSJE cml2ZUVkaXRvci5yZW1vdmVLZXl3b3JkKCcgKyBpICsgJykiPiZ0aW1lczs8L3NwYW4+JzsKICAg ICAgICAgICAgY29udGFpbmVyLmluc2VydEJlZm9yZShwaWxsLCBpbnB1dCk7CiAgICAgICAgfSk7 CiAgICAgICAgdGhpcy5fcmVuZGVyU3VnZ2VzdGlvbnMoKTsKICAgIH0sCgogICAgX3JlbmRlclN1 Z2dlc3Rpb25zKCkgewogICAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ2tleXdvcmRTdWdnZXN0aW9ucycpOwogICAgICAgIGlmICghcGFuZWwpIHJldHVybjsKICAg ICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5fY3VycmVudEtleXdvcmRzOwogICAgICAgIGNvbnN0 IGRvYyA9IHRoaXMuY3VycmVudERvYzsKICAgICAgICBjb25zdCBrYXRlZ29yaWUgPSBkb2MgPyBk b2Mua2F0ZWdvcmllIDogJyc7CgogICAgICAgIC8vIEFsbGUgYmVrYW5udGVuIFNjaGxhZ3fDtnJ0 ZXIgc2FtbWVsbiBtaXQgR2V3aWNodHVuZwogICAgICAgIHZhciBrd1Njb3JlcyA9IHt9OwogICAg ICAgIERyaXZlRlMuZG9jdW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZCkgewogICAgICAgICAgICB2 YXIgcmVsZXZhbmNlID0gMTsKICAgICAgICAgICAgaWYgKGQua2F0ZWdvcmllID09PSBrYXRlZ29y aWUpIHJlbGV2YW5jZSA9IDM7IC8vIGdsZWljaGUgS2F0ZWdvcmllID0gaMO2aGVyZSBSZWxldmFu egogICAgICAgICAgICBpZiAoZC5wYXJlbnRJZCA9PT0gKGRvYyAmJiBkb2MuaWQpKSByZWxldmFu Y2UgPSA0OyAvLyBVbnRlcmFydGlrZWwKICAgICAgICAgICAgaWYgKGRvYyAmJiBkb2MucGFyZW50 SWQgJiYgZC5pZCA9PT0gZG9jLnBhcmVudElkKSByZWxldmFuY2UgPSA0OyAvLyDDnGJlcmFydGlr ZWwKICAgICAgICAgICAgLy8gVGhlbWVuw6RobmxpY2hrZWl0OiBnZW1laW5zYW1lIFNjaGxhZ3fD tnJ0ZXIKICAgICAgICAgICAgdmFyIG92ZXJsYXAgPSAoZC5zY2hsYWd3b2VydGVyIHx8IFtdKS5m aWx0ZXIoZnVuY3Rpb24oaykgeyByZXR1cm4gY3VycmVudC5pbmNsdWRlcyhrKTsgfSkubGVuZ3Ro OwogICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDApIHJlbGV2YW5jZSArPSBvdmVybGFwICogMjsK ICAgICAgICAgICAgKGQuc2NobGFnd29lcnRlciB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihrKSB7 CiAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnQuaW5jbHVkZXMoaykpIHsKICAgICAgICAgICAg ICAgICAgICBrd1Njb3Jlc1trXSA9IChrd1Njb3Jlc1trXSB8fCAwKSArIHJlbGV2YW5jZTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIFZv cmRlZmluaWVydGUgS2V5d29yZHMgYWxzIEJhc2lzLVZvcnNjaGzDpGdlIG1pdCBuaWVkcmlnZXIg R2V3aWNodHVuZwogICAgICAgIHRoaXMuUFJFREVGSU5FRF9LRVlXT1JEUy5mb3JFYWNoKGZ1bmN0 aW9uKGspIHsKICAgICAgICAgICAgaWYgKCFjdXJyZW50LmluY2x1ZGVzKGspICYmICFrd1Njb3Jl c1trXSkga3dTY29yZXNba10gPSAwLjU7CiAgICAgICAgfSk7CiAgICAgICAgLy8gVW50ZXJrYXRl Z29yaWUtU3ViLVRhZ3MgZGVyIGFrdHVlbGxlbiBLYXRlZ29yaWUgaG9jaCBwcmlvcmlzaWVyZW4K ICAgICAgICB2YXIgY2F0U3VicyA9IHRoaXMuQ0FURUdPUllfU1VCVEFHU1trYXRlZ29yaWVdIHx8 IFtdOwogICAgICAgIGNhdFN1YnMuZm9yRWFjaChmdW5jdGlvbihzKSB7CiAgICAgICAgICAgIGlm ICghY3VycmVudC5pbmNsdWRlcyhzKSkga3dTY29yZXNbc10gPSAoa3dTY29yZXNbc10gfHwgMCkg KyA1OwogICAgICAgIH0pOwogICAgICAgIHZhciBzb3J0ZWQgPSBPYmplY3QuZW50cmllcyhrd1Nj b3Jlcykuc29ydChmdW5jdGlvbihhLGIpeyByZXR1cm4gYlsxXSAtIGFbMV07IH0pLnNsaWNlKDAs IDE1KTsKCiAgICAgICAgaWYgKHNvcnRlZC5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgcGFu ZWwuaW5uZXJIVE1MID0gJyc7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAg IHBhbmVsLmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFy KC0tdGV4dC1tdXRlZCk7bWFyZ2luLXJpZ2h0OjRweDsiPlZvcnNjaGzDpGdlOjwvc3Bhbj4nICsK ICAgICAgICAgICAgc29ydGVkLm1hcChmdW5jdGlvbihrdikgewogICAgICAgICAgICAgICAgcmV0 dXJuICc8c3BhbiBjbGFzcz0ia2V5d29yZC1zdWdnZXN0aW9uIiBvbmNsaWNrPSJEcml2ZUVkaXRv ci5hZGRLZXl3b3JkKFwnJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoa3ZbMF0pICsgJ1wnKSI+ JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoa3ZbMF0pICsgJzwvc3Bhbj4nOwogICAgICAgICAg ICB9KS5qb2luKCcnKTsKICAgIH0sCgogICAgYWRkS2V5d29yZCh3b3JkKSB7CiAgICAgICAgd29y ZCA9IHdvcmQudHJpbSgpOwogICAgICAgIGlmICghd29yZCB8fCB0aGlzLl9jdXJyZW50S2V5d29y ZHMuaW5jbHVkZXMod29yZCkpIHJldHVybjsKICAgICAgICB0aGlzLl9jdXJyZW50S2V5d29yZHMu cHVzaCh3b3JkKTsKICAgICAgICB0aGlzLl9yZW5kZXJLZXl3b3JkcygpOwogICAgICAgIGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3JLZXl3b3JkSW5wdXQnKS52YWx1ZSA9ICcnOwogICAg ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrZXl3b3JkQXV0b2NvbXBsZXRlJykuY2xhc3NM aXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICB9LAoKICAgIHJlbW92ZUtleXdvcmQoaW5kZXgpIHsK ICAgICAgICB0aGlzLl9jdXJyZW50S2V5d29yZHMuc3BsaWNlKGluZGV4LCAxKTsKICAgICAgICB0 aGlzLl9yZW5kZXJLZXl3b3JkcygpOwogICAgfSwKCiAgICBfc2V0dXBLZXl3b3JkSW5wdXQoKSB7 CiAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yS2V5 d29yZElucHV0Jyk7CiAgICAgICAgY29uc3QgYWMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn a2V5d29yZEF1dG9jb21wbGV0ZScpOwogICAgICAgIGlucHV0Lm9ua2V5ZG93biA9IChlKSA9PiB7 CiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJywnKSB7CiAg ICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICB0aGlzLmFk ZEtleXdvcmQoaW5wdXQudmFsdWUucmVwbGFjZSgnLCcsICcnKSk7CiAgICAgICAgICAgIH0gZWxz ZSBpZiAoZS5rZXkgPT09ICdCYWNrc3BhY2UnICYmICFpbnB1dC52YWx1ZSAmJiB0aGlzLl9jdXJy ZW50S2V5d29yZHMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVLZXl3 b3JkKHRoaXMuX2N1cnJlbnRLZXl3b3Jkcy5sZW5ndGggLSAxKTsKICAgICAgICAgICAgfQogICAg ICAgIH07CiAgICAgICAgaW5wdXQub25pbnB1dCA9ICgpID0+IHsKICAgICAgICAgICAgY29uc3Qg cSA9IGlucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpOwogICAgICAgICAgICBpZiAocS5s ZW5ndGggPCAxKSB7IGFjLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOyByZXR1cm47IH0KICAg ICAgICAgICAgY29uc3Qga25vd24gPSB0aGlzLl9nZXRBbGxLbm93bktleXdvcmRzKCkuZmlsdGVy KGsgPT4KICAgICAgICAgICAgICAgIGsudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKSAmJiAhdGhp cy5fY3VycmVudEtleXdvcmRzLmluY2x1ZGVzKGspCiAgICAgICAgICAgICkuc2xpY2UoMCwgOCk7 CiAgICAgICAgICAgIGlmIChrbm93bi5sZW5ndGggPT09IDApIHsgYWMuY2xhc3NMaXN0LnJlbW92 ZSgnYWN0aXZlJyk7IHJldHVybjsgfQogICAgICAgICAgICBhYy5pbm5lckhUTUwgPSBrbm93bi5t YXAoayA9PgogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImtleXdvcmQtYXV0b2NvbXBsZXRl LWl0ZW0iIG9ubW91c2Vkb3duPSJEcml2ZUVkaXRvci5hZGRLZXl3b3JkKFwnJyArIERyaXZlUG9y dGFsLmVzY2FwZUF0dHIoaykgKyAnXCcpIj4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChrKSAr ICc8L2Rpdj4nCiAgICAgICAgICAgICkuam9pbignJyk7CiAgICAgICAgICAgIGFjLmNsYXNzTGlz dC5hZGQoJ2FjdGl2ZScpOwogICAgICAgIH07CiAgICAgICAgaW5wdXQub25ibHVyID0gKCkgPT4g c2V0VGltZW91dCgoKSA9PiBhYy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKSwgMjAwKTsKICAg IH0sCgogICAgX3NlbGVjdGVkQmxvY2s6IG51bGwsCgogICAgX3NlbGVjdEJsb2NrKGJsb2NrKSB7 CiAgICAgICAgdGhpcy5fZGVzZWxlY3RCbG9jaygpOwogICAgICAgIHRoaXMuX3NlbGVjdGVkQmxv Y2sgPSBibG9jazsKICAgICAgICBibG9jay5zdHlsZS5vdXRsaW5lID0gJzJweCBzb2xpZCB2YXIo LS10ZXh0LWhlYWRpbmcpJzsKICAgICAgICBibG9jay5zdHlsZS5vdXRsaW5lT2Zmc2V0ID0gJzJw eCc7CiAgICB9LAoKICAgIF9kZXNlbGVjdEJsb2NrKCkgewogICAgICAgIGlmICh0aGlzLl9zZWxl Y3RlZEJsb2NrKSB7CiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQmxvY2suc3R5bGUub3V0bGlu ZSA9ICcnOwogICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEJsb2NrLnN0eWxlLm91dGxpbmVPZmZz ZXQgPSAnJzsKICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRCbG9jayA9IG51bGw7CiAgICAgICAg fQogICAgfSwKCiAgICBzZXR1cEVkaXRvck1lZGlhRXZlbnRzKCkgewogICAgICAgIGNvbnN0IGVk aXRvcklucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcklucHV0Jyk7CiAgICAg ICAgY29uc3Qgc2VsZiA9IHRoaXM7CgogICAgICAgIGVkaXRvcklucHV0LmFkZEV2ZW50TGlzdGVu ZXIoJ2NsaWNrJywgKGUpID0+IHsKICAgICAgICAgICAgY29uc3QgbWVkaWEgPSBlLnRhcmdldC5j bG9zZXN0KCcuZHJpdmUtbWVkaWEnKTsKICAgICAgICAgICAgaWYgKG1lZGlhICYmIGVkaXRvcklu cHV0LmNvbnRhaW5zKG1lZGlhKSkgewogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgp OwogICAgICAgICAgICAgICAgdGhpcy5zaG93Q29udGV4dE1lbnUobWVkaWEsIGUpOwogICAgICAg ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBLbGljayBhdWYg QWNjb3JkaW9uLCBGQVEsIFRhYmVsbGU6IG1hcmtpZXJlbgogICAgICAgICAgICB2YXIgYmxvY2sg PSBlLnRhcmdldC5jbG9zZXN0KCcuZHJpdmUtYWNjb3JkaW9uLCAuZHJpdmUtZmFxLCAuZHJpdmUt dGFibGUtd3JhcCwgLmRyaXZlLWluZm9ib3gsIGhyLmRyaXZlLWRpdmlkZXInKTsKICAgICAgICAg ICAgaWYgKGJsb2NrICYmIGVkaXRvcklucHV0LmNvbnRhaW5zKGJsb2NrKSkgewogICAgICAgICAg ICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0Qmxv Y2soYmxvY2spOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5fZGVz ZWxlY3RCbG9jaygpOwogICAgICAgICAgICAgICAgdGhpcy5oaWRlQ29udGV4dE1lbnUoKTsKICAg ICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBCYWNrc3BhY2UvRGVsZXRlIGxvZXNj aHQgbWFya2llcnRlbiBCbG9jawogICAgICAgIGVkaXRvcklucHV0LmFkZEV2ZW50TGlzdGVuZXIo J2tleWRvd24nLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlmIChzZWxmLl9zZWxlY3RlZEJs b2NrICYmIChlLmtleSA9PT0gJ0JhY2tzcGFjZScgfHwgZS5rZXkgPT09ICdEZWxldGUnKSkgewog ICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgc2VsZi5f c2VsZWN0ZWRCbG9jay5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIHNlbGYuX3NlbGVjdGVkQmxv Y2sgPSBudWxsOwogICAgICAgICAgICAgICAgc2VsZi5zYXZlU3RhdGUoKTsKICAgICAgICAgICAg fQogICAgICAgIH0pOwogICAgfSwKCiAgICBzaG93Q29udGV4dE1lbnUoZWxlbWVudCwgZXZlbnQp IHsKICAgICAgICB0aGlzLl9jb250ZXh0VGFyZ2V0ID0gZWxlbWVudDsKICAgICAgICBjb25zdCBt ZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lZGlhQ29udGV4dE1lbnUnKTsKICAgICAg ICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCiAgICAgICAg bWVudS5zdHlsZS50b3AgPSAocmVjdC5ib3R0b20gKyB3aW5kb3cuc2Nyb2xsWSArIDUpICsgJ3B4 JzsKICAgICAgICBtZW51LnN0eWxlLmxlZnQgPSBNYXRoLm1pbihyZWN0LmxlZnQgKyB3aW5kb3cu c2Nyb2xsWCwgd2luZG93LmlubmVyV2lkdGggLSAyMDApICsgJ3B4JzsKICAgICAgICBtZW51LmNs YXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwoKICAgICAgICAvLyBIaWdobGlnaHQgY3VycmVudCBhbGln bm1lbnQKICAgICAgICBjb25zdCBjdXJyZW50QWxpZ24gPSBlbGVtZW50LmNsYXNzTGlzdC5jb250 YWlucygnZHJpdmUtYWxpZ24tbGVmdCcpID8gJ2xlZnQnCiAgICAgICAgICAgIDogZWxlbWVudC5j bGFzc0xpc3QuY29udGFpbnMoJ2RyaXZlLWFsaWduLXJpZ2h0JykgPyAncmlnaHQnIDogJ2NlbnRl cic7CiAgICAgICAgbWVudS5xdWVyeVNlbGVjdG9yQWxsKCcubWVkaWEtY29udGV4dC1ncm91cCBi dXR0b24nKS5mb3JFYWNoKGJ0biA9PiB7CiAgICAgICAgICAgIGJ0bi5jbGFzc0xpc3QudG9nZ2xl KCdhY3RpdmUnLCBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWFsaWduJykgPT09IGN1cnJlbnRBbGln bik7CiAgICAgICAgfSk7CiAgICB9LAoKICAgIGhpZGVDb250ZXh0TWVudSgpIHsKICAgICAgICBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVkaWFDb250ZXh0TWVudScpLmNsYXNzTGlzdC5yZW1v dmUoJ2FjdGl2ZScpOwogICAgICAgIHRoaXMuX2NvbnRleHRUYXJnZXQgPSBudWxsOwogICAgfSwK CiAgICBjb250ZXh0QWxpZ24oYWxpZ24pIHsKICAgICAgICBpZiAoIXRoaXMuX2NvbnRleHRUYXJn ZXQpIHJldHVybjsKICAgICAgICB0aGlzLl9jb250ZXh0VGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUo J2RyaXZlLWFsaWduLWxlZnQnLCAnZHJpdmUtYWxpZ24tY2VudGVyJywgJ2RyaXZlLWFsaWduLXJp Z2h0Jyk7CiAgICAgICAgdGhpcy5fY29udGV4dFRhcmdldC5jbGFzc0xpc3QuYWRkKCdkcml2ZS1h bGlnbi0nICsgYWxpZ24pOwoKICAgICAgICAvLyBVcGRhdGUgbWVkaWEgbWV0YWRhdGEKICAgICAg ICBjb25zdCBtZWRpYUlkID0gdGhpcy5fY29udGV4dFRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEt bWVkaWEtaWQnKTsKICAgICAgICBpZiAobWVkaWFJZCAmJiB0aGlzLmN1cnJlbnREb2MpIHsKICAg ICAgICAgICAgY29uc3QgbWVkaWEgPSAodGhpcy5jdXJyZW50RG9jLm1lZGlhcyB8fCBbXSkuZmlu ZChtID0+IG0ubWVkaWFJZCA9PT0gbWVkaWFJZCk7CiAgICAgICAgICAgIGlmIChtZWRpYSkgbWVk aWEuYWxpZ25tZW50ID0gYWxpZ247CiAgICAgICAgfQoKICAgICAgICB0aGlzLmhpZGVDb250ZXh0 TWVudSgpOwogICAgfSwKCiAgICBjb250ZXh0RWRpdENhcHRpb24oKSB7CiAgICAgICAgaWYgKCF0 aGlzLl9jb250ZXh0VGFyZ2V0KSByZXR1cm47CiAgICAgICAgY29uc3QgZmlnY2FwdGlvbiA9IHRo aXMuX2NvbnRleHRUYXJnZXQucXVlcnlTZWxlY3RvcignZmlnY2FwdGlvbiwgLmRyaXZlLW1lZGlh LWNhcHRpb24nKTsKICAgICAgICBjb25zdCBjdXJyZW50ID0gZmlnY2FwdGlvbiA/IGZpZ2NhcHRp b24udGV4dENvbnRlbnQgOiAnJzsKICAgICAgICBjb25zdCBuZXdDYXB0aW9uID0gcHJvbXB0KCdV bnRlcnRpdGVsIGJlYXJiZWl0ZW46JywgY3VycmVudCk7CiAgICAgICAgaWYgKG5ld0NhcHRpb24g PT09IG51bGwpIHJldHVybjsKCiAgICAgICAgaWYgKGZpZ2NhcHRpb24pIHsKICAgICAgICAgICAg aWYgKG5ld0NhcHRpb24pIHsgZmlnY2FwdGlvbi50ZXh0Q29udGVudCA9IG5ld0NhcHRpb247IH0K ICAgICAgICAgICAgZWxzZSB7IGZpZ2NhcHRpb24ucmVtb3ZlKCk7IH0KICAgICAgICB9IGVsc2Ug aWYgKG5ld0NhcHRpb24pIHsKICAgICAgICAgICAgY29uc3QgY2FwID0gZG9jdW1lbnQuY3JlYXRl RWxlbWVudCgnZmlnY2FwdGlvbicpOwogICAgICAgICAgICBjYXAudGV4dENvbnRlbnQgPSBuZXdD YXB0aW9uOwogICAgICAgICAgICB0aGlzLl9jb250ZXh0VGFyZ2V0LmFwcGVuZENoaWxkKGNhcCk7 CiAgICAgICAgfQoKICAgICAgICAvLyBVcGRhdGUgbWV0YWRhdGEKICAgICAgICBjb25zdCBtZWRp YUlkID0gdGhpcy5fY29udGV4dFRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWVkaWEtaWQnKTsK ICAgICAgICBpZiAobWVkaWFJZCAmJiB0aGlzLmN1cnJlbnREb2MpIHsKICAgICAgICAgICAgY29u c3QgbWVkaWEgPSAodGhpcy5jdXJyZW50RG9jLm1lZGlhcyB8fCBbXSkuZmluZChtID0+IG0ubWVk aWFJZCA9PT0gbWVkaWFJZCk7CiAgICAgICAgICAgIGlmIChtZWRpYSkgbWVkaWEuZGVzY3JpcHRp b24gPSBuZXdDYXB0aW9uOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5oaWRlQ29udGV4dE1lbnUo KTsKICAgIH0sCgogICAgY29udGV4dFJlbW92ZSgpIHsKICAgICAgICBpZiAoIXRoaXMuX2NvbnRl eHRUYXJnZXQpIHJldHVybjsKICAgICAgICBjb25zdCBtZWRpYUlkID0gdGhpcy5fY29udGV4dFRh cmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWVkaWEtaWQnKTsKICAgICAgICBpZiAobWVkaWFJZCAm JiB0aGlzLmN1cnJlbnREb2MgJiYgdGhpcy5jdXJyZW50RG9jLm1lZGlhcykgewogICAgICAgICAg ICBjb25zdCBpZHggPSB0aGlzLmN1cnJlbnREb2MubWVkaWFzLmZpbmRJbmRleChtID0+IG0ubWVk aWFJZCA9PT0gbWVkaWFJZCk7CiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgewogICAgICAgICAg ICAgICAgY29uc3QgbWVkaWEgPSB0aGlzLmN1cnJlbnREb2MubWVkaWFzW2lkeF07CiAgICAgICAg ICAgICAgICAvLyBEYXRlaSBhdWYgZGVtIFNlcnZlciBsb2VzY2hlbgogICAgICAgICAgICAgICAg aWYgKG1lZGlhLnVybCAmJiBEcml2ZUZTLm1vZGUgPT09ICdzZXJ2ZXInKSB7CiAgICAgICAgICAg ICAgICAgICAgZmV0Y2goJy9hcGkvZGVsZXRlJywgewogICAgICAgICAgICAgICAgICAgICAgICBt ZXRob2Q6ICdQT1NUJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVu dC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnIH0sCiAgICAgICAgICAg ICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcGF0aDogbWVkaWEudXJsIH0pCiAg ICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge30pOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RG9jLm1lZGlhcy5zcGxpY2UoaWR4LCAxKTsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLl9jb250ZXh0VGFyZ2V0LnJlbW92ZSgp OwogICAgICAgIHRoaXMuX3JlbmRlck1lZGlhTGlzdCgpOwogICAgICAgIHRoaXMuaGlkZUNvbnRl eHRNZW51KCk7CiAgICAgICAgc2hvd1RvYXN0KCdNZWRpdW0gZW50ZmVybnQnLCAnc3VjY2Vzcycp OwogICAgfSwKCiAgICAvLyAtLS0gTWVkaWVuLVZlcndhbHR1bmcgaW0gRWRpdG9yIC0tLQogICAg dG9nZ2xlTWVkaWFQYW5lbCgpIHsKICAgICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmdldEVs ZW1lbnRCeUlkKCdlZGl0b3JNZWRpYVBhbmVsJyk7CiAgICAgICAgaWYgKHBhbmVsLnN0eWxlLmRp c3BsYXkgPT09ICdub25lJykgewogICAgICAgICAgICB0aGlzLl9yZW5kZXJNZWRpYUxpc3QoKTsK ICAgICAgICAgICAgcGFuZWwuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgIH0gZWxzZSB7CiAg ICAgICAgICAgIHBhbmVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgfQogICAgfSwK CiAgICBfcmVuZGVyTWVkaWFMaXN0KCkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3JNZWRpYUxpc3QnKTsKICAgICAgICBjb25zdCBwYW5l bCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3JNZWRpYVBhbmVsJyk7CiAgICAgICAg aWYgKCFjb250YWluZXIgfHwgIXRoaXMuY3VycmVudERvYykgcmV0dXJuOwogICAgICAgIGNvbnN0 IG1lZGlhcyA9IHRoaXMuY3VycmVudERvYy5tZWRpYXMgfHwgW107CgogICAgICAgIGlmIChtZWRp YXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPGRp diBzdHlsZT0iZm9udC1zaXplOjEycHg7IGNvbG9yOnZhcigtLXRleHQtbXV0ZWQpOyBwYWRkaW5n OjhweCAwOyB0ZXh0LWFsaWduOmNlbnRlcjsgbGluZS1oZWlnaHQ6MS44OyI+JyArCiAgICAgICAg ICAgICAgICAnTm9jaCBrZWluZSBEYXRlaWVuIGhvY2hnZWxhZGVuLjxicj4nICsKICAgICAgICAg ICAgICAgICc8YnV0dG9uIG9uY2xpY2s9IkRyaXZlRWRpdG9yLnNob3dVcGxvYWRNb2RhbCgpIiBz dHlsZT0ibWFyZ2luLXRvcDo0cHg7cGFkZGluZzo0cHggMTRweDtib3JkZXI6MXB4IGRhc2hlZCB2 YXIoLS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6NHB4O2JhY2tncm91bmQ6bm9uZTtjdXJz b3I6cG9pbnRlcjtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpOyI+RGF0 ZWllbiBob2NobGFkZW48L2J1dHRvbj4nICsKICAgICAgICAgICAgJzwvZGl2Pic7CiAgICAgICAg ICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBtZWRp YXMubWFwKChtLCBpKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSAobS50eXBlIHx8ICdm aWxlJykudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBEcml2ZVBvcnRh bC5lc2NhcGVIVE1MKG0udGl0bGUgfHwgbS51cmwuc3BsaXQoJy8nKS5wb3AoKSk7CiAgICAgICAg ICAgIGNvbnN0IGRlc2MgPSBtLmRlc2NyaXB0aW9uID8gRHJpdmVQb3J0YWwuZXNjYXBlSFRNTCht LmRlc2NyaXB0aW9uKSA6ICcnOwogICAgICAgICAgICBjb25zdCBtb2RlID0gbS5kaXNwbGF5TW9k ZSA9PT0gJ2lubGluZScgPyAnSW5saW5lJyA6IG0uZGlzcGxheU1vZGUgPT09ICdwZGYtaWZyYW1l JyA/ICdFaW5nZWJldHRldCcgOiAnQW5oYW5nJzsKICAgICAgICAgICAgcmV0dXJuICc8ZGl2IHN0 eWxlPSJkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjhweDsgcGFkZGluZzo0 cHggMDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgZm9udC1z aXplOjEycHg7Ij4nICsKICAgICAgICAgICAgICAgICc8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6 NjAwOyBjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpOyBtaW4td2lkdGg6NDBweDsiPicgKyB0eXBl ICsgJzwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICc8c3BhbiBzdHlsZT0iZmxleDoxOyBvdmVy ZmxvdzpoaWRkZW47IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7IHdoaXRlLXNwYWNlOm5vd3JhcDsi IHRpdGxlPSInICsgRHJpdmVQb3J0YWwuZXNjYXBlQXR0cihtLnVybCkgKyAnIj4nICsgdGl0bGUg KyAnPC9zcGFuPicgKwogICAgICAgICAgICAgICAgJzxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS10 ZXh0LW11dGVkKTsgZm9udC1zaXplOjEwcHg7Ij4nICsgbW9kZSArICc8L3NwYW4+JyArCiAgICAg ICAgICAgICAgICAnPGJ1dHRvbiBvbmNsaWNrPSJEcml2ZUVkaXRvci5lZGl0TWVkaWEoJyArIGkg KyAnKSIgc3R5bGU9ImJhY2tncm91bmQ6bm9uZTsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3Jk ZXItY29sb3IpOyBib3JkZXItcmFkaXVzOjNweDsgcGFkZGluZzoxcHggNnB4OyBmb250LXNpemU6 MTFweDsgY3Vyc29yOnBvaW50ZXI7IGNvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Ij5CZWFyYmVp dGVuPC9idXR0b24+JyArCiAgICAgICAgICAgICAgICAnPGJ1dHRvbiBvbmNsaWNrPSJEcml2ZUVk aXRvci5yZW1vdmVNZWRpYSgnICsgaSArICcpIiBzdHlsZT0iYmFja2dyb3VuZDpub25lOyBib3Jk ZXI6MXB4IHNvbGlkICNkYzM1NDU7IGJvcmRlci1yYWRpdXM6M3B4OyBwYWRkaW5nOjFweCA2cHg7 IGZvbnQtc2l6ZToxMXB4OyBjdXJzb3I6cG9pbnRlcjsgY29sb3I6I2RjMzU0NTsiPkzDtnNjaGVu PC9idXR0b24+JyArCiAgICAgICAgICAgICc8L2Rpdj4nOwogICAgICAgIH0pLmpvaW4oJycpOwog ICAgfSwKCiAgICBlZGl0TWVkaWEoaW5kZXgpIHsKICAgICAgICBpZiAoIXRoaXMuY3VycmVudERv YyB8fCAhdGhpcy5jdXJyZW50RG9jLm1lZGlhcyB8fCAhdGhpcy5jdXJyZW50RG9jLm1lZGlhc1tp bmRleF0pIHJldHVybjsKICAgICAgICBjb25zdCBtZWRpYSA9IHRoaXMuY3VycmVudERvYy5tZWRp YXNbaW5kZXhdOwoKICAgICAgICBjb25zdCBuZXdUaXRsZSA9IHByb21wdCgnVGl0ZWw6JywgbWVk aWEudGl0bGUgfHwgJycpOwogICAgICAgIGlmIChuZXdUaXRsZSA9PT0gbnVsbCkgcmV0dXJuOwog ICAgICAgIG1lZGlhLnRpdGxlID0gbmV3VGl0bGU7CgogICAgICAgIGNvbnN0IG5ld0Rlc2MgPSBw cm9tcHQoJ0Jlc2NocmVpYnVuZzonLCBtZWRpYS5kZXNjcmlwdGlvbiB8fCAnJyk7CiAgICAgICAg aWYgKG5ld0Rlc2MgPT09IG51bGwpIHJldHVybjsKICAgICAgICBtZWRpYS5kZXNjcmlwdGlvbiA9 IG5ld0Rlc2M7CgogICAgICAgIC8vIElubGluZS1NZWRpZW4gaW0gRWRpdG9yIGFrdHVhbGlzaWVy ZW4gKGZpZ2NhcHRpb24pCiAgICAgICAgaWYgKG1lZGlhLm1lZGlhSWQpIHsKICAgICAgICAgICAg Y29uc3QgZmlndXJlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2VkaXRvcklucHV0IFtkYXRh LW1lZGlhLWlkPSInICsgbWVkaWEubWVkaWFJZCArICciXScpOwogICAgICAgICAgICBpZiAoZmln dXJlKSB7CiAgICAgICAgICAgICAgICBsZXQgY2FwID0gZmlndXJlLnF1ZXJ5U2VsZWN0b3IoJ2Zp Z2NhcHRpb24nKTsKICAgICAgICAgICAgICAgIGlmIChuZXdEZXNjKSB7CiAgICAgICAgICAgICAg ICAgICAgaWYgKCFjYXApIHsgY2FwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmlnY2FwdGlv bicpOyBmaWd1cmUuYXBwZW5kQ2hpbGQoY2FwKTsgfQogICAgICAgICAgICAgICAgICAgIGNhcC50 ZXh0Q29udGVudCA9IG5ld0Rlc2M7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNhcCkgewog ICAgICAgICAgICAgICAgICAgIGNhcC5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhpcy5fcmVuZGVyTWVkaWFMaXN0KCk7CiAgICAg ICAgc2hvd1RvYXN0KCdBbmhhbmcgYWt0dWFsaXNpZXJ0JywgJ3N1Y2Nlc3MnKTsKICAgIH0sCgog ICAgcmVtb3ZlTWVkaWEoaW5kZXgpIHsKICAgICAgICBpZiAoIXRoaXMuY3VycmVudERvYyB8fCAh dGhpcy5jdXJyZW50RG9jLm1lZGlhcyB8fCAhdGhpcy5jdXJyZW50RG9jLm1lZGlhc1tpbmRleF0p IHJldHVybjsKICAgICAgICBjb25zdCBtZWRpYSA9IHRoaXMuY3VycmVudERvYy5tZWRpYXNbaW5k ZXhdOwogICAgICAgIGNvbnN0IG5hbWUgPSBtZWRpYS50aXRsZSB8fCBtZWRpYS51cmwuc3BsaXQo Jy8nKS5wb3AoKTsKCiAgICAgICAgLy8gQmVzdGFldGlndW5nc2RpYWxvZyBhbHMgTW9kYWwgKHN0 YXR0IGJyb3dzZXItbmF0aXZlbSBjb25maXJtKQogICAgICAgIHZhciBvdmVybGF5ID0gZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgb3ZlcmxheS5zdHlsZS5jc3NUZXh0ID0g J3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxMTAwMDtiYWNrZ3JvdW5kOnJnYmEoMCww LDAsMC41KTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpj ZW50ZXI7JzsKICAgICAgICB2YXIgbW9kYWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn KTsKICAgICAgICBtb2RhbC5zdHlsZS5jc3NUZXh0ID0gJ2JhY2tncm91bmQ6dmFyKC0tYmctY2Fy ZCwjZmZmKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoyNHB4O21heC13aWR0aDo0MDBweDt3 aWR0aDo5MCU7Ym94LXNoYWRvdzowIDhweCAzMnB4IHJnYmEoMCwwLDAsMC4yNSk7dGV4dC1hbGln bjpjZW50ZXI7JzsKICAgICAgICBtb2RhbC5pbm5lckhUTUwgPQogICAgICAgICAgICAnPGRpdiBz dHlsZT0iZm9udC1zaXplOjMycHg7bWFyZ2luLWJvdHRvbTo4cHg7Ij4mIzEyODQ2NTs8L2Rpdj4n ICsKICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtaGVhZGluZyk7Zm9u dC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206OHB4OyI+QW5oYW5nIGVu dGZlcm5lbj88L2Rpdj4nICsKICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImNvbG9yOnZhcigtLXRl eHQtcHJpbWFyeSk7Zm9udC1zaXplOjEzcHg7bWFyZ2luLWJvdHRvbToxOHB4OyI+PHN0cm9uZz4n ICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChuYW1lKSArICc8L3N0cm9uZz4gd2lyZCBhdXMgZGVt IEFydGlrZWwgdW5kIHZvbSBTZXJ2ZXIgZ2Vsb2VzY2h0LjwvZGl2PicgKwogICAgICAgICAgICAn PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjsi PicgKwogICAgICAgICAgICAgICAgJzxidXR0b24gaWQ9InJtTWVkaWFDYW5jZWwiIHN0eWxlPSJw YWRkaW5nOjhweCAyMHB4O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0t Ym9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQpO2NvbG9yOnZhcigtLXRleHQt cHJpbWFyeSk7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEzcHg7Ij5BYmJyZWNoZW48L2J1dHRv bj4nICsKICAgICAgICAgICAgICAgICc8YnV0dG9uIGlkPSJybU1lZGlhQ29uZmlybSIgc3R5bGU9 InBhZGRpbmc6OHB4IDIwcHg7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyOm5vbmU7YmFja2dyb3Vu ZDojZGMzNTQ1O2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQt c2l6ZToxM3B4OyI+RW50ZmVybmVuPC9idXR0b24+JyArCiAgICAgICAgICAgICc8L2Rpdj4nOwog ICAgICAgIG92ZXJsYXkuYXBwZW5kQ2hpbGQobW9kYWwpOwogICAgICAgIGRvY3VtZW50LmJvZHku YXBwZW5kQ2hpbGQob3ZlcmxheSk7CgogICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm1NZWRpYUNhbmNlbCcpLm9uY2xpY2sgPSBmdW5jdGlv bigpIHsgb3ZlcmxheS5yZW1vdmUoKTsgfTsKICAgICAgICBvdmVybGF5Lm9uY2xpY2sgPSBmdW5j dGlvbihlKSB7IGlmIChlLnRhcmdldCA9PT0gb3ZlcmxheSkgb3ZlcmxheS5yZW1vdmUoKTsgfTsK ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm1NZWRpYUNvbmZpcm0nKS5vbmNsaWNr ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIG92ZXJsYXkucmVtb3ZlKCk7CgogICAgICAgICAg ICAvLyBJbmxpbmUtRWxlbWVudCBhdXMgRWRpdG9yIGVudGZlcm5lbgogICAgICAgICAgICBpZiAo bWVkaWEubWVkaWFJZCkgewogICAgICAgICAgICAgICAgdmFyIGZpZ3VyZSA9IGRvY3VtZW50LnF1 ZXJ5U2VsZWN0b3IoJyNlZGl0b3JJbnB1dCBbZGF0YS1tZWRpYS1pZD0iJyArIG1lZGlhLm1lZGlh SWQgKyAnIl0nKTsKICAgICAgICAgICAgICAgIGlmIChmaWd1cmUpIGZpZ3VyZS5yZW1vdmUoKTsK ICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gRGF0ZWkgYXVmIGRlbSBTZXJ2ZXIgbG9lc2No ZW4KICAgICAgICAgICAgaWYgKG1lZGlhLnVybCAmJiBEcml2ZUZTLm1vZGUgPT09ICdzZXJ2ZXIn KSB7CiAgICAgICAgICAgICAgICBmZXRjaCgnL2FwaS9kZWxldGUnLCB7CiAgICAgICAgICAgICAg ICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29u dGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnIH0sCiAgICAgICAg ICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBwYXRoOiBtZWRpYS51cmwgfSkKICAg ICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCkge30pOwogICAgICAgICAgICB9CgogICAg ICAgICAgICBzZWxmLmN1cnJlbnREb2MubWVkaWFzLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAg ICAgIHNlbGYuX3JlbmRlck1lZGlhTGlzdCgpOwogICAgICAgICAgICBzaG93VG9hc3QoJyInICsg bmFtZSArICciIGVudGZlcm50JywgJ3N1Y2Nlc3MnKTsKICAgICAgICB9OwogICAgfSwKCiAgICAv LyAtLS0gUGVzc2ltaXN0aWMgTG9ja2luZyAtLS0KICAgIGFzeW5jIGFjcXVpcmVMb2NrKGRvY0lk KSB7CiAgICAgICAgaWYgKERyaXZlRlMubW9kZSA9PT0gJ3NlcnZlcicpIHsKICAgICAgICAgICAg dHJ5IHsKICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL2xvY2sn LCB7CiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICAg ICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9 dXRmLTgnIH0sCiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBkb2NJ ZDogZG9jSWQgfSkKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaWYgKHJlcy5v aykgcmV0dXJuIHsgb2s6IHRydWUgfTsKICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2Fp dCByZXMuanNvbigpOwogICAgICAgICAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBieTogZGF0 YS5ieSB8fCAnVW5iZWthbm50JywgbWludXRlczogZGF0YS5taW51dGVzIHx8ICc/JyB9OwogICAg ICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgICAgIC8vIEtlaW4gU2VydmVyIG9kZXIgRmVo bGVyOiBMb2NrIHVlYmVyc3ByaW5nZW4KICAgICAgICAgICAgICAgIHJldHVybiB7IG9rOiB0cnVl IH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gRmlsZXN5c3RlbS1Nb2R1czog S2VpbiBMb2NraW5nIChTaW5nbGUtVXNlci1TemVuYXJpbykKICAgICAgICByZXR1cm4geyBvazog dHJ1ZSB9OwogICAgfSwKCiAgICBhc3luYyByZWxlYXNlTG9jayhkb2NJZCkgewogICAgICAgIGlm IChEcml2ZUZTLm1vZGUgPT09ICdzZXJ2ZXInKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAg ICAgICAgICBhd2FpdCBmZXRjaCgnL2FwaS91bmxvY2snLCB7CiAgICAgICAgICAgICAgICAgICAg bWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1U eXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnIH0sCiAgICAgICAgICAgICAg ICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBkb2NJZDogZG9jSWQgfSkKICAgICAgICAgICAg ICAgIH0pOwogICAgICAgICAgICB9IGNhdGNoIHt9CiAgICAgICAgfQogICAgfSwKCiAgICAvLyAt LS0gQ29udHJpYnV0aW9uIFR5cGUgRGlhbG9nIC0tLQogICAgc2hvd0NvbnRyaWJEaWFsb2coKSB7 CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyaWJEaWFsb2cnKS5jbGFzc0xp c3QuYWRkKCdhY3RpdmUnKTsKICAgIH0sCgogICAgY2xvc2VDb250cmliRGlhbG9nKCkgewogICAg ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cmliRGlhbG9nJykuY2xhc3NMaXN0LnJl bW92ZSgnYWN0aXZlJyk7CiAgICB9LAoKICAgIHNldENvbnRyaWJUeXBlKHR5cGUpIHsKICAgICAg ICB0aGlzLl9wZW5kaW5nQ29udHJpYlR5cGUgPSB0eXBlOwogICAgICAgIHRoaXMuY2xvc2VDb250 cmliRGlhbG9nKCk7CiAgICAgICAgLy8gU2F2ZS1Qcm96ZXNzIGZvcnRzZXR6ZW4gKGNsb3NlQWZ0 ZXIgYXVzIHZvcmhlcmlnZW0gQXVmcnVmIHVlYmVybmVobWVuKQogICAgICAgIHRoaXMuc2F2ZSh0 aGlzLl9wZW5kaW5nQ2xvc2VBZnRlcik7CiAgICAgICAgdGhpcy5fcGVuZGluZ0Nsb3NlQWZ0ZXIg PSBmYWxzZTsKICAgIH0KfTsKCi8vID09PT09PT09PT09PT09PT09PT09PSBNRURJQSBNT0RBTCA9 PT09PT09PT09PT09PT09PT09PT0KCi8vID09PT09PT09PT09PT09PT09PT09PSBVTklWRVJTQUwg TUVESUEgTU9EQUwgPT09PT09PT09PT09PT09PT09PT09CgpmdW5jdGlvbiBvcGVuTWVkaWFNb2Rh bCh1cmwsIHR5cGUsIHRpdGxlKSB7CiAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1l bnRCeUlkKCdtZWRpYU1vZGFsJyk7CiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgnbWVkaWFNb2RhbENvbnRhaW5lcicpOwogICAgY29uc3Qgc2FmZVVybCA9IERy aXZlUG9ydGFsLmVzY2FwZUF0dHIodXJsKTsKICAgIGNvbnN0IHNhZmVUaXRsZSA9IERyaXZlUG9y dGFsLmVzY2FwZUhUTUwodGl0bGUgfHwgdXJsLnNwbGl0KCcvJykucG9wKCkpOwogICAgbGV0IGNv bnRlbnQgPSAnJzsKICAgIGxldCB0b29sYmFyID0gJyc7CgogICAgc3dpdGNoICh0eXBlKSB7CiAg ICAgICAgY2FzZSAnaW1hZ2UnOgogICAgICAgICAgICBjb250ZW50ID0gJzxpbWcgc3JjPSInICsg c2FmZVVybCArICciIGFsdD0iJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIodGl0bGUgfHwgJycp ICsgJyIgb25jbGljaz0idGhpcy5jbGFzc0xpc3QudG9nZ2xlKFwnem9vbWVkXCcpIj4nOwogICAg ICAgICAgICB0b29sYmFyID0gJzxidXR0b24gb25jbGljaz0iZG9jdW1lbnQucXVlcnlTZWxlY3Rv cihcJyNtZWRpYU1vZGFsQ29udGFpbmVyIGltZ1wnKS5jbGFzc0xpc3QudG9nZ2xlKFwnem9vbWVk XCcpIj5ab29tPC9idXR0b24+JyArCiAgICAgICAgICAgICAgICAgICAgICAgJzxhIGhyZWY9Iicg KyBzYWZlVXJsICsgJyIgZG93bmxvYWQ+SGVydW50ZXJsYWRlbjwvYT4nICsKICAgICAgICAgICAg ICAgICAgICAgICAnPGJ1dHRvbiBvbmNsaWNrPSJ3aW5kb3cub3BlbihcJycgKyBzYWZlVXJsICsg J1wnLFwnX2JsYW5rXCcpIj5JbiBuZXVlbSBUYWI8L2J1dHRvbj4nOwogICAgICAgICAgICBicmVh azsKICAgICAgICBjYXNlICdwZGYnOgogICAgICAgICAgICAvLyBQREY6IE1heGltYWxlIEJyZWl0 ZSB1bmQgSG9laGUgZnVlciBndXRlIExlc2JhcmtlaXQKICAgICAgICAgICAgdmFyIG1jID0gZG9j dW1lbnQucXVlcnlTZWxlY3RvcignLm1lZGlhLW1vZGFsLWNvbnRlbnQnKTsKICAgICAgICAgICAg bWMuc3R5bGUubWF4V2lkdGggPSAnOTV2dyc7CiAgICAgICAgICAgIG1jLnN0eWxlLndpZHRoID0g JzEyMDBweCc7CiAgICAgICAgICAgIG1jLnN0eWxlLm1heEhlaWdodCA9ICc5NXZoJzsKICAgICAg ICAgICAgbWMuc3R5bGUucGFkZGluZyA9ICcxMnB4JzsKICAgICAgICAgICAgY29udGVudCA9ICc8 aWZyYW1lIHNyYz0iJyArIHNhZmVVcmwgKyAnIiBzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6ODJ2 aDtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjRweDtiYWNrZ3JvdW5kOndoaXRlOyI+PC9pZnJh bWU+JzsKICAgICAgICAgICAgdG9vbGJhciA9ICc8YSBocmVmPSInICsgc2FmZVVybCArICciIGRv d25sb2FkPkhlcnVudGVybGFkZW48L2E+JyArCiAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0 b24gb25jbGljaz0id2luZG93Lm9wZW4oXCcnICsgc2FmZVVybCArICdcJyxcJ19ibGFua1wnKSI+ SW4gbmV1ZW0gVGFiPC9idXR0b24+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAn dmlkZW8nOgogICAgICAgICAgICBjb250ZW50ID0gJzx2aWRlbyBjb250cm9scyBhdXRvcGxheSBz dHlsZT0ibWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDo3MHZoO2JvcmRlci1yYWRpdXM6OHB4OyI+ JyArCiAgICAgICAgICAgICAgICAgICAgICAgJzxzb3VyY2Ugc3JjPSInICsgc2FmZVVybCArICci PjwvdmlkZW8+JzsKICAgICAgICAgICAgdG9vbGJhciA9ICc8YSBocmVmPSInICsgc2FmZVVybCAr ICciIGRvd25sb2FkPkhlcnVudGVybGFkZW48L2E+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgY2FzZSAnYXVkaW8nOgogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWVk aWEtbW9kYWwtY29udGVudCcpLnN0eWxlLm1heFdpZHRoID0gJzYwMHB4JzsKICAgICAgICAgICAg Y29udGVudCA9ICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjE2cHggMDsi PicgKwogICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6NDhweDtt YXJnaW4tYm90dG9tOjEycHg7Ij4mIzEyNzkyNTs8L2Rpdj48L2Rpdj4nICsKICAgICAgICAgICAg ICAgICAgICAgICAnPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MzBw eDtwYWRkaW5nOjZweCAxMHB4O3dpZHRoOjEwMCU7Ij4nICsKICAgICAgICAgICAgICAgICAgICAg ICAnPGF1ZGlvIGNvbnRyb2xzIGF1dG9wbGF5IHNyYz0iJyArIHNhZmVVcmwgKyAnIiBzdHlsZT0i ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDo0MHB4O2ZpbHRlcjpub25lOyI+PC9hdWRp bz48L2Rpdj4nOwogICAgICAgICAgICB0b29sYmFyID0gJzxhIGhyZWY9IicgKyBzYWZlVXJsICsg JyIgZG93bmxvYWQ+SGVydW50ZXJsYWRlbjwvYT4nOwogICAgICAgICAgICBicmVhazsKICAgICAg ICBjYXNlICdkb2N4JzogY2FzZSAneGxzeCc6IGNhc2UgJ3BwdHgnOgogICAgICAgICAgICB2YXIg dHlwZUxhYmVsID0gdHlwZS50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgICBjb250ZW50ID0gJzxk aXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MzBweCAwOyI+JyArCiAgICAgICAg ICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJkcml2ZS1maWxlLWljb24gJyArIHR5cGUgKyAn IiBzdHlsZT0id2lkdGg6ODBweDtoZWlnaHQ6ODBweDtmb250LXNpemU6MjRweDttYXJnaW46MCBh dXRvIDE1cHg7Ij4nICsgdHlwZUxhYmVsICsgJzwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICAg ICAgICAnPHAgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtc2Vjb25kYXJ5KTttYXJnaW4tdG9wOjEw cHg7Ij5EaWVzZXMgRG9rdW1lbnQga2FubiBudXIgbG9rYWwgZ2VvZWZmbmV0IHdlcmRlbi48L3A+ PC9kaXY+JzsKICAgICAgICAgICAgdG9vbGJhciA9ICc8YSBocmVmPSInICsgc2FmZVVybCArICci IGRvd25sb2FkPkhlcnVudGVybGFkZW48L2E+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ZGVmYXVsdDoKICAgICAgICAgICAgY29udGVudCA9ICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNl bnRlcjtwYWRkaW5nOjMwcHggMDtmb250LXNpemU6NjRweDsiPiYjMTI4MTk2OzwvZGl2Pic7CiAg ICAgICAgICAgIHRvb2xiYXIgPSAnPGEgaHJlZj0iJyArIHNhZmVVcmwgKyAnIiBkb3dubG9hZD5I ZXJ1bnRlcmxhZGVuPC9hPic7CiAgICB9CgogICAgY29udGFpbmVyLmlubmVySFRNTCA9CiAgICAg ICAgJzxkaXYgY2xhc3M9Im1lZGlhLW1vZGFsLXRpdGxlIj4nICsgc2FmZVRpdGxlICsgJzwvZGl2 PicgKwogICAgICAgIGNvbnRlbnQgKwogICAgICAgICc8ZGl2IGNsYXNzPSJtZWRpYS1tb2RhbC10 b29sYmFyIj4nICsgdG9vbGJhciArICc8L2Rpdj4nOwoKICAgIG1vZGFsLnN0eWxlLmRpc3BsYXkg PSAnYmxvY2snOwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG1lZGlh TW9kYWxLZXlIYW5kbGVyKTsKfQoKZnVuY3Rpb24gY2xvc2VNZWRpYU1vZGFsKCkgewogICAgY29u c3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVkaWFNb2RhbCcpOwogICAgbW9k YWwuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIC8vIE1vZGFsLVN0eWxlcyB6dXJ1ZWNrc2V0 emVuIChQREYvQXVkaW8gc2V0emVuIGVpZ2VuZSBHcm9lc3NlbikKICAgIHZhciBtYyA9IG1vZGFs LnF1ZXJ5U2VsZWN0b3IoJy5tZWRpYS1tb2RhbC1jb250ZW50Jyk7CiAgICBpZiAobWMpIHsgbWMu c3R5bGUubWF4V2lkdGggPSAnJzsgbWMuc3R5bGUud2lkdGggPSAnJzsgbWMuc3R5bGUubWF4SGVp Z2h0ID0gJyc7IG1jLnN0eWxlLnBhZGRpbmcgPSAnJzsgfQogICAgLy8gQXVkaW8vVmlkZW8gc3Rv cHBlbgogICAgbW9kYWwucXVlcnlTZWxlY3RvckFsbCgndmlkZW8sIGF1ZGlvJykuZm9yRWFjaChl bCA9PiB7IGVsLnBhdXNlKCk7IGVsLnNyYyA9ICcnOyB9KTsKICAgIGRvY3VtZW50LnJlbW92ZUV2 ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBtZWRpYU1vZGFsS2V5SGFuZGxlcik7Cn0KCmZ1bmN0aW9u IG1lZGlhTW9kYWxLZXlIYW5kbGVyKGUpIHsKICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGNs b3NlTWVkaWFNb2RhbCgpOwp9CgovLyA9PT09PT09PT09PT09PT09PT09PT0gR09WRVJOQU5DRSA9 PT09PT09PT09PT09PT09PT09PT0KCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIE1vZHVsOiBE cml2ZUdvdmVybmFuY2UgLSBSb2xsZW4sIEZyZWlnYWJlLVdvcmtmbG93LCBBZG1pbi1QYW5lbAov LyBadXN0YWVuZGlnIGZ1ZXI6IExhZGVuIGRlciBHb3Zlcm5hbmNlLURhdGVuLCBCZXJlY2h0aWd1 bmdzcHJ1ZWZ1bmcsIFJldmlldy1VSSwgQXVkaXQtVHJhaWwKLy8gU2ljaGVyaGVpdDogQ2xpZW50 LXNlaXRpZ2UgQmVyZWNodGlndW5nc3BydWVmdW5nZW4gKGNhbkFwcHJvdmUsIGNhblNlZURvY3Vt ZW50LCBpc1N1cGVyVXNlcikKLy8gICAgICAgICAgICAgc3RldWVybiBudXIgZGllIFVJLURhcnN0 ZWxsdW5nLiBEaWUgdGF0c2FlY2hsaWNoZSBBdXRvcmlzaWVydW5nIGVyZm9sZ3Qgc2VydmVyc2Vp dGlnCi8vICAgICAgICAgICAgIGluIHNlcnZlci5wczEgLyBzZXJ2ZXIucHkgKFRlc3QtU3VwZXJV c2VyLCBUZXN0LVJldmlld2VyKSBiZWkgamVkZW0gU2NocmVpYnp1Z3JpZmYuCi8vICAgICAgICAg ICAgIGdvdmVybmFuY2UuanNvbiBpc3QgaW0gU2VydmVyLU1vZHVzIEFFUy0yNTYtdmVyc2NobHVl c3NlbHQgKHNpZWhlIHNlcnZlci5wczEpLgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpjb25zdCBE cml2ZUdvdmVybmFuY2UgPSB7CiAgICBkYXRhOiBudWxsLAogICAgY3VycmVudFVzZXI6IG51bGws CiAgICBjdXJyZW50RG9tYWluOiBudWxsLAogICAgX2lzU3VwZXJVc2VyOiBmYWxzZSwKICAgIF9y ZXZpZXdEaWFsb2dDYWxsYmFjazogbnVsbCwKICAgIF9yZXZpZXdEaWFsb2dBY3Rpb246IG51bGws CiAgICBfZWRpdGluZ1Jldmlld2VySW5kZXg6IC0xLAoKICAgIGFzeW5jIGxvYWQoKSB7CiAgICAg ICAgdHJ5IHsKICAgICAgICAgICAgaWYgKERyaXZlRlMubW9kZSA9PT0gJ3NlcnZlcicpIHsKICAg ICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL2dvdmVybmFuY2UnKTsK ICAgICAgICAgICAgICAgIGlmIChyZXMub2spIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBy ZXN1bHQgPSBhd2FpdCByZXMuanNvbigpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9 IHJlc3VsdC5nb3Zlcm5hbmNlOwogICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIg PSByZXN1bHQuY3VycmVudFVzZXI7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RG9t YWluID0gcmVzdWx0LmN1cnJlbnREb21haW47CiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNT dXBlclVzZXIgPSByZXN1bHQuaXNTdXBlclVzZXI7CiAgICAgICAgICAgICAgICAgICAgdGhpcy51 cGRhdGVVSSgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEhlbHBDb250ZW50KCk7CiAg ICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkU3RhcnRzZWl0ZSgpOwogICAgICAgICAg ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAg IH0gY2F0Y2gge30KCiAgICAgICAgLy8gU3RhdGlzY2hlciBNb2R1czogR292ZXJuYW5jZSBhdXMg ZWluZ2ViZXR0ZXRlbiBEYXRlbiBsYWRlbgogICAgICAgIGlmIChEcml2ZUZTLm1vZGUgPT09ICdz dGF0aWMnKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgRFJJVkVfU1RBVElDX0lOREVYICE9PSAn dW5kZWZpbmVkJyAmJiBEUklWRV9TVEFUSUNfSU5ERVggJiYgRFJJVkVfU1RBVElDX0lOREVYLmdv dmVybmFuY2UpIHsKICAgICAgICAgICAgICAgIC8vIExlc2JhcmUgR292ZXJuYW5jZS1EYXRlbiBh dXMgaW5kZXguanMgKFNldHRpbmdzICsgUmV2aWV3ZXItSW5mbykKICAgICAgICAgICAgICAgIHRo aXMuZGF0YSA9IERSSVZFX1NUQVRJQ19JTkRFWC5nb3Zlcm5hbmNlOwogICAgICAgICAgICB9CiAg ICAgICAgfQoKICAgICAgICAvLyBGaWxlc3lzdGVtLU1vZHVzOiBnb3Zlcm5hbmNlLmpzb24gYXVz IEhhbmRsZSBsYWRlbgogICAgICAgIGlmIChEcml2ZUZTLm1vZGUgPT09ICdmaWxlc3lzdGVtJyAm JiBEcml2ZUZTLl9kYXRhSGFuZGxlKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAg ICBjb25zdCBmaCA9IGF3YWl0IERyaXZlRlMuX2RhdGFIYW5kbGUuZ2V0RmlsZUhhbmRsZSgnZ292 ZXJuYW5jZS5qc29uJyk7CiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZmguZ2V0 RmlsZSgpOwogICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZShhd2FpdCBmaWxl LnRleHQoKSk7CiAgICAgICAgICAgIH0gY2F0Y2gge30KICAgICAgICB9CgogICAgICAgIHRoaXMu Y3VycmVudFVzZXIgPSBEcml2ZUZTLmVudmlyb24gPyBEcml2ZUZTLmVudmlyb24udXNlcm5hbWUg OiBudWxsOwogICAgICAgIHRoaXMuY3VycmVudERvbWFpbiA9IERyaXZlRlMuZW52aXJvbiA/IChE cml2ZUZTLmVudmlyb24udXNlcmRvbWFpbiB8fCAnKicpIDogJyonOwogICAgICAgIHRoaXMuX2lz U3VwZXJVc2VyID0gdGhpcy5fY2hlY2tTdXBlclVzZXIoKTsKICAgICAgICB0aGlzLnVwZGF0ZVVJ KCk7CiAgICAgICAgdGhpcy5sb2FkSGVscENvbnRlbnQoKTsKICAgICAgICBhd2FpdCB0aGlzLmxv YWRTdGFydHNlaXRlKCk7CiAgICB9LAoKICAgIF9jaGVja1N1cGVyVXNlcigpIHsKICAgICAgICBp ZiAoIXRoaXMuZGF0YSB8fCAhdGhpcy5kYXRhLnN1cGVyVXNlcnMpIHJldHVybiB0cnVlOyAvLyBL ZWluIEdvdmVybmFuY2UgPSBhbGxlcyBlcmxhdWJ0CiAgICAgICAgY29uc3QgdXNlciA9ICh0aGlz LmN1cnJlbnRVc2VyIHx8ICcnKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGNvbnN0IGRvbWFpbiA9 ICh0aGlzLmN1cnJlbnREb21haW4gfHwgJycpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgcmV0dXJu IHRoaXMuZGF0YS5zdXBlclVzZXJzLnNvbWUoc3UgPT4KICAgICAgICAgICAgc3UudXNlcm5hbWUu dG9Mb3dlckNhc2UoKSA9PT0gdXNlciAmJiAoc3UuZG9tYWluID09PSAnKicgfHwgc3UuZG9tYWlu LnRvTG93ZXJDYXNlKCkgPT09IGRvbWFpbikKICAgICAgICApOwogICAgfSwKCiAgICBpc1N1cGVy VXNlcigpIHsgcmV0dXJuIHRoaXMuX2lzU3VwZXJVc2VyOyB9LAoKICAgIGlzRmFjaGF1ZnNpY2h0 KCkgewogICAgICAgIGlmICghdGhpcy5kYXRhIHx8ICF0aGlzLmRhdGEuZmFjaGF1ZnNpY2h0KSBy ZXR1cm4gZmFsc2U7CiAgICAgICAgdmFyIHVzZXIgPSAodGhpcy5jdXJyZW50VXNlciB8fCAnJyku dG9Mb3dlckNhc2UoKTsKICAgICAgICB2YXIgZG9tYWluID0gKHRoaXMuY3VycmVudERvbWFpbiB8 fCAnJykudG9Mb3dlckNhc2UoKTsKICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmZhY2hhdWZzaWNo dC5zb21lKGZ1bmN0aW9uKGZhKSB7CiAgICAgICAgICAgIHJldHVybiBmYS51c2VybmFtZS50b0xv d2VyQ2FzZSgpID09PSB1c2VyICYmIChmYS5kb21haW4gPT09ICcqJyB8fCBmYS5kb21haW4udG9M b3dlckNhc2UoKSA9PT0gZG9tYWluKTsKICAgICAgICB9KTsKICAgIH0sCgogICAgaXNSZXZpZXdl cihrYXRlZ29yaWUpIHsKICAgICAgICBpZiAoIXRoaXMuZGF0YSB8fCAhdGhpcy5kYXRhLnJldmll d2VycykgcmV0dXJuIGZhbHNlOwogICAgICAgIGNvbnN0IHVzZXIgPSAodGhpcy5jdXJyZW50VXNl ciB8fCAnJykudG9Mb3dlckNhc2UoKTsKICAgICAgICBjb25zdCBkb21haW4gPSAodGhpcy5jdXJy ZW50RG9tYWluIHx8ICcnKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIHJldHVybiB0aGlzLmRhdGEu cmV2aWV3ZXJzLnNvbWUociA9PgogICAgICAgICAgICByLnVzZXJuYW1lLnRvTG93ZXJDYXNlKCkg PT09IHVzZXIgJiYKICAgICAgICAgICAgKHIuZG9tYWluID09PSAnKicgfHwgci5kb21haW4udG9M b3dlckNhc2UoKSA9PT0gZG9tYWluKSAmJgogICAgICAgICAgICByLmthdGVnb3JpZW4gJiYgci5r YXRlZ29yaWVuLmluY2x1ZGVzKGthdGVnb3JpZSkKICAgICAgICApOwogICAgfSwKCiAgICBnZXRS ZXZpZXdhYmxlQ2F0ZWdvcmllcygpIHsKICAgICAgICBpZiAoIXRoaXMuZGF0YSB8fCAhdGhpcy5k YXRhLnJldmlld2VycykgcmV0dXJuIFtdOwogICAgICAgIGNvbnN0IGNhdHMgPSBbXTsKICAgICAg ICBjb25zdCB1c2VyID0gKHRoaXMuY3VycmVudFVzZXIgfHwgJycpLnRvTG93ZXJDYXNlKCk7CiAg ICAgICAgY29uc3QgZG9tYWluID0gKHRoaXMuY3VycmVudERvbWFpbiB8fCAnJykudG9Mb3dlckNh c2UoKTsKICAgICAgICB0aGlzLmRhdGEucmV2aWV3ZXJzLmZvckVhY2gociA9PiB7CiAgICAgICAg ICAgIGlmIChyLnVzZXJuYW1lLnRvTG93ZXJDYXNlKCkgPT09IHVzZXIgJiYgKHIuZG9tYWluID09 PSAnKicgfHwgci5kb21haW4udG9Mb3dlckNhc2UoKSA9PT0gZG9tYWluKSkgewogICAgICAgICAg ICAgICAgKHIua2F0ZWdvcmllbiB8fCBbXSkuZm9yRWFjaChrID0+IHsgaWYgKCFjYXRzLmluY2x1 ZGVzKGspKSBjYXRzLnB1c2goayk7IH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAg ICAgcmV0dXJuIGNhdHM7CiAgICB9LAoKICAgIC8vIFNpY2h0YmFya2VpdHNmaWx0ZXIgKHJlaW4g Y2xpZW50LXNlaXRpZywgc3RldWVydCBVSS1EYXJzdGVsbHVuZyk6CiAgICAgICAgLy8gLSBGcmVp Z2VnZWJlbmUgRG9rdW1lbnRlOiBmdWVyIGFsbGUgc2ljaHRiYXIKICAgICAgICAvLyAtIEVudHd1 ZXJmZS9BYmdlbGVobnRlOiBudXIgZnVlciBBdXRvciwgenVzdGFlbmRpZ2UgUmV2aWV3ZXIgdW5k IFN1cGVyVXNlcgogICAgICAgIC8vIEhpbndlaXM6IERpZXMgaXN0IGtlaW5lIFp1Z3JpZmZza29u dHJvbGxlIC0gZGllIERva3VtZW50ZSBsaWVnZW4gYWxzIERhdGVpZW4gaW0gZGF0YS8tT3JkbmVy LgogICAgICAgIC8vIERlciBGaWx0ZXIgdmVyaGluZGVydCwgZGFzcyBCZW51dHplciBpbiBkZXIg T2JlcmZsYWVjaGUgRG9rdW1lbnRlIHNlaGVuLCBkaWUgc2llIG5pY2h0IGJlYXJiZWl0ZW4gc29s bGVuLgogICAgY2FuU2VlRG9jdW1lbnQoZG9jKSB7CiAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHJl dHVybiB0cnVlOyAvLyBLZWluIEdvdmVybmFuY2UgPSBhbGxlcyBzaWNodGJhcgogICAgICAgIC8v IEZyZWlnZWdlYmVuZSBEb2t1bWVudGU6IGFsbGUgc2VoZW4KICAgICAgICBpZiAoZG9jLnN0YXR1 cyA9PT0gJ0ZyZWlnZWdlYmVuJykgcmV0dXJuIHRydWU7CiAgICAgICAgLy8gRWlnZW5lIERva3Vt ZW50ZTogQXV0b3Igc2llaHQgaW1tZXIKICAgICAgICBjb25zdCB1c2VyID0gKHRoaXMuY3VycmVu dFVzZXIgfHwgJycpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgaWYgKChkb2MuZXJzdGVsbHRWb24g fHwgJycpLnRvTG93ZXJDYXNlKCkgPT09IHVzZXIgfHwgKGRvYy5iZWFyYmVpdGV0Vm9uIHx8ICcn KS50b0xvd2VyQ2FzZSgpID09PSB1c2VyKSByZXR1cm4gdHJ1ZTsKICAgICAgICAvLyBTdXBlclVz ZXIvRmFjaGF1ZnNpY2h0IHNpZWh0IGFsbGVzCiAgICAgICAgaWYgKHRoaXMuaXNTdXBlclVzZXIo KSB8fCB0aGlzLmlzRmFjaGF1ZnNpY2h0KCkpIHJldHVybiB0cnVlOwogICAgICAgIC8vIFJldmll d2VyIHNpZWh0IERva3VtZW50ZSBpbiBzZWluZW4gS2F0ZWdvcmllbgogICAgICAgIGlmICh0aGlz LmlzUmV2aWV3ZXIoZG9jLmthdGVnb3JpZSkpIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBm YWxzZTsKICAgIH0sCgogICAgY2FuQXBwcm92ZShkb2MpIHsKICAgICAgICBpZiAodGhpcy5pc1N1 cGVyVXNlcigpIHx8IHRoaXMuaXNGYWNoYXVmc2ljaHQoKSkgcmV0dXJuIHRydWU7CiAgICAgICAg cmV0dXJuIHRoaXMuaXNSZXZpZXdlcihkb2Mua2F0ZWdvcmllKTsKICAgIH0sCgogICAgY2FuU2V0 U3RhdHVzKHN0YXR1cykgewogICAgICAgIGlmICh0aGlzLmlzU3VwZXJVc2VyKCkgfHwgdGhpcy5p c0ZhY2hhdWZzaWNodCgpKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoc3RhdHVzID09PSAnRW50 d3VyZicgfHwgc3RhdHVzID09PSAnUHLDvGZ1bmcnKSByZXR1cm4gdHJ1ZTsKICAgICAgICByZXR1 cm4gZmFsc2U7IC8vIEZyZWlnZWdlYmVuL0FiZ2VsZWhudCBudXIgZnVlciBSZXZpZXdlci9TdXBl clVzZXIKICAgIH0sCgogICAgLy8gLS0tIFVJIFVwZGF0ZXMgLS0tCiAgICB1cGRhdGVVSSgpIHsK ICAgICAgICAvLyBSZXZpZXcgQmFkZ2UKICAgICAgICBjb25zdCBiYWRnZSA9IGRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKCdyZXZpZXdCYWRnZScpOwogICAgICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlz LmdldFBlbmRpbmdSZXZpZXdzKCk7CiAgICAgICAgaWYgKHBlbmRpbmcubGVuZ3RoID4gMCAmJiAo dGhpcy5pc1N1cGVyVXNlcigpIHx8IHRoaXMuaXNGYWNoYXVmc2ljaHQoKSB8fCB0aGlzLmdldFJl dmlld2FibGVDYXRlZ29yaWVzKCkubGVuZ3RoID4gMCkpIHsKICAgICAgICAgICAgYmFkZ2Uuc3R5 bGUuZGlzcGxheSA9ICcnOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmV2 aWV3Q291bnQnKS50ZXh0Q29udGVudCA9IHBlbmRpbmcubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICAgIGJhZGdlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgfQoKICAg ICAgICAvLyBHb3Zlcm5hbmNlIEFkbWluIEJ1dHRvbiAobnVyIFN1cGVyVXNlci9GYWNoYXVmc2lj aHQgaW0gU2VydmVyLU1vZHVzKQogICAgICAgIGNvbnN0IGFkbWluQnRuID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoJ2J0bkdvdkFkbWluJyk7CiAgICAgICAgYWRtaW5CdG4uc3R5bGUuZGlzcGxh eSA9IChEcml2ZUZTLm1vZGUgPT09ICdzZXJ2ZXInICYmICh0aGlzLmlzU3VwZXJVc2VyKCkgfHwg dGhpcy5pc0ZhY2hhdWZzaWNodCgpKSkgPyAnJyA6ICdub25lJzsKICAgIH0sCgogICAgZ2V0UGVu ZGluZ1Jldmlld3MoKSB7CiAgICAgICAgaWYgKCFEcml2ZUZTLmRvY3VtZW50cykgcmV0dXJuIFtd OwogICAgICAgIGNvbnN0IGNhdHMgPSAodGhpcy5pc1N1cGVyVXNlcigpIHx8IHRoaXMuaXNGYWNo YXVmc2ljaHQoKSkKICAgICAgICAgICAgPyAoRHJpdmVGUy5jb25maWcua2F0ZWdvcmllbiB8fCBb XSkKICAgICAgICAgICAgOiB0aGlzLmdldFJldmlld2FibGVDYXRlZ29yaWVzKCk7CiAgICAgICAg cmV0dXJuIERyaXZlRlMuZG9jdW1lbnRzLmZpbHRlcihkb2MgPT4KICAgICAgICAgICAgZG9jLnN0 YXR1cyA9PT0gJ1Byw7xmdW5nJyAmJiBjYXRzLmluY2x1ZGVzKGRvYy5rYXRlZ29yaWUpCiAgICAg ICAgKTsKICAgIH0sCgogICAgLy8gLS0tIFJldmlldyBRdWV1ZSBQYW5lbCAtLS0KICAgIHNob3dR dWV1ZSgpIHsKICAgICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdy ZXZpZXdQYW5lbCcpOwogICAgICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgncmV2aWV3UGFuZWxCb2R5Jyk7CiAgICAgICAgY29uc3QgcGVuZGluZyA9IHRoaXMuZ2V0UGVu ZGluZ1Jldmlld3MoKTsKCiAgICAgICAgaWYgKHBlbmRpbmcubGVuZ3RoID09PSAwKSB7CiAgICAg ICAgICAgIGJvZHkuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyBw YWRkaW5nOjQwcHg7IGNvbG9yOnZhcigtLXRleHQtbXV0ZWQpOyI+S2VpbmUgb2ZmZW5lbiBQcsO8 ZnVuZ2VuLjwvZGl2Pic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYm9keS5pbm5lckhU TUwgPSBwZW5kaW5nLm1hcChkb2MgPT4gewogICAgICAgICAgICAgICAgY29uc3QgZ292ID0gZG9j LmdvdmVybmFuY2UgfHwge307CiAgICAgICAgICAgICAgICBjb25zdCBzdWJtaXR0ZWQgPSBnb3Yu c3VibWl0dGVkRm9yUmV2aWV3IHx8IGRvYy5nZWFlbmRlcnQgfHwgJyc7CiAgICAgICAgICAgICAg ICByZXR1cm4gJzxkaXYgY2xhc3M9InJldmlldy1pdGVtIj4nICsKICAgICAgICAgICAgICAgICAg ICAnPGRpdiBjbGFzcz0icmV2aWV3LWl0ZW0tdGl0bGUiPicgKyBEcml2ZVBvcnRhbC5lc2NhcGVI VE1MKGRvYy50aXRlbCkgKyAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xh c3M9InJldmlldy1pdGVtLW1ldGEiPicgKwogICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4+ JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoZG9jLmthdGVnb3JpZSkgKyAnPC9zcGFuPicgKwog ICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4+dm9uICcgKyBEcml2ZVBvcnRhbC5lc2NhcGVI VE1MKGRvYy5lcnN0ZWxsdFZvbiB8fCBkb2MuYmVhcmJlaXRldFZvbiB8fCAnLScpICsgJzwvc3Bh bj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuPicgKyBmb3JtYXREYXRlKHN1Ym1p dHRlZCkgKyAnPC9zcGFuPicgKwogICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAg ICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0icmV2aWV3LWl0ZW0tYWN0aW9ucyI+JyArCiAgICAg ICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4tYXBwcm92ZSIgb25jbGljaz0i ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IERyaXZlR292ZXJuYW5jZS5yZXZpZXdBbmRPcGVuKFwn JyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoZG9jLmlkKSArICdcJykiPlByw7xmZW48L2J1dHRv bj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0bi1yZWplY3Qi IG9uY2xpY2s9ImV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBEcml2ZUdvdmVybmFuY2Uub3BlblJl dmlld0RpYWxvZyhcJycgKyBEcml2ZVBvcnRhbC5lc2NhcGVBdHRyKGRvYy5pZCkgKyAnXCcsIFwn cmVqZWN0XCcpIj5BYmxlaG5lbiB1bmQgQmVncsO8bmRlbjwvYnV0dG9uPicgKwogICAgICAgICAg ICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgICAgICc8L2Rpdj4nOwogICAgICAgICAg ICB9KS5qb2luKCcnKTsKICAgICAgICB9CgogICAgICAgIHBhbmVsLmNsYXNzTGlzdC5hZGQoJ2Fj dGl2ZScpOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXZpZXdQYW5lbE92ZXJs YXknKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgIH0sCgogICAgY2xvc2VRdWV1ZSgpIHsK ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmV2aWV3UGFuZWwnKS5jbGFzc0xpc3Qu cmVtb3ZlKCdhY3RpdmUnKTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmV2aWV3 UGFuZWxPdmVybGF5JykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICB9LAoKICAgIC8v IEFydGlrZWwgb2VmZm5lbiB1bmQgUGFuZWwgc2NobGllc3NlbgogICAgYXN5bmMgcmV2aWV3QW5k T3Blbihkb2NJZCkgewogICAgICAgIHRoaXMuY2xvc2VRdWV1ZSgpOwogICAgICAgIGF3YWl0IERy aXZlUG9ydGFsLnNlbGVjdERvY3VtZW50KGRvY0lkKTsKICAgICAgICBEcml2ZVBvcnRhbC5oaWdo bGlnaHRJdGVtKGRvY0lkKTsKICAgIH0sCgogICAgLy8gLS0tIFJldmlldyBEaWFsb2cgLS0tCiAg ICAvLyBSZXZpZXdlci1GYXJicGFsZXR0ZSAoYmlzIHp1IDggdW50ZXJzY2hpZWRsaWNoZSBSZXZp ZXdlcikKICAgIF9yZXZpZXdlckNvbG9yczogWwogICAgICAgIHsgYmc6ICcjZThmNWU5JywgYm9y ZGVyOiAnIzJlN2QzMicsIHRleHQ6ICcjMWI1ZTIwJyB9LAogICAgICAgIHsgYmc6ICcjZTNmMmZk JywgYm9yZGVyOiAnIzE1NjVjMCcsIHRleHQ6ICcjMGQ0N2ExJyB9LAogICAgICAgIHsgYmc6ICcj ZmZmM2UwJywgYm9yZGVyOiAnI2U2NTEwMCcsIHRleHQ6ICcjYmYzNjBjJyB9LAogICAgICAgIHsg Ymc6ICcjZjNlNWY1JywgYm9yZGVyOiAnIzdiMWZhMicsIHRleHQ6ICcjNGExNDhjJyB9LAogICAg ICAgIHsgYmc6ICcjZTBmN2ZhJywgYm9yZGVyOiAnIzAwODM4ZicsIHRleHQ6ICcjMDA2MDY0JyB9 LAogICAgICAgIHsgYmc6ICcjZmNlNGVjJywgYm9yZGVyOiAnI2M2MjgyOCcsIHRleHQ6ICcjYjcx YzFjJyB9LAogICAgICAgIHsgYmc6ICcjZjFmOGU5JywgYm9yZGVyOiAnIzU1OGIyZicsIHRleHQ6 ICcjMzM2OTFlJyB9LAogICAgICAgIHsgYmc6ICcjZWRlN2Y2JywgYm9yZGVyOiAnIzQ1MjdhMCcs IHRleHQ6ICcjMzExYjkyJyB9CiAgICBdLAoKICAgIF9nZXRSZXZpZXdlckNvbG9yKHJldmlld2Vy TmFtZSkgewogICAgICAgIGlmICghdGhpcy5fcmV2aWV3ZXJDb2xvck1hcCkgdGhpcy5fcmV2aWV3 ZXJDb2xvck1hcCA9IHt9OwogICAgICAgIGlmICh0aGlzLl9yZXZpZXdlckNvbG9yTWFwW3Jldmll d2VyTmFtZV0pIHJldHVybiB0aGlzLl9yZXZpZXdlckNvbG9yTWFwW3Jldmlld2VyTmFtZV07CiAg ICAgICAgdmFyIGlkeCA9IE9iamVjdC5rZXlzKHRoaXMuX3Jldmlld2VyQ29sb3JNYXApLmxlbmd0 aCAlIHRoaXMuX3Jldmlld2VyQ29sb3JzLmxlbmd0aDsKICAgICAgICB0aGlzLl9yZXZpZXdlckNv bG9yTWFwW3Jldmlld2VyTmFtZV0gPSB0aGlzLl9yZXZpZXdlckNvbG9yc1tpZHhdOwogICAgICAg IHJldHVybiB0aGlzLl9yZXZpZXdlckNvbG9yTWFwW3Jldmlld2VyTmFtZV07CiAgICB9LAoKICAg IG9wZW5SZXZpZXdEaWFsb2coZG9jSWQsIGFjdGlvbikgewogICAgICAgIGNvbnN0IGRvYyA9IERy aXZlRlMuZG9jdW1lbnRzLmZpbmQoZCA9PiBkLmlkID09PSBkb2NJZCk7CiAgICAgICAgaWYgKCFk b2MpIHJldHVybjsKCiAgICAgICAgdmFyIGhlYWRlckVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ3Jldmlld0RpYWxvZ0hlYWRlcicpOwogICAgICAgIHZhciBpbmZvID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoJ3Jldmlld0RpYWxvZ0luZm8nKTsKICAgICAgICB2YXIgaGludCA9IGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKCdyZXZpZXdEaWFsb2dIaW50Jyk7CiAgICAgICAgdmFyIHRleHRh cmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jldmlld0RpYWxvZ0NvbW1lbnQnKTsKICAg ICAgICB2YXIgY29uZmlybUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXZpZXdEaWFs b2dDb25maXJtJyk7CiAgICAgICAgdmFyIGFydGljbGVDb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQoJ3Jldmlld0FydGljbGVDb250ZW50Jyk7CiAgICAgICAgdmFyIHByZXZDb21tZW50 cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXZpZXdQcmV2Q29tbWVudHMnKTsKCiAgICAg ICAgLy8gSGVhZGVyCiAgICAgICAgdmFyIGhlYWRlclNwYW4gPSBoZWFkZXJFbC5xdWVyeVNlbGVj dG9yKCdzcGFuOmZpcnN0LWNoaWxkJyk7CiAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ2FwcHJvdmUn KSB7CiAgICAgICAgICAgIGlmIChoZWFkZXJTcGFuKSBoZWFkZXJTcGFuLnRleHRDb250ZW50ID0g J0Rva3VtZW50IGZyZWlnZWJlbic7CiAgICAgICAgICAgIGhlYWRlckVsLmNsYXNzTmFtZSA9ICdy ZXZpZXctZGlhbG9nLWhlYWRlciBhcHByb3ZlJzsKICAgICAgICAgICAgY29uZmlybUJ0bi50ZXh0 Q29udGVudCA9ICdGcmVpZ2ViZW4nOwogICAgICAgICAgICBjb25maXJtQnRuLmNsYXNzTmFtZSA9 ICdidG4tY29uZmlybSBhcHByb3ZlJzsKICAgICAgICAgICAgaGludC50ZXh0Q29udGVudCA9ICcn OwogICAgICAgICAgICBoaW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgICAgIHRl eHRhcmVhLnNldEF0dHJpYnV0ZSgnZGF0YS1wbGFjZWhvbGRlcicsICdLb21tZW50YXIgKG9wdGlv bmFsKS4uLicpOwogICAgICAgICAgICB0aGlzLl9yZXZpZXdDb21tZW50UmVxdWlyZWQgPSBmYWxz ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoaGVhZGVyU3BhbikgaGVhZGVyU3Bh bi50ZXh0Q29udGVudCA9ICdEb2t1bWVudCBhYmxlaG5lbiB1bmQgYmVncsO8bmRlbic7CiAgICAg ICAgICAgIGhlYWRlckVsLmNsYXNzTmFtZSA9ICdyZXZpZXctZGlhbG9nLWhlYWRlciByZWplY3Qn OwogICAgICAgICAgICBjb25maXJtQnRuLnRleHRDb250ZW50ID0gJ0FibGVobmVuJzsKICAgICAg ICAgICAgY29uZmlybUJ0bi5jbGFzc05hbWUgPSAnYnRuLWNvbmZpcm0gcmVqZWN0JzsKICAgICAg ICAgICAgdmFyIHJlak1vZGUgPSAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5zZXR0aW5ncykgPyAo dGhpcy5kYXRhLnNldHRpbmdzLnJlamVjdGlvblJlYXNvbk1vZGUgfHwgJ3JlcXVpcmVkJykgOiAn cmVxdWlyZWQnOwogICAgICAgICAgICBoaW50LnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAg ICAgaWYgKHJlak1vZGUgPT09ICdyZXF1aXJlZCcpIHsKICAgICAgICAgICAgICAgIGhpbnQudGV4 dENvbnRlbnQgPSAnRWluZSBhdXNmw7xocmxpY2hlIEJlZ3LDvG5kdW5nIGlzdCBlcmZvcmRlcmxp Y2guIEJlc2NocmVpYmUsIHdhcnVtIGRlciBBcnRpa2VsIGFiZ2VsZWhudCB3aXJkIHVuZCB3ZWxj aGUgw4RuZGVydW5nZW4gbm90d2VuZGlnIHNpbmQuJzsKICAgICAgICAgICAgICAgIHRleHRhcmVh LnNldEF0dHJpYnV0ZSgnZGF0YS1wbGFjZWhvbGRlcicsICdCZWdyw7xuZHVuZyAoUGZsaWNodGZl bGQpLi4uJyk7CiAgICAgICAgICAgICAgICB0aGlzLl9yZXZpZXdDb21tZW50UmVxdWlyZWQgPSB0 cnVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKHJlak1vZGUgPT09ICdvcHRpb25hbCcpIHsKICAg ICAgICAgICAgICAgIGhpbnQudGV4dENvbnRlbnQgPSAnRWluZSBCZWdyw7xuZHVuZyBpc3Qgb3B0 aW9uYWwsIHdpcmQgYWJlciBlbXBmb2hsZW4uJzsKICAgICAgICAgICAgICAgIHRleHRhcmVhLnNl dEF0dHJpYnV0ZSgnZGF0YS1wbGFjZWhvbGRlcicsICdCZWdyw7xuZHVuZyAob3B0aW9uYWwpLi4u Jyk7CiAgICAgICAgICAgICAgICB0aGlzLl9yZXZpZXdDb21tZW50UmVxdWlyZWQgPSBmYWxzZTsK ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhpbnQudGV4dENvbnRlbnQgPSAn JzsgaGludC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICAgICAgdGV4dGFyZWEu c2V0QXR0cmlidXRlKCdkYXRhLXBsYWNlaG9sZGVyJywgJ0tvbW1lbnRhciAob3B0aW9uYWwpLi4u Jyk7CiAgICAgICAgICAgICAgICB0aGlzLl9yZXZpZXdDb21tZW50UmVxdWlyZWQgPSBmYWxzZTsK ICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaW5mby50ZXh0Q29udGVudCA9IGRvYy50 aXRlbCArICcgKCcgKyBkb2Mua2F0ZWdvcmllICsgJyknOwogICAgICAgIHRleHRhcmVhLmlubmVy SFRNTCA9ICcnOwoKICAgICAgICAvLyBBcnRpa2VsaW5oYWx0IGxpbmtzIGFuemVpZ2VuCiAgICAg ICAgdmFyIGluaGFsdCA9IGRvYy5pbmhhbHQgfHwgJzxlbSBzdHlsZT0iY29sb3I6dmFyKC0tdGV4 dC1tdXRlZCk7Ij5LZWluIEluaGFsdDwvZW0+JzsKICAgICAgICBhcnRpY2xlQ29udGVudC5pbm5l ckhUTUwgPSAnPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHg7Zm9udC13ZWlnaHQ6NjAwO2Nv bG9yOnZhcigtLXRleHQtaGVhZGluZyk7Zm9udC1zaXplOjE1cHg7Ij4nICsKICAgICAgICAgICAg RHJpdmVQb3J0YWwuZXNjYXBlSFRNTChkb2MudGl0ZWwpICsgJzwvZGl2PicgKyBpbmhhbHQ7Cgog ICAgICAgIC8vIEJpc2hlcmlnZSBLb21tZW50YXJlIG1pdCBSZXZpZXdlci1GYXJiZW4gYW56ZWln ZW4KICAgICAgICB0aGlzLl9yZXZpZXdlckNvbG9yTWFwID0ge307CiAgICAgICAgdmFyIGhpc3Rv cnkgPSAoZG9jLmdvdmVybmFuY2UgJiYgZG9jLmdvdmVybmFuY2UucmV2aWV3SGlzdG9yeSkgPyBk b2MuZ292ZXJuYW5jZS5yZXZpZXdIaXN0b3J5IDogW107CiAgICAgICAgdmFyIGNvbW1lbnRzSHRt bCA9ICcnOwogICAgICAgIGhpc3RvcnkuZm9yRWFjaChmdW5jdGlvbihlbnRyeSkgewogICAgICAg ICAgICBpZiAoIWVudHJ5LmNvbW1lbnQpIHJldHVybjsKICAgICAgICAgICAgdmFyIGNvbG9yID0g RHJpdmVHb3Zlcm5hbmNlLl9nZXRSZXZpZXdlckNvbG9yKGVudHJ5LmJ5IHx8ICdVbmJla2FubnQn KTsKICAgICAgICAgICAgdmFyIGFjdGlvbkxhYmVsID0gZW50cnkuYWN0aW9uID09PSAnYXBwcm92 ZWQnID8gJ0ZyZWlnZWdlYmVuJyA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5 LmFjdGlvbiA9PT0gJ3JlamVjdGVkJyA/ICdBYmdlbGVobnQnIDogJ0VpbmdlcmVpY2h0JzsKICAg ICAgICAgICAgdmFyIG5pZ2h0QmcgPSBjb2xvci5iZzsKICAgICAgICAgICAgY29tbWVudHNIdG1s ICs9ICc8ZGl2IGNsYXNzPSJyZXZpZXctY29tbWVudC1idWJibGUiIHN0eWxlPSJiYWNrZ3JvdW5k OicgKyBjb2xvci5iZyArICc7Ym9yZGVyLWxlZnQtY29sb3I6JyArIGNvbG9yLmJvcmRlciArICc7 IiB0aXRsZT0iJyArIGZvcm1hdERhdGVUaW1lKGVudHJ5LmF0KSArICciPicgKwogICAgICAgICAg ICAgICAgJzxzcGFuIGNsYXNzPSJyYy1hdXRob3IiIHN0eWxlPSJjb2xvcjonICsgY29sb3IudGV4 dCArICc7Ij4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChlbnRyeS5ieSB8fCAnVW5iZWthbm50 JykgKyAnIOKAkyAnICsgYWN0aW9uTGFiZWwgKyAnPC9zcGFuPicgKwogICAgICAgICAgICAgICAg JzxzcGFuIGNsYXNzPSJyYy1kYXRlIj4nICsgZm9ybWF0RGF0ZVRpbWUoZW50cnkuYXQpICsgJzwv c3Bhbj4nICsKICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJyYy10ZXh0Ij4nICsgZW50cnku Y29tbWVudCArICc8L2Rpdj4nICsKICAgICAgICAgICAgJzwvZGl2Pic7CiAgICAgICAgfSk7CiAg ICAgICAgaWYgKCFjb21tZW50c0h0bWwpIHsKICAgICAgICAgICAgY29tbWVudHNIdG1sID0gJzxk aXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpO3BhZGRpbmc6 OHB4IDA7Ij5Ob2NoIGtlaW5lIEtvbW1lbnRhcmUgdm9yaGFuZGVuLjwvZGl2Pic7CiAgICAgICAg fQogICAgICAgIHByZXZDb21tZW50cy5pbm5lckhUTUwgPSBjb21tZW50c0h0bWw7CgogICAgICAg IHRoaXMuX3Jldmlld0RpYWxvZ0FjdGlvbiA9IGFjdGlvbjsKICAgICAgICB0aGlzLl9yZXZpZXdE aWFsb2dDYWxsYmFjayA9IGRvY0lkOwogICAgICAgIGNvbmZpcm1CdG4ub25jbGljayA9ICgpID0+ IHRoaXMuY29uZmlybVJldmlldygpOwoKICAgICAgICAvLyBQYXN0ZS1IYW5kbGVyOiBOdXIgS2xh cnRleHQgZWluZnVlZ2VuCiAgICAgICAgdGV4dGFyZWEub25wYXN0ZSA9IGZ1bmN0aW9uKGUpIHsK ICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB2YXIgdGV4dCA9IChl LmNsaXBib2FyZERhdGEgfHwgd2luZG93LmNsaXBib2FyZERhdGEpLmdldERhdGEoJ3RleHQvcGxh aW4nKTsKICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxz ZSwgdGV4dCk7CiAgICAgICAgfTsKCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jl dmlld0RpYWxvZycpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgfSwKCiAgICBjbG9zZVJl dmlld0RpYWxvZygpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmV2aWV3RGlh bG9nJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICAgICAgdGhpcy5fcmV2aWV3RGlh bG9nQ2FsbGJhY2sgPSBudWxsOwogICAgfSwKCiAgICBhc3luYyBjb25maXJtUmV2aWV3KCkgewog ICAgICAgIGNvbnN0IGRvY0lkID0gdGhpcy5fcmV2aWV3RGlhbG9nQ2FsbGJhY2s7CiAgICAgICAg Y29uc3QgYWN0aW9uID0gdGhpcy5fcmV2aWV3RGlhbG9nQWN0aW9uOwogICAgICAgIGNvbnN0IGNv bW1lbnRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXZpZXdEaWFsb2dDb21tZW50Jyk7 CiAgICAgICAgLy8gS29tbWVudGFyLUhUTUwgc2FuaXRpemVuOiBudXIgZXJsYXVidGUgVGFncyBi ZWhhbHRlbgogICAgICAgIHZhciByYXdIdG1sID0gY29tbWVudEVsLmlubmVySFRNTC50cmltKCku cmVwbGFjZSgvXjxicj4kLywgJycpOwogICAgICAgIHZhciBzYW5pdGl6ZURpdiA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIHNhbml0aXplRGl2LmlubmVySFRNTCA9IHJh d0h0bWw7CiAgICAgICAgLy8gQWxsZSB1bmVybGF1YnRlbiBUYWdzIGR1cmNoIGlocmVuIFRleHRp bmhhbHQgZXJzZXR6ZW4KICAgICAgICBzYW5pdGl6ZURpdi5xdWVyeVNlbGVjdG9yQWxsKCdhLCBp bWcsIHNjcmlwdCwgc3R5bGUsIGlmcmFtZSwgZGl2LCBzcGFuW3N0eWxlKj0iZm9udC1zaXplIl0s IHNwYW5bc3R5bGUqPSJ3aGl0ZS1zcGFjZSJdJykuZm9yRWFjaChmdW5jdGlvbihlbCkgewogICAg ICAgICAgICBpZiAoZWwudGFnTmFtZSA9PT0gJ0RJVicpIHsKICAgICAgICAgICAgICAgIC8vIERp dnMgZHVyY2ggaWhyZW4gSW5oYWx0ICsgWmVpbGVudW1icnVjaCBlcnNldHplbgogICAgICAgICAg ICAgICAgZWwuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsICc8YnI+Jyk7CiAgICAgICAg ICAgICAgICBlbC5yZXBsYWNlV2l0aChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlbC50ZXh0Q29u dGVudCkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWwucmVwbGFjZVdp dGgoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZWwudGV4dENvbnRlbnQpKTsKICAgICAgICAgICAg fQogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGNvbW1lbnQgPSBzYW5pdGl6ZURpdi5pbm5lckhU TUwudHJpbSgpLnJlcGxhY2UoL148YnI+JC8sICcnKTsKCiAgICAgICAgaWYgKCFkb2NJZCkgcmV0 dXJuOwoKICAgICAgICAvLyBQZmxpY2h0ZmVsZC1QcnVlZnVuZyBmdWVyIEFibGVobnVuZ3NiZWdy dWVuZHVuZwogICAgICAgIHZhciBjb21tZW50VGV4dCA9IGNvbW1lbnRFbC50ZXh0Q29udGVudC50 cmltKCk7CiAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ3JlamVjdCcpIHsKICAgICAgICAgICAgaWYg KHRoaXMuX3Jldmlld0NvbW1lbnRSZXF1aXJlZCAmJiAhY29tbWVudFRleHQpIHsKICAgICAgICAg ICAgICAgIHNob3dUb2FzdCgnQml0dGUgZWluZSBCZWdyw7xuZHVuZyBlaW5nZWJlbiAoUGZsaWNo dGZlbGQpJywgJ3dhcm5pbmcnKTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC eUlkKCdyZXZpZXdEaWFsb2dDb21tZW50JykuZm9jdXMoKTsKICAgICAgICAgICAgICAgIHJldHVy bjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gU2NocmVpYnp1Z3JpZmYgc2lj aGVyc3RlbGxlbiAoZmlsZTovLyBNb2R1cyBpc3Qgc3RhbmRhcmRtYWVzc2lnIHJlYWQtb25seSkK ICAgICAgICBpZiAoRHJpdmVGUy5yZWFkT25seSkgewogICAgICAgICAgICBjb25zdCBncmFudGVk ID0gYXdhaXQgRHJpdmVGUy5lbnN1cmVXcml0ZUFjY2VzcygpOwogICAgICAgICAgICBpZiAoIWdy YW50ZWQpIHsKICAgICAgICAgICAgICAgIHNob3dUb2FzdCgnU2NocmVpYnp1Z3JpZmYgZXJmb3Jk ZXJsaWNoIGbDvHIgRnJlaWdhYmUtQWt0aW9uZW4nLCAnd2FybmluZycpOwogICAgICAgICAgICAg ICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBjb25zdCBkb2MgPSBE cml2ZUZTLmRvY3VtZW50cy5maW5kKGQgPT4gZC5pZCA9PT0gZG9jSWQpOwogICAgICAgIGlmICgh ZG9jKSByZXR1cm47CgogICAgICAgIC8vIEdvdmVybmFuY2UtRGF0ZW4genVtIERva3VtZW50IGhp bnp1ZnVlZ2VuCiAgICAgICAgaWYgKCFkb2MuZ292ZXJuYW5jZSkgZG9jLmdvdmVybmFuY2UgPSB7 IHJldmlld0hpc3Rvcnk6IFtdIH07CiAgICAgICAgaWYgKCFkb2MuZ292ZXJuYW5jZS5yZXZpZXdI aXN0b3J5KSBkb2MuZ292ZXJuYW5jZS5yZXZpZXdIaXN0b3J5ID0gW107CgogICAgICAgIGRvYy5n b3Zlcm5hbmNlLnJldmlld0hpc3RvcnkucHVzaCh7CiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9u ID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJywKICAgICAgICAgICAgYnk6 IHRoaXMuY3VycmVudFVzZXIsCiAgICAgICAgICAgIGF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5n KCksCiAgICAgICAgICAgIGNvbW1lbnQ6IGNvbW1lbnQKICAgICAgICB9KTsKCiAgICAgICAgdmFy IG5ld1N0YXR1cyA9IGFjdGlvbiA9PT0gJ2FwcHJvdmUnID8gJ0ZyZWlnZWdlYmVuJyA6ICdBYmdl bGVobnQnOwogICAgICAgIGRvYy52ZXJzaW9uID0gY2FsY3VsYXRlVmVyc2lvbihkb2MsIGRvYy5p bmhhbHQsIGRvYy5pbmhhbHQsIG5ld1N0YXR1cyk7CiAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ2Fw cHJvdmUnKSB7CiAgICAgICAgICAgIGRvYy5zdGF0dXMgPSAnRnJlaWdlZ2ViZW4nOwogICAgICAg ICAgICBkb2MuZ292ZXJuYW5jZS5hcHByb3ZlZEJ5ID0gdGhpcy5jdXJyZW50VXNlcjsKICAgICAg ICAgICAgZG9jLmdvdmVybmFuY2UuYXBwcm92ZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmco KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkb2Muc3RhdHVzID0gJ0FiZ2VsZWhudCc7 CiAgICAgICAgfQogICAgICAgIC8vIERpZmYtRGF0ZW4gYmVyZWluaWdlbiAobmFjaCBGcmVpZ2Fi ZS9BYmxlaG51bmcgbmljaHQgbWVociBub2V0aWcpCiAgICAgICAgZGVsZXRlIGRvYy5fcHJldmlv dXNJbmhhbHQ7CiAgICAgICAgZGVsZXRlIGRvYy5fcHJldmlvdXNUaXRlbDsKCiAgICAgICAgdHJ5 IHsKICAgICAgICAgICAgY29uc3Qgc2F2ZVJlc3VsdCA9IGF3YWl0IERyaXZlRlMuc2F2ZURvY3Vt ZW50KGRvYyk7CiAgICAgICAgICAgIGlmIChzYXZlUmVzdWx0ID09PSB0cnVlKSB7CiAgICAgICAg ICAgICAgICBjb25zdCBtc2cgPSBhY3Rpb24gPT09ICdhcHByb3ZlJyA/ICdEb2t1bWVudCBmcmVp Z2VnZWJlbicgOiAnRG9rdW1lbnQgYWJnZWxlaG50JzsKICAgICAgICAgICAgICAgIHNob3dUb2Fz dChtc2cgKyAnOiAnICsgZG9jLnRpdGVsLCBhY3Rpb24gPT09ICdhcHByb3ZlJyA/ICdzdWNjZXNz JyA6ICd3YXJuaW5nJyk7CiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUmV2aWV3RGlhbG9nKCk7 CiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUXVldWUoKTsKICAgICAgICAgICAgICAgIERyaXZl UG9ydGFsLnJlbmRlcigpOwogICAgICAgICAgICAgICAgdGhpcy51cGRhdGVVSSgpOwogICAgICAg ICAgICAgICAgYXdhaXQgRHJpdmVQb3J0YWwuc2VsZWN0RG9jdW1lbnQoZG9jSWQpOwogICAgICAg ICAgICAgICAgRHJpdmVQb3J0YWwuaGlnaGxpZ2h0SXRlbShkb2NJZCk7CiAgICAgICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICAgICBzaG93VG9hc3QoJ0ZlaGxlciBiZWltIFNwZWljaGVybjog JyArIHNhdmVSZXN1bHQsICdlcnJvcicsIDUwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSBj YXRjaCAoZXJyKSB7CiAgICAgICAgICAgIHNob3dUb2FzdCgnU3BlaWNoZXJuIGZlaGxnZXNjaGxh Z2VuOiAnICsgZXJyLm1lc3NhZ2UsICdlcnJvcicsIDUwMDApOwogICAgICAgIH0KICAgIH0sCgog ICAgLy8gLS0tIFN1Ym1pdCBmb3IgUmV2aWV3IC0tLQogICAgYXN5bmMgc3VibWl0Rm9yUmV2aWV3 KGRvYykgewogICAgICAgIGlmICghZG9jLmdvdmVybmFuY2UpIGRvYy5nb3Zlcm5hbmNlID0geyBy ZXZpZXdIaXN0b3J5OiBbXSB9OwogICAgICAgIGlmICghZG9jLmdvdmVybmFuY2UucmV2aWV3SGlz dG9yeSkgZG9jLmdvdmVybmFuY2UucmV2aWV3SGlzdG9yeSA9IFtdOwoKICAgICAgICAvLyBWb3Jo ZXJpZ2VuIEluaGFsdCBzaWNoZXJuIGZ1ZXIgRGlmZi1BbnplaWdlIGJlaW0gUmV2aWV3CiAgICAg ICAgLy8gTGVzZSBkaWUgenVsZXR6dCBnZXNwZWljaGVydGUgVmVyc2lvbiB2b24gRGlzayAobmlj aHQgZGllIGdlcmFkZSBiZWFyYmVpdGV0ZSkKICAgICAgICB0cnkgewogICAgICAgICAgICB2YXIg c2F2ZWREb2MgPSBhd2FpdCBEcml2ZUZTLmxvYWREb2N1bWVudChkb2MuaWQpOwogICAgICAgICAg ICBpZiAoc2F2ZWREb2MgJiYgc2F2ZWREb2MuaW5oYWx0KSB7CiAgICAgICAgICAgICAgICBkb2Mu X3ByZXZpb3VzSW5oYWx0ID0gc2F2ZWREb2MuaW5oYWx0OwogICAgICAgICAgICAgICAgZG9jLl9w cmV2aW91c1RpdGVsID0gc2F2ZWREb2MudGl0ZWw7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNh dGNoKGUpIHt9CgogICAgICAgIGRvYy5zdGF0dXMgPSAnUHLDvGZ1bmcnOwogICAgICAgIGRvYy5n b3Zlcm5hbmNlLnN1Ym1pdHRlZEZvclJldmlldyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTsK ICAgICAgICBkb2MuZ292ZXJuYW5jZS5yZXZpZXdIaXN0b3J5LnB1c2goewogICAgICAgICAgICBh Y3Rpb246ICdzdWJtaXR0ZWQnLAogICAgICAgICAgICBieTogdGhpcy5jdXJyZW50VXNlciwKICAg ICAgICAgICAgYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKICAgICAgICAgICAgY29tbWVu dDogJycKICAgICAgICB9KTsKICAgIH0sCgogICAgLy8gLS0tIEdvdmVybmFuY2UgQWRtaW4gUGFu ZWwgLS0tCiAgICBzaG93QWRtaW4oKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzU3VwZXJVc2VyKCkg JiYgIXRoaXMuaXNGYWNoYXVmc2ljaHQoKSkgcmV0dXJuOwogICAgICAgIHRoaXMucmVuZGVyQWRt aW4oKTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ292QWRtaW5QYW5lbCcpLmNs YXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgfSwKCiAgICBjbG9zZUFkbWluKCkgewogICAgICAg IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb3ZBZG1pblBhbmVsJykuY2xhc3NMaXN0LnJlbW92 ZSgnYWN0aXZlJyk7CiAgICB9LAoKICAgIHJlbmRlckFkbWluKCkgewogICAgICAgIGNvbnN0IGJv ZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ292QWRtaW5Cb2R5Jyk7CiAgICAgICAgY29u c3QgZ292ID0gdGhpcy5kYXRhIHx8IHsgc3VwZXJVc2VyczogW10sIHJldmlld2VyczogW10sIGZh Y2hhdWZzaWNodDogW10sIHNldHRpbmdzOiB7fSB9OwogICAgICAgIGlmICghZ292LmZhY2hhdWZz aWNodCkgZ292LmZhY2hhdWZzaWNodCA9IFtdOwogICAgICAgIGlmICghZ292LnNldHRpbmdzKSBn b3Yuc2V0dGluZ3MgPSB7fTsKICAgICAgICBjb25zdCBrYXRlZ29yaWVuID0gRHJpdmVGUy5jb25m aWcua2F0ZWdvcmllbiB8fCBbXTsKICAgICAgICBjb25zdCBpc1NVID0gdGhpcy5pc1N1cGVyVXNl cigpOwoKICAgICAgICAvLyAtLS0gU3VwZXJVc2VyIC0tLQogICAgICAgIGxldCBodG1sID0gJzxk aXYgY2xhc3M9Imdvdi1zZWN0aW9uIj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9Imdvdi1z ZWN0aW9uLXRpdGxlIiB0aXRsZT0iU3VwZXJVc2VyIGhhYmVuIFZvbGx6dWdyaWZmIGF1ZiBhbGxl IEZ1bmt0aW9uZW46IFJvbGxlbiB2ZXJnZWJlbiwgRWluc3RlbGx1bmdlbiDDpG5kZXJuLCBhbGxl IEFydGlrZWwgZnJlaWdlYmVuIG9kZXIgYWJsZWhuZW4uIj5BZG1pbmlzdHJhdG9yZW4gKFN1cGVy VXNlcik8L2Rpdj4nOwogICAgICAgIGdvdi5zdXBlclVzZXJzLmZvckVhY2goZnVuY3Rpb24oc3Us IGkpIHsKICAgICAgICAgICAgdmFyIG9lID0gc3Uub3JnYW5pc2F0aW9uc2VpbmhlaXQgPyAnIMK3 ICcgKyBEcml2ZVBvcnRhbC5lc2NhcGVIVE1MKHN1Lm9yZ2FuaXNhdGlvbnNlaW5oZWl0KSA6ICcn OwogICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJnb3YtdXNlci1yb3ciPicgKwogICAg ICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJnb3Ytcm9sZS1pY29uIHN1Ij5TVTwvc3Bhbj4nICsK ICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJnb3YtdXNlci1pbmZvIj48ZGl2IGNsYXNzPSJn b3YtdXNlci1uYW1lIj4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChzdS5kaXNwbGF5TmFtZSB8 fCBzdS51c2VybmFtZSkgKyAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xh c3M9Imdvdi11c2VyLWRldGFpbCI+JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoc3UudXNlcm5h bWUpICsgb2UgKyAnPC9kaXY+PC9kaXY+JyArCiAgICAgICAgICAgICAgICAoaXNTVSAmJiBnb3Yu c3VwZXJVc2Vycy5sZW5ndGggPiAxID8gJzxidXR0b24gY2xhc3M9InJlbW92ZSIgb25jbGljaz0i RHJpdmVHb3Zlcm5hbmNlLnJlbW92ZVN1cGVyVXNlcignICsgaSArICcpIj5FbnRmZXJuZW48L2J1 dHRvbj4nIDogJycpICsKICAgICAgICAgICAgJzwvZGl2Pic7CiAgICAgICAgfSk7CiAgICAgICAg aWYgKGlzU1UpIHsKICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iZ292LWNhdC1hZGQt cm93IiBzdHlsZT0iZ2FwOjZweDsiPicgKwogICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJ0 ZXh0IiBpZD0iZ292U1VVc2VyIiBwbGFjZWhvbGRlcj0iTlctS2VubnVuZyIgc3R5bGU9Im1heC13 aWR0aDoxMjBweDsiPicgKwogICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0i Z292U1VOYW1lIiBwbGFjZWhvbGRlcj0iQW56ZWlnZW5hbWUiIHN0eWxlPSJmbGV4OjI7Ij4nICsK ICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImdvdlNVT0UiIHBsYWNlaG9s ZGVyPSJPcmdhbmlzYXRpb25zZWluaGVpdCIgc3R5bGU9ImZsZXg6MjsiPicgKwogICAgICAgICAg ICAgICAgJzxidXR0b24gY2xhc3M9Imdvdi1hZGQtYnRuIiBzdHlsZT0icGFkZGluZzo2cHggMTRw eDsiIG9uY2xpY2s9IkRyaXZlR292ZXJuYW5jZS5hZGRTdXBlclVzZXIoKSI+SGluenVmw7xnZW48 L2J1dHRvbj4nICsKICAgICAgICAgICAgJzwvZGl2Pic7CiAgICAgICAgfQogICAgICAgIGh0bWwg Kz0gJzwvZGl2Pic7CgogICAgICAgIC8vIC0tLSBGYWNoYXVmc2ljaHQgLS0tCiAgICAgICAgaHRt bCArPSAnPGRpdiBjbGFzcz0iZ292LXNlY3Rpb24iPicgKwogICAgICAgICAgICAnPGRpdiBjbGFz cz0iZ292LXNlY3Rpb24tdGl0bGUiIHRpdGxlPSJEaWUgRmFjaGF1ZnNpY2h0IGhhdCBkaWUgZ2xl aWNoZW4gUmVjaHRlIHdpZSBlaW4gU3VwZXJVc2VyLCBrYW5uIGFiZXIga2VpbmUgUm9sbGVuIHZl cmdlYmVuLiBHZWRhY2h0IGbDvHIgVm9yZ2VzZXR6dGUsIGRpZSBJbmhhbHRlIHByw7xmZW4gc29s bGVuLiI+RmFjaGF1ZnNpY2h0ICgnICsgZ292LmZhY2hhdWZzaWNodC5sZW5ndGggKyAnKTwvZGl2 Pic7CiAgICAgICAgaWYgKGdvdi5mYWNoYXVmc2ljaHQubGVuZ3RoID09PSAwKSB7CiAgICAgICAg ICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9Imdvdi1lbXB0eSI+Tm9jaCBrZWluZSBGYWNoYXVmc2lj aHQga29uZmlndXJpZXJ0PC9kaXY+JzsKICAgICAgICB9CiAgICAgICAgZ292LmZhY2hhdWZzaWNo dC5mb3JFYWNoKGZ1bmN0aW9uKGZhLCBpKSB7CiAgICAgICAgICAgIHZhciBvZSA9IGZhLm9yZ2Fu aXNhdGlvbnNlaW5oZWl0ID8gJyDCtyAnICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChmYS5vcmdh bmlzYXRpb25zZWluaGVpdCkgOiAnJzsKICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0i Z292LXVzZXItcm93Ij4nICsKICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz0iZ292LXJvbGUt aWNvbiBmYSI+RkE8L3NwYW4+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iZ292LXVz ZXItaW5mbyI+PGRpdiBjbGFzcz0iZ292LXVzZXItbmFtZSI+JyArIERyaXZlUG9ydGFsLmVzY2Fw ZUhUTUwoZmEuZGlzcGxheU5hbWUgfHwgZmEudXNlcm5hbWUpICsgJzwvZGl2PicgKwogICAgICAg ICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJnb3YtdXNlci1kZXRhaWwiPicgKyBEcml2ZVBvcnRh bC5lc2NhcGVIVE1MKGZhLnVzZXJuYW1lKSArIG9lICsgJzwvZGl2PjwvZGl2PicgKwogICAgICAg ICAgICAgICAgJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojYzYyODI4OyI+QWxs ZSBLYXRlZ29yaWVuPC9zcGFuPicgKwogICAgICAgICAgICAgICAgKGlzU1UgPyAnPGJ1dHRvbiBj bGFzcz0icmVtb3ZlIiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2UucmVtb3ZlRmFjaGF1ZnNpY2h0 KCcgKyBpICsgJykiPkVudGZlcm5lbjwvYnV0dG9uPicgOiAnJykgKwogICAgICAgICAgICAnPC9k aXY+JzsKICAgICAgICB9KTsKICAgICAgICBpZiAoaXNTVSkgewogICAgICAgICAgICBodG1sICs9 ICc8ZGl2IGNsYXNzPSJnb3YtY2F0LWFkZC1yb3ciIHN0eWxlPSJnYXA6NnB4OyI+JyArCiAgICAg ICAgICAgICAgICAnPGlucHV0IHR5cGU9InRleHQiIGlkPSJnb3ZGQVVzZXIiIHBsYWNlaG9sZGVy PSJOVy1LZW5udW5nIiBzdHlsZT0ibWF4LXdpZHRoOjEyMHB4OyI+JyArCiAgICAgICAgICAgICAg ICAnPGlucHV0IHR5cGU9InRleHQiIGlkPSJnb3ZGQU5hbWUiIHBsYWNlaG9sZGVyPSJBbnplaWdl bmFtZSIgc3R5bGU9ImZsZXg6MjsiPicgKwogICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJ0 ZXh0IiBpZD0iZ292RkFPRSIgcGxhY2Vob2xkZXI9Ik9yZ2FuaXNhdGlvbnNlaW5oZWl0IiBzdHls ZT0iZmxleDoyOyI+JyArCiAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iZ292LWFkZC1i dG4iIHN0eWxlPSJwYWRkaW5nOjZweCAxNHB4OyIgb25jbGljaz0iRHJpdmVHb3Zlcm5hbmNlLmFk ZEZhY2hhdWZzaWNodCgpIj5IaW56dWbDvGdlbjwvYnV0dG9uPicgKwogICAgICAgICAgICAnPC9k aXY+JzsKICAgICAgICB9CiAgICAgICAgaHRtbCArPSAnPC9kaXY+JzsKCiAgICAgICAgLy8gLS0t IFJldmlld2VyIC0tLQogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9Imdvdi1zZWN0aW9uIj4n ICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9Imdvdi1zZWN0aW9uLXRpdGxlIiB0aXRsZT0iUmV2 aWV3ZXIgZMO8cmZlbiBBcnRpa2VsIGluIGRlbiBpaG5lbiB6dWdld2llc2VuZW4gS2F0ZWdvcmll biBmcmVpZ2ViZW4gb2RlciBhYmxlaG5lbi4gSmVkZXIgUmV2aWV3ZXIgYmVrb21tdCBiZXN0aW1t dGUgRmFjaGJlcmVpY2hlIHp1Z2V3aWVzZW4uIj5SZXZpZXdlciAoJyArIGdvdi5yZXZpZXdlcnMu bGVuZ3RoICsgJyk8L2Rpdj4nOwogICAgICAgIGlmIChnb3YucmV2aWV3ZXJzLmxlbmd0aCA9PT0g MCkgewogICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJnb3YtZW1wdHkiPk5vY2gga2Vp bmUgUmV2aWV3ZXIga29uZmlndXJpZXJ0PC9kaXY+JzsKICAgICAgICB9CiAgICAgICAgZ292LnJl dmlld2Vycy5mb3JFYWNoKGZ1bmN0aW9uKHIsIGkpIHsKICAgICAgICAgICAgdmFyIG9lID0gci5v cmdhbmlzYXRpb25zZWluaGVpdCA/ICcgwrcgJyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoci5v cmdhbmlzYXRpb25zZWluaGVpdCkgOiAnJzsKICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFz cz0iZ292LXVzZXItcm93Ij4nICsKICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz0iZ292LXJv bGUtaWNvbiByZXYiPlI8L3NwYW4+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iZ292 LXVzZXItaW5mbyI+PGRpdiBjbGFzcz0iZ292LXVzZXItbmFtZSI+JyArIERyaXZlUG9ydGFsLmVz Y2FwZUhUTUwoci5kaXNwbGF5TmFtZSB8fCByLnVzZXJuYW1lKSArICc8L2Rpdj4nICsKICAgICAg ICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iZ292LXVzZXItZGV0YWlsIj4nICsgRHJpdmVQb3J0 YWwuZXNjYXBlSFRNTChyLnVzZXJuYW1lKSArIG9lICsgJzwvZGl2PjwvZGl2PicgKwogICAgICAg ICAgICAgICAgJzxkaXYgY2xhc3M9Imdvdi1jYXQtdGFncyI+JyArIChyLmthdGVnb3JpZW4gfHwg W10pLm1hcChmdW5jdGlvbihrKSB7IHJldHVybiAnPHNwYW4gY2xhc3M9Imdvdi1jYXQtdGFnIj4n ICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChrKSArICc8L3NwYW4+JzsgfSkuam9pbignJykgKyAn PC9kaXY+JyArCiAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iZWRpdCIgb25jbGljaz0i RHJpdmVHb3Zlcm5hbmNlLmVkaXRSZXZpZXdlcignICsgaSArICcpIj5CZWFyYmVpdGVuPC9idXR0 b24+JyArCiAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0icmVtb3ZlIiBvbmNsaWNrPSJE cml2ZUdvdmVybmFuY2UucmVtb3ZlUmV2aWV3ZXIoJyArIGkgKyAnKSI+RW50ZmVybmVuPC9idXR0 b24+JyArCiAgICAgICAgICAgICc8L2Rpdj4nOwogICAgICAgIH0pOwogICAgICAgIGh0bWwgKz0g JzwvZGl2Pic7CgogICAgICAgIC8vIC0tLSBSZXZpZXdlci1Gb3JtdWxhcjogRmVsZGVyIGxpbmtz LCBLYXRlZ29yaWVuIHJlY2h0cyAtLS0KICAgICAgICB2YXIgaXNFZGl0aW5nID0gdGhpcy5fZWRp dGluZ1Jldmlld2VySW5kZXggPj0gMDsKICAgICAgICB2YXIgZWRpdERhdGEgPSBpc0VkaXRpbmcg PyBnb3YucmV2aWV3ZXJzW3RoaXMuX2VkaXRpbmdSZXZpZXdlckluZGV4XSA6IG51bGw7CiAgICAg ICAgdmFyIGZvcm1UaXRsZSA9IGlzRWRpdGluZyA/ICdSZXZpZXdlciBiZWFyYmVpdGVuJyA6ICdS ZXZpZXdlciBoaW56dWbDvGdlbic7CiAgICAgICAgdmFyIGZvcm1CdG5MYWJlbCA9IGlzRWRpdGlu ZyA/ICdTcGVpY2hlcm4nIDogJ0hpbnp1ZsO8Z2VuJzsKCiAgICAgICAgaHRtbCArPSAnPGRpdiBj bGFzcz0iZ292LXNlY3Rpb24iIGlkPSJnb3ZBZGRTZWN0aW9uIj4nICsKICAgICAgICAgICAgJzxk aXYgY2xhc3M9Imdvdi1zZWN0aW9uLXRpdGxlIj4nICsgZm9ybVRpdGxlICsgJzwvZGl2PicgKwog ICAgICAgICAgICAnPGRpdiBjbGFzcz0iZ292LXR3by1jb2wiIHN0eWxlPSJnYXA6MTJweDthbGln bi1pdGVtczpzdHJldGNoOyI+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBzdHlsZT0iZGlzcGxh eTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsiPicgKwogICAgICAgICAgICAgICAgICAgICc8 ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjZweDsiPjxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEx cHg7Y29sb3I6dmFyKC0tdGV4dC1zZWNvbmRhcnkpO2ZvbnQtd2VpZ2h0OjYwMDsiPk5XLUtlbm51 bmc8L2xhYmVsPicgKwogICAgICAgICAgICAgICAgICAgICAgICAnPGlucHV0IHR5cGU9InRleHQi IGlkPSJnb3ZBZGRVc2VyIiBwbGFjZWhvbGRlcj0iei5CLiBudzEyMzQ1IiB2YWx1ZT0iJyArIChl ZGl0RGF0YSA/IERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoZWRpdERhdGEudXNlcm5hbWUpIDogJycp ICsgJyIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo1cHggOHB4O2JvcmRlcjoxcHggc29saWQg dmFyKC0tYm9yZGVyLXN0cm9uZyk7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjEzcHg7bWFy Z2luLXRvcDoycHg7YmFja2dyb3VuZDp2YXIoLS1iZy1pbnB1dCk7Y29sb3I6dmFyKC0tdGV4dC1w cmltYXJ5KTsiPjwvZGl2PicgKwogICAgICAgICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJtYXJn aW4tYm90dG9tOjZweDsiPjxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0t dGV4dC1zZWNvbmRhcnkpO2ZvbnQtd2VpZ2h0OjYwMDsiPkFuemVpZ2VuYW1lPC9sYWJlbD4nICsK ICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZ292QWRkTmFt ZSIgcGxhY2Vob2xkZXI9IlZvci0gdW5kIE5hY2huYW1lIiB2YWx1ZT0iJyArIChlZGl0RGF0YSA/ IERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoZWRpdERhdGEuZGlzcGxheU5hbWUgfHwgJycpIDogJycp ICsgJyIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo1cHggOHB4O2JvcmRlcjoxcHggc29saWQg dmFyKC0tYm9yZGVyLXN0cm9uZyk7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjEzcHg7bWFy Z2luLXRvcDoycHg7YmFja2dyb3VuZDp2YXIoLS1iZy1pbnB1dCk7Y29sb3I6dmFyKC0tdGV4dC1w cmltYXJ5KTsiPjwvZGl2PicgKwogICAgICAgICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJtYXJn aW4tYm90dG9tOjZweDsiPjxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0t dGV4dC1zZWNvbmRhcnkpO2ZvbnQtd2VpZ2h0OjYwMDsiPk9yZ2FuaXNhdGlvbnNlaW5oZWl0PC9s YWJlbD4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0i Z292QWRkT0UiIHBsYWNlaG9sZGVyPSJic3AuIEZ1ZVN0IFYsIFZELUFQLi4uIiB2YWx1ZT0iJyAr IChlZGl0RGF0YSA/IERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoZWRpdERhdGEub3JnYW5pc2F0aW9u c2VpbmhlaXQgfHwgJycpIDogJycpICsgJyIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo1cHgg OHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLXN0cm9uZyk7Ym9yZGVyLXJhZGl1czo0 cHg7Zm9udC1zaXplOjEzcHg7bWFyZ2luLXRvcDoycHg7YmFja2dyb3VuZDp2YXIoLS1iZy1pbnB1 dCk7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5KTsiPjwvZGl2PicgKwogICAgICAgICAgICAgICAg ICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjZweDttYXJnaW4tdG9wOjRweDtqdXN0 aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7Ij4nICsKICAgICAgICAgICAgICAgICAgICAgICAgKGlzRWRp dGluZyA/ICc8YnV0dG9uIGNsYXNzPSJnb3YtY2FuY2VsLWJ0biIgc3R5bGU9InBhZGRpbmc6NnB4 IDEycHg7IiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2UuY2FuY2VsRWRpdCgpIj5BYmJyZWNoZW48 L2J1dHRvbj4nIDogJycpICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9 Imdvdi1hZGQtYnRuIiBzdHlsZT0icGFkZGluZzo2cHggMTZweDsiIG9uY2xpY2s9IkRyaXZlR292 ZXJuYW5jZS5hZGRSZXZpZXdlcigpIj4nICsgZm9ybUJ0bkxhYmVsICsgJzwvYnV0dG9uPicgKwog ICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgICAgICc8L2Rpdj4nICsK ICAgICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246 Y29sdW1uOyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCBzdHlsZT0iZm9udC1zaXpl OjExcHg7Y29sb3I6dmFyKC0tdGV4dC1zZWNvbmRhcnkpO2ZvbnQtd2VpZ2h0OjYwMDsiPkthdGVn b3JpZW4gKE1laHJmYWNoYXVzd2FobCBtaXQgU3RyZytLbGljayk8L2xhYmVsPicgKwogICAgICAg ICAgICAgICAgICAgICc8c2VsZWN0IGlkPSJnb3ZBZGRLYXQiIG11bHRpcGxlIHN0eWxlPSJ3aWR0 aDoxMDAlO2ZsZXg6MTttYXJnaW4tdG9wOjJweDtwYWRkaW5nOjRweDtib3JkZXI6MXB4IHNvbGlk IHZhcigtLWJvcmRlci1zdHJvbmcpO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtc2l6ZToxM3B4O2Jh Y2tncm91bmQ6dmFyKC0tYmctaW5wdXQpO2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Ij4nOwog ICAgICAgIHZhciBlZGl0S2F0cyA9IGVkaXREYXRhID8gKGVkaXREYXRhLmthdGVnb3JpZW4gfHwg W10pIDogW107CiAgICAgICAga2F0ZWdvcmllbi5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKICAgICAg ICAgICAgdmFyIHNlbCA9IGVkaXRLYXRzLmluY2x1ZGVzKGspID8gJyBzZWxlY3RlZCcgOiAnJzsK ICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT0iJyArIERyaXZlUG9ydGFsLmVzY2Fw ZUF0dHIoaykgKyAnIicgKyBzZWwgKyAnPicgKyBEcml2ZVBvcnRhbC5lc2NhcGVIVE1MKGspICsg Jzwvb3B0aW9uPic7CiAgICAgICAgfSk7CiAgICAgICAgaHRtbCArPSAnPC9zZWxlY3Q+PC9kaXY+ PC9kaXY+PC9kaXY+JzsKCiAgICAgICAgLy8gLS0tIEthdGVnb3JpZW4gKyBFaW5zdGVsbHVuZ2Vu IGluIGVpbmVyIGdlbWVpbnNhbWVuIEJveCAtLS0KICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNz PSJnb3Ytc2VjdGlvbiI+JzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJnb3YtdHdvLWNv bCBjYXQtc2V0dGluZ3MiIHN0eWxlPSJhbGlnbi1pdGVtczpzdHJldGNoOyI+JzsKCiAgICAgICAg Ly8gS2F0ZWdvcmllbiAobGlua2UgU3BhbHRlKQogICAgICAgIHZhciBoaWRkZW5LYXRzID0gRHJp dmVGUy5jb25maWcuaGlkZGVuS2F0ZWdvcmllbiB8fCBbXTsKICAgICAgICBodG1sICs9ICc8ZGl2 IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uOyI+JyArCiAgICAgICAg ICAgICc8ZGl2IGNsYXNzPSJnb3Ytc2VjdGlvbi10aXRsZSIgdGl0bGU9IkthdGVnb3JpZW4gc2lu ZCBkaWUgRmFjaGJlcmVpY2hlLCBpbiBkaWUgQXJ0aWtlbCBlaW5zb3J0aWVydCB3ZXJkZW4uIER1 IGthbm5zdCBLYXRlZ29yaWVuIGF1c2JsZW5kZW4gKHVuc2ljaHRiYXIgZsO8ciBOdXR6ZXIpIG9k ZXIgZ2FueiBlbnRmZXJuZW4uIj5LYXRlZ29yaWVuICgnICsga2F0ZWdvcmllbi5sZW5ndGggKyAo aGlkZGVuS2F0cy5sZW5ndGggPiAwID8gJywgJyArIGhpZGRlbkthdHMubGVuZ3RoICsgJyBhdXNn ZWJsZW5kZXQnIDogJycpICsgJyk8L2Rpdj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9Imdv di1jYXQtbGlzdCIgc3R5bGU9ImZsZXg6MTsiPic7CiAgICAgICAga2F0ZWdvcmllbi5mb3JFYWNo KGZ1bmN0aW9uKGthdCwgaSkgewogICAgICAgICAgICB2YXIgZG9jQ291bnQgPSBEcml2ZUZTLmRv Y3VtZW50cy5maWx0ZXIoZnVuY3Rpb24oZCl7IHJldHVybiBkLmthdGVnb3JpZSA9PT0ga2F0OyB9 KS5sZW5ndGg7CiAgICAgICAgICAgIHZhciBpc0hpZGRlbiA9IGhpZGRlbkthdHMuaW5jbHVkZXMo a2F0KTsKICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iZ292LWNhdC1pdGVtJyArIChp c0hpZGRlbiA/ICcgaGlkZGVuLWNhdCcgOiAnJykgKyAnIj4nICsKICAgICAgICAgICAgICAgICc8 c3BhbiBjbGFzcz0iZ292LWNhdC1uYW1lIj4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChrYXQp ICsgJzwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEx cHg7Y29sb3I6Izg4ODsiPicgKyBkb2NDb3VudCArICcgRG9rLjwvc3Bhbj4nICsKICAgICAgICAg ICAgICAgIChpc0hpZGRlbgogICAgICAgICAgICAgICAgICAgID8gJzxidXR0b24gY2xhc3M9InNo b3ciIG9uY2xpY2s9IkRyaXZlR292ZXJuYW5jZS5zaG93Q2F0ZWdvcnkoJyArIGkgKyAnKSI+RWlu YmxlbmRlbjwvYnV0dG9uPicKICAgICAgICAgICAgICAgICAgICA6ICc8YnV0dG9uIGNsYXNzPSJo aWRlIiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2UuaGlkZUNhdGVnb3J5KCcgKyBpICsgJykiPkF1 c2JsZW5kZW48L2J1dHRvbj4nKSArCiAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0icmVt b3ZlIiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2UucmVtb3ZlQ2F0ZWdvcnkoJyArIGkgKyAnKSI+ RW50ZmVybmVuPC9idXR0b24+JyArCiAgICAgICAgICAgICc8L2Rpdj4nOwogICAgICAgIH0pOwog ICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7CiAgICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT0iYm9y ZGVyLXRvcDoycHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTttYXJnaW4tdG9wOjhweDtwYWRk aW5nLXRvcDoxMHB4OyI+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJnb3YtY2F0LWFkZC1y b3ciPicgKwogICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZ292TmV3Q2F0 IiBwbGFjZWhvbGRlcj0iTmV1ZSBLYXRlZ29yaWUuLi4iPicgKwogICAgICAgICAgICAgICAgJzxi dXR0b24gY2xhc3M9Imdvdi1hZGQtYnRuIiBzdHlsZT0icGFkZGluZzo2cHggMTRweDsiIG9uY2xp Y2s9IkRyaXZlR292ZXJuYW5jZS5hZGRDYXRlZ29yeSgpIj5IaW56dWbDvGdlbjwvYnV0dG9uPicg KwogICAgICAgICAgICAnPC9kaXY+PC9kaXY+PC9kaXY+JzsKCiAgICAgICAgLy8gRWluc3RlbGx1 bmdlbiAocmVjaHRlIFNwYWx0ZSkKICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPSJkaXNwbGF5 OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlci1sZWZ0OjFweCBzb2xpZCB2YXIoLS1i b3JkZXItbGlnaHQpO3BhZGRpbmctbGVmdDoxNHB4OyI+JyArCiAgICAgICAgICAgICc8ZGl2IGNs YXNzPSJnb3Ytc2VjdGlvbi10aXRsZSI+RWluc3RlbGx1bmdlbjwvZGl2PicgKwogICAgICAgICAg ICAnPGxhYmVsIGNsYXNzPSJnb3Ytc2V0dGluZy1yb3ciIHRpdGxlPSJXZW5uIGFrdGl2LCBtw7xz c2VuIG5ldWUgQXJ0aWtlbCBlcnN0IHZvbiBlaW5lbSBSZXZpZXdlciBmcmVpZ2VnZWJlbiB3ZXJk ZW4sIGJldm9yIHNpZSBmw7xyIGFsbGUgc2ljaHRiYXIgc2luZC4iPjxpbnB1dCB0eXBlPSJjaGVj a2JveCIgaWQ9ImdvdlJlcU5ldyIgJyArIChnb3Yuc2V0dGluZ3MucmVxdWlyZUFwcHJvdmFsRm9y TmV3ID8gJ2NoZWNrZWQnIDogJycpICsgJyBvbmNoYW5nZT0iRHJpdmVHb3Zlcm5hbmNlLnNhdmVT ZXR0aW5ncygpIj4gRnJlaWdhYmUgZsO8ciBuZXVlIEFydGlrZWw8L2xhYmVsPicgKwogICAgICAg ICAgICAnPGxhYmVsIGNsYXNzPSJnb3Ytc2V0dGluZy1yb3ciIHRpdGxlPSJXZW5uIGFrdGl2LCBt dXNzIGplZGUgQmVhcmJlaXR1bmcgZWluZXMgYmVzdGVoZW5kZW4gQXJ0aWtlbHMgZXJuZXV0IGZy ZWlnZWdlYmVuIHdlcmRlbi4iPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImdvdlJlcUVkaXQi ICcgKyAoZ292LnNldHRpbmdzLnJlcXVpcmVBcHByb3ZhbEZvckVkaXQgPyAnY2hlY2tlZCcgOiAn JykgKyAnIG9uY2hhbmdlPSJEcml2ZUdvdmVybmFuY2Uuc2F2ZVNldHRpbmdzKCkiPiBGcmVpZ2Fi ZSBuYWNoIEJlYXJiZWl0dW5nPC9sYWJlbD4nICsKICAgICAgICAgICAgJzxsYWJlbCBjbGFzcz0i Z292LXNldHRpbmctcm93IiB0aXRsZT0iWmVpZ3QgdW50ZXIgamVkZW0gQXJ0aWtlbCBhbiwgd2Vy IGRhcmFuIG1pdGdld2lya3QgaGF0IChBdXRvciwgUmVkYWt0aW9uLCBLb3JyZWt0dXIgdXN3Liku Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJnb3ZTaG93Q29udHJpYiIgJyArIChnb3Yuc2V0 dGluZ3Muc2hvd0NvbnRyaWJ1dG9ycyAhPT0gZmFsc2UgPyAnY2hlY2tlZCcgOiAnJykgKyAnIG9u Y2hhbmdlPSJEcml2ZUdvdmVybmFuY2Uuc2F2ZVNldHRpbmdzKCkiPiBNaXR3aXJrZW5kZSBhbnpl aWdlbjwvbGFiZWw+JyArCiAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9Imdvdi1zZXR0aW5nLXJv dyIgdGl0bGU9IlplaWd0IHVudGVyIGplZGVtIEFydGlrZWwgZGllIEhpc3RvcmllIGFsbGVyIEZy ZWlnYWJlbiB1bmQgQWJsZWhudW5nZW4gYW4uIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJn b3ZTaG93UmV2aWV3SGlzdCIgJyArIChnb3Yuc2V0dGluZ3Muc2hvd1Jldmlld0hpc3RvcnkgIT09 IGZhbHNlID8gJ2NoZWNrZWQnIDogJycpICsgJyBvbmNoYW5nZT0iRHJpdmVHb3Zlcm5hbmNlLnNh dmVTZXR0aW5ncygpIj4gUHLDvGZ1bmdzdmVybGF1ZiBhbnplaWdlbjwvbGFiZWw+JyArCiAgICAg ICAgICAgICc8ZGl2IGNsYXNzPSJnb3Ytc2V0dGluZy1yb3ciIHN0eWxlPSJkaXNwbGF5OmZsZXg7 YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDo4cHg7 IiB0aXRsZT0iUGZsaWNodCA9IEplZGVyIEFydGlrZWwgYnJhdWNodCBtaW5kZXN0ZW5zIGVpbiBT Y2hsYWd3b3J0LiBPcHRpb25hbCA9IFNjaGxhZ3fDtnJ0ZXIgd2VyZGVuIHZvcmdlc2NobGFnZW4s IHNpbmQgYWJlciBuaWNodCBuw7Z0aWcuIERlYWt0aXZpZXJ0ID0gS2VpbmUgU2NobGFnd8O2cnRl ci4iPicgKwogICAgICAgICAgICAgICAgJzxsYWJlbCBmb3I9ImdvdktleXdvcmRNb2RlIj5TY2hs YWd3w7ZydGVyOjwvbGFiZWw+JyArCiAgICAgICAgICAgICAgICAnPHNlbGVjdCBpZD0iZ292S2V5 d29yZE1vZGUiIG9uY2hhbmdlPSJEcml2ZUdvdmVybmFuY2Uuc2F2ZVNldHRpbmdzKCkiIHN0eWxl PSJwYWRkaW5nOjRweCA4cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIo LS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tYmctaW5wdXQpO2NvbG9yOnZhcigtLXRl eHQtcHJpbWFyeSk7Zm9udC1zaXplOjEzcHg7bWluLXdpZHRoOjEzMHB4OyI+JyArCiAgICAgICAg ICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9InJlcXVpcmVkIicgKyAoKGdvdi5zZXR0aW5ncy5r ZXl3b3JkTW9kZSB8fCAncmVxdWlyZWQnKSA9PT0gJ3JlcXVpcmVkJyA/ICcgc2VsZWN0ZWQnIDog JycpICsgJz5QZmxpY2h0PC9vcHRpb24+JyArCiAgICAgICAgICAgICAgICAgICAgJzxvcHRpb24g dmFsdWU9Im9wdGlvbmFsIicgKyAoZ292LnNldHRpbmdzLmtleXdvcmRNb2RlID09PSAnb3B0aW9u YWwnID8gJyBzZWxlY3RlZCcgOiAnJykgKyAnPk9wdGlvbmFsPC9vcHRpb24+JyArCiAgICAgICAg ICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9ImRpc2FibGVkIicgKyAoZ292LnNldHRpbmdzLmtl eXdvcmRNb2RlID09PSAnZGlzYWJsZWQnID8gJyBzZWxlY3RlZCcgOiAnJykgKyAnPkRlYWt0aXZp ZXJ0PC9vcHRpb24+JyArCiAgICAgICAgICAgICAgICAnPC9zZWxlY3Q+JyArCiAgICAgICAgICAg ICc8L2Rpdj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9Imdvdi1zZXR0aW5nLXJvdyIgc3R5 bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNl LWJldHdlZW47Z2FwOjhweDsiIHRpdGxlPSJQZmxpY2h0ID0gUmV2aWV3ZXIgbcO8c3NlbiBiZWkg QWJsZWhudW5nIGltbWVyIGVpbmUgQmVncsO8bmR1bmcgc2NocmVpYmVuLiBPcHRpb25hbCA9IEJl Z3LDvG5kdW5nIHdpcmQgZW1wZm9obGVuLiBOZWluID0gS2VpbmUgQmVncsO8bmR1bmcgbsO2dGln LiI+JyArCiAgICAgICAgICAgICAgICAnPGxhYmVsIGZvcj0iZ292UmVqZWN0aW9uTW9kZSI+QWJs ZWhudW5nc2JlZ3LDvG5kdW5nOjwvbGFiZWw+JyArCiAgICAgICAgICAgICAgICAnPHNlbGVjdCBp ZD0iZ292UmVqZWN0aW9uTW9kZSIgb25jaGFuZ2U9IkRyaXZlR292ZXJuYW5jZS5zYXZlU2V0dGlu Z3MoKSIgc3R5bGU9InBhZGRpbmc6NHB4IDhweDtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4 IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1iZy1pbnB1dCk7Y29s b3I6dmFyKC0tdGV4dC1wcmltYXJ5KTtmb250LXNpemU6MTNweDttaW4td2lkdGg6MTMwcHg7Ij4n ICsKICAgICAgICAgICAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT0icmVxdWlyZWQiJyArICgoZ292 LnNldHRpbmdzLnJlamVjdGlvblJlYXNvbk1vZGUgfHwgJ3JlcXVpcmVkJykgPT09ICdyZXF1aXJl ZCcgPyAnIHNlbGVjdGVkJyA6ICcnKSArICc+UGZsaWNodDwvb3B0aW9uPicgKwogICAgICAgICAg ICAgICAgICAgICc8b3B0aW9uIHZhbHVlPSJvcHRpb25hbCInICsgKGdvdi5zZXR0aW5ncy5yZWpl Y3Rpb25SZWFzb25Nb2RlID09PSAnb3B0aW9uYWwnID8gJyBzZWxlY3RlZCcgOiAnJykgKyAnPk9w dGlvbmFsPC9vcHRpb24+JyArCiAgICAgICAgICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9ImRp c2FibGVkIicgKyAoZ292LnNldHRpbmdzLnJlamVjdGlvblJlYXNvbk1vZGUgPT09ICdkaXNhYmxl ZCcgPyAnIHNlbGVjdGVkJyA6ICcnKSArICc+TmVpbjwvb3B0aW9uPicgKwogICAgICAgICAgICAg ICAgJzwvc2VsZWN0PicgKwogICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICc8ZGl2 IGNsYXNzPSJnb3Ytc2V0dGluZy1yb3ciIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6 Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDo4cHg7IiB0aXRsZT0iV2Vu biBha3RpdmllcnQsIGVya2VubnQgZGFzIFBvcnRhbCBhdXRvbWF0aXNjaCBWZXJ3ZWlzZSBhdWYg YW5kZXJlIEFydGlrZWwgaW0gVGV4dCB1bmQgemVpZ3QgYmVpIE1vdXNlb3ZlciBlaW5lIFZvcnNj aGF1IGFuLiI+JyArCiAgICAgICAgICAgICAgICAnPGxhYmVsIGZvcj0iZ292Q3Jvc3NsaW5rTW9k ZSI+Q3Jvc3NsaW5raW5nOjwvbGFiZWw+JyArCiAgICAgICAgICAgICAgICAnPHNlbGVjdCBpZD0i Z292Q3Jvc3NsaW5rTW9kZSIgb25jaGFuZ2U9IkRyaXZlR292ZXJuYW5jZS5zYXZlU2V0dGluZ3Mo KSIgc3R5bGU9InBhZGRpbmc6NHB4IDhweDtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4IHNv bGlkIHZhcigtLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1iZy1pbnB1dCk7Y29sb3I6 dmFyKC0tdGV4dC1wcmltYXJ5KTtmb250LXNpemU6MTNweDttaW4td2lkdGg6MTMwcHg7Ij4nICsK ICAgICAgICAgICAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT0iZW5hYmxlZCInICsgKChnb3Yuc2V0 dGluZ3MuY3Jvc3NsaW5rTW9kZSB8fCAnZW5hYmxlZCcpID09PSAnZW5hYmxlZCcgPyAnIHNlbGVj dGVkJyA6ICcnKSArICc+QWt0aXZpZXJ0PC9vcHRpb24+JyArCiAgICAgICAgICAgICAgICAgICAg JzxvcHRpb24gdmFsdWU9ImRpc2FibGVkIicgKyAoZ292LnNldHRpbmdzLmNyb3NzbGlua01vZGUg PT09ICdkaXNhYmxlZCcgPyAnIHNlbGVjdGVkJyA6ICcnKSArICc+RGVha3RpdmllcnQ8L29wdGlv bj4nICsKICAgICAgICAgICAgICAgICc8L3NlbGVjdD4nICsKICAgICAgICAgICAgJzwvZGl2Picg KwogICAgICAgICc8L2Rpdj4nOyAvLyBFbmRlIEVpbnN0ZWxsdW5nZW4tU3BhbHRlCgogICAgICAg IGh0bWwgKz0gJzwvZGl2Pic7IC8vIEVuZGUgZ292LXR3by1jb2wKICAgICAgICBodG1sICs9ICc8 L2Rpdj4nOyAvLyBFbmRlIGdvdi1zZWN0aW9uIChLYXRlZ29yaWVuK0VpbnN0ZWxsdW5nZW4pCgog ICAgICAgIC8vIC0tLSBTY2hsYWd3w7ZydGVyIHZlcndhbHRlbiAtLS0KICAgICAgICBodG1sICs9 ICc8ZGl2IGNsYXNzPSJnb3Ytc2VjdGlvbiI+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJn b3Ytc2VjdGlvbi10aXRsZSIgdGl0bGU9IlNjaGxhZ3fDtnJ0ZXIgaGVsZmVuIGJlaW0gU3VjaGVu IHVuZCBGaWx0ZXJuIHZvbiBBcnRpa2Vsbi4gSGllciBrYW5uc3QgZHUgYmVzdGVoZW5kZSBTY2hs YWd3w7ZydGVyIHVtYmVuZW5uZW4sIHp1c2FtbWVuZsO8aHJlbiBvZGVyIGzDtnNjaGVuLiI+U2No bGFnd8O2cnRlciB2ZXJ3YWx0ZW48L2Rpdj4nICsKICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImZv bnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpO21hcmdpbi1ib3R0b206OHB4OyI+ S2xpY2tlIGF1ZiBlaW4gU2NobGFnd29ydCwgdW0gZXMgenUgYmVhcmJlaXRlbiBvZGVyIHp1IGzD tnNjaGVuLiBEaWUgWmFobCB6ZWlndCwgaW4gd2llIHZpZWxlbiBBcnRpa2VsbiBlcyB2ZXJ3ZW5k ZXQgd2lyZC48L2Rpdj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9Imdvdi1rdy1saXN0IiBp ZD0iZ292S3dMaXN0Ij4nOwogICAgICAgIHZhciBhbGxLdyA9IERyaXZlRWRpdG9yLl9nZXRBbGxL bm93bktleXdvcmRzKCk7CiAgICAgICAgYWxsS3cuZm9yRWFjaChmdW5jdGlvbihrdykgewogICAg ICAgICAgICB2YXIgY291bnQgPSBEcml2ZUZTLmRvY3VtZW50cy5maWx0ZXIoZnVuY3Rpb24oZCkg ewogICAgICAgICAgICAgICAgcmV0dXJuIGQuc2NobGFnd29lcnRlciAmJiBkLnNjaGxhZ3dvZXJ0 ZXIuaW5jbHVkZXMoa3cpOwogICAgICAgICAgICB9KS5sZW5ndGg7CiAgICAgICAgICAgIGh0bWwg Kz0gJzxzcGFuIGNsYXNzPSJnb3Yta3ctcGlsbCIgb25jbGljaz0iRHJpdmVHb3Zlcm5hbmNlLm9w ZW5Ld01hbmFnZShcJycgKyBEcml2ZVBvcnRhbC5lc2NhcGVBdHRyKGt3KSArICdcJykiPicgKwog ICAgICAgICAgICAgICAgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChrdykgKyAnIDxzcGFuIGNsYXNz PSJrdy1jb3VudCI+KCcgKyBjb3VudCArICcpPC9zcGFuPjwvc3Bhbj4nOwogICAgICAgIH0pOwog ICAgICAgIGh0bWwgKz0gJzwvZGl2PjwvZGl2Pic7CgogICAgICAgIGJvZHkuaW5uZXJIVE1MID0g aHRtbDsKICAgIH0sCgogICAgYXN5bmMgYWRkUmV2aWV3ZXIoKSB7CiAgICAgICAgY29uc3QgdXNl cm5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ292QWRkVXNlcicpLnZhbHVlLnRyaW0o KTsKICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdn b3ZBZGROYW1lJykudmFsdWUudHJpbSgpIHx8IHVzZXJuYW1lOwogICAgICAgIGNvbnN0IG9yZ2Fu aXNhdGlvbnNlaW5oZWl0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvdkFkZE9FJykudmFs dWUudHJpbSgpOwogICAgICAgIGNvbnN0IGthdFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRC eUlkKCdnb3ZBZGRLYXQnKTsKICAgICAgICBjb25zdCBrYXRlZ29yaWVuID0gQXJyYXkuZnJvbShr YXRTZWxlY3Quc2VsZWN0ZWRPcHRpb25zKS5tYXAobyA9PiBvLnZhbHVlKTsKCiAgICAgICAgaWYg KCF1c2VybmFtZSkgeyBzaG93VG9hc3QoJ05XLUtlbm51bmcgZXJmb3JkZXJsaWNoJywgJ3dhcm5p bmcnKTsgcmV0dXJuOyB9CiAgICAgICAgaWYgKGthdGVnb3JpZW4ubGVuZ3RoID09PSAwKSB7IHNo b3dUb2FzdCgnTWluZGVzdGVucyBlaW5lIEthdGVnb3JpZSB3w6RobGVuJywgJ3dhcm5pbmcnKTsg cmV0dXJuOyB9CgogICAgICAgIGlmICghdGhpcy5kYXRhKSB0aGlzLmRhdGEgPSB7IHZlcnNpb246 ICcxLjAnLCBzdXBlclVzZXJzOiBbXSwgcmV2aWV3ZXJzOiBbXSwgc2V0dGluZ3M6IHt9IH07CiAg ICAgICAgY29uc3QgcmV2aWV3ZXIgPSB7IHVzZXJuYW1lOiB1c2VybmFtZSwgZG9tYWluOiAnKics IGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSwga2F0ZWdvcmllbjoga2F0ZWdvcmllbiB9OwogICAg ICAgIGlmIChvcmdhbmlzYXRpb25zZWluaGVpdCkgcmV2aWV3ZXIub3JnYW5pc2F0aW9uc2Vpbmhl aXQgPSBvcmdhbmlzYXRpb25zZWluaGVpdDsKCiAgICAgICAgaWYgKHRoaXMuX2VkaXRpbmdSZXZp ZXdlckluZGV4ID49IDApIHsKICAgICAgICAgICAgY29uc3QgZWRpdElkeCA9IHRoaXMuX2VkaXRp bmdSZXZpZXdlckluZGV4OwogICAgICAgICAgICBjb25zdCBiYWNrdXAgPSB7IC4uLnRoaXMuZGF0 YS5yZXZpZXdlcnNbZWRpdElkeF0gfTsKICAgICAgICAgICAgdGhpcy5kYXRhLnJldmlld2Vyc1tl ZGl0SWR4XSA9IHJldmlld2VyOwogICAgICAgICAgICB0aGlzLl9lZGl0aW5nUmV2aWV3ZXJJbmRl eCA9IC0xOwogICAgICAgICAgICBjb25zdCBvayA9IGF3YWl0IHRoaXMuc2F2ZUdvdmVybmFuY2Uo KTsKICAgICAgICAgICAgaWYgKG9rID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgdGhpcy5k YXRhLnJldmlld2Vyc1tlZGl0SWR4XSA9IGJhY2t1cDsKICAgICAgICAgICAgICAgIHJldHVybjsK ICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnJlbmRlckFkbWluKCk7CiAgICAgICAgICAg IHNob3dUb2FzdChkaXNwbGF5TmFtZSArICcgYWt0dWFsaXNpZXJ0JywgJ3N1Y2Nlc3MnKTsKICAg ICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmRhdGEucmV2aWV3ZXJzLnB1c2gocmV2aWV3 ZXIpOwogICAgICAgICAgICBjb25zdCBvayA9IGF3YWl0IHRoaXMuc2F2ZUdvdmVybmFuY2UoKTsK ICAgICAgICAgICAgaWYgKG9rID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgdGhpcy5kYXRh LnJldmlld2Vycy5wb3AoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQog ICAgICAgICAgICB0aGlzLnJlbmRlckFkbWluKCk7CiAgICAgICAgICAgIHNob3dUb2FzdChkaXNw bGF5TmFtZSArICcgYWxzIFJldmlld2VyIGhpbnp1Z2Vmw7xndCcsICdzdWNjZXNzJyk7CiAgICAg ICAgfQogICAgfSwKCiAgICBlZGl0UmV2aWV3ZXIoaW5kZXgpIHsKICAgICAgICBpZiAoIXRoaXMu ZGF0YSB8fCAhdGhpcy5kYXRhLnJldmlld2Vyc1tpbmRleF0pIHJldHVybjsKICAgICAgICB0aGlz Ll9lZGl0aW5nUmV2aWV3ZXJJbmRleCA9IGluZGV4OwogICAgICAgIHRoaXMucmVuZGVyQWRtaW4o KTsKICAgICAgICBjb25zdCBzZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvdkFk ZFNlY3Rpb24nKTsKICAgICAgICBpZiAoc2VjdGlvbikgc2VjdGlvbi5zY3JvbGxJbnRvVmlldyh7 IGJlaGF2aW9yOiAnc21vb3RoJyB9KTsKICAgIH0sCgogICAgY2FuY2VsRWRpdCgpIHsKICAgICAg ICB0aGlzLl9lZGl0aW5nUmV2aWV3ZXJJbmRleCA9IC0xOwogICAgICAgIHRoaXMucmVuZGVyQWRt aW4oKTsKICAgIH0sCgogICAgYXN5bmMgcmVtb3ZlUmV2aWV3ZXIoaW5kZXgpIHsKICAgICAgICBp ZiAoIXRoaXMuZGF0YSB8fCAhdGhpcy5kYXRhLnJldmlld2Vyc1tpbmRleF0pIHJldHVybjsKICAg ICAgICBjb25zdCBuYW1lID0gdGhpcy5kYXRhLnJldmlld2Vyc1tpbmRleF0uZGlzcGxheU5hbWUg fHwgdGhpcy5kYXRhLnJldmlld2Vyc1tpbmRleF0udXNlcm5hbWU7CiAgICAgICAgaWYgKCFjb25m aXJtKCdSZXZpZXdlciAiJyArIG5hbWUgKyAnIiBlbnRmZXJuZW4/JykpIHJldHVybjsKICAgICAg ICBjb25zdCBiYWNrdXAgPSB0aGlzLmRhdGEucmV2aWV3ZXJzW2luZGV4XTsKICAgICAgICB0aGlz LmRhdGEucmV2aWV3ZXJzLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAgY29uc3Qgb2sgPSBhd2Fp dCB0aGlzLnNhdmVHb3Zlcm5hbmNlKCk7CiAgICAgICAgaWYgKG9rID09PSBmYWxzZSkgewogICAg ICAgICAgICB0aGlzLmRhdGEucmV2aWV3ZXJzLnNwbGljZShpbmRleCwgMCwgYmFja3VwKTsKICAg ICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlbmRlckFkbWluKCk7CiAg ICAgICAgc2hvd1RvYXN0KG5hbWUgKyAnIGVudGZlcm50JywgJ3N1Y2Nlc3MnKTsKICAgIH0sCgog ICAgYXN5bmMgYWRkU3VwZXJVc2VyKCkgewogICAgICAgIHZhciB1c2VybmFtZSA9IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCdnb3ZTVVVzZXInKS52YWx1ZS50cmltKCk7CiAgICAgICAgaWYgKCF1 c2VybmFtZSkgeyBzaG93VG9hc3QoJ05XLUtlbm51bmcgZXJmb3JkZXJsaWNoJywgJ3dhcm5pbmcn KTsgcmV0dXJuOyB9CiAgICAgICAgdmFyIGRpc3BsYXlOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoJ2dvdlNVTmFtZScpLnZhbHVlLnRyaW0oKSB8fCB1c2VybmFtZTsKICAgICAgICB2YXIg b2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ292U1VPRScpLnZhbHVlLnRyaW0oKTsKICAg ICAgICBpZiAoIXRoaXMuZGF0YS5zdXBlclVzZXJzKSB0aGlzLmRhdGEuc3VwZXJVc2VycyA9IFtd OwogICAgICAgIHRoaXMuZGF0YS5zdXBlclVzZXJzLnB1c2goeyB1c2VybmFtZTogdXNlcm5hbWUs IGRvbWFpbjogJyonLCBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWUsIG9yZ2FuaXNhdGlvbnNlaW5o ZWl0OiBvZSB9KTsKICAgICAgICBjb25zdCBvayA9IGF3YWl0IHRoaXMuc2F2ZUdvdmVybmFuY2Uo KTsKICAgICAgICBpZiAob2sgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRoaXMuZGF0YS5zdXBl clVzZXJzLnBvcCgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMu cmVuZGVyQWRtaW4oKTsKICAgICAgICBzaG93VG9hc3QoZGlzcGxheU5hbWUgKyAnIGFscyBTdXBl clVzZXIgaGluenVnZWbDvGd0JywgJ3N1Y2Nlc3MnKTsKICAgIH0sCgogICAgYXN5bmMgcmVtb3Zl U3VwZXJVc2VyKGluZGV4KSB7CiAgICAgICAgaWYgKHRoaXMuZGF0YS5zdXBlclVzZXJzLmxlbmd0 aCA8PSAxKSB7IHNob3dUb2FzdCgnTWluZGVzdGVucyBlaW4gU3VwZXJVc2VyIGVyZm9yZGVybGlj aCcsICd3YXJuaW5nJyk7IHJldHVybjsgfQogICAgICAgIGlmICghY29uZmlybSgnU3VwZXJVc2Vy IHdpcmtsaWNoIGVudGZlcm5lbj8nKSkgcmV0dXJuOwogICAgICAgIGNvbnN0IGJhY2t1cCA9IHRo aXMuZGF0YS5zdXBlclVzZXJzW2luZGV4XTsKICAgICAgICB0aGlzLmRhdGEuc3VwZXJVc2Vycy5z cGxpY2UoaW5kZXgsIDEpOwogICAgICAgIGNvbnN0IG9rID0gYXdhaXQgdGhpcy5zYXZlR292ZXJu YW5jZSgpOwogICAgICAgIGlmIChvayA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhpcy5kYXRh LnN1cGVyVXNlcnMuc3BsaWNlKGluZGV4LCAwLCBiYWNrdXApOwogICAgICAgICAgICByZXR1cm47 CiAgICAgICAgfQogICAgICAgIHRoaXMucmVuZGVyQWRtaW4oKTsKICAgICAgICBzaG93VG9hc3Qo J1N1cGVyVXNlciBlbnRmZXJudCcsICdzdWNjZXNzJyk7CiAgICB9LAoKICAgIGFzeW5jIGFkZEZh Y2hhdWZzaWNodCgpIHsKICAgICAgICB2YXIgdXNlcm5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCgnZ292RkFVc2VyJykudmFsdWUudHJpbSgpOwogICAgICAgIGlmICghdXNlcm5hbWUpIHsg c2hvd1RvYXN0KCdOVy1LZW5udW5nIGVyZm9yZGVybGljaCcsICd3YXJuaW5nJyk7IHJldHVybjsg fQogICAgICAgIHZhciBkaXNwbGF5TmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb3ZG QU5hbWUnKS52YWx1ZS50cmltKCkgfHwgdXNlcm5hbWU7CiAgICAgICAgdmFyIG9lID0gZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ2dvdkZBT0UnKS52YWx1ZS50cmltKCk7CiAgICAgICAgaWYgKCF0 aGlzLmRhdGEuZmFjaGF1ZnNpY2h0KSB0aGlzLmRhdGEuZmFjaGF1ZnNpY2h0ID0gW107CiAgICAg ICAgdGhpcy5kYXRhLmZhY2hhdWZzaWNodC5wdXNoKHsgdXNlcm5hbWU6IHVzZXJuYW1lLCBkb21h aW46ICcqJywgZGlzcGxheU5hbWU6IGRpc3BsYXlOYW1lLCBvcmdhbmlzYXRpb25zZWluaGVpdDog b2UgfSk7CiAgICAgICAgY29uc3Qgb2sgPSBhd2FpdCB0aGlzLnNhdmVHb3Zlcm5hbmNlKCk7CiAg ICAgICAgaWYgKG9rID09PSBmYWxzZSkgewogICAgICAgICAgICB0aGlzLmRhdGEuZmFjaGF1ZnNp Y2h0LnBvcCgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMucmVu ZGVyQWRtaW4oKTsKICAgICAgICBzaG93VG9hc3QoZGlzcGxheU5hbWUgKyAnIGFscyBGYWNoYXVm c2ljaHQgaGluenVnZWbDvGd0JywgJ3N1Y2Nlc3MnKTsKICAgIH0sCgogICAgYXN5bmMgcmVtb3Zl RmFjaGF1ZnNpY2h0KGluZGV4KSB7CiAgICAgICAgaWYgKCFjb25maXJtKCdGYWNoYXVmc2ljaHQg d2lya2xpY2ggZW50ZmVybmVuPycpKSByZXR1cm47CiAgICAgICAgY29uc3QgYmFja3VwID0gdGhp cy5kYXRhLmZhY2hhdWZzaWNodFtpbmRleF07CiAgICAgICAgdGhpcy5kYXRhLmZhY2hhdWZzaWNo dC5zcGxpY2UoaW5kZXgsIDEpOwogICAgICAgIGNvbnN0IG9rID0gYXdhaXQgdGhpcy5zYXZlR292 ZXJuYW5jZSgpOwogICAgICAgIGlmIChvayA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhpcy5k YXRhLmZhY2hhdWZzaWNodC5zcGxpY2UoaW5kZXgsIDAsIGJhY2t1cCk7CiAgICAgICAgICAgIHJl dHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5yZW5kZXJBZG1pbigpOwogICAgICAgIHNob3dU b2FzdCgnRmFjaGF1ZnNpY2h0IGVudGZlcm50JywgJ3N1Y2Nlc3MnKTsKICAgIH0sCgogICAgYXN5 bmMgYWRkQ2F0ZWdvcnkoKSB7CiAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoJ2dvdk5ld0NhdCcpOwogICAgICAgIHZhciBuYW1lID0gaW5wdXQudmFsdWUudHJpbSgp OwogICAgICAgIGlmICghbmFtZSkgcmV0dXJuOwogICAgICAgIGlmIChEcml2ZUZTLmNvbmZpZy5r YXRlZ29yaWVuLmluY2x1ZGVzKG5hbWUpKSB7CiAgICAgICAgICAgIHNob3dUb2FzdCgnS2F0ZWdv cmllIGV4aXN0aWVydCBiZXJlaXRzJywgJ3dhcm5pbmcnKTsKICAgICAgICAgICAgcmV0dXJuOwog ICAgICAgIH0KICAgICAgICBEcml2ZUZTLmNvbmZpZy5rYXRlZ29yaWVuLnB1c2gobmFtZSk7CiAg ICAgICAgRHJpdmVGUy5zb3J0S2F0ZWdvcmllbigpOwoKICAgICAgICAvLyAxLiBDb25maWcgc3Bl aWNoZXJuCiAgICAgICAgY29uc3Qgb2sgPSBhd2FpdCB0aGlzLnNhdmVDb25maWcoKTsKICAgICAg ICBpZiAob2sgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHZhciBybUlkeCA9IERyaXZlRlMuY29u ZmlnLmthdGVnb3JpZW4uaW5kZXhPZihuYW1lKTsKICAgICAgICAgICAgaWYgKHJtSWR4ID49IDAp IERyaXZlRlMuY29uZmlnLmthdGVnb3JpZW4uc3BsaWNlKHJtSWR4LCAxKTsKICAgICAgICAgICAg cmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gMi4gT3JkbmVyIGVyc3RlbGxlbjogZGF0YS9b S2F0ZWdvcmllXS8KICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoRHJpdmVGUy5tb2RlID09 PSAnc2VydmVyJykgewogICAgICAgICAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0geyBfcGxhY2Vo b2xkZXI6IHRydWUgfTsKICAgICAgICAgICAgICAgIGF3YWl0IGZldGNoKCcvYXBpL3dyaXRlJywg eyBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9q c29uOyBjaGFyc2V0PXV0Zi04J30sCiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJp bmdpZnkoeyBwYXRoOiAnZGF0YS8nICsgbmFtZSArICcvX2luaXQuanNvbicsIGRhdGE6IHBsYWNl aG9sZGVyIH0pIH0pOwogICAgICAgICAgICAgICAgYXdhaXQgZmV0Y2goJy9hcGkvZGVsZXRlJywg eyBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9q c29uOyBjaGFyc2V0PXV0Zi04J30sCiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJp bmdpZnkoeyBwYXRoOiAnZGF0YS8nICsgbmFtZSArICcvX2luaXQuanNvbicgfSkgfSk7CiAgICAg ICAgICAgIH0gZWxzZSBpZiAoRHJpdmVGUy5tb2RlID09PSAnZmlsZXN5c3RlbScgJiYgRHJpdmVG Uy5fZGF0YUhhbmRsZSkgewogICAgICAgICAgICAgICAgYXdhaXQgRHJpdmVGUy5fZGF0YUhhbmRs ZS5nZXREaXJlY3RvcnlIYW5kbGUobmFtZSwgeyBjcmVhdGU6IHRydWUgfSk7CiAgICAgICAgICAg IH0KICAgICAgICB9IGNhdGNoKGUpIHsgY29uc29sZS53YXJuKCdPcmRuZXItRXJzdGVsbHVuZzon LCBlKTsgfQoKICAgICAgICAvLyAzLiBVSSBrb21wbGV0dCBha3R1YWxpc2llcmVuCiAgICAgICAg aW5wdXQudmFsdWUgPSAnJzsKICAgICAgICBEcml2ZVBvcnRhbC5zZXR1cEZpbHRlcnMoKTsKICAg ICAgICBEcml2ZVBvcnRhbC5yZW5kZXIoKTsKICAgICAgICBpZiAodGhpcy50YWJsZVZpZXdBY3Rp dmUpIERyaXZlUG9ydGFsLnJlbmRlclRhYmxlVmlldygpOwogICAgICAgIHRoaXMucmVuZGVyQWRt aW4oKTsKICAgICAgICBzaG93VG9hc3QoJ0thdGVnb3JpZSAiJyArIG5hbWUgKyAnIiBoaW56dWdl ZsO8Z3QnLCAnc3VjY2VzcycpOwogICAgfSwKCiAgICBhc3luYyByZW1vdmVDYXRlZ29yeShpbmRl eCkgewogICAgICAgIHZhciBrYXQgPSBEcml2ZUZTLmNvbmZpZy5rYXRlZ29yaWVuW2luZGV4XTsK ICAgICAgICB2YXIgZG9jQ291bnQgPSBEcml2ZUZTLmRvY3VtZW50cy5maWx0ZXIoZnVuY3Rpb24o ZCl7IHJldHVybiBkLmthdGVnb3JpZSA9PT0ga2F0OyB9KS5sZW5ndGg7CiAgICAgICAgaWYgKGRv Y0NvdW50ID4gMCkgewogICAgICAgICAgICBpZiAoIWNvbmZpcm0oJ0RpZSBLYXRlZ29yaWUgIicg KyBrYXQgKyAnIiBlbnRow6RsdCAnICsgZG9jQ291bnQgKyAnIERva3VtZW50KGUpLlxuV2lya2xp Y2ggZW50ZmVybmVuPyBEaWUgRG9rdW1lbnRlIGJlaGFsdGVuIGlocmUgS2F0ZWdvcmllLicpKSBy ZXR1cm47CiAgICAgICAgfQogICAgICAgIERyaXZlRlMuY29uZmlnLmthdGVnb3JpZW4uc3BsaWNl KGluZGV4LCAxKTsKICAgICAgICBjb25zdCBvayA9IGF3YWl0IHRoaXMuc2F2ZUNvbmZpZygpOwog ICAgICAgIGlmIChvayA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgRHJpdmVGUy5jb25maWcua2F0 ZWdvcmllbi5zcGxpY2UoaW5kZXgsIDAsIGthdCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAg ICB9CiAgICAgICAgRHJpdmVQb3J0YWwuc2V0dXBGaWx0ZXJzKCk7CiAgICAgICAgRHJpdmVQb3J0 YWwucmVuZGVyKCk7CiAgICAgICAgaWYgKERyaXZlUG9ydGFsLnRhYmxlVmlld0FjdGl2ZSkgRHJp dmVQb3J0YWwucmVuZGVyVGFibGVWaWV3KCk7CiAgICAgICAgdGhpcy5yZW5kZXJBZG1pbigpOwog ICAgICAgIHNob3dUb2FzdCgnS2F0ZWdvcmllICInICsga2F0ICsgJyIgZW50ZmVybnQnLCAnc3Vj Y2VzcycpOwogICAgfSwKCiAgICBhc3luYyBoaWRlQ2F0ZWdvcnkoaW5kZXgpIHsKICAgICAgICB2 YXIga2F0ID0gRHJpdmVGUy5jb25maWcua2F0ZWdvcmllbltpbmRleF07CiAgICAgICAgaWYgKCFE cml2ZUZTLmNvbmZpZy5oaWRkZW5LYXRlZ29yaWVuKSBEcml2ZUZTLmNvbmZpZy5oaWRkZW5LYXRl Z29yaWVuID0gW107CiAgICAgICAgaWYgKCFEcml2ZUZTLmNvbmZpZy5oaWRkZW5LYXRlZ29yaWVu LmluY2x1ZGVzKGthdCkpIHsKICAgICAgICAgICAgRHJpdmVGUy5jb25maWcuaGlkZGVuS2F0ZWdv cmllbi5wdXNoKGthdCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG9rID0gYXdhaXQgdGhpcy5z YXZlQ29uZmlnKCk7CiAgICAgICAgaWYgKG9rID09PSBmYWxzZSkgewogICAgICAgICAgICBEcml2 ZUZTLmNvbmZpZy5oaWRkZW5LYXRlZ29yaWVuID0gRHJpdmVGUy5jb25maWcuaGlkZGVuS2F0ZWdv cmllbi5maWx0ZXIoZnVuY3Rpb24oayl7IHJldHVybiBrICE9PSBrYXQ7IH0pOwogICAgICAgICAg ICByZXR1cm47CiAgICAgICAgfQogICAgICAgIERyaXZlUG9ydGFsLnNldHVwRmlsdGVycygpOwog ICAgICAgIERyaXZlUG9ydGFsLnJlbmRlcigpOwogICAgICAgIGlmIChEcml2ZVBvcnRhbC50YWJs ZVZpZXdBY3RpdmUpIERyaXZlUG9ydGFsLnJlbmRlclRhYmxlVmlldygpOwogICAgICAgIHRoaXMu cmVuZGVyQWRtaW4oKTsKICAgICAgICBzaG93VG9hc3QoJ0thdGVnb3JpZSAiJyArIGthdCArICci IGF1c2dlYmxlbmRldCcsICdzdWNjZXNzJyk7CiAgICB9LAoKICAgIGFzeW5jIHNob3dDYXRlZ29y eShpbmRleCkgewogICAgICAgIHZhciBrYXQgPSBEcml2ZUZTLmNvbmZpZy5rYXRlZ29yaWVuW2lu ZGV4XTsKICAgICAgICBpZiAoIURyaXZlRlMuY29uZmlnLmhpZGRlbkthdGVnb3JpZW4pIHJldHVy bjsKICAgICAgICBEcml2ZUZTLmNvbmZpZy5oaWRkZW5LYXRlZ29yaWVuID0gRHJpdmVGUy5jb25m aWcuaGlkZGVuS2F0ZWdvcmllbi5maWx0ZXIoZnVuY3Rpb24oayl7IHJldHVybiBrICE9PSBrYXQ7 IH0pOwogICAgICAgIGNvbnN0IG9rID0gYXdhaXQgdGhpcy5zYXZlQ29uZmlnKCk7CiAgICAgICAg aWYgKG9rID09PSBmYWxzZSkgewogICAgICAgICAgICBEcml2ZUZTLmNvbmZpZy5oaWRkZW5LYXRl Z29yaWVuLnB1c2goa2F0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBE cml2ZVBvcnRhbC5zZXR1cEZpbHRlcnMoKTsKICAgICAgICBEcml2ZVBvcnRhbC5yZW5kZXIoKTsK ICAgICAgICBpZiAoRHJpdmVQb3J0YWwudGFibGVWaWV3QWN0aXZlKSBEcml2ZVBvcnRhbC5yZW5k ZXJUYWJsZVZpZXcoKTsKICAgICAgICB0aGlzLnJlbmRlckFkbWluKCk7CiAgICAgICAgc2hvd1Rv YXN0KCdLYXRlZ29yaWUgIicgKyBrYXQgKyAnIiB3aWVkZXIgZWluZ2VibGVuZGV0JywgJ3N1Y2Nl c3MnKTsKICAgIH0sCgogICAgYXN5bmMgZWRpdFN0YXJ0c2VpdGUoKSB7CiAgICAgICAgdGhpcy5j bG9zZUFkbWluKCk7CiAgICAgICAgLy8gQWt0dWVsbGVuIFN0YXJ0c2VpdGVuLUluaGFsdCBsYWRl bgogICAgICAgIHZhciB3ZWxjb21lRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud2VsY29t ZS1jb250ZW50Jyk7CiAgICAgICAgdmFyIGNvbnRlbnQgPSB3ZWxjb21lRWwgPyB3ZWxjb21lRWwu aW5uZXJIVE1MIDogJyc7CgogICAgICAgIC8vIEdlc3BlaWNoZXJ0ZW4gSW5oYWx0IGF1cyBEYXRl aSBsYWRlbiAoZmFsbHMgdm9yaGFuZGVuKQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChE cml2ZUZTLm1vZGUgPT09ICdzZXJ2ZXInKSB7CiAgICAgICAgICAgICAgICB2YXIgcmVzID0gYXdh aXQgZmV0Y2goJy9kYXRhLy5zdGFydHNlaXRlLmh0bWwnKTsKICAgICAgICAgICAgICAgIGlmIChy ZXMub2spIGNvbnRlbnQgPSBhd2FpdCByZXMudGV4dCgpOwogICAgICAgICAgICB9IGVsc2UgaWYg KERyaXZlRlMubW9kZSA9PT0gJ3N0YXRpYycpIHsKICAgICAgICAgICAgICAgIHZhciByZXMyID0g YXdhaXQgZmV0Y2goJ2RhdGEvLnN0YXJ0c2VpdGUuaHRtbCcpOwogICAgICAgICAgICAgICAgaWYg KHJlczIub2spIGNvbnRlbnQgPSBhd2FpdCByZXMyLnRleHQoKTsKICAgICAgICAgICAgfSBlbHNl IGlmIChEcml2ZUZTLm1vZGUgPT09ICdmaWxlc3lzdGVtJyAmJiBEcml2ZUZTLl9kYXRhSGFuZGxl KSB7CiAgICAgICAgICAgICAgICB2YXIgZmggPSBhd2FpdCBEcml2ZUZTLl9kYXRhSGFuZGxlLmdl dEZpbGVIYW5kbGUoJy5zdGFydHNlaXRlLmh0bWwnKTsKICAgICAgICAgICAgICAgIHZhciBmaWxl ID0gYXdhaXQgZmguZ2V0RmlsZSgpOwogICAgICAgICAgICAgICAgY29udGVudCA9IGF3YWl0IGZp bGUudGV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaChlKSB7fQoKICAgICAgICAv LyBFZGl0b3Igb2VmZm5lbiBtaXQgU3RhcnRzZWl0ZW4tSW5oYWx0CiAgICAgICAgRHJpdmVFZGl0 b3IuaXNOZXcgPSBmYWxzZTsKICAgICAgICBEcml2ZUVkaXRvci5faXNTdGFydHNlaXRlID0gdHJ1 ZTsKICAgICAgICBEcml2ZUVkaXRvci5jdXJyZW50RG9jID0gewogICAgICAgICAgICBpZDogJ19z dGFydHNlaXRlJywKICAgICAgICAgICAgdGl0ZWw6ICdTdGFydHNlaXRlJywKICAgICAgICAgICAg a2F0ZWdvcmllOiAnJywKICAgICAgICAgICAgaW5oYWx0OiBjb250ZW50LAogICAgICAgICAgICBz dGF0dXM6ICcnLAogICAgICAgICAgICBtZWRpYXM6IFtdCiAgICAgICAgfTsKICAgICAgICBEcml2 ZUVkaXRvci5vcGVuTW9kYWwoJ1N0YXJ0c2VpdGUgYmVhcmJlaXRlbicpOwogICAgICAgIC8vIEth dGVnb3JpZS9TdGF0dXMvTWV0YS1GZWxkZXIgYXVzYmxlbmRlbiAobmljaHQgcmVsZXZhbnQgZnVl ciBTdGFydHNlaXRlKQogICAgICAgIHZhciBtZXRhUm93cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0 b3JBbGwoJy5lZGl0b3ItbWV0YS1yb3cnKTsKICAgICAgICBtZXRhUm93cy5mb3JFYWNoKGZ1bmN0 aW9uKHJvdykgeyByb3cuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfSk7CiAgICB9LAoKICAgIGFz eW5jIHNhdmVTdGFydHNlaXRlKGNvbnRlbnQpIHsKICAgICAgICBpZiAoRHJpdmVGUy5tb2RlID09 PSAnc2VydmVyJykgewogICAgICAgICAgICBhd2FpdCBmZXRjaCgnL2FwaS93cml0ZScsIHsgbWV0 aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbjsg Y2hhcnNldD11dGYtOCd9LAogICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBw YXRoOiAnZGF0YS8uc3RhcnRzZWl0ZS5odG1sJywgZGF0YTogY29udGVudCB9KSB9KTsKICAgICAg ICB9IGVsc2UgaWYgKERyaXZlRlMubW9kZSA9PT0gJ2ZpbGVzeXN0ZW0nICYmIERyaXZlRlMuX2Rh dGFIYW5kbGUpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHZhciBmaCA9IGF3 YWl0IERyaXZlRlMuX2RhdGFIYW5kbGUuZ2V0RmlsZUhhbmRsZSgnLnN0YXJ0c2VpdGUuaHRtbCcs IHsgY3JlYXRlOiB0cnVlIH0pOwogICAgICAgICAgICAgICAgdmFyIHdyaXRhYmxlID0gYXdhaXQg ZmguY3JlYXRlV3JpdGFibGUoKTsKICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRhYmxlLndyaXRl KGNvbnRlbnQpOwogICAgICAgICAgICAgICAgYXdhaXQgd3JpdGFibGUuY2xvc2UoKTsKICAgICAg ICAgICAgfSBjYXRjaChlKSB7fQogICAgICAgIH0KICAgICAgICAvLyBTdGFydHNlaXRlIGltIERP TSBha3R1YWxpc2llcmVuICsgQ2FjaGUgZnVlciBzaG93SG9tZSgpIGVybmV1ZXJuCiAgICAgICAg dmFyIHdlbGNvbWVFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53ZWxjb21lLWNvbnRlbnQn KTsKICAgICAgICBpZiAod2VsY29tZUVsKSB7CiAgICAgICAgICAgIHdlbGNvbWVFbC5pbm5lckhU TUwgPSB0aGlzLl9zYW5pdGl6ZUhUTUwoY29udGVudCk7CiAgICAgICAgICAgIERyaXZlUG9ydGFs Ll93ZWxjb21lSFRNTCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudERldGFpbCcp LmlubmVySFRNTDsKICAgICAgICB9CiAgICAgICAgc2hvd1RvYXN0KCdTdGFydHNlaXRlIGdlc3Bl aWNoZXJ0JywgJ3N1Y2Nlc3MnKTsKICAgICAgICAvLyBpbmRleC5qcyBmdWVyIExlc2Vtb2R1cyBh a3R1YWxpc2llcmVuIChTdGFydHNlaXRlIGlzdCBkYXJpbiBlaW5nZWJldHRldCkKICAgICAgICBh d2FpdCBEcml2ZUZTLnVwZGF0ZUluZGV4KCk7CiAgICB9LAoKICAgIGFzeW5jIGxvYWRTdGFydHNl aXRlKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZhciByYXcgPSBudWxsOwogICAgICAg ICAgICBpZiAoRHJpdmVGUy5tb2RlID09PSAnc2VydmVyJykgewogICAgICAgICAgICAgICAgdmFy IHJlcyA9IGF3YWl0IGZldGNoKCcvZGF0YS8uc3RhcnRzZWl0ZS5odG1sJyk7CiAgICAgICAgICAg ICAgICBpZiAocmVzLm9rKSByYXcgPSBhd2FpdCByZXMudGV4dCgpOwogICAgICAgICAgICB9IGVs c2UgaWYgKERyaXZlRlMubW9kZSA9PT0gJ3N0YXRpYycpIHsKICAgICAgICAgICAgICAgIHZhciBy ZXMyID0gYXdhaXQgZmV0Y2goJ2RhdGEvLnN0YXJ0c2VpdGUuaHRtbCcpOwogICAgICAgICAgICAg ICAgaWYgKHJlczIub2spIHJhdyA9IGF3YWl0IHJlczIudGV4dCgpOwogICAgICAgICAgICB9IGVs c2UgaWYgKERyaXZlRlMubW9kZSA9PT0gJ2ZpbGVzeXN0ZW0nICYmIERyaXZlRlMuX2RhdGFIYW5k bGUpIHsKICAgICAgICAgICAgICAgIHZhciBmaCA9IGF3YWl0IERyaXZlRlMuX2RhdGFIYW5kbGUu Z2V0RmlsZUhhbmRsZSgnLnN0YXJ0c2VpdGUuaHRtbCcpOwogICAgICAgICAgICAgICAgdmFyIGZp bGUgPSBhd2FpdCBmaC5nZXRGaWxlKCk7CiAgICAgICAgICAgICAgICByYXcgPSBhd2FpdCBmaWxl LnRleHQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmF3ICYmIHJhdy5sZW5ndGgg PiAxMCkgewogICAgICAgICAgICAgICAgdmFyIHdlbGNvbWVFbCA9IGRvY3VtZW50LnF1ZXJ5U2Vs ZWN0b3IoJy53ZWxjb21lLWNvbnRlbnQnKTsKICAgICAgICAgICAgICAgIGlmICh3ZWxjb21lRWwp IHsKICAgICAgICAgICAgICAgICAgICB3ZWxjb21lRWwuaW5uZXJIVE1MID0gdGhpcy5fc2FuaXRp emVIVE1MKHJhdyk7CiAgICAgICAgICAgICAgICAgICAgLy8gQ2FjaGUgYWt0dWFsaXNpZXJlbiwg ZGFtaXQgc2hvd0hvbWUoKSBkZW4gZ2VzcGVpY2hlcnRlbiBJbmhhbHQgemVpZ3QKICAgICAgICAg ICAgICAgICAgICBEcml2ZVBvcnRhbC5fd2VsY29tZUhUTUwgPSBkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCgnZG9jdW1lbnREZXRhaWwnKS5pbm5lckhUTUw7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgIH0KICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICB9LAoKICAgIGFzeW5jIHNhdmVIZWxw Q29udGVudCgpIHsKICAgICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk KCdoZWxwQm9keScpLmlubmVySFRNTDsKICAgICAgICAvLyBQZXJzaXN0aWVyZW4gYWxzIGRhdGEv LmhlbHAtY29udGVudC5odG1sCiAgICAgICAgaWYgKERyaXZlRlMubW9kZSA9PT0gJ3NlcnZlcicp IHsKICAgICAgICAgICAgYXdhaXQgZmV0Y2goJy9hcGkvd3JpdGUnLCB7IG1ldGhvZDogJ1BPU1Qn LCBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRm LTgnfSwKICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcGF0aDogJ2RhdGEv LmhlbHAtY29udGVudC5odG1sJywgZGF0YTogY29udGVudCB9KSB9KTsKICAgICAgICB9IGVsc2Ug aWYgKERyaXZlRlMubW9kZSA9PT0gJ2ZpbGVzeXN0ZW0nICYmIERyaXZlRlMuX2RhdGFIYW5kbGUp IHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHZhciBmaCA9IGF3YWl0IERyaXZl RlMuX2RhdGFIYW5kbGUuZ2V0RmlsZUhhbmRsZSgnLmhlbHAtY29udGVudC5odG1sJywgeyBjcmVh dGU6IHRydWUgfSk7CiAgICAgICAgICAgICAgICB2YXIgd3JpdGFibGUgPSBhd2FpdCBmaC5jcmVh dGVXcml0YWJsZSgpOwogICAgICAgICAgICAgICAgYXdhaXQgd3JpdGFibGUud3JpdGUoY29udGVu dCk7CiAgICAgICAgICAgICAgICBhd2FpdCB3cml0YWJsZS5jbG9zZSgpOwogICAgICAgICAgICB9 IGNhdGNoKGUpIHt9CiAgICAgICAgfQogICAgICAgIHNob3dUb2FzdCgnSGlsZmUtSW5oYWx0IGdl c3BlaWNoZXJ0JywgJ3N1Y2Nlc3MnKTsKICAgIH0sCgogICAgX3Nhbml0aXplSFRNTChodG1sKSB7 CiAgICAgICAgLy8gU2NyaXB0LVRhZ3MsIEV2ZW50LUhhbmRsZXIgdW5kIGdlZsOkaHJsaWNoZSBB dHRyaWJ1dGUgZW50ZmVybmVuCiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l bnQoJ2RpdicpOwogICAgICAgIGRpdi5pbm5lckhUTUwgPSBodG1sOwogICAgICAgIGRpdi5xdWVy eVNlbGVjdG9yQWxsKCdzY3JpcHQsaWZyYW1lLG9iamVjdCxlbWJlZCxmb3JtJykuZm9yRWFjaChm dW5jdGlvbihlbCl7IGVsLnJlbW92ZSgpOyB9KTsKICAgICAgICBkaXYucXVlcnlTZWxlY3RvckFs bCgnKicpLmZvckVhY2goZnVuY3Rpb24oZWwpIHsKICAgICAgICAgICAgQXJyYXkuZnJvbShlbC5h dHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGF0dHIpIHsKICAgICAgICAgICAgICAgIGlmIChh dHRyLm5hbWUuc3RhcnRzV2l0aCgnb24nKSB8fCBhdHRyLnZhbHVlLnRyaW0oKS50b0xvd2VyQ2Fz ZSgpLnN0YXJ0c1dpdGgoJ2phdmFzY3JpcHQ6JykpIHsKICAgICAgICAgICAgICAgICAgICBlbC5y ZW1vdmVBdHRyaWJ1dGUoYXR0ci5uYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg fSk7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7CiAgICB9LAoKICAg IGFzeW5jIGxvYWRIZWxwQ29udGVudCgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICB2YXIg cmF3ID0gbnVsbDsKICAgICAgICAgICAgaWYgKERyaXZlRlMubW9kZSA9PT0gJ3NlcnZlcicpIHsK ICAgICAgICAgICAgICAgIHZhciByZXMgPSBhd2FpdCBmZXRjaCgnL2RhdGEvLmhlbHAtY29udGVu dC5odG1sJyk7CiAgICAgICAgICAgICAgICBpZiAocmVzLm9rKSByYXcgPSBhd2FpdCByZXMudGV4 dCgpOwogICAgICAgICAgICB9IGVsc2UgaWYgKERyaXZlRlMubW9kZSA9PT0gJ3N0YXRpYycpIHsK ICAgICAgICAgICAgICAgIHZhciByZXMyID0gYXdhaXQgZmV0Y2goJ2RhdGEvLmhlbHAtY29udGVu dC5odG1sJyk7CiAgICAgICAgICAgICAgICBpZiAocmVzMi5vaykgcmF3ID0gYXdhaXQgcmVzMi50 ZXh0KCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoRHJpdmVGUy5tb2RlID09PSAnZmlsZXN5c3Rl bScgJiYgRHJpdmVGUy5fZGF0YUhhbmRsZSkgewogICAgICAgICAgICAgICAgdmFyIGZoID0gYXdh aXQgRHJpdmVGUy5fZGF0YUhhbmRsZS5nZXRGaWxlSGFuZGxlKCcuaGVscC1jb250ZW50Lmh0bWwn KTsKICAgICAgICAgICAgICAgIHZhciBmaWxlID0gYXdhaXQgZmguZ2V0RmlsZSgpOwogICAgICAg ICAgICAgICAgcmF3ID0gYXdhaXQgZmlsZS50ZXh0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAg ICAgaWYgKHJhdyAmJiByYXcubGVuZ3RoID4gMTApIHsKICAgICAgICAgICAgICAgIGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCdoZWxwQm9keScpLmlubmVySFRNTCA9IHRoaXMuX3Nhbml0aXplSFRN TChyYXcpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaChlKSB7fQogICAgfSwKCiAgICBh c3luYyBzYXZlQ29uZmlnKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChEcml2ZUZT Lm1vZGUgPT09ICdzZXJ2ZXInKSB7CiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBm ZXRjaCgnL2FwaS93cml0ZScsIHsKICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywK ICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRp b24vanNvbjsgY2hhcnNldD11dGYtOCcgfSwKICAgICAgICAgICAgICAgICAgICBib2R5OiBKU09O LnN0cmluZ2lmeSh7IHBhdGg6ICdkYXRhL2NvbmZpZy5qc29uJywgZGF0YTogRHJpdmVGUy5jb25m aWcgfSkKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0g YXdhaXQgcmVzLmpzb24oKTsKICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lm9rKSB7CiAgICAg ICAgICAgICAgICAgICAgc2hvd1RvYXN0KCdLb25maWd1cmF0aW9uIHNwZWljaGVybiBmZWhsZ2Vz Y2hsYWdlbjogJyArIChyZXN1bHQuZXJyb3IgfHwgJ1VuYmVrYW5udGVyIEZlaGxlcicpLCAnZXJy b3InLCA1MDAwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoRHJpdmVGUy5tb2RlID09PSAnZmlsZXN5c3Rl bScgJiYgRHJpdmVGUy5fZGF0YUhhbmRsZSkgewogICAgICAgICAgICAgICAgdmFyIGZoID0gYXdh aXQgRHJpdmVGUy5fZGF0YUhhbmRsZS5nZXRGaWxlSGFuZGxlKCdjb25maWcuanNvbicsIHsgY3Jl YXRlOiB0cnVlIH0pOwogICAgICAgICAgICAgICAgdmFyIHdyaXRhYmxlID0gYXdhaXQgZmguY3Jl YXRlV3JpdGFibGUoKTsKICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRhYmxlLndyaXRlKEpTT04u c3RyaW5naWZ5KERyaXZlRlMuY29uZmlnLCBudWxsLCAyKSk7CiAgICAgICAgICAgICAgICBhd2Fp dCB3cml0YWJsZS5jbG9zZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0cnVl OwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICBzaG93VG9hc3QoJ0tvbmZpZ3Vy YXRpb24gc3BlaWNoZXJuIGZlaGxnZXNjaGxhZ2VuOiAnICsgZXJyLm1lc3NhZ2UsICdlcnJvcics IDUwMDApOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfSwKCiAgICBf ZW5nYWdlbWVudFNvcnQ6ICd0b3RhbCcsCiAgICBfZW5nYWdlbWVudENhdDogJ2FsbCcsCgogICAg c2hvd0VuZ2FnZW1lbnRTdGF0cyhzb3J0QnksIGZpbHRlckNhdCkgewogICAgICAgIHRoaXMuY2xv c2VBZG1pbigpOwogICAgICAgIGlmIChzb3J0QnkpIHRoaXMuX2VuZ2FnZW1lbnRTb3J0ID0gc29y dEJ5OwogICAgICAgIGlmIChmaWx0ZXJDYXQgIT09IHVuZGVmaW5lZCkgdGhpcy5fZW5nYWdlbWVu dENhdCA9IGZpbHRlckNhdDsKICAgICAgICB2YXIgc29ydCA9IHRoaXMuX2VuZ2FnZW1lbnRTb3J0 OwogICAgICAgIHZhciBjYXRGaWx0ZXIgPSB0aGlzLl9lbmdhZ2VtZW50Q2F0OwogICAgICAgIHZh ciBkb2NzID0gRHJpdmVGUy5kb2N1bWVudHM7CiAgICAgICAgdmFyIGthdGVnb3JpZW4gPSBEcml2 ZUZTLmNvbmZpZy5rYXRlZ29yaWVuIHx8IFtdOwogICAgICAgIHZhciB0b3RhbERvY3MgPSBkb2Nz Lmxlbmd0aDsKICAgICAgICB2YXIgdG90YWxGcmVpZ2VnZWJlbiA9IGRvY3MuZmlsdGVyKGZ1bmN0 aW9uKGQpeyByZXR1cm4gZC5zdGF0dXMgPT09ICdGcmVpZ2VnZWJlbic7IH0pLmxlbmd0aDsKICAg ICAgICB2YXIgdG90YWxQcnVlZnVuZyA9IGRvY3MuZmlsdGVyKGZ1bmN0aW9uKGQpeyByZXR1cm4g ZC5zdGF0dXMgPT09ICdQcsO8ZnVuZyc7IH0pLmxlbmd0aDsKICAgICAgICB2YXIgdG90YWxFbnR3 dXJmID0gZG9jcy5maWx0ZXIoZnVuY3Rpb24oZCl7IHJldHVybiBkLnN0YXR1cyA9PT0gJ0VudHd1 cmYnOyB9KS5sZW5ndGg7CiAgICAgICAgdmFyIHRvdGFsV2l0aE1lZGlhID0gZG9jcy5maWx0ZXIo ZnVuY3Rpb24oZCl7IHJldHVybiBkLm1lZGlhcyAmJiBkLm1lZGlhcy5sZW5ndGggPiAwOyB9KS5s ZW5ndGg7CgogICAgICAgIC8vIFVzZXItQmVpdHLDpGdlIHrDpGhsZW4g4oCTIGF1Zmdlc2NobMO8 c3NlbHQgbmFjaCBLYXRlZ29yaWUKICAgICAgICB2YXIgdXNlclN0YXRzID0ge307CiAgICAgICAg ZG9jcy5mb3JFYWNoKGZ1bmN0aW9uKGRvYykgewogICAgICAgICAgICB2YXIga2F0ID0gZG9jLmth dGVnb3JpZSB8fCAnU29uc3RpZ2UnOwogICAgICAgICAgICBmdW5jdGlvbiBlbnN1cmUobmFtZSkg ewogICAgICAgICAgICAgICAgaWYgKCF1c2VyU3RhdHNbbmFtZV0pIHVzZXJTdGF0c1tuYW1lXSA9 IHsgY3JlYXRlZDogMCwgZWRpdGVkOiAwLCByZXZpZXdzOiAwLCBrYXRlZ29yaWVuOiB7fSB9Owog ICAgICAgICAgICAgICAgaWYgKCF1c2VyU3RhdHNbbmFtZV0ua2F0ZWdvcmllbltrYXRdKSB1c2Vy U3RhdHNbbmFtZV0ua2F0ZWdvcmllbltrYXRdID0geyBjcmVhdGVkOiAwLCBlZGl0ZWQ6IDAsIHJl dmlld3M6IDAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZG9jLmVyc3RlbGx0Vm9u KSB7CiAgICAgICAgICAgICAgICBlbnN1cmUoZG9jLmVyc3RlbGx0Vm9uKTsKICAgICAgICAgICAg ICAgIHVzZXJTdGF0c1tkb2MuZXJzdGVsbHRWb25dLmNyZWF0ZWQrKzsKICAgICAgICAgICAgICAg IHVzZXJTdGF0c1tkb2MuZXJzdGVsbHRWb25dLmthdGVnb3JpZW5ba2F0XS5jcmVhdGVkKys7CiAg ICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGRvYy5iZWFyYmVpdGV0Vm9uICYmIGRvYy5iZWFy YmVpdGV0Vm9uICE9PSBkb2MuZXJzdGVsbHRWb24pIHsKICAgICAgICAgICAgICAgIGVuc3VyZShk b2MuYmVhcmJlaXRldFZvbik7CiAgICAgICAgICAgICAgICB1c2VyU3RhdHNbZG9jLmJlYXJiZWl0 ZXRWb25dLmVkaXRlZCsrOwogICAgICAgICAgICAgICAgdXNlclN0YXRzW2RvYy5iZWFyYmVpdGV0 Vm9uXS5rYXRlZ29yaWVuW2thdF0uZWRpdGVkKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg KGRvYy5jb250cmlidXRvcnMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24oYykgewogICAgICAgICAg ICAgICAgZW5zdXJlKGMudXNlcm5hbWUpOwogICAgICAgICAgICAgICAgaWYgKGMucm9sZSA9PT0g J3JldmlldycpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyU3RhdHNbYy51c2VybmFtZV0ucmV2 aWV3cyArPSAoYy5lbnRyaWVzIHx8IDEpOwogICAgICAgICAgICAgICAgICAgIHVzZXJTdGF0c1tj LnVzZXJuYW1lXS5rYXRlZ29yaWVuW2thdF0ucmV2aWV3cyArPSAoYy5lbnRyaWVzIHx8IDEpOwog ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjLnJvbGUgPT09ICdhdXRvcicpIHsKICAgICAgICAg ICAgICAgICAgICB1c2VyU3RhdHNbYy51c2VybmFtZV0uY3JlYXRlZCArPSAoYy5lbnRyaWVzIHx8 IDEpIC0gMTsgLy8gLTEgd2VpbCBlcnN0ZWxsdFZvbiBzY2hvbiB6w6RobHQKICAgICAgICAgICAg ICAgICAgICB1c2VyU3RhdHNbYy51c2VybmFtZV0ua2F0ZWdvcmllbltrYXRdLmNyZWF0ZWQgKz0g KGMuZW50cmllcyB8fCAxKSAtIDE7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMucm9sZSA9 PT0gJ3JlZGFrdGlvbicpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyU3RhdHNbYy51c2VybmFt ZV0uZWRpdGVkICs9IChjLmVudHJpZXMgfHwgMSk7CiAgICAgICAgICAgICAgICAgICAgdXNlclN0 YXRzW2MudXNlcm5hbWVdLmthdGVnb3JpZW5ba2F0XS5lZGl0ZWQgKz0gKGMuZW50cmllcyB8fCAx KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHZhciBnb3Yg PSBkb2MuZ292ZXJuYW5jZSB8fCB7fTsKICAgICAgICAgICAgKGdvdi5yZXZpZXdIaXN0b3J5IHx8 IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgICAgIGlmIChyLnJldmlld2Vy KSB7CiAgICAgICAgICAgICAgICAgICAgZW5zdXJlKHIucmV2aWV3ZXIpOwogICAgICAgICAgICAg ICAgICAgIHVzZXJTdGF0c1tyLnJldmlld2VyXS5yZXZpZXdzKys7CiAgICAgICAgICAgICAgICAg ICAgdXNlclN0YXRzW3IucmV2aWV3ZXJdLmthdGVnb3JpZW5ba2F0XS5yZXZpZXdzKys7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwoKICAgICAgICAvLyBTb3J0 aWVydW5nCiAgICAgICAgdmFyIHNvcnRlZFVzZXJzID0gT2JqZWN0LmVudHJpZXModXNlclN0YXRz KTsKICAgICAgICB2YXIgZ2V0VmFsID0gZnVuY3Rpb24ocykgewogICAgICAgICAgICB2YXIgZCA9 IHNbMV07CiAgICAgICAgICAgIGlmIChjYXRGaWx0ZXIgIT09ICdhbGwnKSBkID0gZC5rYXRlZ29y aWVuW2NhdEZpbHRlcl0gfHwgeyBjcmVhdGVkOjAsIGVkaXRlZDowLCByZXZpZXdzOjAgfTsKICAg ICAgICAgICAgaWYgKHNvcnQgPT09ICdjcmVhdGVkJykgcmV0dXJuIGQuY3JlYXRlZDsKICAgICAg ICAgICAgaWYgKHNvcnQgPT09ICdlZGl0ZWQnKSByZXR1cm4gZC5lZGl0ZWQ7CiAgICAgICAgICAg IGlmIChzb3J0ID09PSAncmV2aWV3cycpIHJldHVybiBkLnJldmlld3M7CiAgICAgICAgICAgIHJl dHVybiBkLmNyZWF0ZWQgKyBkLmVkaXRlZCArIGQucmV2aWV3czsKICAgICAgICB9OwogICAgICAg IHNvcnRlZFVzZXJzLnNvcnQoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGdldFZhbChiKSAtIGdldFZh bChhKTsgfSk7CiAgICAgICAgc29ydGVkVXNlcnMgPSBzb3J0ZWRVc2Vycy5maWx0ZXIoZnVuY3Rp b24odSl7IHJldHVybiBnZXRWYWwodSkgPiAwOyB9KTsKCiAgICAgICAgLy8gS2F0ZWdvcmllbi1W ZXJ0ZWlsdW5nCiAgICAgICAgdmFyIGNhdFN0YXRzID0ge307CiAgICAgICAgZG9jcy5mb3JFYWNo KGZ1bmN0aW9uKGQpIHsgY2F0U3RhdHNbZC5rYXRlZ29yaWVdID0gKGNhdFN0YXRzW2Qua2F0ZWdv cmllXSB8fCAwKSArIDE7IH0pOwoKICAgICAgICAvLyBTY2hsYWd3b3J0LUjDpHVmaWdrZWl0ZW4K ICAgICAgICB2YXIga3dTdGF0cyA9IHt9OwogICAgICAgIGRvY3MuZm9yRWFjaChmdW5jdGlvbihk KSB7IChkLnNjaGxhZ3dvZXJ0ZXIgfHwgW10pLmZvckVhY2goZnVuY3Rpb24oaykgeyBrd1N0YXRz W2tdID0gKGt3U3RhdHNba10gfHwgMCkgKyAxOyB9KTsgfSk7CiAgICAgICAgdmFyIHRvcEt3cyA9 IE9iamVjdC5lbnRyaWVzKGt3U3RhdHMpLnNvcnQoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGJbMV0t YVsxXTsgfSkuc2xpY2UoMCwgMTApOwoKICAgICAgICAvLyBNb25hdGxpY2hlIEVyc3RlbGx1bmcK ICAgICAgICB2YXIgbW9udGhTdGF0cyA9IHt9OwogICAgICAgIGRvY3MuZm9yRWFjaChmdW5jdGlv bihkKSB7IHZhciBtID0gKGQuZXJzdGVsbHQgfHwgJycpLnN1YnN0cmluZygwLCA3KTsgaWYgKG0p IG1vbnRoU3RhdHNbbV0gPSAobW9udGhTdGF0c1ttXSB8fCAwKSArIDE7IH0pOwogICAgICAgIHZh ciBtb250aHMgPSBPYmplY3QuZW50cmllcyhtb250aFN0YXRzKS5zb3J0KGZ1bmN0aW9uKGEsYil7 IHJldHVybiBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSk7IH0pOwoKICAgICAgICB2YXIgbWF4Q2F0 ID0gTWF0aC5tYXguYXBwbHkobnVsbCwgT2JqZWN0LnZhbHVlcyhjYXRTdGF0cykuY29uY2F0KFsx XSkpOwogICAgICAgIHZhciBtYXhLdyA9IHRvcEt3cy5sZW5ndGggPiAwID8gdG9wS3dzWzBdWzFd IDogMTsKICAgICAgICB2YXIgbWF4TW9udGggPSBtb250aHMubGVuZ3RoID4gMCA/IE1hdGgubWF4 LmFwcGx5KG51bGwsIG1vbnRocy5tYXAoZnVuY3Rpb24obSl7cmV0dXJuIG1bMV07fSkpIDogMTsK CiAgICAgICAgdmFyIGh0bWwgPSAnPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4OyI+PGgyIHN0eWxl PSJjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpO21hcmdpbi1ib3R0b206MjBweDsiPlVzZXItRW5n YWdlbWVudCBTdGF0aXN0aWs8L2gyPic7CgogICAgICAgIC8vIMOcYmVyc2ljaHRza2FydGVuCiAg ICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic3RhdC1ncmlkIj4nICsKICAgICAgICAgICAgJzxk aXYgY2xhc3M9InN0YXQtY2FyZCI+PGRpdiBjbGFzcz0ic3RhdC12YWx1ZSI+JyArIHRvdGFsRG9j cyArICc8L2Rpdj48ZGl2IGNsYXNzPSJzdGF0LWxhYmVsIj5Eb2t1bWVudGUgZ2VzYW10PC9kaXY+ PC9kaXY+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPjxkaXYgY2xhc3M9 InN0YXQtdmFsdWUiIHN0eWxlPSJjb2xvcjojMTU1NzI0OyI+JyArIHRvdGFsRnJlaWdlZ2ViZW4g KyAnPC9kaXY+PGRpdiBjbGFzcz0ic3RhdC1sYWJlbCI+RnJlaWdlZ2ViZW48L2Rpdj48L2Rpdj4n ICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9InN0YXQtY2FyZCI+PGRpdiBjbGFzcz0ic3RhdC12 YWx1ZSIgc3R5bGU9ImNvbG9yOiM3QTQ0MTk7Ij4nICsgdG90YWxQcnVlZnVuZyArICc8L2Rpdj48 ZGl2IGNsYXNzPSJzdGF0LWxhYmVsIj5JbiBQcsO8ZnVuZzwvZGl2PjwvZGl2PicgKwogICAgICAg ICAgICAnPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj48ZGl2IGNsYXNzPSJzdGF0LXZhbHVlIiBzdHls ZT0iY29sb3I6Izg1NjQwNDsiPicgKyB0b3RhbEVudHd1cmYgKyAnPC9kaXY+PGRpdiBjbGFzcz0i c3RhdC1sYWJlbCI+RW50d8O8cmZlPC9kaXY+PC9kaXY+JyArCiAgICAgICAgICAgICc8ZGl2IGNs YXNzPSJzdGF0LWNhcmQiPjxkaXYgY2xhc3M9InN0YXQtdmFsdWUiPicgKyB0b3RhbFdpdGhNZWRp YSArICc8L2Rpdj48ZGl2IGNsYXNzPSJzdGF0LWxhYmVsIj5NaXQgTWVkaWVuPC9kaXY+PC9kaXY+ JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPjxkaXYgY2xhc3M9InN0YXQt dmFsdWUiPicgKyBPYmplY3Qua2V5cyh1c2VyU3RhdHMpLmxlbmd0aCArICc8L2Rpdj48ZGl2IGNs YXNzPSJzdGF0LWxhYmVsIj5Ba3RpdmUgQmVudXR6ZXI8L2Rpdj48L2Rpdj4nICsKICAgICAgICAn PC9kaXY+JzsKCiAgICAgICAgLy8gLS0tIEJlbnV0emVyLUFrdGl2aXTDpHQgbWl0IEZpbHRlciAr IFNvcnRpZXJ1bmcgLS0tCiAgICAgICAgaHRtbCArPSAnPGgzIHN0eWxlPSJjb2xvcjp2YXIoLS10 ZXh0LWhlYWRpbmcpO21hcmdpbjoyMHB4IDAgOHB4OyI+QmVudXR6ZXItQWt0aXZpdMOkdCBuYWNo IEJlcmVpY2g8L2gzPic7CgogICAgICAgIC8vIEZpbHRlci1MZWlzdGUKICAgICAgICB2YXIgYnRu U3R5bGUgPSBmdW5jdGlvbih2YWwsIGN1cnJlbnQsIGVtcHR5KSB7CiAgICAgICAgICAgIGlmICh2 YWwgPT09IGN1cnJlbnQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAncGFkZGluZzo0cHggMTJw eDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLXRleHQtaGVhZGluZyk7YmFja2dyb3VuZDp2YXIoLS10 ZXh0LWhlYWRpbmcpO2NvbG9yOndoaXRlO2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpwb2ludGVy O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMDsnOwogICAgICAgICAgICB9CiAgICAgICAg ICAgIGlmIChlbXB0eSkgewogICAgICAgICAgICAgICAgcmV0dXJuICdwYWRkaW5nOjRweCAxMnB4 O2JvcmRlcjoxcHggc29saWQgIzhiMWExYTtiYWNrZ3JvdW5kOiM4YjFhMWE7Y29sb3I6I2ZmZjti b3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTJweDtmb250LXdlaWdo dDo1MDA7JzsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gJ3BhZGRpbmc6NHB4IDEy cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0t YmctY2FyZCk7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5KTtib3JkZXItcmFkaXVzOjRweDtjdXJz b3I6cG9pbnRlcjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDA7JzsKICAgICAgICB9Owog ICAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6NnB4O2ZsZXgtd3Jh cDp3cmFwO21hcmdpbi1ib3R0b206NnB4O2FsaWduLWl0ZW1zOmNlbnRlcjsiPicgKwogICAgICAg ICAgICAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQp O21hcmdpbi1yaWdodDo0cHg7Ij5LYXRlZ29yaWU6PC9zcGFuPicgKwogICAgICAgICAgICAnPGJ1 dHRvbiBzdHlsZT0iJyArIGJ0blN0eWxlKCdhbGwnLCBjYXRGaWx0ZXIsIGZhbHNlKSArICciIG9u Y2xpY2s9IkRyaXZlR292ZXJuYW5jZS5zaG93RW5nYWdlbWVudFN0YXRzKG51bGwsXCdhbGxcJyki PkFsbGU8L2J1dHRvbj4nOwogICAgICAgIGthdGVnb3JpZW4uZm9yRWFjaChmdW5jdGlvbihrKSB7 CiAgICAgICAgICAgIHZhciBoYXNOb0RvY3MgPSAhY2F0U3RhdHNba107CiAgICAgICAgICAgIGh0 bWwgKz0gJzxidXR0b24gc3R5bGU9IicgKyBidG5TdHlsZShrLCBjYXRGaWx0ZXIsIGhhc05vRG9j cykgKyAnIiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2Uuc2hvd0VuZ2FnZW1lbnRTdGF0cyhudWxs LFwnJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoaykgKyAnXCcpIj4nICsgRHJpdmVQb3J0YWwu ZXNjYXBlSFRNTChrKSArICc8L2J1dHRvbj4nOwogICAgICAgIH0pOwogICAgICAgIGh0bWwgKz0g JzwvZGl2Pic7CgogICAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6 NnB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1ib3R0b206MTBweDthbGlnbi1pdGVtczpjZW50ZXI7 Ij4nICsKICAgICAgICAgICAgJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIo LS10ZXh0LW11dGVkKTttYXJnaW4tcmlnaHQ6NHB4OyI+U29ydGllcnVuZzo8L3NwYW4+JyArCiAg ICAgICAgICAgICc8YnV0dG9uIHN0eWxlPSInICsgYnRuU3R5bGUoJ3RvdGFsJywgc29ydCkgKyAn IiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2Uuc2hvd0VuZ2FnZW1lbnRTdGF0cyhcJ3RvdGFsXCcp Ij5HZXNhbXQ8L2J1dHRvbj4nICsKICAgICAgICAgICAgJzxidXR0b24gc3R5bGU9IicgKyBidG5T dHlsZSgnY3JlYXRlZCcsIHNvcnQpICsgJyIgb25jbGljaz0iRHJpdmVHb3Zlcm5hbmNlLnNob3dF bmdhZ2VtZW50U3RhdHMoXCdjcmVhdGVkXCcpIj5FcnN0ZWxsdDwvYnV0dG9uPicgKwogICAgICAg ICAgICAnPGJ1dHRvbiBzdHlsZT0iJyArIGJ0blN0eWxlKCdlZGl0ZWQnLCBzb3J0KSArICciIG9u Y2xpY2s9IkRyaXZlR292ZXJuYW5jZS5zaG93RW5nYWdlbWVudFN0YXRzKFwnZWRpdGVkXCcpIj5C ZWFyYmVpdGV0PC9idXR0b24+JyArCiAgICAgICAgICAgICc8YnV0dG9uIHN0eWxlPSInICsgYnRu U3R5bGUoJ3Jldmlld3MnLCBzb3J0KSArICciIG9uY2xpY2s9IkRyaXZlR292ZXJuYW5jZS5zaG93 RW5nYWdlbWVudFN0YXRzKFwncmV2aWV3c1wnKSI+UmV2aWV3czwvYnV0dG9uPicgKwogICAgICAg ICc8L2Rpdj4nOwoKICAgICAgICAvLyBVc2VyLVRhYmVsbGUKICAgICAgICBpZiAoc29ydGVkVXNl cnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBodG1sICs9ICc8dGFibGUgY2xhc3M9ImRyaXZl LXRhYmxlIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4OyI+PHRoZWFkPjx0cj4nICsKICAgICAg ICAgICAgICAgICc8dGg+QmVudXR6ZXI8L3RoPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7 Ij5FcnN0ZWxsdDwvdGg+PHRoIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPkJlYXJiZWl0ZXQ8 L3RoPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij5SZXZpZXdzPC90aD48dGggc3R5bGU9 InRleHQtYWxpZ246Y2VudGVyOyI+R2VzYW10PC90aD48dGg+QWt0aXZzdGUgQmVyZWljaGU8L3Ro PicgKwogICAgICAgICAgICAnPC90cj48L3RoZWFkPjx0Ym9keT4nOwogICAgICAgICAgICBzb3J0 ZWRVc2Vycy5mb3JFYWNoKGZ1bmN0aW9uKHUpIHsKICAgICAgICAgICAgICAgIHZhciBkID0gdVsx XTsKICAgICAgICAgICAgICAgIHZhciB2YWxzID0gKGNhdEZpbHRlciAhPT0gJ2FsbCcgJiYgZC5r YXRlZ29yaWVuW2NhdEZpbHRlcl0pID8gZC5rYXRlZ29yaWVuW2NhdEZpbHRlcl0gOiBkOwogICAg ICAgICAgICAgICAgdmFyIHRvdGFsID0gdmFscy5jcmVhdGVkICsgdmFscy5lZGl0ZWQgKyB2YWxz LnJldmlld3M7CiAgICAgICAgICAgICAgICAvLyBUb3AtS2F0ZWdvcmllbiBmw7xyIGRpZXNlbiBV c2VyCiAgICAgICAgICAgICAgICB2YXIgdG9wQ2F0cyA9IE9iamVjdC5lbnRyaWVzKGQua2F0ZWdv cmllbikuc29ydChmdW5jdGlvbihhLGIpewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoYlsx XS5jcmVhdGVkK2JbMV0uZWRpdGVkK2JbMV0ucmV2aWV3cykgLSAoYVsxXS5jcmVhdGVkK2FbMV0u ZWRpdGVkK2FbMV0ucmV2aWV3cyk7CiAgICAgICAgICAgICAgICB9KS5zbGljZSgwLCAzKTsKICAg ICAgICAgICAgICAgIHZhciBjYXRUYWdzID0gdG9wQ2F0cy5tYXAoZnVuY3Rpb24oYykgewogICAg ICAgICAgICAgICAgICAgIHZhciBjdCA9IGNbMV0uY3JlYXRlZCArIGNbMV0uZWRpdGVkICsgY1sx XS5yZXZpZXdzOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9ImtleXdv cmQtdGFnIj4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChjWzBdKSArICcgKCcgKyBjdCArICcp PC9zcGFuPic7CiAgICAgICAgICAgICAgICB9KS5qb2luKCcgJyk7CgogICAgICAgICAgICAgICAg aHRtbCArPSAnPHRyPicgKwogICAgICAgICAgICAgICAgICAgICc8dGQ+PHN0cm9uZz4nICsgRHJp dmVQb3J0YWwuZXNjYXBlSFRNTCh1WzBdKSArICc8L3N0cm9uZz48L3RkPicgKwogICAgICAgICAg ICAgICAgICAgICc8dGQgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyI+JyArIHZhbHMuY3JlYXRl ZCArICc8L3RkPicgKwogICAgICAgICAgICAgICAgICAgICc8dGQgc3R5bGU9InRleHQtYWxpZ246 Y2VudGVyOyI+JyArIHZhbHMuZWRpdGVkICsgJzwvdGQ+JyArCiAgICAgICAgICAgICAgICAgICAg Jzx0ZCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij4nICsgdmFscy5yZXZpZXdzICsgJzwvdGQ+ JyArCiAgICAgICAgICAgICAgICAgICAgJzx0ZCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Zm9u dC13ZWlnaHQ6NjAwOyI+JyArIHRvdGFsICsgJzwvdGQ+JyArCiAgICAgICAgICAgICAgICAgICAg Jzx0ZD4nICsgY2F0VGFncyArICc8L3RkPicgKwogICAgICAgICAgICAgICAgJzwvdHI+JzsKICAg ICAgICAgICAgfSk7CiAgICAgICAgICAgIGh0bWwgKz0gJzwvdGJvZHk+PC90YWJsZT4nOwogICAg ICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9InBhZGRpbmc6MjBw eDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTsiPktlaW5lIERhdGVu IGbDvHIgZGllc2UgQXVzd2FobC48L2Rpdj4nOwogICAgICAgIH0KCiAgICAgICAgLy8gQmFsa2Vu ZGlhZ3JhbW0gKGtvbXBha3QpCiAgICAgICAgaWYgKHNvcnRlZFVzZXJzLmxlbmd0aCA+IDApIHsK ICAgICAgICAgICAgdmFyIG1heFVzZXIgPSBnZXRWYWwoc29ydGVkVXNlcnNbMF0pIHx8IDE7CiAg ICAgICAgICAgIHNvcnRlZFVzZXJzLmZvckVhY2goZnVuY3Rpb24odSkgewogICAgICAgICAgICAg ICAgdmFyIGQgPSB1WzFdOwogICAgICAgICAgICAgICAgdmFyIHZhbHMgPSAoY2F0RmlsdGVyICE9 PSAnYWxsJyAmJiBkLmthdGVnb3JpZW5bY2F0RmlsdGVyXSkgPyBkLmthdGVnb3JpZW5bY2F0Rmls dGVyXSA6IGQ7CiAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSB2YWxzLmNyZWF0ZWQgKyB2YWxz LmVkaXRlZCArIHZhbHMucmV2aWV3czsKICAgICAgICAgICAgICAgIGlmICh0b3RhbCA9PT0gMCkg cmV0dXJuOwogICAgICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic3RhdC1iYXItcm93 Ij48c3BhbiBjbGFzcz0ic3RhdC1iYXItbGFiZWwiPicgKyBEcml2ZVBvcnRhbC5lc2NhcGVIVE1M KHVbMF0pICsgJzwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ic3Rh dC1iYXIiPjxkaXYgY2xhc3M9InN0YXQtYmFyLWZpbGwiIHN0eWxlPSJ3aWR0aDonICsgKHRvdGFs L21heFVzZXIqMTAwKSArICclO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMyZDlk NzggJyArICh2YWxzLmNyZWF0ZWQvdG90YWwqMTAwKSArICclLCMzYjgyZjYgJyArICh2YWxzLmNy ZWF0ZWQvdG90YWwqMTAwKSArICclICcgKyAoKHZhbHMuY3JlYXRlZCt2YWxzLmVkaXRlZCkvdG90 YWwqMTAwKSArICclLCNlNjdlMjIgJyArICgodmFscy5jcmVhdGVkK3ZhbHMuZWRpdGVkKS90b3Rh bCoxMDApICsgJyUgMTAwJSk7Ij48L2Rpdj48L2Rpdj4nICsKICAgICAgICAgICAgICAgICAgICAn PHNwYW4gY2xhc3M9InN0YXQtYmFyLXZhbCI+JyArIHRvdGFsICsgJzwvc3Bhbj48L2Rpdj4nOwog ICAgICAgICAgICB9KTsKICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT0iZm9udC1zaXpl OjExcHg7Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCk7bWFyZ2luLXRvcDo0cHg7Ij5MZWdlbmRlOiA8 c3BhbiBzdHlsZT0iY29sb3I6IzJkOWQ3ODsiPuKWoDwvc3Bhbj4gRXJzdGVsbHQgLyA8c3BhbiBz dHlsZT0iY29sb3I6IzNiODJmNjsiPuKWoDwvc3Bhbj4gQmVhcmJlaXRldCAvIDxzcGFuIHN0eWxl PSJjb2xvcjojZTY3ZTIyOyI+4pagPC9zcGFuPiBSZXZpZXdzPC9kaXY+JzsKICAgICAgICB9Cgog ICAgICAgIC8vIC0tLSBLYXRlZ29yaWUtVmVydGVpbHVuZyArIFRvcCBTY2hsYWd3w7ZydGVyIG5l YmVuZWluYW5kZXIgLS0tCiAgICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT0iZGlzcGxheTpncmlk O2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoyMHB4O21hcmdpbi10b3A6MTZweDsi Pic7CgogICAgICAgIC8vIEthdGVnb3JpZW4KICAgICAgICBodG1sICs9ICc8ZGl2PjxoMyBzdHls ZT0iY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTttYXJnaW4tYm90dG9tOjhweDsiPkRva3VtZW50 ZSBwcm8gS2F0ZWdvcmllPC9oMz4nOwogICAgICAgIHZhciBhbGxDYXRFbnRyaWVzID0ga2F0ZWdv cmllbi5tYXAoZnVuY3Rpb24oaykgeyByZXR1cm4gW2ssIGNhdFN0YXRzW2tdIHx8IDBdOyB9KTsK ICAgICAgICBhbGxDYXRFbnRyaWVzLnNvcnQoZnVuY3Rpb24oYSxiKSB7IHJldHVybiBiWzFdIC0g YVsxXSB8fCBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSwgJ2RlJyk7IH0pOwogICAgICAgIGFsbENh dEVudHJpZXMuZm9yRWFjaChmdW5jdGlvbihjKSB7CiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYg Y2xhc3M9InN0YXQtYmFyLXJvdyI+PHNwYW4gY2xhc3M9InN0YXQtYmFyLWxhYmVsIj4nICsgRHJp dmVQb3J0YWwuZXNjYXBlSFRNTChjWzBdKSArICc8L3NwYW4+JyArCiAgICAgICAgICAgICAgICAn PGRpdiBjbGFzcz0ic3RhdC1iYXIiPjxkaXYgY2xhc3M9InN0YXQtYmFyLWZpbGwiIHN0eWxlPSJ3 aWR0aDonICsgKGNbMV0vbWF4Q2F0KjEwMCkgKyAnJTtiYWNrZ3JvdW5kOiMzYjgyZjY7Ij48L2Rp dj48L2Rpdj4nICsKICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz0ic3RhdC1iYXItdmFsIj4n ICsgY1sxXSArICc8L3NwYW4+PC9kaXY+JzsKICAgICAgICB9KTsKICAgICAgICBodG1sICs9ICc8 L2Rpdj4nOwoKICAgICAgICAvLyBUb3AgU2NobGFnd8O2cnRlcgogICAgICAgIGh0bWwgKz0gJzxk aXY+PGgzIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpO21hcmdpbi1ib3R0b206OHB4 OyI+VG9wIDEwIFNjaGxhZ3fDtnJ0ZXI8L2gzPic7CiAgICAgICAgaWYgKHRvcEt3cy5sZW5ndGgg PiAwKSB7CiAgICAgICAgICAgIHRvcEt3cy5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKICAgICAgICAg ICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InN0YXQtYmFyLXJvdyI+PHNwYW4gY2xhc3M9InN0 YXQtYmFyLWxhYmVsIj4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChrWzBdKSArICc8L3NwYW4+ JyArCiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InN0YXQtYmFyIj48ZGl2IGNsYXNz PSJzdGF0LWJhci1maWxsIiBzdHlsZT0id2lkdGg6JyArIChrWzFdL21heEt3KjEwMCkgKyAnJTti YWNrZ3JvdW5kOiMyZDlkNzg7Ij48L2Rpdj48L2Rpdj4nICsKICAgICAgICAgICAgICAgICAgICAn PHNwYW4gY2xhc3M9InN0YXQtYmFyLXZhbCI+JyArIGtbMV0gKyAnPC9zcGFuPjwvZGl2Pic7CiAg ICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7IGh0bWwgKz0gJzxkaXYgc3R5bGU9ImNvbG9y OnZhcigtLXRleHQtbXV0ZWQpO2ZvbnQtc2l6ZToxM3B4OyI+S2VpbmUgU2NobGFnd8O2cnRlciB2 b3JoYW5kZW4uPC9kaXY+JzsgfQogICAgICAgIGh0bWwgKz0gJzwvZGl2PjwvZGl2Pic7CgogICAg ICAgIC8vIE1vbmF0bGljaGUgRXJzdGVsbHVuZwogICAgICAgIGlmIChtb250aHMubGVuZ3RoID4g MCkgewogICAgICAgICAgICBodG1sICs9ICc8aDMgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtaGVh ZGluZyk7bWFyZ2luOjE2cHggMCA4cHg7Ij5FcnN0ZWxsdW5nIHBybyBNb25hdDwvaDM+JzsKICAg ICAgICAgICAgbW9udGhzLmZvckVhY2goZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgaHRt bCArPSAnPGRpdiBjbGFzcz0ic3RhdC1iYXItcm93Ij48c3BhbiBjbGFzcz0ic3RhdC1iYXItbGFi ZWwiPicgKyBtWzBdICsgJzwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFz cz0ic3RhdC1iYXIiPjxkaXYgY2xhc3M9InN0YXQtYmFyLWZpbGwiIHN0eWxlPSJ3aWR0aDonICsg KG1bMV0vbWF4TW9udGgqMTAwKSArICclO2JhY2tncm91bmQ6IzNhN2FhMzsiPjwvZGl2PjwvZGl2 PicgKwogICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz0ic3RhdC1iYXItdmFsIj4nICsg bVsxXSArICc8L3NwYW4+PC9kaXY+JzsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAg ICBodG1sICs9ICc8L2Rpdj4nOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1 bWVudERldGFpbCcpLmlubmVySFRNTCA9IGh0bWw7CiAgICB9LAoKICAgIC8vID09PSBTY2hsYWd3 b3J0LVZlcndhbHR1bmcgPT09CiAgICBfa3dNYW5hZ2VDdXJyZW50OiBudWxsLAoKICAgIG9wZW5L d01hbmFnZShrZXl3b3JkKSB7CiAgICAgICAgdGhpcy5fa3dNYW5hZ2VDdXJyZW50ID0ga2V5d29y ZDsKICAgICAgICB2YXIgYWZmZWN0ZWREb2NzID0gRHJpdmVGUy5kb2N1bWVudHMuZmlsdGVyKGZ1 bmN0aW9uKGQpIHsKICAgICAgICAgICAgcmV0dXJuIGQuc2NobGFnd29lcnRlciAmJiBkLnNjaGxh Z3dvZXJ0ZXIuaW5jbHVkZXMoa2V5d29yZCk7CiAgICAgICAgfSk7CgogICAgICAgIHZhciBib2R5 ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2t3TWFuYWdlQm9keScpOwogICAgICAgIHZhciBm b290ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna3dNYW5hZ2VGb290ZXInKTsKICAgICAg ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna3dNYW5hZ2VUaXRsZScpLnRleHRDb250ZW50ID0g J1NjaGxhZ3dvcnQ6ICcgKyBrZXl3b3JkOwoKICAgICAgICB2YXIgaHRtbCA9ICcnOwogICAgICAg IC8vIEJlYXJiZWl0dW5nc2ZlbGQKICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPSJtYXJnaW4t Ym90dG9tOjE0cHg7Ij4nICsKICAgICAgICAgICAgJzxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEy cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXRleHQtc2Vjb25kYXJ5KTtkaXNwbGF5OmJs b2NrO21hcmdpbi1ib3R0b206NHB4OyI+U2NobGFnd29ydCB1bWJlbmVubmVuPC9sYWJlbD4nICsK ICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ia3dNYW5hZ2VOZXdOYW1lIiB2YWx1 ZT0iJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoa2V5d29yZCkgKyAnIiAnICsKICAgICAgICAg ICAgJ3N0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2 YXIoLS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtc2l6ZToxNHB4O2JhY2tn cm91bmQ6dmFyKC0tYmctaW5wdXQpO2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Ij4nICsKICAg ICAgICAnPC9kaXY+JzsKCiAgICAgICAgLy8gQmV0cm9mZmVuZSBBcnRpa2VsCiAgICAgICAgaWYg KGFmZmVjdGVkRG9jcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgc3R5 bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10ZXh0LXNlY29u ZGFyeSk7bWFyZ2luLWJvdHRvbTo2cHg7Ij5WZXJ3ZW5kZXQgaW4gJyArIGFmZmVjdGVkRG9jcy5s ZW5ndGggKyAnIEFydGlrZWwnICsgKGFmZmVjdGVkRG9jcy5sZW5ndGggPiAxID8gJ24nIDogJycp ICsgJzo8L2Rpdj4nOwogICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJrdy1kb2MtbGlz dCI+JzsKICAgICAgICAgICAgYWZmZWN0ZWREb2NzLmZvckVhY2goZnVuY3Rpb24oZG9jKSB7CiAg ICAgICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJrdy1kb2MtaXRlbSI+JyArCiAgICAg ICAgICAgICAgICAgICAgJzxkaXY+PHNwYW4gY2xhc3M9Imt3LWRvYy10aXRsZSI+JyArIERyaXZl UG9ydGFsLmVzY2FwZUhUTUwoZG9jLnRpdGVsKSArICc8L3NwYW4+JyArCiAgICAgICAgICAgICAg ICAgICAgJzxkaXYgY2xhc3M9Imt3LWRvYy1rYXQiPicgKyBEcml2ZVBvcnRhbC5lc2NhcGVIVE1M KGRvYy5rYXRlZ29yaWUpICsKICAgICAgICAgICAgICAgICAgICAoZG9jLmVyc3RlbGx0Vm9uID8g JyDCtyB2b24gJyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoZG9jLmVyc3RlbGx0Vm9uKSA6ICcn KSArCiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PjwvZGl2PicgKwogICAgICAgICAgICAgICAg JzwvZGl2Pic7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBodG1sICs9ICc8L2Rpdj4nOwog ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9ImZvbnQtc2l6 ZToxM3B4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpO3BhZGRpbmc6MTBweCAwOyI+V2lyZCBpbiBr ZWluZW0gQXJ0aWtlbCB2ZXJ3ZW5kZXQuPC9kaXY+JzsKICAgICAgICB9CgogICAgICAgIC8vIEVy c2V0emVuLU9wdGlvbgogICAgICAgIHZhciBvdGhlckt3ID0gRHJpdmVFZGl0b3IuX2dldEFsbEtu b3duS2V5d29yZHMoKS5maWx0ZXIoZnVuY3Rpb24oaykgeyByZXR1cm4gayAhPT0ga2V5d29yZDsg fSk7CiAgICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxNHB4O2JvcmRlci10 b3A6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7cGFkZGluZy10b3A6MTJweDsiPicgKwog ICAgICAgICAgICAnPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7 Y29sb3I6dmFyKC0tdGV4dC1zZWNvbmRhcnkpO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo2 cHg7Ij5FcnNldHplbiBkdXJjaDwvbGFiZWw+JyArCiAgICAgICAgICAgICc8aW5wdXQgdHlwZT0i aGlkZGVuIiBpZD0ia3dNYW5hZ2VSZXBsYWNlIiB2YWx1ZT0iIj4nICsKICAgICAgICAgICAgJzxk aXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpO21hcmdpbi1i b3R0b206NnB4OyI+V8OkaGxlIGVpbiBTY2hsYWd3b3J0LCBkdXJjaCBkYXMgZGllc2VzIGJlaW0g TMO2c2NoZW4gb2RlciBVbWJlbmVubmVuIGVyc2V0enQgd2VyZGVuIHNvbGw6PC9kaXY+JyArCiAg ICAgICAgICAgICc8ZGl2IGlkPSJrd1JlcGxhY2VTZWxlY3RlZCIgc3R5bGU9Im1hcmdpbi1ib3R0 b206OHB4O2Rpc3BsYXk6bm9uZTtwYWRkaW5nOjZweCAxMHB4O2JvcmRlci1yYWRpdXM6NHB4O2Jh Y2tncm91bmQ6dmFyKC0tYmctYWN0aXZlKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLXRleHQtaGVh ZGluZyk7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTtkaXNwbGF5Om5v bmU7Ij4nICsKICAgICAgICAgICAgICAgICc8c3BhbiBpZD0ia3dSZXBsYWNlTGFiZWwiPjwvc3Bh bj4gPHNwYW4gc3R5bGU9ImN1cnNvcjpwb2ludGVyO21hcmdpbi1sZWZ0OjZweDtjb2xvcjp2YXIo LS10ZXh0LW11dGVkKTsiIG9uY2xpY2s9IkRyaXZlR292ZXJuYW5jZS5fY2xlYXJLd1JlcGxhY2Uo KSI+4pyVPC9zcGFuPicgKwogICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICc8ZGl2 IGNsYXNzPSJnb3Yta3ctbGlzdCIgc3R5bGU9Im1heC1oZWlnaHQ6MTIwcHg7IiBpZD0ia3dSZXBs YWNlT3B0aW9ucyI+JzsKICAgICAgICBvdGhlckt3LmZvckVhY2goZnVuY3Rpb24oa3cpIHsKICAg ICAgICAgICAgaHRtbCArPSAnPHNwYW4gY2xhc3M9Imdvdi1rdy1waWxsIiBvbmNsaWNrPSJEcml2 ZUdvdmVybmFuY2UuX3NlbGVjdEt3UmVwbGFjZShcJycgKyBEcml2ZVBvcnRhbC5lc2NhcGVBdHRy KGt3KSArICdcJykiPicgKwogICAgICAgICAgICAgICAgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChr dykgKyAnPC9zcGFuPic7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKG90aGVyS3cubGVuZ3RoID09 PSAwKSB7CiAgICAgICAgICAgIGh0bWwgKz0gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtj b2xvcjp2YXIoLS10ZXh0LW11dGVkKTsiPktlaW5lIGFuZGVyZW4gU2NobGFnd8O2cnRlciB2b3Jo YW5kZW48L3NwYW4+JzsKICAgICAgICB9CiAgICAgICAgaHRtbCArPSAnPC9kaXY+PC9kaXY+JzsK CiAgICAgICAgYm9keS5pbm5lckhUTUwgPSBodG1sOwoKICAgICAgICBmb290ZXIuaW5uZXJIVE1M ID0KICAgICAgICAgICAgJzxidXR0b24gb25jbGljaz0iRHJpdmVHb3Zlcm5hbmNlLmNsb3NlS3dN YW5hZ2UoKSI+U2NobGllw59lbjwvYnV0dG9uPicgKwogICAgICAgICAgICAnPGJ1dHRvbiBjbGFz cz0iZGFuZ2VyIiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2UuZGVsZXRlS2V5d29yZCgpIj5Mw7Zz Y2hlbjwvYnV0dG9uPicgKwogICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0icHJpbWFyeSIgb25j bGljaz0iRHJpdmVHb3Zlcm5hbmNlLnJlbmFtZUtleXdvcmQoKSI+VW1iZW5lbm5lbjwvYnV0dG9u Pic7CgogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrd01hbmFnZU1vZGFsJykuY2xh c3NMaXN0LmFkZCgnb3BlbicpOwogICAgfSwKCiAgICBjbG9zZUt3TWFuYWdlKCkgewogICAgICAg IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrd01hbmFnZU1vZGFsJykuY2xhc3NMaXN0LnJlbW92 ZSgnb3BlbicpOwogICAgICAgIHRoaXMuX2t3TWFuYWdlQ3VycmVudCA9IG51bGw7CiAgICB9LAoK ICAgIF9zZWxlY3RLd1JlcGxhY2Uoa3cpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgna3dNYW5hZ2VSZXBsYWNlJykudmFsdWUgPSBrdzsKICAgICAgICB2YXIgc2VsID0gZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ2t3UmVwbGFjZVNlbGVjdGVkJyk7CiAgICAgICAgc2VsLnN0eWxl LmRpc3BsYXkgPSAnZmxleCc7CiAgICAgICAgc2VsLnN0eWxlLmFsaWduSXRlbXMgPSAnY2VudGVy JzsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna3dSZXBsYWNlTGFiZWwnKS50ZXh0 Q29udGVudCA9IGt3OwogICAgICAgIC8vIEF1c2dld8OkaGx0ZSBQaWxsIGhlcnZvcmhlYmVuCiAg ICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2t3UmVwbGFjZU9wdGlvbnMgLmdvdi1r dy1waWxsJykuZm9yRWFjaChmdW5jdGlvbihlbCkgewogICAgICAgICAgICBlbC5zdHlsZS5vdXRs aW5lID0gZWwudGV4dENvbnRlbnQudHJpbSgpID09PSBrdyA/ICcycHggc29saWQgdmFyKC0tdGV4 dC1oZWFkaW5nKScgOiAnJzsKICAgICAgICB9KTsKICAgIH0sCgogICAgX2NsZWFyS3dSZXBsYWNl KCkgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrd01hbmFnZVJlcGxhY2UnKS52 YWx1ZSA9ICcnOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrd1JlcGxhY2VTZWxl Y3RlZCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxl Y3RvckFsbCgnI2t3UmVwbGFjZU9wdGlvbnMgLmdvdi1rdy1waWxsJykuZm9yRWFjaChmdW5jdGlv bihlbCkgewogICAgICAgICAgICBlbC5zdHlsZS5vdXRsaW5lID0gJyc7CiAgICAgICAgfSk7CiAg ICB9LAoKICAgIGFzeW5jIHJlbmFtZUtleXdvcmQoKSB7CiAgICAgICAgdmFyIG9sZE5hbWUgPSB0 aGlzLl9rd01hbmFnZUN1cnJlbnQ7CiAgICAgICAgdmFyIG5ld05hbWUgPSBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgna3dNYW5hZ2VOZXdOYW1lJykudmFsdWUudHJpbSgpOwogICAgICAgIGlmICgh bmV3TmFtZSB8fCBuZXdOYW1lID09PSBvbGROYW1lKSB7CiAgICAgICAgICAgIHNob3dUb2FzdCgn Qml0dGUgZWluZW4gbmV1ZW4gTmFtZW4gZWluZ2ViZW4nLCAnd2FybmluZycpOwogICAgICAgICAg ICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB2YXIgYWZmZWN0ZWQgPSBEcml2ZUZTLmRvY3Vt ZW50cy5maWx0ZXIoZnVuY3Rpb24oZCkgewogICAgICAgICAgICByZXR1cm4gZC5zY2hsYWd3b2Vy dGVyICYmIGQuc2NobGFnd29lcnRlci5pbmNsdWRlcyhvbGROYW1lKTsKICAgICAgICB9KTsKCiAg ICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFmZmVjdGVk Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBkb2MgPSBhZmZlY3RlZFtpXTsKICAgICAg ICAgICAgdmFyIGlkeCA9IGRvYy5zY2hsYWd3b2VydGVyLmluZGV4T2Yob2xkTmFtZSk7CiAgICAg ICAgICAgIGlmIChpZHggPj0gMCkgewogICAgICAgICAgICAgICAgZG9jLnNjaGxhZ3dvZXJ0ZXJb aWR4XSA9IG5ld05hbWU7CiAgICAgICAgICAgICAgICAvLyBEdXBsaWthdGUgZW50ZmVybmVuCiAg ICAgICAgICAgICAgICBkb2Muc2NobGFnd29lcnRlciA9IFsuLi5uZXcgU2V0KGRvYy5zY2hsYWd3 b2VydGVyKV07CiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgRHJpdmVGUy5zYXZl RG9jdW1lbnQoZG9jKTsKICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIGNvdW50 Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEF1Y2ggaW4gUFJFREVGSU5F RF9LRVlXT1JEUyBlcnNldHplbgogICAgICAgIHZhciBwcmVkSWR4ID0gRHJpdmVFZGl0b3IuUFJF REVGSU5FRF9LRVlXT1JEUy5pbmRleE9mKG9sZE5hbWUpOwogICAgICAgIGlmIChwcmVkSWR4ID49 IDApIERyaXZlRWRpdG9yLlBSRURFRklORURfS0VZV09SRFNbcHJlZElkeF0gPSBuZXdOYW1lOwoK ICAgICAgICBzaG93VG9hc3QoJ1NjaGxhZ3dvcnQgdW1iZW5hbm50OiAiJyArIG9sZE5hbWUgKyAn IiDihpIgIicgKyBuZXdOYW1lICsgJyIgKCcgKyBjb3VudCArICcgQXJ0aWtlbCknLCAnc3VjY2Vz cycpOwogICAgICAgIHRoaXMuY2xvc2VLd01hbmFnZSgpOwogICAgICAgIHRoaXMucmVuZGVyQWRt aW4oKTsKICAgICAgICBEcml2ZVBvcnRhbC5yZW5kZXIoKTsKICAgIH0sCgogICAgYXN5bmMgZGVs ZXRlS2V5d29yZCgpIHsKICAgICAgICB2YXIga2V5d29yZCA9IHRoaXMuX2t3TWFuYWdlQ3VycmVu dDsKICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna3dN YW5hZ2VSZXBsYWNlJykudmFsdWUudHJpbSgpOwoKICAgICAgICB2YXIgYWZmZWN0ZWQgPSBEcml2 ZUZTLmRvY3VtZW50cy5maWx0ZXIoZnVuY3Rpb24oZCkgewogICAgICAgICAgICByZXR1cm4gZC5z Y2hsYWd3b2VydGVyICYmIGQuc2NobGFnd29lcnRlci5pbmNsdWRlcyhrZXl3b3JkKTsKICAgICAg ICB9KTsKCiAgICAgICAgaWYgKGFmZmVjdGVkLmxlbmd0aCA+IDAgJiYgIWNvbmZpcm0oJ1NjaGxh Z3dvcnQgIicgKyBrZXl3b3JkICsgJyIgYXVzICcgKyBhZmZlY3RlZC5sZW5ndGggKyAnIEFydGlr ZWwnICsgKGFmZmVjdGVkLmxlbmd0aCA+IDEgPyAnbicgOiAnJykgKyAnIGVudGZlcm5lbj8nICsg KHJlcGxhY2VtZW50ID8gJ1xuRXJzZXR6dCBkdXJjaDogIicgKyByZXBsYWNlbWVudCArICciJyA6 ICcnKSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIGNvdW50 ID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFmZmVjdGVkLmxlbmd0aDsgaSsrKSB7 CiAgICAgICAgICAgIHZhciBkb2MgPSBhZmZlY3RlZFtpXTsKICAgICAgICAgICAgZG9jLnNjaGxh Z3dvZXJ0ZXIgPSBkb2Muc2NobGFnd29lcnRlci5maWx0ZXIoZnVuY3Rpb24oaykgeyByZXR1cm4g ayAhPT0ga2V5d29yZDsgfSk7CiAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCAmJiAhZG9jLnNj aGxhZ3dvZXJ0ZXIuaW5jbHVkZXMocmVwbGFjZW1lbnQpKSB7CiAgICAgICAgICAgICAgICBkb2Mu c2NobGFnd29lcnRlci5wdXNoKHJlcGxhY2VtZW50KTsKICAgICAgICAgICAgfQogICAgICAgICAg ICB2YXIgcmVzdWx0ID0gYXdhaXQgRHJpdmVGUy5zYXZlRG9jdW1lbnQoZG9jKTsKICAgICAgICAg ICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkgY291bnQrKzsKICAgICAgICB9CgogICAgICAgIC8vIEF1 cyBQUkVERUZJTkVEX0tFWVdPUkRTIGVudGZlcm5lbgogICAgICAgIHZhciBwcmVkSWR4ID0gRHJp dmVFZGl0b3IuUFJFREVGSU5FRF9LRVlXT1JEUy5pbmRleE9mKGtleXdvcmQpOwogICAgICAgIGlm IChwcmVkSWR4ID49IDApIERyaXZlRWRpdG9yLlBSRURFRklORURfS0VZV09SRFMuc3BsaWNlKHBy ZWRJZHgsIDEpOwoKICAgICAgICBzaG93VG9hc3QoJ1NjaGxhZ3dvcnQgIicgKyBrZXl3b3JkICsg JyIgZ2Vsw7ZzY2h0JyArIChyZXBsYWNlbWVudCA/ICcsIGVyc2V0enQgZHVyY2ggIicgKyByZXBs YWNlbWVudCArICciJyA6ICcnKSArICcgKCcgKyBjb3VudCArICcgQXJ0aWtlbCknLCAnc3VjY2Vz cycpOwogICAgICAgIHRoaXMuY2xvc2VLd01hbmFnZSgpOwogICAgICAgIHRoaXMucmVuZGVyQWRt aW4oKTsKICAgICAgICBEcml2ZVBvcnRhbC5yZW5kZXIoKTsKICAgIH0sCgogICAgLy8gPT09IEFk bWluLUFubGVpdHVuZyBmdWVyIEVpbnN0ZWlnZXIgPT09CiAgICBzaG93QWRtaW5HdWlkZSgpIHsK ICAgICAgICB2YXIgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb3ZBZG1pbkJvZHkn KTsKICAgICAgICBib2R5LmlubmVySFRNTCA9CiAgICAgICAgJzxkaXYgc3R5bGU9Im1heC13aWR0 aDo4MDBweDttYXJnaW46MCBhdXRvOyI+JyArCiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJkaXNw bGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVy O21hcmdpbi1ib3R0b206MTZweDsiPicgKwogICAgICAgICAgICAgICAgJzxoMiBzdHlsZT0iY29s b3I6dmFyKC0tdGV4dC1oZWFkaW5nKTttYXJnaW46MDsiPkFkbWluLUFubGVpdHVuZzwvaDI+JyAr CiAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iZ292LWFkZC1idG4iIHN0eWxlPSJwYWRk aW5nOjZweCAxNHB4OyIgb25jbGljaz0iRHJpdmVHb3Zlcm5hbmNlLnJlbmRlckFkbWluKCk7Ij5a dXLDvGNrIHp1ciBWZXJ3YWx0dW5nPC9idXR0b24+JyArCiAgICAgICAgICAgICc8L2Rpdj4nICsK CiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQpO2JvcmRl cjoxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5n OjE2cHggMjBweDttYXJnaW4tYm90dG9tOjE0cHg7Ij4nICsKICAgICAgICAgICAgICAgICc8aDMg c3R5bGU9ImNvbG9yOnZhcigtLXRleHQtaGVhZGluZyk7Zm9udC1zaXplOjE1cHg7bWFyZ2luLWJv dHRvbTo4cHg7Ij5XYXMgaXN0IGRpZXNlIERhdGVpPzwvaDM+JyArCiAgICAgICAgICAgICAgICAn PHAgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNztjb2xvcjp2YXIoLS10ZXh0 LXByaW1hcnkpOyI+JyArCiAgICAgICAgICAgICAgICAgICAgJ0RhcyBnZXNhbXRlIEQuUi5JLlYu RS4gUG9ydGFsIGJlc3RlaHQgYXVzIDxzdHJvbmc+ZWluZXIgZWluemlnZW4gRGF0ZWk8L3N0cm9u Zz46IDxjb2RlIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQtYWx0KTtwYWRkaW5nOjJw eCA2cHg7Ym9yZGVyLXJhZGl1czozcHg7Ij5pbmRleC5odG1sPC9jb2RlPi4gJyArCiAgICAgICAg ICAgICAgICAgICAgJ0luIGRpZXNlciBEYXRlaSBzdGVja3QgYWxsZXM6IGRhcyBBdXNzZWhlbiAo RmFyYmVuLCBTY2hyaWZ0Z3LDtsOfZW4sIEFic3TDpG5kZSksIGRpZSBTdHJ1a3R1ciAod2FzIHdv IGFuZ2V6ZWlndCB3aXJkKSB1bmQgZGllIExvZ2lrICh3YXMgcGFzc2llcnQgd2VubiBtYW4ga2xp Y2t0KS4gJyArCiAgICAgICAgICAgICAgICAgICAgJ01hbiBrYW5uIHNpZSBtaXQgamVkZW0gVGV4 dGVkaXRvciDDtmZmbmVuIOKAkyBmw7xyIHVucyBrbGFwcHQgaGllciBudXIgZGVyIG5vcm1hbGUg V2luZG93cy1FZGl0b3IgKFdpbmRvd3MgU3VjaGU6IEVkaXRvciknICsKICAgICAgICAgICAgICAg ICc8L3A+JyArCiAgICAgICAgICAgICc8L2Rpdj4nICsKCiAgICAgICAgICAgICc8ZGl2IHN0eWxl PSJiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVy LWxpZ2h0KTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE2cHggMjBweDttYXJnaW4tYm90dG9t OjE0cHg7Ij4nICsKICAgICAgICAgICAgICAgICc8aDMgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQt aGVhZGluZyk7Zm9udC1zaXplOjE1cHg7bWFyZ2luLWJvdHRvbTo4cHg7Ij5BdWZiYXUgZGVyIERh dGVpICgzIEJlcmVpY2hlKTwvaDM+JyArCiAgICAgICAgICAgICAgICAnPHAgc3R5bGU9ImZvbnQt c2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNztjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpO21hcmdp bi1ib3R0b206MTBweDsiPicgKwogICAgICAgICAgICAgICAgICAgICdEaWUgRGF0ZWkgaGF0IGRy ZWkgZ3Jvw59lIEFic2Nobml0dGUuIElociBlcmtlbm50IHNpZSBhbiBkZW4gS29tbWVudGFyZW4g aW0gQ29kZTonICsKICAgICAgICAgICAgICAgICc8L3A+JyArCiAgICAgICAgICAgICAgICAnPHRh YmxlIHN0eWxlPSJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6 MTNweDsiPicgKwogICAgICAgICAgICAgICAgICAgICc8dHIgc3R5bGU9ImJvcmRlci1ib3R0b206 MXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7Ij4nICsKICAgICAgICAgICAgICAgICAgICAg ICAgJzx0ZCBzdHlsZT0icGFkZGluZzo4cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLXRl eHQtaGVhZGluZyk7d2lkdGg6MTIwcHg7Ij4xLiBDU1M8L3RkPicgKwogICAgICAgICAgICAgICAg ICAgICAgICAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweDtjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkp OyI+QWxsZXMgendpc2NoZW4gPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmctY2FyZC1h bHQpO3BhZGRpbmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjJweDsiPiZsdDtzdHlsZSZndDs8L2Nv ZGU+IHVuZCA8Y29kZSBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkLWFsdCk7cGFkZGlu ZzoxcHggNHB4O2JvcmRlci1yYWRpdXM6MnB4OyI+Jmx0Oy9zdHlsZSZndDs8L2NvZGU+IOKAkyBo aWVyIHN0ZWhlbiA8c3Ryb25nPkZhcmJlbiwgU2NocmlmdGdyw7bDn2VuLCBBYnN0w6RuZGU8L3N0 cm9uZz4uIERhcyBpc3QgZGVyIEJlcmVpY2gsIGRlbiBpaHIgYW0gaMOkdWZpZ3N0ZW4gYW5wYXNz ZW4gd2VyZGV0LjwvdGQ+JyArCiAgICAgICAgICAgICAgICAgICAgJzwvdHI+JyArCiAgICAgICAg ICAgICAgICAgICAgJzx0ciBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9y ZGVyLWxpZ2h0KTsiPicgKwogICAgICAgICAgICAgICAgICAgICAgICAnPHRkIHN0eWxlPSJwYWRk aW5nOjhweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTsiPjIuIEhU TUw8L3RkPicgKwogICAgICAgICAgICAgICAgICAgICAgICAnPHRkIHN0eWxlPSJwYWRkaW5nOjhw eDtjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpOyI+RGVyIG1pdHRsZXJlIFRlaWwg4oCTIGhpZXIg c3RlaHQgZGllIDxzdHJvbmc+U3RydWt0dXI8L3N0cm9uZz46IEJ1dHRvbnMsIMOcYmVyc2Nocmlm dGVuLCBFaW5nYWJlZmVsZGVyLiBUZXh0ZSB3aWUg4oCeUHLDvGZ1bmdlbiIgb2RlciDigJ5Hb3Zl cm5hbmNlIiBmaW5kZXQgaWhyIGhpZXIuPC90ZD4nICsKICAgICAgICAgICAgICAgICAgICAnPC90 cj4nICsKICAgICAgICAgICAgICAgICAgICAnPHRyPicgKwogICAgICAgICAgICAgICAgICAgICAg ICAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tdGV4 dC1oZWFkaW5nKTsiPjMuIEphdmFTY3JpcHQ8L3RkPicgKwogICAgICAgICAgICAgICAgICAgICAg ICAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweDtjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpOyI+QWxs ZXMgendpc2NoZW4gPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmctY2FyZC1hbHQpO3Bh ZGRpbmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjJweDsiPiZsdDtzY3JpcHQmZ3Q7PC9jb2RlPiB1 bmQgPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmctY2FyZC1hbHQpO3BhZGRpbmc6MXB4 IDRweDtib3JkZXItcmFkaXVzOjJweDsiPiZsdDsvc2NyaXB0Jmd0OzwvY29kZT4g4oCTIGRpZSA8 c3Ryb25nPkxvZ2lrPC9zdHJvbmc+LiBIaWVyIHBhc3NpZXJ0IGFsbGVzLCB3YXMgYmVpIEtsaWNr cywgU3BlaWNoZXJuIHVzdy4gYXVzZ2Vmw7xocnQgd2lyZC4gPHN0cm9uZyBzdHlsZT0iY29sb3I6 I2RjMzU0NTsiPlZPUlNJQ0hUOiDDhG5kZXJ1bmdlbiBoaWVyIGvDtm5uZW4gZGFzIGdlc2FtdGUg U3lzdGVtIGthcHV0dG1hY2hlbiE8L3N0cm9uZz48L3RkPicgKwogICAgICAgICAgICAgICAgICAg ICc8L3RyPicgKwogICAgICAgICAgICAgICAgJzwvdGFibGU+JyArCiAgICAgICAgICAgICc8L2Rp dj4nICsKCiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQp O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTtib3JkZXItcmFkaXVzOjhweDtw YWRkaW5nOjE2cHggMjBweDttYXJnaW4tYm90dG9tOjE0cHg7Ij4nICsKICAgICAgICAgICAgICAg ICc8aDMgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtaGVhZGluZyk7Zm9udC1zaXplOjE1cHg7bWFy Z2luLWJvdHRvbTo4cHg7Ij5GYXJiZW4gw6RuZGVybiDigJMgc28gZ2VodFwnczwvaDM+JyArCiAg ICAgICAgICAgICAgICAnPHAgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNztj b2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpO21hcmdpbi1ib3R0b206MTBweDsiPicgKwogICAgICAg ICAgICAgICAgICAgICdHYW56IG9iZW4gaW4gZGVyIERhdGVpIChjYS4gWmVpbGUgMTYpIHN0ZWh0 IGVpbiBCbG9jayBtaXQgPHN0cm9uZz5DU1MtVmFyaWFibGVuPC9zdHJvbmc+LiBEYXMgc2luZCBk aWUg4oCeR3J1bmRmYXJiZW4iIGRlcyBnZXNhbXRlbiBTeXN0ZW1zLiAnICsKICAgICAgICAgICAg ICAgICAgICAnV2VubiBpaHIgaGllciBlaW5lIEZhcmJlIMOkbmRlcnQsIMOkbmRlcnQgc2llIHNp Y2ggPHN0cm9uZz7DvGJlcmFsbDwvc3Ryb25nPiBhdWYgZGVyIFNlaXRlOicgKwogICAgICAgICAg ICAgICAgJzwvcD4nICsKICAgICAgICAgICAgICAgICc8cHJlIHN0eWxlPSJiYWNrZ3JvdW5kOnZh cigtLWJnLWNhcmQtYWx0KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7Ym9y ZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMnB4IDE2cHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWln aHQ6MS44O292ZXJmbG93LXg6YXV0bztjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpOyI+JyArCic6 cm9vdCB7JyArICdcXG4nICsKJyAgICAtLWJnLXByaW1hcnk6ICMxYTIzMzI7ICAgICAgPHNwYW4g c3R5bGU9ImNvbG9yOnZhcigtLXRleHQtbXV0ZWQpOyI+LyogS29wZnplaWxlIChkdW5rbGVzIEJs YXUpICovPC9zcGFuPicgKyAnXFxuJyArCicgICAgLS1iZy1ib2R5OiAjZjVmNWY1OyAgICAgICAg IDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTsiPi8qIFNlaXRlbmhpbnRlcmdy dW5kIChoZWxsZ3JhdSkgKi88L3NwYW4+JyArICdcXG4nICsKJyAgICAtLWJnLWNhcmQ6ICNmZmZm ZmY7ICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtbXV0ZWQpOyI+LyogS2Fy dGVuL0JveGVuICh3ZWnDnykgKi88L3NwYW4+JyArICdcXG4nICsKJyAgICAtLXRleHQtcHJpbWFy eTogIzMzMzsgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtbXV0ZWQpOyI+Lyog Tm9ybWFsZXIgVGV4dCAoZHVua2VsZ3JhdSkgKi88L3NwYW4+JyArICdcXG4nICsKJyAgICAtLXRl eHQtaGVhZGluZzogIzJFNEE2MjsgICAgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtbXV0 ZWQpOyI+Lyogw5xiZXJzY2hyaWZ0ZW4gKFBvbGl6ZWktQmxhdSkgKi88L3NwYW4+JyArICdcXG4n ICsKJyAgICAtLWJvcmRlci1jb2xvcjogI2RkZDsgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOnZh cigtLXRleHQtbXV0ZWQpOyI+LyogUmFobWVubGluaWVuIChoZWxsZ3JhdSkgKi88L3NwYW4+JyAr ICdcXG4nICsKJ30nICsKICAgICAgICAgICAgICAgICc8L3ByZT4nICsKICAgICAgICAgICAgICAg ICc8cCBzdHlsZT0iZm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS43O2NvbG9yOnZhcigtLXRl eHQtcHJpbWFyeSk7bWFyZ2luLXRvcDoxMHB4OyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzxz dHJvbmc+QmVpc3BpZWw6PC9zdHJvbmc+IElociB3b2xsdCBkaWUgS29wZnplaWxlIHJvdCBtYWNo ZW4/IMOEbmRlcnQgPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmctY2FyZC1hbHQpO3Bh ZGRpbmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjJweDsiPiMxYTIzMzI8L2NvZGU+ICcgKwogICAg ICAgICAgICAgICAgICAgICdoaW50ZXIgPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmct Y2FyZC1hbHQpO3BhZGRpbmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjJweDsiPi0tYmctcHJpbWFy eTwvY29kZT4genUgPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmctY2FyZC1hbHQpO3Bh ZGRpbmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjJweDsiPiNjYzAwMDA8L2NvZGU+LiBTcGVpY2hl cm4sIFNlaXRlIG5ldSBsYWRlbiDigJMgZmVydGlnLicgKwogICAgICAgICAgICAgICAgJzwvcD4n ICsKICAgICAgICAgICAgICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6 MS43O2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7bWFyZ2luLXRvcDo2cHg7Ij4nICsKICAgICAg ICAgICAgICAgICAgICAnPHN0cm9uZz5UaXBwOjwvc3Ryb25nPiBGYXJiZW4gc2luZCBhbHMg4oCe SGV4LUNvZGVzIiBhbmdlZ2ViZW4gKHouQi4gPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0t YmctY2FyZC1hbHQpO3BhZGRpbmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjJweDsiPiMyRTRBNjI8 L2NvZGU+KS4gJyArCiAgICAgICAgICAgICAgICAgICAgJ1N1Y2h0IGltIEludGVybmV0IG5hY2gg 4oCeSFRNTCBDb2xvciBQaWNrZXIiIOKAkyBkYSBrw7ZubnQgaWhyIEZhcmJlbiB2aXN1ZWxsIGF1 c3fDpGhsZW4gdW5kIGRlbiBDb2RlIGtvcGllcmVuLicgKwogICAgICAgICAgICAgICAgJzwvcD4n ICsKICAgICAgICAgICAgJzwvZGl2PicgKwoKICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImJhY2tn cm91bmQ6dmFyKC0tYmctY2FyZCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQp O2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTZweCAyMHB4O21hcmdpbi1ib3R0b206MTRweDsi PicgKwogICAgICAgICAgICAgICAgJzxoMyBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5n KTtmb250LXNpemU6MTVweDttYXJnaW4tYm90dG9tOjhweDsiPk5hY2h0LU1vZHVzIEZhcmJlbiDD pG5kZXJuPC9oMz4nICsKICAgICAgICAgICAgICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjEzcHg7 bGluZS1oZWlnaHQ6MS43O2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Ij4nICsKICAgICAgICAg ICAgICAgICAgICAnRGlyZWt0IHVudGVyIGRlbSA8Y29kZSBzdHlsZT0iYmFja2dyb3VuZDp2YXIo LS1iZy1jYXJkLWFsdCk7cGFkZGluZzoxcHggNHB4O2JvcmRlci1yYWRpdXM6MnB4OyI+OnJvb3Q8 L2NvZGU+LUJsb2NrIChjYS4gWmVpbGUgNDEpIHN0ZWh0IGVpbiB6d2VpdGVyIEJsb2NrIG1pdCAn ICsKICAgICAgICAgICAgICAgICAgICAnPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmct Y2FyZC1hbHQpO3BhZGRpbmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjJweDsiPltkYXRhLXRoZW1l PSJuaWdodCJdPC9jb2RlPi4gRGFzIHNpbmQgZGllIEZhcmJlbiBmw7xyIGRlbiA8c3Ryb25nPkR1 bmtlbG1vZHVzPC9zdHJvbmc+LiAnICsKICAgICAgICAgICAgICAgICAgICAnR2xlaWNoZSBWYXJp YWJsZW4tTmFtZW4sIGFuZGVyZSBXZXJ0ZS4gV2VubiBpaHIgei5CLiBkZW4gSGludGVyZ3J1bmQg aW0gRHVua2VsbW9kdXMgaGVsbGVyIHdvbGx0LCDDpG5kZXJ0IGlociAnICsKICAgICAgICAgICAg ICAgICAgICAnPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmctY2FyZC1hbHQpO3BhZGRp bmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjJweDsiPi0tYmctYm9keTwvY29kZT4gZG9ydC4nICsK ICAgICAgICAgICAgICAgICc8L3A+JyArCiAgICAgICAgICAgICc8L2Rpdj4nICsKCiAgICAgICAg ICAgICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQpO2JvcmRlcjoxcHggc29s aWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE2cHggMjBw eDttYXJnaW4tYm90dG9tOjE0cHg7Ij4nICsKICAgICAgICAgICAgICAgICc8aDMgc3R5bGU9ImNv bG9yOnZhcigtLXRleHQtaGVhZGluZyk7Zm9udC1zaXplOjE1cHg7bWFyZ2luLWJvdHRvbTo4cHg7 Ij5UZXh0ZSB1bmQgQmVzY2hyaWZ0dW5nZW4gw6RuZGVybjwvaDM+JyArCiAgICAgICAgICAgICAg ICAnPHAgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNztjb2xvcjp2YXIoLS10 ZXh0LXByaW1hcnkpO21hcmdpbi1ib3R0b206MTBweDsiPicgKwogICAgICAgICAgICAgICAgICAg ICdOdXR6dCBkaWUgPHN0cm9uZz5TdWNoZW4tRnVua3Rpb248L3N0cm9uZz4gZXVyZXMgRWRpdG9y cyAoU3RyZytGKSB1bmQgc3VjaHQgbmFjaCBkZW0gVGV4dCwgZGVuIGlociDDpG5kZXJuIHdvbGx0 LiBCZWlzcGllbGU6JyArCiAgICAgICAgICAgICAgICAnPC9wPicgKwogICAgICAgICAgICAgICAg Jzx1bCBzdHlsZT0iZm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6Mjtjb2xvcjp2YXIoLS10ZXh0 LXByaW1hcnkpO3BhZGRpbmctbGVmdDoyMHB4OyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzxs aT5Lb3BmemVpbGUg4oCeRGlnaXRhbGVzIFJlc3NvdXJjZW4tIHVuZCBJbmZvcm1hdGlvbnNwb3J0 YWwgVmVya2VociIg4oaSIHN1Y2h0IGdlbmF1IGRpZXNlbiBUZXh0PC9saT4nICsKICAgICAgICAg ICAgICAgICAgICAnPGxpPkZvb3Rlci1UZXh0IOKAnkQuUi5JLlYuRS4gLSBQb2xpemVpIE5SVyIg 4oaSIHN1Y2h0IGRpZXNlbiBUZXh0PC9saT4nICsKICAgICAgICAgICAgICAgICAgICAnPGxpPkJ1 dHRvbi1CZXNjaHJpZnR1bmdlbiB3aWUg4oCeQmVhcmJlaXRlbiIsIOKAnkzDtnNjaGVuIiDihpIg c3VjaHQgZGVuIEJ1dHRvbi1UZXh0PC9saT4nICsKICAgICAgICAgICAgICAgICAgICAnPGxpPkth dGVnb3JpZW4gd2llIOKAnlZlcmtlaHIiLCDigJ5TaWNoZXJoZWl0IiDihpIgZGllc2Ugc3RlaGVu IGluIDxjb2RlIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQtYWx0KTtwYWRkaW5nOjFw eCA0cHg7Ym9yZGVyLXJhZGl1czoycHg7Ij5kYXRhL2NvbmZpZy5qc29uPC9jb2RlPiAobmljaHQg aW4gaW5kZXguaHRtbCEpPC9saT4nICsKICAgICAgICAgICAgICAgICc8L3VsPicgKwogICAgICAg ICAgICAnPC9kaXY+JyArCgogICAgICAgICAgICAnPGRpdiBzdHlsZT0iYmFja2dyb3VuZDp2YXIo LS1iZy1jYXJkKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7Ym9yZGVyLXJh ZGl1czo4cHg7cGFkZGluZzoxNnB4IDIwcHg7bWFyZ2luLWJvdHRvbToxNHB4OyI+JyArCiAgICAg ICAgICAgICAgICAnPGgzIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpO2ZvbnQtc2l6 ZToxNXB4O21hcmdpbi1ib3R0b206OHB4OyI+QnJvd3Nlci1FbnR3aWNrbGVydG9vbHMgbnV0emVu IChkZXIgYmVzdGUgVHJpY2shKTwvaDM+JyArCiAgICAgICAgICAgICAgICAnPHAgc3R5bGU9ImZv bnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNztjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpO21h cmdpbi1ib3R0b206MTBweDsiPicgKwogICAgICAgICAgICAgICAgICAgICdEcsO8Y2t0IGltIEJy b3dzZXIgPHN0cm9uZz5GMTI8L3N0cm9uZz4gKG9kZXIgUmVjaHRza2xpY2sg4oaSIOKAnlVudGVy c3VjaGVuIikuIEVzIMO2ZmZuZXQgc2ljaCBlaW4gV2Vya3pldWctRmVuc3Rlci4gRGFtaXQga8O2 bm50IGlocjonICsKICAgICAgICAgICAgICAgICc8L3A+JyArCiAgICAgICAgICAgICAgICAnPG9s IHN0eWxlPSJmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoyO2NvbG9yOnZhcigtLXRleHQtcHJp bWFyeSk7cGFkZGluZy1sZWZ0OjIwcHg7Ij4nICsKICAgICAgICAgICAgICAgICAgICAnPGxpPk1p dCBkZW0gPHN0cm9uZz5BdXN3YWhsLVdlcmt6ZXVnPC9zdHJvbmc+IChQZmVpbC1JY29uIG9iZW4g bGlua3MgaW0gV2Vya3pldWcpIGF1ZiBlaW4gYmVsaWViaWdlcyBFbGVtZW50IGtsaWNrZW48L2xp PicgKwogICAgICAgICAgICAgICAgICAgICc8bGk+SW0gcmVjaHRlbiBCZXJlaWNoIHNlaHQgaWhy IGRpZSA8c3Ryb25nPkNTUy1FaWdlbnNjaGFmdGVuPC9zdHJvbmc+IGRpZXNlcyBFbGVtZW50czwv bGk+JyArCiAgICAgICAgICAgICAgICAgICAgJzxsaT5JaHIga8O2bm50IEZhcmJlbiwgU2Nocmlm dGdyw7bDn2VuIHVzdy4gPHN0cm9uZz5saXZlIMOkbmRlcm48L3N0cm9uZz4gdW5kIGRhcyBFcmdl Ym5pcyBzb2ZvcnQgc2VoZW48L2xpPicgKwogICAgICAgICAgICAgICAgICAgICc8bGk+V2VubiBl cyBndXQgYXVzc2llaHQ6IGRlbiBXZXJ0IG5vdGllcmVuIHVuZCBpbiBkZXIgZWNodGVuIERhdGVp IMOkbmRlcm48L2xpPicgKwogICAgICAgICAgICAgICAgJzwvb2w+JyArCiAgICAgICAgICAgICAg ICAnPHAgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNztjb2xvcjp2YXIoLS10 ZXh0LXByaW1hcnkpO21hcmdpbi10b3A6NnB4OyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzxz dHJvbmc+V2ljaHRpZzo8L3N0cm9uZz4gw4RuZGVydW5nZW4gaW0gQnJvd3Nlci1XZXJremV1ZyBz aW5kIDxlbT50ZW1wb3LDpHI8L2VtPiDigJMgbmFjaCBkZW0gTmV1bGFkZW4gc2luZCBzaWUgd2Vn LiAnICsKICAgICAgICAgICAgICAgICAgICAnWnVtIGRhdWVyaGFmdGVuIMOEbmRlcm4gbcO8c3N0 IGlociBkaWUgPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmctY2FyZC1hbHQpO3BhZGRp bmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjJweDsiPmluZGV4Lmh0bWw8L2NvZGU+IGJlYXJiZWl0 ZW4uJyArCiAgICAgICAgICAgICAgICAnPC9wPicgKwogICAgICAgICAgICAnPC9kaXY+JyArCgog ICAgICAgICAgICAnPGRpdiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkKTtib3JkZXI6 MXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzox NnB4IDIwcHg7bWFyZ2luLWJvdHRvbToxNHB4OyI+JyArCiAgICAgICAgICAgICAgICAnPGgzIHN0 eWxlPSJjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpO2ZvbnQtc2l6ZToxNXB4O21hcmdpbi1ib3R0 b206OHB4OyI+V2ljaHRpZ2UgRGF0ZWllbiBpbSDDnGJlcmJsaWNrPC9oMz4nICsKICAgICAgICAg ICAgICAgICc8dGFibGUgc3R5bGU9IndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNl O2ZvbnQtc2l6ZToxM3B4OyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzx0ciBzdHlsZT0iYm9y ZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsiPicgKwogICAgICAgICAg ICAgICAgICAgICAgICAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweDtmb250LXdlaWdodDo2MDA7Y29s b3I6dmFyKC0tdGV4dC1oZWFkaW5nKTt3aWR0aDoyMDBweDsiPmluZGV4Lmh0bWw8L3RkPicgKwog ICAgICAgICAgICAgICAgICAgICAgICAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweDtjb2xvcjp2YXIo LS10ZXh0LXByaW1hcnkpOyI+RGllIGtvbXBsZXR0ZSBBcHAg4oCTIEF1c3NlaGVuICsgTG9naWsu IEhpZXIgw6RuZGVydCBpaHIgRmFyYmVuLCBUZXh0ZSwgTGF5b3V0LjwvdGQ+JyArCiAgICAgICAg ICAgICAgICAgICAgJzwvdHI+JyArCiAgICAgICAgICAgICAgICAgICAgJzx0ciBzdHlsZT0iYm9y ZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsiPicgKwogICAgICAgICAg ICAgICAgICAgICAgICAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweDtmb250LXdlaWdodDo2MDA7Y29s b3I6dmFyKC0tdGV4dC1oZWFkaW5nKTsiPmRhdGEvY29uZmlnLmpzb248L3RkPicgKwogICAgICAg ICAgICAgICAgICAgICAgICAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweDtjb2xvcjp2YXIoLS10ZXh0 LXByaW1hcnkpOyI+S2F0ZWdvcmllbiB1bmQgU3RhdHVzLURlZmluaXRpb25lbi4gSGllciBzdGVo ZW4gZGllIDI3IEZhY2hiZXJlaWNoZS48L3RkPicgKwogICAgICAgICAgICAgICAgICAgICc8L3Ry PicgKwogICAgICAgICAgICAgICAgICAgICc8dHIgc3R5bGU9ImJvcmRlci1ib3R0b206MXB4IHNv bGlkIHZhcigtLWJvcmRlci1saWdodCk7Ij4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzx0 ZCBzdHlsZT0icGFkZGluZzo4cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXRleHQtaGVh ZGluZyk7Ij5kYXRhL2dvdmVybmFuY2UuanNvbjwvdGQ+JyArCiAgICAgICAgICAgICAgICAgICAg ICAgICc8dGQgc3R5bGU9InBhZGRpbmc6OHB4O2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Ij5S b2xsZW4gKFN1cGVyVXNlciwgUmV2aWV3ZXIpLiA8c3Ryb25nPlZlcnNjaGzDvHNzZWx0PC9zdHJv bmc+IOKAkyBudXIgw7xiZXIgZGllc2VzIFBhbmVsIGhpZXIgYmVhcmJlaXRiYXIhPC90ZD4nICsK ICAgICAgICAgICAgICAgICAgICAnPC90cj4nICsKICAgICAgICAgICAgICAgICAgICAnPHRyIHN0 eWxlPSJib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyI+JyArCiAg ICAgICAgICAgICAgICAgICAgICAgICc8dGQgc3R5bGU9InBhZGRpbmc6OHB4O2ZvbnQtd2VpZ2h0 OjYwMDtjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpOyI+ZGF0YS9bS2F0ZWdvcmllXS8qLmpzb248 L3RkPicgKwogICAgICAgICAgICAgICAgICAgICAgICAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweDtj b2xvcjp2YXIoLS10ZXh0LXByaW1hcnkpOyI+RGllIGVpZ2VudGxpY2hlbiBEb2t1bWVudGUuIEpl ZGVyIEFydGlrZWwgaXN0IGVpbmUgSlNPTi1EYXRlaSBpbSBLYXRlZ29yaWUtT3JkbmVyLjwvdGQ+ JyArCiAgICAgICAgICAgICAgICAgICAgJzwvdHI+JyArCiAgICAgICAgICAgICAgICAgICAgJzx0 ciBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsiPicg KwogICAgICAgICAgICAgICAgICAgICAgICAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweDtmb250LXdl aWdodDo2MDA7Y29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTsiPnNlcnZlci5wczE8L3RkPicgKwog ICAgICAgICAgICAgICAgICAgICAgICAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweDtjb2xvcjp2YXIo LS10ZXh0LXByaW1hcnkpOyI+RGVyIFNlcnZlciAoUG93ZXJTaGVsbCkuIFN0YXJ0ZXQgYXV0b21h dGlzY2ggw7xiZXIgRFJJVkVfU3RhcnQuYmF0LjwvdGQ+JyArCiAgICAgICAgICAgICAgICAgICAg JzwvdHI+JyArCiAgICAgICAgICAgICAgICAgICAgJzx0cj4nICsKICAgICAgICAgICAgICAgICAg ICAgICAgJzx0ZCBzdHlsZT0icGFkZGluZzo4cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigt LXRleHQtaGVhZGluZyk7Ij5EUklWRV9TdGFydC5iYXQ8L3RkPicgKwogICAgICAgICAgICAgICAg ICAgICAgICAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweDtjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnkp OyI+RG9wcGVsa2xpY2sgenVtIFN0YXJ0ZW4uIMOWZmZuZXQgZGVuIFNlcnZlciB1bmQgZGVuIEJy b3dzZXIuPC90ZD4nICsKICAgICAgICAgICAgICAgICAgICAnPC90cj4nICsKICAgICAgICAgICAg ICAgICc8L3RhYmxlPicgKwogICAgICAgICAgICAnPC9kaXY+JyArCgogICAgICAgICAgICAnPGRp diBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkKTtib3JkZXI6MXB4IHNvbGlkIHZhcigt LWJvcmRlci1saWdodCk7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNnB4IDIwcHg7bWFyZ2lu LWJvdHRvbToxNHB4OyI+JyArCiAgICAgICAgICAgICAgICAnPGgzIHN0eWxlPSJjb2xvcjp2YXIo LS10ZXh0LWhlYWRpbmcpO2ZvbnQtc2l6ZToxNXB4O21hcmdpbi1ib3R0b206OHB4OyI+SMOkdWZp Z2UgQW5wYXNzdW5nZW4g4oCTIFNjaHJpdHQgZsO8ciBTY2hyaXR0PC9oMz4nICsKICAgICAgICAg ICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjc7Y29sb3I6 dmFyKC0tdGV4dC1wcmltYXJ5KTsiPicgKwogICAgICAgICAgICAgICAgICAgICc8cCBzdHlsZT0i Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi10b3A6MTBweDtjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcp OyI+TG9nby9UaXRlbCBpbiBkZXIgS29wZnplaWxlIMOkbmRlcm46PC9wPicgKwogICAgICAgICAg ICAgICAgICAgICc8cD5TdWNodCBuYWNoIOKAnkRpZ2l0YWxlcyBSZXNzb3VyY2VuLSB1bmQgSW5m b3JtYXRpb25zcG9ydGFsIiBpbiBkZXIgaW5kZXguaHRtbC4gRGVyIFRleHQgc3RlaHQgaW0gSFRN TC1CZXJlaWNoIGluIGVpbmVtIDxjb2RlIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQt YWx0KTtwYWRkaW5nOjFweCA0cHg7Ym9yZGVyLXJhZGl1czoycHg7Ij4mbHQ7aGVhZGVyJmd0Ozwv Y29kZT4tVGFnLjwvcD4nICsKCiAgICAgICAgICAgICAgICAgICAgJzxwIHN0eWxlPSJmb250LXdl aWdodDo3MDA7bWFyZ2luLXRvcDoxMnB4O2NvbG9yOnZhcigtLXRleHQtaGVhZGluZyk7Ij5OZXVl IEthdGVnb3JpZSBoaW56dWbDvGdlbjo8L3A+JyArCiAgICAgICAgICAgICAgICAgICAgJzxwPkdl aHQgw7xiZXIgZGllc2VzIEdvdmVybmFuY2UtUGFuZWwgKEthdGVnb3JpZW4tU2VrdGlvbiB1bnRl biBsaW5rcykuIEFsdGVybmF0aXY6IDxjb2RlIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWJnLWNh cmQtYWx0KTtwYWRkaW5nOjFweCA0cHg7Ym9yZGVyLXJhZGl1czoycHg7Ij5kYXRhL2NvbmZpZy5q c29uPC9jb2RlPiDDtmZmbmVuIHVuZCBkZW4gS2F0ZWdvcmllbmFtZW4gaW4gZGllIExpc3RlIGVp bmbDvGdlbi48L3A+JyArCgogICAgICAgICAgICAgICAgICAgICc8cCBzdHlsZT0iZm9udC13ZWln aHQ6NzAwO21hcmdpbi10b3A6MTJweDtjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpOyI+U2Nocmlm dGFydCDDpG5kZXJuOjwvcD4nICsKICAgICAgICAgICAgICAgICAgICAnPHA+U3VjaHQgbmFjaCA8 Y29kZSBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkLWFsdCk7cGFkZGluZzoxcHggNHB4 O2JvcmRlci1yYWRpdXM6MnB4OyI+Zm9udC1mYW1pbHk8L2NvZGU+IGluIGRlciBpbmRleC5odG1s LiBEaWUgSGF1cHRzY2hyaWZ0YXJ0IHN0ZWh0IGJlaW0gPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6 dmFyKC0tYmctY2FyZC1hbHQpO3BhZGRpbmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjJweDsiPmJv ZHk8L2NvZGU+LUVsZW1lbnQuICcgKwogICAgICAgICAgICAgICAgICAgICdEYSBkYXMgU3lzdGVt IG9mZmxpbmUgbMOkdWZ0LCBmdW5rdGlvbmllcmVuIG51ciBTY2hyaWZ0YXJ0ZW4sIGRpZSBhdWYg ZGVtIFJlY2huZXIgaW5zdGFsbGllcnQgc2luZCAoei5CLiBBcmlhbCwgU2Vnb2UgVUksIENhbGli cmkpLjwvcD4nICsKCiAgICAgICAgICAgICAgICAgICAgJzxwIHN0eWxlPSJmb250LXdlaWdodDo3 MDA7bWFyZ2luLXRvcDoxMnB4O2NvbG9yOnZhcigtLXRleHQtaGVhZGluZyk7Ij5TY2hyaWZ0Z3LD tsOfZSDDpG5kZXJuOjwvcD4nICsKICAgICAgICAgICAgICAgICAgICAnPHA+U3VjaHQgbmFjaCA8 Y29kZSBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkLWFsdCk7cGFkZGluZzoxcHggNHB4 O2JvcmRlci1yYWRpdXM6MnB4OyI+Zm9udC1zaXplPC9jb2RlPiBpbSBDU1MtQmVyZWljaC4gV2Vy dGUgd2llIDxjb2RlIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQtYWx0KTtwYWRkaW5n OjFweCA0cHg7Ym9yZGVyLXJhZGl1czoycHg7Ij4xNHB4PC9jb2RlPiBvZGVyIDxjb2RlIHN0eWxl PSJiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQtYWx0KTtwYWRkaW5nOjFweCA0cHg7Ym9yZGVyLXJh ZGl1czoycHg7Ij4xNnB4PC9jb2RlPiBiZXN0aW1tZW4gZGllIEdyw7bDn2UuIEdyw7bDn2VyZSBa YWhsID0gZ3LDtsOfZXJlIFNjaHJpZnQuPC9wPicgKwoKICAgICAgICAgICAgICAgICAgICAnPHAg c3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tdG9wOjEycHg7Y29sb3I6dmFyKC0tdGV4dC1o ZWFkaW5nKTsiPlZvcmhhbmRlbmUgU2NobGFnd8O2cnRlciBhbnBhc3Nlbjo8L3A+JyArCiAgICAg ICAgICAgICAgICAgICAgJzxwPlN1Y2h0IG5hY2ggPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6dmFy KC0tYmctY2FyZC1hbHQpO3BhZGRpbmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjJweDsiPlBSRURF RklORURfS0VZV09SRFM8L2NvZGU+IGluIGRlciBpbmRleC5odG1sIChpbSBKYXZhU2NyaXB0LUJl cmVpY2gpLiBEb3J0IHN0ZWh0IGRpZSBMaXN0ZSBkZXIgdm9yZGVmaW5pZXJ0ZW4gU2NobGFnd8O2 cnRlci4gJyArCiAgICAgICAgICAgICAgICAgICAgJ0Jlc3RlaGVuZGUgU2NobGFnd8O2cnRlciBr w7ZubnQgaWhyIGF1Y2ggYmVxdWVtIMO8YmVyIOKAnlNjaGxhZ3fDtnJ0ZXIgdmVyd2FsdGVuIiBv YmVuIGluIGRpZXNlbSBQYW5lbCB1bWJlbmVubmVuIG9kZXIgbMO2c2NoZW4uPC9wPicgKwogICAg ICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAnPC9kaXY+JyArCgogICAgICAgICAg ICAnPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmM2NkO2JvcmRlcjoxcHggc29saWQgI2ZmYzEw Nztib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE2cHggMjBweDttYXJnaW4tYm90dG9tOjE0cHg7 Y29sb3I6IzY2NGQwMzsiPicgKwogICAgICAgICAgICAgICAgJzxoMyBzdHlsZT0iZm9udC1zaXpl OjE1cHg7bWFyZ2luLWJvdHRvbTo4cHg7Ij5XaWNodGlnZSBSZWdlbG48L2gzPicgKwogICAgICAg ICAgICAgICAgJzx1bCBzdHlsZT0iZm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MjtwYWRkaW5n LWxlZnQ6MjBweDsiPicgKwogICAgICAgICAgICAgICAgICAgICc8bGk+PHN0cm9uZz5JbW1lciBl aW5lIFNpY2hlcnVuZ3Nrb3BpZSBtYWNoZW48L3N0cm9uZz4gYmV2b3IgaWhyIGV0d2FzIMOkbmRl cnQhIEtvcGllcnQgZGllIGluZGV4Lmh0bWwgdm9yaGVyIHouQi4gYWxzIGluZGV4X2JhY2t1cC5o dG1sLjwvbGk+JyArCiAgICAgICAgICAgICAgICAgICAgJzxsaT48c3Ryb25nPk51ciBlaW5lIFNh Y2hlIGF1ZiBlaW5tYWwgw6RuZGVybjwvc3Ryb25nPiwgZGFubiB0ZXN0ZW4uIFNvIGZpbmRldCBp aHIgRmVobGVyIHNvZm9ydC48L2xpPicgKwogICAgICAgICAgICAgICAgICAgICc8bGk+PHN0cm9u Zz5BbmbDvGhydW5nc3plaWNoZW4gdW5kIEtsYW1tZXJuPC9zdHJvbmc+IG3DvHNzZW4gaW1tZXIg cGFhcndlaXNlIHZvcmtvbW1lbi4gRmVobHQgZWlucywgZ2VodCBkaWUgU2VpdGUga2FwdXR0Ljwv bGk+JyArCiAgICAgICAgICAgICAgICAgICAgJzxsaT48c3Ryb25nPkZhcmItQ29kZXM8L3N0cm9u Zz4gYmVnaW5uZW4gaW1tZXIgbWl0ICMgdW5kIGhhYmVuIDMgb2RlciA2IFplaWNoZW4gZGFoaW50 ZXIgKHouQi4gI2ZmZiBvZGVyICMyRTRBNjIpLjwvbGk+JyArCiAgICAgICAgICAgICAgICAgICAg JzxsaT5JbSBad2VpZmVsOiA8c3Ryb25nPkJhY2t1cCB6dXLDvGNra29waWVyZW48L3N0cm9uZz4g dW5kIG5vY2htYWwgdm9uIHZvcm5lLjwvbGk+JyArCiAgICAgICAgICAgICAgICAnPC91bD4nICsK ICAgICAgICAgICAgJzwvZGl2PicgKwoKICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImJhY2tncm91 bmQ6dmFyKC0tYmctY2FyZCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpO2Jv cmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTZweCAyMHB4O21hcmdpbi1ib3R0b206MTRweDsiPicg KwogICAgICAgICAgICAgICAgJzxoMyBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTtm b250LXNpemU6MTVweDttYXJnaW4tYm90dG9tOjhweDsiPkZlaGxlciBnZW1hY2h0PyBLZWluIFBy b2JsZW0hPC9oMz4nICsKICAgICAgICAgICAgICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjEzcHg7 bGluZS1oZWlnaHQ6MS43O2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7Ij4nICsKICAgICAgICAg ICAgICAgICAgICAnV2VubiBuYWNoIGVpbmVyIMOEbmRlcnVuZyBkaWUgU2VpdGUgbmljaHQgbWVo ciBmdW5rdGlvbmllcnQ6JyArCiAgICAgICAgICAgICAgICAnPC9wPicgKwogICAgICAgICAgICAg ICAgJzxvbCBzdHlsZT0iZm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6Mjtjb2xvcjp2YXIoLS10 ZXh0LXByaW1hcnkpO3BhZGRpbmctbGVmdDoyMHB4OyI+JyArCiAgICAgICAgICAgICAgICAgICAg JzxsaT5Ccm93c2VyLVRhYiBzY2hsaWXDn2VuIChkZXIgU2VydmVyIGJlZW5kZXQgc2ljaCBhdXRv bWF0aXNjaCBuYWNoIDIwIFNla3VuZGVuKTwvbGk+JyArCiAgICAgICAgICAgICAgICAgICAgJzxs aT5FdXJlIFNpY2hlcnVuZ3Nrb3BpZSAoei5CLiBpbmRleF9iYWNrdXAuaHRtbCkgd2llZGVyIGFs cyA8Y29kZSBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkLWFsdCk7cGFkZGluZzoxcHgg NHB4O2JvcmRlci1yYWRpdXM6MnB4OyI+aW5kZXguaHRtbDwvY29kZT4gdW1iZW5lbm5lbjwvbGk+ JyArCiAgICAgICAgICAgICAgICAgICAgJzxsaT5EUklWRV9TdGFydC5iYXQgZG9wcGVsa2xpY2tl biDigJMgZmVydGlnLCBhbGxlcyB3aWVkZXIgd2llIHZvcmhlcjwvbGk+JyArCiAgICAgICAgICAg ICAgICAnPC9vbD4nICsKICAgICAgICAgICAgICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjEzcHg7 bGluZS1oZWlnaHQ6MS43O2NvbG9yOnZhcigtLXRleHQtcHJpbWFyeSk7bWFyZ2luLXRvcDo2cHg7 Ij4nICsKICAgICAgICAgICAgICAgICAgICAnPHN0cm9uZz5FdXJlIEFydGlrZWwtRGF0ZW4gc2lu ZCBzaWNoZXIhPC9zdHJvbmc+IERpZSBsaWVnZW4gaW0gPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6 dmFyKC0tYmctY2FyZC1hbHQpO3BhZGRpbmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjJweDsiPmRh dGEvPC9jb2RlPi1PcmRuZXIgdW5kIHdlcmRlbiBkdXJjaCDDhG5kZXJ1bmdlbiBhbiBkZXIgaW5k ZXguaHRtbCBuaWNodCB2ZXLDpG5kZXJ0LicgKwogICAgICAgICAgICAgICAgJzwvcD4nICsKICAg ICAgICAgICAgJzwvZGl2PicgKwoKICAgICAgICAnPC9kaXY+JzsKICAgIH0sCgogICAgLy8gPT09 IEltcG9ydCAvIEV4cG9ydCA9PT0KICAgIHNob3dJbXBvcnRFeHBvcnQoKSB7CiAgICAgICAgdmFy IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ292QWRtaW5Cb2R5Jyk7CiAgICAgICAg dmFyIGRvY3MgPSBEcml2ZUZTLmRvY3VtZW50czsKICAgICAgICB2YXIga2F0ZWdvcmllbiA9IERy aXZlRlMuY29uZmlnLmthdGVnb3JpZW4gfHwgW107CgogICAgICAgIHZhciBodG1sID0gJzxkaXYg c3R5bGU9Im1heC13aWR0aDo4MDBweDttYXJnaW46MCBhdXRvOyI+JyArCiAgICAgICAgICAgICc8 aDIgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtaGVhZGluZyk7bWFyZ2luLWJvdHRvbToxNnB4OyI+ SW1wb3J0IC8gRXhwb3J0PC9oMj4nOwoKICAgICAgICAvLyA9PT0gRVhQT1JUID09PQogICAgICAg IGh0bWwgKz0gJzxkaXYgY2xhc3M9Imdvdi1zZWN0aW9uIj4nICsKICAgICAgICAgICAgJzxkaXYg Y2xhc3M9Imdvdi1zZWN0aW9uLXRpdGxlIj5FeHBvcnQ8L2Rpdj4nICsKICAgICAgICAgICAgJzxw IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTttYXJnaW4tYm90 dG9tOjEwcHg7Ij5Xw6RobGUgS2F0ZWdvcmllbiBvZGVyIGVpbnplbG5lIEFydGlrZWwgYXVzLiBE aWUgTWVkaWVuLVZlcmxpbmt1bmdlbiBibGVpYmVuIGluIGRlciBFeHBvcnQtRGF0ZWkgZXJoYWx0 ZW4uIERlbiA8Y29kZSBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkLWFsdCk7cGFkZGlu ZzoxcHggNHB4O2JvcmRlci1yYWRpdXM6MnB4OyI+bWVkaWEvPC9jb2RlPi1PcmRuZXIgYml0dGUg bWFudWVsbCBtaXRrb3BpZXJlbi48L3A+JyArCgogICAgICAgICAgICAvLyBLYXRlZ29yaWUtRmls dGVyCiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjhweDsiPicgKwogICAg ICAgICAgICAgICAgJzxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAw O2NvbG9yOnZhcigtLXRleHQtc2Vjb25kYXJ5KTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206 NHB4OyI+S2F0ZWdvcmllbjwvbGFiZWw+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBzdHlsZT0i ZGlzcGxheTpmbGV4O2dhcDo0cHg7ZmxleC13cmFwOndyYXA7IiBpZD0iZXhwb3J0Q2F0RmlsdGVy Ij4nOwogICAgICAgIGthdGVnb3JpZW4uZm9yRWFjaChmdW5jdGlvbihrYXQpIHsKICAgICAgICAg ICAgdmFyIGNvdW50ID0gZG9jcy5maWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5rYXRlZ29y aWUgPT09IGthdDsgfSkubGVuZ3RoOwogICAgICAgICAgICBpZiAoY291bnQgPT09IDApIHJldHVy bjsKICAgICAgICAgICAgaHRtbCArPSAnPGxhYmVsIGNsYXNzPSJnb3Yta3ctcGlsbCIgc3R5bGU9 ImN1cnNvcjpwb2ludGVyOyI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iZXhwb3J0LWNh dC1jYiIgdmFsdWU9IicgKyBEcml2ZVBvcnRhbC5lc2NhcGVBdHRyKGthdCkgKyAnIiBjaGVja2Vk IHN0eWxlPSJtYXJnaW4tcmlnaHQ6NHB4OyIgb25jaGFuZ2U9IkRyaXZlR292ZXJuYW5jZS5fZXhw b3J0RmlsdGVyQnlDYXRlZ29yeSgpIj4gJyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoa2F0KSAr ICcgPHNwYW4gY2xhc3M9Imt3LWNvdW50Ij4oJyArIGNvdW50ICsgJyk8L3NwYW4+PC9sYWJlbD4n OwogICAgICAgIH0pOwogICAgICAgIGh0bWwgKz0gJzwvZGl2PjwvZGl2PicgKwoKICAgICAgICAg ICAgLy8gQnV0dG9ucwogICAgICAgICAgICAnPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHg7 ZGlzcGxheTpmbGV4O2dhcDo4cHg7Ij4nICsKICAgICAgICAgICAgICAgICc8YnV0dG9uIGNsYXNz PSJnb3YtYWRkLWJ0biIgc3R5bGU9InBhZGRpbmc6NHB4IDEycHg7Zm9udC1zaXplOjEycHg7IiBv bmNsaWNrPSJEcml2ZUdvdmVybmFuY2UuX2V4cG9ydFNlbGVjdEFsbCh0cnVlKSI+QWxsZSBBcnRp a2VsPC9idXR0b24+JyArCiAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iZ292LWFkZC1i dG4iIHN0eWxlPSJwYWRkaW5nOjRweCAxMnB4O2ZvbnQtc2l6ZToxMnB4OyIgb25jbGljaz0iRHJp dmVHb3Zlcm5hbmNlLl9leHBvcnRTZWxlY3RBbGwoZmFsc2UpIj5LZWluZSBBcnRpa2VsPC9idXR0 b24+JyArCiAgICAgICAgICAgICc8L2Rpdj4nICsKCiAgICAgICAgICAgIC8vIEFydGlrZWxsaXN0 ZQogICAgICAgICAgICAnPGRpdiBzdHlsZT0ibWF4LWhlaWdodDoyMjBweDtvdmVyZmxvdy15OmF1 dG87Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpO2JvcmRlci1yYWRpdXM6NHB4 O3BhZGRpbmc6NHB4OyIgaWQ9ImV4cG9ydERvY0xpc3QiPic7CgogICAgICAgIGRvY3MuZm9yRWFj aChmdW5jdGlvbihkb2MpIHsKICAgICAgICAgICAgdmFyIGhhc01lZGlhID0gZG9jLm1lZGlhcyAm JiBkb2MubWVkaWFzLmxlbmd0aCA+IDA7CiAgICAgICAgICAgIGh0bWwgKz0gJzxsYWJlbCBjbGFz cz0iZXhwb3J0LWRvYy1yb3ciIGRhdGEta2F0ZWdvcmllPSInICsgRHJpdmVQb3J0YWwuZXNjYXBl QXR0cihkb2Mua2F0ZWdvcmllKSArICciIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6 Y2VudGVyO2dhcDo4cHg7cGFkZGluZzo2cHggOHB4O2N1cnNvcjpwb2ludGVyO2JvcmRlci1ib3R0 b206MXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7Zm9udC1zaXplOjEzcHg7Ij4nICsKICAg ICAgICAgICAgICAgICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGNsYXNzPSJleHBvcnQtZG9jLWNi IiB2YWx1ZT0iJyArIERyaXZlUG9ydGFsLmVzY2FwZUF0dHIoZG9jLmlkKSArICciIGNoZWNrZWQ+ JyArCiAgICAgICAgICAgICAgICAnPHNwYW4gc3R5bGU9ImZsZXg6MTtjb2xvcjp2YXIoLS10ZXh0 LXByaW1hcnkpOyI+JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoZG9jLnRpdGVsKSArICc8L3Nw YW4+JyArCiAgICAgICAgICAgICAgICAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9y OnZhcigtLXRleHQtbXV0ZWQpOyI+JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoZG9jLmthdGVn b3JpZSkgKyAnPC9zcGFuPicgKwogICAgICAgICAgICAgICAgKGhhc01lZGlhID8gJzxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpOyI+JyArIGRvYy5t ZWRpYXMubGVuZ3RoICsgJyBNZWRpZW48L3NwYW4+JyA6ICcnKSArCiAgICAgICAgICAgICc8L2xh YmVsPic7CiAgICAgICAgfSk7CgogICAgICAgIGh0bWwgKz0gJzwvZGl2PicgKwogICAgICAgICAg ICAnPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4O2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWdu LWl0ZW1zOmNlbnRlcjsiPicgKwogICAgICAgICAgICAgICAgJzxsYWJlbCBzdHlsZT0iZm9udC1z aXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5KTtkaXNwbGF5OmZsZXg7YWxpZ24taXRl bXM6Y2VudGVyO2dhcDo2cHg7Y3Vyc29yOnBvaW50ZXI7IiB0aXRsZT0iTWVkaWVuLVZlcmxpbmt1 bmdlbiBpbiBkZXIgRXhwb3J0LURhdGVpIGJlaWJlaGFsdGVuIj4nICsKICAgICAgICAgICAgICAg ICAgICAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iZXhwb3J0SW5jbHVkZU1lZGlhIiBjaGVj a2VkPiBNZWRpZW4tVmVybGlua3VuZ2VuIGJlaWJlaGFsdGVuJyArCiAgICAgICAgICAgICAgICAn PC9sYWJlbD4nICsKICAgICAgICAgICAgICAgICc8c3BhbiBzdHlsZT0iZmxleDoxOyI+PC9zcGFu PicgKwogICAgICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9Imdvdi1hZGQtYnRuIiBzdHlsZT0i cGFkZGluZzo4cHggMjBweDsiIG9uY2xpY2s9IkRyaXZlR292ZXJuYW5jZS5fZG9FeHBvcnQoKSI+ RXhwb3J0aWVyZW48L2J1dHRvbj4nICsKICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICc8 L2Rpdj4nOwoKICAgICAgICAvLyA9PT0gSU1QT1JUID09PQogICAgICAgIGh0bWwgKz0gJzxkaXYg Y2xhc3M9Imdvdi1zZWN0aW9uIj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9Imdvdi1zZWN0 aW9uLXRpdGxlIj5JbXBvcnQ8L2Rpdj4nICsKICAgICAgICAgICAgJzxwIHN0eWxlPSJmb250LXNp emU6MTJweDtjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTttYXJnaW4tYm90dG9tOjEwcHg7Ij5JbXBv cnRpZXJlIGVpbmUgenV2b3IgZXhwb3J0aWVydGUgSlNPTi1EYXRlaS4gQXJ0aWtlbCB3ZXJkZW4g YXV0b21hdGlzY2ggaW4gZGllIGVudHNwcmVjaGVuZGVuIEthdGVnb3JpZW4gZWluc29ydGllcnQu IE5ldWUgS2F0ZWdvcmllbiB3ZXJkZW4gYmVpIEJlZGFyZiBhbmdlbGVndC48L3A+JyArCiAgICAg ICAgICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dh cDo4cHg7Ij4nICsKICAgICAgICAgICAgICAgICc8ZGl2PicgKwogICAgICAgICAgICAgICAgICAg ICc8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIo LS10ZXh0LXNlY29uZGFyeSk7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweDsiPkV4cG9y dC1EYXRlaSAoSlNPTik8L2xhYmVsPicgKwogICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlw ZT0iZmlsZSIgaWQ9ImltcG9ydEpzb25GaWxlIiBhY2NlcHQ9Ii5qc29uIiBzdHlsZT0iZm9udC1z aXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dC1wcmltYXJ5KTsiPicgKwogICAgICAgICAgICAgICAg JzwvZGl2PicgKwogICAgICAgICAgICAgICAgJzxwIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xv cjp2YXIoLS10ZXh0LW11dGVkKTtsaW5lLWhlaWdodDoxLjU7bWFyZ2luLXRvcDo0cHg7Ij5GYWxs cyBkaWUgRXhwb3J0LURhdGVpIE1lZGllbi1WZXJsaW5rdW5nZW4gZW50aMOkbHQsIGtvcGllcmUg ZGVuIDxjb2RlIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWJnLWNhcmQtYWx0KTtwYWRkaW5nOjFw eCA0cHg7Ym9yZGVyLXJhZGl1czoycHg7Ij5tZWRpYS88L2NvZGU+LU9yZG5lciBkZXIgUXVlbGxl IGluIGRhcyBaaWVsdmVyemVpY2huaXMsIGRhbWl0IGRpZSBBbmjDpG5nZSB2ZXJmw7xnYmFyIHNp bmQuPC9wPicgKwogICAgICAgICAgICAgICAgJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6NnB4OyI+ JyArCiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9Imdvdi1hZGQtYnRuIiBzdHls ZT0icGFkZGluZzo4cHggMjBweDsiIG9uY2xpY2s9IkRyaXZlR292ZXJuYW5jZS5fZG9JbXBvcnQo KSI+SW1wb3J0aWVyZW48L2J1dHRvbj4nICsKICAgICAgICAgICAgICAgICc8L2Rpdj4nICsKICAg ICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICc8L2Rpdj4nOwoKICAgICAgICBodG1sICs9ICc8 L2Rpdj4nOwogICAgICAgIGJvZHkuaW5uZXJIVE1MID0gaHRtbDsKICAgIH0sCgogICAgX2V4cG9y dFNlbGVjdEFsbChjaGVja2VkKSB7CiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgn LmV4cG9ydC1kb2MtY2I6bm90KDpkaXNhYmxlZCknKS5mb3JFYWNoKGZ1bmN0aW9uKGNiKSB7IGNi LmNoZWNrZWQgPSBjaGVja2VkOyB9KTsKICAgIH0sCgogICAgX2V4cG9ydEZpbHRlckJ5Q2F0ZWdv cnkoKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkQ2F0cyA9IFtdOwogICAgICAgIGRvY3VtZW50LnF1 ZXJ5U2VsZWN0b3JBbGwoJy5leHBvcnQtY2F0LWNiOmNoZWNrZWQnKS5mb3JFYWNoKGZ1bmN0aW9u KGNiKSB7IHNlbGVjdGVkQ2F0cy5wdXNoKGNiLnZhbHVlKTsgfSk7CiAgICAgICAgZG9jdW1lbnQu cXVlcnlTZWxlY3RvckFsbCgnLmV4cG9ydC1kb2Mtcm93JykuZm9yRWFjaChmdW5jdGlvbihyb3cp IHsKICAgICAgICAgICAgdmFyIGthdCA9IHJvdy5nZXRBdHRyaWJ1dGUoJ2RhdGEta2F0ZWdvcmll Jyk7CiAgICAgICAgICAgIHZhciBjYiA9IHJvdy5xdWVyeVNlbGVjdG9yKCcuZXhwb3J0LWRvYy1j YicpOwogICAgICAgICAgICBpZiAoc2VsZWN0ZWRDYXRzLmluY2x1ZGVzKGthdCkpIHsKICAgICAg ICAgICAgICAgIHJvdy5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgICAgICAgICBjYi5kaXNh YmxlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgY2IuY2hlY2tlZCA9IHRydWU7CiAgICAgICAg ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByb3cuc3R5bGUuZGlzcGxheSA9ICdub25lJzsK ICAgICAgICAgICAgICAgIGNiLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGNiLmNo ZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfSwKCiAgICBhc3lu YyBfZG9FeHBvcnQoKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkSWRzID0gW107CiAgICAgICAgZG9j dW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmV4cG9ydC1kb2MtY2I6Y2hlY2tlZCcpLmZvckVhY2go ZnVuY3Rpb24oY2IpIHsgc2VsZWN0ZWRJZHMucHVzaChjYi52YWx1ZSk7IH0pOwogICAgICAgIGlm IChzZWxlY3RlZElkcy5sZW5ndGggPT09IDApIHsgc2hvd1RvYXN0KCdCaXR0ZSBtaW5kZXN0ZW5z IGVpbmVuIEFydGlrZWwgYXVzd8OkaGxlbicsICd3YXJuaW5nJyk7IHJldHVybjsgfQoKICAgICAg ICB2YXIgaW5jbHVkZU1lZGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cG9ydEluY2x1 ZGVNZWRpYScpLmNoZWNrZWQ7CiAgICAgICAgdmFyIGV4cG9ydERvY3MgPSBEcml2ZUZTLmRvY3Vt ZW50cy5maWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gc2VsZWN0ZWRJZHMuaW5jbHVkZXMoZC5p ZCk7IH0pOwoKICAgICAgICAvLyBBcnRpa2VsIGJlcmVpbmlnZW4KICAgICAgICB2YXIgY2xlYW5E b2NzID0gZXhwb3J0RG9jcy5tYXAoZnVuY3Rpb24oZG9jKSB7CiAgICAgICAgICAgIHZhciBjb3B5 ID0ge307CiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gZG9jKSB7IGlmIChrLmNoYXJBdCgwKSAh PT0gJ18nKSBjb3B5W2tdID0gZG9jW2tdOyB9CiAgICAgICAgICAgIHJldHVybiBjb3B5OwogICAg ICAgIH0pOwoKICAgICAgICAvLyBNZWRpZW4tUGZhZGUgc2FtbWVsbiAoZnVlciBIaW53ZWlzKQog ICAgICAgIHZhciBtZWRpYVBhdGhzID0gW107CiAgICAgICAgaWYgKGluY2x1ZGVNZWRpYSkgewog ICAgICAgICAgICBjbGVhbkRvY3MuZm9yRWFjaChmdW5jdGlvbihkb2MpIHsKICAgICAgICAgICAg ICAgIGlmIChkb2MubWVkaWFzKSBkb2MubWVkaWFzLmZvckVhY2goZnVuY3Rpb24obSkgewogICAg ICAgICAgICAgICAgICAgIGlmIChtLnVybCkgbWVkaWFQYXRocy5wdXNoKG0udXJsKTsKICAgICAg ICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIHZhciBleHBv cnREYXRhID0gewogICAgICAgICAgICBleHBvcnRWZXJzaW9uOiAnMS4wJywKICAgICAgICAgICAg ZXhwb3J0RGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLAogICAgICAgICAgICBleHBvcnRl ZEJ5OiAoRHJpdmVGUy5lbnZpcm9uICYmIERyaXZlRlMuZW52aXJvbi51c2VybmFtZSkgfHwgJ1Vu YmVrYW5udCcsCiAgICAgICAgICAgIGFydGljbGVDb3VudDogY2xlYW5Eb2NzLmxlbmd0aCwKICAg ICAgICAgICAgYXJ0aWNsZXM6IGNsZWFuRG9jcywKICAgICAgICAgICAgbWVkaWFQYXRoczogbWVk aWFQYXRocy5sZW5ndGggPiAwID8gbWVkaWFQYXRocyA6IHVuZGVmaW5lZAogICAgICAgIH07Cgog ICAgICAgIC8vIEpTT04gaGVydW50ZXJsYWRlbgogICAgICAgIHZhciBqc29uU3RyID0gSlNPTi5z dHJpbmdpZnkoZXhwb3J0RGF0YSwgbnVsbCwgMik7CiAgICAgICAgdmFyIGpzb25CbG9iID0gbmV3 IEJsb2IoW2pzb25TdHJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTsKICAgICAgICB2 YXIganNvblVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoanNvbkJsb2IpOwogICAgICAgIHZhciBh ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgICAgIGEuaHJlZiA9IGpzb25Vcmw7 CiAgICAgICAgYS5kb3dubG9hZCA9ICdEUklWRV9FeHBvcnRfJyArIG5ldyBEYXRlKCkudG9JU09T dHJpbmcoKS5zcGxpdCgnVCcpWzBdICsgJy5qc29uJzsKICAgICAgICBhLmNsaWNrKCk7CiAgICAg ICAgVVJMLnJldm9rZU9iamVjdFVSTChqc29uVXJsKTsKCiAgICAgICAgdmFyIG1zZyA9IGNsZWFu RG9jcy5sZW5ndGggKyAnIEFydGlrZWwgZXhwb3J0aWVydCc7CiAgICAgICAgaWYgKG1lZGlhUGF0 aHMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBtc2cgKz0gJyAoJyArIG1lZGlhUGF0aHMubGVu Z3RoICsgJyBNZWRpZW4tVmVybGlua3VuZ2VuIGVudGhhbHRlbiknOwogICAgICAgICAgICBzaG93 VG9hc3QobXNnLCAnc3VjY2VzcycsIDQwMDApOwogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0 aW9uKCkgewogICAgICAgICAgICAgICAgc2hvd1RvYXN0KCdCaXR0ZSBrb3BpZXJlIGRlbiBtZWRp YS8tT3JkbmVyIG1hbnVlbGwgenVtIFppZWwsIGRhbWl0IGRpZSBBbmjDpG5nZSB2ZXJmw7xnYmFy IGJsZWliZW4uJywgJ2luZm8nLCA2MDAwKTsKICAgICAgICAgICAgfSwgMTUwMCk7CiAgICAgICAg fSBlbHNlIHsKICAgICAgICAgICAgc2hvd1RvYXN0KG1zZywgJ3N1Y2Nlc3MnKTsKICAgICAgICB9 CiAgICB9LAoKICAgIGFzeW5jIF9kb0ltcG9ydCgpIHsKICAgICAgICB2YXIganNvbklucHV0ID0g ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltcG9ydEpzb25GaWxlJyk7CiAgICAgICAgaWYgKCFq c29uSW5wdXQuZmlsZXMgfHwganNvbklucHV0LmZpbGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAg ICAgICBzaG93VG9hc3QoJ0JpdHRlIGVpbmUgSlNPTi1EYXRlaSBhdXN3w6RobGVuJywgJ3dhcm5p bmcnKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKICAgICAg ICAgICAgc2hvd1RvYXN0KCdJbXBvcnQgd2lyZCB2ZXJhcmJlaXRldC4uLicsICdpbmZvJywgMzAw MCk7CiAgICAgICAgICAgIHZhciBqc29uVGV4dCA9IGF3YWl0IGpzb25JbnB1dC5maWxlc1swXS50 ZXh0KCk7CiAgICAgICAgICAgIHZhciBpbXBvcnREYXRhID0gSlNPTi5wYXJzZShqc29uVGV4dCk7 CgogICAgICAgICAgICBpZiAoIWltcG9ydERhdGEuYXJ0aWNsZXMgfHwgIUFycmF5LmlzQXJyYXko aW1wb3J0RGF0YS5hcnRpY2xlcykpIHsKICAgICAgICAgICAgICAgIHNob3dUb2FzdCgnVW5nw7xs dGlnZXMgRXhwb3J0Zm9ybWF0OiBLZWluIGFydGljbGVzLUFycmF5IGdlZnVuZGVuJywgJ2Vycm9y Jyk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZh ciBhcnRpY2xlcyA9IGltcG9ydERhdGEuYXJ0aWNsZXM7CiAgICAgICAgICAgIHZhciBpbXBvcnRl ZCA9IDA7CiAgICAgICAgICAgIHZhciBza2lwcGVkID0gMDsKICAgICAgICAgICAgdmFyIGhhc01l ZGlhID0gISEoaW1wb3J0RGF0YS5tZWRpYVBhdGhzICYmIGltcG9ydERhdGEubWVkaWFQYXRocy5s ZW5ndGggPiAwKTsKICAgICAgICAgICAgdmFyIGthdGVnb3JpZW4gPSBEcml2ZUZTLmNvbmZpZy5r YXRlZ29yaWVuIHx8IFtdOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnRpY2xl cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGRvYyA9IGFydGljbGVzW2ldOwog ICAgICAgICAgICAgICAgaWYgKCFkb2MuaWQgfHwgIWRvYy50aXRlbCB8fCAhZG9jLmthdGVnb3Jp ZSkgeyBza2lwcGVkKys7IGNvbnRpbnVlOyB9CgogICAgICAgICAgICAgICAgLy8gS2F0ZWdvcmll IGdnZi4gYW5sZWdlbgogICAgICAgICAgICAgICAgaWYgKCFrYXRlZ29yaWVuLmluY2x1ZGVzKGRv Yy5rYXRlZ29yaWUpKSB7CiAgICAgICAgICAgICAgICAgICAga2F0ZWdvcmllbi5wdXNoKGRvYy5r YXRlZ29yaWUpOwogICAgICAgICAgICAgICAgICAgIERyaXZlRlMuY29uZmlnLmthdGVnb3JpZW4g PSBrYXRlZ29yaWVuOwogICAgICAgICAgICAgICAgICAgIERyaXZlRlMuc29ydEthdGVnb3JpZW4o KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBEb2t1bWVudCBzcGVpY2hl cm4gKMO8YmVyc2NocmVpYmVuIG9kZXIgbmV1KQogICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5n ID0gRHJpdmVGUy5kb2N1bWVudHMuZmluZChmdW5jdGlvbihkKSB7IHJldHVybiBkLmlkID09PSBk b2MuaWQ7IH0pOwogICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nKSB7CiAgICAgICAgICAgICAg ICAgICAgT2JqZWN0LmFzc2lnbihleGlzdGluZywgZG9jKTsKICAgICAgICAgICAgICAgICAgICBh d2FpdCBEcml2ZUZTLnNhdmVEb2N1bWVudChleGlzdGluZyk7CiAgICAgICAgICAgICAgICB9IGVs c2UgewogICAgICAgICAgICAgICAgICAgIERyaXZlRlMuZG9jdW1lbnRzLnB1c2goZG9jKTsKICAg ICAgICAgICAgICAgICAgICBhd2FpdCBEcml2ZUZTLnNhdmVEb2N1bWVudChkb2MpOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgaW1wb3J0ZWQrKzsKICAgICAgICAgICAgfQoKICAg ICAgICAgICAgLy8gQ29uZmlnIHNwZWljaGVybiAobmV1ZSBLYXRlZ29yaWVuKQogICAgICAgICAg ICBpZiAoRHJpdmVGUy5tb2RlID09PSAnc2VydmVyJykgewogICAgICAgICAgICAgICAgYXdhaXQg ZmV0Y2goJy9hcGkvd3JpdGUnLCB7CiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcs CiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0 aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnIH0sCiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNP Ti5zdHJpbmdpZnkoeyBwYXRoOiAnZGF0YS9jb25maWcuanNvbicsIGRhdGE6IERyaXZlRlMuY29u ZmlnIH0pCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYXdh aXQgRHJpdmVGUy51cGRhdGVJbmRleCgpOwogICAgICAgICAgICBEcml2ZVBvcnRhbC5yZW5kZXIo KTsKICAgICAgICAgICAgdGhpcy51cGRhdGVVSSgpOwoKICAgICAgICAgICAgdmFyIGltcG9ydE1z ZyA9IGltcG9ydGVkICsgJyBBcnRpa2VsIGltcG9ydGllcnQnICsgKHNraXBwZWQgPiAwID8gJywg JyArIHNraXBwZWQgKyAnIMO8YmVyc3BydW5nZW4nIDogJycpOwogICAgICAgICAgICBzaG93VG9h c3QoaW1wb3J0TXNnLCAnc3VjY2VzcycpOwogICAgICAgICAgICBpZiAoaGFzTWVkaWEpIHsKICAg ICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAg c2hvd1RvYXN0KCdEaWUgaW1wb3J0aWVydGVuIEFydGlrZWwgZW50aGFsdGVuIE1lZGllbi1WZXJs aW5rdW5nZW4uIEJpdHRlIHN0ZWxsZSBzaWNoZXIsIGRhc3MgZGVyIG1lZGlhLy1PcmRuZXIga29w aWVydCB3dXJkZS4nLCAnaW5mbycsIDYwMDApOwogICAgICAgICAgICAgICAgfSwgMTUwMCk7CiAg ICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgc2hvd1RvYXN0KCdJ bXBvcnQgZmVobGdlc2NobGFnZW46ICcgKyBlLm1lc3NhZ2UsICdlcnJvcicsIDUwMDApOwogICAg ICAgIH0KICAgIH0sCgogICAgYXN5bmMgc2F2ZVNldHRpbmdzKCkgewogICAgICAgIGlmICghdGhp cy5kYXRhKSByZXR1cm47CiAgICAgICAgY29uc3QgcHJldlNldHRpbmdzID0geyAuLi50aGlzLmRh dGEuc2V0dGluZ3MgfTsKICAgICAgICB0aGlzLmRhdGEuc2V0dGluZ3MucmVxdWlyZUFwcHJvdmFs Rm9yTmV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvdlJlcU5ldycpLmNoZWNrZWQ7CiAg ICAgICAgdGhpcy5kYXRhLnNldHRpbmdzLnJlcXVpcmVBcHByb3ZhbEZvckVkaXQgPSBkb2N1bWVu dC5nZXRFbGVtZW50QnlJZCgnZ292UmVxRWRpdCcpLmNoZWNrZWQ7CiAgICAgICAgdmFyIGVsOwog ICAgICAgIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvdlNob3dDb250cmliJyk7IGlm IChlbCkgdGhpcy5kYXRhLnNldHRpbmdzLnNob3dDb250cmlidXRvcnMgPSBlbC5jaGVja2VkOwog ICAgICAgIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvdlNob3dSZXZpZXdIaXN0Jyk7 IGlmIChlbCkgdGhpcy5kYXRhLnNldHRpbmdzLnNob3dSZXZpZXdIaXN0b3J5ID0gZWwuY2hlY2tl ZDsKICAgICAgICBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb3ZLZXl3b3JkTW9kZScp OyBpZiAoZWwpIHsKICAgICAgICAgICAgdGhpcy5kYXRhLnNldHRpbmdzLmtleXdvcmRNb2RlID0g ZWwudmFsdWU7CiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXR0aW5ncy5rZXl3b3Jkc1JlcXVpcmVk ID0gKGVsLnZhbHVlID09PSAncmVxdWlyZWQnKTsKICAgICAgICB9CiAgICAgICAgZWwgPSBkb2N1 bWVudC5nZXRFbGVtZW50QnlJZCgnZ292UmVqZWN0aW9uTW9kZScpOyBpZiAoZWwpIHsKICAgICAg ICAgICAgdGhpcy5kYXRhLnNldHRpbmdzLnJlamVjdGlvblJlYXNvbk1vZGUgPSBlbC52YWx1ZTsK ICAgICAgICB9CiAgICAgICAgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ292Q3Jvc3Ns aW5rTW9kZScpOyBpZiAoZWwpIHsKICAgICAgICAgICAgdGhpcy5kYXRhLnNldHRpbmdzLmNyb3Nz bGlua01vZGUgPSBlbC52YWx1ZTsKICAgICAgICB9CiAgICAgICAgY29uc3Qgb2sgPSBhd2FpdCB0 aGlzLnNhdmVHb3Zlcm5hbmNlKCk7CiAgICAgICAgaWYgKG9rID09PSBmYWxzZSkgewogICAgICAg ICAgICB0aGlzLmRhdGEuc2V0dGluZ3MgPSBwcmV2U2V0dGluZ3M7CiAgICAgICAgICAgIHRoaXMu cmVuZGVyQWRtaW4oKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlz LnJlbmRlckFkbWluKCk7CiAgICAgICAgc2hvd1RvYXN0KCdFaW5zdGVsbHVuZ2VuIGdlc3BlaWNo ZXJ0JywgJ3N1Y2Nlc3MnKTsKICAgIH0sCgogICAgYXN5bmMgc2F2ZUdvdmVybmFuY2UoKSB7CiAg ICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKERyaXZlRlMubW9kZSA9PT0gJ3NlcnZlcicpIHsK ICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL2dvdmVybmFuY2Un LCB7CiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICAg ICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9 dXRmLTgnIH0sCiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkodGhpcy5k YXRhKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBh d2FpdCByZXMuanNvbigpOwogICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lcnJvcikgewogICAg ICAgICAgICAgICAgICAgIHNob3dUb2FzdCgnRmVobGVyOiAnICsgcmVzdWx0LmVycm9yLCAnZXJy b3InLCA1MDAwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoRHJpdmVGUy5tb2RlID09PSAnZmlsZXN5c3Rl bScgJiYgRHJpdmVGUy5fZGF0YUhhbmRsZSkgewogICAgICAgICAgICAgICAgY29uc3QgZmggPSBh d2FpdCBEcml2ZUZTLl9kYXRhSGFuZGxlLmdldEZpbGVIYW5kbGUoJ2dvdmVybmFuY2UuanNvbics IHsgY3JlYXRlOiB0cnVlIH0pOwogICAgICAgICAgICAgICAgY29uc3Qgd3JpdGFibGUgPSBhd2Fp dCBmaC5jcmVhdGVXcml0YWJsZSgpOwogICAgICAgICAgICAgICAgYXdhaXQgd3JpdGFibGUud3Jp dGUoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCAyKSk7CiAgICAgICAgICAgICAgICBh d2FpdCB3cml0YWJsZS5jbG9zZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuX2lz U3VwZXJVc2VyID0gdGhpcy5fY2hlY2tTdXBlclVzZXIoKTsKICAgICAgICAgICAgdGhpcy51cGRh dGVVSSgpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsK ICAgICAgICAgICAgc2hvd1RvYXN0KCdHb3Zlcm5hbmNlIHNwZWljaGVybiBmZWhsZ2VzY2hsYWdl bjogJyArIGVyci5tZXNzYWdlLCAnZXJyb3InLCA1MDAwKTsKICAgICAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICAgIH0KICAgIH0sCgogICAgLy8gLS0tIEZyZWlnYWJldmVyYW50d29ydGxpY2hl IChJbXByZXNzdW0pIC0tLQogICAgc2hvd0ltcHJpbnQoKSB7CiAgICAgICAgY29uc3QgYm9keSA9 IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbXByaW50Qm9keScpOwogICAgICAgIGNvbnN0IGdv diA9IHRoaXMuZGF0YTsKICAgICAgICBjb25zdCBpc1N0YXRpYyA9IERyaXZlRlMubW9kZSA9PT0g J3N0YXRpYyc7CgogICAgICAgIGxldCBodG1sID0gJzxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOjRw eDsgZm9udC1zaXplOjE0cHg7IGNvbG9yOnZhcigtLXRleHQtc2Vjb25kYXJ5KTsiPsOcYmVyc2lj aHQgZGVyIEZyZWlnYWJldmVyYW50d29ydGxpY2hlbiBpbSBELlIuSS5WLkUuIFBvcnRhbC48L3A+ PHAgc3R5bGU9Im1hcmdpbi1ib3R0b206MTVweDsgZm9udC1zaXplOjE0cHg7IGNvbG9yOnZhcigt LXRleHQtc2Vjb25kYXJ5KTsiPkRpZXNlIFBlcnNvbmVuIHByw7xmZW4gdW5kIGdlbmVobWlnZW4g QXJ0aWtlbCBpbiBkZW4gamV3ZWlsaWdlbiBLYXRlZ29yaWVuLjwvcD4nOwoKICAgICAgICBpZiAo aXNTdGF0aWMpIHsKICAgICAgICAgICAgLy8gTGVzZW1vZHVzOiBLYXRlZ29yaWVuIG1pdCBadXN0 YWVuZGlna2VpdCAob2huZSBCZW51dHplci1JRHMpCiAgICAgICAgICAgIGh0bWwgKz0gJzxoMyBz dHlsZT0iY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTsgbWFyZ2luLWJvdHRvbTo4cHg7Ij5adXN0 w6RuZGlna2VpdCBuYWNoIEthdGVnb3JpZTwvaDM+JzsKICAgICAgICAgICAgdmFyIHNSZXZpZXdl cnMgPSAoZ292ICYmIGdvdi5yZXZpZXdlcnMpID8gZ292LnJldmlld2VycyA6IFtdOwogICAgICAg ICAgICB2YXIgc0thdHMgPSAoRHJpdmVGUy5jb25maWcgJiYgRHJpdmVGUy5jb25maWcua2F0ZWdv cmllbikgPyBEcml2ZUZTLmNvbmZpZy5rYXRlZ29yaWVuIDogW107CiAgICAgICAgICAgIHZhciBz SGlkZGVuID0gKERyaXZlRlMuY29uZmlnICYmIERyaXZlRlMuY29uZmlnLmhpZGRlbkthdGVnb3Jp ZW4pID8gRHJpdmVGUy5jb25maWcuaGlkZGVuS2F0ZWdvcmllbiA6IFtdOwogICAgICAgICAgICBp ZiAoc0thdHMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgaHRtbCArPSAnPHRhYmxlIGNs YXNzPSJpbXByaW50LXRhYmxlIiBpZD0iaW1wcmludENhdFRhYmxlIj48dGhlYWQ+PHRyPicgKwog ICAgICAgICAgICAgICAgICAgICc8dGggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyIgb25jbGljaz0i RHJpdmVHb3Zlcm5hbmNlLl9zb3J0SW1wcmludFRhYmxlKDApIj5LYXRlZ29yaWUg4oaVPC90aD4n ICsKICAgICAgICAgICAgICAgICAgICAnPHRoIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiIG9uY2xp Y2s9IkRyaXZlR292ZXJuYW5jZS5fc29ydEltcHJpbnRUYWJsZSgxKSI+WnVzdMOkbmRpZyDihpU8 L3RoPicgKwogICAgICAgICAgICAgICAgJzwvdHI+PC90aGVhZD48dGJvZHk+JzsKICAgICAgICAg ICAgICAgIHNLYXRzLmZpbHRlcihmdW5jdGlvbihrKSB7IHJldHVybiAhc0hpZGRlbi5pbmNsdWRl cyhrKTsgfSkuZm9yRWFjaChmdW5jdGlvbihrYXQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIg enVzdGFlbmRpZyA9IHNSZXZpZXdlcnMuZmlsdGVyKGZ1bmN0aW9uKHIpIHsgcmV0dXJuIChyLmth dGVnb3JpZW4gfHwgW10pLmluY2x1ZGVzKGthdCk7IH0pOwogICAgICAgICAgICAgICAgICAgIGlm ICh6dXN0YWVuZGlnLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgenVzdGFl bmRpZy5mb3JFYWNoKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0 bWwgKz0gJzx0cj48dGQ+PHN0cm9uZz4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChrYXQpICsg Jzwvc3Ryb25nPjwvdGQ+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZD4n ICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChyLmRpc3BsYXlOYW1lIHx8ICctJykgKyAnPC90ZD48 L3RyPic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0cj48dGQ+PHN0cm9uZz4n ICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChrYXQpICsgJzwvc3Ryb25nPjwvdGQ+JyArCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnPHRkPjxlbSBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1t dXRlZCk7Ij5LZWluIFJldmlld2VyIHp1Z2V3aWVzZW48L2VtPjwvdGQ+PC90cj4nOwogICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaHRtbCAr PSAnPC90Ym9keT48L3RhYmxlPic7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg ICBodG1sICs9ICc8cCBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1tdXRlZCk7Ij5LZWluZSBLYXRl Z29yaWVuIHZlcmbDvGdiYXIuPC9wPic7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2Ugewog ICAgICAgICAgICAvLyBTZXJ2ZXItTW9kdXM6IFZvbGxzdMOkbmRpZ2UgQW5zaWNodCBtaXQgYWxs ZW4gUm9sbGVuCgogICAgICAgICAgICAvLyBTdXBlclVzZXIKICAgICAgICAgICAgaHRtbCArPSAn PGgzIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpOyBtYXJnaW4tYm90dG9tOjhweDsi PlN5c3RlbWFkbWluaXN0cmF0aW9uPC9oMz4nOwogICAgICAgICAgICBodG1sICs9ICc8dGFibGUg Y2xhc3M9ImltcHJpbnQtdGFibGUiPjx0aGVhZD48dHI+PHRoPk5hbWU8L3RoPjx0aD5CZW51dHpl ci1JRDwvdGg+PHRoPlJvbGxlPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgICAgICAgICAg IGlmIChnb3YgJiYgZ292LnN1cGVyVXNlcnMpIHsKICAgICAgICAgICAgICAgIGdvdi5zdXBlclVz ZXJzLmZvckVhY2goc3UgPT4gewogICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0cj48dGQ+ JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoc3UuZGlzcGxheU5hbWUgfHwgc3UudXNlcm5hbWUp ICsgJzwvdGQ+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8dGQ+JyArIERyaXZlUG9ydGFs LmVzY2FwZUhUTUwoc3UudXNlcm5hbWUpICsgJzwvdGQ+JyArCiAgICAgICAgICAgICAgICAgICAg ICAgICc8dGQgc3R5bGU9ImZvbnQtd2VpZ2h0OjYwMDsgY29sb3I6dmFyKC0tdGV4dC1oZWFkaW5n KTsiPlN1cGVyVXNlcjwvdGQ+PC90cj4nOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg IH0KICAgICAgICAgICAgaHRtbCArPSAnPC90Ym9keT48L3RhYmxlPic7CgogICAgICAgICAgICAv LyBGYWNoYXVmc2ljaHQKICAgICAgICAgICAgaWYgKGdvdiAmJiBnb3YuZmFjaGF1ZnNpY2h0ICYm IGdvdi5mYWNoYXVmc2ljaHQubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgaHRtbCArPSAn PGgzIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcpOyBtYXJnaW46MjBweCAwIDhweDsi PkZhY2hhdWZzaWNodDwvaDM+JzsKICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0YWJsZSBjbGFz cz0iaW1wcmludC10YWJsZSI+PHRoZWFkPjx0cj48dGg+TmFtZTwvdGg+PHRoPkJlbnV0emVyLUlE PC90aD48dGg+WnVzdMOkbmRpZ2tlaXQ8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICAgICAg ICAgICAgICAgIGdvdi5mYWNoYXVmc2ljaHQuZm9yRWFjaChmdW5jdGlvbihmYSkgewogICAgICAg ICAgICAgICAgICAgIGh0bWwgKz0gJzx0cj48dGQ+JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwo ZmEuZGlzcGxheU5hbWUgfHwgZmEudXNlcm5hbWUpICsgJzwvdGQ+JyArCiAgICAgICAgICAgICAg ICAgICAgICAgICc8dGQ+JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoZmEudXNlcm5hbWUpICsg JzwvdGQ+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8dGQgc3R5bGU9ImZvbnQtd2VpZ2h0 OjYwMDsgY29sb3I6I2U1NzM3MzsiPkFsbGUgS2F0ZWdvcmllbjwvdGQ+PC90cj4nOwogICAgICAg ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBodG1sICs9ICc8L3Rib2R5PjwvdGFibGU+JzsK ICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gWnVzdGFlbmRpZ2tlaXQgbmFjaCBLYXRlZ29y aWUgKHNvcnRpZXJiYXJlIFRhYmVsbGUpCiAgICAgICAgICAgIGh0bWwgKz0gJzxoMyBzdHlsZT0i Y29sb3I6dmFyKC0tdGV4dC1oZWFkaW5nKTsgbWFyZ2luOjIwcHggMCA4cHg7Ij5adXN0w6RuZGln a2VpdCBuYWNoIEthdGVnb3JpZTwvaDM+JzsKICAgICAgICAgICAgdmFyIGltcEhpZGRlbkthdHMg PSBEcml2ZUZTLmNvbmZpZy5oaWRkZW5LYXRlZ29yaWVuIHx8IFtdOwogICAgICAgICAgICB2YXIg cmV2aWV3ZXJzID0gKGdvdiAmJiBnb3YucmV2aWV3ZXJzKSA/IGdvdi5yZXZpZXdlcnMgOiBbXTsK ICAgICAgICAgICAgaHRtbCArPSAnPHRhYmxlIGNsYXNzPSJpbXByaW50LXRhYmxlIiBpZD0iaW1w cmludENhdFRhYmxlIj48dGhlYWQ+PHRyPicgKwogICAgICAgICAgICAgICAgJzx0aCBzdHlsZT0i Y3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2UuX3NvcnRJbXByaW50VGFi bGUoMCkiPkthdGVnb3JpZSDihpU8L3RoPicgKwogICAgICAgICAgICAgICAgJzx0aCBzdHlsZT0i Y3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJEcml2ZUdvdmVybmFuY2UuX3NvcnRJbXByaW50VGFi bGUoMSkiPlp1c3TDpG5kaWcg4oaVPC90aD4nICsKICAgICAgICAgICAgICAgICc8dGggc3R5bGU9 ImN1cnNvcjpwb2ludGVyOyIgb25jbGljaz0iRHJpdmVHb3Zlcm5hbmNlLl9zb3J0SW1wcmludFRh YmxlKDIpIj5CZW51dHplci1JRCDihpU8L3RoPicgKwogICAgICAgICAgICAnPC90cj48L3RoZWFk Pjx0Ym9keT4nOwogICAgICAgICAgICAoRHJpdmVGUy5jb25maWcua2F0ZWdvcmllbiB8fCBbXSku ZmlsdGVyKGZ1bmN0aW9uKGthdCkgeyByZXR1cm4gIWltcEhpZGRlbkthdHMuaW5jbHVkZXMoa2F0 KTsgfSkuZm9yRWFjaChmdW5jdGlvbihrYXQpIHsKICAgICAgICAgICAgICAgIHZhciB6dXN0YWVu ZGlnID0gcmV2aWV3ZXJzLmZpbHRlcihmdW5jdGlvbihyKSB7IHJldHVybiAoci5rYXRlZ29yaWVu IHx8IFtdKS5pbmNsdWRlcyhrYXQpOyB9KTsKICAgICAgICAgICAgICAgIGlmICh6dXN0YWVuZGln Lmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICB6dXN0YWVuZGlnLmZvckVhY2goZnVu Y3Rpb24ocikgewogICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8dHI+PHRkPjxzdHJv bmc+JyArIERyaXZlUG9ydGFsLmVzY2FwZUhUTUwoa2F0KSArICc8L3N0cm9uZz48L3RkPicgKwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZD4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRN TChyLmRpc3BsYXlOYW1lIHx8IHIudXNlcm5hbWUpICsgJzwvdGQ+JyArCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnPHRkIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10ZXh0 LXNlY29uZGFyeSk7Ij4nICsgRHJpdmVQb3J0YWwuZXNjYXBlSFRNTChyLnVzZXJuYW1lKSArICc8 L3RkPjwvdHI+JzsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPHRyPjx0ZD48c3Ryb25nPicgKyBEcml2 ZVBvcnRhbC5lc2NhcGVIVE1MKGthdCkgKyAnPC9zdHJvbmc+PC90ZD4nICsKICAgICAgICAgICAg ICAgICAgICAgICAgJzx0ZCBjb2xzcGFuPSIyIj48ZW0gc3R5bGU9ImNvbG9yOnZhcigtLXRleHQt bXV0ZWQpOyI+S2VpbiBSZXZpZXdlciB6dWdld2llc2VuPC9lbT48L3RkPjwvdHI+JzsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGh0bWwgKz0gJzwvdGJvZHk+ PC90YWJsZT4nOwogICAgICAgIH0KCiAgICAgICAgaHRtbCArPSAnPHAgc3R5bGU9Im1hcmdpbi10 b3A6MjBweDsgZm9udC1zaXplOjExcHg7IGNvbG9yOnZhcigtLXRleHQtbXV0ZWQpOyI+U3RhbmQ6 ICcgKyBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygnZGUtREUnLCB7ZGF5OicyLWRpZ2l0 Jyxtb250aDonMi1kaWdpdCcseWVhcjonbnVtZXJpYyd9KSArICc8L3A+JzsKCiAgICAgICAgYm9k eS5pbm5lckhUTUwgPSBodG1sOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbXBy aW50TW9kYWwnKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgIH0sCgogICAgX2ltcHJpbnRT b3J0Q29sOiAtMSwKICAgIF9pbXByaW50U29ydEFzYzogdHJ1ZSwKCiAgICBfc29ydEltcHJpbnRU YWJsZShjb2xJZHgpIHsKICAgICAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgnaW1wcmludENhdFRhYmxlJyk7CiAgICAgICAgaWYgKCF0YWJsZSkgcmV0dXJuOwogICAgICAg IHZhciB0Ym9keSA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5Jyk7CiAgICAgICAgaWYgKCF0 Ym9keSkgcmV0dXJuOwoKICAgICAgICAvLyBTb3J0aWVycmljaHR1bmcgdW1zY2hhbHRlbgogICAg ICAgIGlmICh0aGlzLl9pbXByaW50U29ydENvbCA9PT0gY29sSWR4KSB7CiAgICAgICAgICAgIHRo aXMuX2ltcHJpbnRTb3J0QXNjID0gIXRoaXMuX2ltcHJpbnRTb3J0QXNjOwogICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICAgIHRoaXMuX2ltcHJpbnRTb3J0Q29sID0gY29sSWR4OwogICAgICAgICAg ICB0aGlzLl9pbXByaW50U29ydEFzYyA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHZhciBhc2Mg PSB0aGlzLl9pbXByaW50U29ydEFzYzsKCiAgICAgICAgdmFyIHJvd3MgPSBBcnJheS5mcm9tKHRi b2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJykpOwogICAgICAgIHJvd3Muc29ydChmdW5jdGlvbihh LCBiKSB7CiAgICAgICAgICAgIHZhciBhVGV4dCA9IChhLmNlbGxzW2NvbElkeF0gPyBhLmNlbGxz W2NvbElkeF0udGV4dENvbnRlbnQudHJpbSgpIDogJycpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAg ICAgIHZhciBiVGV4dCA9IChiLmNlbGxzW2NvbElkeF0gPyBiLmNlbGxzW2NvbElkeF0udGV4dENv bnRlbnQudHJpbSgpIDogJycpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgIHZhciBjbXAgPSBh VGV4dC5sb2NhbGVDb21wYXJlKGJUZXh0LCAnZGUnKTsKICAgICAgICAgICAgcmV0dXJuIGFzYyA/ IGNtcCA6IC1jbXA7CiAgICAgICAgfSk7CiAgICAgICAgcm93cy5mb3JFYWNoKGZ1bmN0aW9uKHJv dykgeyB0Ym9keS5hcHBlbmRDaGlsZChyb3cpOyB9KTsKICAgIH0sCgogICAgY2xvc2VJbXByaW50 KCkgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbXByaW50TW9kYWwnKS5jbGFz c0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgIH0KfTsKCi8vID09PT09PT09PT09PT09PT09PT09 PSBJTklUID09PT09PT09PT09PT09PT09PT09PQoKZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcign RE9NQ29udGVudExvYWRlZCcsIGFzeW5jICgpID0+IHsKICAgIC8vIENsaWNrLUhhbmRsZXIgZnVl ciBpbmxpbmUgTWVkaWVuIGluIGRlciBEZXRhaWwtQW5zaWNodAogICAgZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQoJ2RvY3VtZW50RGV0YWlsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkg PT4gewogICAgICAgIC8vIEJpbGRlciBpbiAuZHJpdmUtbWVkaWEtdGh1bWJuYWlsCiAgICAgICAg Y29uc3QgdGh1bWIgPSBlLnRhcmdldC5jbG9zZXN0KCcuZHJpdmUtbWVkaWEtdGh1bWJuYWlsJyk7 CiAgICAgICAgaWYgKHRodW1iICYmICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yTW9k YWwnKS5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSB7CiAgICAgICAgICAgIGNvbnN0IGlt ZyA9IHRodW1iLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpOwogICAgICAgICAgICBpZiAoaW1nKSB7CiAg ICAgICAgICAgICAgICBvcGVuTWVkaWFNb2RhbChpbWcuc3JjLCAnaW1hZ2UnLCBpbWcuYWx0IHx8 ICcnKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgICAvLyBCaWxkZXIgZGlyZWt0IGFuZ2VrbGlja3QgKGluIC5kcml2ZS1tZWRpYS1sYXJnZSBv ZGVyIGFsdGUgQmlsZGVyKQogICAgICAgIGlmIChlLnRhcmdldC50YWdOYW1lID09PSAnSU1HJyAm JiBlLnRhcmdldC5jbG9zZXN0KCcuZGV0YWlsLWNvbnRlbnQnKSkgewogICAgICAgICAgICBvcGVu TWVkaWFNb2RhbChlLnRhcmdldC5zcmMsICdpbWFnZScsIGUudGFyZ2V0LmFsdCB8fCAnJyk7CiAg ICAgICAgfQoKICAgICAgICAvLyBTaWNoZXJoZWl0c25ldHo6IEFsbGUgZXh0ZXJuZW4gTGlua3Mg aW0gQXJ0aWtlbGluaGFsdCBpbiBuZXVlbSBUYWIgb2VmZm5lbi4KICAgICAgICAvLyBWZXJoaW5k ZXJ0LCBkYXNzIGRhcyBQb3J0YWwgZHVyY2ggTGlua3MgYXVzIGtvcGllcnRlbi9iZXN0ZWhlbmRl biBJbmhhbHRlbgogICAgICAgIC8vIHZlcmxhc3NlbiB3aXJkIChhdWNoIGJlaSBBbHRkYXRlbiBk aWUgbm9jaCB0YXJnZXQ9X3NlbGYgaGFiZW4pLgogICAgICAgIHZhciBsaW5rID0gZS50YXJnZXQu Y2xvc2VzdCgnYVtocmVmXScpOwogICAgICAgIGlmIChsaW5rICYmIGxpbmsuY2xvc2VzdCgnLmRl dGFpbC1jb250ZW50LCAjZWRpdG9ySW5wdXQnKSkgewogICAgICAgICAgICB2YXIgaHJlZiA9IChs aW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnKS50cmltKCk7CiAgICAgICAgICAgIC8vIElu dGVybmUgQW5rZXIgKCMuLi4pIHVuZCBEUklWRS1Dcm9zc2xpbmtzIGF1c25laG1lbgogICAgICAg ICAgICBpZiAoIWhyZWYuc3RhcnRzV2l0aCgnIycpICYmICFsaW5rLmNsYXNzTGlzdC5jb250YWlu cygnZHJpdmUteHJlZicpKSB7CiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAg ICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgd2luZG93 Lm9wZW4oaHJlZiwgJ19ibGFuaycsICdub29wZW5lcixub3JlZmVycmVyJyk7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICB9KTsKCiAgICAvLyBDb250ZXh0LU1lbnUgc2NobGllc3NlbiBiZWkg S2xpY2sgYXVzc2VyaGFsYgogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAo ZSkgPT4gewogICAgICAgIGlmICghZS50YXJnZXQuY2xvc2VzdCgnLm1lZGlhLWNvbnRleHQtbWVu dScpICYmICFlLnRhcmdldC5jbG9zZXN0KCcuZHJpdmUtbWVkaWEnKSkgewogICAgICAgICAgICBE cml2ZUVkaXRvci5oaWRlQ29udGV4dE1lbnUoKTsKICAgICAgICB9CiAgICB9KTsKCiAgICAvLyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQogICAgLy8gU2Vzc2lvbi1TY2h1dHo6IEhlYXJ0YmVhdCwgQXV0by1TYXZlLCBXYXJu dW5nLCBXaWVkZXJhdWZuYWhtZQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAvLyBBa3R1ZWxsZSBFZGl0 b3ItRGF0ZW4gZnVlciBBdXRvLVNhdmUgc2FtbWVsbiAob2huZSBWYWxpZGllcnVuZy9Xb3JrZmxv dykKICAgIGZ1bmN0aW9uIF9nYXRoZXJFZGl0b3JTbmFwc2hvdCgpIHsKICAgICAgICBpZiAoIURy aXZlRWRpdG9yLmN1cnJlbnREb2MpIHJldHVybiBudWxsOwogICAgICAgIHZhciBlZGl0b3IgPSBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9ySW5wdXQnKTsKICAgICAgICB2YXIgdGl0ZWwg PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yVGl0ZWwnKTsKICAgICAgICBpZiAoIWVk aXRvciAmJiAhdGl0ZWwpIHJldHVybiBudWxsOwogICAgICAgIHZhciBzbmFwID0gSlNPTi5wYXJz ZShKU09OLnN0cmluZ2lmeShEcml2ZUVkaXRvci5jdXJyZW50RG9jKSk7CiAgICAgICAgaWYgKHRp dGVsKSBzbmFwLnRpdGVsID0gdGl0ZWwudmFsdWUudHJpbSgpOwogICAgICAgIGlmIChlZGl0b3Ip IHNuYXAuaW5oYWx0ID0gZWRpdG9yLmlubmVySFRNTDsKICAgICAgICB2YXIga2F0ID0gZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvckthdGVnb3JpZScpOwogICAgICAgIGlmIChrYXQpIHNu YXAua2F0ZWdvcmllID0ga2F0LnZhbHVlOwogICAgICAgIHZhciBzdGF0dXMgPSBkb2N1bWVudC5n ZXRFbGVtZW50QnlJZCgnZWRpdG9yU3RhdHVzJyk7CiAgICAgICAgaWYgKHN0YXR1cykgc25hcC5f bGFzdEVkaXRvclN0YXR1cyA9IHN0YXR1cy52YWx1ZTsKICAgICAgICBzbmFwLnN0YXR1cyA9ICdF bnR3dXJmJzsKICAgICAgICBzbmFwLnNjaGxhZ3dvZXJ0ZXIgPSBEcml2ZUVkaXRvci5fY3VycmVu dEtleXdvcmRzID8gWy4uLkRyaXZlRWRpdG9yLl9jdXJyZW50S2V5d29yZHNdIDogKHNuYXAuc2No bGFnd29lcnRlciB8fCBbXSk7CiAgICAgICAgcmV0dXJuIHNuYXA7CiAgICB9CgogICAgLy8gQXV0 by1TYXZlOiBFbnR3dXJmIGF1ZiBkZW0gU2VydmVyIHNwZWljaGVybiArIGxvY2FsU3RvcmFnZS1C YWNrdXAKICAgIGFzeW5jIGZ1bmN0aW9uIF9lbWVyZ2VuY3lTYXZlRHJhZnQoKSB7CiAgICAgICAg dmFyIHNuYXAgPSBfZ2F0aGVyRWRpdG9yU25hcHNob3QoKTsKICAgICAgICBpZiAoIXNuYXApIHJl dHVybiBmYWxzZTsKICAgICAgICAvLyBsb2NhbFN0b3JhZ2UtQmFja3VwIChpbW1lciwgYXVjaCB3 ZW5uIFNlcnZlci1TYXZlIGZlaGxzY2hsYWVndCkKICAgICAgICB0cnkgewogICAgICAgICAgICBs b2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZHJpdmUtcmVzdW1lLWRvYycsIEpTT04uc3RyaW5naWZ5KHsK ICAgICAgICAgICAgICAgIGRvY0lkOiBzbmFwLmlkLAogICAgICAgICAgICAgICAgdGl0ZWw6IHNu YXAudGl0ZWwsCiAgICAgICAgICAgICAgICBrYXRlZ29yaWU6IHNuYXAua2F0ZWdvcmllLAogICAg ICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksCiAgICAgICAg ICAgICAgICBpc05ldzogRHJpdmVFZGl0b3IuaXNOZXcKICAgICAgICAgICAgfSkpOwogICAgICAg IH0gY2F0Y2goZSkge30KICAgICAgICAvLyBTZXJ2ZXItU2F2ZSBhbHMgRW50d3VyZgogICAgICAg IGlmIChEcml2ZUZTLm1vZGUgPT09ICdzZXJ2ZXInKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAg ICAgICAgICAgICBzbmFwLmdlYWVuZGVydCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxp dCgnVCcpWzBdOwogICAgICAgICAgICAgICAgdmFyIHVzZXJuYW1lID0gKERyaXZlRlMuZW52aXJv biAmJiBEcml2ZUZTLmVudmlyb24udXNlcm5hbWUpID8gRHJpdmVGUy5lbnZpcm9uLnVzZXJuYW1l IDogJ1VuYmVrYW5udCc7CiAgICAgICAgICAgICAgICBzbmFwLmJlYXJiZWl0ZXRWb24gPSB1c2Vy bmFtZTsKICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBEcml2ZUZTLnNhdmVEb2N1 bWVudChzbmFwKTsKICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHsKICAgICAg ICAgICAgICAgICAgICAvLyBjdXJyZW50RG9jIGFrdHVhbGlzaWVyZW4gZGFtaXQgY2xvc2UoKSBr ZWluZW4gRGF0ZW52ZXJsdXN0IHZlcnVyc2FjaHQKICAgICAgICAgICAgICAgICAgICBEcml2ZUVk aXRvci5jdXJyZW50RG9jID0gc25hcDsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaChlKSB7fQogICAgICAgIH0KICAg ICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gVGltZW91dC1XYXJudW5nOiBJbmZvLU1v ZGFsIDEgTWludXRlIHZvciBTZXJ2ZXItU2h1dGRvd24KICAgIHZhciBfc2VydmVyVGltZW91dE1v ZGFsID0gbnVsbDsKICAgIHZhciBfc2VydmVyVGltZW91dENvdW50ZG93biA9IG51bGw7CiAgICBm dW5jdGlvbiBfc2hvd1NlcnZlclRpbWVvdXRXYXJuaW5nKHJlbWFpbmluZ1NlYykgewogICAgICAg IGlmIChfc2VydmVyVGltZW91dE1vZGFsKSByZXR1cm47IC8vIEJlcmVpdHMgc2ljaHRiYXIKICAg ICAgICAvLyBPdmVybGF5CiAgICAgICAgdmFyIG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdkaXYnKTsKICAgICAgICBvdmVybGF5LmlkID0gJ3NlcnZlclRpbWVvdXRPdmVybGF5JzsK ICAgICAgICBvdmVybGF5LnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6 LWluZGV4OjExMDAwO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO2Rpc3BsYXk6ZmxleDthbGln bi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbmltYXRpb246ZmFkZUluIC4z cyBlYXNlOyc7CiAgICAgICAgLy8gTW9kYWwKICAgICAgICB2YXIgbW9kYWwgPSBkb2N1bWVudC5j cmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBtb2RhbC5zdHlsZS5jc3NUZXh0ID0gJ2JhY2tn cm91bmQ6dmFyKC0tYmctY2FyZCwjZmZmKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzozMnB4 O21heC13aWR0aDo0NjBweDt3aWR0aDo5MCU7Ym94LXNoYWRvdzowIDEycHggNDhweCByZ2JhKDAs MCwwLDAuMjUpO3RleHQtYWxpZ246Y2VudGVyOyc7CiAgICAgICAgdmFyIGNvdW50ZG93blNlYyA9 IE1hdGgubWF4KDAsIE1hdGgucm91bmQocmVtYWluaW5nU2VjKSk7CiAgICAgICAgbW9kYWwuaW5u ZXJIVE1MID0KICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo0MHB4O21hcmdpbi1i b3R0b206MTJweDsiPiYjOTg4ODs8L2Rpdj4nICsKICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImNv bG9yOnZhcigtLXRleHQtaGVhZGluZywjMzMzKTtmb250LXNpemU6MThweDtmb250LXdlaWdodDo3 MDA7bWFyZ2luLWJvdHRvbTo4cHg7Ij5TZXJ2ZXIgd2lyZCBiZWVuZGV0PC9kaXY+JyArCiAgICAg ICAgICAgICc8ZGl2IGlkPSJzZXJ2ZXJUaW1lb3V0Q291bnRkb3duIiBzdHlsZT0iY29sb3I6I2U3 NGMzYztmb250LXNpemU6MjhweDtmb250LXdlaWdodDo3MDA7bWFyZ2luLWJvdHRvbToxNnB4OyI+ JyArIF9mbXRDb3VudGRvd24oY291bnRkb3duU2VjKSArICc8L2Rpdj4nICsKICAgICAgICAgICAg JzxkaXYgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtcHJpbWFyeSwjNTU1KTtmb250LXNpemU6MTRw eDtsaW5lLWhlaWdodDoxLjc7bWFyZ2luLWJvdHRvbToyMHB4OyI+JyArCiAgICAgICAgICAgICAg ICAnRGVyIERSSVZFLVNlcnZlciB3YXIgbGFlbmdlcmUgWmVpdCBpbmFrdGl2IHVuZCB3aXJkIHNp Y2ggaW4gS3VlcnplIGF1dG9tYXRpc2NoIGJlZW5kZW4uPGJyPjxicj4nICsKICAgICAgICAgICAg ICAgICc8c3Ryb25nIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcsIzMzMyk7Ij5LZWlu ZSBTb3JnZTo8L3N0cm9uZz4gT2ZmZW5lIEFydGlrZWwgd3VyZGVuIGF1dG9tYXRpc2NoIGFscyA8 c3Ryb25nPkVudHd1cmY8L3N0cm9uZz4gZ2VzcGVpY2hlcnQgdW5kIGdlaGVuIG5pY2h0IHZlcmxv cmVuLicgKwogICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJi YWNrZ3JvdW5kOnZhcigtLWJnLW1haW4sI2Y1ZjVmNSk7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGlu ZzoxNHB4IDE4cHg7bWFyZ2luLWJvdHRvbToyMHB4O3RleHQtYWxpZ246bGVmdDsiPicgKwogICAg ICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtc2Vjb25kYXJ5LCM3Nzcp O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7 bWFyZ2luLWJvdHRvbTo2cHg7Ij5TbyBnZWh0cyB3ZWl0ZXI8L2Rpdj4nICsKICAgICAgICAgICAg ICAgICc8ZGl2IHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LXByaW1hcnksIzU1NSk7Zm9udC1zaXpl OjEzcHg7bGluZS1oZWlnaHQ6MS42OyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzEuIERpZXNl biBUYWIgc2NobGllc3Nlbjxicj4nICsKICAgICAgICAgICAgICAgICAgICAnMi4gPHN0cm9uZz5E UklWRV9TdGFydC5iYXQ8L3N0cm9uZz4gZXJuZXV0IGF1c2Z1ZWhyZW48YnI+JyArCiAgICAgICAg ICAgICAgICAgICAgJzMuIERlciBnZXNwZWljaGVydGUgRW50d3VyZiBrYW5uIGRhbm4gZm9ydGdl c2V0enQgd2VyZGVuJyArCiAgICAgICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICc8 L2Rpdj4nICsKICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6MTBweDtq dXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyI+JyArCiAgICAgICAgICAgICAgICAnPGJ1dHRvbiBpZD0i c2VydmVyVGltZW91dFJlc3VtZSIgc3R5bGU9InBhZGRpbmc6MTBweCAyNHB4O2JvcmRlci1yYWRp dXM6NnB4O2JvcmRlcjpub25lO2JhY2tncm91bmQ6IzI3YWU2MDtjb2xvcjojZmZmO2N1cnNvcjpw b2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTRweDsiPldlaXRlcmFyYmVpdGVuPC9i dXR0b24+JyArCiAgICAgICAgICAgICc8L2Rpdj4nOwogICAgICAgIG92ZXJsYXkuYXBwZW5kQ2hp bGQobW9kYWwpOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3ZlcmxheSk7CiAg ICAgICAgX3NlcnZlclRpbWVvdXRNb2RhbCA9IG92ZXJsYXk7CiAgICAgICAgLy8gQ291bnRkb3du IGFrdHVhbGlzaWVyZW4KICAgICAgICBfc2VydmVyVGltZW91dENvdW50ZG93biA9IHNldEludGVy dmFsKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBjb3VudGRvd25TZWMtLTsKICAgICAgICAgICAg dmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZlclRpbWVvdXRDb3VudGRvd24n KTsKICAgICAgICAgICAgaWYgKGVsKSBlbC50ZXh0Q29udGVudCA9IF9mbXRDb3VudGRvd24oTWF0 aC5tYXgoMCwgY291bnRkb3duU2VjKSk7CiAgICAgICAgICAgIGlmIChjb3VudGRvd25TZWMgPD0g MCkgewogICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChfc2VydmVyVGltZW91dENvdW50ZG93 bik7CiAgICAgICAgICAgICAgICBfc2VydmVyVGltZW91dENvdW50ZG93biA9IG51bGw7CiAgICAg ICAgICAgICAgICAvLyBNb2RhbC1UZXh0IGFrdHVhbGlzaWVyZW46IFNlcnZlciBpc3QgamV0enQg YmVlbmRldAogICAgICAgICAgICAgICAgaWYgKGVsKSBlbC50ZXh0Q29udGVudCA9ICdTZXJ2ZXIg YmVlbmRldCc7CiAgICAgICAgICAgICAgICB2YXIgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ3NlcnZlclRpbWVvdXRSZXN1bWUnKTsKICAgICAgICAgICAgICAgIGlmIChidG4pIGJ0bi5y ZW1vdmUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIDEwMDApOwogICAgICAgIC8vIFdlaXRl cmFyYmVpdGVuLUJ1dHRvbjogTW9kYWwgc2NobGllc3NlbiArIEhlYXJ0YmVhdCBzZW5kZW4KICAg ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmVyVGltZW91dFJlc3VtZScpLm9uY2xp Y2sgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgX2hpZGVTZXJ2ZXJUaW1lb3V0V2FybmluZygp OwogICAgICAgICAgICBmZXRjaCgnL2FwaS9oZWFydGJlYXQnLCB7IG1ldGhvZDogJ1BPU1QnIH0p LmNhdGNoKGZ1bmN0aW9uKCkge30pOwogICAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBfZm10 Q291bnRkb3duKHNlYykgewogICAgICAgIHZhciBtID0gTWF0aC5mbG9vcihzZWMgLyA2MCk7CiAg ICAgICAgdmFyIHMgPSBzZWMgJSA2MDsKICAgICAgICByZXR1cm4gKG0gPiAwID8gbSArICcgTWlu LiAnIDogJycpICsgcyArICcgU2VrLic7CiAgICB9CiAgICBmdW5jdGlvbiBfaGlkZVNlcnZlclRp bWVvdXRXYXJuaW5nKCkgewogICAgICAgIGlmIChfc2VydmVyVGltZW91dENvdW50ZG93bikgewog ICAgICAgICAgICBjbGVhckludGVydmFsKF9zZXJ2ZXJUaW1lb3V0Q291bnRkb3duKTsKICAgICAg ICAgICAgX3NlcnZlclRpbWVvdXRDb3VudGRvd24gPSBudWxsOwogICAgICAgIH0KICAgICAgICBp ZiAoX3NlcnZlclRpbWVvdXRNb2RhbCkgewogICAgICAgICAgICBfc2VydmVyVGltZW91dE1vZGFs LnJlbW92ZSgpOwogICAgICAgICAgICBfc2VydmVyVGltZW91dE1vZGFsID0gbnVsbDsKICAgICAg ICB9CiAgICB9CgogICAgLy8gVGFiLVNjaGxpZXNzZW4gZXJrZW5uZW46IGJlZm9yZXVubG9hZCAr IHZpc2liaWxpdHljaGFuZ2Uga29tYmluaWVydC4KICAgIC8vIHZpc2liaWxpdHljaGFuZ2UoJ2hp ZGRlbicpIGZldWVydCBiZWkgVGFiLVdlY2hzZWwgVU5EIFRhYi1TY2hsaWVzc2VuLAogICAgLy8g YWJlciBiZWZvcmV1bmxvYWQgZmV1ZXJ0IE5VUiBiZWkgVGFiLVNjaGxpZXNzZW4gLyBOYXZpZ2F0 aW9uIHdlZy4KICAgIC8vIFN0cmF0ZWdpZTogRmxhZyBpbiBiZWZvcmV1bmxvYWQgc2V0emVuLCBk YW5uIGluIHBhZ2VoaWRlL3VubG9hZCBkZW4gU2h1dGRvd24gc2VuZGVuLgogICAgdmFyIF90YWJJ c0Nsb3NpbmcgPSBmYWxzZTsKCiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5s b2FkJywgKCkgPT4gewogICAgICAgIF90YWJJc0Nsb3NpbmcgPSB0cnVlOwogICAgICAgIGlmIChE cml2ZUZTLm1vZGUgPT09ICdzZXJ2ZXInKSB7CiAgICAgICAgICAgIC8vIE9mZmVuZW4gQXJ0aWtl bCBhbHMgRW50d3VyZiBpbiBsb2NhbFN0b3JhZ2UgbWVya2VuCiAgICAgICAgICAgIHZhciBzbmFw ID0gX2dhdGhlckVkaXRvclNuYXBzaG90KCk7CiAgICAgICAgICAgIGlmIChzbmFwKSB7CiAgICAg ICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVt KCdkcml2ZS1yZXN1bWUtZG9jJywgSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgICAg ICAgICBkb2NJZDogc25hcC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgdGl0ZWw6IHNuYXAu dGl0ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgIGthdGVnb3JpZTogc25hcC5rYXRlZ29yaWUs CiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmlu ZygpLAogICAgICAgICAgICAgICAgICAgICAgICBpc05ldzogRHJpdmVFZGl0b3IuaXNOZXcKICAg ICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgLy8gRW50d3VyZiB2aWEg c2VuZEJlYWNvbiBzcGVpY2hlcm4gKGZpcmUtYW5kLWZvcmdldCwgdWViZXJsZWJ0IFRhYi1DbG9z ZSkKICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aCA9ICdkYXRhLycgKyBzbmFwLmthdGVnb3Jp ZSArICcvJyArIHNuYXAuaWQgKyAnLmpzb24nOwogICAgICAgICAgICAgICAgICAgIHNuYXAuZ2Vh ZW5kZXJ0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07CiAgICAgICAg ICAgICAgICAgICAgdmFyIHVzZXJuYW1lID0gKERyaXZlRlMuZW52aXJvbiAmJiBEcml2ZUZTLmVu dmlyb24udXNlcm5hbWUpID8gRHJpdmVGUy5lbnZpcm9uLnVzZXJuYW1lIDogJ1VuYmVrYW5udCc7 CiAgICAgICAgICAgICAgICAgICAgc25hcC5iZWFyYmVpdGV0Vm9uID0gdXNlcm5hbWU7CiAgICAg ICAgICAgICAgICAgICAgLy8gVGVtcG9yYWVyZSBQcm9wZXJ0aWVzIGVudGZlcm5lbgogICAgICAg ICAgICAgICAgICAgIGRlbGV0ZSBzbmFwLl9wcmV2aW91c0luaGFsdDsKICAgICAgICAgICAgICAg ICAgICBkZWxldGUgc25hcC5fcHJldmlvdXNUaXRlbDsKICAgICAgICAgICAgICAgICAgICBkZWxl dGUgc25hcC5fbGFzdEVkaXRvclN0YXR1czsKICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3Iu c2VuZEJlYWNvbignL2FwaS93cml0ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3Ry aW5naWZ5KHsgcGF0aDogcGF0aCwgZGF0YTogc25hcCB9KSk7CiAgICAgICAgICAgICAgICB9IGNh dGNoKGUpIHt9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gTG9jayBmcmVpZ2ViZW4gZmFs bHMgYWt0aXYKICAgICAgICAgICAgaWYgKERyaXZlRWRpdG9yLl9sb2NrZWREb2NJZCkgewogICAg ICAgICAgICAgICAgbmF2aWdhdG9yLnNlbmRCZWFjb24oJy9hcGkvdW5sb2NrJywKICAgICAgICAg ICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IGRvY0lkOiBEcml2ZUVkaXRvci5fbG9ja2VkRG9j SWQgfSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFNlcnZlciBoZXJ1bnRlcmZhaHJl biAtIFRhYiB3aXJkIGdlc2NobG9zc2VuCiAgICAgICAgICAgIG5hdmlnYXRvci5zZW5kQmVhY29u KCcvYXBpL3NodXRkb3duJywgJ3t9Jyk7CiAgICAgICAgfQogICAgfSk7CgogICAgLy8gSGVhcnRi ZWF0OiBXZWIgV29ya2VyIGZ1ZXIgenV2ZXJsYWVzc2lnZSBIZWFydGJlYXRzIGF1Y2ggYmVpIEJh Y2tncm91bmQtVGFicy4KICAgIC8vIEJyb3dzZXIgZHJvc3NlbG4gc2V0SW50ZXJ2YWwgaW0gTWFp bi1UaHJlYWQgYXVmIH42MHMgYmVpIEJhY2tncm91bmQtVGFicywKICAgIC8vIGFiZXIgV2ViIFdv cmtlciBzaW5kIGRhdm9uIE5JQ0hUIGJldHJvZmZlbiB1bmQgbGF1ZmVuIGltbWVyIG1pdCB2b2xs ZXIgRnJlcXVlbnouCiAgICAvLyBTZXJ2ZXItVGltZW91dDogMzAgTWludXRlbiAoMTgwMHMpLiBI ZWFydGJlYXQgd2lyZCBudXIgZ2VzZW5kZXQgd2VubiBkZXIgVGFiCiAgICAvLyBzaWNodGJhciBp c3QgLSBiZWkgdW5zaWNodGJhcmVtIFRhYiBsYWV1ZnQgZGVyIFNlcnZlci1UaW1lciB3ZWl0ZXIu CiAgICAvLyAxIE1pbnV0ZSB2b3IgQWJsYXVmOiBJbmZvLU1vZGFsIG1pdCBDb3VudGRvd24uCiAg ICB2YXIgaGVhcnRiZWF0RmFpbENvdW50ID0gMDsKICAgIHZhciBfdGltZW91dFdhcm5pbmdTaG93 biA9IGZhbHNlOwogICAgY29uc3QgaGVhcnRiZWF0V29ya2VyQ29kZSA9IGAKICAgICAgICBzZXRJ bnRlcnZhbCgoKSA9PiB7IHNlbGYucG9zdE1lc3NhZ2UoJ2hlYXJ0YmVhdCcpOyB9LCA1MDAwKTsK ICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKCdoZWFydGJlYXQnKTsKICAgIGA7CiAgICBjb25zdCBo ZWFydGJlYXRCbG9iID0gbmV3IEJsb2IoW2hlYXJ0YmVhdFdvcmtlckNvZGVdLCB7IHR5cGU6ICdh cHBsaWNhdGlvbi9qYXZhc2NyaXB0JyB9KTsKICAgIGNvbnN0IGhlYXJ0YmVhdFdvcmtlciA9IG5l dyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChoZWFydGJlYXRCbG9iKSk7CiAgICBoZWFydGJl YXRXb3JrZXIub25tZXNzYWdlID0gYXN5bmMgKCkgPT4gewogICAgICAgIC8vIEhlYXJ0YmVhdCBu dXIgc2VuZGVuIHdlbm4gVGFiIHNpY2h0YmFyIGlzdC4KICAgICAgICAvLyBCZWkgdW5zaWNodGJh cmVtIFRhYjogU2VydmVyLVRpbWVyIGxhZXVmdCB3ZWl0ZXIgKGdld3VlbnNjaHRlcyBWZXJoYWx0 ZW4pLgogICAgICAgIC8vIEF1c25haG1lOiBXZW5uIGRlciBUYWIgZ2VyYWRlIHNpY2h0YmFyIHdp cmQsIHNvZm9ydCBIZWFydGJlYXQgc2VuZGVuCiAgICAgICAgLy8gdW0gU2VydmVyLVRpbWVyIHp1 cnVlY2t6dXNldHplbi4KICAgICAgICBpZiAoZG9jdW1lbnQuaGlkZGVuKSByZXR1cm47CiAgICAg ICAgdHJ5IHsKICAgICAgICAgICAgdmFyIHJlc3AgPSBhd2FpdCBmZXRjaCgnL2FwaS9oZWFydGJl YXQnLCB7IG1ldGhvZDogJ1BPU1QnIH0pOwogICAgICAgICAgICB2YXIgZGF0YSA9IGF3YWl0IHJl c3AuanNvbigpOwogICAgICAgICAgICBoZWFydGJlYXRGYWlsQ291bnQgPSAwOwogICAgICAgICAg ICAvLyBXYXJudW5nIHp1cnVlY2tzZXR6ZW4gd2VubiBUaW1lciB3aWVkZXIgZnJpc2NoCiAgICAg ICAgICAgIGlmIChfdGltZW91dFdhcm5pbmdTaG93biAmJiAhZGF0YS53YXJuaW5nKSB7CiAgICAg ICAgICAgICAgICBfdGltZW91dFdhcm5pbmdTaG93biA9IGZhbHNlOwogICAgICAgICAgICAgICAg X2hpZGVTZXJ2ZXJUaW1lb3V0V2FybmluZygpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8v IDEgTWludXRlIHZvciBUaW1lb3V0OiBNb2RhbCArIEF1dG8tU2F2ZQogICAgICAgICAgICBpZiAo ZGF0YS5yZW1haW5pbmdTZWNvbmRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5yZW1haW5pbmdTZWNv bmRzIDw9IDYwICYmICFfdGltZW91dFdhcm5pbmdTaG93bikgewogICAgICAgICAgICAgICAgX3Rp bWVvdXRXYXJuaW5nU2hvd24gPSB0cnVlOwogICAgICAgICAgICAgICAgdmFyIHNhdmVkID0gYXdh aXQgX2VtZXJnZW5jeVNhdmVEcmFmdCgpOwogICAgICAgICAgICAgICAgX3Nob3dTZXJ2ZXJUaW1l b3V0V2FybmluZyhkYXRhLnJlbWFpbmluZ1NlY29uZHMpOwogICAgICAgICAgICAgICAgaWYgKHNh dmVkKSB7CiAgICAgICAgICAgICAgICAgICAgc2hvd1RvYXN0KCdBcnRpa2VsIGF1dG9tYXRpc2No IGFscyBFbnR3dXJmIGdlc3BlaWNoZXJ0JywgJ2luZm8nLCA1MDAwKTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICBoZWFydGJl YXRGYWlsQ291bnQrKzsKICAgICAgICAgICAgLy8gTmFjaCA2IGZlaGxnZXNjaGxhZ2VuZW4gSGVh cnRiZWF0cyAoMzBzKTogV2FybnVuZyArIGxvY2FsU3RvcmFnZS1CYWNrdXAKICAgICAgICAgICAg aWYgKGhlYXJ0YmVhdEZhaWxDb3VudCA9PT0gNiAmJiBEcml2ZUVkaXRvci5jdXJyZW50RG9jKSB7 CiAgICAgICAgICAgICAgICB2YXIgc25hcCA9IF9nYXRoZXJFZGl0b3JTbmFwc2hvdCgpOwogICAg ICAgICAgICAgICAgaWYgKHNuYXApIHsKICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAg ICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZHJpdmUtcmVzdW1lLWRvYycs IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY0lkOiBzbmFw LmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0ZWw6IHNuYXAudGl0ZWwsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBrYXRlZ29yaWU6IHNuYXAua2F0ZWdvcmllLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc05ldzogRHJpdmVFZGl0b3IuaXNOZXcKICAg ICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZXgp IHt9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzaG93VG9hc3QoJ1NlcnZlciBu aWNodCBlcnJlaWNoYmFyIC0gRW50d3VyZiBsb2thbCBnZXNpY2hlcnQnLCAnd2FybmluZycsIDgw MDApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBXZW5uIFRhYiB3aWVk ZXIgc2ljaHRiYXIgd2lyZDogc29mb3J0IEhlYXJ0YmVhdCBzZW5kZW4gdW0gU2VydmVyLVRpbWVy CiAgICAvLyB6dXJ1ZWNrenVzZXR6ZW4gKFVzZXIgaXN0IHp1cnVlY2sgaW0gRFJJVkUtVGFiKQog ICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGZ1bmN0aW9u KCkgewogICAgICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmIERyaXZlRlMubW9kZSA9PT0gJ3Nl cnZlcicpIHsKICAgICAgICAgICAgX3RpbWVvdXRXYXJuaW5nU2hvd24gPSBmYWxzZTsKICAgICAg ICAgICAgX2hpZGVTZXJ2ZXJUaW1lb3V0V2FybmluZygpOwogICAgICAgICAgICBmZXRjaCgnL2Fw aS9oZWFydGJlYXQnLCB7IG1ldGhvZDogJ1BPU1QnIH0pLmNhdGNoKGZ1bmN0aW9uKCkge30pOwog ICAgICAgIH0KICAgIH0pOwoKICAgIC8vIEF1dG9tYXRpc2NoIHZlcmJpbmRlbiAtIFNlcnZlci1N b2R1cyB3aXJkIGJldm9yenVndAogICAgYXdhaXQgRHJpdmVGUy5jb25uZWN0KCk7CgogICAgLy8g V2llZGVyYXVmbmFobWU6IFBydWVmZW4gb2IgYmVpbSBsZXR6dGVuIE1hbCBlaW4gQXJ0aWtlbCBv ZmZlbiB3YXIKICAgIHRyeSB7CiAgICAgICAgdmFyIHJlc3VtZVJhdyA9IGxvY2FsU3RvcmFnZS5n ZXRJdGVtKCdkcml2ZS1yZXN1bWUtZG9jJyk7CiAgICAgICAgaWYgKHJlc3VtZVJhdykgewogICAg ICAgICAgICB2YXIgcmVzdW1lID0gSlNPTi5wYXJzZShyZXN1bWVSYXcpOwogICAgICAgICAgICAv LyBOdXIgYW5iaWV0ZW4gd2VubiB3ZW5pZ2VyIGFscyAyNGggYWx0CiAgICAgICAgICAgIHZhciBy ZXN1bWVBZ2UgPSBEYXRlLm5vdygpIC0gbmV3IERhdGUocmVzdW1lLnRpbWVzdGFtcCkuZ2V0VGlt ZSgpOwogICAgICAgICAgICBpZiAocmVzdW1lQWdlIDwgMjQgKiA2MCAqIDYwICogMTAwMCAmJiBy ZXN1bWUuZG9jSWQpIHsKICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdk cml2ZS1yZXN1bWUtZG9jJyk7CiAgICAgICAgICAgICAgICAvLyBLdXJ6IHdhcnRlbiBiaXMgUG9y dGFsIGdlcmVuZGVydCBpc3QKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7 CiAgICAgICAgICAgICAgICAgICAgdmFyIGJhbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo J2RpdicpOwogICAgICAgICAgICAgICAgICAgIGJhbm5lci5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0 aW9uOmZpeGVkO2JvdHRvbToyNHB4O3JpZ2h0OjI0cHg7ei1pbmRleDoxMDUwMDtiYWNrZ3JvdW5k OnZhcigtLWJnLWNhcmQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtib3Jk ZXItbGVmdDo0cHggc29saWQgIzM0OThkYjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE2cHgg MjBweDttYXgtd2lkdGg6NDAwcHg7Ym94LXNoYWRvdzowIDhweCAzMnB4IHJnYmEoMCwwLDAsMC4x NSk7YW5pbWF0aW9uOnNsaWRlRG93biAuM3MgZWFzZTsnOwogICAgICAgICAgICAgICAgICAgIHZh ciB6ZWl0VGV4dCA9ICcnOwogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHZhciBkID0gbmV3IERhdGUocmVzdW1lLnRpbWVzdGFtcCk7CiAgICAgICAgICAg ICAgICAgICAgICAgIHplaXRUZXh0ID0gJyAoenVsZXR6dCAnICsgZC50b0xvY2FsZURhdGVTdHJp bmcoJ2RlLURFJykgKyAnLCAnICsgZC50b0xvY2FsZVRpbWVTdHJpbmcoJ2RlLURFJywge2hvdXI6 JzItZGlnaXQnLG1pbnV0ZTonMi1kaWdpdCd9KSArICcpJzsKICAgICAgICAgICAgICAgICAgICB9 IGNhdGNoKGUpIHt9CiAgICAgICAgICAgICAgICAgICAgYmFubmVyLmlubmVySFRNTCA9CiAgICAg ICAgICAgICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LWhlYWRpbmcp O2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjZweDsiPkFydGlrZWwgZm9ydHNldHplbj88 L2Rpdj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImNvbG9yOnZhcigt LXRleHQtcHJpbWFyeSk7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS42O21hcmdpbi1ib3R0 b206MTJweDsiPicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0R1IGhhc3QgenVsZXR6 dCBhbiA8c3Ryb25nPicgKyAocmVzdW1lLnRpdGVsIHx8ICdlaW5lbSBBcnRpa2VsJykgKyAnPC9z dHJvbmc+IGdlYXJiZWl0ZXQnICsgemVpdFRleHQgKyAnLicgKwogICAgICAgICAgICAgICAgICAg ICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJkaXNw bGF5OmZsZXg7Z2FwOjhweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7Ij4nICsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIGlkPSJyZXN1bWVEaXNtaXNzIiBzdHlsZT0icGFk ZGluZzo2cHggMTRweDtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJv cmRlci1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkKTtjb2xvcjp2YXIoLS10ZXh0LXNl Y29uZGFyeSk7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEzcHg7Ij5OZWluIGRhbmtlPC9idXR0 b24+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBpZD0icmVzdW1lT3Bl biIgc3R5bGU9InBhZGRpbmc6NnB4IDE0cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOm5vbmU7 YmFja2dyb3VuZDojMzQ5OGRiO2NvbG9yOndoaXRlO2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0 OjYwMDtmb250LXNpemU6MTNweDsiPldlaXRlcmFyYmVpdGVuPC9idXR0b24+JyArCiAgICAgICAg ICAgICAgICAgICAgICAgICc8L2Rpdj4nOwogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJv ZHkuYXBwZW5kQ2hpbGQoYmFubmVyKTsKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgncmVzdW1lRGlzbWlzcycpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsgYmFubmVy LnJlbW92ZSgpOyB9OwogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk KCdyZXN1bWVPcGVuJykub25jbGljayA9IGFzeW5jIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg ICAgICAgICAgICBiYW5uZXIucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChy ZXN1bWUuaXNOZXcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldWVuIEFydGlr ZWwgd2FyIG5vY2ggbmljaHQgZ2VzcGVpY2hlcnQgLSB6dW0gRXJzdGVsbGVuIG9lZmZuZW4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlRWRpdG9yLmNyZWF0ZU5ldygpOwogICAgICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g QmVzdGVoZW5kZW4gQXJ0aWtlbCBpbSBFZGl0b3Igb2VmZm5lbgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXdhaXQgRHJpdmVQb3J0YWwuc2VsZWN0RG9jdW1lbnQocmVzdW1lLmRvY0lkKTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlUG9ydGFsLmhpZ2hsaWdodEl0ZW0ocmVz dW1lLmRvY0lkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlRWRpdG9yLmVkaXQo cmVzdW1lLmRvY0lkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICAgIH07CiAgICAgICAgICAgICAgICAgICAgLy8gQXV0by1EaXNtaXNzIG5hY2ggMzAgU2VrdW5k ZW4KICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBpZiAoYmFubmVy LnBhcmVudE5vZGUpIGJhbm5lci5yZW1vdmUoKTsgfSwgMzAwMDApOwogICAgICAgICAgICAgICAg fSwgMTUwMCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsb2NhbFN0b3Jh Z2UucmVtb3ZlSXRlbSgnZHJpdmUtcmVzdW1lLWRvYycpOwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgfSBjYXRjaChlKSB7CiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2RyaXZl LXJlc3VtZS1kb2MnKTsKICAgIH0KfSk7Cjwvc2NyaXB0PgoKPC9ib2R5Pgo8L2h0bWw+Cg== ### FILE: server.ps1 | 51378 IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQojIEQuUi5JLlYuRS4gUG9ydGFsIHYxLjAgLSBMb2thbGVy IEhUVFAtU2VydmVyCiMgUG93ZXJTaGVsbC1iYXNpZXJ0IC0gS2VpbmUgSW5zdGFsbGF0aW9uIG5v ZXRpZwojIFVudGVyc3R1ZXR6dDogU3RhdGlzY2hlIERhdGVpZW4gKyBBUEkgKExlc2VuLCBTY2hy ZWliZW4sIExvZXNjaGVuLCBVcGxvYWQpCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIwojIFNpY2hl cmhlaXRzYXJjaGl0ZWt0dXI6CiMgICAtIEF1dGhlbnRpZml6aWVydW5nOiAgJGVudjpVU0VSTkFN RSBhdXMgV2luZG93cy1TZXNzaW9uIChuaWNodCBjbGllbnRzZWl0aWcgbWFuaXB1bGllcmJhcikK IyAgIC0gQXV0b3Jpc2llcnVuZzogICAgICBTZXJ2ZXJzZWl0aWcgdmlhIFRlc3QtU3VwZXJVc2Vy IC8gVGVzdC1SZXZpZXdlciB2b3IgamVkZXIgQWt0aW9uCiMgICAtIFBmYWR2YWxpZGllcnVuZzog ICAgUmVzb2x2ZS1TYWZlUGF0aCgpIGdlZ2VuIFBhdGgtVHJhdmVyc2FsIChhbGxlIEFQSS1QZmFk ZSkKIyAgIC0gR292ZXJuYW5jZS1TY2h1dHo6ICBnb3Zlcm5hbmNlLmpzb24gQUVTLTI1Ni12ZXJz Y2hsdWVzc2VsdCwgbnVyIHVlYmVyIC9hcGkvZ292ZXJuYW5jZSBhZW5kZXJiYXIKIyAgIC0gRGF0 ZWlzY2h1dHo6ICAgICAgICBSZWFkLU9ubHktQXR0cmlidXRlIGF1ZiBhbGxlbiBKU09OLURhdGVp ZW4gKGF1ZmdlaG9iZW4gbnVyIHdhZWhyZW5kIFNjaHJlaWJ2b3JnYW5nKQojICAgLSBOZXR6d2Vy azogICAgICAgICAgIE51ciBsb2NhbGhvc3Q6e1BvcnR9LCBrZWluIGV4dGVybmVyIFp1Z3JpZmYg bW9lZ2xpY2gKIyAgIC0gTG9ja2luZzogICAgICAgICAgICBQZXNzaW1pc3RpYyBMb2NraW5nIG1p dCAxMC1NaW4tVGltZW91dCBnZWdlbiBnbGVpY2h6ZWl0aWdlIEJlYXJiZWl0dW5nCiMKIyBBUEkt RW5kcHVua3RlIHVuZCBCZXJlY2h0aWd1bmdlbjoKIyAgIEdFVCAgL2FwaS9lbnZpcm9uICAgICAg LSBPZWZmZW50bGljaCAoZ2lidCBXaW5kb3dzLUJlbnV0emVyaW5mbyB6dXJ1ZWNrKQojICAgR0VU ICAvYXBpL3NjYW4gICAgICAgICAtIE9lZmZlbnRsaWNoIChsaXN0ZXQgRG9rdW1lbnRlKQojICAg R0VUICAvYXBpL2dvdmVybmFuY2UgICAtIE9lZmZlbnRsaWNoIChHb3Zlcm5hbmNlLURhdGVuICsg YWt0dWVsbGUgUm9sbGUpCiMgICBHRVQgIC9hcGkvbG9ja3MgICAgICAgIC0gT2VmZmVudGxpY2gg KGFrdGl2ZSBTcGVycmVuKQojICAgUE9TVCAvYXBpL3dyaXRlICAgICAgICAtIEF1dGhlbnRpZml6 aWVydDsgU3RhdHVzICJGcmVpZ2VnZWJlbiIvIkFiZ2VsZWhudCIgbnVyIGZ1ZXIgUmV2aWV3ZXIv U3VwZXJVc2VyCiMgICBQT1NUIC9hcGkvZGVsZXRlICAgICAgIC0gQXV0aGVudGlmaXppZXJ0OyBl cmZvcmRlcnQgTlctS2VubnVuZy1CZXN0YWV0aWd1bmcsIEF1ZGl0LUxvZwojICAgUE9TVCAvYXBp L3VwbG9hZCAgICAgICAtIEF1dGhlbnRpZml6aWVydDsgUGZhZHZhbGlkaWVydW5nIHZpYSBSZXNv bHZlLVNhZmVQYXRoCiMgICBQT1NUIC9hcGkvZ292ZXJuYW5jZSAgIC0gTnVyIFN1cGVyVXNlcgoj ICAgUE9TVCAvYXBpL2xvY2sgICAgICAgICAtIEF1dGhlbnRpZml6aWVydDsgUGVzc2ltaXN0aWMg TG9ja2luZwojICAgUE9TVCAvYXBpL3VubG9jayAgICAgICAtIExvY2stSW5oYWJlciBvZGVyIFN1 cGVyVXNlcgojICAgUE9TVCAvYXBpL2hlYXJ0YmVhdCAgICAtIE9lZmZlbnRsaWNoIChCcm93c2Vy LUxlYmVuc3plaWNoZW4pCiMgICBQT1NUIC9hcGkvc2h1dGRvd24gICAgIC0gT2VmZmVudGxpY2gg KGJlZW5kZXQgU2VydmVyIGJlaSBUYWItU2NobGllc3N1bmcpCgpwYXJhbSgKICAgIFtpbnRdJFBv cnQgPSA4MDgwLAogICAgW3N0cmluZ10kUm9vdFBhdGggPSAnJwopCgojIFJvb3QtVmVyemVpY2hu aXM6IEV4cGxpeml0ZXIgUGFyYW1ldGVyIGhhdCBWb3JyYW5nIChmdWVyIGxva2FsZSBLb3BpZSB2 b20gTmV0emxhdWZ3ZXJrKQokUm9vdCA9IGlmICgkUm9vdFBhdGggLWFuZCAoVGVzdC1QYXRoICRS b290UGF0aCkpIHsgJFJvb3RQYXRoIH0gZWxzZSB7ICRQU1NjcmlwdFJvb3QgfQokc2NyaXB0OkNv cnNPcmlnaW4gPSAiaHR0cDovL2xvY2FsaG9zdDokUG9ydCIKCiMgTUlNRS1UeXBlcwokTWltZVR5 cGVzID0gQHsKICAgICcuaHRtbCcgPSAndGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04JwogICAgJy5j c3MnICA9ICd0ZXh0L2NzczsgY2hhcnNldD11dGYtOCcKICAgICcuanMnICAgPSAnYXBwbGljYXRp b24vamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOCcKICAgICcuanNvbicgPSAnYXBwbGljYXRpb24v anNvbjsgY2hhcnNldD11dGYtOCcKICAgICcucG5nJyAgPSAnaW1hZ2UvcG5nJwogICAgJy5qcGcn ICA9ICdpbWFnZS9qcGVnJwogICAgJy5qcGVnJyA9ICdpbWFnZS9qcGVnJwogICAgJy5naWYnICA9 ICdpbWFnZS9naWYnCiAgICAnLnN2ZycgID0gJ2ltYWdlL3N2Zyt4bWwnCiAgICAnLmljbycgID0g J2ltYWdlL3gtaWNvbicKICAgICcucGRmJyAgPSAnYXBwbGljYXRpb24vcGRmJwogICAgJy5tcDQn ICA9ICd2aWRlby9tcDQnCiAgICAnLm1wMycgID0gJ2F1ZGlvL21wZWcnCiAgICAnLndlYm0nID0g J3ZpZGVvL3dlYm0nCiAgICAnLm9nZycgID0gJ2F1ZGlvL29nZycKICAgICcud29mZicgPSAnZm9u dC93b2ZmJwogICAgJy53b2ZmMic9ICdmb250L3dvZmYyJwogICAgJy5kb2N4JyA9ICdhcHBsaWNh dGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5k b2N1bWVudCcKICAgICcueGxzeCcgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9m ZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnCiAgICAnLnBwdHgnID0gJ2FwcGxpY2F0 aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVz ZW50YXRpb24nCiAgICAnLndhdicgID0gJ2F1ZGlvL3dhdicKICAgICcud2VicCcgPSAnaW1hZ2Uv d2VicCcKfQoKIyBIaWxmc2Z1bmt0aW9uOiBKU09OLUFudHdvcnQgc2VuZGVuCmZ1bmN0aW9uIEFk ZC1TZWN1cml0eUhlYWRlcnMoJFJlc3BvbnNlKSB7CiAgICAkUmVzcG9uc2UuSGVhZGVycy5BZGQo IkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiIsICRzY3JpcHQ6Q29yc09yaWdpbikKICAgICRS ZXNwb25zZS5IZWFkZXJzLkFkZCgiWC1Db250ZW50LVR5cGUtT3B0aW9ucyIsICJub3NuaWZmIikK ICAgICMgU0FNRU9SSUdJTiBzdGF0dCBERU5ZOiBFcmxhdWJ0IGlmcmFtZS1FaW5iZXR0dW5nIHZv biBQREZzIGlubmVyaGFsYiBkZXIgZWlnZW5lbiBTZWl0ZQogICAgJFJlc3BvbnNlLkhlYWRlcnMu QWRkKCJYLUZyYW1lLU9wdGlvbnMiLCAiU0FNRU9SSUdJTiIpCn0KCmZ1bmN0aW9uIFNlbmQtSnNv bigkUmVzcG9uc2UsICREYXRhLCAkU3RhdHVzQ29kZSA9IDIwMCkgewogICAgdHJ5IHsKICAgICAg ICAkSnNvbiA9ICREYXRhIHwgQ29udmVydFRvLUpzb24gLURlcHRoIDEwIC1Db21wcmVzcwogICAg ICAgICRCeXRlcyA9IFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRCeXRlcygkSnNvbikKICAgICAg ICAkUmVzcG9uc2UuU3RhdHVzQ29kZSA9ICRTdGF0dXNDb2RlCiAgICAgICAgJFJlc3BvbnNlLkNv bnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnCiAgICAgICAgQWRk LVNlY3VyaXR5SGVhZGVycyAkUmVzcG9uc2UKICAgICAgICAkUmVzcG9uc2UuQ29udGVudExlbmd0 aDY0ID0gJEJ5dGVzLkxlbmd0aAogICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0uV3JpdGUo JEJ5dGVzLCAwLCAkQnl0ZXMuTGVuZ3RoKQogICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0u Rmx1c2goKQogICAgfSBjYXRjaCB7CiAgICAgICAgV3JpdGUtSG9zdCAiICBFUlIgIFNlbmQtSnNv bjogJCgkXy5FeGNlcHRpb24uTWVzc2FnZSkiIC1Gb3JlZ3JvdW5kQ29sb3IgUmVkCiAgICB9Cn0K CiMgSGlsZnNmdW5rdGlvbjogUmVxdWVzdC1Cb2R5IGxlc2VuIChpbW1lciBVVEYtOCwgZGEgQnJv d3NlciBVVEYtOCBzZW5kZXQpCiMgTGltaXQ6IDEwIE1CIGZ1ZXIgSlNPTi1SZXF1ZXN0cyAodmVy aGluZGVydCBTcGVpY2hlcmVyc2Nob2VwZnVuZyBkdXJjaCB1ZWJlcmdyb3NzZSBQYXlsb2FkcykK JHNjcmlwdDpNYXhCb2R5Qnl0ZXMgPSAxMCAqIDEwMjQgKiAxMDI0CgpmdW5jdGlvbiBSZWFkLUJv ZHkoJFJlcXVlc3QpIHsKICAgIGlmICgkUmVxdWVzdC5Db250ZW50TGVuZ3RoNjQgLWd0ICRzY3Jp cHQ6TWF4Qm9keUJ5dGVzKSB7CiAgICAgICAgdGhyb3cgIlJlcXVlc3QtQm9keSB6dSBncm9zcyAo bWF4LiAkKFtNYXRoXTo6Um91bmQoJHNjcmlwdDpNYXhCb2R5Qnl0ZXMgLyAxMDI0IC8gMTAyNCkp IE1CKSIKICAgIH0KICAgICRSZWFkZXIgPSBOZXctT2JqZWN0IFN5c3RlbS5JTy5TdHJlYW1SZWFk ZXIoJFJlcXVlc3QuSW5wdXRTdHJlYW0sIFtUZXh0LkVuY29kaW5nXTo6VVRGOCkKICAgICRCb2R5 ID0gJFJlYWRlci5SZWFkVG9FbmQoKQogICAgJFJlYWRlci5DbG9zZSgpCiAgICByZXR1cm4gJEJv ZHkKfQoKIyBQZmFkdmFsaWRpZXJ1bmc6IFZlcmhpbmRlcnQgUGF0aC1UcmF2ZXJzYWwtQW5ncmlm ZmUgKC4uLyBvZGVyIGFic29sdXRlIFBmYWRlKS4KIyBHZXRGdWxsUGF0aCgpIGthbm9uaXNpZXJ0 IGRlbiBQZmFkIChsb2VzdCAuLi8gYXVmKSwgU3RhcnRzV2l0aCgpIHBydWVmdCBDb250YWlubWVu dC4KIyBHaWJ0ICRudWxsIHp1cnVlY2sgYmVpIHVuZ3VlbHRpZ2VtIFBmYWQgLSBBdWZydWZlciBt dXNzIGRhcmF1ZiBwcnVlZmVuLgojIFdpcmQgaW4gL2FwaS93cml0ZSwgL2FwaS9kZWxldGUsIC9h cGkvdXBsb2FkIHZvciBqZWRlbSBEYXRlaXp1Z3JpZmYgYXVmZ2VydWZlbi4KZnVuY3Rpb24gUmVz b2x2ZS1TYWZlUGF0aCgkUmVsUGF0aCkgewogICAgJEZ1bGwgPSBbSU8uUGF0aF06OkdldEZ1bGxQ YXRoKChKb2luLVBhdGggJFJvb3QgJFJlbFBhdGgpKQogICAgaWYgKC1ub3QgJEZ1bGwuU3RhcnRz V2l0aCgkUm9vdCkpIHsgcmV0dXJuICRudWxsIH0KICAgIHJldHVybiAkRnVsbAp9CgojIEhpbGZz ZnVua3Rpb246IFNjaHJlaWJzY2h1dHogYXVmaGViZW4gdm9yIFNjaHJlaWJ2b3JnYW5nCmZ1bmN0 aW9uIFVucHJvdGVjdC1GaWxlKCRQYXRoKSB7CiAgICBpZiAoVGVzdC1QYXRoICRQYXRoKSB7CiAg ICAgICAgJGl0ZW0gPSBHZXQtSXRlbSAkUGF0aCAtRm9yY2UKICAgICAgICBpZiAoJGl0ZW0uQXR0 cmlidXRlcyAtYmFuZCBbSU8uRmlsZUF0dHJpYnV0ZXNdOjpSZWFkT25seSkgewogICAgICAgICAg ICAkaXRlbS5BdHRyaWJ1dGVzID0gJGl0ZW0uQXR0cmlidXRlcyAtYnhvciBbSU8uRmlsZUF0dHJp YnV0ZXNdOjpSZWFkT25seQogICAgICAgIH0KICAgIH0KfQoKIyBIaWxmc2Z1bmt0aW9uOiBTY2hy ZWlic2NodXR6IHdpZWRlciBzZXR6ZW4KZnVuY3Rpb24gUHJvdGVjdC1GaWxlKCRQYXRoKSB7CiAg ICBpZiAoVGVzdC1QYXRoICRQYXRoKSB7CiAgICAgICAgJGl0ZW0gPSBHZXQtSXRlbSAkUGF0aCAt Rm9yY2UKICAgICAgICAkaXRlbS5BdHRyaWJ1dGVzID0gJGl0ZW0uQXR0cmlidXRlcyAtYm9yIFtJ Ty5GaWxlQXR0cmlidXRlc106OlJlYWRPbmx5CiAgICB9Cn0KCiMgLS0tLSBBRVMtMjU2LVZlcnNj aGx1ZXNzZWx1bmcgZnVlciBnb3Zlcm5hbmNlLmpzb24gLS0tLQojIFNjaHV0emtvbnplcHQ6IGdv dmVybmFuY2UuanNvbiBlbnRoYWVsdCBSb2xsZW56dXdlaXN1bmdlbiAoU3VwZXJVc2VyLCBSZXZp ZXdlcikuCiMgRGllIERhdGVpIHdpcmQgYmVpbSBlcnN0ZW4gU2VydmVyLVN0YXJ0IGF1dG9tYXRp c2NoIHZlcnNjaGx1ZXNzZWx0LgojIFNjaHV0enppZWw6IFZlcmhpbmRlcm4sIGRhc3MgUm9sbGVu c3RydWt0dXJlbiBpbSBEYXRlaXN5c3RlbSBpbSBLbGFydGV4dCBlaW5zZWhiYXIgc2luZC4KIyBF aW5zY2hyYWVua3VuZzogRGVyIFNjaGx1ZXNzZWwgbGllZ3QgaW0gUXVlbGxjb2RlIC0gZGVyIFNj aHV0eiByaWNodGV0IHNpY2ggZ2VnZW4KIyBvcHBvcnR1bmlzdGlzY2hlcyBMZXNlbiwgbmljaHQg Z2VnZW4gQW5ncmVpZmVyIG1pdCBadWdyaWZmIGF1ZiBkZW4gUXVlbGxjb2RlLgojIEFsZ29yaXRo bXVzOiBBRVMtMjU2LUNCQyBtaXQgUEtDUzctUGFkZGluZywgenVmYWVsbGlnZXIgSVYgcHJvIFZl cnNjaGx1ZXNzZWx1bmcuCiMgRm9ybWF0OiAiRFJJVkUtRU5DOiIgKyBCYXNlNjQoSVZbMTYgQnl0 ZXNdICsgQ2lwaGVydGV4dCkKIyBTY2hsdWVzc2VsICgzMiBCeXRlcyA9IEFFUy0yNTYpLiBJZGVu dGlzY2ggaW4gc2VydmVyLnBzMSB1bmQgc2VydmVyLnB5Lgokc2NyaXB0OkdvdkFlc0tleSA9IFtD b252ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygiUkZKSlZrVXRkak11TmkxSGIzWmxjbTVoYm1ObExV dGxlUzB5TURJMklTRT0iKQokc2NyaXB0OkdvdkVuY1ByZWZpeCA9ICJEUklWRS1FTkM6IgoKZnVu Y3Rpb24gUHJvdGVjdC1Hb3Zlcm5hbmNlRGF0YShbc3RyaW5nXSRKc29uVGV4dCkgewogICAgJEFl cyA9IFtTZWN1cml0eS5DcnlwdG9ncmFwaHkuQWVzXTo6Q3JlYXRlKCkKICAgICRBZXMuS2V5ID0g JHNjcmlwdDpHb3ZBZXNLZXkKICAgICRBZXMuR2VuZXJhdGVJVigpCiAgICAkQWVzLk1vZGUgPSBb U2VjdXJpdHkuQ3J5cHRvZ3JhcGh5LkNpcGhlck1vZGVdOjpDQkMKICAgICRBZXMuUGFkZGluZyA9 IFtTZWN1cml0eS5DcnlwdG9ncmFwaHkuUGFkZGluZ01vZGVdOjpQS0NTNwogICAgJEVuYyA9ICRB ZXMuQ3JlYXRlRW5jcnlwdG9yKCkKICAgICRQbGFpbiA9IFtUZXh0LkVuY29kaW5nXTo6VVRGOC5H ZXRCeXRlcygkSnNvblRleHQpCiAgICAkQ2lwaGVyID0gJEVuYy5UcmFuc2Zvcm1GaW5hbEJsb2Nr KCRQbGFpbiwgMCwgJFBsYWluLkxlbmd0aCkKICAgICRDb21iaW5lZCA9IE5ldy1PYmplY3QgYnl0 ZVtdICgkQWVzLklWLkxlbmd0aCArICRDaXBoZXIuTGVuZ3RoKQogICAgW0FycmF5XTo6Q29weSgk QWVzLklWLCAwLCAkQ29tYmluZWQsIDAsICRBZXMuSVYuTGVuZ3RoKQogICAgW0FycmF5XTo6Q29w eSgkQ2lwaGVyLCAwLCAkQ29tYmluZWQsICRBZXMuSVYuTGVuZ3RoLCAkQ2lwaGVyLkxlbmd0aCkK ICAgICRBZXMuRGlzcG9zZSgpCiAgICByZXR1cm4gJHNjcmlwdDpHb3ZFbmNQcmVmaXggKyBbQ29u dmVydF06OlRvQmFzZTY0U3RyaW5nKCRDb21iaW5lZCkKfQoKZnVuY3Rpb24gVW5wcm90ZWN0LUdv dmVybmFuY2VEYXRhKFtzdHJpbmddJEVuY1RleHQpIHsKICAgICRCNjQgPSAkRW5jVGV4dC5TdWJz dHJpbmcoJHNjcmlwdDpHb3ZFbmNQcmVmaXguTGVuZ3RoKQogICAgJENvbWJpbmVkID0gW0NvbnZl cnRdOjpGcm9tQmFzZTY0U3RyaW5nKCRCNjQpCiAgICAkSVYgPSAkQ29tYmluZWRbMC4uMTVdCiAg ICAkQ2lwaGVyID0gJENvbWJpbmVkWzE2Li4oJENvbWJpbmVkLkxlbmd0aCAtIDEpXQogICAgJEFl cyA9IFtTZWN1cml0eS5DcnlwdG9ncmFwaHkuQWVzXTo6Q3JlYXRlKCkKICAgICRBZXMuS2V5ID0g JHNjcmlwdDpHb3ZBZXNLZXkKICAgICRBZXMuSVYgPSAkSVYKICAgICRBZXMuTW9kZSA9IFtTZWN1 cml0eS5DcnlwdG9ncmFwaHkuQ2lwaGVyTW9kZV06OkNCQwogICAgJEFlcy5QYWRkaW5nID0gW1Nl Y3VyaXR5LkNyeXB0b2dyYXBoeS5QYWRkaW5nTW9kZV06OlBLQ1M3CiAgICAkRGVjID0gJEFlcy5D cmVhdGVEZWNyeXB0b3IoKQogICAgJFBsYWluID0gJERlYy5UcmFuc2Zvcm1GaW5hbEJsb2NrKCRD aXBoZXIsIDAsICRDaXBoZXIuTGVuZ3RoKQogICAgJEFlcy5EaXNwb3NlKCkKICAgIHJldHVybiBb VGV4dC5FbmNvZGluZ106OlVURjguR2V0U3RyaW5nKCRQbGFpbikKfQoKIyBIaWxmc2Z1bmt0aW9u OiBHb3Zlcm5hbmNlLURhdGVuIGxhZGVuIChnZWNhY2h0LCBJbnZhbGlkaWVydW5nIGJlaSBEYXRl aS1BZW5kZXJ1bmcpCiMgRXJrZW5udCBhdXRvbWF0aXNjaCBLbGFydGV4dC1KU09OIHVuZCB2ZXJz Y2hsdWVzc2VsdCBlcyBiZWltIGVyc3RlbiBMZXNlbi4KJHNjcmlwdDpHb3ZDYWNoZSA9ICRudWxs CiRzY3JpcHQ6R292Q2FjaGVUaW1lID0gW0RhdGVUaW1lXTo6TWluVmFsdWUKCmZ1bmN0aW9uIEdl dC1Hb3Zlcm5hbmNlIHsKICAgICRHb3ZQYXRoID0gSm9pbi1QYXRoICRSb290ICJkYXRhL2dvdmVy bmFuY2UuanNvbiIKICAgIGlmIChUZXN0LVBhdGggJEdvdlBhdGgpIHsKICAgICAgICAkTGFzdFdy aXRlID0gKEdldC1JdGVtICRHb3ZQYXRoIC1Gb3JjZSkuTGFzdFdyaXRlVGltZVV0YwogICAgICAg IGlmICgkc2NyaXB0OkdvdkNhY2hlIC1hbmQgJExhc3RXcml0ZSAtbGUgJHNjcmlwdDpHb3ZDYWNo ZVRpbWUpIHsKICAgICAgICAgICAgcmV0dXJuICRzY3JpcHQ6R292Q2FjaGUKICAgICAgICB9CiAg ICAgICAgJFJhdyA9IEdldC1Db250ZW50ICRHb3ZQYXRoIC1SYXcgLUVuY29kaW5nIFVURjgKICAg ICAgICBpZiAoJFJhdy5TdGFydHNXaXRoKCRzY3JpcHQ6R292RW5jUHJlZml4KSkgewogICAgICAg ICAgICAkSnNvblRleHQgPSBVbnByb3RlY3QtR292ZXJuYW5jZURhdGEgJFJhdwogICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICMgS2xhcnRleHQgZXJrYW5udCAtIGF1dG9tYXRpc2NoIHZlcnNj aGx1ZXNzZWxuIChNaWdyYXRpb24pCiAgICAgICAgICAgICRKc29uVGV4dCA9ICRSYXcKICAgICAg ICAgICAgJEVuY3J5cHRlZCA9IFByb3RlY3QtR292ZXJuYW5jZURhdGEgJEpzb25UZXh0CiAgICAg ICAgICAgIFVucHJvdGVjdC1GaWxlICRHb3ZQYXRoCiAgICAgICAgICAgIFtJTy5GaWxlXTo6V3Jp dGVBbGxUZXh0KCRHb3ZQYXRoLCAkRW5jcnlwdGVkLCBbVGV4dC5VVEY4RW5jb2RpbmddOjpuZXco JGZhbHNlKSkKICAgICAgICAgICAgUHJvdGVjdC1GaWxlICRHb3ZQYXRoCiAgICAgICAgICAgIFdy aXRlLUhvc3QgIiAgQ1JZUFQgIGdvdmVybmFuY2UuanNvbiB3dXJkZSB2ZXJzY2hsdWVzc2VsdCAo QUVTLTI1NikiIC1Gb3JlZ3JvdW5kQ29sb3IgTWFnZW50YQogICAgICAgIH0KICAgICAgICAkc2Ny aXB0OkdvdkNhY2hlID0gJEpzb25UZXh0IHwgQ29udmVydEZyb20tSnNvbgogICAgICAgICRzY3Jp cHQ6R292Q2FjaGVUaW1lID0gKEdldC1JdGVtICRHb3ZQYXRoIC1Gb3JjZSkuTGFzdFdyaXRlVGlt ZVV0YwogICAgICAgIHJldHVybiAkc2NyaXB0OkdvdkNhY2hlCiAgICB9CiAgICByZXR1cm4gJG51 bGwKfQoKZnVuY3Rpb24gQ2xlYXItR292ZXJuYW5jZUNhY2hlIHsKICAgICRzY3JpcHQ6R292Q2Fj aGUgPSAkbnVsbAogICAgJHNjcmlwdDpHb3ZDYWNoZVRpbWUgPSBbRGF0ZVRpbWVdOjpNaW5WYWx1 ZQp9CgpmdW5jdGlvbiBTYXZlLUdvdmVybmFuY2UoJEdvdk9iamVjdCkgewogICAgJEdvdlBhdGgg PSBKb2luLVBhdGggJFJvb3QgImRhdGEvZ292ZXJuYW5jZS5qc29uIgogICAgJEpzb25Db250ZW50 ID0gJEdvdk9iamVjdCB8IENvbnZlcnRUby1Kc29uIC1EZXB0aCAyMAogICAgJEVuY3J5cHRlZCA9 IFByb3RlY3QtR292ZXJuYW5jZURhdGEgJEpzb25Db250ZW50CiAgICBVbnByb3RlY3QtRmlsZSAk R292UGF0aAogICAgW0lPLkZpbGVdOjpXcml0ZUFsbFRleHQoJEdvdlBhdGgsICRFbmNyeXB0ZWQs IFtUZXh0LlVURjhFbmNvZGluZ106Om5ldygkZmFsc2UpKQogICAgUHJvdGVjdC1GaWxlICRHb3ZQ YXRoCiAgICBDbGVhci1Hb3Zlcm5hbmNlQ2FjaGUKfQoKIyBBdXRvcmlzaWVydW5nc3BydWVmdW5n OiBWZXJnbGVpY2h0ICRlbnY6VVNFUk5BTUUgKyAkZW52OlVTRVJET01BSU4gbWl0IGdvdmVybmFu Y2UuanNvbi4KIyBGYWxsYmFjazogV2VubiBrZWluZSBnb3Zlcm5hbmNlLmpzb24gZXhpc3RpZXJ0 LCB3aXJkICR0cnVlIHp1cnVlY2tnZWdlYmVuIChFcnN0aW5iZXRyaWVibmFobWUpLgojIERvbWFl bmUgIioiIGluIGdvdmVybmFuY2UuanNvbiBiZWRldXRldDogQmVudXR6ZXJuYW1lIHJlaWNodCwg RG9tYWVuZSB3aXJkIG5pY2h0IGdlcHJ1ZWZ0LgpmdW5jdGlvbiBUZXN0LVN1cGVyVXNlcigkR292 ZXJuYW5jZSkgewogICAgaWYgKC1ub3QgJEdvdmVybmFuY2UpIHsgcmV0dXJuICR0cnVlIH0gICMg S2VpbiBHb3Zlcm5hbmNlID0gYWxsZXMgZXJsYXVidAogICAgZm9yZWFjaCAoJHN1IGluICRHb3Zl cm5hbmNlLnN1cGVyVXNlcnMpIHsKICAgICAgICBpZiAoJHN1LnVzZXJuYW1lIC1lcSAkZW52OlVT RVJOQU1FKSB7CiAgICAgICAgICAgIGlmICgkc3UuZG9tYWluIC1lcSAnKicgLW9yICRzdS5kb21h aW4gLWVxICRlbnY6VVNFUkRPTUFJTikgeyByZXR1cm4gJHRydWUgfQogICAgICAgIH0KICAgIH0K ICAgIHJldHVybiAkZmFsc2UKfQoKIyBGYWNoYXVmc2ljaHQtUHJ1ZWZ1bmc6IFdpZSBUZXN0LVN1 cGVyVXNlciwgYWJlciBmdWVyIEZhY2hhdWZzaWNodC1Sb2xsZS4KIyBPaG5lIGdvdmVybmFuY2Uu anNvbjogJGZhbHNlIChrZWluZSBGYWNoYXVmc2ljaHQgb2huZSBleHBsaXppdGUgWnV3ZWlzdW5n KS4KZnVuY3Rpb24gVGVzdC1GYWNoYXVmc2ljaHQoJEdvdmVybmFuY2UpIHsKICAgIGlmICgtbm90 ICRHb3Zlcm5hbmNlKSB7IHJldHVybiAkZmFsc2UgfQogICAgZm9yZWFjaCAoJGZhIGluICRHb3Zl cm5hbmNlLmZhY2hhdWZzaWNodCkgewogICAgICAgIGlmICgkZmEudXNlcm5hbWUgLWVxICRlbnY6 VVNFUk5BTUUpIHsKICAgICAgICAgICAgaWYgKCRmYS5kb21haW4gLWVxICcqJyAtb3IgJGZhLmRv bWFpbiAtZXEgJGVudjpVU0VSRE9NQUlOKSB7IHJldHVybiAkdHJ1ZSB9CiAgICAgICAgfQogICAg fQogICAgcmV0dXJuICRmYWxzZQp9CgojIFJldmlld2VyLVBydWVmdW5nOiBXaWUgVGVzdC1TdXBl clVzZXIsIGFiZXIgenVzYWV0emxpY2ggS2F0ZWdvcmllLVp1b3JkbnVuZy4KIyBPaG5lIGdvdmVy bmFuY2UuanNvbjogJGZhbHNlIChrZWluIFJldmlld2VyIG9obmUgZXhwbGl6aXRlIFp1d2Vpc3Vu ZykuCiMgQXN5bW1ldHJpZSB6dSBUZXN0LVN1cGVyVXNlciBpc3QgYmVhYnNpY2h0aWd0OiBSZXZp ZXdlci1SZWNodGUgbXVlc3NlbiBleHBsaXppdCB2ZXJnZWJlbiB3ZXJkZW4uCmZ1bmN0aW9uIFRl c3QtUmV2aWV3ZXIoJEdvdmVybmFuY2UsICRLYXRlZ29yaWUpIHsKICAgIGlmICgtbm90ICRHb3Zl cm5hbmNlKSB7IHJldHVybiAkZmFsc2UgfQogICAgZm9yZWFjaCAoJHIgaW4gJEdvdmVybmFuY2Uu cmV2aWV3ZXJzKSB7CiAgICAgICAgaWYgKCRyLnVzZXJuYW1lIC1lcSAkZW52OlVTRVJOQU1FKSB7 CiAgICAgICAgICAgIGlmICgkci5kb21haW4gLWVxICcqJyAtb3IgJHIuZG9tYWluIC1lcSAkZW52 OlVTRVJET01BSU4pIHsKICAgICAgICAgICAgICAgIGlmICgkci5rYXRlZ29yaWVuIC1jb250YWlu cyAkS2F0ZWdvcmllKSB7IHJldHVybiAkdHJ1ZSB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICB9CiAgICByZXR1cm4gJGZhbHNlCn0KCiMgUHJvemVzcyBpbSBUYXNrLU1hbmFnZXIgYWxzICJE UklWRV9Mb2NhbGhvc3QiIHNpY2h0YmFyIG1hY2hlbgokSG9zdC5VSS5SYXdVSS5XaW5kb3dUaXRs ZSA9ICJEUklWRV9Mb2NhbGhvc3QiCgpXcml0ZS1Ib3N0ICIiCldyaXRlLUhvc3QgIj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiAtRm9yZWdyb3VuZENvbG9yIEN5 YW4KV3JpdGUtSG9zdCAiICBELlIuSS5WLkUuIFBvcnRhbCB2MS4wIC0gU2VydmVyIiAgICAgICAg ICAgIC1Gb3JlZ3JvdW5kQ29sb3IgQ3lhbgpXcml0ZS1Ib3N0ICI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PSIgLUZvcmVncm91bmRDb2xvciBDeWFuCldyaXRlLUhv c3QgIiIKV3JpdGUtSG9zdCAiICBPcmRuZXI6ICAkUm9vdCIgLUZvcmVncm91bmRDb2xvciBHcmF5 CldyaXRlLUhvc3QgIiAgVVJMOiAgICAgaHR0cDovL2xvY2FsaG9zdDokUG9ydCIgICAgICAgICAg ICAgIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4KV3JpdGUtSG9zdCAiIgpXcml0ZS1Ib3N0ICIgIFp1 bSBCZWVuZGVuOiBTdHJnK0MgZHJ1ZWNrZW4iICAgICAgICAgICAgICAgICAtRm9yZWdyb3VuZENv bG9yIFllbGxvdwpXcml0ZS1Ib3N0ICIiCgojIFNjaHJlaWJzY2h1dHogYmVpbSBTdGFydCBhdWZo ZWJlbiAoZnVlciBkaWUgZ2VzYW10ZSBTZXNzaW9uKQpXcml0ZS1Ib3N0ICIgIFNjaHJlaWJzY2h1 dHogd2lyZCBhdWZnZWhvYmVuLi4uIiAgICAgICAgICAgICAtRm9yZWdyb3VuZENvbG9yIEdyYXkK R2V0LUNoaWxkSXRlbSAiJFJvb3RcZGF0YSIgLVJlY3Vyc2UgLUZpbHRlciAiKi5qc29uIiAtRXJy b3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSB8IEZvckVhY2gtT2JqZWN0IHsgVW5wcm90ZWN0LUZp bGUgJF8uRnVsbE5hbWUgfQpVbnByb3RlY3QtRmlsZSAoSm9pbi1QYXRoICRSb290ICJpbmRleC5o dG1sIikKCiMgTGluay1CZXJlaW5pZ3VuZzogQWxsZSA8YT4tVGFncyBpbiBiZXN0ZWhlbmRlbiBB cnRpa2VsbiBhdWYgdGFyZ2V0PSJfYmxhbmsiIHNldHplbi4KIyBWZXJoaW5kZXJ0LCBkYXNzIGtv cGllcnRlIExpbmtzIG1pdCB0YXJnZXQ9Il9zZWxmIiBkYXMgUG9ydGFsIHZlcmxhc3Nlbi4KV3Jp dGUtSG9zdCAiICBMaW5rcyBpbiBBcnRpa2VsbiB3ZXJkZW4gZ2VwcnVlZnQuLi4iICAgICAgICAg IC1Gb3JlZ3JvdW5kQ29sb3IgR3JheQokTGlua0ZpeENvdW50ID0gMApHZXQtQ2hpbGRJdGVtICIk Um9vdFxkYXRhIiAtUmVjdXJzZSAtRmlsdGVyICIqLmpzb24iIC1FcnJvckFjdGlvbiBTaWxlbnRs eUNvbnRpbnVlIHwgRm9yRWFjaC1PYmplY3QgewogICAgdHJ5IHsKICAgICAgICAkSnNvblRleHQg PSBbSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRfLkZ1bGxOYW1lLCBbVGV4dC5VVEY4RW5jb2Rpbmdd OjpuZXcoJGZhbHNlKSkKICAgICAgICAjIE51ciBEYXRlaWVuIG1pdCA8YSBocmVmIGJlYXJiZWl0 ZW4gKFBlcmZvcm1hbmNlOiBKU09OIG9obmUgTGlua3MgdWViZXJzcHJpbmdlbikKICAgICAgICBp ZiAoJEpzb25UZXh0IC1tYXRjaCAnPGFccytbXj5dKmhyZWYnKSB7CiAgICAgICAgICAgICRDaGFu Z2VkID0gJGZhbHNlCiAgICAgICAgICAgICMgdGFyZ2V0PSJfc2VsZiIgZHVyY2ggdGFyZ2V0PSJf YmxhbmsiIGVyc2V0emVuCiAgICAgICAgICAgIGlmICgkSnNvblRleHQgLW1hdGNoICd0YXJnZXRc cyo9XHMqWyInJ11fc2VsZlsiJyddJykgewogICAgICAgICAgICAgICAgJEpzb25UZXh0ID0gW3Jl Z2V4XTo6UmVwbGFjZSgkSnNvblRleHQsICd0YXJnZXRccyo9XHMqWyInJ11fc2VsZlsiJyddJywg J3RhcmdldD0iX2JsYW5rIicpCiAgICAgICAgICAgICAgICAkQ2hhbmdlZCA9ICR0cnVlCiAgICAg ICAgICAgIH0KICAgICAgICAgICAgIyBMaW5rcyBvaG5lIHRhcmdldC1BdHRyaWJ1dDogdGFyZ2V0 PSJfYmxhbmsiIGhpbnp1ZnVlZ2VuCiAgICAgICAgICAgICMgUmVnZXg6IDxhIC4uLiBocmVmPSIu Li4iIG9obmUgdGFyZ2V0PSAuLi4gPiAobnVyIGV4dGVybmUgTGlua3MsIG5pY2h0ICMtQW5rZXIp CiAgICAgICAgICAgICRKc29uVGV4dCA9IFtyZWdleF06OlJlcGxhY2UoJEpzb25UZXh0LCAnKDxh XHMrKD8hW14+XSp0YXJnZXRccyo9KVtePl0qaHJlZlxzKj1ccypbIicnXSkoPyEjKScsIHsKICAg ICAgICAgICAgICAgIHBhcmFtKCRtKQogICAgICAgICAgICAgICAgJHRhZyA9ICRtLlZhbHVlCiAg ICAgICAgICAgICAgICAjIHRhcmdldD0iX2JsYW5rIiB2b3IgaHJlZiBlaW5mdWVnZW4KICAgICAg ICAgICAgICAgICR0YWcgLXJlcGxhY2UgJyg8YVxzKyknLCAnJDF0YXJnZXQ9Il9ibGFuayIgcmVs PSJub29wZW5lciBub3JlZmVycmVyIiAnCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIGlmICgk SnNvblRleHQgLW5lIFtJTy5GaWxlXTo6UmVhZEFsbFRleHQoJF8uRnVsbE5hbWUsIFtUZXh0LlVU RjhFbmNvZGluZ106Om5ldygkZmFsc2UpKSkgewogICAgICAgICAgICAgICAgJENoYW5nZWQgPSAk dHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkQ2hhbmdlZCkgewogICAgICAgICAg ICAgICAgW0lPLkZpbGVdOjpXcml0ZUFsbFRleHQoJF8uRnVsbE5hbWUsICRKc29uVGV4dCwgW1Rl eHQuVVRGOEVuY29kaW5nXTo6bmV3KCRmYWxzZSkpCiAgICAgICAgICAgICAgICAkTGlua0ZpeENv dW50KysKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gY2F0Y2gge30KfQppZiAoJExpbmtG aXhDb3VudCAtZ3QgMCkgewogICAgV3JpdGUtSG9zdCAiICBbT0tdICAgICAgJExpbmtGaXhDb3Vu dCBBcnRpa2VsIGJlcmVpbmlndCAoTGlua3MgLT4gdGFyZ2V0PV9ibGFuaykiIC1Gb3JlZ3JvdW5k Q29sb3IgR3JlZW4KfSBlbHNlIHsKICAgIFdyaXRlLUhvc3QgIiAgW09LXSAgICAgIEFsbGUgTGlu a3Mga29ycmVrdCIgLUZvcmVncm91bmRDb2xvciBHcmVlbgp9CgojIFZlcnNpb25zaW50ZWdyaXRh ZXQ6IFN0ZWxsdCBzaWNoZXIsIGRhc3MgZGllIFZlcnNpb24genVtIFN0YXR1cyBwYXNzdC4KIyBG cmVpZ2VnZWJlbiBtdXNzIG1pbmRlc3RlbnMgdjEuMCBzZWluLCBFbnR3dXJmL1BydWVmdW5nIG1p bmRlc3RlbnMgdjAuMS4KV3JpdGUtSG9zdCAiICBWZXJzaW9uaWVydW5nIHdpcmQgZ2VwcnVlZnQu Li4iICAgICAgICAgICAgICAgIC1Gb3JlZ3JvdW5kQ29sb3IgR3JheQokVmVyc2lvbkZpeENvdW50 ID0gMApHZXQtQ2hpbGRJdGVtICIkUm9vdFxkYXRhIiAtUmVjdXJzZSAtRmlsdGVyICIqLmpzb24i IC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlIHwgRm9yRWFjaC1PYmplY3QgewogICAgIyBn b3Zlcm5hbmNlLmpzb24sIGNvbmZpZy5qc29uLCAudHJhc2guanNvbiBldGMuIHVlYmVyc3ByaW5n ZW4KICAgIGlmICgkXy5OYW1lIC1tYXRjaCAnXlwuJyAtb3IgJF8uTmFtZSAtZXEgJ2NvbmZpZy5q c29uJyAtb3IgJF8uTmFtZSAtZXEgJ2dvdmVybmFuY2UuanNvbicpIHsgcmV0dXJuIH0KICAgIHRy eSB7CiAgICAgICAgJEpzb25UZXh0ID0gW0lPLkZpbGVdOjpSZWFkQWxsVGV4dCgkXy5GdWxsTmFt ZSwgW1RleHQuVVRGOEVuY29kaW5nXTo6bmV3KCRmYWxzZSkpCiAgICAgICAgJERvYyA9ICRKc29u VGV4dCB8IENvbnZlcnRGcm9tLUpzb24KICAgICAgICBpZiAoLW5vdCAkRG9jLnN0YXR1cykgeyBy ZXR1cm4gfQogICAgICAgICROZWVkc1VwZGF0ZSA9ICRmYWxzZQogICAgICAgICRWZXJzaW9uID0g aWYgKCREb2MudmVyc2lvbikgeyAkRG9jLnZlcnNpb24gfSBlbHNlIHsgJycgfQogICAgICAgICRN YWpvciA9IDA7ICRNaW5vciA9IDEKICAgICAgICBpZiAoJFZlcnNpb24gLW1hdGNoICdedj8oXGQr KVwuKFxkKyknKSB7CiAgICAgICAgICAgICRNYWpvciA9IFtpbnRdJE1hdGNoZXNbMV0KICAgICAg ICAgICAgJE1pbm9yID0gW2ludF0kTWF0Y2hlc1syXQogICAgICAgIH0KCiAgICAgICAgaWYgKCRE b2Muc3RhdHVzIC1lcSAnRnJlaWdlZ2ViZW4nIC1hbmQgJE1ham9yIC1sdCAxKSB7CiAgICAgICAg ICAgICREb2MudmVyc2lvbiA9ICd2MS4wJwogICAgICAgICAgICAkTmVlZHNVcGRhdGUgPSAkdHJ1 ZQogICAgICAgIH0gZWxzZWlmICgkRG9jLnN0YXR1cyAtaW4gQCgnRW50d3VyZicsICJQciQoW2No YXJdMHhGQylmdW5nIikgLWFuZCAtbm90ICRWZXJzaW9uKSB7CiAgICAgICAgICAgICREb2MudmVy c2lvbiA9ICd2MC4xJwogICAgICAgICAgICAkTmVlZHNVcGRhdGUgPSAkdHJ1ZQogICAgICAgIH0K CiAgICAgICAgaWYgKCROZWVkc1VwZGF0ZSkgewogICAgICAgICAgICAkTmV3SnNvbiA9ICREb2Mg fCBDb252ZXJ0VG8tSnNvbiAtRGVwdGggMjAKICAgICAgICAgICAgW0lPLkZpbGVdOjpXcml0ZUFs bFRleHQoJF8uRnVsbE5hbWUsICROZXdKc29uLCBbVGV4dC5VVEY4RW5jb2RpbmddOjpuZXcoJGZh bHNlKSkKICAgICAgICAgICAgJFZlcnNpb25GaXhDb3VudCsrCiAgICAgICAgfQogICAgfSBjYXRj aCB7fQp9CmlmICgkVmVyc2lvbkZpeENvdW50IC1ndCAwKSB7CiAgICBXcml0ZS1Ib3N0ICIgIFtP S10gICAgICAkVmVyc2lvbkZpeENvdW50IEFydGlrZWwtVmVyc2lvbmVuIGtvcnJpZ2llcnQiIC1G b3JlZ3JvdW5kQ29sb3IgR3JlZW4KfSBlbHNlIHsKICAgIFdyaXRlLUhvc3QgIiAgW09LXSAgICAg IEFsbGUgVmVyc2lvbmVuIGtvcnJla3QiIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4KfQoKIyBTdGF0 aWMtRmlsZS1DYWNoZSAoVGV4dGRhdGVpZW4gaW0gU3BlaWNoZXIgaGFsdGVuKQokc2NyaXB0OlN0 YXRpY0NhY2hlID0gQHt9CgojIEhUVFAgTGlzdGVuZXIgc3RhcnRlbgokTGlzdGVuZXIgPSBOZXct T2JqZWN0IFN5c3RlbS5OZXQuSHR0cExpc3RlbmVyCiRMaXN0ZW5lci5QcmVmaXhlcy5BZGQoImh0 dHA6Ly9sb2NhbGhvc3Q6JFBvcnQvIikKCnRyeSB7CiAgICAkTGlzdGVuZXIuU3RhcnQoKQp9IGNh dGNoIHsKICAgIFdyaXRlLUhvc3QgIkZFSExFUjogUG9ydCAkUG9ydCBpc3QgYmVyZWl0cyBiZWxl Z3QuIiAtRm9yZWdyb3VuZENvbG9yIFJlZAogICAgV3JpdGUtSG9zdCAiVmVyc3VjaGVuIFNpZSBl aW5lbiBhbmRlcmVuIFBvcnQ6IC5cc2VydmVyLnBzMSAtUG9ydCA4MDgxIiAtRm9yZWdyb3VuZENv bG9yIFllbGxvdwogICAgUmVhZC1Ib3N0ICJFbnRlciBkcnVlY2tlbiB6dW0gQmVlbmRlbiIKICAg IGV4aXQgMQp9CgojIEJyb3dzZXIgb2VmZm5lbiAoQ2hyb21lID4gRWRnZSA+IFN0YW5kYXJkLUJy b3dzZXIpCiRCcm93c2VyVXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6JFBvcnQiCiRCcm93c2VyT3Bl bmVkID0gJGZhbHNlCgojIENocm9tZS1QZmFkZSBwcnVlZmVuCiRDaHJvbWVQYXRocyA9IEAoCiAg ICAiJHtlbnY6UHJvZ3JhbUZpbGVzfVxHb29nbGVcQ2hyb21lXEFwcGxpY2F0aW9uXGNocm9tZS5l eGUiLAogICAgIiR7ZW52OlByb2dyYW1GaWxlcyh4ODYpfVxHb29nbGVcQ2hyb21lXEFwcGxpY2F0 aW9uXGNocm9tZS5leGUiLAogICAgIiRlbnY6TE9DQUxBUFBEQVRBXEdvb2dsZVxDaHJvbWVcQXBw bGljYXRpb25cY2hyb21lLmV4ZSIKKQpmb3JlYWNoICgkY3AgaW4gJENocm9tZVBhdGhzKSB7CiAg ICBpZiAoVGVzdC1QYXRoICRjcCkgewogICAgICAgIFN0YXJ0LVByb2Nlc3MgJGNwICRCcm93c2Vy VXJsCiAgICAgICAgJEJyb3dzZXJPcGVuZWQgPSAkdHJ1ZQogICAgICAgIGJyZWFrCiAgICB9Cn0K CiMgRmFsbGJhY2s6IEVkZ2UKaWYgKC1ub3QgJEJyb3dzZXJPcGVuZWQpIHsKICAgICRFZGdlUGF0 aCA9ICIke2VudjpQcm9ncmFtRmlsZXMoeDg2KX1cTWljcm9zb2Z0XEVkZ2VcQXBwbGljYXRpb25c bXNlZGdlLmV4ZSIKICAgIGlmIChUZXN0LVBhdGggJEVkZ2VQYXRoKSB7CiAgICAgICAgU3RhcnQt UHJvY2VzcyAkRWRnZVBhdGggJEJyb3dzZXJVcmwKICAgICAgICAkQnJvd3Nlck9wZW5lZCA9ICR0 cnVlCiAgICB9Cn0KCiMgRmFsbGJhY2s6IFN0YW5kYXJkLUJyb3dzZXIgdmlhIFN0YXJ0CmlmICgt bm90ICRCcm93c2VyT3BlbmVkKSB7CiAgICB0cnkgeyBTdGFydC1Qcm9jZXNzICRCcm93c2VyVXJs OyAkQnJvd3Nlck9wZW5lZCA9ICR0cnVlIH0gY2F0Y2gge30KfQoKaWYgKC1ub3QgJEJyb3dzZXJP cGVuZWQpIHsKICAgIFdyaXRlLUhvc3QgIiAgQnJvd3NlciBrb25udGUgbmljaHQgZ2VvZWZmbmV0 IHdlcmRlbi4iIC1Gb3JlZ3JvdW5kQ29sb3IgWWVsbG93CiAgICBXcml0ZS1Ib3N0ICIgIEJpdHRl IG1hbnVlbGwgb2VmZm5lbjogJEJyb3dzZXJVcmwiIC1Gb3JlZ3JvdW5kQ29sb3IgWWVsbG93Cn0K CiMgSGVhcnRiZWF0LVRyYWNraW5nOiBTZXJ2ZXIgYmVlbmRldCBzaWNoIHdlbm4gMTAgTWludXRl biBrZWluIEhlYXJ0YmVhdCBrb21tdC4KIyBDbGllbnQgbnV0enQgZWluZW4gV2ViIFdvcmtlciBm dWVyIHp1dmVybGFlc3NpZ2UgSGVhcnRiZWF0cyBhdWNoIGJlaSBCYWNrZ3JvdW5kLVRhYnMuCiMg MTAgTWluIFRpbWVvdXQgPSBtYXhpbWFsZSBSb2J1c3RoZWl0IGdlZ2VuIGplZGUgQXJ0IHZvbiBC cm93c2VyLVRocm90dGxpbmcuCiRzY3JpcHQ6TGFzdEhlYXJ0YmVhdCA9IEdldC1EYXRlCiRIZWFy dGJlYXRUaW1lb3V0U2VjID0gMTgwMCAgIyAzMCBNaW4gLSBUYWItV2VjaHNlbCBwYXVzaWVydCBI ZWFydGJlYXQsIE5ldXN0YXJ0IHBydWVmdCBQb3J0CiRzY3JpcHQ6U2h1dGRvd25QZW5kaW5nID0g JG51bGwgICMgR25hZGVuZnJpc3QgZnVlciBTaHV0ZG93biAoRjUvUmVmcmVzaCB2cy4gVGFiLUNs b3NlKQokc2NyaXB0OlNodXRkb3duR3JhY2VTZWMgPSA1ICAgICAjIFNla3VuZGVuIFdhcnRlemVp dCBiZXZvciBTZXJ2ZXIgdGF0c2FlY2hsaWNoIGJlZW5kZXQgd2lyZAoKIyBSZXF1ZXN0LUxvb3Ag KG5pY2h0LWJsb2NraWVyZW5kIGZ1ZXIgSGVhcnRiZWF0LVRpbWVvdXQtUHJ1ZWZ1bmcpCnRyeSB7 CiAgICB3aGlsZSAoJExpc3RlbmVyLklzTGlzdGVuaW5nKSB7CiAgICAgICAgIyBBc3luY2hyb25l biBSZXF1ZXN0IG1pdCBUaW1lb3V0IHdhcnRlbgogICAgICAgICRBc3luY1Jlc3VsdCA9ICRMaXN0 ZW5lci5CZWdpbkdldENvbnRleHQoJG51bGwsICRudWxsKQogICAgICAgIHdoaWxlICgtbm90ICRB c3luY1Jlc3VsdC5Bc3luY1dhaXRIYW5kbGUuV2FpdE9uZSgyMDAwKSkgewogICAgICAgICAgICAj IFBydWVmZW4gb2IgZWluIFNodXRkb3duIGFuc3RlaHQgKGJlZm9yZXVubG9hZCBnZXNlbmRldCkK ICAgICAgICAgICAgIyBHbmFkZW5mcmlzdDogRmFsbHMgU2VpdGUgbnVyIG5ldSBnZWxhZGVuIHdp cmQgKEY1KSwga29tbXQgaW5uZXJoYWxiCiAgICAgICAgICAgICMgdm9uIDUgU2VrdW5kZW4gZWlu IG5ldWVyIEhlYXJ0YmVhdCB1bmQgYnJpY2h0IGRlbiBTaHV0ZG93biBhYi4KICAgICAgICAgICAg aWYgKCRzY3JpcHQ6U2h1dGRvd25QZW5kaW5nKSB7CiAgICAgICAgICAgICAgICAkR3JhY2VFbGFw c2VkID0gKChHZXQtRGF0ZSkgLSAkc2NyaXB0OlNodXRkb3duUGVuZGluZykuVG90YWxTZWNvbmRz CiAgICAgICAgICAgICAgICBpZiAoJEdyYWNlRWxhcHNlZCAtZ3QgJHNjcmlwdDpTaHV0ZG93bkdy YWNlU2VjKSB7CiAgICAgICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAiIgogICAgICAgICAgICAg ICAgICAgIFdyaXRlLUhvc3QgIiAgU2h1dGRvd24tR25hZGVuZnJpc3QgYWJnZWxhdWZlbiAoJHtH cmFjZUVsYXBzZWR9cykgLSBrZWluIFJlbG9hZCBlcmthbm50LCBTZXJ2ZXIgd2lyZCBiZWVuZGV0 Li4uIiAtRm9yZWdyb3VuZENvbG9yIFllbGxvdwogICAgICAgICAgICAgICAgICAgICRMaXN0ZW5l ci5TdG9wKCkKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICB9CiAgICAgICAgICAgICMgQWxsZSAyIFNla3VuZGVuIHBydWVmZW4gb2IgSGVhcnRi ZWF0LVRpbWVvdXQgZXJyZWljaHQKICAgICAgICAgICAgJFNlY1NpbmNlSGVhcnRiZWF0ID0gKChH ZXQtRGF0ZSkgLSAkc2NyaXB0Okxhc3RIZWFydGJlYXQpLlRvdGFsU2Vjb25kcwogICAgICAgICAg ICBpZiAoJFNlY1NpbmNlSGVhcnRiZWF0IC1ndCAkSGVhcnRiZWF0VGltZW91dFNlYykgewogICAg ICAgICAgICAgICAgV3JpdGUtSG9zdCAiIgogICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAiICBL ZWluIEhlYXJ0YmVhdCBzZWl0ICQoW01hdGhdOjpSb3VuZCgkU2VjU2luY2VIZWFydGJlYXQpKXMg LSBUYWIgd3VyZGUgZ2VzY2hsb3NzZW4sIFNlcnZlciB3aXJkIGJlZW5kZXQuLi4iIC1Gb3JlZ3Jv dW5kQ29sb3IgWWVsbG93CiAgICAgICAgICAgICAgICAkTGlzdGVuZXIuU3RvcCgpCiAgICAgICAg ICAgICAgICBicmVhawogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgtbm90ICRM aXN0ZW5lci5Jc0xpc3RlbmluZykgeyBicmVhayB9CiAgICAgICAgJENvbnRleHQgPSAkTGlzdGVu ZXIuRW5kR2V0Q29udGV4dCgkQXN5bmNSZXN1bHQpCiAgICAgICAgJFJlcXVlc3QgPSAkQ29udGV4 dC5SZXF1ZXN0CiAgICAgICAgJFJlc3BvbnNlID0gJENvbnRleHQuUmVzcG9uc2UKICAgICAgICAk TWV0aG9kID0gJFJlcXVlc3QuSHR0cE1ldGhvZAogICAgICAgICRVcmxQYXRoID0gJFJlcXVlc3Qu VXJsLkxvY2FsUGF0aAoKICAgICAgICAjIFBlbmRpbmcgU2h1dGRvd24gYmVpIGplZGVtIGVpbmdl aGVuZGVuIFJlcXVlc3QgYWJicmVjaGVuCiAgICAgICAgIyAoU2VpdGUgd3VyZGUgbmV1IGdlbGFk ZW4gdW5kIGZyYWd0IERhdGVpZW4vQVBJIGFuKQogICAgICAgIGlmICgkc2NyaXB0OlNodXRkb3du UGVuZGluZyAtYW5kICRVcmxQYXRoIC1uZSAnL2FwaS9zaHV0ZG93bicpIHsKICAgICAgICAgICAg V3JpdGUtSG9zdCAiICBIQiAgIFNodXRkb3duIGFiZ2Vicm9jaGVuIC0gbmV1ZSBBbmZyYWdlIGVy a2FubnQgKCRNZXRob2QgJFVybFBhdGgpIiAtRm9yZWdyb3VuZENvbG9yIEdyZWVuCiAgICAgICAg ICAgICRzY3JpcHQ6U2h1dGRvd25QZW5kaW5nID0gJG51bGwKICAgICAgICB9CgogICAgICAgICMg UmVxdWVzdC1Mb2dnaW5nIChudXIgQVBJLUF1ZnJ1ZmUsIG5pY2h0IEhlYXJ0YmVhdC9zdGF0aXNj aGUgRGF0ZWllbikKICAgICAgICBpZiAoJFVybFBhdGguU3RhcnRzV2l0aCgnL2FwaS8nKSAtYW5k ICRVcmxQYXRoIC1uZSAnL2FwaS9oZWFydGJlYXQnKSB7CiAgICAgICAgICAgIFdyaXRlLUhvc3Qg IiAgLS0+ICAkTWV0aG9kICRVcmxQYXRoIiAtRm9yZWdyb3VuZENvbG9yIERhcmtHcmF5CiAgICAg ICAgfQoKICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAjIENPUlMgUHJlZmxpZ2h0CiAgICAgICAgIyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CgogICAgICAgIGlmICgkTWV0aG9kIC1lcSAnT1BUSU9OUycpIHsKICAgICAgICAgICAgJFJl c3BvbnNlLlN0YXR1c0NvZGUgPSAyMDQKICAgICAgICAgICAgQWRkLVNlY3VyaXR5SGVhZGVycyAk UmVzcG9uc2UKICAgICAgICAgICAgJFJlc3BvbnNlLkhlYWRlcnMuQWRkKCJBY2Nlc3MtQ29udHJv bC1BbGxvdy1NZXRob2RzIiwgIkdFVCwgUE9TVCwgT1BUSU9OUyIpCiAgICAgICAgICAgICRSZXNw b25zZS5IZWFkZXJzLkFkZCgiQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyIsICJDb250ZW50 LVR5cGUiKQogICAgICAgICAgICAkUmVzcG9uc2UuQ2xvc2UoKQogICAgICAgICAgICBjb250aW51 ZQogICAgICAgIH0KCiAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgIyBBUEktRW5kcHVua3RlCiAgICAg ICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CgogICAgICAgICMgLS0tIFBPU1QgL2FwaS9oZWFydGJlYXQgLS0tCiAgICAgICAg IyBCcm93c2VyIHNlbmRldCBhbGxlIDUgU2VrdW5kZW4gZWluZW4gSGVhcnRiZWF0ICh2aWEgV2Vi IFdvcmtlciwgbmllIGdlZHJvc3NlbHQpCiAgICAgICAgIyBTZXJ2ZXIgZmFlaHJ0IGF1dG9tYXRp c2NoIGhlcnVudGVyIHdlbm4gMTAgTWludXRlbiBrZWluIEhlYXJ0YmVhdCBrb21tdAogICAgICAg ICMgQW50d29ydCBlbnRoYWVsdCBpZGxlLVNla3VuZGVuIHVuZCBXYXJudW5nIDYwcyB2b3IgU2h1 dGRvd24KICAgICAgICBpZiAoJFVybFBhdGggLWVxICcvYXBpL2hlYXJ0YmVhdCcgLWFuZCAkTWV0 aG9kIC1lcSAnUE9TVCcpIHsKICAgICAgICAgICAgIyBQZW5kaW5nIFNodXRkb3duIGFiYnJlY2hl biAoU2VpdGUgd3VyZGUgbnVyIG5ldSBnZWxhZGVuLCBuaWNodCBnZXNjaGxvc3NlbikKICAgICAg ICAgICAgaWYgKCRzY3JpcHQ6U2h1dGRvd25QZW5kaW5nKSB7CiAgICAgICAgICAgICAgICBXcml0 ZS1Ib3N0ICIgIEhCICAgU2h1dGRvd24gYWJnZWJyb2NoZW4gLSBTZWl0ZSB3dXJkZSBuZXUgZ2Vs YWRlbiAoRjUvUmVmcmVzaCkiIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4KICAgICAgICAgICAgICAg ICRzY3JpcHQ6U2h1dGRvd25QZW5kaW5nID0gJG51bGwKICAgICAgICAgICAgfQogICAgICAgICAg ICAkSWRsZVNlYyA9IFtNYXRoXTo6Um91bmQoKChHZXQtRGF0ZSkgLSAkc2NyaXB0Okxhc3RIZWFy dGJlYXQpLlRvdGFsU2Vjb25kcykKICAgICAgICAgICAgJFdhcm5pbmdUaHJlc2hvbGQgPSAkSGVh cnRiZWF0VGltZW91dFNlYyAtIDYwICAjIFdhcm51bmcgNjBzIHZvciBUaW1lb3V0CiAgICAgICAg ICAgICRSZW1haW5pbmcgPSBbTWF0aF06Ok1heCgwLCAkSGVhcnRiZWF0VGltZW91dFNlYyAtICRJ ZGxlU2VjKQogICAgICAgICAgICAkc2NyaXB0Okxhc3RIZWFydGJlYXQgPSBHZXQtRGF0ZQogICAg ICAgICAgICBpZiAoJElkbGVTZWMgLWd0ICRXYXJuaW5nVGhyZXNob2xkKSB7CiAgICAgICAgICAg ICAgICBTZW5kLUpzb24gJFJlc3BvbnNlIEB7IG9rID0gJHRydWU7IGlkbGUgPSAkSWRsZVNlYzsg d2FybmluZyA9ICR0cnVlOyByZW1haW5pbmdTZWNvbmRzID0gJFJlbWFpbmluZyB9CiAgICAgICAg ICAgICAgICBXcml0ZS1Ib3N0ICIgIEhCICAgSGVhcnRiZWF0IG5hY2ggJHtJZGxlU2VjfXMgUGF1 c2UgLSBXYXJudW5nIGdlc2VuZGV0IChub2NoICR7UmVtYWluaW5nfXMpIiAtRm9yZWdyb3VuZENv bG9yIFllbGxvdwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgU2VuZC1Kc29u ICRSZXNwb25zZSBAeyBvayA9ICR0cnVlOyBpZGxlID0gJElkbGVTZWM7IHdhcm5pbmcgPSAkZmFs c2U7IHJlbWFpbmluZ1NlY29uZHMgPSAkUmVtYWluaW5nIH0KICAgICAgICAgICAgfQogICAgICAg ICAgICAkUmVzcG9uc2UuQ2xvc2UoKQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIH0KCiAg ICAgICAgIyAtLS0gR0VUIC9hcGkvZW52aXJvbiAtLS0KICAgICAgICBpZiAoJFVybFBhdGggLWVx ICcvYXBpL2Vudmlyb24nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsKICAgICAgICAgICAgU2Vu ZC1Kc29uICRSZXNwb25zZSBAewogICAgICAgICAgICAgICAgdXNlcm5hbWUgICAgID0gJGVudjpV U0VSTkFNRQogICAgICAgICAgICAgICAgY29tcHV0ZXJuYW1lID0gJGVudjpDT01QVVRFUk5BTUUK ICAgICAgICAgICAgICAgIHVzZXJkb21haW4gICA9ICRlbnY6VVNFUkRPTUFJTgogICAgICAgICAg ICB9CiAgICAgICAgICAgICRSZXNwb25zZS5DbG9zZSgpCiAgICAgICAgICAgIFdyaXRlLUhvc3Qg IiAgQVBJICAvYXBpL2Vudmlyb24gIChVc2VyOiAkZW52OlVTRVJOQU1FKSIgLUZvcmVncm91bmRD b2xvciBDeWFuCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgfQoKICAgICAgICAjIC0tLSBH RVQgL2FwaS9zY2FuIC0tLQogICAgICAgICMgU2Nhbm50IGFsbGUgS2F0ZWdvcmllLVVudGVyb3Jk bmVyIHVuZCBsaWVmZXJ0IERva3VtZW50LURhdGVpZW4KICAgICAgICBpZiAoJFVybFBhdGggLWVx ICcvYXBpL3NjYW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsKICAgICAgICAgICAgJERhdGFE aXIgPSBKb2luLVBhdGggJFJvb3QgImRhdGEiCiAgICAgICAgICAgICRSZXN1bHQgPSBbU3lzdGVt LkNvbGxlY3Rpb25zLkFycmF5TGlzdF06Om5ldygpCgogICAgICAgICAgICBpZiAoVGVzdC1QYXRo ICREYXRhRGlyKSB7CiAgICAgICAgICAgICAgICBHZXQtQ2hpbGRJdGVtICREYXRhRGlyIC1EaXJl Y3RvcnkgfCBGb3JFYWNoLU9iamVjdCB7CiAgICAgICAgICAgICAgICAgICAgJEthdE5hbWUgPSAk Xy5OYW1lCiAgICAgICAgICAgICAgICAgICAgR2V0LUNoaWxkSXRlbSAkXy5GdWxsTmFtZSAtRmls dGVyICIqLmpzb24iIHwgRm9yRWFjaC1PYmplY3QgewogICAgICAgICAgICAgICAgICAgICAgICBb dm9pZF0kUmVzdWx0LkFkZChAewogICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0ZWdvcmll ID0gJEthdE5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lICA9ICRfLk5h bWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggICAgICA9ICJkYXRhLyRLYXROYW1l LyQoJF8uTmFtZSkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplICAgICAgPSAkXy5M ZW5ndGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkICA9ICRfLkxhc3RXcml0 ZVRpbWVVdGMuVG9TdHJpbmcoIm8iKQogICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAg ICAgU2VuZC1Kc29uICRSZXNwb25zZSBAeyBmaWxlcyA9IEAoJFJlc3VsdCkgfQogICAgICAgICAg ICAkUmVzcG9uc2UuQ2xvc2UoKQogICAgICAgICAgICBXcml0ZS1Ib3N0ICIgIEFQSSAgL2FwaS9z Y2FuICAoJCgkUmVzdWx0LkNvdW50KSBEb2t1bWVudGUpIiAtRm9yZWdyb3VuZENvbG9yIEN5YW4K ICAgICAgICAgICAgY29udGludWUKICAgICAgICB9CgogICAgICAgICMgLS0tIEdFVCAvYXBpL2dv dmVybmFuY2UgLS0tCiAgICAgICAgaWYgKCRVcmxQYXRoIC1lcSAnL2FwaS9nb3Zlcm5hbmNlJyAt YW5kICRNZXRob2QgLWVxICdHRVQnKSB7CiAgICAgICAgICAgICRHb3YgPSBHZXQtR292ZXJuYW5j ZQogICAgICAgICAgICBpZiAoJEdvdikgewogICAgICAgICAgICAgICAgJElzU1UgPSBUZXN0LVN1 cGVyVXNlciAkR292CiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlc3BvbnNlIEB7CiAgICAg ICAgICAgICAgICAgICAgZ292ZXJuYW5jZSA9ICRHb3YKICAgICAgICAgICAgICAgICAgICBjdXJy ZW50VXNlciA9ICRlbnY6VVNFUk5BTUUKICAgICAgICAgICAgICAgICAgICBjdXJyZW50RG9tYWlu ID0gJGVudjpVU0VSRE9NQUlOCiAgICAgICAgICAgICAgICAgICAgaXNTdXBlclVzZXIgPSAkSXNT VQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg U2VuZC1Kc29uICRSZXNwb25zZSBAewogICAgICAgICAgICAgICAgICAgIGdvdmVybmFuY2UgPSAk bnVsbAogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRVc2VyID0gJGVudjpVU0VSTkFNRQogICAg ICAgICAgICAgICAgICAgIGN1cnJlbnREb21haW4gPSAkZW52OlVTRVJET01BSU4KICAgICAgICAg ICAgICAgICAgICBpc1N1cGVyVXNlciA9ICR0cnVlCiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIH0KICAgICAgICAgICAgJFJlc3BvbnNlLkNsb3NlKCkKICAgICAgICAgICAgV3JpdGUtSG9z dCAiICBBUEkgIC9hcGkvZ292ZXJuYW5jZSAgKFVzZXI6ICRlbnY6VVNFUk5BTUUsIFNVOiAkKFRl c3QtU3VwZXJVc2VyIChHZXQtR292ZXJuYW5jZSkpKSIgLUZvcmVncm91bmRDb2xvciBDeWFuCiAg ICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgfQoKICAgICAgICAjIC0tLSBQT1NUIC9hcGkvZ292 ZXJuYW5jZSAtLS0KICAgICAgICAjIE51ciBTdXBlclVzZXIgZGFyZiBnb3Zlcm5hbmNlLmpzb24g YWVuZGVybgogICAgICAgIGlmICgkVXJsUGF0aCAtZXEgJy9hcGkvZ292ZXJuYW5jZScgLWFuZCAk TWV0aG9kIC1lcSAnUE9TVCcpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICRH b3YgPSBHZXQtR292ZXJuYW5jZQogICAgICAgICAgICAgICAgJElzU1UgPSBUZXN0LVN1cGVyVXNl ciAkR292CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkSXNTVSkgewogICAgICAgICAgICAgICAg ICAgIFNlbmQtSnNvbiAkUmVzcG9uc2UgQHsgZXJyb3IgPSAiTnVyIFN1cGVyVXNlciBkYXJmIEdv dmVybmFuY2UtRGF0ZW4gYWVuZGVybiAoVXNlcjogJGVudjpVU0VSTkFNRSkiIH0gNDAzCiAgICAg ICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAiICBFUlIgIFBPU1QgL2FwaS9nb3Zlcm5hbmNlICBB QkdFTEVITlQgKFVzZXI6ICRlbnY6VVNFUk5BTUUpIiAtRm9yZWdyb3VuZENvbG9yIFJlZAogICAg ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9k eSAkUmVxdWVzdAogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRCb2R5IC1vciAkQm9keS5M ZW5ndGggLWx0IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXNwb25z ZSBAeyBlcnJvciA9ICJMZWVyZXIgUmVxdWVzdC1Cb2R5IiB9IDQwMAogICAgICAgICAgICAgICAg ICAgICAgICBXcml0ZS1Ib3N0ICIgIEVSUiAgUE9TVCAvYXBpL2dvdmVybmFuY2UgIExlZXJlciBC b2R5IiAtRm9yZWdyb3VuZENvbG9yIFJlZAogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg ICAgICAgICAgICAgICAgICAgICAgICROZXdHb3YgPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24K ICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZS1Hb3Zlcm5hbmNlICROZXdHb3YKICAgICAgICAg ICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXNwb25zZSBAeyBvayA9ICR0cnVlIH0KICAgICAg ICAgICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAiICBBUEkgIFBPU1QgL2FwaS9nb3Zlcm5hbmNl ICBha3R1YWxpc2llcnQgdm9uICRlbnY6VVNFUk5BTUUgKCQoJEJvZHkuTGVuZ3RoKSBCeXRlcyki IC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAi ICBFUlIgIFBPU1QgL2FwaS9nb3Zlcm5hbmNlICBFWENFUFRJT046ICQoJF8uRXhjZXB0aW9uLk1l c3NhZ2UpIiAtRm9yZWdyb3VuZENvbG9yIFJlZAogICAgICAgICAgICAgICAgdHJ5IHsgU2VuZC1K c29uICRSZXNwb25zZSBAeyBlcnJvciA9ICRfLkV4Y2VwdGlvbi5NZXNzYWdlIH0gNTAwIH0gY2F0 Y2gge30KICAgICAgICAgICAgfQogICAgICAgICAgICB0cnkgeyAkUmVzcG9uc2UuQ2xvc2UoKSB9 IGNhdGNoIHt9CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgfQoKICAgICAgICAjIC0tLSBQ T1NUIC9hcGkvbG9jayAtLS0KICAgICAgICAjIFNldHp0IGVpbmVuIExvY2sgYXVmIGVpbiBEb2t1 bWVudCAoUGVzc2ltaXN0aWMgTG9ja2luZykKICAgICAgICAjIEJvZHk6IHsgImRvY0lkIjogIkQw MDEiIH0KICAgICAgICAjIExvY2stRGF0ZWllbjogZGF0YS8ubG9ja3MvRDAwMS5sb2NrIChKU09O IG1pdCB1c2VybmFtZSArIHRpbWVzdGFtcCkKICAgICAgICAjIExvY2tzIHZlcmZhbGxlbiBhdXRv bWF0aXNjaCBuYWNoIDEwIE1pbnV0ZW4gKFN0YWxlLUxvY2stUHJvdGVjdGlvbikKICAgICAgICBp ZiAoJFVybFBhdGggLWVxICcvYXBpL2xvY2snIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7CiAg ICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxdWVz dAogICAgICAgICAgICAgICAgJFBhcnNlZCA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbgogICAg ICAgICAgICAgICAgJERvY0lkID0gJFBhcnNlZC5kb2NJZAogICAgICAgICAgICAgICAgJExvY2tE aXIgPSBKb2luLVBhdGggJFJvb3QgImRhdGEvLmxvY2tzIgogICAgICAgICAgICAgICAgaWYgKC1u b3QgKFRlc3QtUGF0aCAkTG9ja0RpcikpIHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAt UGF0aCAkTG9ja0RpciAtRm9yY2UgfCBPdXQtTnVsbCB9CiAgICAgICAgICAgICAgICAkTG9ja0Zp bGUgPSBKb2luLVBhdGggJExvY2tEaXIgIiREb2NJZC5sb2NrIgoKICAgICAgICAgICAgICAgICMg UHJ1ZWZlbiBvYiBiZXJlaXRzIGdlbG9ja3QgKHVuZCBMb2NrIG5pY2h0IGFiZ2VsYXVmZW4pCiAg ICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoICRMb2NrRmlsZSkgewogICAgICAgICAgICAgICAg ICAgICRFeGlzdGluZyA9IEdldC1Db250ZW50ICRMb2NrRmlsZSAtUmF3IC1FbmNvZGluZyBVVEY4 IHwgQ29udmVydEZyb20tSnNvbgogICAgICAgICAgICAgICAgICAgICRMb2NrVGltZSA9IFtEYXRl VGltZV06OlBhcnNlKCRFeGlzdGluZy5sb2NrZWRBdCkKICAgICAgICAgICAgICAgICAgICAkTWlu dXRlc1NpbmNlID0gKChHZXQtRGF0ZSkgLSAkTG9ja1RpbWUpLlRvdGFsTWludXRlcwoKICAgICAg ICAgICAgICAgICAgICBpZiAoJE1pbnV0ZXNTaW5jZSAtbHQgMTAgLWFuZCAkRXhpc3RpbmcudXNl cm5hbWUgLW5lICRlbnY6VVNFUk5BTUUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIyBMb2Nr IGlzdCBha3RpdiB1bmQgdm9uIGVpbmVtIGFuZGVyZW4gVXNlcgogICAgICAgICAgICAgICAgICAg ICAgICBTZW5kLUpzb24gJFJlc3BvbnNlIEB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBs b2NrZWQgPSAkdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSAkRXhpc3Rpbmcu dXNlcm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmNlID0gJEV4aXN0aW5nLmxv Y2tlZEF0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gW01hdGhdOjpSb3Vu ZCgkTWludXRlc1NpbmNlLCAxKQogICAgICAgICAgICAgICAgICAgICAgICB9IDQwOQogICAgICAg ICAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ2xvc2UoKQogICAgICAgICAgICAgICAgICAgICAg ICBXcml0ZS1Ib3N0ICIgIEFQSSAgUE9TVCAvYXBpL2xvY2sgICREb2NJZCBCRUxFR1Qgdm9uICQo JEV4aXN0aW5nLnVzZXJuYW1lKSIgLUZvcmVncm91bmRDb2xvciBZZWxsb3cKICAgICAgICAgICAg ICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgIyBMb2NrIGFiZ2VsYXVmZW4gb2RlciBlaWdlbmVyIExvY2sgLT4gdWViZXJzY2hyZWli ZW4KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIExvY2sgc2V0emVuCiAgICAg ICAgICAgICAgICAkTG9ja0RhdGEgPSBAewogICAgICAgICAgICAgICAgICAgIGRvY0lkID0gJERv Y0lkCiAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWUgPSAkZW52OlVTRVJOQU1FCiAgICAgICAg ICAgICAgICAgICAgbG9ja2VkQXQgPSAoR2V0LURhdGUpLlRvU3RyaW5nKCJvIikKICAgICAgICAg ICAgICAgIH0gfCBDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MKICAgICAgICAgICAgICAgIFVucHJv dGVjdC1GaWxlICRMb2NrRmlsZQogICAgICAgICAgICAgICAgW0lPLkZpbGVdOjpXcml0ZUFsbFRl eHQoJExvY2tGaWxlLCAkTG9ja0RhdGEsIFtUZXh0LlVURjhFbmNvZGluZ106Om5ldygkZmFsc2Up KQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXNwb25zZSBAeyBvayA9ICR0cnVlOyBkb2NJ ZCA9ICREb2NJZCB9CiAgICAgICAgICAgICAgICBXcml0ZS1Ib3N0ICIgIEFQSSAgUE9TVCAvYXBp L2xvY2sgICREb2NJZCBnZWxvY2t0IHZvbiAkZW52OlVTRVJOQU1FIiAtRm9yZWdyb3VuZENvbG9y IEN5YW4KICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgICAgICBXcml0ZS1Ib3N0ICIg IEVSUiAgUE9TVCAvYXBpL2xvY2sgICQoJF8uRXhjZXB0aW9uLk1lc3NhZ2UpIiAtRm9yZWdyb3Vu ZENvbG9yIFJlZAogICAgICAgICAgICAgICAgdHJ5IHsgU2VuZC1Kc29uICRSZXNwb25zZSBAeyBl cnJvciA9ICRfLkV4Y2VwdGlvbi5NZXNzYWdlIH0gNTAwIH0gY2F0Y2gge30KICAgICAgICAgICAg fQogICAgICAgICAgICB0cnkgeyAkUmVzcG9uc2UuQ2xvc2UoKSB9IGNhdGNoIHt9CiAgICAgICAg ICAgIGNvbnRpbnVlCiAgICAgICAgfQoKICAgICAgICAjIC0tLSBQT1NUIC9hcGkvdW5sb2NrIC0t LQogICAgICAgICMgR2lidCBlaW5lbiBMb2NrIGZyZWkuIEJvZHk6IHsgImRvY0lkIjogIkQwMDEi IH0KICAgICAgICAjIE51ciBkZXIgTG9jay1JbmhhYmVyIG9kZXIgU3VwZXJVc2VyIGthbm4gZnJl aWdlYmVuCiAgICAgICAgaWYgKCRVcmxQYXRoIC1lcSAnL2FwaS91bmxvY2snIC1hbmQgJE1ldGhv ZCAtZXEgJ1BPU1QnKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAkQm9keSA9 IFJlYWQtQm9keSAkUmVxdWVzdAogICAgICAgICAgICAgICAgJFBhcnNlZCA9ICRCb2R5IHwgQ29u dmVydEZyb20tSnNvbgogICAgICAgICAgICAgICAgJERvY0lkID0gJFBhcnNlZC5kb2NJZAogICAg ICAgICAgICAgICAgJExvY2tGaWxlID0gSm9pbi1QYXRoICRSb290ICJkYXRhLy5sb2Nrcy8kRG9j SWQubG9jayIKCiAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoICRMb2NrRmlsZSkgewogICAg ICAgICAgICAgICAgICAgICRFeGlzdGluZyA9IEdldC1Db250ZW50ICRMb2NrRmlsZSAtUmF3IC1F bmNvZGluZyBVVEY4IHwgQ29udmVydEZyb20tSnNvbgogICAgICAgICAgICAgICAgICAgICRHb3Yg PSBHZXQtR292ZXJuYW5jZQogICAgICAgICAgICAgICAgICAgICRJc1NVID0gVGVzdC1TdXBlclVz ZXIgJEdvdgoKICAgICAgICAgICAgICAgICAgICBpZiAoJEV4aXN0aW5nLnVzZXJuYW1lIC1lcSAk ZW52OlVTRVJOQU1FIC1vciAkSXNTVSkgewogICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUt SXRlbSAkTG9ja0ZpbGUgLUZvcmNlCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAk UmVzcG9uc2UgQHsgb2sgPSAkdHJ1ZTsgZG9jSWQgPSAkRG9jSWQgfQogICAgICAgICAgICAgICAg ICAgICAgICBXcml0ZS1Ib3N0ICIgIEFQSSAgUE9TVCAvYXBpL3VubG9jayAgJERvY0lkIGZyZWln ZWdlYmVuIiAtRm9yZWdyb3VuZENvbG9yIEdyZWVuCiAgICAgICAgICAgICAgICAgICAgfSBlbHNl IHsKICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXNwb25zZSBAeyBlcnJvciA9 ICJMb2NrIGdlaG9lcnQgJCgkRXhpc3RpbmcudXNlcm5hbWUpIiB9IDQwMwogICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgU2Vu ZC1Kc29uICRSZXNwb25zZSBAeyBvayA9ICR0cnVlOyBkb2NJZCA9ICREb2NJZCB9CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICAgICAgV3JpdGUtSG9z dCAiICBFUlIgIFBPU1QgL2FwaS91bmxvY2sgICQoJF8uRXhjZXB0aW9uLk1lc3NhZ2UpIiAtRm9y ZWdyb3VuZENvbG9yIFJlZAogICAgICAgICAgICAgICAgdHJ5IHsgU2VuZC1Kc29uICRSZXNwb25z ZSBAeyBlcnJvciA9ICRfLkV4Y2VwdGlvbi5NZXNzYWdlIH0gNTAwIH0gY2F0Y2gge30KICAgICAg ICAgICAgfQogICAgICAgICAgICB0cnkgeyAkUmVzcG9uc2UuQ2xvc2UoKSB9IGNhdGNoIHt9CiAg ICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgfQoKICAgICAgICAjIC0tLSBHRVQgL2FwaS9sb2Nr cyAtLS0KICAgICAgICAjIExpc3RldCBhbGxlIGFrdGl2ZW4gTG9ja3MgYXVmIChmdWVyIFVJLUFu emVpZ2UpCiAgICAgICAgaWYgKCRVcmxQYXRoIC1lcSAnL2FwaS9sb2NrcycgLWFuZCAkTWV0aG9k IC1lcSAnR0VUJykgewogICAgICAgICAgICAkTG9ja0RpciA9IEpvaW4tUGF0aCAkUm9vdCAiZGF0 YS8ubG9ja3MiCiAgICAgICAgICAgICRMb2NrcyA9IFtTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlM aXN0XTo6bmV3KCkKICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAkTG9ja0RpcikgewogICAgICAg ICAgICAgICAgR2V0LUNoaWxkSXRlbSAkTG9ja0RpciAtRmlsdGVyICIqLmxvY2siIHwgRm9yRWFj aC1PYmplY3QgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICRMb2NrID0gR2V0LUNvbnRlbnQgJF8uRnVsbE5hbWUgLVJhdyAtRW5jb2RpbmcgVVRGOCB8 IENvbnZlcnRGcm9tLUpzb24KICAgICAgICAgICAgICAgICAgICAgICAgJExvY2tUaW1lID0gW0Rh dGVUaW1lXTo6UGFyc2UoJExvY2subG9ja2VkQXQpCiAgICAgICAgICAgICAgICAgICAgICAgICRN aW51dGVzU2luY2UgPSAoKEdldC1EYXRlKSAtICRMb2NrVGltZSkuVG90YWxNaW51dGVzCiAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgkTWludXRlc1NpbmNlIC1sdCAxMCkgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgW3ZvaWRdJExvY2tzLkFkZChAewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRvY0lkID0gJExvY2suZG9jSWQKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1c2VybmFtZSA9ICRMb2NrLnVzZXJuYW1lCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbG9ja2VkQXQgPSAkTG9jay5sb2NrZWRBdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1pbnV0ZXMgPSBbTWF0aF06OlJvdW5kKCRNaW51dGVzU2luY2UsIDEpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBYmdlbGF1ZmVuZW4gTG9jayBhdWZyYWV1 bWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUtSXRlbSAkXy5GdWxsTmFtZSAt Rm9yY2UKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gY2F0 Y2gge30KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBTZW5kLUpz b24gJFJlc3BvbnNlIEB7IGxvY2tzID0gQCgkTG9ja3MpIH0KICAgICAgICAgICAgJFJlc3BvbnNl LkNsb3NlKCkKICAgICAgICAgICAgV3JpdGUtSG9zdCAiICBBUEkgIC9hcGkvbG9ja3MgICgkKCRM b2Nrcy5Db3VudCkgYWt0aXZlIExvY2tzKSIgLUZvcmVncm91bmRDb2xvciBDeWFuCiAgICAgICAg ICAgIGNvbnRpbnVlCiAgICAgICAgfQoKICAgICAgICAjIC0tLSBQT1NUIC9hcGkvd3JpdGUgLS0t CiAgICAgICAgIyBCb2R5OiB7ICJwYXRoIjogImRhdGEvVmVya2Voci9EMDAxX3h4eC5qc29uIiwg ImRhdGEiOiB7IC4uLiB9IH0KICAgICAgICBpZiAoJFVybFBhdGggLWVxICcvYXBpL3dyaXRlJyAt YW5kICRNZXRob2QgLWVxICdQT1NUJykgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAg ICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QKICAgICAgICAgICAgICAgICRQYXJzZWQgPSAk Qm9keSB8IENvbnZlcnRGcm9tLUpzb24KICAgICAgICAgICAgICAgICRSZWxQYXRoID0gJFBhcnNl ZC5wYXRoCiAgICAgICAgICAgICAgICAkU2FmZVBhdGggPSBSZXNvbHZlLVNhZmVQYXRoICRSZWxQ YXRoCgogICAgICAgICAgICAgICAgaWYgKC1ub3QgJFNhZmVQYXRoKSB7CiAgICAgICAgICAgICAg ICAgICAgU2VuZC1Kc29uICRSZXNwb25zZSBAeyBlcnJvciA9ICJVbmd1ZWx0aWdlciBQZmFkIiB9 IDQwMAogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAjIFNjaHJl aWJzY2h1dHo6IGdvdmVybmFuY2UuanNvbiBpc3QgdWViZXIgL2FwaS93cml0ZSBuaWNodCBiZXNj aHJlaWJiYXIuCiAgICAgICAgICAgICAgICAgICAgaWYgKCRSZWxQYXRoIC1lcSAnZGF0YS9nb3Zl cm5hbmNlLmpzb24nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzcG9u c2UgQHsgZXJyb3IgPSAiZ292ZXJuYW5jZS5qc29uIGthbm4gbnVyIHVlYmVyIC9hcGkvZ292ZXJu YW5jZSBnZWFlbmRlcnQgd2VyZGVuIiB9IDQwMwogICAgICAgICAgICAgICAgICAgICAgICAkUmVz cG9uc2UuQ2xvc2UoKQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAg ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBTY2hyZWlic2NodXR6OiBjb25maWcu anNvbiBudXIgZHVyY2ggU3VwZXJVc2VyIGFlbmRlcmJhci4KICAgICAgICAgICAgICAgICAgICBp ZiAoJFJlbFBhdGggLWVxICdkYXRhL2NvbmZpZy5qc29uJykgewogICAgICAgICAgICAgICAgICAg ICAgICAkR292ID0gR2V0LUdvdmVybmFuY2UKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1u b3QgKFRlc3QtU3VwZXJVc2VyICRHb3YpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBT ZW5kLUpzb24gJFJlc3BvbnNlIEB7IGVycm9yID0gImNvbmZpZy5qc29uIGthbm4gbnVyIHZvbiBT dXBlclVzZXJuIGdlYWVuZGVydCB3ZXJkZW4iIH0gNDAzCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBXcml0ZS1Ib3N0ICIgIEVSUiAgUE9TVCAvYXBpL3dyaXRlICBjb25maWcuanNvbiBCZXJl Y2h0aWd1bmcgdmVyd2VpZ2VydCAoJGVudjpVU0VSTkFNRSkiIC1Gb3JlZ3JvdW5kQ29sb3IgUmVk CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ2xvc2UoKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJERvY0RhdGEgPSAkUGFyc2Vk LmRhdGEKCiAgICAgICAgICAgICAgICAgICAgIyBVbnRlcnNjaGVpZHVuZzogSlNPTi1Eb2t1bWVu dCAoUFNDdXN0b21PYmplY3QvSGFzaHRhYmxlL0FycmF5KSB2cy4gUm9oZGF0ZW4gKFN0cmluZywg ei5CLiBIVE1MKQogICAgICAgICAgICAgICAgICAgIGlmICgkRG9jRGF0YSAtaXMgW1BTQ3VzdG9t T2JqZWN0XSAtb3IgJERvY0RhdGEgLWlzIFtIYXNodGFibGVdIC1vciAkRG9jRGF0YSAtaXMgW1N5 c3RlbS5PYmplY3RbXV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIyBTdGF0dXNhZW5kZXJ1 bmcgYXVmICJGcmVpZ2VnZWJlbiIgb2RlciAiQWJnZWxlaG50IiBlcmZvcmRlcnQgUmV2aWV3ZXIt CiAgICAgICAgICAgICAgICAgICAgICAgICMgb2RlciBTdXBlclVzZXItQmVyZWNodGlndW5nLiBE ZXIgU2VydmVyIHBydWVmdCBkaWVzIHVuYWJoYWVuZ2lnIHZvbSBDbGllbnQuCiAgICAgICAgICAg ICAgICAgICAgICAgICROZXdTdGF0dXMgPSAkbnVsbAogICAgICAgICAgICAgICAgICAgICAgICBp ZiAoJERvY0RhdGEuc3RhdHVzKSB7ICROZXdTdGF0dXMgPSAkRG9jRGF0YS5zdGF0dXMgfQoKICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCROZXdTdGF0dXMgLWVxICdGcmVpZ2VnZWJlbicgLW9y ICROZXdTdGF0dXMgLWVxICdBYmdlbGVobnQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAkR292ID0gR2V0LUdvdmVybmFuY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICREb2NL YXQgPSAkbnVsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCREb2NEYXRhLmthdGVn b3JpZSkgeyAkRG9jS2F0ID0gJERvY0RhdGEua2F0ZWdvcmllIH0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICRJc1NVID0gVGVzdC1TdXBlclVzZXIgJEdvdgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgJElzUmV2ID0gVGVzdC1SZXZpZXdlciAkR292ICREb2NLYXQKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkSXNTVSAtYW5kIC1ub3QgJElzUmV2KSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXNwb25zZSBAeyBlcnJvciA9 ICJLZWluZSBCZXJlY2h0aWd1bmcgZnVlciBTdGF0dXMgJyROZXdTdGF0dXMnIGluIEthdGVnb3Jp ZSAnJERvY0thdCciIH0gNDAzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUt SG9zdCAiICBFUlIgIFBPU1QgL2FwaS93cml0ZSAgU3RhdHVzLUJlcmVjaHRpZ3VuZyB2ZXJ3ZWln ZXJ0ICgkZW52OlVTRVJOQU1FIC0+ICROZXdTdGF0dXMpIiAtRm9yZWdyb3VuZENvbG9yIFJlZAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5DbG9zZSgpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAk V3JpdGVDb250ZW50ID0gJERvY0RhdGEgfCBDb252ZXJ0VG8tSnNvbiAtRGVwdGggMjAKICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAjIFJvaGRhdGVu IChIVE1MLVN0cmluZ3MgZnVlciBTdGFydHNlaXRlLCBIaWxmZS1JbmhhbHQsIGV0Yy4pCiAgICAg ICAgICAgICAgICAgICAgICAgICRXcml0ZUNvbnRlbnQgPSBbc3RyaW5nXSREb2NEYXRhCiAgICAg ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIE9yZG5lciBlcnN0ZWxsZW4g ZmFsbHMgbm9ldGlnCiAgICAgICAgICAgICAgICAgICAgJERpciA9IFtJTy5QYXRoXTo6R2V0RGly ZWN0b3J5TmFtZSgkU2FmZVBhdGgpCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3Qt UGF0aCAkRGlyKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0b3J5IC1QYXRoICREaXIgLUZv cmNlIHwgT3V0LU51bGwgfQoKICAgICAgICAgICAgICAgICAgICAjIFNjaHJlaWJzY2h1dHogYXVm aGViZW4sIEluaGFsdCBzY2hyZWliZW4sIFNjaHJlaWJzY2h1dHogc2V0emVuCiAgICAgICAgICAg ICAgICAgICAgVW5wcm90ZWN0LUZpbGUgJFNhZmVQYXRoCiAgICAgICAgICAgICAgICAgICAgW0lP LkZpbGVdOjpXcml0ZUFsbFRleHQoJFNhZmVQYXRoLCAkV3JpdGVDb250ZW50LCBbVGV4dC5VVEY4 RW5jb2RpbmddOjpuZXcoJGZhbHNlKSkKICAgICAgICAgICAgICAgICAgICBQcm90ZWN0LUZpbGUg JFNhZmVQYXRoCgogICAgICAgICAgICAgICAgICAgICRGaWxlSW5mbyA9IEdldC1JdGVtICRTYWZl UGF0aAogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzcG9uc2UgQHsKICAgICAgICAg ICAgICAgICAgICAgICAgb2sgICAgICAgPSAkdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICBw YXRoICAgICA9ICRSZWxQYXRoCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0gJEZp bGVJbmZvLkxhc3RXcml0ZVRpbWVVdGMuVG9TdHJpbmcoIm8iKQogICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Ib3N0ICIgIEFQSSAgUE9TVCAvYXBpL3dyaXRl ICAkUmVsUGF0aCIgLUZvcmVncm91bmRDb2xvciBHcmVlbgogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgICAgIFdyaXRlLUhvc3QgIiAgRVJSICBQT1NU IC9hcGkvd3JpdGUgICQoJF8uRXhjZXB0aW9uLk1lc3NhZ2UpIiAtRm9yZWdyb3VuZENvbG9yIFJl ZAogICAgICAgICAgICAgICAgIyBTY2hyZWlic2NodXR6IHdpZWRlcmhlcnN0ZWxsZW4gZmFsbHMg YXVmZ2Vob2JlbgogICAgICAgICAgICAgICAgaWYgKCRTYWZlUGF0aCkgeyB0cnkgeyBQcm90ZWN0 LUZpbGUgJFNhZmVQYXRoIH0gY2F0Y2gge30gfQogICAgICAgICAgICAgICAgdHJ5IHsgU2VuZC1K c29uICRSZXNwb25zZSBAeyBlcnJvciA9ICRfLkV4Y2VwdGlvbi5NZXNzYWdlIH0gNTAwIH0gY2F0 Y2gge30KICAgICAgICAgICAgfQogICAgICAgICAgICB0cnkgeyAkUmVzcG9uc2UuQ2xvc2UoKSB9 IGNhdGNoIHt9CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgfQoKICAgICAgICAjIC0tLSBQ T1NUIC9hcGkvZGVsZXRlIC0tLQogICAgICAgICMgQm9keTogeyAicGF0aCI6ICJkYXRhL1Zlcmtl aHIvRDAwMV94eHguanNvbiIgfQogICAgICAgICMgQXV0b3Jpc2llcnVuZzoKICAgICAgICAjICAg LSBBcnRpa2VsIChkYXRhL0thdC9EeHh4Lmpzb24pIHVuZCBNZWRpYSAobWVkaWEvLi4uKTogSmVk ZXIgYXV0aGVudGlmaXppZXJ0ZSBVc2VyCiAgICAgICAgIyAgICAgKFBhcGllcmtvcmItV29ya2Zs b3cgaW0gRnJvbnRlbmQgcHJ1ZWZ0IE5XLUtlbm51bmcgKyBTb2Z0LURlbGV0ZSkKICAgICAgICAj ICAgLSBTeXN0ZW1kYXRlaWVuIChjb25maWcuanNvbiwgZ292ZXJuYW5jZS5qc29uLCAudHJhc2gu anNvbiBldGMuKTogTnVyIFNVL0ZBCiAgICAgICAgaWYgKCRVcmxQYXRoIC1lcSAnL2FwaS9kZWxl dGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAg ICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdAogICAgICAgICAgICAgICAgJFBhcnNl ZCA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbgogICAgICAgICAgICAgICAgJFJlbFBhdGggPSAk UGFyc2VkLnBhdGgKCiAgICAgICAgICAgICAgICAjIFN5c3RlbWRhdGVpZW4gc2NodWV0emVuOiBO dXIgU3VwZXJVc2VyL0ZhY2hhdWZzaWNodAogICAgICAgICAgICAgICAgJElzU3lzdGVtRmlsZSA9 ICgkUmVsUGF0aCAtZXEgJ2RhdGEvY29uZmlnLmpzb24nIC1vcgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAkUmVsUGF0aCAtZXEgJ2RhdGEvZ292ZXJuYW5jZS5qc29uJyAtb3IKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFJlbFBhdGggLW1hdGNoICdeZGF0YVsvXFxd XC4nKQogICAgICAgICAgICAgICAgaWYgKCRJc1N5c3RlbUZpbGUpIHsKICAgICAgICAgICAgICAg ICAgICAkR292ID0gR2V0LUdvdmVybmFuY2UKICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAo VGVzdC1TdXBlclVzZXIgJEdvdikgLWFuZCAtbm90IChUZXN0LUZhY2hhdWZzaWNodCAkR292KSkg ewogICAgICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlc3BvbnNlIEB7IGVycm9yID0g Ik51ciBTdXBlclVzZXIgdW5kIEZhY2hhdWZzaWNodCBkdWVyZmVuIFN5c3RlbWRhdGVpZW4gbG9l c2NoZW4iIH0gNDAzCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUhvc3QgIiAgRVJSICBQ T1NUIC9hcGkvZGVsZXRlICBTeXN0ZW1kYXRlaS1CZXJlY2h0aWd1bmcgdmVyd2VpZ2VydCAoJGVu djpVU0VSTkFNRSAtPiAkUmVsUGF0aCkiIC1Gb3JlZ3JvdW5kQ29sb3IgUmVkCiAgICAgICAgICAg ICAgICAgICAgICAgICRSZXNwb25zZS5DbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAg ICAgICAgICRTYWZlUGF0aCA9IFJlc29sdmUtU2FmZVBhdGggJFJlbFBhdGgKCiAgICAgICAgICAg ICAgICBpZiAoLW5vdCAkU2FmZVBhdGgpIHsKICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb24g JFJlc3BvbnNlIEB7IGVycm9yID0gIlVuZ3VlbHRpZ2VyIFBmYWQiIH0gNDAwCiAgICAgICAgICAg ICAgICB9IGVsc2VpZiAoVGVzdC1QYXRoICRTYWZlUGF0aCkgewogICAgICAgICAgICAgICAgICAg IFVucHJvdGVjdC1GaWxlICRTYWZlUGF0aAogICAgICAgICAgICAgICAgICAgIFJlbW92ZS1JdGVt ICRTYWZlUGF0aCAtUmVjdXJzZSAtRm9yY2UKICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb24g JFJlc3BvbnNlIEB7IG9rID0gJHRydWU7IHBhdGggPSAkUmVsUGF0aCB9CiAgICAgICAgICAgICAg ICAgICAgV3JpdGUtSG9zdCAiICBBUEkgIFBPU1QgL2FwaS9kZWxldGUgICRSZWxQYXRoICh2b24g JGVudjpVU0VSTkFNRSkiIC1Gb3JlZ3JvdW5kQ29sb3IgWWVsbG93CiAgICAgICAgICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzcG9uc2UgQHsgZXJyb3Ig PSAiRGF0ZWkgbmljaHQgZ2VmdW5kZW4iIH0gNDA0CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIH0gY2F0Y2ggewogICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAiICBFUlIgIFBPU1QgL2Fw aS9kZWxldGUgICQoJF8uRXhjZXB0aW9uLk1lc3NhZ2UpIiAtRm9yZWdyb3VuZENvbG9yIFJlZAog ICAgICAgICAgICAgICAgdHJ5IHsgU2VuZC1Kc29uICRSZXNwb25zZSBAeyBlcnJvciA9ICRfLkV4 Y2VwdGlvbi5NZXNzYWdlIH0gNTAwIH0gY2F0Y2gge30KICAgICAgICAgICAgfQogICAgICAgICAg ICB0cnkgeyAkUmVzcG9uc2UuQ2xvc2UoKSB9IGNhdGNoIHt9CiAgICAgICAgICAgIGNvbnRpbnVl CiAgICAgICAgfQoKICAgICAgICAjIC0tLSBQT1NUIC9hcGkvZmV0Y2gtaW1hZ2U/dXJsPWh0dHBz Oi8vLi4uIC0tLQogICAgICAgICMgUHJveHk6IEV4dGVybmVzIEJpbGQgaGVydW50ZXJsYWRlbiAo ZnVlciBQYXN0ZSBhdXMgV1dXLCB1bWdlaHQgQ09SUykKICAgICAgICBpZiAoJFVybFBhdGggLWVx ICcvYXBpL2ZldGNoLWltYWdlJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgewogICAgICAgICAg ICB0cnkgewogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QKICAgICAg ICAgICAgICAgICRQYXJzZWQgPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24KICAgICAgICAgICAg ICAgICRJbWdVcmwgPSAkUGFyc2VkLnVybAoKICAgICAgICAgICAgICAgICMgTnVyIGh0dHAvaHR0 cHMgVVJMcyBlcmxhdWJlbgogICAgICAgICAgICAgICAgaWYgKCRJbWdVcmwgLW5vdG1hdGNoICde aHR0cHM/Oi8vJykgewogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzcG9uc2UgQHsg ZXJyb3IgPSAiTnVyIEhUVFAvSFRUUFMgVVJMcyBlcmxhdWJ0IiB9IDQwMAogICAgICAgICAgICAg ICAgICAgICRSZXNwb25zZS5DbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFNTUkYtU2NodXR6OiBQcml2YXRlIElQ cyB1bmQgbG9jYWxob3N0IGJsb2NraWVyZW4KICAgICAgICAgICAgICAgICRQYXJzZWRVcmkgPSBb U3lzdGVtLlVyaV0kSW1nVXJsCiAgICAgICAgICAgICAgICAkSW1nSG9zdCA9ICRQYXJzZWRVcmku SG9zdAogICAgICAgICAgICAgICAgaWYgKCRJbWdIb3N0IC1tYXRjaCAnXihsb2NhbGhvc3R8MTI3 XC58MTBcLnwxOTJcLjE2OFwufDE3MlwuKDFbNi05XXwyWzAtOV18M1swMV0pXC58MFwuMFwuMFwu MHwxNjlcLjI1NFwuKScgLW9yICRJbWdIb3N0IC1lcSAnOjoxJykgewogICAgICAgICAgICAgICAg ICAgIFNlbmQtSnNvbiAkUmVzcG9uc2UgQHsgZXJyb3IgPSAiWnVncmlmZiBhdWYgaW50ZXJuZSBB ZHJlc3NlbiBuaWNodCBlcmxhdWJ0IiB9IDQwMwogICAgICAgICAgICAgICAgICAgICRSZXNwb25z ZS5DbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIH0K CiAgICAgICAgICAgICAgICAkV2ViQ2xpZW50ID0gTmV3LU9iamVjdCBTeXN0ZW0uTmV0LldlYkNs aWVudAogICAgICAgICAgICAgICAgJFdlYkNsaWVudC5IZWFkZXJzLkFkZCgiVXNlci1BZ2VudCIs ICJNb3ppbGxhLzUuMCBEUklWRS1Qb3J0YWwvMy42IikKICAgICAgICAgICAgICAgICRJbWdCeXRl cyA9ICRXZWJDbGllbnQuRG93bmxvYWREYXRhKCRJbWdVcmwpCiAgICAgICAgICAgICAgICAkQ29u dGVudFR5cGUgPSAkV2ViQ2xpZW50LlJlc3BvbnNlSGVhZGVyc1siQ29udGVudC1UeXBlIl0KICAg ICAgICAgICAgICAgICRXZWJDbGllbnQuRGlzcG9zZSgpCgogICAgICAgICAgICAgICAgIyBOdXIg QmlsZGVyIGR1cmNobGFzc2VuCiAgICAgICAgICAgICAgICBpZiAoJENvbnRlbnRUeXBlIC1ub3Rs aWtlICdpbWFnZS8qJykgewogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzcG9uc2Ug QHsgZXJyb3IgPSAiS2VpbiBCaWxkOiAkQ29udGVudFR5cGUiIH0gNDAwCiAgICAgICAgICAgICAg ICAgICAgJFJlc3BvbnNlLkNsb3NlKCkKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAg ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRSZXNwb25zZS5TdGF0dXNDb2RlID0gMjAw CiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudFR5cGUgPSAkQ29udGVudFR5cGUKICAg ICAgICAgICAgICAgIEFkZC1TZWN1cml0eUhlYWRlcnMgJFJlc3BvbnNlCiAgICAgICAgICAgICAg ICAkUmVzcG9uc2UuQ29udGVudExlbmd0aDY0ID0gJEltZ0J5dGVzLkxlbmd0aAogICAgICAgICAg ICAgICAgJFJlc3BvbnNlLk91dHB1dFN0cmVhbS5Xcml0ZSgkSW1nQnl0ZXMsIDAsICRJbWdCeXRl cy5MZW5ndGgpCiAgICAgICAgICAgICAgICBXcml0ZS1Ib3N0ICIgIEFQSSAgUE9TVCAvYXBpL2Zl dGNoLWltYWdlICAkKCRJbWdCeXRlcy5MZW5ndGgpIEJ5dGVzIHZvbiAkSW1nVXJsIiAtRm9yZWdy b3VuZENvbG9yIEN5YW4KICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgICAgICBXcml0 ZS1Ib3N0ICIgIEVSUiAgUE9TVCAvYXBpL2ZldGNoLWltYWdlICAkKCRfLkV4Y2VwdGlvbi5NZXNz YWdlKSIgLUZvcmVncm91bmRDb2xvciBSZWQKICAgICAgICAgICAgICAgIHRyeSB7IFNlbmQtSnNv biAkUmVzcG9uc2UgQHsgZXJyb3IgPSAiRG93bmxvYWQgZmVobGdlc2NobGFnZW46ICQoJF8uRXhj ZXB0aW9uLk1lc3NhZ2UpIiB9IDUwMCB9IGNhdGNoIHt9CiAgICAgICAgICAgIH0KICAgICAgICAg ICAgdHJ5IHsgJFJlc3BvbnNlLkNsb3NlKCkgfSBjYXRjaCB7fQogICAgICAgICAgICBjb250aW51 ZQogICAgICAgIH0KCiAgICAgICAgIyAtLS0gUE9TVCAvYXBpL3VwbG9hZD9wYXRoPW1lZGlhL0Qw MDEvYmlsZC5wbmcgLS0tCiAgICAgICAgIyBBa3plcHRpZXJ0IHJvaGUgQnl0ZXMgdW5kIG11bHRp cGFydC9mb3JtLWRhdGEgKEZvcm1EYXRhKSBVcGxvYWRzLgogICAgICAgICMgTnVyIHNpY2hlcmUg TWVkaWVuZm9ybWF0ZSBlcmxhdWJ0IChCaWxkZXIsIFBERiwgVmlkZW8sIEF1ZGlvKS4KICAgICAg ICBpZiAoJFVybFBhdGggLWVxICcvYXBpL3VwbG9hZCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcp IHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICMgUGZhZCBtYW51ZWxsIGF1cyBS YXctVVJMIGV4dHJhaGllcmVuIHVuZCBVVEYtOCBkZWtvZGllcmVuCiAgICAgICAgICAgICAgICAj IChRdWVyeVN0cmluZyB2ZXJ3ZW5kZXQgYXVmIG1hbmNoZW4gV2luZG93cy1TeXN0ZW1lbiBkaWUg U3lzdGVtY29kZXBhZ2Ugc3RhdHQgVVRGLTgpCiAgICAgICAgICAgICAgICAkUmF3UXVlcnkgPSAk UmVxdWVzdC5VcmwuUXVlcnkKICAgICAgICAgICAgICAgICRQYXRoTWF0Y2ggPSBbcmVnZXhdOjpN YXRjaCgkUmF3UXVlcnksICdwYXRoPShbXiZdKyknKQogICAgICAgICAgICAgICAgaWYgKC1ub3Qg JFBhdGhNYXRjaC5TdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXNw b25zZSBAeyBlcnJvciA9ICJLZWluIHBhdGgtUGFyYW1ldGVyIiB9IDQwMAogICAgICAgICAgICAg ICAgICAgICRSZXNwb25zZS5DbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRSZWxQYXRoID0gW1N5c3RlbS5VcmldOjpV bmVzY2FwZURhdGFTdHJpbmcoJFBhdGhNYXRjaC5Hcm91cHNbMV0uVmFsdWUpCgogICAgICAgICAg ICAgICAgIyBEYXRlaXR5cC1XaGl0ZWxpc3Q6IE51ciBzaWNoZXJlIE1lZGllbmZvcm1hdGUgZXJs YXViZW4KICAgICAgICAgICAgICAgICRVcGxvYWRFeHQgPSBbSU8uUGF0aF06OkdldEV4dGVuc2lv bigkUmVsUGF0aCkuVG9Mb3dlcigpCiAgICAgICAgICAgICAgICAkQWxsb3dlZFVwbG9hZEV4dHMg PSBAKCcuanBnJywnLmpwZWcnLCcucG5nJywnLmdpZicsJy53ZWJwJywnLnN2ZycsJy5pY28nLCcu Ym1wJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5wZGYnLCcubXA0 JywnLndlYm0nLCcubXAzJywnLm9nZycsJy53YXYnKQogICAgICAgICAgICAgICAgaWYgKCRVcGxv YWRFeHQgLW5vdGluICRBbGxvd2VkVXBsb2FkRXh0cykgewogICAgICAgICAgICAgICAgICAgIFNl bmQtSnNvbiAkUmVzcG9uc2UgQHsgZXJyb3IgPSAiRGF0ZWl0eXAgJyRVcGxvYWRFeHQnIGlzdCBu aWNodCBlcmxhdWJ0LiBFcmxhdWJ0OiBCaWxkZXIsIFBERiwgVmlkZW8sIEF1ZGlvLiIgfSA0MDAK ICAgICAgICAgICAgICAgICAgICBXcml0ZS1Ib3N0ICIgIEVSUiAgUE9TVCAvYXBpL3VwbG9hZCAg RGF0ZWl0eXAgYWJnZWxlaG50OiAkVXBsb2FkRXh0ICgkUmVsUGF0aCkiIC1Gb3JlZ3JvdW5kQ29s b3IgUmVkCiAgICAgICAgICAgICAgICAgICAgJFJlc3BvbnNlLkNsb3NlKCkKICAgICAgICAgICAg ICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRTYWZl UGF0aCA9IFJlc29sdmUtU2FmZVBhdGggJFJlbFBhdGgKCiAgICAgICAgICAgICAgICBpZiAoLW5v dCAkU2FmZVBhdGgpIHsKICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlc3BvbnNlIEB7 IGVycm9yID0gIlVuZ3VlbHRpZ2VyIFBmYWQiIH0gNDAwCiAgICAgICAgICAgICAgICB9IGVsc2Ug ewogICAgICAgICAgICAgICAgICAgICMgT3JkbmVyIGVyc3RlbGxlbgogICAgICAgICAgICAgICAg ICAgICREaXIgPSBbSU8uUGF0aF06OkdldERpcmVjdG9yeU5hbWUoJFNhZmVQYXRoKQogICAgICAg ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggJERpcikpIHsgTmV3LUl0ZW0gLUl0ZW1U eXBlIERpcmVjdG9yeSAtUGF0aCAkRGlyIC1Gb3JjZSB8IE91dC1OdWxsIH0KCiAgICAgICAgICAg ICAgICAgICAgIyBCb2R5IGxlc2VuIChtYXguIDEwMCBNQikKICAgICAgICAgICAgICAgICAgICAk TWF4VXBsb2FkQnl0ZXMgPSAxMDAgKiAxMDI0ICogMTAyNAogICAgICAgICAgICAgICAgICAgICRN ZW1TdHJlYW0gPSBOZXctT2JqZWN0IElPLk1lbW9yeVN0cmVhbQogICAgICAgICAgICAgICAgICAg ICRSZXF1ZXN0LklucHV0U3RyZWFtLkNvcHlUbygkTWVtU3RyZWFtKQogICAgICAgICAgICAgICAg ICAgICRSYXdCeXRlcyA9ICRNZW1TdHJlYW0uVG9BcnJheSgpCiAgICAgICAgICAgICAgICAgICAg JE1lbVN0cmVhbS5EaXNwb3NlKCkKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRSYXdCeXRlcy5M ZW5ndGggLWd0ICRNYXhVcGxvYWRCeXRlcykgewogICAgICAgICAgICAgICAgICAgICAgICBTZW5k LUpzb24gJFJlc3BvbnNlIEB7IGVycm9yID0gIkRhdGVpIHp1IGdyb3NzIChtYXguIDEwMCBNQiki IH0gNDEzCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUhvc3QgIiAgRVJSICBQT1NUIC9h cGkvdXBsb2FkICBadSBncm9zczogJCgkUmF3Qnl0ZXMuTGVuZ3RoKSBCeXRlcyAoJFJlbFBhdGgp IiAtRm9yZWdyb3VuZENvbG9yIFJlZAogICAgICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2Uu Q2xvc2UoKQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAg ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBNdWx0aXBhcnQvZm9ybS1kYXRhOiBEYXRlaS1C eXRlcyBhdXMgQm9keSBleHRyYWhpZXJlbgogICAgICAgICAgICAgICAgICAgICRDVCA9ICRSZXF1 ZXN0LkNvbnRlbnRUeXBlCiAgICAgICAgICAgICAgICAgICAgaWYgKCRDVCAtYW5kICRDVC5Db250 YWlucygnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRC b3VuZGFyeU1hdGNoID0gW3JlZ2V4XTo6TWF0Y2goJENULCAnYm91bmRhcnk9KC4rKScpCiAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgkQm91bmRhcnlNYXRjaC5TdWNjZXNzKSB7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAkQm91bmRhcnkgPSBbVGV4dC5FbmNvZGluZ106OlVURjguR2V0 Qnl0ZXMoJy0tJyArICRCb3VuZGFyeU1hdGNoLkdyb3Vwc1sxXS5WYWx1ZS5UcmltKCciJykpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIERhdGVpLVBhcnQgZmluZGVuOiBzdWNoZSBuYWNo ICJmaWxlbmFtZT0iIGltIEhlYWRlciwgZXh0cmFoaWVyZSBEYXRlbiBuYWNoIFxyXG5cclxuCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAkUmF3ID0gJFJhd0J5dGVzCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAkTmVlZGxlID0gW1RleHQuRW5jb2RpbmddOjpVVEY4LkdldEJ5dGVzKCdm aWxlbmFtZT0nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEhlYWRlckVuZCA9IFtUZXh0 LkVuY29kaW5nXTo6VVRGOC5HZXRCeXRlcyhbY2hhcl0xMyArIFtjaGFyXTEwICsgW2NoYXJdMTMg KyBbY2hhcl0xMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRWluZmFjaGVyIEFuc2F0 ejogS29udmVydGllcmUgenUgU3RyaW5nLCBmaW5kZSBPZmZzZXRzCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAkUmF3U3RyID0gW1RleHQuRW5jb2RpbmddOjpHZXRFbmNvZGluZygnaXNvLTg4 NTktMScpLkdldFN0cmluZygkUmF3KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEZuUG9z ID0gJFJhd1N0ci5JbmRleE9mKCdmaWxlbmFtZT0nKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCRGblBvcyAtZ2UgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRE YXRhU3RhcnQgPSAkUmF3U3RyLkluZGV4T2YoKFtjaGFyXTEzKS5Ub1N0cmluZygpICsgKFtjaGFy XTEwKS5Ub1N0cmluZygpICsgKFtjaGFyXTEzKS5Ub1N0cmluZygpICsgKFtjaGFyXTEwKS5Ub1N0 cmluZygpLCAkRm5Qb3MpICsgNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRW5k ZTogbmFlY2hzdGUgQm91bmRhcnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQm91 bmRhcnlTdHIgPSBbVGV4dC5FbmNvZGluZ106OkdldEVuY29kaW5nKCdpc28tODg1OS0xJykuR2V0 U3RyaW5nKCRCb3VuZGFyeSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YUVu ZCA9ICRSYXdTdHIuSW5kZXhPZigkQm91bmRhcnlTdHIsICREYXRhU3RhcnQpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCREYXRhRW5kIC1ndCAkRGF0YVN0YXJ0KSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRW50ZmVybmUgXHJcbiB2b3IgZGVyIEJv dW5kYXJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkRGF0YUVuZCAt Z2UgMiAtYW5kICRSYXdTdHIuU3Vic3RyaW5nKCREYXRhRW5kIC0gMiwgMikgLWVxIChbY2hhcl0x MykuVG9TdHJpbmcoKSArIChbY2hhcl0xMCkuVG9TdHJpbmcoKSkgewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJERhdGFFbmQgLT0gMgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRS YXdCeXRlcyA9ICRSYXdbJERhdGFTdGFydC4uKCREYXRhRW5kIC0gMSldCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg ICAgICAjIFNjaHJlaWJzY2h1dHogYXVmaGViZW4sIERhdGVpIHNjaHJlaWJlbiwgU2NocmVpYnNj aHV0eiBzZXR6ZW4KICAgICAgICAgICAgICAgICAgICBVbnByb3RlY3QtRmlsZSAkU2FmZVBhdGgK ICAgICAgICAgICAgICAgICAgICBbSU8uRmlsZV06OldyaXRlQWxsQnl0ZXMoJFNhZmVQYXRoLCAk UmF3Qnl0ZXMpCiAgICAgICAgICAgICAgICAgICAgUHJvdGVjdC1GaWxlICRTYWZlUGF0aAoKICAg ICAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlc3BvbnNlIEB7IG9rID0gJHRydWU7IHBhdGgg PSAkUmVsUGF0aCB9CiAgICAgICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAiICBBUEkgIFBPU1Qg L2FwaS91cGxvYWQgICRSZWxQYXRoICgkKCRSYXdCeXRlcy5MZW5ndGgpIEJ5dGVzKSIgLUZvcmVn cm91bmRDb2xvciBHcmVlbgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIHsK ICAgICAgICAgICAgICAgIFdyaXRlLUhvc3QgIiAgRVJSICBQT1NUIC9hcGkvdXBsb2FkICAkKCRf LkV4Y2VwdGlvbi5NZXNzYWdlKSIgLUZvcmVncm91bmRDb2xvciBSZWQKICAgICAgICAgICAgICAg IHRyeSB7IFNlbmQtSnNvbiAkUmVzcG9uc2UgQHsgZXJyb3IgPSAkXy5FeGNlcHRpb24uTWVzc2Fn ZSB9IDUwMCB9IGNhdGNoIHt9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJ5IHsgJFJlc3Bv bnNlLkNsb3NlKCkgfSBjYXRjaCB7fQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIH0KCiAg ICAgICAgIyAtLS0gUE9TVCAvYXBpL3NodXRkb3duIC0tLQogICAgICAgICMgV2lyZCB2b24gYmVm b3JldW5sb2FkIGdlc2VuZGV0IChUYWItQ2xvc2UgT0RFUiBGNS1SZWZyZXNoKS4KICAgICAgICAj IFN0YXJ0ZXQgZWluZSBHbmFkZW5mcmlzdCBzdGF0dCBzb2ZvcnRpZ2VtIFNodXRkb3duLgogICAg ICAgICMgQmVpIEY1L1JlZnJlc2gga29tbXQgaW5uZXJoYWxiIHZvbiA1cyBlaW4gbmV1ZXIgSGVh cnRiZWF0IHVuZCBicmljaHQgYWIuCiAgICAgICAgIyBCZWkgZWNodGVtIFRhYi1DbG9zZSBrb21t dCBrZWluIEhlYXJ0YmVhdCAtPiBTZXJ2ZXIgYmVlbmRldCBzaWNoIG5hY2ggR25hZGVuZnJpc3Qu CiAgICAgICAgaWYgKCRVcmxQYXRoIC1lcSAnL2FwaS9zaHV0ZG93bicgLWFuZCAkTWV0aG9kIC1l cSAnUE9TVCcpIHsKICAgICAgICAgICAgU2VuZC1Kc29uICRSZXNwb25zZSBAeyBvayA9ICR0cnVl IH0KICAgICAgICAgICAgdHJ5IHsgJFJlc3BvbnNlLkNsb3NlKCkgfSBjYXRjaCB7fQogICAgICAg ICAgICAkc2NyaXB0OlNodXRkb3duUGVuZGluZyA9IEdldC1EYXRlCiAgICAgICAgICAgIFdyaXRl LUhvc3QgIiAgUE9TVCAvYXBpL3NodXRkb3duIC0gR25hZGVuZnJpc3QgZ2VzdGFydGV0ICgkKCRz Y3JpcHQ6U2h1dGRvd25HcmFjZVNlYylzLCB3aXJkIGJlaSBIZWFydGJlYXQgYWJnZWJyb2NoZW4p IiAtRm9yZWdyb3VuZENvbG9yIFllbGxvdwogICAgICAgICAgICBjb250aW51ZQogICAgICAgIH0K CiAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CiAgICAgICAgIyBTdGF0aXNjaGUgRGF0ZWllbiAobWl0IENhY2hlIGZ1 ZXIgaGFldWZpZyBnZWxhZGVuZSBEYXRlaWVuKQogICAgICAgICMgPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICBpZiAo JFVybFBhdGggLWVxICcvJykgeyAkVXJsUGF0aCA9ICcvaW5kZXguaHRtbCcgfQogICAgICAgICRV cmxQYXRoID0gW1N5c3RlbS5VcmldOjpVbmVzY2FwZURhdGFTdHJpbmcoJFVybFBhdGgpCiAgICAg ICAgIyBQYXRoLVRyYXZlcnNhbC1TY2h1dHo6IFJlc29sdmUtU2FmZVBhdGggcHJ1ZWZ0IENvbnRh aW5tZW50IGltIFJvb3QtVmVyemVpY2huaXMKICAgICAgICAkRmlsZVBhdGggPSBSZXNvbHZlLVNh ZmVQYXRoICgkVXJsUGF0aC5UcmltU3RhcnQoJy8nKSkKCiAgICAgICAgdHJ5IHsKICAgICAgICAg ICAgaWYgKCRGaWxlUGF0aCAtYW5kIChUZXN0LVBhdGggJEZpbGVQYXRoIC1QYXRoVHlwZSBMZWFm KSkgewogICAgICAgICAgICAgICAgJEV4dGVuc2lvbiA9IFtJTy5QYXRoXTo6R2V0RXh0ZW5zaW9u KCRGaWxlUGF0aCkuVG9Mb3dlcigpCiAgICAgICAgICAgICAgICAkQ29udGVudFR5cGUgPSAkTWlt ZVR5cGVzWyRFeHRlbnNpb25dCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkQ29udGVudFR5cGUp IHsgJENvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfQoKICAgICAgICAg ICAgICAgICRSZXNwb25zZS5Db250ZW50VHlwZSA9ICRDb250ZW50VHlwZQogICAgICAgICAgICAg ICAgJFJlc3BvbnNlLlN0YXR1c0NvZGUgPSAyMDAKICAgICAgICAgICAgICAgIEFkZC1TZWN1cml0 eUhlYWRlcnMgJFJlc3BvbnNlCgogICAgICAgICAgICAgICAgIyBDYWNoZSBmdWVyIHN0YXRpc2No ZSBEYXRlaWVuIChpbmRleC5odG1sLCBDU1MsIEpTLCBKU09OKQogICAgICAgICAgICAgICAgJEJ5 dGVzID0gJG51bGwKICAgICAgICAgICAgICAgICRGaWxlTGFzdFdyaXRlID0gKEdldC1JdGVtICRG aWxlUGF0aCAtRm9yY2UpLkxhc3RXcml0ZVRpbWVVdGMKICAgICAgICAgICAgICAgIGlmICgkc2Ny aXB0OlN0YXRpY0NhY2hlLkNvbnRhaW5zS2V5KCRGaWxlUGF0aCkpIHsKICAgICAgICAgICAgICAg ICAgICAkY2FjaGVkID0gJHNjcmlwdDpTdGF0aWNDYWNoZVskRmlsZVBhdGhdCiAgICAgICAgICAg ICAgICAgICAgaWYgKCRjYWNoZWQuTW9kaWZpZWQgLWdlICRGaWxlTGFzdFdyaXRlKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICRCeXRlcyA9ICRjYWNoZWQuQnl0ZXMKICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkQnl0ZXMp IHsKICAgICAgICAgICAgICAgICAgICAkQnl0ZXMgPSBbSU8uRmlsZV06OlJlYWRBbGxCeXRlcygk RmlsZVBhdGgpCiAgICAgICAgICAgICAgICAgICAgaWYgKCRFeHRlbnNpb24gLW1hdGNoICdeXC4o aHRtbHxjc3N8anN8anNvbnxzdmd8aWNvKSQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRz Y3JpcHQ6U3RhdGljQ2FjaGVbJEZpbGVQYXRoXSA9IEB7IEJ5dGVzID0gJEJ5dGVzOyBNb2RpZmll ZCA9ICRGaWxlTGFzdFdyaXRlIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudExlbmd0aDY0ID0gJEJ5dGVzLkxl bmd0aAogICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1dFN0cmVhbS5Xcml0ZSgkQnl0ZXMs IDAsICRCeXRlcy5MZW5ndGgpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAk UmVzcG9uc2UuU3RhdHVzQ29kZSA9IDQwNAogICAgICAgICAgICAgICAgJE5vdEZvdW5kID0gW1Rl eHQuRW5jb2RpbmddOjpVVEY4LkdldEJ5dGVzKCI0MDQgLSBEYXRlaSBuaWNodCBnZWZ1bmRlbjog JFVybFBhdGgiKQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLkNvbnRlbnRUeXBlID0gJ3RleHQv cGxhaW47IGNoYXJzZXQ9dXRmLTgnCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudExl bmd0aDY0ID0gJE5vdEZvdW5kLkxlbmd0aAogICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1 dFN0cmVhbS5Xcml0ZSgkTm90Rm91bmQsIDAsICROb3RGb3VuZC5MZW5ndGgpCiAgICAgICAgICAg ICAgICBXcml0ZS1Ib3N0ICIgIDQwNCAgJFVybFBhdGgiIC1Gb3JlZ3JvdW5kQ29sb3IgUmVkCiAg ICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgV3JpdGUtSG9zdCAiICBF UlIgIERhdGVpICRVcmxQYXRoICAkKCRfLkV4Y2VwdGlvbi5NZXNzYWdlKSIgLUZvcmVncm91bmRD b2xvciBSZWQKICAgICAgICB9CiAgICAgICAgdHJ5IHsgJFJlc3BvbnNlLkNsb3NlKCkgfSBjYXRj aCB7fQogICAgfQp9IGNhdGNoIHsKICAgICMgU3RyZytDIG9kZXIgRmVobGVyCn0gZmluYWxseSB7 CiAgICAkTGlzdGVuZXIuU3RvcCgpCgogICAgIyBTY2hyZWlic2NodXR6IGJlaW0gQmVlbmRlbiB3 aWVkZXIgc2V0emVuCiAgICBXcml0ZS1Ib3N0ICIgIFNjaHJlaWJzY2h1dHogd2lyZCB3aWVkZXJo ZXJnZXN0ZWxsdC4uLiIgLUZvcmVncm91bmRDb2xvciBHcmF5CiAgICBHZXQtQ2hpbGRJdGVtICIk Um9vdFxkYXRhIiAtUmVjdXJzZSAtRmlsdGVyICIqLmpzb24iIC1FcnJvckFjdGlvbiBTaWxlbnRs eUNvbnRpbnVlIHwgRm9yRWFjaC1PYmplY3QgeyBQcm90ZWN0LUZpbGUgJF8uRnVsbE5hbWUgfQog ICAgUHJvdGVjdC1GaWxlIChKb2luLVBhdGggJFJvb3QgImluZGV4Lmh0bWwiKQoKICAgICMgTG9r YWxlIFRFTVAtS29waWUgYXVmcmFldW1lbiAodmVyaGluZGVydCB2ZXJ3YWlzdGUgRGF0ZWllbikK ICAgICRUZW1wRGlyID0gSm9pbi1QYXRoICRlbnY6VEVNUCAiRFJJVkVfU2VydmVyIgogICAgaWYg KFRlc3QtUGF0aCAkVGVtcERpcikgewogICAgICAgIFJlbW92ZS1JdGVtICRUZW1wRGlyIC1SZWN1 cnNlIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQogICAgICAgIFdyaXRlLUhv c3QgIiAgVEVNUC1Lb3BpZSBiZXJlaW5pZ3QuIiAtRm9yZWdyb3VuZENvbG9yIEdyYXkKICAgIH0K CiAgICBXcml0ZS1Ib3N0ICIiCiAgICBXcml0ZS1Ib3N0ICJTZXJ2ZXIgYmVlbmRldC4iIC1Gb3Jl Z3JvdW5kQ29sb3IgWWVsbG93Cn0K