约 10000 字 预计阅读 20 分钟
PGRpdiBpZD0idmVyaWZpY2F0aW9uIiBzdHlsZT0iZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsiPg0KICAgIDxkaXYgaWQ9ImVudHJ5LWJveCI+DQogICAgICAgIA0KICAgICAgICA8ZGl2IGlkPSJzZWNyZXQtd29yZCIgc3R5bGU9IndpZHRoOiBjYWxjKGNsYW1wKDUwJSwgNDUwcHgsIDEwMCUpIC0gMTAwcHgpOw0KICAgIG1hcmdpbi1ib3R0b206IDFyZW07Ij48L2Rpdj4NCiAgICAgICAgPGZvcm0gaWQ9InBhc3N3b3JkLWZvcm0iIG9uc3VibWl0PSJjaGVja1Bhc3N3b3JkKCk7IHJldHVybiBmYWxzZTsiIHN0eWxlPSIgZGlzcGxheTogZmxleDsNCiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICAgIHdpZHRoOiBhdXRvOyI+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkIiBpZD0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSLwn5SRIOivt+i+k+WFpeWvhueggSIgcmVxdWlyZWQgc3R5bGU9Im1hcmdpbi1ib3R0b206IDEuNXJlbTsNCiAgICAgIHBhZGRpbmc6IDEwcHggMjBweDsiPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZW5jcnlwdGVkUGFzc3dvcmQiIGlkPSJlbmNyeXB0ZWQtcGFzc3dvcmQiPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Iuino+mUgSIgbmFtZT0ic3VibWl0IiBpZD0ic2VjcmV0LXN1Ym1pdCIgc3R5bGU9IiBwYWRkaW5nOiAxMHB4IDIwcHg7DQogICAgICBjdXJzb3I6IHBvaW50ZXI7IiBvbm1vdXNlb3Zlcj0idGhpcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9JyNGQUIwMDUnOyINCiAgICAgICAgICAgICAgICAgICBvbm1vdXNlb3V0PSJ0aGlzLnN0eWxlLmJhY2tncm91bmRDb2xvcj0nJzsiPg0KICAgICAgICA8L2Zvcm0+DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0ic2VjcmV0IiBzdHlsZT0iZGlzcGxheTogbm9uZSIgcGFzc3dvcmQ9IkE1RUM3NUE2OUM2RjQzMENBMThGNjlCOTRBRTlCQjQ5MzdBNjY1MzY5NkQ5MTI4RUQ0Q0UxM0QwRThENzBDMkQiPg0KDQojIyDnjq/looMNCg0K5ZyoNjTkvY3ns7vnu5/kuIss5a6J6KOF5LiL5YiX5bqT5L2/Z2Nj5pSv5oyB57yW6K+RMzLkvY3nqIvluo/vvJoNCg0KYGBgQysrDQphcHQgaW5zdGFsbCBnY2MtbXVsdGlsaWIgZysrLW11bHRpbGliDQpgYGANCg0KIyMg5qC85byP5YyW5a2X56ym5LiyDQoNCiMjIyDnm7jlhbPlh73mlbANCg0KYGBgQysrDQojaW5jbHVkZSA8c3RkaW8uaD4NCmludCBwcmludGYgKGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLik7DQppbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQ0KaW50IHNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pDQppbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLik7DQoNCmludCB2cHJpbnRmIChjb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZyk7DQppbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykNCmludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQ0KaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpDQouLi4NCmBgYA0KDQojIyMg5Z+65pys5qC85byPDQoNCuagvOW8j+WMluWtl+espuS4sueahOWfuuacrOagvOW8j+WmguS4izoNCg0KYGBgQysrDQolW3BhcmFtZXRlcl1bZmxhZ3NdW2ZpZWxkIHdpZHRoXVsucHJlY2lzaW9uXVtsZW5ndGhddHlwZQ0KYGBgDQoNCuWQhOWPguaVsOWQq+S5ieWmguS4izoNCg0KMS4gYCVgOuagh+W/l+agvOW8j+WMluW6j+WIl+eahOW8gOWniw0KMi4gYHBhcmFtZXRlcmA66I635Y+W5qC85byP5YyW5a2X56ym5Liy5Lit55qE5oyH5a6a5Y+C5pWwDQogICAqIG51bSQ6MSQs5Y+W5qC85byP5YyW5a2X56ym5Liy55qE56ys5LiA5Liq5Y+C5pWwKOesrDDkuKrlj4LmlbDmmK/moLzlvI/ljJblrZfnrKbkuLLmnKzouqsseDg25LiL55u45b2T5LqO5Y+WW2VzcCs4XSzljbNwcmludGblh73mlbDnmoTnrKzkuozkuKrlj4LmlbApDQozLiBgZmxhZ3NgOuWPr+eUqOS6juWvuem9kOOAgeespuWPt+etiSzluLjnlKjlpoLkuIs6DQoNCiAgICogLTrlt6blr7npvZANCg0KICAgKiArOuaVtOaVsOaYvuekuivlj7cNCg0KICAgKiAwOuS9v+eUqDDloavlhYXnqbrkvY0NCiAgIA0KICAgKiAjOua3u+WKoOWJjee8gC7kuI54L1jphY3lkIjkvb/nlKjml7Ys5Zyo5YmN5re75YqgMHgvMFgNCjQuIGBmaWVsZCB3aWR0aGA65oyH5Ye66L6T5Ye655qE5pyA5bCP5a695bqmLuWmguaenOWGheWuueS4jei2s+WuveW6pizpu5jorqTlnKjlt6bkvqfloavlhYXnqbrmoLwuDQo1LiBgLnByZWNpc2lvbmA65o6n5Yi25rWu54K55pWw55qE5bCP5pWw5L2N5pWw5oiW5a2X56ym5Liy55qE5pyA5aSn5a2X56ym5pWwLg0KNi4gYGxlbmd0aGA655So5LqO5oyH5a6a5pWw5o2u55qE6ZW/5bqmLOaOp+WItui+k+WHuuaVtOaVsOeahOWkp+Wwjy4NCg0KICAgKiBoOui+k+WHuuWPjOWtl+iKgg0KDQogICAqIGhoOui+k+WHuuS4gOWtl+iKgg0KNy4gdHlwZTrmjIflrprlj5jph4/nmoTnsbvlnoss5o6n5Yi25pWw5o2u6L6T5Ye65qC85byPLuW4uOeUqOWmguS4izoNCg0KICAgKiBkL2k65pyJ56ym5Y+3MTDov5vliLbmlbTmlbANCg0KICAgKiB1OuaXoOespuWPtzEw6L+b5Yi25pW05pWwDQoNCiAgICogeC9YOuaXoOespuWPtzE26L+b5Yi25pW05pWwDQoNCiAgICogbzrml6DnrKblj7c46L+b5Yi25pW05pWwDQoNCiAgICogYzrlrZfnrKYNCg0KICAgKiBzOuWtl+espuS4sg0KDQogICAqIHA65oyH6ZKI5Zyw5Z2ADQoNCiAgICogbjrlrZjlgqjlt7LovpPlh7rnmoTlrZfnrKbmlbAu5bCG5LuOYHByaW50ZmDosIPnlKjlvIDlp4vliLBgJW5g5L2N572u5LmL5YmN55qE5a2X56ym5pWw5a2Y5YKo5Yiw5oyH5a6a5Y+Y6YeP5LitLg0KDQrnpLrkvovku6PnoIHlpoLkuIs6DQoNCmBgYEMrKw0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQoNCmludCBtYWluKCkgew0KICAgIGludCBudW1iZXIgPSAweDEyMzQ1Njc4Ow0KICAgIGZsb2F0IHBpID0gMy4xNDE1OTsNCglpbnQgblRlbXAgPSAwOw0KDQogICAgcHJpbnRmKCJudW1iZXI6MHglMiRYIHBpOiUxJC4yZlxuIiwgcGksIG51bWJlcik7DQoJcHJpbnRmKCIlaGhYXG4iLCBudW1iZXIpOw0KDQoJcHJpbnRmKCJIZWxsbyVuXG4iLCAmblRlbXApOw0KCXByaW50ZigiblRlbXA6JWRcbiIsIG5UZW1wKTsNCg0KICAgIHJldHVybiAwOw0KfQ0KDQovL+i+k+WHuue7k+aenOWmguS4izoNCm51bWJlcjoweDEyMzQ1Njc4IHBpOjMuMTQNCjc4DQpIZWxsbw0KblRlbXA6NQ0KYGBgDQoNCiMjIyDljp/nkIYNCg0K5qC85byP5YyW5a2X56ym5Liy55u45YWz5Ye95pWwLOS4jeS8muWIpOaWreWPguaVsOeahOS4quaVsCzljZXnuq/nmoTkvp3pnaDmoLzlvI/ljJblrZfnrKbov5vooYzlj4LmlbDljLnphY0uDQoNCua1i+ivleS7o+eggeWmguS4izoNCg0KYGBgYEMrKw0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQppbnQgbWFpbigpew0KCWNoYXIgc3RyWzEwMF07DQoJcmVhZCgwLHN0ciwxMDApOw0KCXByaW50ZihzdHIpOw0KICAgIHJldHVybiAwOw0KfQ0KDQovL+i+k+WFpeWGheWuueWmguS4izoNCiVwLSVwLSVwLSVwLSVwLSVwLSVwDQpgYGBgDQoNCuWcqHg4NuS4reWPguaVsOaUvuWcqOagiOS4iijmoLzlvI/ljJblrZfnrKbkuLLmnKzouqvnrpfnrKzkuIDkuKrlj4LmlbApLOi+k+WHuuWmguS4izoNCg0KIVtzdHJpbmdGbXQteDg2XSguL2ltYWdlcy9zdHJpbmdGbXQteDg2LnBuZykNCg0KYGBgDQoweGZmZmZjZTljLTB4NjQtMHg1NjU1NjFiNC0weGY3ZmZkYjhjLTB4MS0weGY3ZmMwNzIwLTB4MjUyZDcwMjUNCmBgYA0KDQrlnKh4NjTkuK3liY025Liq5Y+C5pWwLOWIhuWIq+aUvuWcqOWvhOWtmOWZqFJESeOAgVJTSeOAgVJEWOOAgVJDWOOAgVI444CBUjks5Ymp5LiL55qE5Y+C5pWw5pS+5Zyo5qCI5LiKLui+k+WHuuWmguS4izoNCg0KIVtzdHJpbmdGbXQteDY0XSguL2ltYWdlcy9zdHJpbmdGbXQteDY0LnBuZykNCg0KYGBgYA0KMHg3ZmZmZmZmZmRjYTAtMHg2NC0weDdmZmZmN2ViNDZkZC0obmlsKS0weDdmZmZmN2ZjYmY0MC0weDcwMjUyZDcwMjUyZDcwMjUtMHgyNTJkNzAyNTJkNzAyNTJkDQpgYGBgDQoNCiMjIyDliKnnlKgNCg0K5rWL6K+V5Luj56CB5aaC5LiLOg0KDQpgYGBDKysNCi8vbHVvUHduLmMNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KY2hhciBidWZbXSA9ICJsdW8gU3RyaW5nRm10IjsNCmludCBtYWluKCkgew0KICBwcmludGYoImJ1ZiBhZGRyOiVwXG4iLCBidWYpOw0KICBjaGFyIHN0clsxMDBdOw0KICBtZW1zZXQoc3RyLCAwLCBzaXplb2Yoc3RyKSk7DQogIHNjYW5mKCIlcyIsIHN0cik7DQogIHByaW50ZihzdHIpOw0KICByZXR1cm4gMDsNCn0NCg0KLy8g57yW6K+R5ZG95Luk5aaC5LiLOg0KZ2NjIC1tMzIgbHVvUHduLmMgLW8gbHVvUHduDQpgYGANCg0KMS4gPT3ms4TpnLLmoIjlj5jph4/mlbDlgLwoJW51bSRwKT09DQoNCui+k+WFpWAlMyRwYCzojrflj5ZwcmludGblh73mlbDnrKw05Liq5Y+C5pWw55qE5YC8Lg0KDQoyLiA9PeS7u+aEj+WcsOWdgOivuyhhZGRyJW51bSRzKT09DQoNCuWIqeeUqCVzLOaJk+WNsOWcsOWdgOWkhOWtmOaUvueahOWtl+espuS4suS/oeaBryzlsIZhZGRy5Lit5a2Y5pS+55qE5pWw5o2u5rOE6Zyy5Ye65p2lLg0KDQoqIOiuoeeul+agvOW8j+WMluWtl+espuS4suWHveaVsOagiOmhtuWIsOWPmOmHj3PnvJPlhrLljLrnmoTot53nprsNCg0KYGBgYEMrKw0KLy/ovpPlhaUNCkFBQUEtJXAtJXAtJXAtJXAtJXAtJXAtJXAtJXAtJXAtJXANCi8v6L6T5Ye6DQpBQUFBLTB4ZmZiOWQzYWMtMHg2NC0weDU2NTU2MWM0LTB4ZjdmNjFiOGMtMHgxLTB4ZjdmMjQ3MjAtMHg0MTQxNDE0MS0weDJkNzAyNTJkLTB4MjUyZDcwMjUtMHg3MDI1MmQ3MA0KYGBgYA0KDQrku47kuIrov7Dlj6/ku6XnnIvliLDot53nprvkuLpgJTckYA0KDQoqIOi/m+ihjGFkZHLmnoTpgKAs5rOE6Zyy5oyH5a6a5Zyw5Z2A5aSE5pWw5o2uDQoNCmBgYGBweXRob24NCmZyb20gcHduIGltcG9ydCAqDQpjb250ZXh0LmxvZ19sZXZlbCA9ICJkZWJ1ZyINCg0KcCA9IHByb2Nlc3MoIi4vbHVvUHduIikNCnByaW50KHAucmVjdnVudGlsKCIweCIpKQ0KDQpidWZfYWRkciA9IGludChwLnJlY3YoOCksMTYpDQpwcmludChoZXgoYnVmX2FkZHIpKQ0KcC5yZWN2dW50aWwoIlxuIikNCg0KZ2RiLmF0dGFjaChwLCAnJycNCiAgICBiIHByaW50Zg0KICAgIGMNCicnJykNCnAuc2VuZGxpbmUocDMyKGJ1Zl9hZGRyKSArIGIiJTckcyIpDQpwLnJlY3YoKQ0KcC5pbnRlcmFjdGl2ZSgpDQpgYGBgDQoNCiFbc3RyaW5nRm10LeazhOmcsuWcsOWdgOWGheWuuV0oLi9pbWFnZXMvc3RyaW5nRm10LSVFNiVCMyU4NCVFOSU5QyVCMiVFNSU5QyVCMCVFNSU5RCU4MCVFNSU4NiU4NSVFNSVBRSVCOS5wbmcpDQoNCjMuID095Lu75oSP5Zyw5Z2A5YaZKGFkZHIlbnVtJG4pPT0NCg0KYGBgYHB5dGhvbg0KZnJvbSBwd24gaW1wb3J0ICoNCmNvbnRleHQubG9nX2xldmVsID0gImRlYnVnIg0KDQpwID0gcHJvY2VzcygiLi9sdW9Qd24iKQ0KcHJpbnQocC5yZWN2dW50aWwoIjB4IikpDQoNCmJ1Zl9hZGRyID0gaW50KHAucmVjdig4KSwxNikNCnByaW50KGhleChidWZfYWRkcikpDQpwLnJlY3Z1bnRpbCgiXG4iKQ0KDQpnZGIuYXR0YWNoKHAsICcnJw0KICAgIGIgcHJpbnRmDQogICAgYw0KJycnKQ0KcC5zZW5kbGluZShwMzIoYnVmX2FkZHIpICsgYiJBQUFBIiArIGIiJTckbiIgK2IiJTckcyIpDQpwLnJlY3YoKQ0KcC5pbnRlcmFjdGl2ZSgpDQpgYGBgDQoNCuaJp+ihjHByaW50ZuWJjToNCg0KIVtzdHJpbmdGbXQt5Lu75oSP5Zyw5Z2A5YaZMV0oLi9pbWFnZXMvc3RyaW5nRm10LSVFNCVCQiVCQiVFNiU4NCU4RiVFNSU5QyVCMCVFNSU5RCU4MCVFNSU4NiU5OTEucG5nKQ0KDQrmiafooYxwcmludGblkI46DQoNCiFbc3RyaW5nRm10LeS7u+aEj+WcsOWdgOWGmTJdKC4vaW1hZ2VzL3N0cmluZ0ZtdC0lRTQlQkIlQkIlRTYlODQlOEYlRTUlOUMlQjAlRTUlOUQlODAlRTUlODYlOTkyLnBuZykNCg0K5LuO5LiK5Zu+5Y+v5Lul55yL5Yiw5Zyo5Zyw5Z2AYDB4NTY1ZTQwMThg5aSE5YaZ5LqGIDguDQoNCiMjIOaVtOaVsOa6ouWHug0KDQrlnKhD6K+t6KiA5LitLOaVtOaVsOeahOWfuuacrOexu+Wei+WIhuS4uuefreaVtOWei+OAgeaVtOWei+OAgemVv+aVtOWeiyzov5nkuInkuKrmlbDmja7nsbvlnovov5jliIbkuLrmnInnrKblj7flkozml6DnrKblj7cs5q+P56eN5pWw5o2u57G75Z6L6YO95pyJ5ZCE6Ieq55qE5aSn5bCP6IyD5Zu0LuWmguS4i+aJgOekujoNCg0KfCDnsbvlnosgICAgICAgICAgICAgICB8IOWtl+iKgiAgICAgICAgIHwg6IyD5Zu0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCA6LS0tLS0tLS0tLS0tLS0tLS0gfCA6LS0tLS0tLS0tLS0gfCA6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfA0KfCBzaG9ydCBpbnQgICAgICAgICAgfCAy5a2X6IqCKHdvcmQpICB8IDAgfiAzMjc2NygwfjB4N2ZmZik8YnIgLz4tMzI3NjggfiAtMSgweDgwMDAgfiAweGZmZmYpICAgICAgICB8DQp8IHVuc2lnbmVkIHNob3J0IGludCB8IDLlrZfoioIod29yZCkgIHwgMCB+IDY1NTM1KDB+MHhmZmZmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgaW50ICAgICAgICAgICAgICAgIHwgNOWtl+iKgihkd29yZCkgfCAwIH4gMjE0NzQ4MzY0NygwIH4gMHg3ZmZmZmZmZik8YnIgLz4tMjE0NzQ4MzY0OCB+IC0xKDB4ODAwMDAwMDAgfiAweGZmZmZmZmZmKSB8DQp8IHVuc2lnbmVkIGludCAgICAgICB8IDTlrZfoioIoZHdvcmQpIHwgMCB+IDQyOTQ5NjcyOTUoMH4weGZmZmZmZmZmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgbG9uZyBsb25nICAgICAgICAgIHwgOOWtl+iKgihxd29yZCkgfCDmraM6IDAgfiAweDdmZmZmZmZmZmZmZmZmZmY8YnIgLz7otJ86IDB4ODAwMDAwMDAwMDAwMDAwMCB+IDB4ZmZmZmZmZmZmZmZmZmZmZiB8DQp8IHVuc2lnbmVkIGxvbmcgbG9uZyB8IDjlrZfoioIocXdvcmQpIHwgMCB+IDB4ZmZmZmZmZmZmZmZmZmZmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCg0K5b2T56iL5bqP5Lit55qE5pWw5o2u6LaF6L+H5YW25pWw5o2u57G75Z6L55qE6IyD5Zu0LOWImeS8mumAoOaIkOa6ouWHuizmlbTmlbDnsbvlnovnmoTmuqLlh7rooqvnp7DkuLrmlbTmlbDmuqLlh7ouDQoNCiMjIyDljp/nkIYNCg0KMS4g5LiK55WM5rqi5Ye6DQoNCmBgYGBDKysNCi8vIOS8quS7o+eggQ0Kc2hvcnQgaW50IGE7DQphID0gYSArIDE7DQoNCi8vIOWvueW6lOeahOaxh+e8lg0KbW92enggICBlYXgsIFtyYnArdmFyXzJdDQphZGQgICAgIGVheCwgMQ0KbW92ICAgICBbcmJwK3Zhcl8yXSwgYXgNCmBgYGANCg0K5pyJ5Lul5LiL5Lik56eN5oOF5Ya1Og0KDQoqIGAweDdmZmYgKyAxID09IDB4ODAwMCzlr7nmnInnrKblj7fnn63mlbTlnovmnInlvbHlk41gDQoNCiAg5Zyo5peg56ym5Y+355+t5pW05Z6L5LitLDB4N2ZmZiArIDHnmoTlgLzlnKjlhbblj6/ooajnpLrnmoTojIPlm7TlhoUs5peg5b2x5ZONLg0KDQogIOWcqOacieespuWPt+efreaVtOWei+S4rSxgMHg3ZmZm6KGo56S6MzI3NjdgLGAweDgwMDDooajnpLrkuLotMzI3NjhgLOWNs2AzMjc2NyArIDEgPT0gLTMyNzY4YA0KDQoqIGAweGZmZmYgKyAxID09IDB4MTAwMDAs5a6e6ZmF5YC85Li6MCzlr7nml6DnrKblj7fnn63mlbTlnovmnInlvbHlk41gDQoNCiAg5Zyo5pyJ56ym5Y+355+t5pW05Z6L5LitLGAweGZmZmbooajnpLotMWAsYC0xICsgMSA9PSAwYCzku47mnInnrKblj7fmnaXnnIvmsqHmnInpl67popguDQoNCiAg5Zyo5peg56ym5Y+355+t5pW05Z6L5LitLGAweGZmZmbooajnpLo2NTUzNWAs5Y2zYDY1NTM1ICsgMSA9PSAwYA0KDQoyLiDkuIvnlYzmuqLlh7oNCg0KYGBgYEMrKw0KLy8g5Lyq5Luj56CBDQpzaG9ydCBpbnQgYTsNCmEgPSBhIC0gMTsNCg0KLy8g5a+55bqU55qE5rGH57yWDQptb3Z6eCAgIGVheCwgW3JicCt2YXJfMl0NCnN1YiAgICAgZWF4LCAxDQptb3YgICAgIFtyYnArdmFyXzJdLCBheA0KYGBgYA0KDQrmnInku6XkuIvkuKTnp43mg4XlhrU6DQoNCiogYDAgLSAxID09IDB4ZmZmZizlr7nml6DnrKblj7fnn63mlbTlnovmnInlvbHlk41gDQoNCiAg5Zyo5pyJ56ym5Y+355+t5pW05Z6L5LitLGAweGZmZmbooajnpLotMWAsYDAgLSAxID09IC0xYCzku47mnInnrKblj7fmnaXnnIvmsqHmnInpl67popguDQoNCiAg5Zyo5peg56ym5Y+355+t5pW05Z6L5LitLGAweGZmZmbooajnpLo2NTUzNWAs5Y2zYDAgLSAxID09IDY1NTM1YA0KDQoqIGAweDgwMDAgLSAxID09IDB4N2ZmZizlr7nmnInnrKblj7fnn63mlbTlnovmnInlvbHlk41gDQoNCiAg5Zyo5peg56ym5Y+355+t5pW05Z6L5LitLGAweDgwMDDooajnpLozMjc2OGAsYDMyNzY4IC0gMSA9PSAzMjc2N2As5LuO5peg56ym5Y+35p2l55yL5rKh5pyJ6Zeu6aKYLg0KDQogIOWcqOacieespuWPt+efreaVtOWei+S4rSxgMHg4MDAw6KGo56S6LTMyNzY4YCxgMHg3ZmZm6KGo56S6MzI3NjdgLOWNs2AtMzI3NjggLSAxID09IDMyNzY3YA0KDQojIyMg5Yip55SoDQoNCua1i+ivleS7o+eggeWmguS4izoNCg0KYGBgYEMrKw0KLy8gbHVvUHduLmMNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KDQp2b2lkIHN0b3JlX3Bhc3N3ZF9pbmRiKGNoYXIqIHBhc3N3ZCkgew0KfQ0KDQp2b2lkIHZhbGlkYXRlX3VuYW1lKGNoYXIqIHVuYW1lKSB7DQp9DQoNCnZvaWQgdmFsaWRhdGVfcGFzc3dkKGNoYXIqIHBhc3N3ZCkgew0KIGNoYXIgcGFzc3dkX2J1ZlsxMV07DQogdW5zaWduZWQgY2hhciBwYXNzd2RfbGVuID0gc3RybGVuKHBhc3N3ZCk7IC8qIFsxXSAqLyANCiBpZihwYXNzd2RfbGVuID49IDQgJiYgcGFzc3dkX2xlbiA8PSA4KSB7IC8qIFsyXSAqLw0KICBwcmludGYoIlZhbGlkIFBhc3N3b3JkXG4iKTsgLyogWzNdICovIA0KICBmZmx1c2goc3Rkb3V0KTsNCiAgc3RyY3B5KHBhc3N3ZF9idWYscGFzc3dkKTsgLyogWzRdICovDQogfSBlbHNlIHsNCiAgcHJpbnRmKCJJbnZhbGlkIFBhc3N3b3JkXG4iKTsgLyogWzVdICovDQogIGZmbHVzaChzdGRvdXQpOw0KIH0NCiBzdG9yZV9wYXNzd2RfaW5kYihwYXNzd2RfYnVmKTsgLyogWzZdICovDQp9DQoNCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIHsNCiBpZihhcmdjIT0zKSB7DQogIHByaW50ZigiVXNhZ2UgRXJyb3I6ICAgXG4iKTsNCiAgZmZsdXNoKHN0ZG91dCk7DQogIGV4aXQoLTEpOw0KIH0NCiB2YWxpZGF0ZV91bmFtZShhcmd2WzFdKTsNCiB2YWxpZGF0ZV9wYXNzd2QoYXJndlsyXSk7DQogcmV0dXJuIDA7DQp9DQoNCi8vIOWFs+mXrUxpbnV4IEFTTFINCmVjaG8gMCA+IC9wcm9jL3N5cy9rZXJuZWwvcmFuZG9taXplX3ZhX3NwYWNlDQoNCi8v5YWz6ZetTlgsIOe8luivkeWRveS7pOWmguS4izoNCmdjYyAtbTMyIC16IGV4ZWNzdGFjayBsdW9Qd24uYyAtbyBsdW9Qd24NCmBgYGANCg0Kc3RybGVu6L+U5Zue5YC857G75Z6L5Li6c2l6ZV90KOaXoOespuWPt+aVtOWeiyks5a2Y5YKo5ZyodW5zaWduZWQgY2hhcijmnIDlpKflgLzkuLoweGZmLDI1NSnnsbvlnovkuK0s5b2Tc3RybGVu6L+U5Zue5YC85aSn5LqOMjU15pe25Lya5Y+R55Sf5rqi5Ye6LnBhc3N3ZOmVv+W6puWcqDI2MC0yNjTojIPlm7TlhoXnrKblkIjkuIrov7Dlr4bnoIHplb/luqbopoHmsYIs6L+Z6YeM5Y+WMjYxLg0KDQoxLiDmtYvor5VwYXNzd2Tplb/luqbkuLoyNjEs5piv5ZCm5Y+v5Lul6KaG55uW6L+U5Zue5Zyw5Z2ALg0KDQpgYGBgYmFzaA0KJCBnZGItbXVsdGlhcmNoIC4vbHVvUHduDQpwd25kYmc+IHIgbHVvIGBweXRob24gLWMgJ3ByaW50KCJBIioyNjEpJ2ANClZhbGlkIFBhc3N3b3JkDQoNClByb2dyYW0gcmVjZWl2ZWQgc2lnbmFsIFNJR1NFR1YsIFNlZ21lbnRhdGlvbiBmYXVsdC4NCjB4NDE0MTQxNDEgaW4gPz8gKCkNCnB3bmRiZz4gcC94ICRlaXANCiQxID0gMHg0MTQxNDE0MQ0KYGBgYA0KDQoyLiDorqHnrpfnvJPlhrLljLrliLDov5Tlm57lnLDlnYDnmoTot53nprsNCg0KYGBgYHB5dGhvbg0KZnJvbSBwd24gaW1wb3J0ICoNCiNjb250ZXh0LmxvZ19sZXZlbCA9ICdkZWJ1ZycNCg0KYnVmZmVyX3NpemUgPSAyNjENCnBhdHRlcm4gPSBjeWNsaWMoYnVmZmVyX3NpemUpDQpwcmludChwYXR0ZXJuKQ0KDQp0cnk6DQogICAgb3MucmVtb3ZlKCcuL2dkYl9vdXRwdXQudHh0JykNCmV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoNCiAgICBwYXNzDQpnZGJfY29tbWFuZHMgPSBmJycnDQogICAgc2V0IGxvZ2dpbmcgZmlsZSBnZGJfb3V0cHV0LnR4dA0KICAgIHNldCBsb2dnaW5nIG9uDQogICAgYw0KICAgIHAveCAkZWlwDQogICAgc2V0IGxvZ2dpbmcgb2ZmDQonJycNCnAgPSBnZGIuZGVidWcoWycuL2x1b1B3bicsICdsdW8nLCBwYXR0ZXJuXSwgZ2RiX2NvbW1hbmRzKQ0KcHJpbnQocC5yZWN2KCkpDQoNCndpdGggb3BlbignZ2RiX291dHB1dC50eHQnLCAncicpIGFzIGY6DQogICAgbWF0Y2ggPSByZS5zZWFyY2gocidcJDFccyo9XHMqKDB4WzAtOWEtZkEtRl0rKScsIGYucmVhZCgpKQ0KICAgIGlmIG1hdGNoOg0KICAgICAgICBjcmFzaF9hZGRyZXNzID0gaW50KG1hdGNoLmdyb3VwKDEpLCAxNikNCiAgICAgICAgcHJpbnQoZiJjcmFzaCBhZGRyZXNzOiB7aGV4KGNyYXNoX2FkZHJlc3MpfSIpDQogICAgICAgIG9mZnNldCA9IGN5Y2xpY19maW5kKGNyYXNoX2FkZHJlc3MpDQogICAgICAgIHByaW50KGYib2Zmc2V0OiB7b2Zmc2V0fSIpDQogICAgZWxzZToNCiAgICAgICAgcHJpbnQoIk5vIG1hdGNoIGZvdW5kLiIpDQogICAgDQpwLmludGVyYWN0aXZlKCkNCg0KIyDovpPlh7rlpoLkuIs6DQpiJ1ZhbGlkIFBhc3N3b3JkXG4nDQpjcmFzaCBhZGRyZXNzOiAweDYxNjE2MTY3DQpvZmZzZXQ6IDI0DQpgYGBgDQoNCjMuIOaJp+ihjOiHquWumuS5iVNoZWxsY29kZQ0KDQpgYGBgcHl0aG9uDQpmcm9tIHB3biBpbXBvcnQgKg0KI2NvbnRleHQubG9nX2xldmVsID0gJ2RlYnVnJw0KY29udGV4dChvcyA9ICdsaW51eCcsIGFyY2ggPSAnaTM4NicpDQoNCiMgc2hlbGxjb2RlIGFkZHINCnJldF9hZGRyID0gMHhmZmZmY2I5MA0KDQpwYXlsb2FkID0gYidBJyAqIDI0DQpwYXlsb2FkICs9IHAzMihyZXRfYWRkcikNCnBheWxvYWQgKz0gYXNtKHNoZWxsY3JhZnQuc2goKSkNCnBheWxvYWQgKz0gYidCJyAqICgyNjEgLSBsZW4ocGF5bG9hZCkpDQoNCnByaW50KGVuaGV4KGFzbShzaGVsbGNyYWZ0LnNoKCkpKSkNCnAgPSBwcm9jZXNzKFsnLi9sdW9Qd24nLCAnbHVvJywgcGF5bG9hZF0pDQoNCmdkYl9jb21tYW5kcyA9IGYnJycNCiAgICBiIHZhbGlkYXRlX3Bhc3N3ZA0KICAgIGMNCicnJw0KI3AgPSBnZGIuZGVidWcoWycuL2x1b1B3bicsICdsdW8nLCBwYXlsb2FkXSwgZ2RiX2NvbW1hbmRzKQ0KcHJpbnQocC5yZWN2KCkpDQoNCnAuaW50ZXJhY3RpdmUoKQ0KYGBgYA0KDQojIyDmoIjmuqLlh7oNCg0KIyMjIOWOn+eQhg0KDQrnqIvluo/lkJHmoIjkuK3mn5DkuKrlj5jph4/kuK3lhpnlhaXnmoTlrZfoioLmlbDotoXov4fkuobov5nkuKrlj5jph4/mnKzouqvmiYDnlLPor7fnmoTlrZfoioLmlbAs5Zug6ICM5a+86Ie05LiO5YW255u46YK755qE5qCI5Lit55qE5Y+Y6YeP55qE5YC86KKr5pS55Y+YLg0KDQrmoIjnu5PmnoTlpoLkuIs6DQoNCiFb5qCI57uT5p6EXSguL2ltYWdlcy8lRTYlQTAlODglRTclQkIlOTMlRTYlOUUlODQucG5nKQ0KDQrlm6DkuLpg5qCI55qE5aKe6ZW/5pa55ZCRYOWSjGDlsYDpg6jlj5jph4/nmoTlop7plb/mlrnlkJFg55u45Y+NLOW9k+agiOWPmOmHj+a6ouWHuuaXtizlj6/opobnm5blh73mlbDnmoTov5Tlm57lnLDlnYAs5pWF5Y+v5Yqr5oyB56iL5bqP55qE5omn6KGM5rWBLOWunueOsOS7u+aEj+S7o+eggeaJp+ihjC4NCg0KIyMjIHJldDJ0ZXh0DQoNCmByZXQydGV4dGA65o6n5Yi256iL5bqP5omn6KGM5pys6Lqr5bey5pyJ55qE55qE5Luj56CBKGAudGV4dGDmrrXkuK3nmoTku6PnoIEpLg0KDQrmiJHku6zmjqfliLbmiafooYznqIvluo/lt7LmnInnmoTku6PnoIHml7Ys5Lmf5Y+v5Lul5o6n5Yi256iL5bqP5omn6KGM5aW95Yeg5q615LiN55u46YK755qE5bey5pyJ5Luj56CBKOWNs2dhZGdldHMpLOi/meWwseaYr+aIkeS7rOaJgOimgeivtOeahFJPUC4NCg0KPT3mtYvor5Xku6PnoIHlpoLkuIs6PT0NCg0KIVtyZXQydGV4dOa1i+ivleS7o+eggV0oLi9pbWFnZXMvcmV0MnRleHQlRTYlQjUlOEIlRTglQUYlOTUlRTQlQkIlQTMlRTclQTAlODEucG5nKQ0KDQo9Peeoi+W6j+S/neaKpOWmguS4izo9PQ0KDQpgYGBgQysrDQpBcmNoOiAgICAgICBpMzg2LTMyLWxpdHRsZQ0KUkVMUk86ICAgICAgUGFydGlhbCBSRUxSTw0KU3RhY2s6ICAgICAgTm8gY2FuYXJ5IGZvdW5kDQpOWDogICAgICAgICBOWCBlbmFibGVkDQpQSUU6ICAgICAgICBObyBQSUUgKDB4ODA0ODAwMCkNClN0cmlwcGVkOiAgIE5vDQpEZWJ1Z2luZm86ICBZZXMNCmBgYGANCg0K5LiK6L+w5Luj56CB5a2Y5Zyo5LiL6L+w6Zeu6aKYOg0KDQoqIGdldHPlh73mlbDlrZjlnKjmoIjmuqLlh7rmvI/mtJ4uDQoqIOWcqHNlY3VyZeWHveaVsOS4reWPkeeOsOS6hmBzeXN0ZW0oIi9iaW4vc2giKWDlh73mlbDosIPnlKguDQoqIOiLpeaIkeS7rOaOp+WItueoi+W6j+i/lOWbnuiHs2AweDA4MDQ4NjNBYCzlsLHlj6/ku6XlvpfliLDns7vnu5/nmoRzaGVsbOS6hi4NCg0KPT3liKnnlKjov4fnqIvlpoLkuIs6PT0NCg0KMS4g6K6h566X57yT5Yay5Yy65Yiw6L+U5Zue5Zyw5Z2A55qE6Led56a7DQoNCmBgYHB5dGhvbg0KZnJvbSBwd24gaW1wb3J0ICoNCiNjb250ZXh0LmxvZ19sZXZlbCA9ICdkZWJ1ZycNCg0KYnVmZmVyX3NpemUgPSAzMDANCnBhdHRlcm4gPSBjeWNsaWMoYnVmZmVyX3NpemUpDQojIHByaW50KHBhdHRlcm4pDQoNCmdkYl9jb21tYW5kcyA9IGYnJycNCiAgICBzZXQgbG9nZ2luZyBmaWxlIGdkYl9vdXRwdXQudHh0DQogICAgc2V0IGxvZ2dpbmcgb24NCiAgICBjDQogICAgcC94ICRlaXANCiAgICBzZXQgbG9nZ2luZyBvZmYNCicnJw0KIyBwID0gZ2RiLmRlYnVnKFsnLi9yZXQydGV4dCddLCBnZGJfY29tbWFuZHMpDQojIHAuc2VuZGxpbmUocGF0dGVybikNCiMgcHJpbnQocC5yZWN2KCkpDQojIHAuaW50ZXJhY3RpdmUoKQ0KDQojIEVJUA0KY3Jhc2hfYWRkcmVzcyA9IDB4NjI2MTYxNjQNCm9mZnNldCA9IGN5Y2xpY19maW5kKGNyYXNoX2FkZHJlc3MpDQpwcmludChmIm9mZnNldDoge29mZnNldH0iKQ0KDQojIOi+k+WHuuWmguS4izoNCm9mZnNldDogMTEyDQpgYGANCg0KMi4g6I635Y+WU2hlbGws5p6E5bu6RXhw5aaC5LiLOg0KDQpgYGBgcHl0aG9uDQpmcm9tIHB3biBpbXBvcnQgKg0KDQpwID0gcHJvY2VzcygnLi9yZXQydGV4dCcpDQp0YXJnZXQgPSAweDgwNDg2M0ENCnAuc2VuZGxpbmUoYidBJyAqIDExMiArIHAzMih0YXJnZXQpKQ0KcC5pbnRlcmFjdGl2ZSgpDQpgYGBgDQoNCiMjIyByZXQyc2hlbGxjb2RlDQoNCmByZXQyc2hlbGxjb2RlYDrmjqfliLbnqIvluo/miafooYxzaGVsbGNvZGXku6PnoIEs6ZyA56Gu5L+dc2hlbGxjb2Rl5Yy65Z+f5YW35pyJ5Y+v5omn6KGM5p2D6ZmQLg0KDQo9Pea1i+ivleS7o+eggeWmguS4izo9PQ0KDQohW3JldDJzaGVsbGNvZGXmtYvor5Xku6PnoIFdKC4vaW1hZ2VzL3JldDJzaGVsbGNvZGUlRTYlQjUlOEIlRTglQUYlOTUlRTQlQkIlQTMlRTclQTAlODEucG5nKQ0KDQo9Peeoi+W6j+S/neaKpOWmguS4izo9PQ0KDQpgYGBgQysrDQpBcmNoOiAgICAgICBpMzg2LTMyLWxpdHRsZQ0KUkVMUk86ICAgICAgUGFydGlhbCBSRUxSTw0KU3RhY2s6ICAgICAgTm8gY2FuYXJ5IGZvdW5kDQpOWDogICAgICAgICBOWCB1bmtub3duIC0gR05VX1NUQUNLIG1pc3NpbmcNClBJRTogICAgICAgIE5vIFBJRSAoMHg4MDQ4MDAwKQ0KU3RhY2s6ICAgICAgRXhlY3V0YWJsZQ0KUldYOiAgICAgICAgSGFzIFJXWCBzZWdtZW50cw0KU3RyaXBwZWQ6ICAgTm8NCkRlYnVnaW5mbzogIFllcw0KYGBgYA0KDQrkuIrov7Dku6PnoIHlrZjlnKjkuIvov7Dpl67popg6DQoNCiogZ2V0c+WHveaVsOWtmOWcqOagiOa6ouWHuua8j+a0ni4NCiogZ2Ri6LCD6K+VKHZtbWFwKeafpeeci2Jzc+auteacieaJp+ihjOadg+mZkC4NCg0KPT3liKnnlKjov4fnqIvlpoLkuIs6PT0NCg0KMS4g6K6h566X57yT5Yay5Yy65Yiw6L+U5Zue5Zyw5Z2A55qE6Led56a7DQoNCmBgYGBweXRob24NCmZyb20gcHduIGltcG9ydCAqDQojY29udGV4dC5sb2dfbGV2ZWwgPSAnZGVidWcnDQoNCmJ1ZmZlcl9zaXplID0gMzAwDQpwYXR0ZXJuID0gY3ljbGljKGJ1ZmZlcl9zaXplKQ0KIyBwcmludChwYXR0ZXJuKQ0KDQpnZGJfY29tbWFuZHMgPSBmJycnDQogICAgc2V0IGxvZ2dpbmcgZmlsZSBnZGJfb3V0cHV0LnR4dA0KICAgIHNldCBsb2dnaW5nIG9uDQogICAgYw0KICAgIHAveCAkZWlwDQogICAgc2V0IGxvZ2dpbmcgb2ZmDQonJycNCiMgcCA9IGdkYi5kZWJ1ZyhbJy4vcmV0MnNoZWxsY29kZSddLCBnZGJfY29tbWFuZHMpDQojIHAuc2VuZGxpbmUocGF0dGVybikNCiMgcHJpbnQocC5yZWN2KCkpDQojIHAuaW50ZXJhY3RpdmUoKQ0KDQojIEVJUA0KY3Jhc2hfYWRkcmVzcyA9IDB4NjI2MTYxNjQNCm9mZnNldCA9IGN5Y2xpY19maW5kKGNyYXNoX2FkZHJlc3MpDQpwcmludChmIm9mZnNldDoge29mZnNldH0iKQ0KDQojIOi+k+WHuuWmguS4izoNCm9mZnNldDogMTEyDQpgYGBgDQoNCjIuIOiOt+WPllNoZWxsLOaehOW7ukV4cOWmguS4izoNCg0KYGBgYHB5dGhvbg0KZnJvbSBwd24gaW1wb3J0ICoNCmNvbnRleHQuYmluYXJ5ID0gZWxmID0gRUxGKCcuL3JldDJzaGVsbGNvZGUnKQ0KDQpzaCA9IHByb2Nlc3MoJy4vcmV0MnNoZWxsY29kZScpDQpzaGVsbGNvZGUgPSBhc20oc2hlbGxjcmFmdC5zaCgpKQ0KYnVmMl9hZGRyID0gMHg4MDRBMDgwDQoNCnNoLnNlbmRsaW5lKHNoZWxsY29kZS5sanVzdCgxMTIsIGInQScpICsgcDMyKGJ1ZjJfYWRkcikpDQpzaC5pbnRlcmFjdGl2ZSgpDQpgYGBgDQoNCiMjIyByZXQyc3lzY2FsbA0KDQpgcmV0MnN5c2NhbGxgOuaOp+WItueoi+W6j+aJp+ihjOezu+e7n+iwg+eUqCzojrflj5ZzaGVsbC4NCg0KTGludXggeDg26YCa6L+HYGludCAweDgwYOi/m+WFpeezu+e7n+iwg+eUqCxbc3lzY2FsbF8zMi50YmxdKGh0dHBzOi8vZ2l0aHViLmNvbS90b3J2YWxkcy9saW51eC9ibG9iL21hc3Rlci9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibCnlj6/mn6XnnIvmjIflrprlh73mlbDns7vnu5/osIPnlKjlj7cs5Y+C5pWw5a+E5a2Y5Zmo5aaC5LiLOg0KDQpgYGBgQysrDQovL2h0dHBzOi8vZ2l0aHViLmNvbS9ibWlub3IvZ2xpYmMvYmxvYi9tYXN0ZXIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaA0Kc3lzY2FsbCBudW1iZXIJJWVheAkgICAgIGNhbGwtY2xvYmJlcmVkDQoJYXJnIDEJCSVlYngJICAgICBjYWxsLXNhdmVkDQoJYXJnIDIJCSVlY3gJICAgICBjYWxsLWNsb2JiZXJlZA0KCWFyZyAzCQklZWR4CSAgICAgY2FsbC1jbG9iYmVyZWQNCglhcmcgNAkJJWVzaQkgICAgIGNhbGwtc2F2ZWQNCglhcmcgNQkJJWVkaQkgICAgIGNhbGwtc2F2ZWQNCglhcmcgNgkJJWVicAkgICAgIGNhbGwtc2F2DQpgYGBgDQoNCkxpbnV4IHg2NOmAmui/h2BzeXNjYWxsYOi/m+WFpeezu+e7n+iwg+eUqCxbc3lzY2FsbF82NC50YmxdKGh0dHBzOi8vZ2l0aHViLmNvbS90b3J2YWxkcy9saW51eC9ibG9iL21hc3Rlci9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibCnlj6/mn6XnnIvmjIflrprlh73mlbDns7vnu5/osIPnlKjlj7cs5Y+C5pWw5a+E5a2Y5Zmo5aaC5LiLOg0KDQpgYGBgQysrDQovL2h0dHBzOi8vZ2l0aHViLmNvbS9ibWlub3IvZ2xpYmMvYmxvYi9tYXN0ZXIvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L3N5c2RlcC5oDQpzeXNjYWxsIG51bWJlcglyYXgNCiBhcmcgMQkJcmRpDQogYXJnIDIJCXJzaQ0KIGFyZyAzCQlyZHgNCiBhcmcgNAkJcjEwDQogYXJnIDUJCXI4DQogYXJnIDYJCXI5DQpgYGBgDQoNCj095rWL6K+V5Luj56CB5aaC5LiLOj09DQoNCiFbcmV0MnN5c2NhbGzmtYvor5Xku6PnoIFdKC4vaW1hZ2VzL3JldDJzeXNjYWxsJUU2JUI1JThCJUU4JUFGJTk1JUU0JUJCJUEzJUU3JUEwJTgxLnBuZykNCg0KPT3nqIvluo/kv53miqTlpoLkuIs6PT0NCg0KYGBgYEMrKw0KQXJjaDogICAgICAgaTM4Ni0zMi1saXR0bGUNClJFTFJPOiAgICAgIFBhcnRpYWwgUkVMUk8NClN0YWNrOiAgICAgIE5vIGNhbmFyeSBmb3VuZA0KTlg6ICAgICAgICAgTlggZW5hYmxlZA0KUElFOiAgICAgICAgTm8gUElFICgweDgwNDgwMDApDQpTdHJpcHBlZDogICBObw0KRGVidWdpbmZvOiAgWWVzDQpgYGBgDQoNCj095Yip55So6L+H56iL5aaC5LiLOj09DQoNCjEuIOiuoeeul+e8k+WGsuWMuuWIsOi/lOWbnuWcsOWdgOeahOi3neemuw0KDQpgYGBweXRob24NCmZyb20gcHduIGltcG9ydCAqDQojY29udGV4dC5sb2dfbGV2ZWwgPSAnZGVidWcnDQoNCmJ1ZmZlcl9zaXplID0gMzAwDQpwYXR0ZXJuID0gY3ljbGljKGJ1ZmZlcl9zaXplKQ0KIyBwcmludChwYXR0ZXJuKQ0KDQpnZGJfY29tbWFuZHMgPSBmJycnDQogICAgc2V0IGxvZ2dpbmcgZmlsZSBnZGJfb3V0cHV0LnR4dA0KICAgIHNldCBsb2dnaW5nIG9uDQogICAgYw0KICAgIHAveCAkZWlwDQogICAgc2V0IGxvZ2dpbmcgb2ZmDQonJycNCiMgcCA9IGdkYi5kZWJ1ZyhbJy4vcmV0MnN5c2NhbGwnXSwgZ2RiX2NvbW1hbmRzKQ0KIyBwLnNlbmRsaW5lKHBhdHRlcm4pDQojIHByaW50KHAucmVjdigpKQ0KIyBwLmludGVyYWN0aXZlKCkNCg0KIyBFSVANCmNyYXNoX2FkZHJlc3MgPSAweDYyNjE2MTY0DQpvZmZzZXQgPSBjeWNsaWNfZmluZChjcmFzaF9hZGRyZXNzKQ0KcHJpbnQoZiJvZmZzZXQ6IHtvZmZzZXR9IikNCg0KIyDovpPlh7rlpoLkuIs6DQpvZmZzZXQ6IDExMg0KYGBgDQoNCjIuIOWvu+aJvmBleGVjdmUoIi9iaW4vc2giLE5VTEwsTlVMTClgUk9Q6ZO+Lg0KDQogICAqIOWvu+aJvuezu+e7n+iwg+eUqGBpbnQgMHg4MGDmjIfku6TlnLDlnYANCg0KICAgYGBgYGJhc2gNCiAgICQgUk9QZ2FkZ2V0IC0tYmluYXJ5IC4vcmV0MnN5c2NhbGwgLS1vbmx5ICdpbnQnDQogICBHYWRnZXRzIGluZm9ybWF0aW9uDQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgIDB4MDgwNDk0MjEgOiBpbnQgMHg4MA0KICAgMHgwODA4OTBiNSA6IGludCAweGNmDQogICANCiAgIFVuaXF1ZSBnYWRnZXRzIGZvdW5kOiAyDQogICBgYGBgDQoNCiAgICogZXhlY3Zl57O757uf6LCD55So5Y+35Li6MHhiLOWNs2VheOS4ujB4Yg0KDQogICBgYGBgYmFzaA0KICAgJCBST1BnYWRnZXQgLS1iaW5hcnkgLi9yZXQyc3lzY2FsbCAtLW9ubHkgJ3BvcHxyZXQnIHwgZ3JlcCAnZWF4Jw0KICAgMHgwODA5ZGRkYSA6IHBvcCBlYXggOyBwb3AgZWJ4IDsgcG9wIGVzaSA7IHBvcCBlZGkgOyByZXQNCiAgIDB4MDgwYmIxOTYgOiBwb3AgZWF4IDsgcmV0DQogICAweDA4MDcyMTdhIDogcG9wIGVheCA7IHJldCAweDgwZQ0KICAgMHgwODA0ZjcwNCA6IHBvcCBlYXggOyByZXQgMw0KICAgMHgwODA5ZGRkOSA6IHBvcCBlcyA7IHBvcCBlYXggOyBwb3AgZWJ4IDsgcG9wIGVzaSA7IHBvcCBlZGkgOyByZXQNCiAgIA0KICAgIyDpgInmi6nkuIrov7DnrKzkuozkuKoNCiAgIHBvcF9lYXhfcmV0ID0gMHgwODBiYjE5Ng0KICAgYGBgYA0KDQogICAqIOesrOS4gOS4quWPguaVsCxlYnjmjIflkJFgL2Jpbi9zaGDlnLDlnYANCg0KICAgYGBgYGJhc2gNCiAgICMg5a+75om+ICcvYmluL3NoJ+WcsOWdgA0KICAgJCBST1BnYWRnZXQgLS1iaW5hcnkgLi9yZXQyc3lzY2FsbCAtLXN0cmluZyAnL2Jpbi9zaCcNCiAgIFN0cmluZ3MgaW5mb3JtYXRpb24NCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgMHgwODBiZTQwOCA6IC9iaW4vc2gNCiAgIA0KICAgIyDkvb9lYnjlgLzkuLonL2Jpbi9zaCflnLDlnYANCiAgIOKUlOKUgCMgUk9QZ2FkZ2V0IC0tYmluYXJ5IC4vcmV0MnN5c2NhbGwgLS1vbmx5ICdwb3B8cmV0JyB8IGdyZXAgJ2VieCcNCiAgIDB4MDgwOWRkZTIgOiBwb3AgZHMgOyBwb3AgZWJ4IDsgcG9wIGVzaSA7IHBvcCBlZGkgOyByZXQNCiAgIDB4MDgwOWRkZGEgOiBwb3AgZWF4IDsgcG9wIGVieCA7IHBvcCBlc2kgOyBwb3AgZWRpIDsgcmV0DQogICAweDA4MDViNmVkIDogcG9wIGVicCA7IHBvcCBlYnggOyBwb3AgZXNpIDsgcG9wIGVkaSA7IHJldA0KICAgMHgwODA5ZTFkNCA6IHBvcCBlYnggOyBwb3AgZWJwIDsgcG9wIGVzaSA7IHBvcCBlZGkgOyByZXQNCiAgIDB4MDgwYmUyM2YgOiBwb3AgZWJ4IDsgcG9wIGVkaSA7IHJldA0KICAgMHgwODA2ZWI2OSA6IHBvcCBlYnggOyBwb3AgZWR4IDsgcmV0DQogICAweDA4MDkyMjU4IDogcG9wIGVieCA7IHBvcCBlc2kgOyBwb3AgZWJwIDsgcmV0DQogICAweDA4MDQ4MzhiIDogcG9wIGVieCA7IHBvcCBlc2kgOyBwb3AgZWRpIDsgcG9wIGVicCA7IHJldA0KICAgMHgwODBhOWE0MiA6IHBvcCBlYnggOyBwb3AgZXNpIDsgcG9wIGVkaSA7IHBvcCBlYnAgOyByZXQgMHgxMA0KICAgMHgwODA5NmEyNiA6IHBvcCBlYnggOyBwb3AgZXNpIDsgcG9wIGVkaSA7IHBvcCBlYnAgOyByZXQgMHgxNA0KICAgMHgwODA3MGQ3MyA6IHBvcCBlYnggOyBwb3AgZXNpIDsgcG9wIGVkaSA7IHBvcCBlYnAgOyByZXQgMHhjDQogICAweDA4MDQ4NTQ3IDogcG9wIGVieCA7IHBvcCBlc2kgOyBwb3AgZWRpIDsgcG9wIGVicCA7IHJldCA0DQogICAweDA4MDQ5YmZkIDogcG9wIGVieCA7IHBvcCBlc2kgOyBwb3AgZWRpIDsgcG9wIGVicCA7IHJldCA4DQogICAweDA4MDQ4OTEzIDogcG9wIGVieCA7IHBvcCBlc2kgOyBwb3AgZWRpIDsgcmV0DQogICAweDA4MDQ5YTE5IDogcG9wIGVieCA7IHBvcCBlc2kgOyBwb3AgZWRpIDsgcmV0IDQNCiAgIDB4MDgwNDlhOTQgOiBwb3AgZWJ4IDsgcG9wIGVzaSA7IHJldA0KICAgMHgwODA0ODFjOSA6IHBvcCBlYnggOyByZXQNCiAgIDB4MDgwZDdkM2MgOiBwb3AgZWJ4IDsgcmV0IDB4NmY5DQogICAweDA4MDk5Yzg3IDogcG9wIGVieCA7IHJldCA4DQogICAweDA4MDZlYjkxIDogcG9wIGVjeCA7IHBvcCBlYnggOyByZXQNCiAgIDB4MDgwNjMzNmIgOiBwb3AgZWRpIDsgcG9wIGVzaSA7IHBvcCBlYnggOyByZXQNCiAgIDB4MDgwNmViOTAgOiBwb3AgZWR4IDsgcG9wIGVjeCA7IHBvcCBlYnggOyByZXQNCiAgIDB4MDgwOWRkZDkgOiBwb3AgZXMgOyBwb3AgZWF4IDsgcG9wIGVieCA7IHBvcCBlc2kgOyBwb3AgZWRpIDsgcmV0DQogICAweDA4MDZlYjY4IDogcG9wIGVzaSA7IHBvcCBlYnggOyBwb3AgZWR4IDsgcmV0DQogICAweDA4MDVjODIwIDogcG9wIGVzaSA7IHBvcCBlYnggOyByZXQNCiAgIDB4MDgwNTAyNTYgOiBwb3AgZXNwIDsgcG9wIGVieCA7IHBvcCBlc2kgOyBwb3AgZWRpIDsgcG9wIGVicCA7IHJldA0KICAgMHgwODA3YjZlZCA6IHBvcCBzcyA7IHBvcCBlYnggOyByZXQNCiAgIA0KICAgIyDpgInmi6kweDA4MDZlYjkwLOWPr+aOp+WItmVieOOAgWVjeOS7peWPimVieA0KICAgcG9wX2VkeF9lY3hfZWJ4X3JldCA9IDB4MDgwNmViOTANCiAgIGBgYGANCg0KICAgKiDnrKzkuozkuKrlj4LmlbAsZWN45Li6MA0KDQogICAqIOesrOS4ieS4quWPguaVsCxlZHjkuLowDQoNCjMuIOiOt+WPllNoZWxsLOaehOW7ukV4cOWmguS4izoNCg0KYGBgYHB5dGhvbg0KZnJvbSBwd24gaW1wb3J0ICoNCg0KcCA9IHByb2Nlc3MoJy4vcmV0MnN5c2NhbGwnKQ0KDQpwb3BfZWF4X3JldCA9IDB4MDgwYmIxOTYNCnBvcF9lZHhfZWN4X2VieF9yZXQgPSAweDA4MDZlYjkwDQppbnRfMHg4MCA9IDB4MDgwNDk0MjENCmJpbnNoID0gMHg4MGJlNDA4DQpwYXlsb2FkID0gZmxhdChbJ0EnICogMTEyLCBwb3BfZWF4X3JldCwgMHhiLCBwb3BfZWR4X2VjeF9lYnhfcmV0LCAwLCAwLCBiaW5zaCwgaW50XzB4ODBdKQ0KcC5zZW5kbGluZShwYXlsb2FkKQ0KcC5pbnRlcmFjdGl2ZSgpDQpgYGBgDQoNCiMjIyByZXQybGliYw0KDQpgcmV0MmxpYmNgOuaOp+WItuWHveaVsOeahOaJp+ihjGxpYmPkuK3nmoTlh73mlbAs6YCa5bi45piv6L+U5Zue6Iez5p+Q5Liq5Ye95pWw55qEcGx05aSE5oiW6ICF5Ye95pWw55qE5YW35L2T5L2N572uKOWNs+WHveaVsOWvueW6lOeahGdvdOihqOmhueeahOWGheWuuSkNCg0K5LiA6Iis5oOF5Ya15LiLLOaIkeS7rOS8mumAieaLqeaJp+ihjGBzeXN0ZW0oIi9iaW4vc2giKWAs5pWF6ICM5q2k5pe25oiR5Lus6ZyA6KaB55+l6YGTc3lzdGVt5Ye95pWw55qE5Zyw5Z2ALg0KDQo9Pea1i+ivleahiOS+izEo5pyJc2jlrZfnrKbkuLLlnLDlnYDjgIHmnIlzeXN0ZW3lh73mlbBwbHQpPT0s5aaC5LiLOg0KDQohW3JldDJsaWJjMea1i+ivleS7o+eggV0oLi9pbWFnZXMvcmV0MmxpYmMxJUU2JUI1JThCJUU4JUFGJTk1JUU0JUJCJUEzJUU3JUEwJTgxLnBuZykNCg0KYGBgYGJhc2gNCiQgUk9QZ2FkZ2V0IC0tYmluYXJ5IHJldDJsaWJjMSAtLXN0cmluZyAnL2Jpbi9zaCcgICAgICANClN0cmluZ3MgaW5mb3JtYXRpb24NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KMHgwODA0ODcyMCA6IC9iaW4vc2gNCmBgYGANCg0K56iL5bqP5L+d5oqk5aaC5LiLOg0KDQpgYGBgQysrDQpBcmNoOiAgICAgICBpMzg2LTMyLWxpdHRsZQ0KUkVMUk86ICAgICAgUGFydGlhbCBSRUxSTw0KU3RhY2s6ICAgICAgTm8gY2FuYXJ5IGZvdW5kDQpOWDogICAgICAgICBOWCBlbmFibGVkDQpQSUU6ICAgICAgICBObyBQSUUgKDB4ODA0ODAwMCkNClN0cmlwcGVkOiAgIE5vDQpEZWJ1Z2luZm86ICBZZXMNCmBgYGANCg0K6I635Y+WU2hlbGws5p6E5bu6RXhw5aaC5LiLOg0KDQpgYGBgcHl0aG9uDQpmcm9tIHB3biBpbXBvcnQgKg0KDQpwID0gcHJvY2VzcygnLi9yZXQybGliYzEnKQ0KDQpiaW5zaF9hZGRyID0gMHg4MDQ4NzIwDQpzeXN0ZW1fcGx0ID0gMHgwODA0ODQ2MA0KcGF5bG9hZCA9IGZsYXQoW2InYScgKiAxMTIsIHN5c3RlbV9wbHQsIGInYicgKiA0LCBiaW5zaF9hZGRyXSkNCnAuc2VuZGxpbmUocGF5bG9hZCkNCg0KcC5pbnRlcmFjdGl2ZSgpDQpgYGBgDQoNCj095rWL6K+V5qGI5L6LMijml6BzaOWtl+espuS4suWcsOWdgOOAgeaciXN5c3RlbeWHveaVsHBsdCk9PSzlpoLkuIs6DQoNCiFbcmV0MmxpYmMy5rWL6K+V5Luj56CBXSguL2ltYWdlcy9yZXQybGliYzIlRTYlQjUlOEIlRTglQUYlOTUlRTQlQkIlQTMlRTclQTAlODEucG5nKQ0KDQpgYGBgYmFzaA0KJCBST1BnYWRnZXQgLS1iaW5hcnkgcmV0MmxpYmMyIC0tc3RyaW5nICcvYmluL3NoJyAgICAgIA0KU3RyaW5ncyBpbmZvcm1hdGlvbg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpgYGBgDQoNCueoi+W6j+S/neaKpOWmguS4izoNCg0KYGBgQysrDQpBcmNoOiAgICAgICBpMzg2LTMyLWxpdHRsZQ0KUkVMUk86ICAgICAgUGFydGlhbCBSRUxSTw0KU3RhY2s6ICAgICAgTm8gY2FuYXJ5IGZvdW5kDQpOWDogICAgICAgICBOWCBlbmFibGVkDQpQSUU6ICAgICAgICBObyBQSUUgKDB4ODA0ODAwMCkNClN0cmlwcGVkOiAgIE5vDQpEZWJ1Z2luZm86ICBZZXMNCmBgYA0KDQrojrflj5ZTaGVsbCzmnoTlu7pFeHDlpoLkuIs6DQoNCmBgYGBweXRob24NCmZyb20gcHduIGltcG9ydCAqDQoNCnAgPSBwcm9jZXNzKCcuL3JldDJsaWJjMicpDQoNCmdldHNfcGx0ID0gMHgwODA0ODQ2MA0Kc3lzdGVtX3BsdCA9IDB4MDgwNDg0OTANCnBvcF9lYnhfcmV0ID0gMHgwODA0ODQzZA0KYnVmMiA9IDB4ODA0YTA4MA0KIyBwb3BfZWJ4X3JldDpnZXRz5Ye95pWw6L+U5Zue5Zyw5Z2ALOWwhmdldHPlh73mlbDlj4LmlbDlvLnlh7rmoIgsIOaJp+ihjHN5c3RlbV9wbHQNCiMgYidiJyAqIDQ6c3lzdGVt5Ye95pWw6L+U5Zue5Zyw5Z2ADQpwYXlsb2FkID0gZmxhdChbYidhJyAqIDExMiwgZ2V0c19wbHQsIHBvcF9lYnhfcmV0LCBidWYyLCBzeXN0ZW1fcGx0LCBiJ2InICogNCwgYnVmMl0pDQpwcmludChwYXlsb2FkKQ0KcC5zZW5kbGluZShwYXlsb2FkKQ0KDQpwLnNlbmRsaW5lKGInL2Jpbi9zaCcpDQpwLmludGVyYWN0aXZlKCkNCmBgYGANCg0KPT3mtYvor5XmoYjkvoszKOaXoHNo5a2X56ym5Liy5Zyw5Z2A44CB5pegc3lzdGVt5Ye95pWwcGx0KT09LOWmguS4izoNCg0KIVtyZXQybGliYzPmtYvor5Xku6PnoIFdKC4vaW1hZ2VzL3JldDJsaWJjMyVFNiVCNSU4QiVFOCVBRiU5NSVFNCVCQiVBMyVFNyVBMCU4MS5wbmcpDQoNCueoi+W6j+S/neaKpOWmguS4izoNCg0KYGBgQysrDQpBcmNoOiAgICAgICBpMzg2LTMyLWxpdHRsZQ0KUkVMUk86ICAgICAgUGFydGlhbCBSRUxSTw0KU3RhY2s6ICAgICAgTm8gY2FuYXJ5IGZvdW5kDQpOWDogICAgICAgICBOWCBlbmFibGVkDQpQSUU6ICAgICAgICBObyBQSUUgKDB4ODA0ODAwMCkNClN0cmlwcGVkOiAgIE5vDQpEZWJ1Z2luZm86ICBZZXMNCmBgYA0KDQpgc3lzdGVtYOWHveaVsOWcsOWdgOiOt+WPluWmguS4izoNCg0KKiBzeXN0ZW3lh73mlbDlsZ7kuo5saWJj5bqTLGxpYmMuc2/liqjmgIHpk77mjqXlupPnmoTlh73mlbDkuYvpl7Tnm7jlr7nlgY/np7vmmK/lm7rlrprnmoQuDQoqIOWNs+S9v+eoi+W6j+aciUFTTFLkv53miqQs5L2G5LiN566h5pivMzLkvY3ov5jmmK82NOS9jei/m+eoiyzlnLDlnYDnmoTkvY4xMuS9jeW5tuS4jeS8muWPkeeUn+WPmOWMli5HaXRodWLkuIrmnIlbTGliY+WBj+enu+aVsOaNruW6k10oaHR0cHM6Ly9naXRodWIuY29tL25pa2xhc2IvbGliYy1kYXRhYmFzZSkNCiog5rOE6Zyy5b2T5YmN56iL5bqP6L+Q6KGM6L+H56iL5LitbGliY+eahGdvdOihqOafkOWHveaVsOWcsOWdgCjlpoJgX19saWJjX3N0YXJ0X21haW5gKSzmoLnmja7kuIrov7BgTGliY+WBj+enu+aVsOaNruW6k2DmiJblhbbku5bmlrnlvI/noa7lrppMaWJj54mI5pysLijnlLHkuo5saWJj55qE5bu26L+f57uR5a6a5py65Yi2LOaIkeS7rOmcgOimgeazhOa8j+W3sue7j+aJp+ihjOi/h+eahOWHveaVsOeahOWcsOWdgCkNCiog5b2T5YmN56iL5bqP6L+Q6KGM6L+H56iL5LitYF9fbGliY19zdGFydF9tYWluYOWcsOWdgGDlh4/ljrtgTGliY+W6k+S4reeahGBfX2xpYmNfc3RhcnRfbWFpbmDlnLDlnYAs5b6X5YiwQVNMUuWKoOi9veebuOWvueWBj+enuy4NCiogQVNMUuWKoOi9veebuOWvueWBj+enu+WcsOWdgGDliqDkuIpgbGliY+W6k+S4reeahGBzeXN0ZW1g5Zyw5Z2ALOW+l+WIsHN5c3RlbeWunumZheWKoOi9veWcsOWdgC4NCg0K5Yip55So6L+H56iL5aaC5LiLOg0KDQoxLiDms4TpnLJgX19saWJjX3N0YXJ0X21haW5g5Lul5Y+KYGdldHNg5Ye95pWw5Zyw5Z2ALg0KDQpgYGBgcHl0aG9uDQpmcm9tIHB3biBpbXBvcnQgKg0KI2NvbnRleHQubG9nX2xldmVsID0gJ2RlYnVnJw0KDQpwID0gcHJvY2VzcygnLi9yZXQybGliYzMnKQ0KcmV0MmxpYmMzID0gRUxGKCcuL3JldDJsaWJjMycpDQoNCnB1dHNfcGx0ID0gcmV0MmxpYmMzLnBsdFsncHV0cyddDQpsaWJjX3N0YXJ0X21haW5fZ290ID0gcmV0MmxpYmMzLmdvdFsnX19saWJjX3N0YXJ0X21haW4nXQ0KZ2V0c19nb3QgPSByZXQybGliYzMuZ290WydnZXRzJ10NCnBvcF9lYnhfcmV0ID0gMHgwODA0ODQxZA0KDQpwYXlsb2FkID0gZmxhdChbYidBJyAqIDExMiwgcHV0c19wbHQsIHBvcF9lYnhfcmV0LCBsaWJjX3N0YXJ0X21haW5fZ290XSwgcHV0c19wbHQsIGInQScgKiA0LCBnZXRzX2dvdCkNCnAuc2VuZGxpbmVhZnRlcihiJ0NhbiB5b3UgZmluZCBpdCAhPycsIHBheWxvYWQpDQoNCmxpYmNfc3RhcnRfbWFpbl9hZGRyID0gdTMyKHAucmVjdmxpbmUoKVswOjRdKQ0KZ2V0c19hZGRyID0gdTMyKHAucmVjdmxpbmUoKVswOjRdKQ0KcHJpbnQoZiJfX2xpYmNfc3RhcnRfbWFpbjp7aGV4KGxpYmNfc3RhcnRfbWFpbl9hZGRyKX1cbmdldHM6e2hleChnZXRzX2FkZHIpfVxuIikNCg0KIyDovpPlh7rlpoLkuIs6DQpfX2xpYmNfc3RhcnRfbWFpbjoweGY3YzhkZDgwDQpnZXRzOjB4ZjdjZTQ2MzANCmBgYGANCg0KMi4g5qC55o2u5LiK6L+w5rOE6Zyy55qE5Zyw5Z2ALCDlnKhbbGliYyBkYXRhYmFzZSBzZWFyY2hdKGh0dHBzOi8vbGliYy5ibHVrYXQubWUvKeafpeivoizojrflj5ZsaWJj54mI5pysLg0KDQohW+iOt+WPlmxpYmPniYjmnKxdKC4vaW1hZ2VzLyVFOCU4RSVCNyVFNSU4RiU5NmxpYmMlRTclODklODglRTYlOUMlQUMucG5nKQ0KDQozLiDojrflj5Zgc3lzdGVtYOWHveaVsOWcsOWdgOS7peWPimAvYmluL3NoYOWtl+espuS4suWcsOWdgA0KDQo0LiDmiafooYzljp/nqIvluo8s6Kem5Y+R5qCI5rqi5Ye6LOaJp+ihjGBzeXN0ZW0oJy9iaW4vc2gnKWANCg0KYGBgYHB5dGhvbg0KZnJvbSBwd24gaW1wb3J0ICoNCiNjb250ZXh0LmxvZ19sZXZlbCA9ICdkZWJ1ZycNCg0KcCA9IHByb2Nlc3MoJy4vcmV0MmxpYmMzJykNCnJldDJsaWJjMyA9IEVMRignLi9yZXQybGliYzMnKQ0KbGliYzYgPSBFTEYoJy4vbGliYzZfMi40MC0zX2kzODYuc28nKQ0KDQpwdXRzX3BsdCA9IHJldDJsaWJjMy5wbHRbJ3B1dHMnXQ0KbGliY19zdGFydF9tYWluX2dvdCA9IHJldDJsaWJjMy5nb3RbJ19fbGliY19zdGFydF9tYWluJ10NCm1haW4gPSByZXQybGliYzMuc3ltYm9sc1snbWFpbiddDQoNCnBheWxvYWQgPSBmbGF0KFtiJ0EnICogMTEyLCBwdXRzX3BsdCwgbWFpbiwgbGliY19zdGFydF9tYWluX2dvdF0pDQpwLnNlbmRsaW5lYWZ0ZXIoYidDYW4geW91IGZpbmQgaXQgIT8nLCBwYXlsb2FkKQ0KDQpsaWJjX3N0YXJ0X21haW5fYWRkciA9IHUzMihwLnJlY3YoKVswOjRdKQ0KbGliY2Jhc2UgPSBsaWJjX3N0YXJ0X21haW5fYWRkciAtIGxpYmM2LnN5bWJvbHNbJ19fbGliY19zdGFydF9tYWluJ10NCnN5c3RlbV9hZGRyID0gbGliY2Jhc2UgKyBsaWJjNi5zeW1ib2xzWydzeXN0ZW0nXQ0KYmluc2hfYWRkciA9IGxpYmNiYXNlICsgbGlzdChsaWJjNi5zZWFyY2goJy9iaW4vc2hceDAwJykpWzBdDQoNCnByaW50KCJnZXQgc2hlbGwiKQ0KcGF5bG9hZCA9IGZsYXQoW2InQScgKiAxMDQsIHN5c3RlbV9hZGRyLCBiJ0InICogNCwgYmluc2hfYWRkcl0pDQpwLnNlbmRsaW5lKHBheWxvYWQpDQoNCnAuaW50ZXJhY3RpdmUoKQ0KYGBgYA0KDQojIyMgcmV0MmNzdQ0KDQoqIOWcqDY05L2N56iL5bqP5LitLOWHveaVsOeahOWJjTbkuKrlj4LmlbDpgJrov4flr4TlrZjlmagoUkRJ44CBUlNJ44CBUkRY44CBUkNY44CBUjjjgIFSOSnkvKDpgJIu5aSn5aSa5pWw5oOF5Ya15LiLLOW+iOmavuaJvuWIsOavj+S4gOS4quWvhOWtmOWZqOWvueW6lOeahGdhZGdldHMu5q2k5pe25Y+v5Yip55SoYF9fbGliY19jc3VfaW5pdGDlh73mlbDkuK3nmoRnYWRnZXRzLg0KDQoqIOi/meS4quWHveaVsOaYr+eUqOadpeWvuWxpYmPov5vooYzliJ3lp4vljJbmk43kvZznmoQs6ICM5LiA6Iis55qE56iL5bqP6YO95Lya6LCD55SobGliY+WHveaVsCzmiYDku6Xov5nkuKrlh73mlbDkuIDlrprkvJrlrZjlnKguDQoNCumAmui/h+aehOmAoOagiOS4iueahOaVsOaNrizmjqfliLblr4TlrZjlmags6L+b6ICM5ZyoMHg0MDA1RjnlpITov5vooYzlh73mlbDosIPnlKguDQoNCiFbbGliY19jc3VHYWRnZXRzXSguL2ltYWdlcy9saWJjX2NzdUdhZGdldHMucG5nKQ0KDQoqIGAweDQwMDYwNi0weDQwMDYyOGA65Yip55So5qCI5rqi5Ye65p6E6YCg5qCI5LiK5pWw5o2u5p2l5o6n5Yi2cmJ444CBcmJw44CBcjEy44CBcjEz44CBcjE044CBcjE15a+E5a2Y5ZmoLuWvueS6jmBhZGQgcnNwIDM4aGAs6ZyA6KaB5aGr5YWFMzjlrZfoioIuDQoqIGAweDQwMDVGMC0weDQwMDVGOWA66YCa6L+HcjEzZOOAgXIxNOOAgXIxNSzmjqfliLbmjqXkuIvmnaXlh73mlbDosIPnlKjnmoTlj4LmlbAu6YCa5bi45bCGcmJ46K6+572u5Li6MCzov5nmoLdyMTLlsLHlrZjlgqjopoHosIPnlKjnmoTlh73mlbDlnLDlnYAuDQoqIGAweDQwMDVGRC0weDQwMDYwNGA65o6n5Yi2cmJ45LiOcmJw5LmL6Ze055qE5YWz57O75Li6YHJieCArIDEgPSByYnBgLOi/meagt+WwseS4jeS8muaJp+ihjGBsb2NfNDAwNUYwYCzov5vogIznu6fnu63miafooYzkuIvpnaLnmoTmsYfnvJbku6PnoIEu6YCa5bi46K6pcmJ4ID0gMCwgcmJwID0gMS4NCg0KPT3mtYvor5Xku6PnoIHlpoLkuIs6PT0NCg0KIVtyZXQyY3N15rWL6K+V5Luj56CBXSguL2ltYWdlcy9yZXQyY3N1JUU2JUI1JThCJUU4JUFGJTk1JUU0JUJCJUEzJUU3JUEwJTgxLnBuZykNCg0K56iL5bqP5Lit5rKh5pyJYHN5c3RlbWDlh73mlbDlnLDlnYAs5Lmf5rKh5pyJYC9iaW4vc2hg5a2X56ym5LiyLg0KDQo9Peeoi+W6j+S/neaKpOWmguS4izo9PQ0KDQpgYGBgQysrDQpBcmNoOiAgICAgICBhbWQ2NC02NC1saXR0bGUNClJFTFJPOiAgICAgIFBhcnRpYWwgUkVMUk8NClN0YWNrOiAgICAgIE5vIGNhbmFyeSBmb3VuZA0KTlg6ICAgICAgICAgTlggZW5hYmxlZA0KUElFOiAgICAgICAgTm8gUElFICgweDQwMDAwMCkNClN0cmlwcGVkOiAgIE5vDQpgYGBgDQoNCj095Yip55So6L+H56iL5aaC5LiLOj09DQoNCjEuIOiuoeeul+e8k+WGsuWMuuWIsOi/lOWbnuWcsOWdgOeahOi3neemuy4NCg0KYGBgYHB5dGhvbg0KZnJvbSBwd24gaW1wb3J0ICoNCg0KYnVmZmVyX3NpemUgPSAzMDANCnBhdHRlcm4gPSBjeWNsaWMoYnVmZmVyX3NpemUpDQpwcmludChwYXR0ZXJuKQ0KDQpjcmFzaF9hZGRyZXNzID0gMHg2MjYxNjE2YjYyNjE2MTZhDQpvZmZzZXQgPSBjeWNsaWNfZmluZChjcmFzaF9hZGRyZXNzKQ0KcHJpbnQoZiJvZmZzZXQ6IHtvZmZzZXR9IikNCg0KIyDovpPlh7rlpoLkuIs6DQpvZmZzZXQ6IDEzNg0KYGBgYA0KDQoyLiBwYXlsb2FkMTrliKnnlKjmoIjmuqLlh7rmiafooYxgbGliY19jc3VfaW5pdGBnYWRnZXRzLOiOt+WPlndyaXRl5Lul5Y+KcmVhZOWHveaVsOWcsOWdgCzlubbkvb/lvpfnqIvluo/ph43mlrDmiafooYxtYWlu5Ye95pWwLg0KDQpgYGBgcHl0aG9uDQojIOe7k+aenOWmguS4izoNCndyaXRlX2FkZHI6IDB4N2Y4Y2Y1ZmZmMjAwDQpyZWFkX2FkZHI6IDB4N2ZmYTBhNjUyNmQwDQpgYGBgDQoNCjMuIOagueaNruS4iui/sHJlYWTku6Xlj4p3cml0ZeWHveaVsOWcsOWdgCzmn6Xor6JbbGliYyBkYXRhYmFzZSBzZWFyY2hdKGh0dHBzOi8vbGliYy5ibHVrYXQubWUvKSzojrflj5ZsaWJj54mI5pysLOW5tuiuoeeul2V4ZWN2ZeWHveaVsOWcsOWdgC4NCjQuIHBheWxvYWQyOuWIqeeUqOagiOa6ouWHuuaJp+ihjGBsaWJjX2NzdV9pbml0YGdhZGdldHMs5ZCRYnNz5q615YaZ5YWlZXhlY3Zl5Zyw5Z2A5Lul5Y+KJy9iaW4vc2gn5Zyw5Z2ALOW5tuS9v+W+l+eoi+W6j+mHjeaWsOaJp+ihjG1haW7lh73mlbAuDQo1LiBwYXlsb2FkMzrliKnnlKjmoIjmuqLlh7rmiafooYxgbGliY19jc3VfaW5pdGBnYWRnZXRzLOaJp+ihjGBleGVjdmUoJy9iaW4vc2gnKWDojrflj5ZzaGVsbC4NCg0K5qCI57uT5p6E5Zu+5aaC5LiLOg0KDQohW3JldDJjc3VdKC4vaW1hZ2VzL3JldDJjc3UucG5nKQ0KDQrlrozmlbRFeHDnpLrkvovlpoLkuIs6DQoNCmBgYGBweXRob24NCmZyb20gcHduIGltcG9ydCAqDQojY29udGV4dC5sb2dfbGV2ZWwgPSAnZGVidWcnDQoNCnB3bl9maWxlID0gJy4vcmV0MmNzdScNCnAgPSBwcm9jZXNzKHB3bl9maWxlKQ0KZWxmX3JldDJjc3UgPSBFTEYocHduX2ZpbGUpDQptYWluX2FkZHIgPSBlbGZfcmV0MmNzdS5zeW1ib2xzWydtYWluJ10NCg0Kc3RhY2tfb2Zmc2V0ID0gMTM2DQpmYWtlX3JicCA9IGZha2VfcnNwPSBiJ0InICogOA0KDQpkZWYgY3N1X3BheWxvYWQoY2FsbF9hZGRyLCBhcmcxLCBhcmcyLCBhcmczLCByZXRfYWRkcikgLT4gYnl0ZXM6DQogICAgIyAudGV4dDowMDAwMDAwMDAwNDAwNUYwICAgICAgICAgICAgICAgICBtb3YgICAgIHJkeCwgcjE1DQogICAgIyAudGV4dDowMDAwMDAwMDAwNDAwNUYzICAgICAgICAgICAgICAgICBtb3YgICAgIHJzaSwgcjE0DQogICAgIyAudGV4dDowMDAwMDAwMDAwNDAwNUY2ICAgICAgICAgICAgICAgICBtb3YgICAgIGVkaSwgcjEzZA0KICAgICMgLnRleHQ6MDAwMDAwMDAwMDQwMDVGOSAgICAgICAgICAgICAgICAgY2FsbCAgICBxd29yZCBwdHIgW3IxMityYngqOF0NCiAgICAjIC50ZXh0OjAwMDAwMDAwMDA0MDA1RkQgICAgICAgICAgICAgICAgIGFkZCAgICAgcmJ4LCAxDQogICAgIyAudGV4dDowMDAwMDAwMDAwNDAwNjAxICAgICAgICAgICAgICAgICBjbXAgICAgIHJieCwgcmJwDQogICAgIyAudGV4dDowMDAwMDAwMDAwNDAwNjA0ICAgICAgICAgICAgICAgICBqbnogICAgIHNob3J0IGxvY180MDA1RjANCiAgICAjIC50ZXh0OjAwMDAwMDAwMDA0MDA2MDYNCiAgICAjIC50ZXh0OjAwMDAwMDAwMDA0MDA2MDYgbG9jXzQwMDYwNjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ09ERSBYUkVGOiBfX2xpYmNfY3N1X2luaXQrNDjihpFqDQogICAgIyAudGV4dDowMDAwMDAwMDAwNDAwNjA2ICAgICAgICAgICAgICAgICBtb3YgICAgIHJieCwgW3JzcCszOGgrdmFyXzMwXQ0KICAgICMgLnRleHQ6MDAwMDAwMDAwMDQwMDYwQiAgICAgICAgICAgICAgICAgbW92ICAgICByYnAsIFtyc3ArMzhoK3Zhcl8yOF0NCiAgICAjIC50ZXh0OjAwMDAwMDAwMDA0MDA2MTAgICAgICAgICAgICAgICAgIG1vdiAgICAgcjEyLCBbcnNwKzM4aCt2YXJfMjBdDQogICAgIyAudGV4dDowMDAwMDAwMDAwNDAwNjE1ICAgICAgICAgICAgICAgICBtb3YgICAgIHIxMywgW3JzcCszOGgrdmFyXzE4XQ0KICAgICMgLnRleHQ6MDAwMDAwMDAwMDQwMDYxQSAgICAgICAgICAgICAgICAgbW92ICAgICByMTQsIFtyc3ArMzhoK3Zhcl8xMF0NCiAgICAjIC50ZXh0OjAwMDAwMDAwMDA0MDA2MUYgICAgICAgICAgICAgICAgIG1vdiAgICAgcjE1LCBbcnNwKzM4aCt2YXJfOF0NCiAgICAjIC50ZXh0OjAwMDAwMDAwMDA0MDA2MjQgICAgICAgICAgICAgICAgIGFkZCAgICAgcnNwLCAzOGgNCiAgICAjIC50ZXh0OjAwMDAwMDAwMDA0MDA2MjggICAgICAgICAgICAgICAgIHJldG4NCiAgICBjc3VfY2FsbF9hZGRyID0gMHg0MDA1RjANCiAgICBjc3VfYmVnaW5fYWRkciA9IDB4NDAwNjA2DQogICAgY3N1X2VuZF9hZGRyID0gMHg0MDA2MjgNCiAgICBzdGFja19maWxsID0gYidDJyAqIDB4MzgNCg0KICAgIHJieCA9IDANCiAgICByYnAgPSAxDQogICAgcjEyID0gY2FsbF9hZGRyDQogICAgcjEzZCA9IGFyZzENCiAgICByMTQgPSBhcmcyDQogICAgcjE1ID0gYXJnMw0KICAgIHBheWxvYWQgPSBmbGF0KGInQScqIHN0YWNrX29mZnNldCwNCiAgICAgICAgICAgICAgICAgICBwNjQoY3N1X2JlZ2luX2FkZHIpLA0KICAgICAgICAgICAgICAgICAgIGZha2VfcnNwLCANCiAgICAgICAgICAgICAgICAgICBwNjQocmJ4KSwgDQogICAgICAgICAgICAgICAgICAgcDY0KHJicCksIA0KICAgICAgICAgICAgICAgICAgIHA2NChyMTIpLCANCiAgICAgICAgICAgICAgICAgICBwNjQocjEzZCksIA0KICAgICAgICAgICAgICAgICAgIHA2NChyMTQpLCANCiAgICAgICAgICAgICAgICAgICBwNjQocjE1KSwgDQogICAgICAgICAgICAgICAgICAgcDY0KGNzdV9jYWxsX2FkZHIpLCANCiAgICAgICAgICAgICAgICAgICBzdGFja19maWxsLCANCiAgICAgICAgICAgICAgICAgICBwNjQocmV0X2FkZHIpKQ0KICAgIHJldHVybiBwYXlsb2FkDQogICAgDQpnZGJfY29tbWFuZHMgPSBmJycnDQogICAgYiBleGl0DQogICAgYiBfZXhpdA0KJycnDQoNCg0KcC5yZWN2dW50aWwoJ0hlbGxvLCBXb3JsZFxuJykNCiNnZGIuYXR0YWNoKHAsIGdkYl9jb21tYW5kcykNCg0KIyB3cml0ZSAoMSxhZGRyZXNzLGxlbikNCndyaXRlX2dvdCA9IGVsZl9yZXQyY3N1LmdvdFsnd3JpdGUnXQ0KcmVhZF9nb3QgPSBlbGZfcmV0MmNzdS5nb3RbJ3JlYWQnXQ0KcGF5bG9hZDEgPSBjc3VfcGF5bG9hZCh3cml0ZV9nb3QsIDEsIHJlYWRfZ290LCA4LCBtYWluX2FkZHIpDQpwLnNlbmQocGF5bG9hZDEpDQoNCiN3cml0ZV9hZGRyID0gdTY0KHAucmVjdig4KSkNCiNwcmludChmIndyaXRlX2FkZHI6e2hleCh3cml0ZV9hZGRyKX0iKQ0KDQpyZWFkX2FkZHIgPSB1NjQocC5yZWN2KDgpKQ0KcHJpbnQoZiJyZWFkX2FkZHI6e2hleChyZWFkX2FkZHIpfSIpDQoNCiMgY2FsYyBleGVjdmVfYWRkcg0KZWxmX2xpYmM2ID0gRUxGKCcuL2xpYmM2XzIuNDAtM19hbWQ2NC5zbycpDQpsaWJjX2Jhc2UgPSByZWFkX2FkZHIgLSBlbGZfbGliYzYuc3ltYm9sc1sncmVhZCddDQpleGVjdmVfYWRkciA9IGxpYmNfYmFzZSArIGVsZl9saWJjNi5zeW1ib2xzWydleGVjdmUnXQ0KDQojIHdyaXRlICcvYmluL3NoXHgwMCcNCiMgcmVhZCgwLGJzc19iYXNlLDE2KQ0KcC5yZWN2dW50aWwoJ0hlbGxvLCBXb3JsZFxuJykNCmJzc19iYXNlID0gZWxmX3JldDJjc3UuYnNzKCkNCnBheWxvYWQyID0gY3N1X3BheWxvYWQocmVhZF9nb3QsIDAsIGJzc19iYXNlLCAxNiwgbWFpbl9hZGRyKQ0KcC5zZW5kKHBheWxvYWQyKQ0KcC5zZW5kbGluZShwNjQoZXhlY3ZlX2FkZHIpICsgYicvYmluL3NoXHgwMCcpDQoNCnAucmVjdnVudGlsKCdIZWxsbywgV29ybGRcbicpDQpwYXlsb2FkMyA9IGNzdV9wYXlsb2FkKGJzc19iYXNlLCBic3NfYmFzZSArIDB4OCwgMCwgMCwgbWFpbl9hZGRyKQ0KcC5zZW5kKHBheWxvYWQzKQ0KDQpwLmludGVyYWN0aXZlKCkNCmBgYGANCg0KIyMjIHNyb3ANCg0KYFNST1AoU2lncmV0dXJuLW9yaWVudGVkIHByb2dyYW1taW5nKWDmmK/kuIDnp43liKnnlKjnqIvluo/kuK3njrDmnInnmoTku6PnoIHniYfmrrXmnaXnu5Xov4fmn5DkupvlronlhajpmZDliLbnmoTmioDmnK8s5pivUk9QKFJldHVybi1vcmllbnRlZCBwcm9ncmFtbWluZynnmoTkuIDnp43lj5jkvZMuU1JPUOeahOWFs+mUruWcqOS6juWIqeeUqOaTjeS9nOezu+e7n+eahOS4gOS4queJueauiuacuuWItjpg5L+h5Y+35aSE55CGYC4NCg0Kc2lnbmFs5py65Yi25piv57G7VW5peOezu+e7n+i/m+eoi+S5i+mXtOebuOS6kuS8oOmAkuS/oeaBr+eahOS4gOenjeaWueazlS7kuIDoiKws5oiR5Lus5Lmf56ew5YW25Li66L2v5Lit5pat5L+h5Y+35oiW6L2v5Lit5patLuWmgui/m+eoi+S5i+mXtOWPr+S7pemAmui/h+ezu+e7n+iwg+eUqGtpbGzmnaXlj5HpgIHova/kuK3mlq3kv6Hmga8u5LiA6Iis5p2l6K+05L+h5Y+35py65Yi255qE5bi46KeB5q2l6aqk5aaC5LiL5Zu+5omA56S6Og0KDQohW1Byb2Nlc3NPZlNpZ25hbEhhbmRsZXJpbmddKC4vaW1hZ2VzL1Byb2Nlc3NPZlNpZ25hbEhhbmRsZXJpbmcucG5nKQ0KDQoxLiBg5L+h5Y+35Y+R6YCB5LiO6L+b56iL5oyC6LW3YDrlhoXmoLjlkJHmn5DkuKrov5vnqIvlj5HpgIHkv6Hlj7fml7Ys6K+l6L+b56iL5Lya6KKr5pqC5pe25oyC6LW35bm26L+b5YWl5YaF5qC45oCBLg0KDQoyLiBg5L+d5a2Y5LiK5LiL5paH5ZKM5bu656uL5L+h5Y+35qCIKFNpZ25hbCBGcmFtZSlgOg0KDQogICAqIOWGheaguOS4uuivpei/m+eoi+S/neWtmOW9k+WJjeeahOS4iuS4i+aWhyzkuLvopoHmmK/lsIbmiYDmnInlr4TlrZjlmajljovlhaXmoIjkuK0uDQogICAqIOWcqOeUqOaIt+i/m+eoi+eahOWcsOWdgOepuumXtOS4rSzliJvlu7rkuIDkuKrnp7DkuLpgU2lnbmFsIEZyYW1lYOeahOe7k+aehCzov5nkuKrnu5PmnoTljIXmi6zkuobkv6Hlj7fkv6Hmga8oc2lnaW5mbynlkoznlKjmiLfkuIrkuIvmlocodWNvbnRleHQpLg0KDQogICAhW3NpZ25hbDItc3RhY2tdKC4vaW1hZ2VzL3NpZ25hbDItc3RhY2sucG5nKQ0KDQogICAqIOatpOWQjizmjqfliLbmtYHkvJrot7PovazliLDlhYjliY3ms6jlhozov4fnmoTkv6Hlj7flpITnkIblh73mlbAoYHNpZ25hbCBoYW5kbGVgKQ0KDQozLiBg5L+h5Y+35aSE55CGYDog6L+b56iL5omn6KGM5L+h5Y+35aSE55CG5Ye95pWwLOWkhOeQhuaOpeWPl+WIsOeahOS/oeWPty4NCg0KNC4gYOaJp+ihjHNpZ3JldHVybuezu+e7n+iwg+eUqGA6DQoNCiAgICogYHNpZ3JldHVybmDotJ/otKPmgaLlpI3kuYvliY3kv53lrZjnmoTkuIrkuIvmlocs5YyF5ous5bCG5omA5pyJ5Y6L5YWl5qCI5Lit55qE5a+E5a2Y5Zmo5oGi5aSNLg0KICAgKiAzMuS9jeeahGBzaWdyZXR1cm5g57O757uf6LCD55So5Y+35pivYDExOSgweDc3KWAsNjTkvY3nmoTns7vnu5/osIPnlKjlj7fmmK9gMTUoMHhmKWAuDQoNCjUuIGDmgaLlpI3ov5vnqIvmiafooYxgOuWujOaIkOS4iui/sOatpemqpOWQjizov5vnqIvnu6fnu63lhbbmraPluLjmiafooYzmtYHnqIsuDQoNCuWvueS6jnNpZ25hbCBGcmFtZeadpeivtCzkvJrlm6DkuLrmnrbmnoTnmoTkuI3lkIzogIzmnInmiYDljLrliKss6L+Z6YeM5YiG5Yir57uZ5Ye6eDg25Lul5Y+KeDY055qEc2lnY29udGV4dC4NCg0KYGBgYEMrKw0KLy8geDg2DQpzdHJ1Y3Qgc2lnY29udGV4dA0Kew0KICB1bnNpZ25lZCBzaG9ydCBncywgX19nc2g7DQogIHVuc2lnbmVkIHNob3J0IGZzLCBfX2ZzaDsNCiAgdW5zaWduZWQgc2hvcnQgZXMsIF9fZXNoOw0KICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7DQogIHVuc2lnbmVkIGxvbmcgZWRpOw0KICB1bnNpZ25lZCBsb25nIGVzaTsNCiAgdW5zaWduZWQgbG9uZyBlYnA7DQogIHVuc2lnbmVkIGxvbmcgZXNwOw0KICB1bnNpZ25lZCBsb25nIGVieDsNCiAgdW5zaWduZWQgbG9uZyBlZHg7DQogIHVuc2lnbmVkIGxvbmcgZWN4Ow0KICB1bnNpZ25lZCBsb25nIGVheDsNCiAgdW5zaWduZWQgbG9uZyB0cmFwbm87DQogIHVuc2lnbmVkIGxvbmcgZXJyOw0KICB1bnNpZ25lZCBsb25nIGVpcDsNCiAgdW5zaWduZWQgc2hvcnQgY3MsIF9fY3NoOw0KICB1bnNpZ25lZCBsb25nIGVmbGFnczsNCiAgdW5zaWduZWQgbG9uZyBlc3BfYXRfc2lnbmFsOw0KICB1bnNpZ25lZCBzaG9ydCBzcywgX19zc2g7DQogIHN0cnVjdCBfZnBzdGF0ZSAqIGZwc3RhdGU7DQogIHVuc2lnbmVkIGxvbmcgb2xkbWFzazsNCiAgdW5zaWduZWQgbG9uZyBjcjI7DQp9Ow0KDQovLyB4NjQNCnN0cnVjdCBfZnBzdGF0ZQ0Kew0KICAvKiBGUFUgZW52aXJvbm1lbnQgbWF0Y2hpbmcgdGhlIDY0LWJpdCBGWFNBVkUgbGF5b3V0LiAgKi8NCiAgX191aW50MTZfdCAgICAgICAgY3dkOw0KICBfX3VpbnQxNl90ICAgICAgICBzd2Q7DQogIF9fdWludDE2X3QgICAgICAgIGZ0dzsNCiAgX191aW50MTZfdCAgICAgICAgZm9wOw0KICBfX3VpbnQ2NF90ICAgICAgICByaXA7DQogIF9fdWludDY0X3QgICAgICAgIHJkcDsNCiAgX191aW50MzJfdCAgICAgICAgbXhjc3I7DQogIF9fdWludDMyX3QgICAgICAgIG14Y3JfbWFzazsNCiAgc3RydWN0IF9mcHhyZWcgICAgX3N0WzhdOw0KICBzdHJ1Y3QgX3htbXJlZyAgICBfeG1tWzE2XTsNCiAgX191aW50MzJfdCAgICAgICAgcGFkZGluZ1syNF07DQp9Ow0KDQpzdHJ1Y3Qgc2lnY29udGV4dA0Kew0KICBfX3VpbnQ2NF90IHI4Ow0KICBfX3VpbnQ2NF90IHI5Ow0KICBfX3VpbnQ2NF90IHIxMDsNCiAgX191aW50NjRfdCByMTE7DQogIF9fdWludDY0X3QgcjEyOw0KICBfX3VpbnQ2NF90IHIxMzsNCiAgX191aW50NjRfdCByMTQ7DQogIF9fdWludDY0X3QgcjE1Ow0KICBfX3VpbnQ2NF90IHJkaTsNCiAgX191aW50NjRfdCByc2k7DQogIF9fdWludDY0X3QgcmJwOw0KICBfX3VpbnQ2NF90IHJieDsNCiAgX191aW50NjRfdCByZHg7DQogIF9fdWludDY0X3QgcmF4Ow0KICBfX3VpbnQ2NF90IHJjeDsNCiAgX191aW50NjRfdCByc3A7DQogIF9fdWludDY0X3QgcmlwOw0KICBfX3VpbnQ2NF90IGVmbGFnczsNCiAgdW5zaWduZWQgc2hvcnQgY3M7DQogIHVuc2lnbmVkIHNob3J0IGdzOw0KICB1bnNpZ25lZCBzaG9ydCBmczsNCiAgdW5zaWduZWQgc2hvcnQgX19wYWQwOw0KICBfX3VpbnQ2NF90IGVycjsNCiAgX191aW50NjRfdCB0cmFwbm87DQogIF9fdWludDY0X3Qgb2xkbWFzazsNCiAgX191aW50NjRfdCBjcjI7DQogIF9fZXh0ZW5zaW9uX18gdW5pb24NCiAgICB7DQogICAgICBzdHJ1Y3QgX2Zwc3RhdGUgKiBmcHN0YXRlOw0KICAgICAgX191aW50NjRfdCBfX2Zwc3RhdGVfd29yZDsNCiAgICB9Ow0KICBfX3VpbnQ2NF90IF9fcmVzZXJ2ZWQxIFs4XTsNCn07DQpgYGBgDQoNCj09U1JPUOaUu+WHu+WOn+eQhj095aaC5LiLOg0KDQoxLiDlhoXmoLjlnKhzaWduYWzkv6Hlj7flpITnkIbov4fnqIvkuK3kuLvopoHmmK/kuLrov5vnqIvkv53lrZjkuIrkuIvmloflkozmgaLlpI3kuIrkuIvmlocu6L+Z5Liq5Y+Y5Yqo6YO95ZyoYFNpZ25hbCBGcmFtZWDkuK0uDQoyLiBgU2lnbmFsIEZyYW1lYOiiq+S/neWtmOWcqOeUqOaIt+eahOWcsOWdgOepuumXtOS4rSzkuJTnlKjmiLfmmK/lj6/ku6Xor7vlhpnnmoQuDQozLiDlhoXmoLjkuI7kv6Hlj7flpITnkIbnqIvluo/ml6DlhbMs5a6D5bm25LiN5Lya5Y676K6w5b2V6L+Z5LiqYHNpZ25hbGDlr7nlupTnmoRgU2lnbmFsIEZyYW1lYC7mlYXlvZPmiafooYxgc2lncmV0dXJuYOezu+e7n+iwg+eUqOaXtizmraTml7bnmoRgU2lnbmFsIEZyYW1lYOW5tuS4jeS4gOWumuaYr+S5i+WJjeWGheaguOS4uueUqOaIt+i/m+eoi+S/neWtmOeahGBTaWduYWwgRnJhbWVgLg0KDQo9PVNST1DmlLvlh7vmraXpqqQ9PeWmguS4izoNCg0KMS4gYOagiOaOp+WItmA66YCa6L+H57yT5Yay5Yy65rqi5Ye65oiW5YW25LuW5ryP5rSe5a6e546w5Y+v5Lul5o6n5Yi255uu5qCH6L+b56iL55qE5qCILg0KMi4gYOS8qumAoFNpZ25hbCBGcmFtZWA65pS75Ye76ICF5Zyo5qCI5LiK5Lyq6YCg5LiA5LiqYFNpZ25hbCBGcmFtZWAu5YyF5ZCr5LqG5pS75Ye76ICF5biM5pyb5oGi5aSN5Yiw55qE5a+E5a2Y5Zmo54q25oCBLOWMheaLrEVJUOaIllJJUCzov5nmoLflsLHlj6/ku6XmjqfliLbnqIvluo/nmoTmiafooYzmtYEuDQozLiBg6Kem5Y+Rc2lncmV0dXJuYDrop6blj5Fgc2lncmV0dXJu57O757uf6LCD55SoYC4NCjQuIGDmiafooYzmgbbmhI/ku6PnoIFgOuS4gOaXpmBzaWdyZXR1cm5g6KKr6Kem5Y+RLOWGheaguOS8muS7juS8qumAoOeahGBTaWduYWwgRnJhbWVg5Lit5oGi5aSN5a+E5a2Y5Zmo55qE54q25oCBLOWMheaLrEVJUOaIllJJUC7ov5nlhYHorrjmlLvlh7vogIXmjqfliLbnqIvluo/nmoTmiafooYzmtYEs5LuO6ICM5omn6KGM5Lu75oSP5Luj56CBLg0KDQo9PeWcqFNST1DmlLvlh7vkuK0s6Iul5oOz5omn6KGM5LiA57O75YiX55qE5Ye95pWwLOWPqumcgOWBmuS7peS4i+S4pOWkhOS/ruaUueWNs+WPry49PQ0KDQoxLiDmjqfliLbmoIjmjIfpkoguDQoyLiDmiorljp/mnaVyaXDmjIflkJHnmoRgc3lzY2FsbGAgZ2FkZ2V05o2i5oiQYHN5c2NhbGw7cmV0YCBnYWRnZXQNCg0K5aaC5LiL5Zu+5omA56S6LOi/meagt+W9k+avj+asoXN5c2NhbGzov5Tlm57ml7Ys5qCI5oyH6ZKI6YO95Lya5oyH5ZCR5LiL5LiA5LiqYFNpZ25hbCBGcmFtZWAu5Zug5q2k5Y+v5Lul5omn6KGM5LiA57O75YiX55qEYHNpZ3JldHVybmDlh73mlbDosIPnlKguDQoNCiFbc3JvcC1leGFtcGxlLTJdKC4vaW1hZ2VzL3Nyb3AtZXhhbXBsZS0yLnBuZykNCg0KPT3mtYvor5Xku6PnoIHlpoLkuIs6PT0NCg0KIVtzcm9w5rWL6K+V5Luj56CBXSguL2ltYWdlcy9zcm9w5rWL6K+V5Luj56CBLnBuZykNCg0KPT3nqIvluo/kv53miqTlpoLkuIs6PT0NCg0KYGBgYEMrKw0KQXJjaDogICAgICAgYW1kNjQtNjQtbGl0dGxlDQpSRUxSTzogICAgICBObyBSRUxSTw0KU3RhY2s6ICAgICAgTm8gY2FuYXJ5IGZvdW5kDQpOWDogICAgICAgICBOWCBlbmFibGVkDQpQSUU6ICAgICAgICBObyBQSUUgKDB4NDAwMDAwKQ0KYGBgYA0KDQo9PeWIqeeUqOi/h+eoi+WmguS4izo9PQ0KDQpgYGBgcHl0aG9uDQpmcm9tIHB3biBpbXBvcnQgKg0KY29udGV4dC5hcmNoID0gJ2FtZDY0Jw0KY29udGV4dC5sb2dfbGV2ZWwgPSAnZGVidWcnDQoNCiMg5qC45b+D5oCd6LevOg0KIyDpgJrov4fmjqfliLYgcmVhZCDor7vlj5bnmoTlrZfnrKbmlbDmnaXorr7nva4gUkFYIOWvhOWtmOWZqOeahOWAvO+8jOS7juiAjOaJp+ihjCBzaWdyZXR1cm4NCiMg6YCa6L+HIHN5c2NhbGwg5omn6KGMIGV4ZWN2ZSjigJwvYmluL3No4oCdLDAsMCkg5p2l6I635Y+WIHNoZWxs44CCDQoNCnAgPSBwcm9jZXNzKCcuL3Nyb3Atc21hbGxlc3QnKQ0KDQpzeXNjYWxsX3JldCA9IDB4MDAwMDAwMDAwMDQwMDBCRQ0Kc3RhcnRfYWRkciA9IDB4MDAwMDAwMDAwMDQwMDBCMA0KIyBzdGVwIDE6IOivu+WPluS4ieS4queoi+W6j+i1t+Wni+WcsOWdgA0KcGF5bG9hZCA9IHA2NChzdGFydF9hZGRyKSAqIDMNCnAuc2VuZChwYXlsb2FkKQ0KDQojIHN0ZXAgMjog5Yip55So56ys5LiA5Liq56iL5bqP6LW35aeL5Zyw5Z2A6K+75Y+W5Zyw5Z2ALOS/ruaUuei/lOWbnuWcsOWdgCjljbPnrKzkuozkuKrnqIvluo/otbflp4vlnLDlnYAp5Li65rqQ56iL5bqP55qE56ys5LqM5p2h5oyH5LukLOS4lHJheOS8muiuvue9ruS4ujEsIOaJp+ihjHdyaXRlKDEsJGVzcCwweDQwMCks5rOE6Zyy5qCI5Zyw5Z2ADQpwLnNlbmQoJ1x4YjMnKQ0Kc3RhY2tfYWRkciA9IHU2NChwLnJlY3YoKVs4OjE2XSkNCmxvZy5zdWNjZXNzKCdsZWFrIHN0YWNrIGFkZHIgOicgKyBoZXgoc3RhY2tfYWRkcikpDQoNCiMgc3RlcCAzOiDliKnnlKjnrKzkuInkuKrnqIvluo/otbflp4vlnLDlnYAs6K+75YWlcGF5bG9hZA0Kc2lnZnJhbWUgPSBTaWdyZXR1cm5GcmFtZSgpDQpzaWdmcmFtZS5yYXggPSBjb25zdGFudHMuU1lTX3JlYWQNCnNpZ2ZyYW1lLnJkaSA9IDANCnNpZ2ZyYW1lLnJzaSA9IHN0YWNrX2FkZHINCnNpZ2ZyYW1lLnJkeCA9IDB4NDAwDQpzaWdmcmFtZS5yc3AgPSBzdGFja19hZGRyDQpzaWdmcmFtZS5yaXAgPSBzeXNjYWxsX3JldA0KcGF5bG9hZCA9IHA2NChzdGFydF9hZGRyKSArIGInQScgKiA4ICsgYnl0ZXMoc2lnZnJhbWUpDQpwLnNlbmQocGF5bG9hZCkNCg0KIyBzdGVwIDQ6IOinpuWPkXNpZ3JldHVybuiwg+eUqCzmiafooYxTWVNfcmVhZCzlkJHmoIjlnLDlnYDmiYDlnKjkvY3nva7or7vlhaXmlbDmja4NCnNpZ3JldHVybiA9IHA2NChzeXNjYWxsX3JldCkgKyBiJ1x4MDAnICogNw0KcC5zZW5kKHNpZ3JldHVybikNCg0KIyBzdGVwIDU6IOaehOmAoGV4ZWN2ZSjigJgvYmluL3No4oCZLDAsMCnnmoRwYXlsb2FkDQpzaWdmcmFtZSA9IFNpZ3JldHVybkZyYW1lKCkNCnNpZ2ZyYW1lLnJheCA9IGNvbnN0YW50cy5TWVNfZXhlY3ZlDQpzaWdmcmFtZS5yZGkgPSBzdGFja19hZGRyICsgMHgxMjAgICMgIi9iaW4vc2giICdzIGFkZHINCnNpZ2ZyYW1lLnJzaSA9IDB4MA0Kc2lnZnJhbWUucmR4ID0gMHgwDQpzaWdmcmFtZS5yc3AgPSBzdGFja19hZGRyDQpzaWdmcmFtZS5yaXAgPSBzeXNjYWxsX3JldA0KDQpmcmFtZV9wYXlsb2FkID0gcDY0KHN0YXJ0X2FkZHIpICsgYidceDAwJyAqIDggKyBieXRlcyhzaWdmcmFtZSkNCnByaW50KGxlbihmcmFtZV9wYXlsb2FkKSkNCnBheWxvYWQgPSBmcmFtZV9wYXlsb2FkICsgKDB4MTIwIC0gbGVuKGZyYW1lX3BheWxvYWQpKSAqIGInXHgwMCcgKyBiJy9iaW4vc2hceDAwJw0KcC5zZW5kKHBheWxvYWQpDQoNCiMgc3RlcCA2OiDop6blj5FzaWdyZXR1cm7osIPnlKgs5omn6KGMU1lTX2V4ZWN2ZQ0KcC5zZW5kKHNpZ3JldHVybikNCg0KcC5pbnRlcmFjdGl2ZSgpDQpgYGBgDQoNCiMjIOWPguiAg+mTvuaOpQ0KDQpbQ1RGLVdpa2ldKGh0dHBzOi8vY3RmLXdpa2kub3JnL3B3bi9saW51eC91c2VyLW1vZGUvZW52aXJvbm1lbnQvKQ0KDQpb55Sx5rWF5YWl5rex5LqG6Kej5qC85byP5YyW5a2X56ym5Liy5ryP5rSeXShodHRwczovL3d3dy5mcmVlYnVmLmNvbS9hcnRpY2xlcy9zeXN0ZW0vMzE3NDI1Lmh0bWwpDQoNCltMaW51eCh4ODYpIOa8j+a0nuWIqeeUqOezu+WIl10oaHR0cHM6Ly9zcGxvaXRmdW4ud29yZHByZXNzLmNvbS8yMDE1LykNCg0KW0xpbnV4IOezu+e7n+iwg+eUqF0oaHR0cHM6Ly90eS1jaGVuLmdpdGh1Yi5pby9saW51eC1rZXJuZWwtc3lzdGVtLWNhbGwvKQ0KDQo8L2Rpdj4NCjwvZGl2Pg==