@codingame/monaco-editor-wrapper 3.4.0 → 3.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/{HTML (Eex).js → HTML (Eex)2.js} +0 -0
  2. package/dist/atd.js +90 -94
  3. package/dist/atd2.js +94 -90
  4. package/dist/css.worker.js +1 -1
  5. package/dist/d.js +3157 -84
  6. package/dist/d2.js +84 -3157
  7. package/dist/dart.js +510 -83
  8. package/dist/dart2.js +83 -510
  9. package/dist/diet.js +740 -82
  10. package/dist/diet2.js +82 -740
  11. package/dist/dml.js +155 -76
  12. package/dist/dml2.js +76 -155
  13. package/dist/dune-project.js +469 -53
  14. package/dist/dune-project2.js +53 -469
  15. package/dist/dune-workspace.js +287 -54
  16. package/dist/dune-workspace2.js +54 -287
  17. package/dist/dune.js +2948 -51
  18. package/dist/dune2.js +51 -2948
  19. package/dist/elixir.js +2335 -63
  20. package/dist/elixir2.js +63 -2335
  21. package/dist/features/cssContribution.js +1 -4
  22. package/dist/features/extensionConfigurations.js +24 -122
  23. package/dist/features/htmlContribution.js +4 -18
  24. package/dist/features/jsonContribution.js +1 -8
  25. package/dist/features/typescriptContribution.js +4 -8
  26. package/dist/{html (eex)2.js → html (eex).js} +0 -0
  27. package/dist/html.worker.js +1 -1
  28. package/dist/index.js +2178 -1355
  29. package/dist/index2.js +1354 -2186
  30. package/dist/json.worker.js +1 -1
  31. package/dist/main.js +282 -1427
  32. package/dist/ocaml.interface.js +273 -95
  33. package/dist/ocaml.interface2.js +95 -273
  34. package/dist/ocaml.js +884 -95
  35. package/dist/ocaml2.js +95 -884
  36. package/dist/r.js +657 -81
  37. package/dist/r2.js +81 -657
  38. package/dist/sdl.js +150 -78
  39. package/dist/sdl2.js +78 -150
  40. package/dist/solidity.js +1172 -56
  41. package/dist/solidity2.js +56 -1172
  42. package/dist/ts.worker.js +1 -1
  43. package/dist/vim.js +8 -8
  44. package/dist/vue-sugarss.js +390 -54
  45. package/dist/vue-sugarss2.js +54 -390
  46. package/dist/worker.js +1 -3
  47. package/package.json +29 -26
  48. package/stats.html +44 -34
@@ -1,6 +1,6 @@
1
1
  import { c as createBase64WorkerFactory } from './worker.js';
2
2
 
3
- var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y29uc3QgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24oZSl7c2V0VGltZW91dCgoKCk9PntpZihlLnN0YWNrKXtpZihvLmlzRXJyb3JOb1RlbGVtZXRyeShlKSl0aHJvdyBuZXcgbyhlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spO3Rocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spfXRocm93IGV9KSwwKX19ZW1pdChlKXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKCh0PT57dChlKX0pKX1vblVuZXhwZWN0ZWRFcnJvcihlKXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSksdGhpcy5lbWl0KGUpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpfX07ZnVuY3Rpb24gdCh0KXsoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGkpcmV0dXJuITA7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09ciYmZS5tZXNzYWdlPT09cn0pKHQpfHxlLm9uVW5leHBlY3RlZEVycm9yKHQpfWZ1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOmUuc3RhY2t0cmFjZXx8ZS5zdGFjayxub1RlbGVtZXRyeTpvLmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3Qgcj0iQ2FuY2VsZWQiO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHIpLHRoaXMubmFtZT10aGlzLm1lc3NhZ2V9fWNsYXNzIG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9IkVycm9yTm9UZWxlbWV0cnkifXN0YXRpYyBmcm9tRXJyb3IoZSl7aWYoZSBpbnN0YW5jZW9mIG8pcmV0dXJuIGU7Y29uc3QgdD1uZXcgbztyZXR1cm4gdC5tZXNzYWdlPWUubWVzc2FnZSx0LnN0YWNrPWUuc3RhY2ssdH1zdGF0aWMgaXNFcnJvck5vVGVsZW1ldHJ5KGUpe3JldHVybiJFcnJvck5vVGVsZW1ldHJ5Ij09PWUubmFtZX19ZnVuY3Rpb24gYShlKXtjb25zdCB0PXRoaXM7bGV0IG4scj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcnx8KHI9ITAsbj1lLmFwcGx5KHQsYXJndW1lbnRzKSksbn19dmFyIHM7IWZ1bmN0aW9uKGUpe2UuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbU3ltYm9sLml0ZXJhdG9yXX07Y29uc3QgdD1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbiBuKHQsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe2NvbnN0IHI9W107aWYoMD09PW4pcmV0dXJuW3IsdF07Y29uc3QgaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IobGV0IHQ9MDt0PG47dCsrKXtjb25zdCB0PWkubmV4dCgpO2lmKHQuZG9uZSlyZXR1cm5bcixlLmVtcHR5KCldO3IucHVzaCh0LnZhbHVlKX1yZXR1cm5bcix7W1N5bWJvbC5pdGVyYXRvcl06KCk9Pml9XX1lLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUuc2luZ2xlPWZ1bmN0aW9uKihlKXt5aWVsZCBlfSxlLmZyb209ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fHR9LGUuaXNFbXB0eT1mdW5jdGlvbihlKXtyZXR1cm4hZXx8ITA9PT1lW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkuZG9uZX0sZS5maXJzdD1mdW5jdGlvbihlKXtyZXR1cm4gZVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLnZhbHVlfSxlLnNvbWU9ZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiBlKWlmKHQobikpcmV0dXJuITA7cmV0dXJuITF9LGUuZmluZD1mdW5jdGlvbihlLHQpe2Zvcihjb25zdCBuIG9mIGUpaWYodChuKSlyZXR1cm4gbn0sZS5maWx0ZXI9ZnVuY3Rpb24qKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSl0KG4pJiYoeWllbGQgbil9LGUubWFwPWZ1bmN0aW9uKihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl5aWVsZCB0KHIsbisrKX0sZS5jb25jYXQ9ZnVuY3Rpb24qKC4uLmUpe2Zvcihjb25zdCB0IG9mIGUpZm9yKGNvbnN0IGUgb2YgdCl5aWVsZCBlfSxlLmNvbmNhdE5lc3RlZD1mdW5jdGlvbiooZSl7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgZSBvZiB0KXlpZWxkIGV9LGUucmVkdWNlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1uO2Zvcihjb25zdCBuIG9mIGUpcj10KHIsbik7cmV0dXJuIHJ9LGUuZm9yRWFjaD1mdW5jdGlvbihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl0KHIsbisrKX0sZS5zbGljZT1mdW5jdGlvbiooZSx0LG49ZS5sZW5ndGgpe2Zvcih0PDAmJih0Kz1lLmxlbmd0aCksbjwwP24rPWUubGVuZ3RoOm4+ZS5sZW5ndGgmJihuPWUubGVuZ3RoKTt0PG47dCsrKXlpZWxkIGVbdF19LGUuY29uc3VtZT1uLGUuY29sbGVjdD1mdW5jdGlvbihlKXtyZXR1cm4gbihlKVswXX0sZS5lcXVhbHM9ZnVuY3Rpb24oZSx0LG49KChlLHQpPT5lPT09dCkpe2NvbnN0IHI9ZVtTeW1ib2wuaXRlcmF0b3JdKCksaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOzspe2NvbnN0IGU9ci5uZXh0KCksdD1pLm5leHQoKTtpZihlLmRvbmUhPT10LmRvbmUpcmV0dXJuITE7aWYoZS5kb25lKXJldHVybiEwO2lmKCFuKGUudmFsdWUsdC52YWx1ZSkpcmV0dXJuITF9fX0oc3x8KHM9e30pKTtjbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUuIEVycm9yczogWyR7ZS5qb2luKCIsICIpfV1gKSx0aGlzLmVycm9ycz1lfX1mdW5jdGlvbiBsKGUpe2lmKHMuaXMoZSkpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSlpZihuKXRyeXtuLmRpc3Bvc2UoKX1jYXRjaChlKXt0LnB1c2goZSl9aWYoMT09PXQubGVuZ3RoKXRocm93IHRbMF07aWYodC5sZW5ndGg+MSl0aHJvdyBuZXcgYyh0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bXTplfWlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gdShlKXtyZXR1cm57ZGlzcG9zZTphKCgoKT0+e2UoKX0pKX19Y2xhc3MgaHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvRGlzcG9zZT1uZXcgU2V0LHRoaXMuX2lzRGlzcG9zZWQ9ITF9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9pc0Rpc3Bvc2VkPSEwLHRoaXMuY2xlYXIoKSl9Z2V0IGlzRGlzcG9zZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZH1jbGVhcigpe3RyeXtsKHRoaXMuX3RvRGlzcG9zZS52YWx1ZXMoKSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKGUpe2lmKCFlKXJldHVybiBlO2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/aC5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkd8fGNvbnNvbGUud2FybihuZXcgRXJyb3IoIlRyeWluZyB0byBhZGQgYSBkaXNwb3NhYmxlIHRvIGEgRGlzcG9zYWJsZVN0b3JlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi4gVGhlIGFkZGVkIG9iamVjdCB3aWxsIGJlIGxlYWtlZCEiKS5zdGFjayk6dGhpcy5fdG9EaXNwb3NlLmFkZChlKSxlfX1oLkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyBme2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RvcmU9bmV3IGgsdGhpcy5fc3RvcmV9ZGlzcG9zZSgpe3RoaXMuX3N0b3JlLmRpc3Bvc2UoKX1fcmVnaXN0ZXIoZSl7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5fc3RvcmUuYWRkKGUpfX1mLk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtjbGFzcyBke2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwb3NlPSgpPT57fSx0aGlzLnVuc2V0PSgpPT57fSx0aGlzLmlzc2V0PSgpPT4hMX1zZXQoZSl7bGV0IHQ9ZTtyZXR1cm4gdGhpcy51bnNldD0oKT0+dD12b2lkIDAsdGhpcy5pc3NldD0oKT0+dm9pZCAwIT09dCx0aGlzLmRpc3Bvc2U9KCk9Pnt0JiYodCgpLHQ9dm9pZCAwKX0sdGhpc319Y2xhc3MgbXtjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm5leHQ9bS5VbmRlZmluZWQsdGhpcy5wcmV2PW0uVW5kZWZpbmVkfX1tLlVuZGVmaW5lZD1uZXcgbSh2b2lkIDApO2NsYXNzIGd7Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1tLlVuZGVmaW5lZCx0aGlzLl9sYXN0PW0uVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1tLlVuZGVmaW5lZH1jbGVhcigpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl7Y29uc3QgdD1lLm5leHQ7ZS5wcmV2PW0uVW5kZWZpbmVkLGUubmV4dD1tLlVuZGVmaW5lZCxlPXR9dGhpcy5fZmlyc3Q9bS5VbmRlZmluZWQsdGhpcy5fbGFzdD1tLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdChlKXtyZXR1cm4gdGhpcy5faW5zZXJ0KGUsITEpfXB1c2goZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCEwKX1faW5zZXJ0KGUsdCl7Y29uc3Qgbj1uZXcgbShlKTtpZih0aGlzLl9maXJzdD09PW0uVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PW4sdGhpcy5fbGFzdD1uO2Vsc2UgaWYodCl7Y29uc3QgZT10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9bixuLnByZXY9ZSxlLm5leHQ9bn1lbHNle2NvbnN0IGU9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9bixuLm5leHQ9ZSxlLnByZXY9bn10aGlzLl9zaXplKz0xO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5fcmVtb3ZlKG4pKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksZX19cG9wKCl7aWYodGhpcy5fbGFzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLGV9fV9yZW1vdmUoZSl7aWYoZS5wcmV2IT09bS5VbmRlZmluZWQmJmUubmV4dCE9PW0uVW5kZWZpbmVkKXtjb25zdCB0PWUucHJldjt0Lm5leHQ9ZS5uZXh0LGUubmV4dC5wcmV2PXR9ZWxzZSBlLnByZXY9PT1tLlVuZGVmaW5lZCYmZS5uZXh0PT09bS5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PW0uVW5kZWZpbmVkLHRoaXMuX2xhc3Q9bS5VbmRlZmluZWQpOmUubmV4dD09PW0uVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9bS5VbmRlZmluZWQpOmUucHJldj09PW0uVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PW0uVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl5aWVsZCBlLmVsZW1lbnQsZT1lLm5leHR9fWxldCBwPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmxvY2F0aW9uJiZkb2N1bWVudC5sb2NhdGlvbi5oYXNoLmluZGV4T2YoInBzZXVkbz10cnVlIik+PTA7dmFyIGI7Y29uc3Qgdj0iZW4iO2xldCB5LEMsdyxfPSExLFM9ITEsQT0hMSxFPSExLHg9djtjb25zdCBOPSJvYmplY3QiPT10eXBlb2Ygc2VsZj9zZWxmOiJvYmplY3QiPT10eXBlb2YgZ2xvYmFsP2dsb2JhbDp7fTtsZXQgazt2b2lkIDAhPT1OLnZzY29kZSYmdm9pZCAwIT09Ti52c2NvZGUucHJvY2Vzcz9rPU4udnNjb2RlLnByb2Nlc3M6InVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzJiYoaz1wcm9jZXNzKTtjb25zdCBMPSJzdHJpbmciPT10eXBlb2YobnVsbD09PShiPW51bGw9PWs/dm9pZCAwOmsudmVyc2lvbnMpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLmVsZWN0cm9uKSYmInJlbmRlcmVyIj09PShudWxsPT1rP3ZvaWQgMDprLnR5cGUpO2lmKCJvYmplY3QiIT10eXBlb2YgbmF2aWdhdG9yfHxMKWlmKCJvYmplY3QiPT10eXBlb2Ygayl7Xz0id2luMzIiPT09ay5wbGF0Zm9ybSxTPSJkYXJ3aW4iPT09ay5wbGF0Zm9ybSxBPSJsaW51eCI9PT1rLnBsYXRmb3JtLEEmJmsuZW52LlNOQVAmJmsuZW52LlNOQVBfUkVWSVNJT04say5lbnYuQ0l8fGsuZW52LkJVSUxEX0FSVElGQUNUU1RBR0lOR0RJUkVDVE9SWSx5PXYseD12O2NvbnN0IGU9ay5lbnYuVlNDT0RFX05MU19DT05GSUc7aWYoZSl0cnl7Y29uc3QgdD1KU09OLnBhcnNlKGUpLG49dC5hdmFpbGFibGVMYW5ndWFnZXNbIioiXTt5PXQubG9jYWxlLHg9bnx8dixDPXQuX3RyYW5zbGF0aW9uc0NvbmZpZ0ZpbGV9Y2F0Y2goZSl7fX1lbHNlIGNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2Vsc2Ugdz1uYXZpZ2F0b3IudXNlckFnZW50LF89dy5pbmRleE9mKCJXaW5kb3dzIik+PTAsUz13LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wLCh3LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wfHx3LmluZGV4T2YoImlQYWQiKT49MHx8dy5pbmRleE9mKCJpUGhvbmUiKT49MCkmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzLEE9dy5pbmRleE9mKCJMaW51eCIpPj0wLEU9ITAsZnVuY3Rpb24oZSx0LC4uLm4peyFmdW5jdGlvbihlLHQpe2xldCBuO249MD09PXQubGVuZ3RoP2U6ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoKGUsbik9Pntjb25zdCByPW5bMF0saT10W3JdO2xldCBvPWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBpP289aToibnVtYmVyIiE9dHlwZW9mIGkmJiJib29sZWFuIiE9dHlwZW9mIGkmJm51bGwhPWl8fChvPVN0cmluZyhpKSksb30pKSxwJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKX0odCxuKX0oMCwiXyIpLHk9dix4PXk7Y29uc3QgVD1fLE89UztFJiZOLmltcG9ydFNjcmlwdHM7Y29uc3QgST13LE09ImZ1bmN0aW9uIj09dHlwZW9mIE4ucG9zdE1lc3NhZ2UmJiFOLmltcG9ydFNjcmlwdHM7KCgpPT57aWYoTSl7Y29uc3QgZT1bXTtOLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh0PT57aWYodC5kYXRhJiZ0LmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspZm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXtjb25zdCByPWVbbl07aWYoci5pZD09PXQuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylyZXR1cm4gZS5zcGxpY2UobiwxKSx2b2lkIHIuY2FsbGJhY2soKX19KSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IHI9Kyt0O2UucHVzaCh7aWQ6cixjYWxsYmFjazpufSksTi5wb3N0TWVzc2FnZSh7dnNjb2RlU2NoZWR1bGVBc3luY1dvcms6cn0sIioiKX19fSkoKTtjb25zdCBQPSEhKEkmJkkuaW5kZXhPZigiQ2hyb21lIik+PTApO0kmJkkuaW5kZXhPZigiRmlyZWZveCIpLCFQJiZJJiZJLmluZGV4T2YoIlNhZmFyaSIpLEkmJkkuaW5kZXhPZigiRWRnLyIpLEkmJkkuaW5kZXhPZigiQW5kcm9pZCIpO2NvbnN0IFI9Ti5wZXJmb3JtYW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIE4ucGVyZm9ybWFuY2Uubm93O2NsYXNzIFZ7Y29uc3RydWN0b3IoZSl7dGhpcy5faGlnaFJlc29sdXRpb249UiYmZSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RhdGljIGNyZWF0ZShlPSEwKXtyZXR1cm4gbmV3IFYoZSl9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfWVsYXBzZWQoKXtyZXR1cm4tMSE9PXRoaXMuX3N0b3BUaW1lP3RoaXMuX3N0b3BUaW1lLXRoaXMuX3N0YXJ0VGltZTp0aGlzLl9ub3coKS10aGlzLl9zdGFydFRpbWV9X25vdygpe3JldHVybiB0aGlzLl9oaWdoUmVzb2x1dGlvbj9OLnBlcmZvcm1hbmNlLm5vdygpOkRhdGUubm93KCl9fXZhciBGLEQ7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQsbj1udWxsLHIpPT57bGV0IGksbz0hMTtyZXR1cm4gaT1lKChlPT57aWYoIW8pcmV0dXJuIGk/aS5kaXNwb3NlKCk6bz0hMCx0LmNhbGwobixlKX0pLG51bGwsciksbyYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+bi5jYWxsKHIsdChlKSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBhKCgobixyPW51bGwsaSk9PmUoKGU9Pnt0KGUpLG4uY2FsbChyLGUpfSksbnVsbCxpKSksbil9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+dChlKSYmbi5jYWxsKHIsZSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIG8oZSx0LHIsaSl7bGV0IG89cjtyZXR1cm4gbihlLChlPT4obz10KG8sZSksbykpLGkpfWZ1bmN0aW9uIGEoZSx0KXtsZXQgbjtjb25zdCByPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtuPWUoci5maXJlLHIpfSxvbkxhc3RMaXN0ZW5lclJlbW92ZSgpe251bGw9PW58fG4uZGlzcG9zZSgpfX0pO3JldHVybiBudWxsPT10fHx0LmFkZChyKSxyLmV2ZW50fWZ1bmN0aW9uIHMoZSx0LG49MTAwLHI9ITEsaSxvKXtsZXQgYSxzLGMsbD0wO2NvbnN0IHU9bmV3IEIoe2xlYWtXYXJuaW5nVGhyZXNob2xkOmksb25GaXJzdExpc3RlbmVyQWRkKCl7YT1lKChlPT57bCsrLHM9dChzLGUpLHImJiFjJiYodS5maXJlKHMpLHM9dm9pZCAwKSxjbGVhclRpbWVvdXQoYyksYz1zZXRUaW1lb3V0KCgoKT0+e2NvbnN0IGU9cztzPXZvaWQgMCxjPXZvaWQgMCwoIXJ8fGw+MSkmJnUuZmlyZShlKSxsPTB9KSxuKX0pKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXthLmRpc3Bvc2UoKX19KTtyZXR1cm4gbnVsbD09b3x8by5hZGQodSksdS5ldmVudH1mdW5jdGlvbiBjKGUsdD0oKGUsdCk9PmU9PT10KSxuKXtsZXQgcixvPSEwO3JldHVybiBpKGUsKGU9Pntjb25zdCBuPW98fCF0KGUscik7cmV0dXJuIG89ITEscj1lLG59KSxuKX1lLk5vbmU9KCk9PmYuTm9uZSxlLm9uY2U9dCxlLm1hcD1uLGUuZm9yRWFjaD1yLGUuZmlsdGVyPWksZS5zaWduYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuYW55PWZ1bmN0aW9uKC4uLmUpe3JldHVybih0LG49bnVsbCxyKT0+ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIHUoKCgpPT5sKGUpKSl9KC4uLmUubWFwKChlPT5lKChlPT50LmNhbGwobixlKSksbnVsbCxyKSkpKX0sZS5yZWR1Y2U9byxlLmRlYm91bmNlPXMsZS5sYXRjaD1jLGUuc3BsaXQ9ZnVuY3Rpb24odCxuLHIpe3JldHVybltlLmZpbHRlcih0LG4sciksZS5maWx0ZXIodCwoZT0+IW4oZSkpLHIpXX0sZS5idWZmZXI9ZnVuY3Rpb24oZSx0PSExLG49W10pe2xldCByPW4uc2xpY2UoKSxpPWUoKGU9PntyP3IucHVzaChlKTphLmZpcmUoZSl9KSk7Y29uc3Qgbz0oKT0+e251bGw9PXJ8fHIuZm9yRWFjaCgoZT0+YS5maXJlKGUpKSkscj1udWxsfSxhPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtpfHwoaT1lKChlPT5hLmZpcmUoZSkpKSl9LG9uRmlyc3RMaXN0ZW5lckRpZEFkZCgpe3ImJih0P3NldFRpbWVvdXQobyk6bygpKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXtpJiZpLmRpc3Bvc2UoKSxpPW51bGx9fSk7cmV0dXJuIGEuZXZlbnR9O2NsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5ldmVudD1lLHRoaXMuZGlzcG9zYWJsZXM9bmV3IGh9bWFwKGUpe3JldHVybiBuZXcgZChuKHRoaXMuZXZlbnQsZSx0aGlzLmRpc3Bvc2FibGVzKSl9Zm9yRWFjaChlKXtyZXR1cm4gbmV3IGQocih0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfWZpbHRlcihlKXtyZXR1cm4gbmV3IGQoaSh0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfXJlZHVjZShlLHQpe3JldHVybiBuZXcgZChvKHRoaXMuZXZlbnQsZSx0LHRoaXMuZGlzcG9zYWJsZXMpKX1sYXRjaCgpe3JldHVybiBuZXcgZChjKHRoaXMuZXZlbnQsdm9pZCAwLHRoaXMuZGlzcG9zYWJsZXMpKX1kZWJvdW5jZShlLHQ9MTAwLG49ITEscil7cmV0dXJuIG5ldyBkKHModGhpcy5ldmVudCxlLHQsbixyLHRoaXMuZGlzcG9zYWJsZXMpKX1vbihlLHQsbil7cmV0dXJuIHRoaXMuZXZlbnQoZSx0LG4pfW9uY2UoZSxuLHIpe3JldHVybiB0KHRoaXMuZXZlbnQpKGUsbixyKX1kaXNwb3NlKCl7dGhpcy5kaXNwb3NhYmxlcy5kaXNwb3NlKCl9fWUuY2hhaW49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkKGUpfSxlLmZyb21Ob2RlRXZlbnRFbWl0dGVyPWZ1bmN0aW9uKGUsdCxuPShlPT5lKSl7Y29uc3Qgcj0oLi4uZSk9PmkuZmlyZShuKC4uLmUpKSxpPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQ6KCk9PmUub24odCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVMaXN0ZW5lcih0LHIpfSk7cmV0dXJuIGkuZXZlbnR9LGUuZnJvbURPTUV2ZW50RW1pdHRlcj1mdW5jdGlvbihlLHQsbj0oZT0+ZSkpe2NvbnN0IHI9KC4uLmUpPT5pLmZpcmUobiguLi5lKSksaT1uZXcgQih7b25GaXJzdExpc3RlbmVyQWRkOigpPT5lLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQscil9KTtyZXR1cm4gaS5ldmVudH0sZS50b1Byb21pc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChuPT50KGUpKG4pKSl9LGUucnVuQW5kU3Vic2NyaWJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQodm9pZCAwKSxlKChlPT50KGUpKSl9LGUucnVuQW5kU3Vic2NyaWJlV2l0aFN0b3JlPWZ1bmN0aW9uKGUsdCl7bGV0IG49bnVsbDtmdW5jdGlvbiByKGUpe251bGw9PW58fG4uZGlzcG9zZSgpLG49bmV3IGgsdChlLG4pfXIodm9pZCAwKTtjb25zdCBpPWUoKGU9PnIoZSkpKTtyZXR1cm4gdSgoKCk9PntpLmRpc3Bvc2UoKSxudWxsPT1ufHxuLmRpc3Bvc2UoKX0pKX07Y2xhc3MgbXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMub2JzPWUsdGhpcy5fY291bnRlcj0wLHRoaXMuX2hhc0NoYW5nZWQ9ITE7Y29uc3Qgbj17b25GaXJzdExpc3RlbmVyQWRkOigpPT57ZS5hZGRPYnNlcnZlcih0aGlzKX0sb25MYXN0TGlzdGVuZXJSZW1vdmU6KCk9PntlLnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyBCKG4pLHQmJnQuYWRkKHRoaXMuZW1pdHRlcil9YmVnaW5VcGRhdGUoZSl7dGhpcy5fY291bnRlcisrfWhhbmRsZUNoYW5nZShlLHQpe3RoaXMuX2hhc0NoYW5nZWQ9ITB9ZW5kVXBkYXRlKGUpezA9PS0tdGhpcy5fY291bnRlciYmdGhpcy5faGFzQ2hhbmdlZCYmKHRoaXMuX2hhc0NoYW5nZWQ9ITEsdGhpcy5lbWl0dGVyLmZpcmUodGhpcy5vYnMuZ2V0KCkpKX19ZS5mcm9tT2JzZXJ2YWJsZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbShlLHQpLmVtaXR0ZXIuZXZlbnR9fShGfHwoRj17fSkpO2NsYXNzIEt7Y29uc3RydWN0b3IoZSl7dGhpcy5fbGlzdGVuZXJDb3VudD0wLHRoaXMuX2ludm9jYXRpb25Db3VudD0wLHRoaXMuX2VsYXBzZWRPdmVyYWxsPTAsdGhpcy5fbmFtZT1gJHtlfV8ke0suX2lkUG9vbCsrfWB9c3RhcnQoZSl7dGhpcy5fc3RvcFdhdGNoPW5ldyBWKCEwKSx0aGlzLl9saXN0ZW5lckNvdW50PWV9c3RvcCgpe2lmKHRoaXMuX3N0b3BXYXRjaCl7Y29uc3QgZT10aGlzLl9zdG9wV2F0Y2guZWxhcHNlZCgpO3RoaXMuX2VsYXBzZWRPdmVyYWxsKz1lLHRoaXMuX2ludm9jYXRpb25Db3VudCs9MSxjb25zb2xlLmluZm8oYGRpZCBGSVJFICR7dGhpcy5fbmFtZX06IGVsYXBzZWRfbXM6ICR7ZS50b0ZpeGVkKDUpfSwgbGlzdGVuZXI6ICR7dGhpcy5fbGlzdGVuZXJDb3VudH0gKGVsYXBzZWRfb3ZlcmFsbDogJHt0aGlzLl9lbGFwc2VkT3ZlcmFsbC50b0ZpeGVkKDIpfSwgaW52b2NhdGlvbnM6ICR7dGhpcy5faW52b2NhdGlvbkNvdW50fSlgKSx0aGlzLl9zdG9wV2F0Y2g9dm9pZCAwfX19Sy5faWRQb29sPTA7Y2xhc3Mgantjb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlPWV9c3RhdGljIGNyZWF0ZSgpe3ZhciBlO3JldHVybiBuZXcgaihudWxsIT09KGU9KG5ldyBFcnJvcikuc3RhY2spJiZ2b2lkIDAhPT1lP2U6IiIpfXByaW50KCl7Y29uc29sZS53YXJuKHRoaXMudmFsdWUuc3BsaXQoIlxuIikuc2xpY2UoMikuam9pbigiXG4iKSl9fWNsYXNzIFV7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuY2FsbGJhY2s9ZSx0aGlzLmNhbGxiYWNrVGhpcz10LHRoaXMuc3RhY2s9bix0aGlzLnN1YnNjcmlwdGlvbj1uZXcgZH1pbnZva2UoZSl7dGhpcy5jYWxsYmFjay5jYWxsKHRoaXMuY2FsbGJhY2tUaGlzLGUpfX1jbGFzcyBCe2NvbnN0cnVjdG9yKGUpe3ZhciB0LG47dGhpcy5fZGlzcG9zZWQ9ITEsdGhpcy5fb3B0aW9ucz1lLHRoaXMuX2xlYWthZ2VNb249dm9pZCAwLHRoaXMuX3BlcmZNb249KG51bGw9PT0odD10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09dD92b2lkIDA6dC5fcHJvZk5hbWUpP25ldyBLKHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT1udWxsPT09KG49dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dmFyIGUsdCxuLHI7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCx0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVycy5jbGVhcigpLG51bGw9PT0oZT10aGlzLl9kZWxpdmVyeVF1ZXVlKXx8dm9pZCAwPT09ZXx8ZS5jbGVhcih0aGlzKSxudWxsPT09KG49bnVsbD09PSh0PXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm9uTGFzdExpc3RlbmVyUmVtb3ZlKXx8dm9pZCAwPT09bnx8bi5jYWxsKHQpLG51bGw9PT0ocj10aGlzLl9sZWFrYWdlTW9uKXx8dm9pZCAwPT09cnx8ci5kaXNwb3NlKCkpfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PShlLHQsbik9Pnt2YXIgcixpLG87dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBnKTtjb25zdCBhPXRoaXMuX2xpc3RlbmVycy5pc0VtcHR5KCk7bGV0IHMsYzthJiYobnVsbD09PShyPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm9uRmlyc3RMaXN0ZW5lckFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkKHRoaXMpLHRoaXMuX2xlYWthZ2VNb24mJnRoaXMuX2xpc3RlbmVycy5zaXplPj0zMCYmKGM9ai5jcmVhdGUoKSxzPXRoaXMuX2xlYWthZ2VNb24uY2hlY2soYyx0aGlzLl9saXN0ZW5lcnMuc2l6ZSsxKSk7Y29uc3QgbD1uZXcgVShlLHQsYyksdT10aGlzLl9saXN0ZW5lcnMucHVzaChsKTthJiYobnVsbD09PShpPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLm9uRmlyc3RMaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyRGlkQWRkKHRoaXMpLChudWxsPT09KG89dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ub25MaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25MaXN0ZW5lckRpZEFkZCh0aGlzLGUsdCk7Y29uc3QgZj1sLnN1YnNjcmlwdGlvbi5zZXQoKCgpPT57aWYobnVsbD09c3x8cygpLCF0aGlzLl9kaXNwb3NlZCYmKHUoKSx0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlKSl7dGhpcy5fbGlzdGVuZXJzJiYhdGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKXx8dGhpcy5fb3B0aW9ucy5vbkxhc3RMaXN0ZW5lclJlbW92ZSh0aGlzKX19KSk7cmV0dXJuIG4gaW5zdGFuY2VvZiBoP24uYWRkKGYpOkFycmF5LmlzQXJyYXkobikmJm4ucHVzaChmKSxmfSksdGhpcy5fZXZlbnR9ZmlyZShlKXt2YXIgdCxuO2lmKHRoaXMuX2xpc3RlbmVycyl7dGhpcy5fZGVsaXZlcnlRdWV1ZXx8KHRoaXMuX2RlbGl2ZXJ5UXVldWU9bmV3IHEpO2Zvcihjb25zdCB0IG9mIHRoaXMuX2xpc3RlbmVycyl0aGlzLl9kZWxpdmVyeVF1ZXVlLnB1c2godGhpcyx0LGUpO251bGw9PT0odD10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09dHx8dC5zdGFydCh0aGlzLl9kZWxpdmVyeVF1ZXVlLnNpemUpLHRoaXMuX2RlbGl2ZXJ5UXVldWUuZGVsaXZlcigpLG51bGw9PT0obj10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09bnx8bi5zdG9wKCl9fX1jbGFzcyBxIGV4dGVuZHMgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9xdWV1ZT1uZXcgZ31nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9xdWV1ZS5zaXplfXB1c2goZSx0LG4pe3RoaXMuX3F1ZXVlLnB1c2gobmV3ICQoZSx0LG4pKX1jbGVhcihlKXtjb25zdCB0PW5ldyBnO2Zvcihjb25zdCBuIG9mIHRoaXMuX3F1ZXVlKW4uZW1pdHRlciE9PWUmJnQucHVzaChuKTt0aGlzLl9xdWV1ZT10fWRlbGl2ZXIoKXtmb3IoO3RoaXMuX3F1ZXVlLnNpemU+MDspe2NvbnN0IGU9dGhpcy5fcXVldWUuc2hpZnQoKTt0cnl7ZS5saXN0ZW5lci5pbnZva2UoZS5ldmVudCl9Y2F0Y2goZSl7dChlKX19fX17Y2xlYXIoZSl7dGhpcy5fcXVldWUuY2xlYXIoKX19Y2xhc3MgJHtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbWl0dGVyPWUsdGhpcy5saXN0ZW5lcj10LHRoaXMuZXZlbnQ9bn19ZnVuY3Rpb24gVyhlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGZ1bmN0aW9uKGUpe2xldCB0PVtdLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO2Zvcig7T2JqZWN0LnByb3RvdHlwZSE9PW47KXQ9dC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikpLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiB0fShlKSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIEgoZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1jbGFzcyB6e2NvbnN0cnVjdG9yKGUpe3RoaXMuZXhlY3V0b3I9ZSx0aGlzLl9kaWRSdW49ITF9aGFzVmFsdWUoKXtyZXR1cm4gdGhpcy5fZGlkUnVufWdldFZhbHVlKCl7aWYoIXRoaXMuX2RpZFJ1bil0cnl7dGhpcy5fdmFsdWU9dGhpcy5leGVjdXRvcigpfWNhdGNoKGUpe3RoaXMuX2Vycm9yPWV9ZmluYWxseXt0aGlzLl9kaWRSdW49ITB9aWYodGhpcy5fZXJyb3IpdGhyb3cgdGhpcy5fZXJyb3I7cmV0dXJuIHRoaXMuX3ZhbHVlfWdldCByYXdWYWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX19ZnVuY3Rpb24gRyhlKXtyZXR1cm4gZT49NjUmJmU8PTkwfWZ1bmN0aW9uIEooZSl7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBYKGUsdCxuKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTtpZihKKHIpJiZuKzE8dCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobisxKTtpZihmdW5jdGlvbihlKXtyZXR1cm4gNTYzMjA8PWUmJmU8PTU3MzQzfSh0KSlyZXR1cm4gdC01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fXJldHVybiByfWNvbnN0IFo9L15bXHRcblxyXHgyMC1ceDdFXSokLztjbGFzcyBZe2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9ZX1zdGF0aWMgZ2V0SW5zdGFuY2UoZSl7cmV0dXJuIFkuY2FjaGUuZ2V0KEFycmF5LmZyb20oZSkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIFkuX2xvY2FsZXMuZ2V0VmFsdWUoKX1pc0FtYmlndW91cyhlKXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXMoZSl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUoZSl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KGUpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX1EPVksWS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhPW5ldyB6KCgoKT0+SlNPTi5wYXJzZSgneyJfY29tbW9uIjpbODIzMiwzMiw4MjMzLDMyLDU3NjAsMzIsODE5MiwzMiw4MTkzLDMyLDgxOTQsMzIsODE5NSwzMiw4MTk2LDMyLDgxOTcsMzIsODE5OCwzMiw4MjAwLDMyLDgyMDEsMzIsODIwMiwzMiw4Mjg3LDMyLDgxOTksMzIsODIzOSwzMiwyMDQyLDk1LDY1MTAxLDk1LDY1MTAyLDk1LDY1MTAzLDk1LDgyMDgsNDUsODIwOSw0NSw4MjEwLDQ1LDY1MTEyLDQ1LDE3NDgsNDUsODI1OSw0NSw3MjcsNDUsODcyMiw0NSwxMDEzNCw0NSwxMTQ1MCw0NSwxNTQ5LDQ0LDE2NDMsNDQsODIxOCw0NCwxODQsNDQsNDIyMzMsNDQsODk0LDU5LDIzMDcsNTgsMjY5MSw1OCwxNDE3LDU4LDE3OTUsNTgsMTc5Niw1OCw1ODY4LDU4LDY1MDcyLDU4LDYxNDcsNTgsNjE1Myw1OCw4MjgyLDU4LDE0NzUsNTgsNzYwLDU4LDQyODg5LDU4LDg3NTgsNTgsNzIwLDU4LDQyMjM3LDU4LDQ1MSwzMywxMTYwMSwzMyw2NjAsNjMsNTc3LDYzLDI0MjksNjMsNTAzOCw2Myw0MjczMSw2MywxMTkxNDksNDYsODIyOCw0NiwxNzkzLDQ2LDE3OTQsNDYsNDI1MTAsNDYsNjgxNzYsNDYsMTYzMiw0NiwxNzc2LDQ2LDQyMjMyLDQ2LDEzNzMsOTYsNjUyODcsOTYsODIxOSw5Niw4MjQyLDk2LDEzNzAsOTYsMTUyMyw5Niw4MTc1LDk2LDY1MzQ0LDk2LDkwMCw5Niw4MTg5LDk2LDgxMjUsOTYsODEyNyw5Niw4MTkwLDk2LDY5Nyw5Niw4ODQsOTYsNzEyLDk2LDcxNCw5Niw3MTUsOTYsNzU2LDk2LDY5OSw5Niw3MDEsOTYsNzAwLDk2LDcwMiw5Niw0Mjg5Miw5NiwxNDk3LDk2LDIwMzYsOTYsMjAzNyw5Niw1MTk0LDk2LDU4MzYsOTYsOTQwMzMsOTYsOTQwMzQsOTYsNjUzMzksOTEsMTAwODgsNDAsMTAwOTgsNDAsMTIzMDgsNDAsNjQ4MzAsNDAsNjUzNDEsOTMsMTAwODksNDEsMTAwOTksNDEsMTIzMDksNDEsNjQ4MzEsNDEsMTAxMDAsMTIzLDExOTA2MCwxMjMsMTAxMDEsMTI1LDY1MzQyLDk0LDgyNzAsNDIsMTY0NSw0Miw4NzI3LDQyLDY2MzM1LDQyLDU5NDEsNDcsODI1Nyw0Nyw4NzI1LDQ3LDgyNjAsNDcsOTU4NSw0NywxMDE4Nyw0NywxMDc0NCw0NywxMTkzNTQsNDcsMTI3NTUsNDcsMTIzMzksNDcsMTE0NjIsNDcsMjAwMzEsNDcsMTIwMzUsNDcsNjUzNDAsOTIsNjUxMjgsOTIsODcyNiw5MiwxMDE4OSw5MiwxMDc0MSw5MiwxMDc0NSw5MiwxMTkzMTEsOTIsMTE5MzU1LDkyLDEyNzU2LDkyLDIwMDIyLDkyLDEyMDM0LDkyLDQyODcyLDM4LDcwOCw5NCw3MTAsOTQsNTg2OSw0MywxMDEzMyw0Myw2NjIwMyw0Myw4MjQ5LDYwLDEwMDk0LDYwLDcwNiw2MCwxMTkzNTAsNjAsNTE3Niw2MCw1ODEwLDYwLDUxMjAsNjEsMTE4NDAsNjEsMTI0NDgsNjEsNDIyMzksNjEsODI1MCw2MiwxMDA5NSw2Miw3MDcsNjIsMTE5MzUxLDYyLDUxNzEsNjIsOTQwMTUsNjIsODI3NSwxMjYsNzMyLDEyNiw4MTI4LDEyNiw4NzY0LDEyNiw2NTM3MiwxMjQsNjUyOTMsNDUsMTIwNzg0LDUwLDEyMDc5NCw1MCwxMjA4MDQsNTAsMTIwODE0LDUwLDEyMDgyNCw1MCwxMzAwMzQsNTAsNDI4NDIsNTAsNDIzLDUwLDEwMDAsNTAsNDI1NjQsNTAsNTMxMSw1MCw0MjczNSw1MCwxMTkzMDIsNTEsMTIwNzg1LDUxLDEyMDc5NSw1MSwxMjA4MDUsNTEsMTIwODE1LDUxLDEyMDgyNSw1MSwxMzAwMzUsNTEsNDI5MjMsNTEsNTQwLDUxLDQzOSw1MSw0Mjg1OCw1MSwxMTQ2OCw1MSwxMjQ4LDUxLDk0MDExLDUxLDcxODgyLDUxLDEyMDc4Niw1MiwxMjA3OTYsNTIsMTIwODA2LDUyLDEyMDgxNiw1MiwxMjA4MjYsNTIsMTMwMDM2LDUyLDUwNzAsNTIsNzE4NTUsNTIsMTIwNzg3LDUzLDEyMDc5Nyw1MywxMjA4MDcsNTMsMTIwODE3LDUzLDEyMDgyNyw1MywxMzAwMzcsNTMsNDQ0LDUzLDcxODY3LDUzLDEyMDc4OCw1NCwxMjA3OTgsNTQsMTIwODA4LDU0LDEyMDgxOCw1NCwxMjA4MjgsNTQsMTMwMDM4LDU0LDExNDc0LDU0LDUxMDIsNTQsNzE4OTMsNTQsMTE5MzE0LDU1LDEyMDc4OSw1NSwxMjA3OTksNTUsMTIwODA5LDU1LDEyMDgxOSw1NSwxMjA4MjksNTUsMTMwMDM5LDU1LDY2NzcwLDU1LDcxODc4LDU1LDI4MTksNTYsMjUzOCw1NiwyNjY2LDU2LDEyNTEzMSw1NiwxMjA3OTAsNTYsMTIwODAwLDU2LDEyMDgxMCw1NiwxMjA4MjAsNTYsMTIwODMwLDU2LDEzMDA0MCw1Niw1NDcsNTYsNTQ2LDU2LDY2MzMwLDU2LDI2NjMsNTcsMjkyMCw1NywyNTQxLDU3LDM0MzcsNTcsMTIwNzkxLDU3LDEyMDgwMSw1NywxMjA4MTEsNTcsMTIwODIxLDU3LDEyMDgzMSw1NywxMzAwNDEsNTcsNDI4NjIsNTcsMTE0NjYsNTcsNzE4ODQsNTcsNzE4NTIsNTcsNzE4OTQsNTcsOTA4Miw5Nyw2NTM0NSw5NywxMTk4MzQsOTcsMTE5ODg2LDk3LDExOTkzOCw5NywxMTk5OTAsOTcsMTIwMDQyLDk3LDEyMDA5NCw5NywxMjAxNDYsOTcsMTIwMTk4LDk3LDEyMDI1MCw5NywxMjAzMDIsOTcsMTIwMzU0LDk3LDEyMDQwNiw5NywxMjA0NTgsOTcsNTkzLDk3LDk0NSw5NywxMjA1MTQsOTcsMTIwNTcyLDk3LDEyMDYzMCw5NywxMjA2ODgsOTcsMTIwNzQ2LDk3LDY1MzEzLDY1LDExOTgwOCw2NSwxMTk4NjAsNjUsMTE5OTEyLDY1LDExOTk2NCw2NSwxMjAwMTYsNjUsMTIwMDY4LDY1LDEyMDEyMCw2NSwxMjAxNzIsNjUsMTIwMjI0LDY1LDEyMDI3Niw2NSwxMjAzMjgsNjUsMTIwMzgwLDY1LDEyMDQzMiw2NSw5MTMsNjUsMTIwNDg4LDY1LDEyMDU0Niw2NSwxMjA2MDQsNjUsMTIwNjYyLDY1LDEyMDcyMCw2NSw1MDM0LDY1LDU1NzMsNjUsNDIyMjIsNjUsOTQwMTYsNjUsNjYyMDgsNjUsMTE5ODM1LDk4LDExOTg4Nyw5OCwxMTk5MzksOTgsMTE5OTkxLDk4LDEyMDA0Myw5OCwxMjAwOTUsOTgsMTIwMTQ3LDk4LDEyMDE5OSw5OCwxMjAyNTEsOTgsMTIwMzAzLDk4LDEyMDM1NSw5OCwxMjA0MDcsOTgsMTIwNDU5LDk4LDM4OCw5OCw1MDcxLDk4LDUyMzQsOTgsNTU1MSw5OCw2NTMxNCw2Niw4NDkyLDY2LDExOTgwOSw2NiwxMTk4NjEsNjYsMTE5OTEzLDY2LDEyMDAxNyw2NiwxMjAwNjksNjYsMTIwMTIxLDY2LDEyMDE3Myw2NiwxMjAyMjUsNjYsMTIwMjc3LDY2LDEyMDMyOSw2NiwxMjAzODEsNjYsMTIwNDMzLDY2LDQyOTMyLDY2LDkxNCw2NiwxMjA0ODksNjYsMTIwNTQ3LDY2LDEyMDYwNSw2NiwxMjA2NjMsNjYsMTIwNzIxLDY2LDUxMDgsNjYsNTYyMyw2Niw0MjE5Miw2Niw2NjE3OCw2Niw2NjIwOSw2Niw2NjMwNSw2Niw2NTM0Nyw5OSw4NTczLDk5LDExOTgzNiw5OSwxMTk4ODgsOTksMTE5OTQwLDk5LDExOTk5Miw5OSwxMjAwNDQsOTksMTIwMDk2LDk5LDEyMDE0OCw5OSwxMjAyMDAsOTksMTIwMjUyLDk5LDEyMDMwNCw5OSwxMjAzNTYsOTksMTIwNDA4LDk5LDEyMDQ2MCw5OSw3NDI4LDk5LDEwMTAsOTksMTE0MjksOTksNDM5NTEsOTksNjY2MjEsOTksMTI4ODQ0LDY3LDcxOTIyLDY3LDcxOTEzLDY3LDY1MzE1LDY3LDg1NTcsNjcsODQ1MCw2Nyw4NDkzLDY3LDExOTgxMCw2NywxMTk4NjIsNjcsMTE5OTE0LDY3LDExOTk2Niw2NywxMjAwMTgsNjcsMTIwMTc0LDY3LDEyMDIyNiw2NywxMjAyNzgsNjcsMTIwMzMwLDY3LDEyMDM4Miw2NywxMjA0MzQsNjcsMTAxNyw2NywxMTQyOCw2Nyw1MDg3LDY3LDQyMjAyLDY3LDY2MjEwLDY3LDY2MzA2LDY3LDY2NTgxLDY3LDY2ODQ0LDY3LDg1NzQsMTAwLDg1MTgsMTAwLDExOTgzNywxMDAsMTE5ODg5LDEwMCwxMTk5NDEsMTAwLDExOTk5MywxMDAsMTIwMDQ1LDEwMCwxMjAwOTcsMTAwLDEyMDE0OSwxMDAsMTIwMjAxLDEwMCwxMjAyNTMsMTAwLDEyMDMwNSwxMDAsMTIwMzU3LDEwMCwxMjA0MDksMTAwLDEyMDQ2MSwxMDAsMTI4MSwxMDAsNTA5NSwxMDAsNTIzMSwxMDAsNDIxOTQsMTAwLDg1NTgsNjgsODUxNyw2OCwxMTk4MTEsNjgsMTE5ODYzLDY4LDExOTkxNSw2OCwxMTk5NjcsNjgsMTIwMDE5LDY4LDEyMDA3MSw2OCwxMjAxMjMsNjgsMTIwMTc1LDY4LDEyMDIyNyw2OCwxMjAyNzksNjgsMTIwMzMxLDY4LDEyMDM4Myw2OCwxMjA0MzUsNjgsNTAyNCw2OCw1NTk4LDY4LDU2MTAsNjgsNDIxOTUsNjgsODQ5NCwxMDEsNjUzNDksMTAxLDg0OTUsMTAxLDg1MTksMTAxLDExOTgzOCwxMDEsMTE5ODkwLDEwMSwxMTk5NDIsMTAxLDEyMDA0NiwxMDEsMTIwMDk4LDEwMSwxMjAxNTAsMTAxLDEyMDIwMiwxMDEsMTIwMjU0LDEwMSwxMjAzMDYsMTAxLDEyMDM1OCwxMDEsMTIwNDEwLDEwMSwxMjA0NjIsMTAxLDQzODI2LDEwMSwxMjEzLDEwMSw4OTU5LDY5LDY1MzE3LDY5LDg0OTYsNjksMTE5ODEyLDY5LDExOTg2NCw2OSwxMTk5MTYsNjksMTIwMDIwLDY5LDEyMDA3Miw2OSwxMjAxMjQsNjksMTIwMTc2LDY5LDEyMDIyOCw2OSwxMjAyODAsNjksMTIwMzMyLDY5LDEyMDM4NCw2OSwxMjA0MzYsNjksOTE3LDY5LDEyMDQ5Miw2OSwxMjA1NTAsNjksMTIwNjA4LDY5LDEyMDY2Niw2OSwxMjA3MjQsNjksMTE1NzcsNjksNTAzNiw2OSw0MjIyNCw2OSw3MTg0Niw2OSw3MTg1NCw2OSw2NjE4Miw2OSwxMTk4MzksMTAyLDExOTg5MSwxMDIsMTE5OTQzLDEwMiwxMTk5OTUsMTAyLDEyMDA0NywxMDIsMTIwMDk5LDEwMiwxMjAxNTEsMTAyLDEyMDIwMywxMDIsMTIwMjU1LDEwMiwxMjAzMDcsMTAyLDEyMDM1OSwxMDIsMTIwNDExLDEwMiwxMjA0NjMsMTAyLDQzODI5LDEwMiw0MjkwNSwxMDIsMzgzLDEwMiw3ODM3LDEwMiwxNDEyLDEwMiwxMTkzMTUsNzAsODQ5Nyw3MCwxMTk4MTMsNzAsMTE5ODY1LDcwLDExOTkxNyw3MCwxMjAwMjEsNzAsMTIwMDczLDcwLDEyMDEyNSw3MCwxMjAxNzcsNzAsMTIwMjI5LDcwLDEyMDI4MSw3MCwxMjAzMzMsNzAsMTIwMzg1LDcwLDEyMDQzNyw3MCw0MjkwNCw3MCw5ODgsNzAsMTIwNzc4LDcwLDU1NTYsNzAsNDIyMDUsNzAsNzE4NzQsNzAsNzE4NDIsNzAsNjYxODMsNzAsNjYyMTMsNzAsNjY4NTMsNzAsNjUzNTEsMTAzLDg0NTgsMTAzLDExOTg0MCwxMDMsMTE5ODkyLDEwMywxMTk5NDQsMTAzLDEyMDA0OCwxMDMsMTIwMTAwLDEwMywxMjAxNTIsMTAzLDEyMDIwNCwxMDMsMTIwMjU2LDEwMywxMjAzMDgsMTAzLDEyMDM2MCwxMDMsMTIwNDEyLDEwMywxMjA0NjQsMTAzLDYwOSwxMDMsNzU1NSwxMDMsMzk3LDEwMywxNDA5LDEwMywxMTk4MTQsNzEsMTE5ODY2LDcxLDExOTkxOCw3MSwxMTk5NzAsNzEsMTIwMDIyLDcxLDEyMDA3NCw3MSwxMjAxMjYsNzEsMTIwMTc4LDcxLDEyMDIzMCw3MSwxMjAyODIsNzEsMTIwMzM0LDcxLDEyMDM4Niw3MSwxMjA0MzgsNzEsMTI5Miw3MSw1MDU2LDcxLDUxMDcsNzEsNDIxOTgsNzEsNjUzNTIsMTA0LDg0NjIsMTA0LDExOTg0MSwxMDQsMTE5OTQ1LDEwNCwxMTk5OTcsMTA0LDEyMDA0OSwxMDQsMTIwMTAxLDEwNCwxMjAxNTMsMTA0LDEyMDIwNSwxMDQsMTIwMjU3LDEwNCwxMjAzMDksMTA0LDEyMDM2MSwxMDQsMTIwNDEzLDEwNCwxMjA0NjUsMTA0LDEyMTEsMTA0LDEzOTIsMTA0LDUwNTgsMTA0LDY1MzIwLDcyLDg0NTksNzIsODQ2MCw3Miw4NDYxLDcyLDExOTgxNSw3MiwxMTk4NjcsNzIsMTE5OTE5LDcyLDEyMDAyMyw3MiwxMjAxNzksNzIsMTIwMjMxLDcyLDEyMDI4Myw3MiwxMjAzMzUsNzIsMTIwMzg3LDcyLDEyMDQzOSw3Miw5MTksNzIsMTIwNDk0LDcyLDEyMDU1Miw3MiwxMjA2MTAsNzIsMTIwNjY4LDcyLDEyMDcyNiw3MiwxMTQwNiw3Miw1MDUxLDcyLDU1MDAsNzIsNDIyMTUsNzIsNjYyNTUsNzIsNzMxLDEwNSw5MDc1LDEwNSw2NTM1MywxMDUsODU2MCwxMDUsODUwNSwxMDUsODUyMCwxMDUsMTE5ODQyLDEwNSwxMTk4OTQsMTA1LDExOTk0NiwxMDUsMTE5OTk4LDEwNSwxMjAwNTAsMTA1LDEyMDEwMiwxMDUsMTIwMTU0LDEwNSwxMjAyMDYsMTA1LDEyMDI1OCwxMDUsMTIwMzEwLDEwNSwxMjAzNjIsMTA1LDEyMDQxNCwxMDUsMTIwNDY2LDEwNSwxMjA0ODQsMTA1LDYxOCwxMDUsNjE3LDEwNSw5NTMsMTA1LDgxMjYsMTA1LDg5MCwxMDUsMTIwNTIyLDEwNSwxMjA1ODAsMTA1LDEyMDYzOCwxMDUsMTIwNjk2LDEwNSwxMjA3NTQsMTA1LDExMTAsMTA1LDQyNTY3LDEwNSwxMjMxLDEwNSw0Mzg5MywxMDUsNTAyOSwxMDUsNzE4NzUsMTA1LDY1MzU0LDEwNiw4NTIxLDEwNiwxMTk4NDMsMTA2LDExOTg5NSwxMDYsMTE5OTQ3LDEwNiwxMTk5OTksMTA2LDEyMDA1MSwxMDYsMTIwMTAzLDEwNiwxMjAxNTUsMTA2LDEyMDIwNywxMDYsMTIwMjU5LDEwNiwxMjAzMTEsMTA2LDEyMDM2MywxMDYsMTIwNDE1LDEwNiwxMjA0NjcsMTA2LDEwMTEsMTA2LDExMTIsMTA2LDY1MzIyLDc0LDExOTgxNyw3NCwxMTk4NjksNzQsMTE5OTIxLDc0LDExOTk3Myw3NCwxMjAwMjUsNzQsMTIwMDc3LDc0LDEyMDEyOSw3NCwxMjAxODEsNzQsMTIwMjMzLDc0LDEyMDI4NSw3NCwxMjAzMzcsNzQsMTIwMzg5LDc0LDEyMDQ0MSw3NCw0MjkzMCw3NCw4OTUsNzQsMTAzMiw3NCw1MDM1LDc0LDUyNjEsNzQsNDIyMDEsNzQsMTE5ODQ0LDEwNywxMTk4OTYsMTA3LDExOTk0OCwxMDcsMTIwMDAwLDEwNywxMjAwNTIsMTA3LDEyMDEwNCwxMDcsMTIwMTU2LDEwNywxMjAyMDgsMTA3LDEyMDI2MCwxMDcsMTIwMzEyLDEwNywxMjAzNjQsMTA3LDEyMDQxNiwxMDcsMTIwNDY4LDEwNyw4NDkwLDc1LDY1MzIzLDc1LDExOTgxOCw3NSwxMTk4NzAsNzUsMTE5OTIyLDc1LDExOTk3NCw3NSwxMjAwMjYsNzUsMTIwMDc4LDc1LDEyMDEzMCw3NSwxMjAxODIsNzUsMTIwMjM0LDc1LDEyMDI4Niw3NSwxMjAzMzgsNzUsMTIwMzkwLDc1LDEyMDQ0Miw3NSw5MjIsNzUsMTIwNDk3LDc1LDEyMDU1NSw3NSwxMjA2MTMsNzUsMTIwNjcxLDc1LDEyMDcyOSw3NSwxMTQxMiw3NSw1MDk0LDc1LDU4NDUsNzUsNDIxOTksNzUsNjY4NDAsNzUsMTQ3MiwxMDgsODczOSw3Myw5MjEzLDczLDY1NTEyLDczLDE2MzMsMTA4LDE3NzcsNzMsNjYzMzYsMTA4LDEyNTEyNywxMDgsMTIwNzgzLDczLDEyMDc5Myw3MywxMjA4MDMsNzMsMTIwODEzLDczLDEyMDgyMyw3MywxMzAwMzMsNzMsNjUzMjEsNzMsODU0NCw3Myw4NDY0LDczLDg0NjUsNzMsMTE5ODE2LDczLDExOTg2OCw3MywxMTk5MjAsNzMsMTIwMDI0LDczLDEyMDEyOCw3MywxMjAxODAsNzMsMTIwMjMyLDczLDEyMDI4NCw3MywxMjAzMzYsNzMsMTIwMzg4LDczLDEyMDQ0MCw3Myw2NTM1NiwxMDgsODU3Miw3Myw4NDY3LDEwOCwxMTk4NDUsMTA4LDExOTg5NywxMDgsMTE5OTQ5LDEwOCwxMjAwMDEsMTA4LDEyMDA1MywxMDgsMTIwMTA1LDczLDEyMDE1Nyw3MywxMjAyMDksNzMsMTIwMjYxLDczLDEyMDMxMyw3MywxMjAzNjUsNzMsMTIwNDE3LDczLDEyMDQ2OSw3Myw0NDgsNzMsMTIwNDk2LDczLDEyMDU1NCw3MywxMjA2MTIsNzMsMTIwNjcwLDczLDEyMDcyOCw3MywxMTQxMCw3MywxMDMwLDczLDEyMTYsNzMsMTQ5MywxMDgsMTUwMywxMDgsMTU3NSwxMDgsMTI2NDY0LDEwOCwxMjY1OTIsMTA4LDY1MTY2LDEwOCw2NTE2NSwxMDgsMTk5NCwxMDgsMTE1OTksNzMsNTgyNSw3Myw0MjIyNiw3Myw5Mzk5Miw3Myw2NjE4NiwxMjQsNjYzMTMsMTI0LDExOTMzOCw3Niw4NTU2LDc2LDg0NjYsNzYsMTE5ODE5LDc2LDExOTg3MSw3NiwxMTk5MjMsNzYsMTIwMDI3LDc2LDEyMDA3OSw3NiwxMjAxMzEsNzYsMTIwMTgzLDc2LDEyMDIzNSw3NiwxMjAyODcsNzYsMTIwMzM5LDc2LDEyMDM5MSw3NiwxMjA0NDMsNzYsMTE0NzIsNzYsNTA4Niw3Niw1MjkwLDc2LDQyMjA5LDc2LDkzOTc0LDc2LDcxODQzLDc2LDcxODU4LDc2LDY2NTg3LDc2LDY2ODU0LDc2LDY1MzI1LDc3LDg1NTksNzcsODQ5OSw3NywxMTk4MjAsNzcsMTE5ODcyLDc3LDExOTkyNCw3NywxMjAwMjgsNzcsMTIwMDgwLDc3LDEyMDEzMiw3NywxMjAxODQsNzcsMTIwMjM2LDc3LDEyMDI4OCw3NywxMjAzNDAsNzcsMTIwMzkyLDc3LDEyMDQ0NCw3Nyw5MjQsNzcsMTIwNDk5LDc3LDEyMDU1Nyw3NywxMjA2MTUsNzcsMTIwNjczLDc3LDEyMDczMSw3NywxMDE4LDc3LDExNDE2LDc3LDUwNDcsNzcsNTYxNiw3Nyw1ODQ2LDc3LDQyMjA3LDc3LDY2MjI0LDc3LDY2MzIxLDc3LDExOTg0NywxMTAsMTE5ODk5LDExMCwxMTk5NTEsMTEwLDEyMDAwMywxMTAsMTIwMDU1LDExMCwxMjAxMDcsMTEwLDEyMDE1OSwxMTAsMTIwMjExLDExMCwxMjAyNjMsMTEwLDEyMDMxNSwxMTAsMTIwMzY3LDExMCwxMjA0MTksMTEwLDEyMDQ3MSwxMTAsMTQwMCwxMTAsMTQwNCwxMTAsNjUzMjYsNzgsODQ2OSw3OCwxMTk4MjEsNzgsMTE5ODczLDc4LDExOTkyNSw3OCwxMTk5NzcsNzgsMTIwMDI5LDc4LDEyMDA4MSw3OCwxMjAxODUsNzgsMTIwMjM3LDc4LDEyMDI4OSw3OCwxMjAzNDEsNzgsMTIwMzkzLDc4LDEyMDQ0NSw3OCw5MjUsNzgsMTIwNTAwLDc4LDEyMDU1OCw3OCwxMjA2MTYsNzgsMTIwNjc0LDc4LDEyMDczMiw3OCwxMTQxOCw3OCw0MjIwOCw3OCw2NjgzNSw3OCwzMDc0LDExMSwzMjAyLDExMSwzMzMwLDExMSwzNDU4LDExMSwyNDA2LDExMSwyNjYyLDExMSwyNzkwLDExMSwzMDQ2LDExMSwzMTc0LDExMSwzMzAyLDExMSwzNDMwLDExMSwzNjY0LDExMSwzNzkyLDExMSw0MTYwLDExMSwxNjM3LDExMSwxNzgxLDExMSw2NTM1OSwxMTEsODUwMCwxMTEsMTE5ODQ4LDExMSwxMTk5MDAsMTExLDExOTk1MiwxMTEsMTIwMDU2LDExMSwxMjAxMDgsMTExLDEyMDE2MCwxMTEsMTIwMjEyLDExMSwxMjAyNjQsMTExLDEyMDMxNiwxMTEsMTIwMzY4LDExMSwxMjA0MjAsMTExLDEyMDQ3MiwxMTEsNzQzOSwxMTEsNzQ0MSwxMTEsNDM4MzcsMTExLDk1OSwxMTEsMTIwNTI4LDExMSwxMjA1ODYsMTExLDEyMDY0NCwxMTEsMTIwNzAyLDExMSwxMjA3NjAsMTExLDk2MywxMTEsMTIwNTMyLDExMSwxMjA1OTAsMTExLDEyMDY0OCwxMTEsMTIwNzA2LDExMSwxMjA3NjQsMTExLDExNDIzLDExMSw0MzUxLDExMSwxNDEzLDExMSwxNTA1LDExMSwxNjA3LDExMSwxMjY1MDAsMTExLDEyNjU2NCwxMTEsMTI2NTk2LDExMSw2NTI1OSwxMTEsNjUyNjAsMTExLDY1MjU4LDExMSw2NTI1NywxMTEsMTcyNiwxMTEsNjQ0MjgsMTExLDY0NDI5LDExMSw2NDQyNywxMTEsNjQ0MjYsMTExLDE3MjksMTExLDY0NDI0LDExMSw2NDQyNSwxMTEsNjQ0MjMsMTExLDY0NDIyLDExMSwxNzQ5LDExMSwzMzYwLDExMSw0MTI1LDExMSw2Njc5NCwxMTEsNzE4ODAsMTExLDcxODk1LDExMSw2NjYwNCwxMTEsMTk4NCw3OSwyNTM0LDc5LDI5MTgsNzksMTIyOTUsNzksNzA4NjQsNzksNzE5MDQsNzksMTIwNzgyLDc5LDEyMDc5Miw3OSwxMjA4MDIsNzksMTIwODEyLDc5LDEyMDgyMiw3OSwxMzAwMzIsNzksNjUzMjcsNzksMTE5ODIyLDc5LDExOTg3NCw3OSwxMTk5MjYsNzksMTE5OTc4LDc5LDEyMDAzMCw3OSwxMjAwODIsNzksMTIwMTM0LDc5LDEyMDE4Niw3OSwxMjAyMzgsNzksMTIwMjkwLDc5LDEyMDM0Miw3OSwxMjAzOTQsNzksMTIwNDQ2LDc5LDkyNyw3OSwxMjA1MDIsNzksMTIwNTYwLDc5LDEyMDYxOCw3OSwxMjA2NzYsNzksMTIwNzM0LDc5LDExNDIyLDc5LDEzNjUsNzksMTE2MDQsNzksNDgxNiw3OSwyODQ4LDc5LDY2NzU0LDc5LDQyMjI3LDc5LDcxODYxLDc5LDY2MTk0LDc5LDY2MjE5LDc5LDY2NTY0LDc5LDY2ODM4LDc5LDkwNzYsMTEyLDY1MzYwLDExMiwxMTk4NDksMTEyLDExOTkwMSwxMTIsMTE5OTUzLDExMiwxMjAwMDUsMTEyLDEyMDA1NywxMTIsMTIwMTA5LDExMiwxMjAxNjEsMTEyLDEyMDIxMywxMTIsMTIwMjY1LDExMiwxMjAzMTcsMTEyLDEyMDM2OSwxMTIsMTIwNDIxLDExMiwxMjA0NzMsMTEyLDk2MSwxMTIsMTIwNTMwLDExMiwxMjA1NDQsMTEyLDEyMDU4OCwxMTIsMTIwNjAyLDExMiwxMjA2NDYsMTEyLDEyMDY2MCwxMTIsMTIwNzA0LDExMiwxMjA3MTgsMTEyLDEyMDc2MiwxMTIsMTIwNzc2LDExMiwxMTQyNywxMTIsNjUzMjgsODAsODQ3Myw4MCwxMTk4MjMsODAsMTE5ODc1LDgwLDExOTkyNyw4MCwxMTk5NzksODAsMTIwMDMxLDgwLDEyMDA4Myw4MCwxMjAxODcsODAsMTIwMjM5LDgwLDEyMDI5MSw4MCwxMjAzNDMsODAsMTIwMzk1LDgwLDEyMDQ0Nyw4MCw5MjksODAsMTIwNTA0LDgwLDEyMDU2Miw4MCwxMjA2MjAsODAsMTIwNjc4LDgwLDEyMDczNiw4MCwxMTQyNiw4MCw1MDkwLDgwLDUyMjksODAsNDIxOTMsODAsNjYxOTcsODAsMTE5ODUwLDExMywxMTk5MDIsMTEzLDExOTk1NCwxMTMsMTIwMDA2LDExMywxMjAwNTgsMTEzLDEyMDExMCwxMTMsMTIwMTYyLDExMywxMjAyMTQsMTEzLDEyMDI2NiwxMTMsMTIwMzE4LDExMywxMjAzNzAsMTEzLDEyMDQyMiwxMTMsMTIwNDc0LDExMywxMzA3LDExMywxMzc5LDExMywxMzgyLDExMyw4NDc0LDgxLDExOTgyNCw4MSwxMTk4NzYsODEsMTE5OTI4LDgxLDExOTk4MCw4MSwxMjAwMzIsODEsMTIwMDg0LDgxLDEyMDE4OCw4MSwxMjAyNDAsODEsMTIwMjkyLDgxLDEyMDM0NCw4MSwxMjAzOTYsODEsMTIwNDQ4LDgxLDExNjA1LDgxLDExOTg1MSwxMTQsMTE5OTAzLDExNCwxMTk5NTUsMTE0LDEyMDAwNywxMTQsMTIwMDU5LDExNCwxMjAxMTEsMTE0LDEyMDE2MywxMTQsMTIwMjE1LDExNCwxMjAyNjcsMTE0LDEyMDMxOSwxMTQsMTIwMzcxLDExNCwxMjA0MjMsMTE0LDEyMDQ3NSwxMTQsNDM4NDcsMTE0LDQzODQ4LDExNCw3NDYyLDExNCwxMTM5NywxMTQsNDM5MDUsMTE0LDExOTMxOCw4Miw4NDc1LDgyLDg0NzYsODIsODQ3Nyw4MiwxMTk4MjUsODIsMTE5ODc3LDgyLDExOTkyOSw4MiwxMjAwMzMsODIsMTIwMTg5LDgyLDEyMDI0MSw4MiwxMjAyOTMsODIsMTIwMzQ1LDgyLDEyMDM5Nyw4MiwxMjA0NDksODIsNDIyLDgyLDUwMjUsODIsNTA3NCw4Miw2Njc0MCw4Miw1NTExLDgyLDQyMjExLDgyLDk0MDA1LDgyLDY1MzYzLDExNSwxMTk4NTIsMTE1LDExOTkwNCwxMTUsMTE5OTU2LDExNSwxMjAwMDgsMTE1LDEyMDA2MCwxMTUsMTIwMTEyLDExNSwxMjAxNjQsMTE1LDEyMDIxNiwxMTUsMTIwMjY4LDExNSwxMjAzMjAsMTE1LDEyMDM3MiwxMTUsMTIwNDI0LDExNSwxMjA0NzYsMTE1LDQyODAxLDExNSw0NDUsMTE1LDExMDksMTE1LDQzOTQ2LDExNSw3MTg3MywxMTUsNjY2MzIsMTE1LDY1MzMxLDgzLDExOTgyNiw4MywxMTk4NzgsODMsMTE5OTMwLDgzLDExOTk4Miw4MywxMjAwMzQsODMsMTIwMDg2LDgzLDEyMDEzOCw4MywxMjAxOTAsODMsMTIwMjQyLDgzLDEyMDI5NCw4MywxMjAzNDYsODMsMTIwMzk4LDgzLDEyMDQ1MCw4MywxMDI5LDgzLDEzNTksODMsNTA3Nyw4Myw1MDgyLDgzLDQyMjEwLDgzLDk0MDEwLDgzLDY2MTk4LDgzLDY2NTkyLDgzLDExOTg1MywxMTYsMTE5OTA1LDExNiwxMTk5NTcsMTE2LDEyMDAwOSwxMTYsMTIwMDYxLDExNiwxMjAxMTMsMTE2LDEyMDE2NSwxMTYsMTIwMjE3LDExNiwxMjAyNjksMTE2LDEyMDMyMSwxMTYsMTIwMzczLDExNiwxMjA0MjUsMTE2LDEyMDQ3NywxMTYsODg2OCw4NCwxMDIwMSw4NCwxMjg4NzIsODQsNjUzMzIsODQsMTE5ODI3LDg0LDExOTg3OSw4NCwxMTk5MzEsODQsMTE5OTgzLDg0LDEyMDAzNSw4NCwxMjAwODcsODQsMTIwMTM5LDg0LDEyMDE5MSw4NCwxMjAyNDMsODQsMTIwMjk1LDg0LDEyMDM0Nyw4NCwxMjAzOTksODQsMTIwNDUxLDg0LDkzMiw4NCwxMjA1MDcsODQsMTIwNTY1LDg0LDEyMDYyMyw4NCwxMjA2ODEsODQsMTIwNzM5LDg0LDExNDMwLDg0LDUwMjYsODQsNDIxOTYsODQsOTM5NjIsODQsNzE4NjgsODQsNjYxOTksODQsNjYyMjUsODQsNjYzMjUsODQsMTE5ODU0LDExNywxMTk5MDYsMTE3LDExOTk1OCwxMTcsMTIwMDEwLDExNywxMjAwNjIsMTE3LDEyMDExNCwxMTcsMTIwMTY2LDExNywxMjAyMTgsMTE3LDEyMDI3MCwxMTcsMTIwMzIyLDExNywxMjAzNzQsMTE3LDEyMDQyNiwxMTcsMTIwNDc4LDExNyw0MjkxMSwxMTcsNzQ1MiwxMTcsNDM4NTQsMTE3LDQzODU4LDExNyw2NTEsMTE3LDk2NSwxMTcsMTIwNTM0LDExNywxMjA1OTIsMTE3LDEyMDY1MCwxMTcsMTIwNzA4LDExNywxMjA3NjYsMTE3LDE0MDUsMTE3LDY2ODA2LDExNyw3MTg5NiwxMTcsODc0Niw4NSw4ODk5LDg1LDExOTgyOCw4NSwxMTk4ODAsODUsMTE5OTMyLDg1LDExOTk4NCw4NSwxMjAwMzYsODUsMTIwMDg4LDg1LDEyMDE0MCw4NSwxMjAxOTIsODUsMTIwMjQ0LDg1LDEyMDI5Niw4NSwxMjAzNDgsODUsMTIwNDAwLDg1LDEyMDQ1Miw4NSwxMzU3LDg1LDQ2MDgsODUsNjY3NjYsODUsNTE5Niw4NSw0MjIyOCw4NSw5NDAxOCw4NSw3MTg2NCw4NSw4NzQ0LDExOCw4ODk3LDExOCw2NTM2NiwxMTgsODU2NCwxMTgsMTE5ODU1LDExOCwxMTk5MDcsMTE4LDExOTk1OSwxMTgsMTIwMDExLDExOCwxMjAwNjMsMTE4LDEyMDExNSwxMTgsMTIwMTY3LDExOCwxMjAyMTksMTE4LDEyMDI3MSwxMTgsMTIwMzIzLDExOCwxMjAzNzUsMTE4LDEyMDQyNywxMTgsMTIwNDc5LDExOCw3NDU2LDExOCw5NTcsMTE4LDEyMDUyNiwxMTgsMTIwNTg0LDExOCwxMjA2NDIsMTE4LDEyMDcwMCwxMTgsMTIwNzU4LDExOCwxMTQxLDExOCwxNDk2LDExOCw3MTQzMCwxMTgsNDM5NDUsMTE4LDcxODcyLDExOCwxMTkzMDksODYsMTYzOSw4NiwxNzgzLDg2LDg1NDgsODYsMTE5ODI5LDg2LDExOTg4MSw4NiwxMTk5MzMsODYsMTE5OTg1LDg2LDEyMDAzNyw4NiwxMjAwODksODYsMTIwMTQxLDg2LDEyMDE5Myw4NiwxMjAyNDUsODYsMTIwMjk3LDg2LDEyMDM0OSw4NiwxMjA0MDEsODYsMTIwNDUzLDg2LDExNDAsODYsMTE1NzYsODYsNTA4MSw4Niw1MTY3LDg2LDQyNzE5LDg2LDQyMjE0LDg2LDkzOTYwLDg2LDcxODQwLDg2LDY2ODQ1LDg2LDYyMywxMTksMTE5ODU2LDExOSwxMTk5MDgsMTE5LDExOTk2MCwxMTksMTIwMDEyLDExOSwxMjAwNjQsMTE5LDEyMDExNiwxMTksMTIwMTY4LDExOSwxMjAyMjAsMTE5LDEyMDI3MiwxMTksMTIwMzI0LDExOSwxMjAzNzYsMTE5LDEyMDQyOCwxMTksMTIwNDgwLDExOSw3NDU3LDExOSwxMTIxLDExOSwxMzA5LDExOSwxMzc3LDExOSw3MTQzNCwxMTksNzE0MzgsMTE5LDcxNDM5LDExOSw0MzkwNywxMTksNzE5MTksODcsNzE5MTAsODcsMTE5ODMwLDg3LDExOTg4Miw4NywxMTk5MzQsODcsMTE5OTg2LDg3LDEyMDAzOCw4NywxMjAwOTAsODcsMTIwMTQyLDg3LDEyMDE5NCw4NywxMjAyNDYsODcsMTIwMjk4LDg3LDEyMDM1MCw4NywxMjA0MDIsODcsMTIwNDU0LDg3LDEzMDgsODcsNTA0Myw4Nyw1MDc2LDg3LDQyMjE4LDg3LDU3NDIsMTIwLDEwNTM5LDEyMCwxMDU0MCwxMjAsMTA3OTksMTIwLDY1MzY4LDEyMCw4NTY5LDEyMCwxMTk4NTcsMTIwLDExOTkwOSwxMjAsMTE5OTYxLDEyMCwxMjAwMTMsMTIwLDEyMDA2NSwxMjAsMTIwMTE3LDEyMCwxMjAxNjksMTIwLDEyMDIyMSwxMjAsMTIwMjczLDEyMCwxMjAzMjUsMTIwLDEyMDM3NywxMjAsMTIwNDI5LDEyMCwxMjA0ODEsMTIwLDU0NDEsMTIwLDU1MDEsMTIwLDU3NDEsODgsOTU4Nyw4OCw2NjMzOCw4OCw3MTkxNiw4OCw2NTMzNiw4OCw4NTUzLDg4LDExOTgzMSw4OCwxMTk4ODMsODgsMTE5OTM1LDg4LDExOTk4Nyw4OCwxMjAwMzksODgsMTIwMDkxLDg4LDEyMDE0Myw4OCwxMjAxOTUsODgsMTIwMjQ3LDg4LDEyMDI5OSw4OCwxMjAzNTEsODgsMTIwNDAzLDg4LDEyMDQ1NSw4OCw0MjkzMSw4OCw5MzUsODgsMTIwNTEwLDg4LDEyMDU2OCw4OCwxMjA2MjYsODgsMTIwNjg0LDg4LDEyMDc0Miw4OCwxMTQzNiw4OCwxMTYxMyw4OCw1ODE1LDg4LDQyMjE5LDg4LDY2MTkyLDg4LDY2MjI4LDg4LDY2MzI3LDg4LDY2ODU1LDg4LDYxMSwxMjEsNzU2NCwxMjEsNjUzNjksMTIxLDExOTg1OCwxMjEsMTE5OTEwLDEyMSwxMTk5NjIsMTIxLDEyMDAxNCwxMjEsMTIwMDY2LDEyMSwxMjAxMTgsMTIxLDEyMDE3MCwxMjEsMTIwMjIyLDEyMSwxMjAyNzQsMTIxLDEyMDMyNiwxMjEsMTIwMzc4LDEyMSwxMjA0MzAsMTIxLDEyMDQ4MiwxMjEsNjU1LDEyMSw3OTM1LDEyMSw0Mzg2NiwxMjEsOTQ3LDEyMSw4NTA5LDEyMSwxMjA1MTYsMTIxLDEyMDU3NCwxMjEsMTIwNjMyLDEyMSwxMjA2OTAsMTIxLDEyMDc0OCwxMjEsMTE5OSwxMjEsNDMyNywxMjEsNzE5MDAsMTIxLDY1MzM3LDg5LDExOTgzMiw4OSwxMTk4ODQsODksMTE5OTM2LDg5LDExOTk4OCw4OSwxMjAwNDAsODksMTIwMDkyLDg5LDEyMDE0NCw4OSwxMjAxOTYsODksMTIwMjQ4LDg5LDEyMDMwMCw4OSwxMjAzNTIsODksMTIwNDA0LDg5LDEyMDQ1Niw4OSw5MzMsODksOTc4LDg5LDEyMDUwOCw4OSwxMjA1NjYsODksMTIwNjI0LDg5LDEyMDY4Miw4OSwxMjA3NDAsODksMTE0MzIsODksMTE5OCw4OSw1MDMzLDg5LDUwNTMsODksNDIyMjAsODksOTQwMTksODksNzE4NDQsODksNjYyMjYsODksMTE5ODU5LDEyMiwxMTk5MTEsMTIyLDExOTk2MywxMjIsMTIwMDE1LDEyMiwxMjAwNjcsMTIyLDEyMDExOSwxMjIsMTIwMTcxLDEyMiwxMjAyMjMsMTIyLDEyMDI3NSwxMjIsMTIwMzI3LDEyMiwxMjAzNzksMTIyLDEyMDQzMSwxMjIsMTIwNDgzLDEyMiw3NDU4LDEyMiw0MzkyMywxMjIsNzE4NzYsMTIyLDY2MjkzLDkwLDcxOTA5LDkwLDY1MzM4LDkwLDg0ODQsOTAsODQ4OCw5MCwxMTk4MzMsOTAsMTE5ODg1LDkwLDExOTkzNyw5MCwxMTk5ODksOTAsMTIwMDQxLDkwLDEyMDE5Nyw5MCwxMjAyNDksOTAsMTIwMzAxLDkwLDEyMDM1Myw5MCwxMjA0MDUsOTAsMTIwNDU3LDkwLDkxOCw5MCwxMjA0OTMsOTAsMTIwNTUxLDkwLDEyMDYwOSw5MCwxMjA2NjcsOTAsMTIwNzI1LDkwLDUwNTksOTAsNDIyMDQsOTAsNzE4NDksOTAsNjUyODIsMzQsNjUyODQsMzYsNjUyODUsMzcsNjUyODYsMzgsNjUyOTAsNDIsNjUyOTEsNDMsNjUyOTQsNDYsNjUyOTUsNDcsNjUyOTYsNDgsNjUyOTcsNDksNjUyOTgsNTAsNjUyOTksNTEsNjUzMDAsNTIsNjUzMDEsNTMsNjUzMDIsNTQsNjUzMDMsNTUsNjUzMDQsNTYsNjUzMDUsNTcsNjUzMDgsNjAsNjUzMDksNjEsNjUzMTAsNjIsNjUzMTIsNjQsNjUzMTYsNjgsNjUzMTgsNzAsNjUzMTksNzEsNjUzMjQsNzYsNjUzMjksODEsNjUzMzAsODIsNjUzMzMsODUsNjUzMzQsODYsNjUzMzUsODcsNjUzNDMsOTUsNjUzNDYsOTgsNjUzNDgsMTAwLDY1MzUwLDEwMiw2NTM1NSwxMDcsNjUzNTcsMTA5LDY1MzU4LDExMCw2NTM2MSwxMTMsNjUzNjIsMTE0LDY1MzY0LDExNiw2NTM2NSwxMTcsNjUzNjcsMTE5LDY1MzcwLDEyMiw2NTM3MSwxMjMsNjUzNzMsMTI1XSwiX2RlZmF1bHQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiY3MiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImRlIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJlcyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJmciI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJpdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiamEiOls4MjExLDQ1LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI5Miw0NCw2NTMwNyw1OV0sImtvIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwbCI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwdC1CUiI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJxcHMtcGxvYyI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJydSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMzA1LDEwNSw5MjEsNzMsMTAwOSwxMTIsMjE1LDEyMCw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInRyIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInpoLWhhbnMiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODgsNDAsNjUyODksNDFdLCJ6aC1oYW50IjpbODIxMSw0NSw2NTM3NCwxMjYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MzA3LDU5XX0nKSkpLFkuY2FjaGU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZm49ZSx0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQoZSl7Y29uc3QgdD1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gdGhpcy5sYXN0QXJnS2V5IT09dCYmKHRoaXMubGFzdEFyZ0tleT10LHRoaXMubGFzdENhY2hlPXRoaXMuZm4oZSkpLHRoaXMubGFzdENhY2hlfX0oKGU9PntmdW5jdGlvbiB0KGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTIpdC5zZXQoZVtuXSxlW24rMV0pO3JldHVybiB0fWZ1bmN0aW9uIG4oZSx0KXtpZighZSlyZXR1cm4gdDtjb25zdCBuPW5ldyBNYXA7Zm9yKGNvbnN0W3IsaV1vZiBlKXQuaGFzKHIpJiZuLnNldChyLGkpO3JldHVybiBufWNvbnN0IHI9RC5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCk7bGV0IGksbz1lLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpJiZlIGluIHIpKTswPT09by5sZW5ndGgmJihvPVsiX2RlZmF1bHQiXSk7Zm9yKGNvbnN0IGUgb2Ygbyl7aT1uKGksdChyW2VdKSl9Y29uc3QgYT1mdW5jdGlvbihlLHQpe2NvbnN0IG49bmV3IE1hcChlKTtmb3IoY29uc3RbZSxyXW9mIHQpbi5zZXQoZSxyKTtyZXR1cm4gbn0odChyLl9jb21tb24pLGkpO3JldHVybiBuZXcgWShhKX0pKSxZLl9sb2NhbGVzPW5ldyB6KCgoKT0+T2JqZWN0LmtleXMoWS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCkpLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpKSkpKTtjbGFzcyBRe3N0YXRpYyBnZXRSYXdEYXRhKCl7cmV0dXJuIEpTT04ucGFyc2UoIls5LDEwLDExLDEyLDEzLDMyLDEyNywxNjAsMTczLDg0NywxNTY0LDQ0NDcsNDQ0OCw2MDY4LDYwNjksNjE1NSw2MTU2LDYxNTcsNjE1OCw3MzU1LDczNTYsODE5Miw4MTkzLDgxOTQsODE5NSw4MTk2LDgxOTcsODE5OCw4MTk5LDgyMDAsODIwMSw4MjAyLDgyMDMsODIwNCw4MjA1LDgyMDYsODIwNyw4MjM0LDgyMzUsODIzNiw4MjM3LDgyMzgsODIzOSw4Mjg3LDgyODgsODI4OSw4MjkwLDgyOTEsODI5Miw4MjkzLDgyOTQsODI5NSw4Mjk2LDgyOTcsODI5OCw4Mjk5LDgzMDAsODMwMSw4MzAyLDgzMDMsMTAyNDAsMTIyODgsMTI2NDQsNjUwMjQsNjUwMjUsNjUwMjYsNjUwMjcsNjUwMjgsNjUwMjksNjUwMzAsNjUwMzEsNjUwMzIsNjUwMzMsNjUwMzQsNjUwMzUsNjUwMzYsNjUwMzcsNjUwMzgsNjUwMzksNjUyNzksNjU0NDAsNjU1MjAsNjU1MjEsNjU1MjIsNjU1MjMsNjU1MjQsNjU1MjUsNjU1MjYsNjU1MjcsNjU1MjgsNjU1MzIsNzg4NDQsMTE5MTU1LDExOTE1NiwxMTkxNTcsMTE5MTU4LDExOTE1OSwxMTkxNjAsMTE5MTYxLDExOTE2Miw5MTc1MDQsOTE3NTA1LDkxNzUwNiw5MTc1MDcsOTE3NTA4LDkxNzUwOSw5MTc1MTAsOTE3NTExLDkxNzUxMiw5MTc1MTMsOTE3NTE0LDkxNzUxNSw5MTc1MTYsOTE3NTE3LDkxNzUxOCw5MTc1MTksOTE3NTIwLDkxNzUyMSw5MTc1MjIsOTE3NTIzLDkxNzUyNCw5MTc1MjUsOTE3NTI2LDkxNzUyNyw5MTc1MjgsOTE3NTI5LDkxNzUzMCw5MTc1MzEsOTE3NTMyLDkxNzUzMyw5MTc1MzQsOTE3NTM1LDkxNzUzNiw5MTc1MzcsOTE3NTM4LDkxNzUzOSw5MTc1NDAsOTE3NTQxLDkxNzU0Miw5MTc1NDMsOTE3NTQ0LDkxNzU0NSw5MTc1NDYsOTE3NTQ3LDkxNzU0OCw5MTc1NDksOTE3NTUwLDkxNzU1MSw5MTc1NTIsOTE3NTUzLDkxNzU1NCw5MTc1NTUsOTE3NTU2LDkxNzU1Nyw5MTc1NTgsOTE3NTU5LDkxNzU2MCw5MTc1NjEsOTE3NTYyLDkxNzU2Myw5MTc1NjQsOTE3NTY1LDkxNzU2Niw5MTc1NjcsOTE3NTY4LDkxNzU2OSw5MTc1NzAsOTE3NTcxLDkxNzU3Miw5MTc1NzMsOTE3NTc0LDkxNzU3NSw5MTc1NzYsOTE3NTc3LDkxNzU3OCw5MTc1NzksOTE3NTgwLDkxNzU4MSw5MTc1ODIsOTE3NTgzLDkxNzU4NCw5MTc1ODUsOTE3NTg2LDkxNzU4Nyw5MTc1ODgsOTE3NTg5LDkxNzU5MCw5MTc1OTEsOTE3NTkyLDkxNzU5Myw5MTc1OTQsOTE3NTk1LDkxNzU5Niw5MTc1OTcsOTE3NTk4LDkxNzU5OSw5MTc2MDAsOTE3NjAxLDkxNzYwMiw5MTc2MDMsOTE3NjA0LDkxNzYwNSw5MTc2MDYsOTE3NjA3LDkxNzYwOCw5MTc2MDksOTE3NjEwLDkxNzYxMSw5MTc2MTIsOTE3NjEzLDkxNzYxNCw5MTc2MTUsOTE3NjE2LDkxNzYxNyw5MTc2MTgsOTE3NjE5LDkxNzYyMCw5MTc2MjEsOTE3NjIyLDkxNzYyMyw5MTc2MjQsOTE3NjI1LDkxNzYyNiw5MTc2MjcsOTE3NjI4LDkxNzYyOSw5MTc2MzAsOTE3NjMxLDkxNzc2MCw5MTc3NjEsOTE3NzYyLDkxNzc2Myw5MTc3NjQsOTE3NzY1LDkxNzc2Niw5MTc3NjcsOTE3NzY4LDkxNzc2OSw5MTc3NzAsOTE3NzcxLDkxNzc3Miw5MTc3NzMsOTE3Nzc0LDkxNzc3NSw5MTc3NzYsOTE3Nzc3LDkxNzc3OCw5MTc3NzksOTE3NzgwLDkxNzc4MSw5MTc3ODIsOTE3NzgzLDkxNzc4NCw5MTc3ODUsOTE3Nzg2LDkxNzc4Nyw5MTc3ODgsOTE3Nzg5LDkxNzc5MCw5MTc3OTEsOTE3NzkyLDkxNzc5Myw5MTc3OTQsOTE3Nzk1LDkxNzc5Niw5MTc3OTcsOTE3Nzk4LDkxNzc5OSw5MTc4MDAsOTE3ODAxLDkxNzgwMiw5MTc4MDMsOTE3ODA0LDkxNzgwNSw5MTc4MDYsOTE3ODA3LDkxNzgwOCw5MTc4MDksOTE3ODEwLDkxNzgxMSw5MTc4MTIsOTE3ODEzLDkxNzgxNCw5MTc4MTUsOTE3ODE2LDkxNzgxNyw5MTc4MTgsOTE3ODE5LDkxNzgyMCw5MTc4MjEsOTE3ODIyLDkxNzgyMyw5MTc4MjQsOTE3ODI1LDkxNzgyNiw5MTc4MjcsOTE3ODI4LDkxNzgyOSw5MTc4MzAsOTE3ODMxLDkxNzgzMiw5MTc4MzMsOTE3ODM0LDkxNzgzNSw5MTc4MzYsOTE3ODM3LDkxNzgzOCw5MTc4MzksOTE3ODQwLDkxNzg0MSw5MTc4NDIsOTE3ODQzLDkxNzg0NCw5MTc4NDUsOTE3ODQ2LDkxNzg0Nyw5MTc4NDgsOTE3ODQ5LDkxNzg1MCw5MTc4NTEsOTE3ODUyLDkxNzg1Myw5MTc4NTQsOTE3ODU1LDkxNzg1Niw5MTc4NTcsOTE3ODU4LDkxNzg1OSw5MTc4NjAsOTE3ODYxLDkxNzg2Miw5MTc4NjMsOTE3ODY0LDkxNzg2NSw5MTc4NjYsOTE3ODY3LDkxNzg2OCw5MTc4NjksOTE3ODcwLDkxNzg3MSw5MTc4NzIsOTE3ODczLDkxNzg3NCw5MTc4NzUsOTE3ODc2LDkxNzg3Nyw5MTc4NzgsOTE3ODc5LDkxNzg4MCw5MTc4ODEsOTE3ODgyLDkxNzg4Myw5MTc4ODQsOTE3ODg1LDkxNzg4Niw5MTc4ODcsOTE3ODg4LDkxNzg4OSw5MTc4OTAsOTE3ODkxLDkxNzg5Miw5MTc4OTMsOTE3ODk0LDkxNzg5NSw5MTc4OTYsOTE3ODk3LDkxNzg5OCw5MTc4OTksOTE3OTAwLDkxNzkwMSw5MTc5MDIsOTE3OTAzLDkxNzkwNCw5MTc5MDUsOTE3OTA2LDkxNzkwNyw5MTc5MDgsOTE3OTA5LDkxNzkxMCw5MTc5MTEsOTE3OTEyLDkxNzkxMyw5MTc5MTQsOTE3OTE1LDkxNzkxNiw5MTc5MTcsOTE3OTE4LDkxNzkxOSw5MTc5MjAsOTE3OTIxLDkxNzkyMiw5MTc5MjMsOTE3OTI0LDkxNzkyNSw5MTc5MjYsOTE3OTI3LDkxNzkyOCw5MTc5MjksOTE3OTMwLDkxNzkzMSw5MTc5MzIsOTE3OTMzLDkxNzkzNCw5MTc5MzUsOTE3OTM2LDkxNzkzNyw5MTc5MzgsOTE3OTM5LDkxNzk0MCw5MTc5NDEsOTE3OTQyLDkxNzk0Myw5MTc5NDQsOTE3OTQ1LDkxNzk0Niw5MTc5NDcsOTE3OTQ4LDkxNzk0OSw5MTc5NTAsOTE3OTUxLDkxNzk1Miw5MTc5NTMsOTE3OTU0LDkxNzk1NSw5MTc5NTYsOTE3OTU3LDkxNzk1OCw5MTc5NTksOTE3OTYwLDkxNzk2MSw5MTc5NjIsOTE3OTYzLDkxNzk2NCw5MTc5NjUsOTE3OTY2LDkxNzk2Nyw5MTc5NjgsOTE3OTY5LDkxNzk3MCw5MTc5NzEsOTE3OTcyLDkxNzk3Myw5MTc5NzQsOTE3OTc1LDkxNzk3Niw5MTc5NzcsOTE3OTc4LDkxNzk3OSw5MTc5ODAsOTE3OTgxLDkxNzk4Miw5MTc5ODMsOTE3OTg0LDkxNzk4NSw5MTc5ODYsOTE3OTg3LDkxNzk4OCw5MTc5ODksOTE3OTkwLDkxNzk5MSw5MTc5OTIsOTE3OTkzLDkxNzk5NCw5MTc5OTUsOTE3OTk2LDkxNzk5Nyw5MTc5OTgsOTE3OTk5XSIpfXN0YXRpYyBnZXREYXRhKCl7cmV0dXJuIHRoaXMuX2RhdGF8fCh0aGlzLl9kYXRhPW5ldyBTZXQoUS5nZXRSYXdEYXRhKCkpKSx0aGlzLl9kYXRhfXN0YXRpYyBpc0ludmlzaWJsZUNoYXJhY3RlcihlKXtyZXR1cm4gUS5nZXREYXRhKCkuaGFzKGUpfXN0YXRpYyBnZXQgY29kZVBvaW50cygpe3JldHVybiBRLmdldERhdGEoKX19US5fZGF0YT12b2lkIDA7Y2xhc3MgZWV7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy5tZXRob2Q9bix0aGlzLmFyZ3M9cix0aGlzLnR5cGU9MH19Y2xhc3MgdGV7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy52c1dvcmtlcj1lLHRoaXMuc2VxPXQsdGhpcy5yZXM9bix0aGlzLmVycj1yLHRoaXMudHlwZT0xfX1jbGFzcyBuZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLmV2ZW50TmFtZT1uLHRoaXMuYXJnPXIsdGhpcy50eXBlPTJ9fWNsYXNzIHJle2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLmV2ZW50PW4sdGhpcy50eXBlPTN9fWNsYXNzIGlle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy50eXBlPTR9fWNsYXNzIG9le2NvbnN0cnVjdG9yKGUpe3RoaXMuX3dvcmtlcklkPS0xLHRoaXMuX2hhbmRsZXI9ZSx0aGlzLl9sYXN0U2VudFJlcT0wLHRoaXMuX3BlbmRpbmdSZXBsaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0V2ZW50cz1uZXcgTWFwfXNldFdvcmtlcklkKGUpe3RoaXMuX3dvcmtlcklkPWV9c2VuZE1lc3NhZ2UoZSx0KXtjb25zdCBuPVN0cmluZygrK3RoaXMuX2xhc3RTZW50UmVxKTtyZXR1cm4gbmV3IFByb21pc2UoKChyLGkpPT57dGhpcy5fcGVuZGluZ1JlcGxpZXNbbl09e3Jlc29sdmU6cixyZWplY3Q6aX0sdGhpcy5fc2VuZChuZXcgZWUodGhpcy5fd29ya2VySWQsbixlLHQpKX0pKX1saXN0ZW4oZSx0KXtsZXQgbj1udWxsO2NvbnN0IHI9bmV3IEIoe29uRmlyc3RMaXN0ZW5lckFkZDooKT0+e249U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpLHRoaXMuX3BlbmRpbmdFbWl0dGVycy5zZXQobixyKSx0aGlzLl9zZW5kKG5ldyBuZSh0aGlzLl93b3JrZXJJZCxuLGUsdCkpfSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+e3RoaXMuX3BlbmRpbmdFbWl0dGVycy5kZWxldGUobiksdGhpcy5fc2VuZChuZXcgaWUodGhpcy5fd29ya2VySWQsbikpLG49bnVsbH19KTtyZXR1cm4gci5ldmVudH1oYW5kbGVNZXNzYWdlKGUpe2UmJmUudnNXb3JrZXImJigtMSE9PXRoaXMuX3dvcmtlcklkJiZlLnZzV29ya2VyIT09dGhpcy5fd29ya2VySWR8fHRoaXMuX2hhbmRsZU1lc3NhZ2UoZSkpfV9oYW5kbGVNZXNzYWdlKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5faGFuZGxlUmVwbHlNZXNzYWdlKGUpO2Nhc2UgMDpyZXR1cm4gdGhpcy5faGFuZGxlUmVxdWVzdE1lc3NhZ2UoZSk7Y2FzZSAyOnJldHVybiB0aGlzLl9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSk7Y2FzZSAzOnJldHVybiB0aGlzLl9oYW5kbGVFdmVudE1lc3NhZ2UoZSk7Y2FzZSA0OnJldHVybiB0aGlzLl9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZShlKX19X2hhbmRsZVJlcGx5TWVzc2FnZShlKXtpZighdGhpcy5fcGVuZGluZ1JlcGxpZXNbZS5zZXFdKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiR290IHJlcGx5IHRvIHVua25vd24gc2VxIik7Y29uc3QgdD10aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV07aWYoZGVsZXRlIHRoaXMuX3BlbmRpbmdSZXBsaWVzW2Uuc2VxXSxlLmVycil7bGV0IG49ZS5lcnI7cmV0dXJuIGUuZXJyLiRpc0Vycm9yJiYobj1uZXcgRXJyb3Isbi5uYW1lPWUuZXJyLm5hbWUsbi5tZXNzYWdlPWUuZXJyLm1lc3NhZ2Usbi5zdGFjaz1lLmVyci5zdGFjayksdm9pZCB0LnJlamVjdChuKX10LnJlc29sdmUoZS5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKXtjb25zdCB0PWUucmVxO3RoaXMuX2hhbmRsZXIuaGFuZGxlTWVzc2FnZShlLm1ldGhvZCxlLmFyZ3MpLnRoZW4oKGU9Pnt0aGlzLl9zZW5kKG5ldyB0ZSh0aGlzLl93b3JrZXJJZCx0LGUsdm9pZCAwKSl9KSwoZT0+e2UuZGV0YWlsIGluc3RhbmNlb2YgRXJyb3ImJihlLmRldGFpbD1uKGUuZGV0YWlsKSksdGhpcy5fc2VuZChuZXcgdGUodGhpcy5fd29ya2VySWQsdCx2b2lkIDAsbihlKSkpfSkpfV9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSl7Y29uc3QgdD1lLnJlcSxuPXRoaXMuX2hhbmRsZXIuaGFuZGxlRXZlbnQoZS5ldmVudE5hbWUsZS5hcmcpKChlPT57dGhpcy5fc2VuZChuZXcgcmUodGhpcy5fd29ya2VySWQsdCxlKSl9KSk7dGhpcy5fcGVuZGluZ0V2ZW50cy5zZXQodCxuKX1faGFuZGxlRXZlbnRNZXNzYWdlKGUpe3RoaXMuX3BlbmRpbmdFbWl0dGVycy5oYXMoZS5yZXEpP3RoaXMuX3BlbmRpbmdFbWl0dGVycy5nZXQoZS5yZXEpLmZpcmUoZS5ldmVudCk6Y29uc29sZS53YXJuKCJHb3QgZXZlbnQgZm9yIHVua25vd24gcmVxIil9X2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpe3RoaXMuX3BlbmRpbmdFdmVudHMuaGFzKGUucmVxKT8odGhpcy5fcGVuZGluZ0V2ZW50cy5nZXQoZS5yZXEpLmRpc3Bvc2UoKSx0aGlzLl9wZW5kaW5nRXZlbnRzLmRlbGV0ZShlLnJlcSkpOmNvbnNvbGUud2FybigiR290IHVuc3Vic2NyaWJlIGZvciB1bmtub3duIHJlcSIpfV9zZW5kKGUpe2NvbnN0IHQ9W107aWYoMD09PWUudHlwZSlmb3IobGV0IG49MDtuPGUuYXJncy5sZW5ndGg7bisrKWUuYXJnc1tuXWluc3RhbmNlb2YgQXJyYXlCdWZmZXImJnQucHVzaChlLmFyZ3Nbbl0pO2Vsc2UgMT09PWUudHlwZSYmZS5yZXMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdC5wdXNoKGUucmVzKTt0aGlzLl9oYW5kbGVyLnNlbmRNZXNzYWdlKGUsdCl9fWZ1bmN0aW9uIGFlKGUpe3JldHVybiJvIj09PWVbMF0mJiJuIj09PWVbMV0mJkcoZS5jaGFyQ29kZUF0KDIpKX1mdW5jdGlvbiBzZShlKXtyZXR1cm4vXm9uRHluYW1pYy8udGVzdChlKSYmRyhlLmNoYXJDb2RlQXQoOSkpfWNsYXNzIGNle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5PXQsdGhpcy5fcmVxdWVzdEhhbmRsZXI9bnVsbCx0aGlzLl9wcm90b2NvbD1uZXcgb2Uoe3NlbmRNZXNzYWdlOih0LG4pPT57ZSh0LG4pfSxoYW5kbGVNZXNzYWdlOihlLHQpPT50aGlzLl9oYW5kbGVNZXNzYWdlKGUsdCksaGFuZGxlRXZlbnQ6KGUsdCk9PnRoaXMuX2hhbmRsZUV2ZW50KGUsdCl9KX1vbm1lc3NhZ2UoZSl7dGhpcy5fcHJvdG9jb2wuaGFuZGxlTWVzc2FnZShlKX1faGFuZGxlTWVzc2FnZShlLHQpe2lmKCIkaW5pdGlhbGl6ZSI9PT1lKXJldHVybiB0aGlzLmluaXRpYWxpemUodFswXSx0WzFdLHRbMl0sdFszXSk7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrZSkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmFwcGx5KHRoaXMuX3JlcXVlc3RIYW5kbGVyLHQpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fV9oYW5kbGVFdmVudChlLHQpe2lmKCF0aGlzLl9yZXF1ZXN0SGFuZGxlcil0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIiKTtpZihzZShlKSl7Y29uc3Qgbj10aGlzLl9yZXF1ZXN0SGFuZGxlcltlXS5jYWxsKHRoaXMuX3JlcXVlc3RIYW5kbGVyLHQpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBkeW5hbWljIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiBufWlmKGFlKGUpKXtjb25zdCB0PXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBldmVudCAke2V9IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gdH10aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBldmVudCBuYW1lICR7ZX1gKX1pbml0aWFsaXplKGUsdCxuLHIpe3RoaXMuX3Byb3RvY29sLnNldFdvcmtlcklkKGUpO2NvbnN0IGk9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9ZT0+ZnVuY3Rpb24oKXtjb25zdCBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gdChlLG4pfSxpPWU9PmZ1bmN0aW9uKHQpe3JldHVybiBuKGUsdCl9LG89e307Zm9yKGNvbnN0IHQgb2YgZSlzZSh0KT9vW3RdPWkodCk6YWUodCk/b1t0XT1uKHQsdm9pZCAwKTpvW3RdPXIodCk7cmV0dXJuIG99KHIsKChlLHQpPT50aGlzLl9wcm90b2NvbC5zZW5kTWVzc2FnZShlLHQpKSwoKGUsdCk9PnRoaXMuX3Byb3RvY29sLmxpc3RlbihlLHQpKSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeT8odGhpcy5fcmVxdWVzdEhhbmRsZXI9dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5KGkpLFByb21pc2UucmVzb2x2ZShXKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSkpOih0JiYodm9pZCAwIT09dC5iYXNlVXJsJiZkZWxldGUgdC5iYXNlVXJsLHZvaWQgMCE9PXQucGF0aHMmJnZvaWQgMCE9PXQucGF0aHMudnMmJmRlbGV0ZSB0LnBhdGhzLnZzLHZvaWQgMCE9PXR5cGVvZiB0LnRydXN0ZWRUeXBlc1BvbGljeSYmZGVsZXRlIHQudHJ1c3RlZFR5cGVzUG9saWN5LHQuY2F0Y2hFcnJvcj0hMCxOLnJlcXVpcmUuY29uZmlnKHQpKSxuZXcgUHJvbWlzZSgoKGUsdCk9PnsoMCxOLnJlcXVpcmUpKFtuXSwobj0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyPW4uY3JlYXRlKGkpLHRoaXMuX3JlcXVlc3RIYW5kbGVyP2UoVyh0aGlzLl9yZXF1ZXN0SGFuZGxlcikpOnQobmV3IEVycm9yKCJObyBSZXF1ZXN0SGFuZGxlciEiKSl9KSx0KX0pKSl9fWNsYXNzIGxle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMub3JpZ2luYWxTdGFydD1lLHRoaXMub3JpZ2luYWxMZW5ndGg9dCx0aGlzLm1vZGlmaWVkU3RhcnQ9bix0aGlzLm1vZGlmaWVkTGVuZ3RoPXJ9Z2V0T3JpZ2luYWxFbmQoKXtyZXR1cm4gdGhpcy5vcmlnaW5hbFN0YXJ0K3RoaXMub3JpZ2luYWxMZW5ndGh9Z2V0TW9kaWZpZWRFbmQoKXtyZXR1cm4gdGhpcy5tb2RpZmllZFN0YXJ0K3RoaXMubW9kaWZpZWRMZW5ndGh9fWZ1bmN0aW9uIHVlKGUsdCl7cmV0dXJuKHQ8PDUpLXQrZXwwfWZ1bmN0aW9uIGhlKGUsdCl7dD11ZSgxNDk0MTcsdCk7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXQ9dWUoZS5jaGFyQ29kZUF0KG4pLHQpO3JldHVybiB0fWNsYXNzIGZle2NvbnN0cnVjdG9yKGUpe3RoaXMuc291cmNlPWV9Z2V0RWxlbWVudHMoKXtjb25zdCBlPXRoaXMuc291cmNlLHQ9bmV3IEludDMyQXJyYXkoZS5sZW5ndGgpO2ZvcihsZXQgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0W25dPWUuY2hhckNvZGVBdChuKTtyZXR1cm4gdH19ZnVuY3Rpb24gZGUoZSx0LG4pe3JldHVybiBuZXcgYmUobmV3IGZlKGUpLG5ldyBmZSh0KSkuQ29tcHV0ZURpZmYobikuY2hhbmdlc31jbGFzcyBtZXtzdGF0aWMgQXNzZXJ0KGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKHQpfX1jbGFzcyBnZXtzdGF0aWMgQ29weShlLHQsbixyLGkpe2ZvcihsZXQgbz0wO288aTtvKyspbltyK29dPWVbdCtvXX1zdGF0aWMgQ29weTIoZSx0LG4scixpKXtmb3IobGV0IG89MDtvPGk7bysrKW5bcitvXT1lW3Qrb119fWNsYXNzIHBle2NvbnN0cnVjdG9yKCl7dGhpcy5tX2NoYW5nZXM9W10sdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0LHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MH1NYXJrTmV4dENoYW5nZSgpeyh0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5tX2NoYW5nZXMucHVzaChuZXcgbGUodGhpcy5tX29yaWdpbmFsU3RhcnQsdGhpcy5tX29yaWdpbmFsQ291bnQsdGhpcy5tX21vZGlmaWVkU3RhcnQsdGhpcy5tX21vZGlmaWVkQ291bnQpKSx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTAsdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0fUFkZE9yaWdpbmFsRWxlbWVudChlLHQpe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LGUpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LHQpLHRoaXMubV9vcmlnaW5hbENvdW50Kyt9QWRkTW9kaWZpZWRFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX21vZGlmaWVkQ291bnQrK31nZXRDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXN9Z2V0UmV2ZXJzZUNoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlcy5yZXZlcnNlKCksdGhpcy5tX2NoYW5nZXN9fWNsYXNzIGJle2NvbnN0cnVjdG9yKGUsdCxuPW51bGwpe3RoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlPW4sdGhpcy5fb3JpZ2luYWxTZXF1ZW5jZT1lLHRoaXMuX21vZGlmaWVkU2VxdWVuY2U9dDtjb25zdFtyLGksb109YmUuX2dldEVsZW1lbnRzKGUpLFthLHMsY109YmUuX2dldEVsZW1lbnRzKHQpO3RoaXMuX2hhc1N0cmluZ3M9byYmYyx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzPXIsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaD1pLHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHM9YSx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoPXMsdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXX1zdGF0aWMgX2lzU3RyaW5nQXJyYXkoZSl7cmV0dXJuIGUubGVuZ3RoPjAmJiJzdHJpbmciPT10eXBlb2YgZVswXX1zdGF0aWMgX2dldEVsZW1lbnRzKGUpe2NvbnN0IHQ9ZS5nZXRFbGVtZW50cygpO2lmKGJlLl9pc1N0cmluZ0FycmF5KHQpKXtjb25zdCBlPW5ldyBJbnQzMkFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspZVtuXT1oZSh0W25dLDApO3JldHVyblt0LGUsITBdfXJldHVybiB0IGluc3RhbmNlb2YgSW50MzJBcnJheT9bW10sdCwhMV06W1tdLG5ldyBJbnQzMkFycmF5KHQpLCExXX1FbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1FbGVtZW50c0FyZVN0cmljdEVxdWFsKGUsdCl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbChlLHQpKXJldHVybiExO3JldHVybiBiZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLGUpPT09YmUuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSx0KX1zdGF0aWMgX2dldFN0cmljdEVsZW1lbnQoZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRTdHJpY3RFbGVtZW50P2UuZ2V0U3RyaWN0RWxlbWVudCh0KTpudWxsfU9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChlLHQpe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW2VdPT09dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSYmKCF0aGlzLl9oYXNTdHJpbmdzfHx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdPT09dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XSl9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1Db21wdXRlRGlmZihlKXtyZXR1cm4gdGhpcy5fQ29tcHV0ZURpZmYoMCx0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLDAsdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMSxlKX1fQ29tcHV0ZURpZmYoZSx0LG4scixpKXtjb25zdCBvPVshMV07bGV0IGE9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLHQsbixyLG8pO3JldHVybiBpJiYoYT10aGlzLlByZXR0aWZ5Q2hhbmdlcyhhKSkse3F1aXRFYXJseTpvWzBdLGNoYW5nZXM6YX19Q29tcHV0ZURpZmZSZWN1cnNpdmUoZSx0LG4scixpKXtmb3IoaVswXT0hMTtlPD10JiZuPD1yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwoZSxuKTspZSsrLG4rKztmb3IoO3Q+PWUmJnI+PW4mJnRoaXMuRWxlbWVudHNBcmVFcXVhbCh0LHIpOyl0LS0sci0tO2lmKGU+dHx8bj5yKXtsZXQgaTtyZXR1cm4gbjw9cj8obWUuQXNzZXJ0KGU9PT10KzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLGk9W25ldyBsZShlLDAsbixyLW4rMSldKTplPD10PyhtZS5Bc3NlcnQobj09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksaT1bbmV3IGxlKGUsdC1lKzEsbiwwKV0pOihtZS5Bc3NlcnQoZT09PXQrMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksbWUuQXNzZXJ0KG49PT1yKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGk9W10pLGl9Y29uc3Qgbz1bMF0sYT1bMF0scz10aGlzLkNvbXB1dGVSZWN1cnNpb25Qb2ludChlLHQsbixyLG8sYSxpKSxjPW9bMF0sbD1hWzBdO2lmKG51bGwhPT1zKXJldHVybiBzO2lmKCFpWzBdKXtjb25zdCBvPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUoZSxjLG4sbCxpKTtsZXQgYT1bXTtyZXR1cm4gYT1pWzBdP1tuZXcgbGUoYysxLHQtKGMrMSkrMSxsKzEsci0obCsxKSsxKV06dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShjKzEsdCxsKzEscixpKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhvLGEpfXJldHVybltuZXcgbGUoZSx0LWUrMSxuLHItbisxKV19V0FMS1RSQUNFKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxoLGYsZCxtLGcscCxiKXtsZXQgdj1udWxsLHk9bnVsbCxDPW5ldyBwZSx3PXQsXz1uLFM9ZlswXS1nWzBdLXIsQT0tMTA3Mzc0MTgyNCxFPXRoaXMubV9mb3J3YXJkSGlzdG9yeS5sZW5ndGgtMTtkb3tjb25zdCB0PVMrZTt0PT09d3x8dDxfJiZjW3QtMV08Y1t0KzFdPyhkPSh1PWNbdCsxXSktUy1yLHU8QSYmQy5NYXJrTmV4dENoYW5nZSgpLEE9dSxDLkFkZE1vZGlmaWVkRWxlbWVudCh1KzEsZCksUz10KzEtZSk6KGQ9KHU9Y1t0LTFdKzEpLVMtcix1PEEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUtMSxDLkFkZE9yaWdpbmFsRWxlbWVudCh1LGQrMSksUz10LTEtZSksRT49MCYmKGU9KGM9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W0VdKVswXSx3PTEsXz1jLmxlbmd0aC0xKX13aGlsZSgtLUU+PS0xKTtpZih2PUMuZ2V0UmV2ZXJzZUNoYW5nZXMoKSxiWzBdKXtsZXQgZT1mWzBdKzEsdD1nWzBdKzE7aWYobnVsbCE9PXYmJnYubGVuZ3RoPjApe2NvbnN0IG49dlt2Lmxlbmd0aC0xXTtlPU1hdGgubWF4KGUsbi5nZXRPcmlnaW5hbEVuZCgpKSx0PU1hdGgubWF4KHQsbi5nZXRNb2RpZmllZEVuZCgpKX15PVtuZXcgbGUoZSxoLWUrMSx0LG0tdCsxKV19ZWxzZXtDPW5ldyBwZSx3PW8sXz1hLFM9ZlswXS1nWzBdLXMsQT0xMDczNzQxODI0LEU9cD90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve2NvbnN0IGU9UytpO2U9PT13fHxlPF8mJmxbZS0xXT49bFtlKzFdPyhkPSh1PWxbZSsxXS0xKS1TLXMsdT5BJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT11KzEsQy5BZGRPcmlnaW5hbEVsZW1lbnQodSsxLGQrMSksUz1lKzEtaSk6KGQ9KHU9bFtlLTFdKS1TLXMsdT5BJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT11LEMuQWRkTW9kaWZpZWRFbGVtZW50KHUrMSxkKzEpLFM9ZS0xLWkpLEU+PTAmJihpPShsPXRoaXMubV9yZXZlcnNlSGlzdG9yeVtFXSlbMF0sdz0xLF89bC5sZW5ndGgtMSl9d2hpbGUoLS1FPj0tMSk7eT1DLmdldENoYW5nZXMoKX1yZXR1cm4gdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXModix5KX1Db21wdXRlUmVjdXJzaW9uUG9pbnQoZSx0LG4scixpLG8sYSl7bGV0IHM9MCxjPTAsbD0wLHU9MCxoPTAsZj0wO2UtLSxuLS0saVswXT0wLG9bMF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO2NvbnN0IGQ9dC1lKyhyLW4pLG09ZCsxLGc9bmV3IEludDMyQXJyYXkobSkscD1uZXcgSW50MzJBcnJheShtKSxiPXItbix2PXQtZSx5PWUtbixDPXQtcix3PSh2LWIpJTI9PTA7Z1tiXT1lLHBbdl09dCxhWzBdPSExO2ZvcihsZXQgXz0xO188PWQvMisxO18rKyl7bGV0IGQ9MCxTPTA7bD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGItXyxfLGIsbSksdT10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGIrXyxfLGIsbSk7Zm9yKGxldCBlPWw7ZTw9dTtlKz0yKXtzPWU9PT1sfHxlPHUmJmdbZS0xXTxnW2UrMV0/Z1tlKzFdOmdbZS0xXSsxLGM9cy0oZS1iKS15O2NvbnN0IG49cztmb3IoO3M8dCYmYzxyJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwocysxLGMrMSk7KXMrKyxjKys7aWYoZ1tlXT1zLHMrYz5kK1MmJihkPXMsUz1jKSwhdyYmTWF0aC5hYnMoZS12KTw9Xy0xJiZzPj1wW2VdKXJldHVybiBpWzBdPXMsb1swXT1jLG48PXBbZV0mJl88PTE0NDg/dGhpcy5XQUxLVFJBQ0UoYixsLHUseSx2LGgsZixDLGcscCxzLHQsaSxjLHIsbyx3LGEpOm51bGx9Y29uc3QgQT0oZC1lKyhTLW4pLV8pLzI7aWYobnVsbCE9PXRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUoZCxBKSlyZXR1cm4gYVswXT0hMCxpWzBdPWQsb1swXT1TLEE+MCYmXzw9MTQ0OD90aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSk6KGUrKyxuKyssW25ldyBsZShlLHQtZSsxLG4sci1uKzEpXSk7aD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYtXyxfLHYsbSksZj10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYrXyxfLHYsbSk7Zm9yKGxldCBkPWg7ZDw9ZjtkKz0yKXtzPWQ9PT1ofHxkPGYmJnBbZC0xXT49cFtkKzFdP3BbZCsxXS0xOnBbZC0xXSxjPXMtKGQtdiktQztjb25zdCBtPXM7Zm9yKDtzPmUmJmM+biYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHMsYyk7KXMtLSxjLS07aWYocFtkXT1zLHcmJk1hdGguYWJzKGQtYik8PV8mJnM8PWdbZF0pcmV0dXJuIGlbMF09cyxvWzBdPWMsbT49Z1tkXSYmXzw9MTQ0OD90aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSk6bnVsbH1pZihfPD0xNDQ3KXtsZXQgZT1uZXcgSW50MzJBcnJheSh1LWwrMik7ZVswXT1iLWwrMSxnZS5Db3B5MihnLGwsZSwxLHUtbCsxKSx0aGlzLm1fZm9yd2FyZEhpc3RvcnkucHVzaChlKSxlPW5ldyBJbnQzMkFycmF5KGYtaCsyKSxlWzBdPXYtaCsxLGdlLkNvcHkyKHAsaCxlLDEsZi1oKzEpLHRoaXMubV9yZXZlcnNlSGlzdG9yeS5wdXNoKGUpfX1yZXR1cm4gdGhpcy5XQUxLVFJBQ0UoYixsLHUseSx2LGgsZixDLGcscCxzLHQsaSxjLHIsbyx3LGEpfVByZXR0aWZ5Q2hhbmdlcyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdLHI9dDxlLmxlbmd0aC0xP2VbdCsxXS5vcmlnaW5hbFN0YXJ0OnRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLGk9dDxlLmxlbmd0aC0xP2VbdCsxXS5tb2RpZmllZFN0YXJ0OnRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLG89bi5vcmlnaW5hbExlbmd0aD4wLGE9bi5tb2RpZmllZExlbmd0aD4wO2Zvcig7bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGg8ciYmbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGg8aSYmKCFvfHx0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChuLm9yaWdpbmFsU3RhcnQsbi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgpKSYmKCFhfHx0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChuLm1vZGlmaWVkU3RhcnQsbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpKTspe2NvbnN0IGU9dGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKG4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkU3RhcnQpO2lmKHRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbChuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCkmJiFlKWJyZWFrO24ub3JpZ2luYWxTdGFydCsrLG4ubW9kaWZpZWRTdGFydCsrfWNvbnN0IHM9W251bGxdO3Q8ZS5sZW5ndGgtMSYmdGhpcy5DaGFuZ2VzT3ZlcmxhcChlW3RdLGVbdCsxXSxzKSYmKGVbdF09c1swXSxlLnNwbGljZSh0KzEsMSksdC0tKX1mb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl7Y29uc3Qgbj1lW3RdO2xldCByPTAsaT0wO2lmKHQ+MCl7Y29uc3Qgbj1lW3QtMV07cj1uLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCxpPW4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RofWNvbnN0IG89bi5vcmlnaW5hbExlbmd0aD4wLGE9bi5tb2RpZmllZExlbmd0aD4wO2xldCBzPTAsYz10aGlzLl9ib3VuZGFyeVNjb3JlKG4ub3JpZ2luYWxTdGFydCxuLm9yaWdpbmFsTGVuZ3RoLG4ubW9kaWZpZWRTdGFydCxuLm1vZGlmaWVkTGVuZ3RoKTtmb3IobGV0IGU9MTs7ZSsrKXtjb25zdCB0PW4ub3JpZ2luYWxTdGFydC1lLGw9bi5tb2RpZmllZFN0YXJ0LWU7aWYodDxyfHxsPGkpYnJlYWs7aWYobyYmIXRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKHQsdCtuLm9yaWdpbmFsTGVuZ3RoKSlicmVhaztpZihhJiYhdGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwobCxsK24ubW9kaWZpZWRMZW5ndGgpKWJyZWFrO2NvbnN0IHU9KHQ9PT1yJiZsPT09aT81OjApK3RoaXMuX2JvdW5kYXJ5U2NvcmUodCxuLm9yaWdpbmFsTGVuZ3RoLGwsbi5tb2RpZmllZExlbmd0aCk7dT5jJiYoYz11LHM9ZSl9bi5vcmlnaW5hbFN0YXJ0LT1zLG4ubW9kaWZpZWRTdGFydC09cztjb25zdCBsPVtudWxsXTt0PjAmJnRoaXMuQ2hhbmdlc092ZXJsYXAoZVt0LTFdLGVbdF0sbCkmJihlW3QtMV09bFswXSxlLnNwbGljZSh0LDEpLHQrKyl9aWYodGhpcy5faGFzU3RyaW5ncylmb3IobGV0IHQ9MSxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49ZVt0LTFdLHI9ZVt0XSxpPXIub3JpZ2luYWxTdGFydC1uLm9yaWdpbmFsU3RhcnQtbi5vcmlnaW5hbExlbmd0aCxvPW4ub3JpZ2luYWxTdGFydCxhPXIub3JpZ2luYWxTdGFydCtyLm9yaWdpbmFsTGVuZ3RoLHM9YS1vLGM9bi5tb2RpZmllZFN0YXJ0LGw9ci5tb2RpZmllZFN0YXJ0K3IubW9kaWZpZWRMZW5ndGgsdT1sLWM7aWYoaTw1JiZzPDIwJiZ1PDIwKXtjb25zdCBlPXRoaXMuX2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UobyxzLGMsdSxpKTtpZihlKXtjb25zdFt0LG9dPWU7dD09PW4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoJiZvPT09bi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGh8fChuLm9yaWdpbmFsTGVuZ3RoPXQtbi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGg9by1uLm1vZGlmaWVkU3RhcnQsci5vcmlnaW5hbFN0YXJ0PXQraSxyLm1vZGlmaWVkU3RhcnQ9bytpLHIub3JpZ2luYWxMZW5ndGg9YS1yLm9yaWdpbmFsU3RhcnQsci5tb2RpZmllZExlbmd0aD1sLXIubW9kaWZpZWRTdGFydCl9fX1yZXR1cm4gZX1fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShlLHQsbixyLGkpe2lmKHQ8aXx8cjxpKXJldHVybiBudWxsO2NvbnN0IG89ZSt0LWkrMSxhPW4rci1pKzE7bGV0IHM9MCxjPTAsbD0wO2ZvcihsZXQgdD1lO3Q8bzt0KyspZm9yKGxldCBlPW47ZTxhO2UrKyl7Y29uc3Qgbj10aGlzLl9jb250aWd1b3VzU2VxdWVuY2VTY29yZSh0LGUsaSk7bj4wJiZuPnMmJihzPW4sYz10LGw9ZSl9cmV0dXJuIHM+MD9bYyxsXTpudWxsfV9jb250aWd1b3VzU2VxdWVuY2VTY29yZShlLHQsbil7bGV0IHI9MDtmb3IobGV0IGk9MDtpPG47aSsrKXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKGUraSx0K2kpKXJldHVybiAwO3IrPXRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZStpXS5sZW5ndGh9cmV0dXJuIHJ9X09yaWdpbmFsSXNCb3VuZGFyeShlKXtyZXR1cm4gZTw9MHx8ZT49dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgtMXx8dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV0pfV9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkoZSx0KXtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoZSl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShlLTEpKXJldHVybiEwO2lmKHQ+MCl7Y29uc3Qgbj1lK3Q7aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KG4tMSl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShuKSlyZXR1cm4hMH1yZXR1cm4hMX1fTW9kaWZpZWRJc0JvdW5kYXJ5KGUpe3JldHVybiBlPD0wfHxlPj10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xfHx0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tlXSl9X01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeShlLHQpe2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShlKXx8dGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGUtMSkpcmV0dXJuITA7aWYodD4wKXtjb25zdCBuPWUrdDtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkobi0xKXx8dGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KG4pKXJldHVybiEwfXJldHVybiExfV9ib3VuZGFyeVNjb3JlKGUsdCxuLHIpe3JldHVybih0aGlzLl9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkoZSx0KT8xOjApKyh0aGlzLl9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkobixyKT8xOjApfUNvbmNhdGVuYXRlQ2hhbmdlcyhlLHQpe2NvbnN0IG49W107aWYoMD09PWUubGVuZ3RofHwwPT09dC5sZW5ndGgpcmV0dXJuIHQubGVuZ3RoPjA/dDplO2lmKHRoaXMuQ2hhbmdlc092ZXJsYXAoZVtlLmxlbmd0aC0xXSx0WzBdLG4pKXtjb25zdCByPW5ldyBBcnJheShlLmxlbmd0aCt0Lmxlbmd0aC0xKTtyZXR1cm4gZ2UuQ29weShlLDAsciwwLGUubGVuZ3RoLTEpLHJbZS5sZW5ndGgtMV09blswXSxnZS5Db3B5KHQsMSxyLGUubGVuZ3RoLHQubGVuZ3RoLTEpLHJ9e2NvbnN0IG49bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoKTtyZXR1cm4gZ2UuQ29weShlLDAsbiwwLGUubGVuZ3RoKSxnZS5Db3B5KHQsMCxuLGUubGVuZ3RoLHQubGVuZ3RoKSxufX1DaGFuZ2VzT3ZlcmxhcChlLHQsbil7aWYobWUuQXNzZXJ0KGUub3JpZ2luYWxTdGFydDw9dC5vcmlnaW5hbFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLG1lLkFzc2VydChlLm1vZGlmaWVkU3RhcnQ8PXQubW9kaWZpZWRTdGFydCwiTGVmdCBjaGFuZ2UgaXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byByaWdodCBjaGFuZ2UiKSxlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aD49dC5vcmlnaW5hbFN0YXJ0fHxlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aD49dC5tb2RpZmllZFN0YXJ0KXtjb25zdCByPWUub3JpZ2luYWxTdGFydDtsZXQgaT1lLm9yaWdpbmFsTGVuZ3RoO2NvbnN0IG89ZS5tb2RpZmllZFN0YXJ0O2xldCBhPWUubW9kaWZpZWRMZW5ndGg7cmV0dXJuIGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoPj10Lm9yaWdpbmFsU3RhcnQmJihpPXQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLWUub3JpZ2luYWxTdGFydCksZS5tb2RpZmllZFN0YXJ0K2UubW9kaWZpZWRMZW5ndGg+PXQubW9kaWZpZWRTdGFydCYmKGE9dC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtZS5tb2RpZmllZFN0YXJ0KSxuWzBdPW5ldyBsZShyLGksbyxhKSwhMH1yZXR1cm4gblswXT1udWxsLCExfUNsaXBEaWFnb25hbEJvdW5kKGUsdCxuLHIpe2lmKGU+PTAmJmU8cilyZXR1cm4gZTtjb25zdCBpPXQlMj09MDtpZihlPDApe3JldHVybiBpPT09KG4lMj09MCk/MDoxfXJldHVybiBpPT09KChyLW4tMSklMj09MCk/ci0xOnItMn19bGV0IHZlO2lmKHZvaWQgMCE9PU4udnNjb2RlJiZ2b2lkIDAhPT1OLnZzY29kZS5wcm9jZXNzKXtjb25zdCBlPU4udnNjb2RlLnByb2Nlc3M7dmU9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBlLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBlLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gZS5lbnZ9LGN3ZDooKT0+ZS5jd2QoKX19ZWxzZSB2ZT0idW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3M/e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gcHJvY2Vzcy5lbnZ9LGN3ZDooKT0+cHJvY2Vzcy5lbnYuVlNDT0RFX0NXRHx8cHJvY2Vzcy5jd2QoKX06e2dldCBwbGF0Zm9ybSgpe3JldHVybiBUPyJ3aW4zMiI6Tz8iZGFyd2luIjoibGludXgifSxnZXQgYXJjaCgpe30sZ2V0IGVudigpe3JldHVybnt9fSxjd2Q6KCk9PiIvIn07Y29uc3QgeWU9dmUuY3dkLENlPXZlLmVudix3ZT12ZS5wbGF0Zm9ybSxfZT00NixTZT00NyxBZT05MixFZT01ODtjbGFzcyB4ZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCxuKXtsZXQgcjsic3RyaW5nIj09dHlwZW9mIHQmJjA9PT10LmluZGV4T2YoIm5vdCAiKT8ocj0ibXVzdCBub3QgYmUiLHQ9dC5yZXBsYWNlKC9ebm90IC8sIiIpKTpyPSJtdXN0IGJlIjtjb25zdCBpPS0xIT09ZS5pbmRleE9mKCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO2xldCBvPWBUaGUgIiR7ZX0iICR7aX0gJHtyfSBvZiB0eXBlICR7dH1gO28rPSIuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgbixzdXBlcihvKSx0aGlzLmNvZGU9IkVSUl9JTlZBTElEX0FSR19UWVBFIn19ZnVuY3Rpb24gTmUoZSx0KXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHhlKHQsInN0cmluZyIsZSl9ZnVuY3Rpb24ga2UoZSl7cmV0dXJuIGU9PT1TZXx8ZT09PUFlfWZ1bmN0aW9uIExlKGUpe3JldHVybiBlPT09U2V9ZnVuY3Rpb24gVGUoZSl7cmV0dXJuIGU+PTY1JiZlPD05MHx8ZT49OTcmJmU8PTEyMn1mdW5jdGlvbiBPZShlLHQsbixyKXtsZXQgaT0iIixvPTAsYT0tMSxzPTAsYz0wO2ZvcihsZXQgbD0wO2w8PWUubGVuZ3RoOysrbCl7aWYobDxlLmxlbmd0aCljPWUuY2hhckNvZGVBdChsKTtlbHNle2lmKHIoYykpYnJlYWs7Yz1TZX1pZihyKGMpKXtpZihhPT09bC0xfHwxPT09cyk7ZWxzZSBpZigyPT09cyl7aWYoaS5sZW5ndGg8Mnx8MiE9PW98fGkuY2hhckNvZGVBdChpLmxlbmd0aC0xKSE9PV9lfHxpLmNoYXJDb2RlQXQoaS5sZW5ndGgtMikhPT1fZSl7aWYoaS5sZW5ndGg+Mil7Y29uc3QgZT1pLmxhc3RJbmRleE9mKG4pOy0xPT09ZT8oaT0iIixvPTApOihpPWkuc2xpY2UoMCxlKSxvPWkubGVuZ3RoLTEtaS5sYXN0SW5kZXhPZihuKSksYT1sLHM9MDtjb250aW51ZX1pZigwIT09aS5sZW5ndGgpe2k9IiIsbz0wLGE9bCxzPTA7Y29udGludWV9fXQmJihpKz1pLmxlbmd0aD4wP2Ake259Li5gOiIuLiIsbz0yKX1lbHNlIGkubGVuZ3RoPjA/aSs9YCR7bn0ke2Uuc2xpY2UoYSsxLGwpfWA6aT1lLnNsaWNlKGErMSxsKSxvPWwtYS0xO2E9bCxzPTB9ZWxzZSBjPT09X2UmJi0xIT09cz8rK3M6cz0tMX1yZXR1cm4gaX1mdW5jdGlvbiBJZShlLHQpe2lmKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IHhlKCJwYXRoT2JqZWN0IiwiT2JqZWN0Iix0KTtjb25zdCBuPXQuZGlyfHx0LnJvb3Qscj10LmJhc2V8fGAke3QubmFtZXx8IiJ9JHt0LmV4dHx8IiJ9YDtyZXR1cm4gbj9uPT09dC5yb290P2Ake259JHtyfWA6YCR7bn0ke2V9JHtyfWA6cn1jb25zdCBNZT17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSIiLHI9ITE7Zm9yKGxldCBpPWUubGVuZ3RoLTE7aT49LTE7aS0tKXtsZXQgbztpZihpPj0wKXtpZihvPWVbaV0sTmUobywicGF0aCIpLDA9PT1vLmxlbmd0aCljb250aW51ZX1lbHNlIDA9PT10Lmxlbmd0aD9vPXllKCk6KG89Q2VbYD0ke3R9YF18fHllKCksKHZvaWQgMD09PW98fG8uc2xpY2UoMCwyKS50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpJiZvLmNoYXJDb2RlQXQoMik9PT1BZSkmJihvPWAke3R9XFxgKSk7Y29uc3QgYT1vLmxlbmd0aDtsZXQgcz0wLGM9IiIsbD0hMTtjb25zdCB1PW8uY2hhckNvZGVBdCgwKTtpZigxPT09YSlrZSh1KSYmKHM9MSxsPSEwKTtlbHNlIGlmKGtlKHUpKWlmKGw9ITAsa2Uoby5jaGFyQ29kZUF0KDEpKSl7bGV0IGU9Mix0PWU7Zm9yKDtlPGEmJiFrZShvLmNoYXJDb2RlQXQoZSkpOyllKys7aWYoZTxhJiZlIT09dCl7Y29uc3Qgbj1vLnNsaWNlKHQsZSk7Zm9yKHQ9ZTtlPGEmJmtlKG8uY2hhckNvZGVBdChlKSk7KWUrKztpZihlPGEmJmUhPT10KXtmb3IodD1lO2U8YSYmIWtlKG8uY2hhckNvZGVBdChlKSk7KWUrKztlIT09YSYmZT09PXR8fChjPWBcXFxcJHtufVxcJHtvLnNsaWNlKHQsZSl9YCxzPWUpfX19ZWxzZSBzPTE7ZWxzZSBUZSh1KSYmby5jaGFyQ29kZUF0KDEpPT09RWUmJihjPW8uc2xpY2UoMCwyKSxzPTIsYT4yJiZrZShvLmNoYXJDb2RlQXQoMikpJiYobD0hMCxzPTMpKTtpZihjLmxlbmd0aD4wKWlmKHQubGVuZ3RoPjApe2lmKGMudG9Mb3dlckNhc2UoKSE9PXQudG9Mb3dlckNhc2UoKSljb250aW51ZX1lbHNlIHQ9YztpZihyKXtpZih0Lmxlbmd0aD4wKWJyZWFrfWVsc2UgaWYobj1gJHtvLnNsaWNlKHMpfVxcJHtufWAscj1sLGwmJnQubGVuZ3RoPjApYnJlYWt9cmV0dXJuIG49T2UobiwhciwiXFwiLGtlKSxyP2Ake3R9XFwke259YDpgJHt0fSR7bn1gfHwiLiJ9LG5vcm1hbGl6ZShlKXtOZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4iLiI7bGV0IG4scj0wLGk9ITE7Y29uc3Qgbz1lLmNoYXJDb2RlQXQoMCk7aWYoMT09PXQpcmV0dXJuIExlKG8pPyJcXCI6ZTtpZihrZShvKSlpZihpPSEwLGtlKGUuY2hhckNvZGVBdCgxKSkpe2xldCBpPTIsbz1pO2Zvcig7aTx0JiYha2UoZS5jaGFyQ29kZUF0KGkpKTspaSsrO2lmKGk8dCYmaSE9PW8pe2NvbnN0IGE9ZS5zbGljZShvLGkpO2ZvcihvPWk7aTx0JiZrZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Zm9yKG89aTtpPHQmJiFrZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaT09PXQpcmV0dXJuYFxcXFwke2F9XFwke2Uuc2xpY2Uobyl9XFxgO2khPT1vJiYobj1gXFxcXCR7YX1cXCR7ZS5zbGljZShvLGkpfWAscj1pKX19fWVsc2Ugcj0xO2Vsc2UgVGUobykmJmUuY2hhckNvZGVBdCgxKT09PUVlJiYobj1lLnNsaWNlKDAsMikscj0yLHQ+MiYma2UoZS5jaGFyQ29kZUF0KDIpKSYmKGk9ITAscj0zKSk7bGV0IGE9cjx0P09lKGUuc2xpY2UociksIWksIlxcIixrZSk6IiI7cmV0dXJuIDAhPT1hLmxlbmd0aHx8aXx8KGE9Ii4iKSxhLmxlbmd0aD4wJiZrZShlLmNoYXJDb2RlQXQodC0xKSkmJihhKz0iXFwiKSx2b2lkIDA9PT1uP2k/YFxcJHthfWA6YTppP2Ake259XFwke2F9YDpgJHtufSR7YX1gfSxpc0Fic29sdXRlKGUpe05lKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKDA9PT10KXJldHVybiExO2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApO3JldHVybiBrZShuKXx8dD4yJiZUZShuKSYmZS5jaGFyQ29kZUF0KDEpPT09RWUmJmtlKGUuY2hhckNvZGVBdCgyKSl9LGpvaW4oLi4uZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiIuIjtsZXQgdCxuO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7KytyKXtjb25zdCBpPWVbcl07TmUoaSwicGF0aCIpLGkubGVuZ3RoPjAmJih2b2lkIDA9PT10P3Q9bj1pOnQrPWBcXCR7aX1gKX1pZih2b2lkIDA9PT10KXJldHVybiIuIjtsZXQgcj0hMCxpPTA7aWYoInN0cmluZyI9PXR5cGVvZiBuJiZrZShuLmNoYXJDb2RlQXQoMCkpKXsrK2k7Y29uc3QgZT1uLmxlbmd0aDtlPjEmJmtlKG4uY2hhckNvZGVBdCgxKSkmJigrK2ksZT4yJiYoa2Uobi5jaGFyQ29kZUF0KDIpKT8rK2k6cj0hMSkpfWlmKHIpe2Zvcig7aTx0Lmxlbmd0aCYma2UodC5jaGFyQ29kZUF0KGkpKTspaSsrO2k+PTImJih0PWBcXCR7dC5zbGljZShpKX1gKX1yZXR1cm4gTWUubm9ybWFsaXplKHQpfSxyZWxhdGl2ZShlLHQpe2lmKE5lKGUsImZyb20iKSxOZSh0LCJ0byIpLGU9PT10KXJldHVybiIiO2NvbnN0IG49TWUucmVzb2x2ZShlKSxyPU1lLnJlc29sdmUodCk7aWYobj09PXIpcmV0dXJuIiI7aWYoKGU9bi50b0xvd2VyQ2FzZSgpKT09PSh0PXIudG9Mb3dlckNhc2UoKSkpcmV0dXJuIiI7bGV0IGk9MDtmb3IoO2k8ZS5sZW5ndGgmJmUuY2hhckNvZGVBdChpKT09PUFlOylpKys7bGV0IG89ZS5sZW5ndGg7Zm9yKDtvLTE+aSYmZS5jaGFyQ29kZUF0KG8tMSk9PT1BZTspby0tO2NvbnN0IGE9by1pO2xldCBzPTA7Zm9yKDtzPHQubGVuZ3RoJiZ0LmNoYXJDb2RlQXQocyk9PT1BZTspcysrO2xldCBjPXQubGVuZ3RoO2Zvcig7Yy0xPnMmJnQuY2hhckNvZGVBdChjLTEpPT09QWU7KWMtLTtjb25zdCBsPWMtcyx1PWE8bD9hOmw7bGV0IGg9LTEsZj0wO2Zvcig7Zjx1O2YrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoaStmKTtpZihuIT09dC5jaGFyQ29kZUF0KHMrZikpYnJlYWs7bj09PUFlJiYoaD1mKX1pZihmIT09dSl7aWYoLTE9PT1oKXJldHVybiByfWVsc2V7aWYobD51KXtpZih0LmNoYXJDb2RlQXQocytmKT09PUFlKXJldHVybiByLnNsaWNlKHMrZisxKTtpZigyPT09ZilyZXR1cm4gci5zbGljZShzK2YpfWE+dSYmKGUuY2hhckNvZGVBdChpK2YpPT09QWU/aD1mOjI9PT1mJiYoaD0zKSksLTE9PT1oJiYoaD0wKX1sZXQgZD0iIjtmb3IoZj1pK2grMTtmPD1vOysrZilmIT09byYmZS5jaGFyQ29kZUF0KGYpIT09QWV8fChkKz0wPT09ZC5sZW5ndGg/Ii4uIjoiXFwuLiIpO3JldHVybiBzKz1oLGQubGVuZ3RoPjA/YCR7ZH0ke3Iuc2xpY2UocyxjKX1gOihyLmNoYXJDb2RlQXQocyk9PT1BZSYmKytzLHIuc2xpY2UocyxjKSl9LHRvTmFtZXNwYWNlZFBhdGgoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBlO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iIjtjb25zdCB0PU1lLnJlc29sdmUoZSk7aWYodC5sZW5ndGg8PTIpcmV0dXJuIGU7aWYodC5jaGFyQ29kZUF0KDApPT09QWUpe2lmKHQuY2hhckNvZGVBdCgxKT09PUFlKXtjb25zdCBlPXQuY2hhckNvZGVBdCgyKTtpZig2MyE9PWUmJmUhPT1fZSlyZXR1cm5gXFxcXD9cXFVOQ1xcJHt0LnNsaWNlKDIpfWB9fWVsc2UgaWYoVGUodC5jaGFyQ29kZUF0KDApKSYmdC5jaGFyQ29kZUF0KDEpPT09RWUmJnQuY2hhckNvZGVBdCgyKT09PUFlKXJldHVybmBcXFxcP1xcJHt0fWA7cmV0dXJuIGV9LGRpcm5hbWUoZSl7TmUoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuIi4iO2xldCBuPS0xLHI9MDtjb25zdCBpPWUuY2hhckNvZGVBdCgwKTtpZigxPT09dClyZXR1cm4ga2UoaSk/ZToiLiI7aWYoa2UoaSkpe2lmKG49cj0xLGtlKGUuY2hhckNvZGVBdCgxKSkpe2xldCBpPTIsbz1pO2Zvcig7aTx0JiYha2UoZS5jaGFyQ29kZUF0KGkpKTspaSsrO2lmKGk8dCYmaSE9PW8pe2ZvcihvPWk7aTx0JiZrZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Zm9yKG89aTtpPHQmJiFrZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaT09PXQpcmV0dXJuIGU7aSE9PW8mJihuPXI9aSsxKX19fX1lbHNlIFRlKGkpJiZlLmNoYXJDb2RlQXQoMSk9PT1FZSYmKG49dD4yJiZrZShlLmNoYXJDb2RlQXQoMikpPzM6MixyPW4pO2xldCBvPS0xLGE9ITA7Zm9yKGxldCBuPXQtMTtuPj1yOy0tbilpZihrZShlLmNoYXJDb2RlQXQobikpKXtpZighYSl7bz1uO2JyZWFrfX1lbHNlIGE9ITE7aWYoLTE9PT1vKXtpZigtMT09PW4pcmV0dXJuIi4iO289bn1yZXR1cm4gZS5zbGljZSgwLG8pfSxiYXNlbmFtZShlLHQpe3ZvaWQgMCE9PXQmJk5lKHQsImV4dCIpLE5lKGUsInBhdGgiKTtsZXQgbixyPTAsaT0tMSxvPSEwO2lmKGUubGVuZ3RoPj0yJiZUZShlLmNoYXJDb2RlQXQoMCkpJiZlLmNoYXJDb2RlQXQoMSk9PT1FZSYmKHI9Miksdm9pZCAwIT09dCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLHM9LTE7Zm9yKG49ZS5sZW5ndGgtMTtuPj1yOy0tbil7Y29uc3QgYz1lLmNoYXJDb2RlQXQobik7aWYoa2UoYykpe2lmKCFvKXtyPW4rMTticmVha319ZWxzZS0xPT09cyYmKG89ITEscz1uKzEpLGE+PTAmJihjPT09dC5jaGFyQ29kZUF0KGEpPy0xPT0tLWEmJihpPW4pOihhPS0xLGk9cykpfXJldHVybiByPT09aT9pPXM6LTE9PT1pJiYoaT1lLmxlbmd0aCksZS5zbGljZShyLGkpfWZvcihuPWUubGVuZ3RoLTE7bj49cjstLW4paWYoa2UoZS5jaGFyQ29kZUF0KG4pKSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1pJiYobz0hMSxpPW4rMSk7cmV0dXJuLTE9PT1pPyIiOmUuc2xpY2UocixpKX0sZXh0bmFtZShlKXtOZShlLCJwYXRoIik7bGV0IHQ9MCxuPS0xLHI9MCxpPS0xLG89ITAsYT0wO2UubGVuZ3RoPj0yJiZlLmNoYXJDb2RlQXQoMSk9PT1FZSYmVGUoZS5jaGFyQ29kZUF0KDApKSYmKHQ9cj0yKTtmb3IobGV0IHM9ZS5sZW5ndGgtMTtzPj10Oy0tcyl7Y29uc3QgdD1lLmNoYXJDb2RlQXQocyk7aWYoa2UodCkpe2lmKCFvKXtyPXMrMTticmVha319ZWxzZS0xPT09aSYmKG89ITEsaT1zKzEpLHQ9PT1fZT8tMT09PW4/bj1zOjEhPT1hJiYoYT0xKTotMSE9PW4mJihhPS0xKX1yZXR1cm4tMT09PW58fC0xPT09aXx8MD09PWF8fDE9PT1hJiZuPT09aS0xJiZuPT09cisxPyIiOmUuc2xpY2UobixpKX0sZm9ybWF0OkllLmJpbmQobnVsbCwiXFwiKSxwYXJzZShlKXtOZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49ZS5sZW5ndGg7bGV0IHI9MCxpPWUuY2hhckNvZGVBdCgwKTtpZigxPT09bilyZXR1cm4ga2UoaSk/KHQucm9vdD10LmRpcj1lLHQpOih0LmJhc2U9dC5uYW1lPWUsdCk7aWYoa2UoaSkpe2lmKHI9MSxrZShlLmNoYXJDb2RlQXQoMSkpKXtsZXQgdD0yLGk9dDtmb3IoO3Q8biYmIWtlKGUuY2hhckNvZGVBdCh0KSk7KXQrKztpZih0PG4mJnQhPT1pKXtmb3IoaT10O3Q8biYma2UoZS5jaGFyQ29kZUF0KHQpKTspdCsrO2lmKHQ8biYmdCE9PWkpe2ZvcihpPXQ7dDxuJiYha2UoZS5jaGFyQ29kZUF0KHQpKTspdCsrO3Q9PT1uP3I9dDp0IT09aSYmKHI9dCsxKX19fX1lbHNlIGlmKFRlKGkpJiZlLmNoYXJDb2RlQXQoMSk9PT1FZSl7aWYobjw9MilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtpZihyPTIsa2UoZS5jaGFyQ29kZUF0KDIpKSl7aWYoMz09PW4pcmV0dXJuIHQucm9vdD10LmRpcj1lLHQ7cj0zfX1yPjAmJih0LnJvb3Q9ZS5zbGljZSgwLHIpKTtsZXQgbz0tMSxhPXIscz0tMSxjPSEwLGw9ZS5sZW5ndGgtMSx1PTA7Zm9yKDtsPj1yOy0tbClpZihpPWUuY2hhckNvZGVBdChsKSxrZShpKSl7aWYoIWMpe2E9bCsxO2JyZWFrfX1lbHNlLTE9PT1zJiYoYz0hMSxzPWwrMSksaT09PV9lPy0xPT09bz9vPWw6MSE9PXUmJih1PTEpOi0xIT09byYmKHU9LTEpO3JldHVybi0xIT09cyYmKC0xPT09b3x8MD09PXV8fDE9PT11JiZvPT09cy0xJiZvPT09YSsxP3QuYmFzZT10Lm5hbWU9ZS5zbGljZShhLHMpOih0Lm5hbWU9ZS5zbGljZShhLG8pLHQuYmFzZT1lLnNsaWNlKGEscyksdC5leHQ9ZS5zbGljZShvLHMpKSksdC5kaXI9YT4wJiZhIT09cj9lLnNsaWNlKDAsYS0xKTp0LnJvb3QsdH0sc2VwOiJcXCIsZGVsaW1pdGVyOiI7Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9LFBlPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49ITE7Zm9yKGxldCByPWUubGVuZ3RoLTE7cj49LTEmJiFuO3ItLSl7Y29uc3QgaT1yPj0wP2Vbcl06eWUoKTtOZShpLCJwYXRoIiksMCE9PWkubGVuZ3RoJiYodD1gJHtpfS8ke3R9YCxuPWkuY2hhckNvZGVBdCgwKT09PVNlKX1yZXR1cm4gdD1PZSh0LCFuLCIvIixMZSksbj9gLyR7dH1gOnQubGVuZ3RoPjA/dDoiLiJ9LG5vcm1hbGl6ZShlKXtpZihOZShlLCJwYXRoIiksMD09PWUubGVuZ3RoKXJldHVybiIuIjtjb25zdCB0PWUuY2hhckNvZGVBdCgwKT09PVNlLG49ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpPT09U2U7cmV0dXJuIDA9PT0oZT1PZShlLCF0LCIvIixMZSkpLmxlbmd0aD90PyIvIjpuPyIuLyI6Ii4iOihuJiYoZSs9Ii8iKSx0P2AvJHtlfWA6ZSl9LGlzQWJzb2x1dGU6ZT0+KE5lKGUsInBhdGgiKSxlLmxlbmd0aD4wJiZlLmNoYXJDb2RlQXQoMCk9PT1TZSksam9pbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7KytuKXtjb25zdCByPWVbbl07TmUociwicGF0aCIpLHIubGVuZ3RoPjAmJih2b2lkIDA9PT10P3Q9cjp0Kz1gLyR7cn1gKX1yZXR1cm4gdm9pZCAwPT09dD8iLiI6UGUubm9ybWFsaXplKHQpfSxyZWxhdGl2ZShlLHQpe2lmKE5lKGUsImZyb20iKSxOZSh0LCJ0byIpLGU9PT10KXJldHVybiIiO2lmKChlPVBlLnJlc29sdmUoZSkpPT09KHQ9UGUucmVzb2x2ZSh0KSkpcmV0dXJuIiI7Y29uc3Qgbj1lLmxlbmd0aCxyPW4tMSxpPXQubGVuZ3RoLTEsbz1yPGk/cjppO2xldCBhPS0xLHM9MDtmb3IoO3M8bztzKyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KDErcyk7aWYobiE9PXQuY2hhckNvZGVBdCgxK3MpKWJyZWFrO249PT1TZSYmKGE9cyl9aWYocz09PW8paWYoaT5vKXtpZih0LmNoYXJDb2RlQXQoMStzKT09PVNlKXJldHVybiB0LnNsaWNlKDErcysxKTtpZigwPT09cylyZXR1cm4gdC5zbGljZSgxK3MpfWVsc2Ugcj5vJiYoZS5jaGFyQ29kZUF0KDErcyk9PT1TZT9hPXM6MD09PXMmJihhPTApKTtsZXQgYz0iIjtmb3Iocz0xK2ErMTtzPD1uOysrcylzIT09biYmZS5jaGFyQ29kZUF0KHMpIT09U2V8fChjKz0wPT09Yy5sZW5ndGg/Ii4uIjoiLy4uIik7cmV0dXJuYCR7Y30ke3Quc2xpY2UoMSthKX1gfSx0b05hbWVzcGFjZWRQYXRoOmU9PmUsZGlybmFtZShlKXtpZihOZShlLCJwYXRoIiksMD09PWUubGVuZ3RoKXJldHVybiIuIjtjb25zdCB0PWUuY2hhckNvZGVBdCgwKT09PVNlO2xldCBuPS0xLHI9ITA7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MTstLXQpaWYoZS5jaGFyQ29kZUF0KHQpPT09U2Upe2lmKCFyKXtuPXQ7YnJlYWt9fWVsc2Ugcj0hMTtyZXR1cm4tMT09PW4/dD8iLyI6Ii4iOnQmJjE9PT1uPyIvLyI6ZS5zbGljZSgwLG4pfSxiYXNlbmFtZShlLHQpe3ZvaWQgMCE9PXQmJk5lKHQsImV4dCIpLE5lKGUsInBhdGgiKTtsZXQgbixyPTAsaT0tMSxvPSEwO2lmKHZvaWQgMCE9PXQmJnQubGVuZ3RoPjAmJnQubGVuZ3RoPD1lLmxlbmd0aCl7aWYodD09PWUpcmV0dXJuIiI7bGV0IGE9dC5sZW5ndGgtMSxzPS0xO2ZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4pe2NvbnN0IGM9ZS5jaGFyQ29kZUF0KG4pO2lmKGM9PT1TZSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1zJiYobz0hMSxzPW4rMSksYT49MCYmKGM9PT10LmNoYXJDb2RlQXQoYSk/LTE9PS0tYSYmKGk9bik6KGE9LTEsaT1zKSl9cmV0dXJuIHI9PT1pP2k9czotMT09PWkmJihpPWUubGVuZ3RoKSxlLnNsaWNlKHIsaSl9Zm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbilpZihlLmNoYXJDb2RlQXQobik9PT1TZSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1pJiYobz0hMSxpPW4rMSk7cmV0dXJuLTE9PT1pPyIiOmUuc2xpY2UocixpKX0sZXh0bmFtZShlKXtOZShlLCJwYXRoIik7bGV0IHQ9LTEsbj0wLHI9LTEsaT0hMCxvPTA7Zm9yKGxldCBhPWUubGVuZ3RoLTE7YT49MDstLWEpe2NvbnN0IHM9ZS5jaGFyQ29kZUF0KGEpO2lmKHMhPT1TZSktMT09PXImJihpPSExLHI9YSsxKSxzPT09X2U/LTE9PT10P3Q9YToxIT09byYmKG89MSk6LTEhPT10JiYobz0tMSk7ZWxzZSBpZighaSl7bj1hKzE7YnJlYWt9fXJldHVybi0xPT09dHx8LTE9PT1yfHwwPT09b3x8MT09PW8mJnQ9PT1yLTEmJnQ9PT1uKzE/IiI6ZS5zbGljZSh0LHIpfSxmb3JtYXQ6SWUuYmluZChudWxsLCIvIikscGFyc2UoZSl7TmUoZSwicGF0aCIpO2NvbnN0IHQ9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDtjb25zdCBuPWUuY2hhckNvZGVBdCgwKT09PVNlO2xldCByO24/KHQucm9vdD0iLyIscj0xKTpyPTA7bGV0IGk9LTEsbz0wLGE9LTEscz0hMCxjPWUubGVuZ3RoLTEsbD0wO2Zvcig7Yz49cjstLWMpe2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KGMpO2lmKHQhPT1TZSktMT09PWEmJihzPSExLGE9YysxKSx0PT09X2U/LTE9PT1pP2k9YzoxIT09bCYmKGw9MSk6LTEhPT1pJiYobD0tMSk7ZWxzZSBpZighcyl7bz1jKzE7YnJlYWt9fWlmKC0xIT09YSl7Y29uc3Qgcj0wPT09byYmbj8xOm87LTE9PT1pfHwwPT09bHx8MT09PWwmJmk9PT1hLTEmJmk9PT1vKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKHIsYSk6KHQubmFtZT1lLnNsaWNlKHIsaSksdC5iYXNlPWUuc2xpY2UocixhKSx0LmV4dD1lLnNsaWNlKGksYSkpfXJldHVybiBvPjA/dC5kaXI9ZS5zbGljZSgwLG8tMSk6biYmKHQuZGlyPSIvIiksdH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07UGUud2luMzI9TWUud2luMzI9TWUsUGUucG9zaXg9TWUucG9zaXg9UGUsIndpbjMyIj09PXdlP01lLm5vcm1hbGl6ZTpQZS5ub3JtYWxpemUsIndpbjMyIj09PXdlP01lLnJlc29sdmU6UGUucmVzb2x2ZSwid2luMzIiPT09d2U/TWUucmVsYXRpdmU6UGUucmVsYXRpdmUsIndpbjMyIj09PXdlP01lLmRpcm5hbWU6UGUuZGlybmFtZSwid2luMzIiPT09d2U/TWUuYmFzZW5hbWU6UGUuYmFzZW5hbWUsIndpbjMyIj09PXdlP01lLmV4dG5hbWU6UGUuZXh0bmFtZSwid2luMzIiPT09d2U/TWUuc2VwOlBlLnNlcDtjb25zdCBSZT0vXlx3W1x3XGQrLi1dKiQvLFZlPS9eXC8vLEZlPS9eXC9cLy87ZnVuY3Rpb24gRGUoZSx0KXtpZighZS5zY2hlbWUmJnQpdGhyb3cgbmV3IEVycm9yKGBbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIiR7ZS5hdXRob3JpdHl9IiwgcGF0aDogIiR7ZS5wYXRofSIsIHF1ZXJ5OiAiJHtlLnF1ZXJ5fSIsIGZyYWdtZW50OiAiJHtlLmZyYWdtZW50fSJ9YCk7aWYoZS5zY2hlbWUmJiFSZS50ZXN0KGUuc2NoZW1lKSl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IFNjaGVtZSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuIik7aWYoZS5wYXRoKWlmKGUuYXV0aG9yaXR5KXtpZighVmUudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYoRmUudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfWNvbnN0IEtlPSIiLGplPSIvIixVZT0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/LztjbGFzcyBCZXtjb25zdHJ1Y3RvcihlLHQsbixyLGksbz0hMSl7Im9iamVjdCI9PXR5cGVvZiBlPyh0aGlzLnNjaGVtZT1lLnNjaGVtZXx8S2UsdGhpcy5hdXRob3JpdHk9ZS5hdXRob3JpdHl8fEtlLHRoaXMucGF0aD1lLnBhdGh8fEtlLHRoaXMucXVlcnk9ZS5xdWVyeXx8S2UsdGhpcy5mcmFnbWVudD1lLmZyYWdtZW50fHxLZSk6KHRoaXMuc2NoZW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV8fHQ/ZToiZmlsZSJ9KGUsbyksdGhpcy5hdXRob3JpdHk9dHx8S2UsdGhpcy5wYXRoPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0P3RbMF0hPT1qZSYmKHQ9amUrdCk6dD1qZX1yZXR1cm4gdH0odGhpcy5zY2hlbWUsbnx8S2UpLHRoaXMucXVlcnk9cnx8S2UsdGhpcy5mcmFnbWVudD1pfHxLZSxEZSh0aGlzLG8pKX1zdGF0aWMgaXNVcmkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBCZXx8ISFlJiYoInN0cmluZyI9PXR5cGVvZiBlLmF1dGhvcml0eSYmInN0cmluZyI9PXR5cGVvZiBlLmZyYWdtZW50JiYic3RyaW5nIj09dHlwZW9mIGUucGF0aCYmInN0cmluZyI9PXR5cGVvZiBlLnF1ZXJ5JiYic3RyaW5nIj09dHlwZW9mIGUuc2NoZW1lJiYic3RyaW5nIj09dHlwZW9mIGUuZnNQYXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS53aXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS50b1N0cmluZyl9Z2V0IGZzUGF0aCgpe3JldHVybiBHZSh0aGlzLCExKX13aXRoKGUpe2lmKCFlKXJldHVybiB0aGlzO2xldHtzY2hlbWU6dCxhdXRob3JpdHk6bixwYXRoOnIscXVlcnk6aSxmcmFnbWVudDpvfT1lO3JldHVybiB2b2lkIDA9PT10P3Q9dGhpcy5zY2hlbWU6bnVsbD09PXQmJih0PUtlKSx2b2lkIDA9PT1uP249dGhpcy5hdXRob3JpdHk6bnVsbD09PW4mJihuPUtlKSx2b2lkIDA9PT1yP3I9dGhpcy5wYXRoOm51bGw9PT1yJiYocj1LZSksdm9pZCAwPT09aT9pPXRoaXMucXVlcnk6bnVsbD09PWkmJihpPUtlKSx2b2lkIDA9PT1vP289dGhpcy5mcmFnbWVudDpudWxsPT09byYmKG89S2UpLHQ9PT10aGlzLnNjaGVtZSYmbj09PXRoaXMuYXV0aG9yaXR5JiZyPT09dGhpcy5wYXRoJiZpPT09dGhpcy5xdWVyeSYmbz09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgJGUodCxuLHIsaSxvKX1zdGF0aWMgcGFyc2UoZSx0PSExKXtjb25zdCBuPVVlLmV4ZWMoZSk7cmV0dXJuIG4/bmV3ICRlKG5bMl18fEtlLFllKG5bNF18fEtlKSxZZShuWzVdfHxLZSksWWUobls3XXx8S2UpLFllKG5bOV18fEtlKSx0KTpuZXcgJGUoS2UsS2UsS2UsS2UsS2UpfXN0YXRpYyBmaWxlKGUpe2xldCB0PUtlO2lmKFQmJihlPWUucmVwbGFjZSgvXFwvZyxqZSkpLGVbMF09PT1qZSYmZVsxXT09PWplKXtjb25zdCBuPWUuaW5kZXhPZihqZSwyKTstMT09PW4/KHQ9ZS5zdWJzdHJpbmcoMiksZT1qZSk6KHQ9ZS5zdWJzdHJpbmcoMixuKSxlPWUuc3Vic3RyaW5nKG4pfHxqZSl9cmV0dXJuIG5ldyAkZSgiZmlsZSIsdCxlLEtlLEtlKX1zdGF0aWMgZnJvbShlKXtjb25zdCB0PW5ldyAkZShlLnNjaGVtZSxlLmF1dGhvcml0eSxlLnBhdGgsZS5xdWVyeSxlLmZyYWdtZW50KTtyZXR1cm4gRGUodCwhMCksdH1zdGF0aWMgam9pblBhdGgoZSwuLi50KXtpZighZS5wYXRoKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogY2Fubm90IGNhbGwgam9pblBhdGggb24gVVJJIHdpdGhvdXQgcGF0aCIpO2xldCBuO3JldHVybiBuPVQmJiJmaWxlIj09PWUuc2NoZW1lP0JlLmZpbGUoTWUuam9pbihHZShlLCEwKSwuLi50KSkucGF0aDpQZS5qb2luKGUucGF0aCwuLi50KSxlLndpdGgoe3BhdGg6bn0pfXRvU3RyaW5nKGU9ITEpe3JldHVybiBKZSh0aGlzLGUpfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUoZSl7aWYoZSl7aWYoZSBpbnN0YW5jZW9mIEJlKXJldHVybiBlO3tjb25zdCB0PW5ldyAkZShlKTtyZXR1cm4gdC5fZm9ybWF0dGVkPWUuZXh0ZXJuYWwsdC5fZnNQYXRoPWUuX3NlcD09PXFlP2UuZnNQYXRoOm51bGwsdH19cmV0dXJuIGV9fWNvbnN0IHFlPVQ/MTp2b2lkIDA7Y2xhc3MgJGUgZXh0ZW5kcyBCZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZm9ybWF0dGVkPW51bGwsdGhpcy5fZnNQYXRoPW51bGx9Z2V0IGZzUGF0aCgpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9R2UodGhpcywhMSkpLHRoaXMuX2ZzUGF0aH10b1N0cmluZyhlPSExKXtyZXR1cm4gZT9KZSh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPUplKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfXRvSlNPTigpe2NvbnN0IGU9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGUuZnNQYXRoPXRoaXMuX2ZzUGF0aCxlLl9zZXA9cWUpLHRoaXMuX2Zvcm1hdHRlZCYmKGUuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihlLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGUuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGUuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoZS5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoZS5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxlfX1jb25zdCBXZT17NTg6IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIEhlKGUsdCl7bGV0IG4scj0tMTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7Y29uc3Qgbz1lLmNoYXJDb2RlQXQoaSk7aWYobz49OTcmJm88PTEyMnx8bz49NjUmJm88PTkwfHxvPj00OCYmbzw9NTd8fDQ1PT09b3x8NDY9PT1vfHw5NT09PW98fDEyNj09PW98fHQmJjQ3PT09byktMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksdm9pZCAwIT09biYmKG4rPWUuY2hhckF0KGkpKTtlbHNle3ZvaWQgMD09PW4mJihuPWUuc3Vic3RyKDAsaSkpO2NvbnN0IHQ9V2Vbb107dm9pZCAwIT09dD8oLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLG4rPXQpOi0xPT09ciYmKHI9aSl9fXJldHVybi0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyKSkpLHZvaWQgMCE9PW4/bjplfWZ1bmN0aW9uIHplKGUpe2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTszNT09PXJ8fDYzPT09cj8odm9pZCAwPT09dCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9V2Vbcl0pOnZvaWQgMCE9PXQmJih0Kz1lW25dKX1yZXR1cm4gdm9pZCAwIT09dD90OmV9ZnVuY3Rpb24gR2UoZSx0KXtsZXQgbjtyZXR1cm4gbj1lLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiYiZmlsZSI9PT1lLnNjaGVtZT9gLy8ke2UuYXV0aG9yaXR5fSR7ZS5wYXRofWA6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3Q/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aCxUJiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gSmUoZSx0KXtjb25zdCBuPXQ/emU6SGU7bGV0IHI9IiIse3NjaGVtZTppLGF1dGhvcml0eTpvLHBhdGg6YSxxdWVyeTpzLGZyYWdtZW50OmN9PWU7aWYoaSYmKHIrPWkscis9IjoiKSwob3x8ImZpbGUiPT09aSkmJihyKz1qZSxyKz1qZSksbyl7bGV0IGU9by5pbmRleE9mKCJAIik7aWYoLTEhPT1lKXtjb25zdCB0PW8uc3Vic3RyKDAsZSk7bz1vLnN1YnN0cihlKzEpLGU9dC5pbmRleE9mKCI6IiksLTE9PT1lP3IrPW4odCwhMSk6KHIrPW4odC5zdWJzdHIoMCxlKSwhMSkscis9IjoiLHIrPW4odC5zdWJzdHIoZSsxKSwhMSkpLHIrPSJAIn1vPW8udG9Mb3dlckNhc2UoKSxlPW8uaW5kZXhPZigiOiIpLC0xPT09ZT9yKz1uKG8sITEpOihyKz1uKG8uc3Vic3RyKDAsZSksITEpLHIrPW8uc3Vic3RyKGUpKX1pZihhKXtpZihhLmxlbmd0aD49MyYmNDc9PT1hLmNoYXJDb2RlQXQoMCkmJjU4PT09YS5jaGFyQ29kZUF0KDIpKXtjb25zdCBlPWEuY2hhckNvZGVBdCgxKTtlPj02NSYmZTw9OTAmJihhPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGUrMzIpfToke2Euc3Vic3RyKDMpfWApfWVsc2UgaWYoYS5sZW5ndGg+PTImJjU4PT09YS5jaGFyQ29kZUF0KDEpKXtjb25zdCBlPWEuY2hhckNvZGVBdCgwKTtlPj02NSYmZTw9OTAmJihhPWAke1N0cmluZy5mcm9tQ2hhckNvZGUoZSszMil9OiR7YS5zdWJzdHIoMil9YCl9cis9bihhLCEwKX1yZXR1cm4gcyYmKHIrPSI/IixyKz1uKHMsITEpKSxjJiYocis9IiMiLHIrPXQ/YzpIZShjLCExKSkscn1mdW5jdGlvbiBYZShlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK1hlKGUuc3Vic3RyKDMpKTplfX1jb25zdCBaZT0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBZZShlKXtyZXR1cm4gZS5tYXRjaChaZSk/ZS5yZXBsYWNlKFplLChlPT5YZShlKSkpOmV9Y2xhc3MgUWV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmxpbmVOdW1iZXI9ZSx0aGlzLmNvbHVtbj10fXdpdGgoZT10aGlzLmxpbmVOdW1iZXIsdD10aGlzLmNvbHVtbil7cmV0dXJuIGU9PT10aGlzLmxpbmVOdW1iZXImJnQ9PT10aGlzLmNvbHVtbj90aGlzOm5ldyBRZShlLHQpfWRlbHRhKGU9MCx0PTApe3JldHVybiB0aGlzLndpdGgodGhpcy5saW5lTnVtYmVyK2UsdGhpcy5jb2x1bW4rdCl9ZXF1YWxzKGUpe3JldHVybiBRZS5lcXVhbHModGhpcyxlKX1zdGF0aWMgZXF1YWxzKGUsdCl7cmV0dXJuIWUmJiF0fHwhIWUmJiEhdCYmZS5saW5lTnVtYmVyPT09dC5saW5lTnVtYmVyJiZlLmNvbHVtbj09PXQuY29sdW1ufWlzQmVmb3JlKGUpe3JldHVybiBRZS5pc0JlZm9yZSh0aGlzLGUpfXN0YXRpYyBpc0JlZm9yZShlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjx0LmNvbHVtbn1pc0JlZm9yZU9yRXF1YWwoZSl7cmV0dXJuIFFlLmlzQmVmb3JlT3JFcXVhbCh0aGlzLGUpfXN0YXRpYyBpc0JlZm9yZU9yRXF1YWwoZSx0KXtyZXR1cm4gZS5saW5lTnVtYmVyPHQubGluZU51bWJlcnx8ISh0LmxpbmVOdW1iZXI8ZS5saW5lTnVtYmVyKSYmZS5jb2x1bW48PXQuY29sdW1ufXN0YXRpYyBjb21wYXJlKGUsdCl7Y29uc3Qgbj0wfGUubGluZU51bWJlcixyPTB8dC5saW5lTnVtYmVyO2lmKG49PT1yKXtyZXR1cm4oMHxlLmNvbHVtbiktKDB8dC5jb2x1bW4pfXJldHVybiBuLXJ9Y2xvbmUoKXtyZXR1cm4gbmV3IFFlKHRoaXMubGluZU51bWJlcix0aGlzLmNvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5saW5lTnVtYmVyKyIsIit0aGlzLmNvbHVtbisiKSJ9c3RhdGljIGxpZnQoZSl7cmV0dXJuIG5ldyBRZShlLmxpbmVOdW1iZXIsZS5jb2x1bW4pfXN0YXRpYyBpc0lQb3NpdGlvbihlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLmxpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5jb2x1bW59fWNsYXNzIGV0e2NvbnN0cnVjdG9yKGUsdCxuLHIpe2U+bnx8ZT09PW4mJnQ+cj8odGhpcy5zdGFydExpbmVOdW1iZXI9bix0aGlzLnN0YXJ0Q29sdW1uPXIsdGhpcy5lbmRMaW5lTnVtYmVyPWUsdGhpcy5lbmRDb2x1bW49dCk6KHRoaXMuc3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zdGFydENvbHVtbj10LHRoaXMuZW5kTGluZU51bWJlcj1uLHRoaXMuZW5kQ29sdW1uPXIpfWlzRW1wdHkoKXtyZXR1cm4gZXQuaXNFbXB0eSh0aGlzKX1zdGF0aWMgaXNFbXB0eShlKXtyZXR1cm4gZS5zdGFydExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJmUuc3RhcnRDb2x1bW49PT1lLmVuZENvbHVtbn1jb250YWluc1Bvc2l0aW9uKGUpe3JldHVybiBldC5jb250YWluc1Bvc2l0aW9uKHRoaXMsZSl9c3RhdGljIGNvbnRhaW5zUG9zaXRpb24oZSx0KXtyZXR1cm4hKHQubGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5saW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQubGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmNvbHVtbjxlLnN0YXJ0Q29sdW1uKSYmISh0LmxpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuY29sdW1uPmUuZW5kQ29sdW1uKSl9c3RhdGljIHN0cmljdENvbnRhaW5zUG9zaXRpb24oZSx0KXtyZXR1cm4hKHQubGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5saW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQubGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmNvbHVtbjw9ZS5zdGFydENvbHVtbikmJiEodC5saW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmNvbHVtbj49ZS5lbmRDb2x1bW4pKX1jb250YWluc1JhbmdlKGUpe3JldHVybiBldC5jb250YWluc1JhbmdlKHRoaXMsZSl9c3RhdGljIGNvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPGUuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW4+ZS5lbmRDb2x1bW4pKSl9c3RyaWN0Q29udGFpbnNSYW5nZShlKXtyZXR1cm4gZXQuc3RyaWN0Q29udGFpbnNSYW5nZSh0aGlzLGUpfXN0YXRpYyBzdHJpY3RDb250YWluc1JhbmdlKGUsdCl7cmV0dXJuISh0LnN0YXJ0TGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyKSYmKCEodC5zdGFydExpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyKSYmKCEodC5zdGFydExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5zdGFydENvbHVtbjw9ZS5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbj49ZS5lbmRDb2x1bW4pKSl9cGx1c1JhbmdlKGUpe3JldHVybiBldC5wbHVzUmFuZ2UodGhpcyxlKX1zdGF0aWMgcGx1c1JhbmdlKGUsdCl7bGV0IG4scixpLG87cmV0dXJuIHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyPyhuPXQuc3RhcnRMaW5lTnVtYmVyLHI9dC5zdGFydENvbHVtbik6dC5zdGFydExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlcj8obj10LnN0YXJ0TGluZU51bWJlcixyPU1hdGgubWluKHQuc3RhcnRDb2x1bW4sZS5zdGFydENvbHVtbikpOihuPWUuc3RhcnRMaW5lTnVtYmVyLHI9ZS5zdGFydENvbHVtbiksdC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcj8oaT10LmVuZExpbmVOdW1iZXIsbz10LmVuZENvbHVtbik6dC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyPyhpPXQuZW5kTGluZU51bWJlcixvPU1hdGgubWF4KHQuZW5kQ29sdW1uLGUuZW5kQ29sdW1uKSk6KGk9ZS5lbmRMaW5lTnVtYmVyLG89ZS5lbmRDb2x1bW4pLG5ldyBldChuLHIsaSxvKX1pbnRlcnNlY3RSYW5nZXMoZSl7cmV0dXJuIGV0LmludGVyc2VjdFJhbmdlcyh0aGlzLGUpfXN0YXRpYyBpbnRlcnNlY3RSYW5nZXMoZSx0KXtsZXQgbj1lLnN0YXJ0TGluZU51bWJlcixyPWUuc3RhcnRDb2x1bW4saT1lLmVuZExpbmVOdW1iZXIsbz1lLmVuZENvbHVtbjtjb25zdCBhPXQuc3RhcnRMaW5lTnVtYmVyLHM9dC5zdGFydENvbHVtbixjPXQuZW5kTGluZU51bWJlcixsPXQuZW5kQ29sdW1uO3JldHVybiBuPGE/KG49YSxyPXMpOm49PT1hJiYocj1NYXRoLm1heChyLHMpKSxpPmM/KGk9YyxvPWwpOmk9PT1jJiYobz1NYXRoLm1pbihvLGwpKSxuPml8fG49PT1pJiZyPm8/bnVsbDpuZXcgZXQobixyLGksbyl9ZXF1YWxzUmFuZ2UoZSl7cmV0dXJuIGV0LmVxdWFsc1JhbmdlKHRoaXMsZSl9c3RhdGljIGVxdWFsc1JhbmdlKGUsdCl7cmV0dXJuISFlJiYhIXQmJmUuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuc3RhcnRDb2x1bW49PT10LnN0YXJ0Q29sdW1uJiZlLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPT09dC5lbmRDb2x1bW59Z2V0RW5kUG9zaXRpb24oKXtyZXR1cm4gZXQuZ2V0RW5kUG9zaXRpb24odGhpcyl9c3RhdGljIGdldEVuZFBvc2l0aW9uKGUpe3JldHVybiBuZXcgUWUoZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uKX1nZXRTdGFydFBvc2l0aW9uKCl7cmV0dXJuIGV0LmdldFN0YXJ0UG9zaXRpb24odGhpcyl9c3RhdGljIGdldFN0YXJ0UG9zaXRpb24oZSl7cmV0dXJuIG5ldyBRZShlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zdGFydENvbHVtbisiIC0+ICIrdGhpcy5lbmRMaW5lTnVtYmVyKyIsIit0aGlzLmVuZENvbHVtbisiXSJ9c2V0RW5kUG9zaXRpb24oZSx0KXtyZXR1cm4gbmV3IGV0KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sZSx0KX1zZXRTdGFydFBvc2l0aW9uKGUsdCl7cmV0dXJuIG5ldyBldChlLHQsdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKX1jb2xsYXBzZVRvU3RhcnQoKXtyZXR1cm4gZXQuY29sbGFwc2VUb1N0YXJ0KHRoaXMpfXN0YXRpYyBjb2xsYXBzZVRvU3RhcnQoZSl7cmV0dXJuIG5ldyBldChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKGUsdD1lKXtyZXR1cm4gbmV3IGV0KGUubGluZU51bWJlcixlLmNvbHVtbix0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBsaWZ0KGUpe3JldHVybiBlP25ldyBldChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbik6bnVsbH1zdGF0aWMgaXNJUmFuZ2UoZSl7cmV0dXJuIGUmJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydENvbHVtbiYmIm51bWJlciI9PXR5cGVvZiBlLmVuZExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5lbmRDb2x1bW59c3RhdGljIGFyZUludGVyc2VjdGluZ09yVG91Y2hpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPHQuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBhcmVJbnRlcnNlY3RpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPD10LnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjw9ZS5zdGFydENvbHVtbil9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLHQpe2lmKGUmJnQpe2NvbnN0IG49MHxlLnN0YXJ0TGluZU51bWJlcixyPTB8dC5zdGFydExpbmVOdW1iZXI7aWYobj09PXIpe2NvbnN0IG49MHxlLnN0YXJ0Q29sdW1uLHI9MHx0LnN0YXJ0Q29sdW1uO2lmKG49PT1yKXtjb25zdCBuPTB8ZS5lbmRMaW5lTnVtYmVyLHI9MHx0LmVuZExpbmVOdW1iZXI7aWYobj09PXIpe3JldHVybigwfGUuZW5kQ29sdW1uKS0oMHx0LmVuZENvbHVtbil9cmV0dXJuIG4tcn1yZXR1cm4gbi1yfXJldHVybiBuLXJ9cmV0dXJuKGU/MTowKS0odD8xOjApfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdFbmRzKGUsdCl7cmV0dXJuIGUuZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj9lLmVuZENvbHVtbj09PXQuZW5kQ29sdW1uP2Uuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/ZS5zdGFydENvbHVtbi10LnN0YXJ0Q29sdW1uOmUuc3RhcnRMaW5lTnVtYmVyLXQuc3RhcnRMaW5lTnVtYmVyOmUuZW5kQ29sdW1uLXQuZW5kQ29sdW1uOmUuZW5kTGluZU51bWJlci10LmVuZExpbmVOdW1iZXJ9c3RhdGljIHNwYW5zTXVsdGlwbGVMaW5lcyhlKXtyZXR1cm4gZS5lbmRMaW5lTnVtYmVyPmUuc3RhcnRMaW5lTnVtYmVyfXRvSlNPTigpe3JldHVybiB0aGlzfX1mdW5jdGlvbiB0dChlLHQsbixyKXtyZXR1cm4gbmV3IGJlKGUsdCxuKS5Db21wdXRlRGlmZihyKX1jbGFzcyBudHtjb25zdHJ1Y3RvcihlKXtjb25zdCB0PVtdLG49W107Zm9yKGxldCByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXRbcl09c3QoZVtyXSwxKSxuW3JdPWN0KGVbcl0sMSk7dGhpcy5saW5lcz1lLHRoaXMuX3N0YXJ0Q29sdW1ucz10LHRoaXMuX2VuZENvbHVtbnM9bn1nZXRFbGVtZW50cygpe2NvbnN0IGU9W107Zm9yKGxldCB0PTAsbj10aGlzLmxpbmVzLmxlbmd0aDt0PG47dCsrKWVbdF09dGhpcy5saW5lc1t0XS5zdWJzdHJpbmcodGhpcy5fc3RhcnRDb2x1bW5zW3RdLTEsdGhpcy5fZW5kQ29sdW1uc1t0XS0xKTtyZXR1cm4gZX1nZXRTdHJpY3RFbGVtZW50KGUpe3JldHVybiB0aGlzLmxpbmVzW2VdfWdldFN0YXJ0TGluZU51bWJlcihlKXtyZXR1cm4gZSsxfWdldEVuZExpbmVOdW1iZXIoZSl7cmV0dXJuIGUrMX1jcmVhdGVDaGFyU2VxdWVuY2UoZSx0LG4pe2NvbnN0IHI9W10saT1bXSxvPVtdO2xldCBhPTA7Zm9yKGxldCBzPXQ7czw9bjtzKyspe2NvbnN0IHQ9dGhpcy5saW5lc1tzXSxjPWU/dGhpcy5fc3RhcnRDb2x1bW5zW3NdOjEsbD1lP3RoaXMuX2VuZENvbHVtbnNbc106dC5sZW5ndGgrMTtmb3IobGV0IGU9YztlPGw7ZSsrKXJbYV09dC5jaGFyQ29kZUF0KGUtMSksaVthXT1zKzEsb1thXT1lLGErKzshZSYmczxuJiYoclthXT0xMCxpW2FdPXMrMSxvW2FdPXQubGVuZ3RoKzEsYSsrKX1yZXR1cm4gbmV3IHJ0KHIsaSxvKX19Y2xhc3MgcnR7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuX2NoYXJDb2Rlcz1lLHRoaXMuX2xpbmVOdW1iZXJzPXQsdGhpcy5fY29sdW1ucz1ufXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuX2NoYXJDb2Rlcy5tYXAoKChlLHQpPT4oMTA9PT1lPyJcXG4iOlN0cmluZy5mcm9tQ2hhckNvZGUoZSkpK2AtKCR7dGhpcy5fbGluZU51bWJlcnNbdF19LCR7dGhpcy5fY29sdW1uc1t0XX0pYCkpLmpvaW4oIiwgIikrIl0ifV9hc3NlcnRJbmRleChlLHQpe2lmKGU8MHx8ZT49dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIGluZGV4Iil9Z2V0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fY2hhckNvZGVzfWdldFN0YXJ0TGluZU51bWJlcihlKXtyZXR1cm4gZT4wJiZlPT09dGhpcy5fbGluZU51bWJlcnMubGVuZ3RoP3RoaXMuZ2V0RW5kTGluZU51bWJlcihlLTEpOih0aGlzLl9hc3NlcnRJbmRleChlLHRoaXMuX2xpbmVOdW1iZXJzKSx0aGlzLl9saW5lTnVtYmVyc1tlXSl9Z2V0RW5kTGluZU51bWJlcihlKXtyZXR1cm4tMT09PWU/dGhpcy5nZXRTdGFydExpbmVOdW1iZXIoZSsxKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9saW5lTnVtYmVycyksMTA9PT10aGlzLl9jaGFyQ29kZXNbZV0/dGhpcy5fbGluZU51bWJlcnNbZV0rMTp0aGlzLl9saW5lTnVtYmVyc1tlXSl9Z2V0U3RhcnRDb2x1bW4oZSl7cmV0dXJuIGU+MCYmZT09PXRoaXMuX2NvbHVtbnMubGVuZ3RoP3RoaXMuZ2V0RW5kQ29sdW1uKGUtMSk6KHRoaXMuX2Fzc2VydEluZGV4KGUsdGhpcy5fY29sdW1ucyksdGhpcy5fY29sdW1uc1tlXSl9Z2V0RW5kQ29sdW1uKGUpe3JldHVybi0xPT09ZT90aGlzLmdldFN0YXJ0Q29sdW1uKGUrMSk6KHRoaXMuX2Fzc2VydEluZGV4KGUsdGhpcy5fY29sdW1ucyksMTA9PT10aGlzLl9jaGFyQ29kZXNbZV0/MTp0aGlzLl9jb2x1bW5zW2VdKzEpfX1jbGFzcyBpdHtjb25zdHJ1Y3RvcihlLHQsbixyLGksbyxhLHMpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9ZSx0aGlzLm9yaWdpbmFsU3RhcnRDb2x1bW49dCx0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj1uLHRoaXMub3JpZ2luYWxFbmRDb2x1bW49cix0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPWksdGhpcy5tb2RpZmllZFN0YXJ0Q29sdW1uPW8sdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9YSx0aGlzLm1vZGlmaWVkRW5kQ29sdW1uPXN9c3RhdGljIGNyZWF0ZUZyb21EaWZmQ2hhbmdlKGUsdCxuKXtjb25zdCByPXQuZ2V0U3RhcnRMaW5lTnVtYmVyKGUub3JpZ2luYWxTdGFydCksaT10LmdldFN0YXJ0Q29sdW1uKGUub3JpZ2luYWxTdGFydCksbz10LmdldEVuZExpbmVOdW1iZXIoZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgtMSksYT10LmdldEVuZENvbHVtbihlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aC0xKSxzPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKGUubW9kaWZpZWRTdGFydCksYz1uLmdldFN0YXJ0Q29sdW1uKGUubW9kaWZpZWRTdGFydCksbD1uLmdldEVuZExpbmVOdW1iZXIoZS5tb2RpZmllZFN0YXJ0K2UubW9kaWZpZWRMZW5ndGgtMSksdT1uLmdldEVuZENvbHVtbihlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aC0xKTtyZXR1cm4gbmV3IGl0KHIsaSxvLGEscyxjLGwsdSl9fWNsYXNzIG90e2NvbnN0cnVjdG9yKGUsdCxuLHIsaSl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj1lLHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPXQsdGhpcy5tb2RpZmllZFN0YXJ0TGluZU51bWJlcj1uLHRoaXMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPXIsdGhpcy5jaGFyQ2hhbmdlcz1pfXN0YXRpYyBjcmVhdGVGcm9tRGlmZlJlc3VsdChlLHQsbixyLGksbyxhKXtsZXQgcyxjLGwsdSxoO2lmKDA9PT10Lm9yaWdpbmFsTGVuZ3RoPyhzPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCktMSxjPTApOihzPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCksYz1uLmdldEVuZExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSkpLDA9PT10Lm1vZGlmaWVkTGVuZ3RoPyhsPXIuZ2V0U3RhcnRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCktMSx1PTApOihsPXIuZ2V0U3RhcnRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCksdT1yLmdldEVuZExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtMSkpLG8mJnQub3JpZ2luYWxMZW5ndGg+MCYmdC5vcmlnaW5hbExlbmd0aDwyMCYmdC5tb2RpZmllZExlbmd0aD4wJiZ0Lm1vZGlmaWVkTGVuZ3RoPDIwJiZpKCkpe2NvbnN0IG89bi5jcmVhdGVDaGFyU2VxdWVuY2UoZSx0Lm9yaWdpbmFsU3RhcnQsdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSkscz1yLmNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQubW9kaWZpZWRTdGFydCx0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKTtpZihvLmdldEVsZW1lbnRzKCkubGVuZ3RoPjAmJnMuZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCl7bGV0IGU9dHQobyxzLGksITApLmNoYW5nZXM7YSYmKGU9ZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3QgdD1bZVswXV07bGV0IG49dFswXTtmb3IobGV0IHI9MSxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0IGk9ZVtyXSxvPWkub3JpZ2luYWxTdGFydC0obi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgpLGE9aS5tb2RpZmllZFN0YXJ0LShuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCk7TWF0aC5taW4obyxhKTwzPyhuLm9yaWdpbmFsTGVuZ3RoPWkub3JpZ2luYWxTdGFydCtpLm9yaWdpbmFsTGVuZ3RoLW4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkTGVuZ3RoPWkubW9kaWZpZWRTdGFydCtpLm1vZGlmaWVkTGVuZ3RoLW4ubW9kaWZpZWRTdGFydCk6KHQucHVzaChpKSxuPWkpfXJldHVybiB0fShlKSksaD1bXTtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspaC5wdXNoKGl0LmNyZWF0ZUZyb21EaWZmQ2hhbmdlKGVbdF0sbyxzKSl9fXJldHVybiBuZXcgb3QocyxjLGwsdSxoKX19Y2xhc3MgYXR7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzPW4uc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcz1uLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZT1uLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmY9bi5zaG91bGRNYWtlUHJldHR5RGlmZix0aGlzLm9yaWdpbmFsTGluZXM9ZSx0aGlzLm1vZGlmaWVkTGluZXM9dCx0aGlzLm9yaWdpbmFsPW5ldyBudChlKSx0aGlzLm1vZGlmaWVkPW5ldyBudCh0KSx0aGlzLmNvbnRpbnVlTGluZURpZmY9bHQobi5tYXhDb21wdXRhdGlvblRpbWUpLHRoaXMuY29udGludWVDaGFyRGlmZj1sdCgwPT09bi5tYXhDb21wdXRhdGlvblRpbWU/MDpNYXRoLm1pbihuLm1heENvbXB1dGF0aW9uVGltZSw1ZTMpKX1jb21wdXRlRGlmZigpe2lmKDE9PT10aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMub3JpZ2luYWwubGluZXNbMF0ubGVuZ3RoKXJldHVybiAxPT09dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgmJjA9PT10aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aD97cXVpdEVhcmx5OiExLGNoYW5nZXM6W119OntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjEsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgsY2hhckNoYW5nZXM6W3ttb2RpZmllZEVuZENvbHVtbjowLG1vZGlmaWVkRW5kTGluZU51bWJlcjowLG1vZGlmaWVkU3RhcnRDb2x1bW46MCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjowLG9yaWdpbmFsRW5kQ29sdW1uOjAsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjAsb3JpZ2luYWxTdGFydENvbHVtbjowLG9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjB9XX1dfTtpZigxPT09dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgmJjA9PT10aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aClyZXR1cm57cXVpdEVhcmx5OiExLGNoYW5nZXM6W3tvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjoxLG9yaWdpbmFsRW5kTGluZU51bWJlcjp0aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjoxLGNoYXJDaGFuZ2VzOlt7bW9kaWZpZWRFbmRDb2x1bW46MCxtb2RpZmllZEVuZExpbmVOdW1iZXI6MCxtb2RpZmllZFN0YXJ0Q29sdW1uOjAsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MCxvcmlnaW5hbEVuZENvbHVtbjowLG9yaWdpbmFsRW5kTGluZU51bWJlcjowLG9yaWdpbmFsU3RhcnRDb2x1bW46MCxvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjowfV19XX07Y29uc3QgZT10dCh0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUxpbmVEaWZmLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmYpLHQ9ZS5jaGFuZ2VzLG49ZS5xdWl0RWFybHk7aWYodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspZS5wdXNoKG90LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdFtuXSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpO3JldHVybntxdWl0RWFybHk6bixjaGFuZ2VzOmV9fWNvbnN0IHI9W107bGV0IGk9MCxvPTA7Zm9yKGxldCBlPS0xLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3QgYT1lKzE8bj90W2UrMV06bnVsbCxzPWE/YS5vcmlnaW5hbFN0YXJ0OnRoaXMub3JpZ2luYWxMaW5lcy5sZW5ndGgsYz1hP2EubW9kaWZpZWRTdGFydDp0aGlzLm1vZGlmaWVkTGluZXMubGVuZ3RoO2Zvcig7aTxzJiZvPGM7KXtjb25zdCBlPXRoaXMub3JpZ2luYWxMaW5lc1tpXSx0PXRoaXMubW9kaWZpZWRMaW5lc1tvXTtpZihlIT09dCl7e2xldCBuPXN0KGUsMSksYT1zdCh0LDEpO2Zvcig7bj4xJiZhPjE7KXtpZihlLmNoYXJDb2RlQXQobi0yKSE9PXQuY2hhckNvZGVBdChhLTIpKWJyZWFrO24tLSxhLS19KG4+MXx8YT4xKSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShyLGkrMSwxLG4sbysxLDEsYSl9e2xldCBuPWN0KGUsMSksYT1jdCh0LDEpO2NvbnN0IHM9ZS5sZW5ndGgrMSxjPXQubGVuZ3RoKzE7Zm9yKDtuPHMmJmE8Yzspe2lmKGUuY2hhckNvZGVBdChuLTEpIT09ZS5jaGFyQ29kZUF0KGEtMSkpYnJlYWs7bisrLGErK30objxzfHxhPGMpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHIsaSsxLG4scyxvKzEsYSxjKX19aSsrLG8rK31hJiYoci5wdXNoKG90LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsYSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpLGkrPWEub3JpZ2luYWxMZW5ndGgsbys9YS5tb2RpZmllZExlbmd0aCl9cmV0dXJue3F1aXRFYXJseTpuLGNoYW5nZXM6cn19X3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8sYSl7aWYodGhpcy5fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8sYSkpcmV0dXJuO2xldCBzO3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiYocz1bbmV3IGl0KHQsbix0LHIsaSxvLGksYSldKSxlLnB1c2gobmV3IG90KHQsdCxpLGkscykpfV9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQsbixyLGksbyxhKXtjb25zdCBzPWUubGVuZ3RoO2lmKDA9PT1zKXJldHVybiExO2NvbnN0IGM9ZVtzLTFdO3JldHVybiAwIT09Yy5vcmlnaW5hbEVuZExpbmVOdW1iZXImJjAhPT1jLm1vZGlmaWVkRW5kTGluZU51bWJlciYmKGMub3JpZ2luYWxFbmRMaW5lTnVtYmVyKzE9PT10JiZjLm1vZGlmaWVkRW5kTGluZU51bWJlcisxPT09aSYmKGMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPXQsYy5tb2RpZmllZEVuZExpbmVOdW1iZXI9aSx0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmYy5jaGFyQ2hhbmdlcyYmYy5jaGFyQ2hhbmdlcy5wdXNoKG5ldyBpdCh0LG4sdCxyLGksbyxpLGEpKSwhMCkpfX1mdW5jdGlvbiBzdChlLHQpe2NvbnN0IG49ZnVuY3Rpb24oZSl7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPWUuY2hhckNvZGVBdCh0KTtpZigzMiE9PW4mJjkhPT1uKXJldHVybiB0fXJldHVybi0xfShlKTtyZXR1cm4tMT09PW4/dDpuKzF9ZnVuY3Rpb24gY3QoZSx0KXtjb25zdCBuPWZ1bmN0aW9uKGUsdD1lLmxlbmd0aC0xKXtmb3IobGV0IG49dDtuPj0wO24tLSl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobik7aWYoMzIhPT10JiY5IT09dClyZXR1cm4gbn1yZXR1cm4tMX0oZSk7cmV0dXJuLTE9PT1uP3Q6bisyfWZ1bmN0aW9uIGx0KGUpe2lmKDA9PT1lKXJldHVybigpPT4hMDtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuKCk9PkRhdGUubm93KCktdDxlfXZhciB1dDtmdW5jdGlvbiBodChlKXtyZXR1cm4gZTwwPzA6ZT4yNTU/MjU1OjB8ZX1mdW5jdGlvbiBmdChlKXtyZXR1cm4gZTwwPzA6ZT40Mjk0OTY3Mjk1PzQyOTQ5NjcyOTU6MHxlfSFmdW5jdGlvbihlKXtlLmlzTGVzc1RoYW49ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MH0sZS5pc0dyZWF0ZXJUaGFuPWZ1bmN0aW9uKGUpe3JldHVybiBlPjB9LGUuaXNOZWl0aGVyTGVzc09yR3JlYXRlclRoYW49ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lfSxlLmdyZWF0ZXJUaGFuPTEsZS5sZXNzVGhhbj0tMSxlLm5laXRoZXJMZXNzT3JHcmVhdGVyVGhhbj0wfSh1dHx8KHV0PXt9KSk7Y2xhc3MgZHR7Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZXM9ZSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkoZS5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleD1uZXcgSW50MzJBcnJheSgxKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09LTF9aW5zZXJ0VmFsdWVzKGUsdCl7ZT1mdChlKTtjb25zdCBuPXRoaXMudmFsdWVzLHI9dGhpcy5wcmVmaXhTdW0saT10Lmxlbmd0aDtyZXR1cm4gMCE9PWkmJih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgraSksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoMCxlKSwwKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheShlKSxlK2kpLHRoaXMudmFsdWVzLnNldCh0LGUpLGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChyLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9c2V0VmFsdWUoZSx0KXtyZXR1cm4gZT1mdChlKSx0PWZ0KHQpLHRoaXMudmFsdWVzW2VdIT09dCYmKHRoaXMudmFsdWVzW2VdPXQsZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLCEwKX1yZW1vdmVWYWx1ZXMoZSx0KXtlPWZ0KGUpLHQ9ZnQodCk7Y29uc3Qgbj10aGlzLnZhbHVlcyxyPXRoaXMucHJlZml4U3VtO2lmKGU+PW4ubGVuZ3RoKXJldHVybiExO2NvbnN0IGk9bi5sZW5ndGgtZTtyZXR1cm4gdD49aSYmKHQ9aSksMCE9PXQmJih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgtdCksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoMCxlKSwwKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheShlK3QpLGUpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChyLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9Z2V0VG90YWxTdW0oKXtyZXR1cm4gMD09PXRoaXMudmFsdWVzLmxlbmd0aD8wOnRoaXMuX2dldFByZWZpeFN1bSh0aGlzLnZhbHVlcy5sZW5ndGgtMSl9Z2V0UHJlZml4U3VtKGUpe3JldHVybiBlPDA/MDooZT1mdChlKSx0aGlzLl9nZXRQcmVmaXhTdW0oZSkpfV9nZXRQcmVmaXhTdW0oZSl7aWYoZTw9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKXJldHVybiB0aGlzLnByZWZpeFN1bVtlXTtsZXQgdD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMTswPT09dCYmKHRoaXMucHJlZml4U3VtWzBdPXRoaXMudmFsdWVzWzBdLHQrKyksZT49dGhpcy52YWx1ZXMubGVuZ3RoJiYoZT10aGlzLnZhbHVlcy5sZW5ndGgtMSk7Zm9yKGxldCBuPXQ7bjw9ZTtuKyspdGhpcy5wcmVmaXhTdW1bbl09dGhpcy5wcmVmaXhTdW1bbi0xXSt0aGlzLnZhbHVlc1tuXTtyZXR1cm4gdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPU1hdGgubWF4KHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSxlKSx0aGlzLnByZWZpeFN1bVtlXX1nZXRJbmRleE9mKGUpe2U9TWF0aC5mbG9vcihlKSx0aGlzLmdldFRvdGFsU3VtKCk7bGV0IHQ9MCxuPXRoaXMudmFsdWVzLmxlbmd0aC0xLHI9MCxpPTAsbz0wO2Zvcig7dDw9bjspaWYocj10KyhuLXQpLzJ8MCxpPXRoaXMucHJlZml4U3VtW3JdLG89aS10aGlzLnZhbHVlc1tyXSxlPG8pbj1yLTE7ZWxzZXtpZighKGU+PWkpKWJyZWFrO3Q9cisxfXJldHVybiBuZXcgbXQocixlLW8pfX1jbGFzcyBtdHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuaW5kZXg9ZSx0aGlzLnJlbWFpbmRlcj10LHRoaXMuX3ByZWZpeFN1bUluZGV4T2ZSZXN1bHRCcmFuZD12b2lkIDAsdGhpcy5pbmRleD1lLHRoaXMucmVtYWluZGVyPXR9fWNvbnN0IGd0PWZ1bmN0aW9uKGU9IiIpe2xldCB0PSIoLT9cXGQqXFwuXFxkXFx3Kil8KFteIjtmb3IoY29uc3QgbiBvZiJgfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsLjw+Lz8iKWUuaW5kZXhPZihuKT49MHx8KHQrPSJcXCIrbik7cmV0dXJuIHQrPSJcXHNdKykiLG5ldyBSZWdFeHAodCwiZyIpfSgpO2NvbnN0IHB0PW5ldyBnO2Z1bmN0aW9uIGJ0KGUsdCxuLHIsaSl7aWYoaXx8KGk9cy5maXJzdChwdCkpLG4ubGVuZ3RoPmkubWF4TGVuKXtsZXQgbz1lLWkubWF4TGVuLzI7cmV0dXJuIG88MD9vPTA6cis9byxidChlLHQsbj1uLnN1YnN0cmluZyhvLGUraS5tYXhMZW4vMikscixpKX1jb25zdCBvPURhdGUubm93KCksYT1lLTEtcjtsZXQgYz0tMSxsPW51bGw7Zm9yKGxldCBlPTE7IShEYXRlLm5vdygpLW8+PWkudGltZUJ1ZGdldCk7ZSsrKXtjb25zdCByPWEtaS53aW5kb3dTaXplKmU7dC5sYXN0SW5kZXg9TWF0aC5tYXgoMCxyKTtjb25zdCBvPXZ0KHQsbixhLGMpO2lmKCFvJiZsKWJyZWFrO2lmKGw9byxyPD0wKWJyZWFrO2M9cn1pZihsKXtjb25zdCBlPXt3b3JkOmxbMF0sc3RhcnRDb2x1bW46cisxK2wuaW5kZXgsZW5kQ29sdW1uOnIrMStsLmluZGV4K2xbMF0ubGVuZ3RofTtyZXR1cm4gdC5sYXN0SW5kZXg9MCxlfXJldHVybiBudWxsfWZ1bmN0aW9uIHZ0KGUsdCxuLHIpe2xldCBpO2Zvcig7aT1lLmV4ZWModCk7KXtjb25zdCB0PWkuaW5kZXh8fDA7aWYodDw9biYmZS5sYXN0SW5kZXg+PW4pcmV0dXJuIGk7aWYocj4wJiZ0PnIpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9cHQudW5zaGlmdCh7bWF4TGVuOjFlMyx3aW5kb3dTaXplOjE1LHRpbWVCdWRnZXQ6MTUwfSk7Y2xhc3MgeXR7Y29uc3RydWN0b3IoZSl7Y29uc3QgdD1odChlKTt0aGlzLl9kZWZhdWx0VmFsdWU9dCx0aGlzLl9hc2NpaU1hcD15dC5fY3JlYXRlQXNjaWlNYXAodCksdGhpcy5fbWFwPW5ldyBNYXB9c3RhdGljIF9jcmVhdGVBc2NpaU1hcChlKXtjb25zdCB0PW5ldyBVaW50OEFycmF5KDI1Nik7Zm9yKGxldCBuPTA7bjwyNTY7bisrKXRbbl09ZTtyZXR1cm4gdH1zZXQoZSx0KXtjb25zdCBuPWh0KHQpO2U+PTAmJmU8MjU2P3RoaXMuX2FzY2lpTWFwW2VdPW46dGhpcy5fbWFwLnNldChlLG4pfWdldChlKXtyZXR1cm4gZT49MCYmZTwyNTY/dGhpcy5fYXNjaWlNYXBbZV06dGhpcy5fbWFwLmdldChlKXx8dGhpcy5fZGVmYXVsdFZhbHVlfX1jbGFzcyBDdHtjb25zdHJ1Y3RvcihlLHQsbil7Y29uc3Qgcj1uZXcgVWludDhBcnJheShlKnQpO2ZvcihsZXQgaT0wLG89ZSp0O2k8bztpKyspcltpXT1uO3RoaXMuX2RhdGE9cix0aGlzLnJvd3M9ZSx0aGlzLmNvbHM9dH1nZXQoZSx0KXtyZXR1cm4gdGhpcy5fZGF0YVtlKnRoaXMuY29scyt0XX1zZXQoZSx0LG4pe3RoaXMuX2RhdGFbZSp0aGlzLmNvbHMrdF09bn19Y2xhc3Mgd3R7Y29uc3RydWN0b3IoZSl7bGV0IHQ9MCxuPTA7Zm9yKGxldCByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXtjb25zdFtpLG8sYV09ZVtyXTtvPnQmJih0PW8pLGk+biYmKG49aSksYT5uJiYobj1hKX10KyssbisrO2NvbnN0IHI9bmV3IEN0KG4sdCwwKTtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0W24saSxvXT1lW3RdO3Iuc2V0KG4saSxvKX10aGlzLl9zdGF0ZXM9cix0aGlzLl9tYXhDaGFyQ29kZT10fW5leHRTdGF0ZShlLHQpe3JldHVybiB0PDB8fHQ+PXRoaXMuX21heENoYXJDb2RlPzA6dGhpcy5fc3RhdGVzLmdldChlLHQpfX1sZXQgX3Q9bnVsbDtsZXQgU3Q9bnVsbDtjbGFzcyBBdHtzdGF0aWMgX2NyZWF0ZUxpbmsoZSx0LG4scixpKXtsZXQgbz1pLTE7ZG97Y29uc3Qgbj10LmNoYXJDb2RlQXQobyk7aWYoMiE9PWUuZ2V0KG4pKWJyZWFrO28tLX13aGlsZShvPnIpO2lmKHI+MCl7Y29uc3QgZT10LmNoYXJDb2RlQXQoci0xKSxuPXQuY2hhckNvZGVBdChvKTsoNDA9PT1lJiY0MT09PW58fDkxPT09ZSYmOTM9PT1ufHwxMjM9PT1lJiYxMjU9PT1uKSYmby0tfXJldHVybntyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOm4sc3RhcnRDb2x1bW46cisxLGVuZExpbmVOdW1iZXI6bixlbmRDb2x1bW46bysyfSx1cmw6dC5zdWJzdHJpbmcocixvKzEpfX1zdGF0aWMgY29tcHV0ZUxpbmtzKGUsdD1mdW5jdGlvbigpe3JldHVybiBudWxsPT09X3QmJihfdD1uZXcgd3QoW1sxLDEwNCwyXSxbMSw3MiwyXSxbMSwxMDIsNl0sWzEsNzAsNl0sWzIsMTE2LDNdLFsyLDg0LDNdLFszLDExNiw0XSxbMyw4NCw0XSxbNCwxMTIsNV0sWzQsODAsNV0sWzUsMTE1LDldLFs1LDgzLDldLFs1LDU4LDEwXSxbNiwxMDUsN10sWzYsNzMsN10sWzcsMTA4LDhdLFs3LDc2LDhdLFs4LDEwMSw5XSxbOCw2OSw5XSxbOSw1OCwxMF0sWzEwLDQ3LDExXSxbMTEsNDcsMTJdXSkpLF90fSgpKXtjb25zdCBuPWZ1bmN0aW9uKCl7aWYobnVsbD09PVN0KXtTdD1uZXcgeXQoMCk7Y29uc3QgZT0iIFx0PD4nXCLjgIHjgILvvaHvvaTvvIzvvI7vvJrvvJvigJjjgIjjgIzjgI7jgJTvvIjvvLvvvZvvvaLvvaPvvZ3vvL3vvInjgJXjgI/jgI3jgInigJnvvYDvvZ7igKYiO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKVN0LnNldChlLmNoYXJDb2RlQXQodCksMSk7Y29uc3QgdD0iLiw7OiI7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspU3Quc2V0KHQuY2hhckNvZGVBdChlKSwyKX1yZXR1cm4gU3R9KCkscj1bXTtmb3IobGV0IGk9MSxvPWUuZ2V0TGluZUNvdW50KCk7aTw9bztpKyspe2NvbnN0IG89ZS5nZXRMaW5lQ29udGVudChpKSxhPW8ubGVuZ3RoO2xldCBzPTAsYz0wLGw9MCx1PTEsaD0hMSxmPSExLGQ9ITEsbT0hMTtmb3IoO3M8YTspe2xldCBlPSExO2NvbnN0IGE9by5jaGFyQ29kZUF0KHMpO2lmKDEzPT09dSl7bGV0IHQ7c3dpdGNoKGEpe2Nhc2UgNDA6aD0hMCx0PTA7YnJlYWs7Y2FzZSA0MTp0PWg/MDoxO2JyZWFrO2Nhc2UgOTE6ZD0hMCxmPSEwLHQ9MDticmVhaztjYXNlIDkzOmQ9ITEsdD1mPzA6MTticmVhaztjYXNlIDEyMzptPSEwLHQ9MDticmVhaztjYXNlIDEyNTp0PW0/MDoxO2JyZWFrO2Nhc2UgMzk6dD0zOT09PWw/MTowO2JyZWFrO2Nhc2UgMzQ6dD0zND09PWw/MTowO2JyZWFrO2Nhc2UgOTY6dD05Nj09PWw/MTowO2JyZWFrO2Nhc2UgNDI6dD00Mj09PWw/MTowO2JyZWFrO2Nhc2UgMTI0OnQ9MTI0PT09bD8xOjA7YnJlYWs7Y2FzZSAzMjp0PWQ/MDoxO2JyZWFrO2RlZmF1bHQ6dD1uLmdldChhKX0xPT09dCYmKHIucHVzaChBdC5fY3JlYXRlTGluayhuLG8saSxjLHMpKSxlPSEwKX1lbHNlIGlmKDEyPT09dSl7bGV0IHQ7OTE9PT1hPyhmPSEwLHQ9MCk6dD1uLmdldChhKSwxPT09dD9lPSEwOnU9MTN9ZWxzZSB1PXQubmV4dFN0YXRlKHUsYSksMD09PXUmJihlPSEwKTtlJiYodT0xLGg9ITEsZj0hMSxtPSExLGM9cysxLGw9YSkscysrfTEzPT09dSYmci5wdXNoKEF0Ll9jcmVhdGVMaW5rKG4sbyxpLGMsYSkpfXJldHVybiByfX1jbGFzcyBFdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWYWx1ZVNldD1bWyJ0cnVlIiwiZmFsc2UiXSxbIlRydWUiLCJGYWxzZSJdLFsiUHJpdmF0ZSIsIlB1YmxpYyIsIkZyaWVuZCIsIlJlYWRPbmx5IiwiUGFydGlhbCIsIlByb3RlY3RlZCIsIldyaXRlT25seSJdLFsicHVibGljIiwicHJvdGVjdGVkIiwicHJpdmF0ZSJdXX1uYXZpZ2F0ZVZhbHVlU2V0KGUsdCxuLHIsaSl7aWYoZSYmdCl7Y29uc3Qgbj10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldCh0LGkpO2lmKG4pcmV0dXJue3JhbmdlOmUsdmFsdWU6bn19aWYobiYmcil7Y29uc3QgZT10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldChyLGkpO2lmKGUpcmV0dXJue3JhbmdlOm4sdmFsdWU6ZX19cmV0dXJuIG51bGx9ZG9OYXZpZ2F0ZVZhbHVlU2V0KGUsdCl7Y29uc3Qgbj10aGlzLm51bWJlclJlcGxhY2UoZSx0KTtyZXR1cm4gbnVsbCE9PW4/bjp0aGlzLnRleHRSZXBsYWNlKGUsdCl9bnVtYmVyUmVwbGFjZShlLHQpe2NvbnN0IG49TWF0aC5wb3coMTAsZS5sZW5ndGgtKGUubGFzdEluZGV4T2YoIi4iKSsxKSk7bGV0IHI9TnVtYmVyKGUpO2NvbnN0IGk9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4ocil8fGlzTmFOKGkpfHxyIT09aT9udWxsOjAhPT1yfHx0PyhyPU1hdGguZmxvb3IocipuKSxyKz10P246LW4sU3RyaW5nKHIvbikpOm51bGx9dGV4dFJlcGxhY2UoZSx0KXtyZXR1cm4gdGhpcy52YWx1ZVNldHNSZXBsYWNlKHRoaXMuX2RlZmF1bHRWYWx1ZVNldCxlLHQpfXZhbHVlU2V0c1JlcGxhY2UoZSx0LG4pe2xldCByPW51bGw7Zm9yKGxldCBpPTAsbz1lLmxlbmd0aDtudWxsPT09ciYmaTxvO2krKylyPXRoaXMudmFsdWVTZXRSZXBsYWNlKGVbaV0sdCxuKTtyZXR1cm4gcn12YWx1ZVNldFJlcGxhY2UoZSx0LG4pe2xldCByPWUuaW5kZXhPZih0KTtyZXR1cm4gcj49MD8ocis9bj8xOi0xLHI8MD9yPWUubGVuZ3RoLTE6ciU9ZS5sZW5ndGgsZVtyXSk6bnVsbH19RXQuSU5TVEFOQ0U9bmV3IEV0O2NvbnN0IHh0PU9iamVjdC5mcmVlemUoKGZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1zZXRUaW1lb3V0KGUuYmluZCh0KSwwKTtyZXR1cm57ZGlzcG9zZSgpe2NsZWFyVGltZW91dChuKX19fSkpO3ZhciBOdDshZnVuY3Rpb24oZSl7ZS5pc0NhbmNlbGxhdGlvblRva2VuPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZS5Ob25lfHx0PT09ZS5DYW5jZWxsZWR8fCh0IGluc3RhbmNlb2Yga3R8fCEoIXR8fCJvYmplY3QiIT10eXBlb2YgdCkmJigiYm9vbGVhbiI9PXR5cGVvZiB0LmlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCkpfSxlLk5vbmU9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITEsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6Ri5Ob25lfSksZS5DYW5jZWxsZWQ9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITAsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6eHR9KX0oTnR8fChOdD17fSkpO2NsYXNzIGt0e2NvbnN0cnVjdG9yKCl7dGhpcy5faXNDYW5jZWxsZWQ9ITEsdGhpcy5fZW1pdHRlcj1udWxsfWNhbmNlbCgpe3RoaXMuX2lzQ2FuY2VsbGVkfHwodGhpcy5faXNDYW5jZWxsZWQ9ITAsdGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZmlyZSh2b2lkIDApLHRoaXMuZGlzcG9zZSgpKSl9Z2V0IGlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkfWdldCBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZD94dDoodGhpcy5fZW1pdHRlcnx8KHRoaXMuX2VtaXR0ZXI9bmV3IEIpLHRoaXMuX2VtaXR0ZXIuZXZlbnQpfWRpc3Bvc2UoKXt0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5kaXNwb3NlKCksdGhpcy5fZW1pdHRlcj1udWxsKX19Y2xhc3MgTHR7Y29uc3RydWN0b3IoZSl7dGhpcy5fdG9rZW49dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj1lJiZlLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKHRoaXMuY2FuY2VsLHRoaXMpfWdldCB0b2tlbigpe3JldHVybiB0aGlzLl90b2tlbnx8KHRoaXMuX3Rva2VuPW5ldyBrdCksdGhpcy5fdG9rZW59Y2FuY2VsKCl7dGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBrdCYmdGhpcy5fdG9rZW4uY2FuY2VsKCk6dGhpcy5fdG9rZW49TnQuQ2FuY2VsbGVkfWRpc3Bvc2UoZT0hMSl7ZSYmdGhpcy5jYW5jZWwoKSx0aGlzLl9wYXJlbnRMaXN0ZW5lciYmdGhpcy5fcGFyZW50TGlzdGVuZXIuZGlzcG9zZSgpLHRoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2Yga3QmJnRoaXMuX3Rva2VuLmRpc3Bvc2UoKTp0aGlzLl90b2tlbj1OdC5Ob25lfX1jbGFzcyBUdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2tleUNvZGVUb1N0cj1bXSx0aGlzLl9zdHJUb0tleUNvZGU9T2JqZWN0LmNyZWF0ZShudWxsKX1kZWZpbmUoZSx0KXt0aGlzLl9rZXlDb2RlVG9TdHJbZV09dCx0aGlzLl9zdHJUb0tleUNvZGVbdC50b0xvd2VyQ2FzZSgpXT1lfWtleUNvZGVUb1N0cihlKXtyZXR1cm4gdGhpcy5fa2V5Q29kZVRvU3RyW2VdfXN0clRvS2V5Q29kZShlKXtyZXR1cm4gdGhpcy5fc3RyVG9LZXlDb2RlW2UudG9Mb3dlckNhc2UoKV18fDB9fWNvbnN0IE90PW5ldyBUdCxJdD1uZXcgVHQsTXQ9bmV3IFR0LFB0PW5ldyBBcnJheSgyMzApLFJ0PU9iamVjdC5jcmVhdGUobnVsbCksVnQ9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgRnQsRHQ7IWZ1bmN0aW9uKCl7Y29uc3QgZT0iIix0PVtbMCwxLDAsIk5vbmUiLDAsInVua25vd24iLDAsIlZLX1VOS05PV04iLGUsZV0sWzAsMSwxLCJIeXBlciIsMCxlLDAsZSxlLGVdLFswLDEsMiwiU3VwZXIiLDAsZSwwLGUsZSxlXSxbMCwxLDMsIkZuIiwwLGUsMCxlLGUsZV0sWzAsMSw0LCJGbkxvY2siLDAsZSwwLGUsZSxlXSxbMCwxLDUsIlN1c3BlbmQiLDAsZSwwLGUsZSxlXSxbMCwxLDYsIlJlc3VtZSIsMCxlLDAsZSxlLGVdLFswLDEsNywiVHVyYm8iLDAsZSwwLGUsZSxlXSxbMCwxLDgsIlNsZWVwIiwwLGUsMCwiVktfU0xFRVAiLGUsZV0sWzAsMSw5LCJXYWtlVXAiLDAsZSwwLGUsZSxlXSxbMzEsMCwxMCwiS2V5QSIsMzEsIkEiLDY1LCJWS19BIixlLGVdLFszMiwwLDExLCJLZXlCIiwzMiwiQiIsNjYsIlZLX0IiLGUsZV0sWzMzLDAsMTIsIktleUMiLDMzLCJDIiw2NywiVktfQyIsZSxlXSxbMzQsMCwxMywiS2V5RCIsMzQsIkQiLDY4LCJWS19EIixlLGVdLFszNSwwLDE0LCJLZXlFIiwzNSwiRSIsNjksIlZLX0UiLGUsZV0sWzM2LDAsMTUsIktleUYiLDM2LCJGIiw3MCwiVktfRiIsZSxlXSxbMzcsMCwxNiwiS2V5RyIsMzcsIkciLDcxLCJWS19HIixlLGVdLFszOCwwLDE3LCJLZXlIIiwzOCwiSCIsNzIsIlZLX0giLGUsZV0sWzM5LDAsMTgsIktleUkiLDM5LCJJIiw3MywiVktfSSIsZSxlXSxbNDAsMCwxOSwiS2V5SiIsNDAsIkoiLDc0LCJWS19KIixlLGVdLFs0MSwwLDIwLCJLZXlLIiw0MSwiSyIsNzUsIlZLX0siLGUsZV0sWzQyLDAsMjEsIktleUwiLDQyLCJMIiw3NiwiVktfTCIsZSxlXSxbNDMsMCwyMiwiS2V5TSIsNDMsIk0iLDc3LCJWS19NIixlLGVdLFs0NCwwLDIzLCJLZXlOIiw0NCwiTiIsNzgsIlZLX04iLGUsZV0sWzQ1LDAsMjQsIktleU8iLDQ1LCJPIiw3OSwiVktfTyIsZSxlXSxbNDYsMCwyNSwiS2V5UCIsNDYsIlAiLDgwLCJWS19QIixlLGVdLFs0NywwLDI2LCJLZXlRIiw0NywiUSIsODEsIlZLX1EiLGUsZV0sWzQ4LDAsMjcsIktleVIiLDQ4LCJSIiw4MiwiVktfUiIsZSxlXSxbNDksMCwyOCwiS2V5UyIsNDksIlMiLDgzLCJWS19TIixlLGVdLFs1MCwwLDI5LCJLZXlUIiw1MCwiVCIsODQsIlZLX1QiLGUsZV0sWzUxLDAsMzAsIktleVUiLDUxLCJVIiw4NSwiVktfVSIsZSxlXSxbNTIsMCwzMSwiS2V5ViIsNTIsIlYiLDg2LCJWS19WIixlLGVdLFs1MywwLDMyLCJLZXlXIiw1MywiVyIsODcsIlZLX1ciLGUsZV0sWzU0LDAsMzMsIktleVgiLDU0LCJYIiw4OCwiVktfWCIsZSxlXSxbNTUsMCwzNCwiS2V5WSIsNTUsIlkiLDg5LCJWS19ZIixlLGVdLFs1NiwwLDM1LCJLZXlaIiw1NiwiWiIsOTAsIlZLX1oiLGUsZV0sWzIyLDAsMzYsIkRpZ2l0MSIsMjIsIjEiLDQ5LCJWS18xIixlLGVdLFsyMywwLDM3LCJEaWdpdDIiLDIzLCIyIiw1MCwiVktfMiIsZSxlXSxbMjQsMCwzOCwiRGlnaXQzIiwyNCwiMyIsNTEsIlZLXzMiLGUsZV0sWzI1LDAsMzksIkRpZ2l0NCIsMjUsIjQiLDUyLCJWS180IixlLGVdLFsyNiwwLDQwLCJEaWdpdDUiLDI2LCI1Iiw1MywiVktfNSIsZSxlXSxbMjcsMCw0MSwiRGlnaXQ2IiwyNywiNiIsNTQsIlZLXzYiLGUsZV0sWzI4LDAsNDIsIkRpZ2l0NyIsMjgsIjciLDU1LCJWS183IixlLGVdLFsyOSwwLDQzLCJEaWdpdDgiLDI5LCI4Iiw1NiwiVktfOCIsZSxlXSxbMzAsMCw0NCwiRGlnaXQ5IiwzMCwiOSIsNTcsIlZLXzkiLGUsZV0sWzIxLDAsNDUsIkRpZ2l0MCIsMjEsIjAiLDQ4LCJWS18wIixlLGVdLFszLDEsNDYsIkVudGVyIiwzLCJFbnRlciIsMTMsIlZLX1JFVFVSTiIsZSxlXSxbOSwxLDQ3LCJFc2NhcGUiLDksIkVzY2FwZSIsMjcsIlZLX0VTQ0FQRSIsZSxlXSxbMSwxLDQ4LCJCYWNrc3BhY2UiLDEsIkJhY2tzcGFjZSIsOCwiVktfQkFDSyIsZSxlXSxbMiwxLDQ5LCJUYWIiLDIsIlRhYiIsOSwiVktfVEFCIixlLGVdLFsxMCwxLDUwLCJTcGFjZSIsMTAsIlNwYWNlIiwzMiwiVktfU1BBQ0UiLGUsZV0sWzgzLDAsNTEsIk1pbnVzIiw4MywiLSIsMTg5LCJWS19PRU1fTUlOVVMiLCItIiwiT0VNX01JTlVTIl0sWzgxLDAsNTIsIkVxdWFsIiw4MSwiPSIsMTg3LCJWS19PRU1fUExVUyIsIj0iLCJPRU1fUExVUyJdLFs4NywwLDUzLCJCcmFja2V0TGVmdCIsODcsIlsiLDIxOSwiVktfT0VNXzQiLCJbIiwiT0VNXzQiXSxbODksMCw1NCwiQnJhY2tldFJpZ2h0Iiw4OSwiXSIsMjIxLCJWS19PRU1fNiIsIl0iLCJPRU1fNiJdLFs4OCwwLDU1LCJCYWNrc2xhc2giLDg4LCJcXCIsMjIwLCJWS19PRU1fNSIsIlxcIiwiT0VNXzUiXSxbMCwwLDU2LCJJbnRsSGFzaCIsMCxlLDAsZSxlLGVdLFs4MCwwLDU3LCJTZW1pY29sb24iLDgwLCI7IiwxODYsIlZLX09FTV8xIiwiOyIsIk9FTV8xIl0sWzkwLDAsNTgsIlF1b3RlIiw5MCwiJyIsMjIyLCJWS19PRU1fNyIsIiciLCJPRU1fNyJdLFs4NiwwLDU5LCJCYWNrcXVvdGUiLDg2LCJgIiwxOTIsIlZLX09FTV8zIiwiYCIsIk9FTV8zIl0sWzgyLDAsNjAsIkNvbW1hIiw4MiwiLCIsMTg4LCJWS19PRU1fQ09NTUEiLCIsIiwiT0VNX0NPTU1BIl0sWzg0LDAsNjEsIlBlcmlvZCIsODQsIi4iLDE5MCwiVktfT0VNX1BFUklPRCIsIi4iLCJPRU1fUEVSSU9EIl0sWzg1LDAsNjIsIlNsYXNoIiw4NSwiLyIsMTkxLCJWS19PRU1fMiIsIi8iLCJPRU1fMiJdLFs4LDEsNjMsIkNhcHNMb2NrIiw4LCJDYXBzTG9jayIsMjAsIlZLX0NBUElUQUwiLGUsZV0sWzU5LDEsNjQsIkYxIiw1OSwiRjEiLDExMiwiVktfRjEiLGUsZV0sWzYwLDEsNjUsIkYyIiw2MCwiRjIiLDExMywiVktfRjIiLGUsZV0sWzYxLDEsNjYsIkYzIiw2MSwiRjMiLDExNCwiVktfRjMiLGUsZV0sWzYyLDEsNjcsIkY0Iiw2MiwiRjQiLDExNSwiVktfRjQiLGUsZV0sWzYzLDEsNjgsIkY1Iiw2MywiRjUiLDExNiwiVktfRjUiLGUsZV0sWzY0LDEsNjksIkY2Iiw2NCwiRjYiLDExNywiVktfRjYiLGUsZV0sWzY1LDEsNzAsIkY3Iiw2NSwiRjciLDExOCwiVktfRjciLGUsZV0sWzY2LDEsNzEsIkY4Iiw2NiwiRjgiLDExOSwiVktfRjgiLGUsZV0sWzY3LDEsNzIsIkY5Iiw2NywiRjkiLDEyMCwiVktfRjkiLGUsZV0sWzY4LDEsNzMsIkYxMCIsNjgsIkYxMCIsMTIxLCJWS19GMTAiLGUsZV0sWzY5LDEsNzQsIkYxMSIsNjksIkYxMSIsMTIyLCJWS19GMTEiLGUsZV0sWzcwLDEsNzUsIkYxMiIsNzAsIkYxMiIsMTIzLCJWS19GMTIiLGUsZV0sWzAsMSw3NiwiUHJpbnRTY3JlZW4iLDAsZSwwLGUsZSxlXSxbNzksMSw3NywiU2Nyb2xsTG9jayIsNzksIlNjcm9sbExvY2siLDE0NSwiVktfU0NST0xMIixlLGVdLFs3LDEsNzgsIlBhdXNlIiw3LCJQYXVzZUJyZWFrIiwxOSwiVktfUEFVU0UiLGUsZV0sWzE5LDEsNzksIkluc2VydCIsMTksIkluc2VydCIsNDUsIlZLX0lOU0VSVCIsZSxlXSxbMTQsMSw4MCwiSG9tZSIsMTQsIkhvbWUiLDM2LCJWS19IT01FIixlLGVdLFsxMSwxLDgxLCJQYWdlVXAiLDExLCJQYWdlVXAiLDMzLCJWS19QUklPUiIsZSxlXSxbMjAsMSw4MiwiRGVsZXRlIiwyMCwiRGVsZXRlIiw0NiwiVktfREVMRVRFIixlLGVdLFsxMywxLDgzLCJFbmQiLDEzLCJFbmQiLDM1LCJWS19FTkQiLGUsZV0sWzEyLDEsODQsIlBhZ2VEb3duIiwxMiwiUGFnZURvd24iLDM0LCJWS19ORVhUIixlLGVdLFsxNywxLDg1LCJBcnJvd1JpZ2h0IiwxNywiUmlnaHRBcnJvdyIsMzksIlZLX1JJR0hUIiwiUmlnaHQiLGVdLFsxNSwxLDg2LCJBcnJvd0xlZnQiLDE1LCJMZWZ0QXJyb3ciLDM3LCJWS19MRUZUIiwiTGVmdCIsZV0sWzE4LDEsODcsIkFycm93RG93biIsMTgsIkRvd25BcnJvdyIsNDAsIlZLX0RPV04iLCJEb3duIixlXSxbMTYsMSw4OCwiQXJyb3dVcCIsMTYsIlVwQXJyb3ciLDM4LCJWS19VUCIsIlVwIixlXSxbNzgsMSw4OSwiTnVtTG9jayIsNzgsIk51bUxvY2siLDE0NCwiVktfTlVNTE9DSyIsZSxlXSxbMTA4LDEsOTAsIk51bXBhZERpdmlkZSIsMTA4LCJOdW1QYWRfRGl2aWRlIiwxMTEsIlZLX0RJVklERSIsZSxlXSxbMTAzLDEsOTEsIk51bXBhZE11bHRpcGx5IiwxMDMsIk51bVBhZF9NdWx0aXBseSIsMTA2LCJWS19NVUxUSVBMWSIsZSxlXSxbMTA2LDEsOTIsIk51bXBhZFN1YnRyYWN0IiwxMDYsIk51bVBhZF9TdWJ0cmFjdCIsMTA5LCJWS19TVUJUUkFDVCIsZSxlXSxbMTA0LDEsOTMsIk51bXBhZEFkZCIsMTA0LCJOdW1QYWRfQWRkIiwxMDcsIlZLX0FERCIsZSxlXSxbMywxLDk0LCJOdW1wYWRFbnRlciIsMyxlLDAsZSxlLGVdLFs5NCwxLDk1LCJOdW1wYWQxIiw5NCwiTnVtUGFkMSIsOTcsIlZLX05VTVBBRDEiLGUsZV0sWzk1LDEsOTYsIk51bXBhZDIiLDk1LCJOdW1QYWQyIiw5OCwiVktfTlVNUEFEMiIsZSxlXSxbOTYsMSw5NywiTnVtcGFkMyIsOTYsIk51bVBhZDMiLDk5LCJWS19OVU1QQUQzIixlLGVdLFs5NywxLDk4LCJOdW1wYWQ0Iiw5NywiTnVtUGFkNCIsMTAwLCJWS19OVU1QQUQ0IixlLGVdLFs5OCwxLDk5LCJOdW1wYWQ1Iiw5OCwiTnVtUGFkNSIsMTAxLCJWS19OVU1QQUQ1IixlLGVdLFs5OSwxLDEwMCwiTnVtcGFkNiIsOTksIk51bVBhZDYiLDEwMiwiVktfTlVNUEFENiIsZSxlXSxbMTAwLDEsMTAxLCJOdW1wYWQ3IiwxMDAsIk51bVBhZDciLDEwMywiVktfTlVNUEFENyIsZSxlXSxbMTAxLDEsMTAyLCJOdW1wYWQ4IiwxMDEsIk51bVBhZDgiLDEwNCwiVktfTlVNUEFEOCIsZSxlXSxbMTAyLDEsMTAzLCJOdW1wYWQ5IiwxMDIsIk51bVBhZDkiLDEwNSwiVktfTlVNUEFEOSIsZSxlXSxbOTMsMSwxMDQsIk51bXBhZDAiLDkzLCJOdW1QYWQwIiw5NiwiVktfTlVNUEFEMCIsZSxlXSxbMTA3LDEsMTA1LCJOdW1wYWREZWNpbWFsIiwxMDcsIk51bVBhZF9EZWNpbWFsIiwxMTAsIlZLX0RFQ0lNQUwiLGUsZV0sWzkyLDAsMTA2LCJJbnRsQmFja3NsYXNoIiw5MiwiT0VNXzEwMiIsMjI2LCJWS19PRU1fMTAyIixlLGVdLFs1OCwxLDEwNywiQ29udGV4dE1lbnUiLDU4LCJDb250ZXh0TWVudSIsOTMsZSxlLGVdLFswLDEsMTA4LCJQb3dlciIsMCxlLDAsZSxlLGVdLFswLDEsMTA5LCJOdW1wYWRFcXVhbCIsMCxlLDAsZSxlLGVdLFs3MSwxLDExMCwiRjEzIiw3MSwiRjEzIiwxMjQsIlZLX0YxMyIsZSxlXSxbNzIsMSwxMTEsIkYxNCIsNzIsIkYxNCIsMTI1LCJWS19GMTQiLGUsZV0sWzczLDEsMTEyLCJGMTUiLDczLCJGMTUiLDEyNiwiVktfRjE1IixlLGVdLFs3NCwxLDExMywiRjE2Iiw3NCwiRjE2IiwxMjcsIlZLX0YxNiIsZSxlXSxbNzUsMSwxMTQsIkYxNyIsNzUsIkYxNyIsMTI4LCJWS19GMTciLGUsZV0sWzc2LDEsMTE1LCJGMTgiLDc2LCJGMTgiLDEyOSwiVktfRjE4IixlLGVdLFs3NywxLDExNiwiRjE5Iiw3NywiRjE5IiwxMzAsIlZLX0YxOSIsZSxlXSxbMCwxLDExNywiRjIwIiwwLGUsMCwiVktfRjIwIixlLGVdLFswLDEsMTE4LCJGMjEiLDAsZSwwLCJWS19GMjEiLGUsZV0sWzAsMSwxMTksIkYyMiIsMCxlLDAsIlZLX0YyMiIsZSxlXSxbMCwxLDEyMCwiRjIzIiwwLGUsMCwiVktfRjIzIixlLGVdLFswLDEsMTIxLCJGMjQiLDAsZSwwLCJWS19GMjQiLGUsZV0sWzAsMSwxMjIsIk9wZW4iLDAsZSwwLGUsZSxlXSxbMCwxLDEyMywiSGVscCIsMCxlLDAsZSxlLGVdLFswLDEsMTI0LCJTZWxlY3QiLDAsZSwwLGUsZSxlXSxbMCwxLDEyNSwiQWdhaW4iLDAsZSwwLGUsZSxlXSxbMCwxLDEyNiwiVW5kbyIsMCxlLDAsZSxlLGVdLFswLDEsMTI3LCJDdXQiLDAsZSwwLGUsZSxlXSxbMCwxLDEyOCwiQ29weSIsMCxlLDAsZSxlLGVdLFswLDEsMTI5LCJQYXN0ZSIsMCxlLDAsZSxlLGVdLFswLDEsMTMwLCJGaW5kIiwwLGUsMCxlLGUsZV0sWzAsMSwxMzEsIkF1ZGlvVm9sdW1lTXV0ZSIsMTEyLCJBdWRpb1ZvbHVtZU11dGUiLDE3MywiVktfVk9MVU1FX01VVEUiLGUsZV0sWzAsMSwxMzIsIkF1ZGlvVm9sdW1lVXAiLDExMywiQXVkaW9Wb2x1bWVVcCIsMTc1LCJWS19WT0xVTUVfVVAiLGUsZV0sWzAsMSwxMzMsIkF1ZGlvVm9sdW1lRG93biIsMTE0LCJBdWRpb1ZvbHVtZURvd24iLDE3NCwiVktfVk9MVU1FX0RPV04iLGUsZV0sWzEwNSwxLDEzNCwiTnVtcGFkQ29tbWEiLDEwNSwiTnVtUGFkX1NlcGFyYXRvciIsMTA4LCJWS19TRVBBUkFUT1IiLGUsZV0sWzExMCwwLDEzNSwiSW50bFJvIiwxMTAsIkFCTlRfQzEiLDE5MywiVktfQUJOVF9DMSIsZSxlXSxbMCwxLDEzNiwiS2FuYU1vZGUiLDAsZSwwLGUsZSxlXSxbMCwwLDEzNywiSW50bFllbiIsMCxlLDAsZSxlLGVdLFswLDEsMTM4LCJDb252ZXJ0IiwwLGUsMCxlLGUsZV0sWzAsMSwxMzksIk5vbkNvbnZlcnQiLDAsZSwwLGUsZSxlXSxbMCwxLDE0MCwiTGFuZzEiLDAsZSwwLGUsZSxlXSxbMCwxLDE0MSwiTGFuZzIiLDAsZSwwLGUsZSxlXSxbMCwxLDE0MiwiTGFuZzMiLDAsZSwwLGUsZSxlXSxbMCwxLDE0MywiTGFuZzQiLDAsZSwwLGUsZSxlXSxbMCwxLDE0NCwiTGFuZzUiLDAsZSwwLGUsZSxlXSxbMCwxLDE0NSwiQWJvcnQiLDAsZSwwLGUsZSxlXSxbMCwxLDE0NiwiUHJvcHMiLDAsZSwwLGUsZSxlXSxbMCwxLDE0NywiTnVtcGFkUGFyZW5MZWZ0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDgsIk51bXBhZFBhcmVuUmlnaHQiLDAsZSwwLGUsZSxlXSxbMCwxLDE0OSwiTnVtcGFkQmFja3NwYWNlIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTAsIk51bXBhZE1lbW9yeVN0b3JlIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTEsIk51bXBhZE1lbW9yeVJlY2FsbCIsMCxlLDAsZSxlLGVdLFswLDEsMTUyLCJOdW1wYWRNZW1vcnlDbGVhciIsMCxlLDAsZSxlLGVdLFswLDEsMTUzLCJOdW1wYWRNZW1vcnlBZGQiLDAsZSwwLGUsZSxlXSxbMCwxLDE1NCwiTnVtcGFkTWVtb3J5U3VidHJhY3QiLDAsZSwwLGUsZSxlXSxbMCwxLDE1NSwiTnVtcGFkQ2xlYXIiLDEyNiwiQ2xlYXIiLDEyLCJWS19DTEVBUiIsZSxlXSxbMCwxLDE1NiwiTnVtcGFkQ2xlYXJFbnRyeSIsMCxlLDAsZSxlLGVdLFs1LDEsMCxlLDUsIkN0cmwiLDE3LCJWS19DT05UUk9MIixlLGVdLFs0LDEsMCxlLDQsIlNoaWZ0IiwxNiwiVktfU0hJRlQiLGUsZV0sWzYsMSwwLGUsNiwiQWx0IiwxOCwiVktfTUVOVSIsZSxlXSxbNTcsMSwwLGUsNTcsIk1ldGEiLDAsIlZLX0NPTU1BTkQiLGUsZV0sWzUsMSwxNTcsIkNvbnRyb2xMZWZ0Iiw1LGUsMCwiVktfTENPTlRST0wiLGUsZV0sWzQsMSwxNTgsIlNoaWZ0TGVmdCIsNCxlLDAsIlZLX0xTSElGVCIsZSxlXSxbNiwxLDE1OSwiQWx0TGVmdCIsNixlLDAsIlZLX0xNRU5VIixlLGVdLFs1NywxLDE2MCwiTWV0YUxlZnQiLDU3LGUsMCwiVktfTFdJTiIsZSxlXSxbNSwxLDE2MSwiQ29udHJvbFJpZ2h0Iiw1LGUsMCwiVktfUkNPTlRST0wiLGUsZV0sWzQsMSwxNjIsIlNoaWZ0UmlnaHQiLDQsZSwwLCJWS19SU0hJRlQiLGUsZV0sWzYsMSwxNjMsIkFsdFJpZ2h0Iiw2LGUsMCwiVktfUk1FTlUiLGUsZV0sWzU3LDEsMTY0LCJNZXRhUmlnaHQiLDU3LGUsMCwiVktfUldJTiIsZSxlXSxbMCwxLDE2NSwiQnJpZ2h0bmVzc1VwIiwwLGUsMCxlLGUsZV0sWzAsMSwxNjYsIkJyaWdodG5lc3NEb3duIiwwLGUsMCxlLGUsZV0sWzAsMSwxNjcsIk1lZGlhUGxheSIsMCxlLDAsZSxlLGVdLFswLDEsMTY4LCJNZWRpYVJlY29yZCIsMCxlLDAsZSxlLGVdLFswLDEsMTY5LCJNZWRpYUZhc3RGb3J3YXJkIiwwLGUsMCxlLGUsZV0sWzAsMSwxNzAsIk1lZGlhUmV3aW5kIiwwLGUsMCxlLGUsZV0sWzExNCwxLDE3MSwiTWVkaWFUcmFja05leHQiLDExOSwiTWVkaWFUcmFja05leHQiLDE3NiwiVktfTUVESUFfTkVYVF9UUkFDSyIsZSxlXSxbMTE1LDEsMTcyLCJNZWRpYVRyYWNrUHJldmlvdXMiLDEyMCwiTWVkaWFUcmFja1ByZXZpb3VzIiwxNzcsIlZLX01FRElBX1BSRVZfVFJBQ0siLGUsZV0sWzExNiwxLDE3MywiTWVkaWFTdG9wIiwxMjEsIk1lZGlhU3RvcCIsMTc4LCJWS19NRURJQV9TVE9QIixlLGVdLFswLDEsMTc0LCJFamVjdCIsMCxlLDAsZSxlLGVdLFsxMTcsMSwxNzUsIk1lZGlhUGxheVBhdXNlIiwxMjIsIk1lZGlhUGxheVBhdXNlIiwxNzksIlZLX01FRElBX1BMQVlfUEFVU0UiLGUsZV0sWzAsMSwxNzYsIk1lZGlhU2VsZWN0IiwxMjMsIkxhdW5jaE1lZGlhUGxheWVyIiwxODEsIlZLX01FRElBX0xBVU5DSF9NRURJQV9TRUxFQ1QiLGUsZV0sWzAsMSwxNzcsIkxhdW5jaE1haWwiLDEyNCwiTGF1bmNoTWFpbCIsMTgwLCJWS19NRURJQV9MQVVOQ0hfTUFJTCIsZSxlXSxbMCwxLDE3OCwiTGF1bmNoQXBwMiIsMTI1LCJMYXVuY2hBcHAyIiwxODMsIlZLX01FRElBX0xBVU5DSF9BUFAyIixlLGVdLFswLDEsMTc5LCJMYXVuY2hBcHAxIiwwLGUsMCwiVktfTUVESUFfTEFVTkNIX0FQUDEiLGUsZV0sWzAsMSwxODAsIlNlbGVjdFRhc2siLDAsZSwwLGUsZSxlXSxbMCwxLDE4MSwiTGF1bmNoU2NyZWVuU2F2ZXIiLDAsZSwwLGUsZSxlXSxbMCwxLDE4MiwiQnJvd3NlclNlYXJjaCIsMTE1LCJCcm93c2VyU2VhcmNoIiwxNzAsIlZLX0JST1dTRVJfU0VBUkNIIixlLGVdLFswLDEsMTgzLCJCcm93c2VySG9tZSIsMTE2LCJCcm93c2VySG9tZSIsMTcyLCJWS19CUk9XU0VSX0hPTUUiLGUsZV0sWzExMiwxLDE4NCwiQnJvd3NlckJhY2siLDExNywiQnJvd3NlckJhY2siLDE2NiwiVktfQlJPV1NFUl9CQUNLIixlLGVdLFsxMTMsMSwxODUsIkJyb3dzZXJGb3J3YXJkIiwxMTgsIkJyb3dzZXJGb3J3YXJkIiwxNjcsIlZLX0JST1dTRVJfRk9SV0FSRCIsZSxlXSxbMCwxLDE4NiwiQnJvd3NlclN0b3AiLDAsZSwwLCJWS19CUk9XU0VSX1NUT1AiLGUsZV0sWzAsMSwxODcsIkJyb3dzZXJSZWZyZXNoIiwwLGUsMCwiVktfQlJPV1NFUl9SRUZSRVNIIixlLGVdLFswLDEsMTg4LCJCcm93c2VyRmF2b3JpdGVzIiwwLGUsMCwiVktfQlJPV1NFUl9GQVZPUklURVMiLGUsZV0sWzAsMSwxODksIlpvb21Ub2dnbGUiLDAsZSwwLGUsZSxlXSxbMCwxLDE5MCwiTWFpbFJlcGx5IiwwLGUsMCxlLGUsZV0sWzAsMSwxOTEsIk1haWxGb3J3YXJkIiwwLGUsMCxlLGUsZV0sWzAsMSwxOTIsIk1haWxTZW5kIiwwLGUsMCxlLGUsZV0sWzEwOSwxLDAsZSwxMDksIktleUluQ29tcG9zaXRpb24iLDIyOSxlLGUsZV0sWzExMSwxLDAsZSwxMTEsIkFCTlRfQzIiLDE5NCwiVktfQUJOVF9DMiIsZSxlXSxbOTEsMSwwLGUsOTEsIk9FTV84IiwyMjMsIlZLX09FTV84IixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19LQU5BIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19IQU5HVUwiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0pVTkpBIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19GSU5BTCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfSEFOSkEiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0tBTkpJIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19DT05WRVJUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19OT05DT05WRVJUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19BQ0NFUFQiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX01PREVDSEFOR0UiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1NFTEVDVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUFJJTlQiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0VYRUNVVEUiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1NOQVBTSE9UIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19IRUxQIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19BUFBTIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19QUk9DRVNTS0VZIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19QQUNLRVQiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0RCRV9TQkNTQ0hBUiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfREJFX0RCQ1NDSEFSIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19BVFROIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19DUlNFTCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfRVhTRUwiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0VSRU9GIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19QTEFZIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19aT09NIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19OT05BTUUiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BBMSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfT0VNX0NMRUFSIixlLGVdXSxuPVtdLHI9W107Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3RbdCxpLG8sYSxzLGMsbCx1LGgsZl09ZTtpZihyW29dfHwocltvXT0hMCxSdFthXT1vLFZ0W2EudG9Mb3dlckNhc2UoKV09byksIW5bc10pe2lmKG5bc109ITAsIWMpdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcgcmVwcmVzZW50YXRpb24gbWlzc2luZyBmb3Iga2V5IGNvZGUgJHtzfSBhcm91bmQgc2NhbiBjb2RlICR7YX1gKTtPdC5kZWZpbmUocyxjKSxJdC5kZWZpbmUocyxofHxjKSxNdC5kZWZpbmUocyxmfHxofHxjKX1sJiYoUHRbbF09cyl9fSgpLGZ1bmN0aW9uKGUpe2UudG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIE90LmtleUNvZGVUb1N0cihlKX0sZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBPdC5zdHJUb0tleUNvZGUoZSl9LGUudG9Vc2VyU2V0dGluZ3NVUz1mdW5jdGlvbihlKXtyZXR1cm4gSXQua2V5Q29kZVRvU3RyKGUpfSxlLnRvVXNlclNldHRpbmdzR2VuZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4gTXQua2V5Q29kZVRvU3RyKGUpfSxlLmZyb21Vc2VyU2V0dGluZ3M9ZnVuY3Rpb24oZSl7cmV0dXJuIEl0LnN0clRvS2V5Q29kZShlKXx8TXQuc3RyVG9LZXlDb2RlKGUpfSxlLnRvRWxlY3Ryb25BY2NlbGVyYXRvcj1mdW5jdGlvbihlKXtpZihlPj05MyYmZTw9MTA4KXJldHVybiBudWxsO3N3aXRjaChlKXtjYXNlIDE2OnJldHVybiJVcCI7Y2FzZSAxODpyZXR1cm4iRG93biI7Y2FzZSAxNTpyZXR1cm4iTGVmdCI7Y2FzZSAxNzpyZXR1cm4iUmlnaHQifXJldHVybiBPdC5rZXlDb2RlVG9TdHIoZSl9fShGdHx8KEZ0PXt9KSk7Y2xhc3MgS3QgZXh0ZW5kcyBldHtjb25zdHJ1Y3RvcihlLHQsbixyKXtzdXBlcihlLHQsbixyKSx0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj1lLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49dCx0aGlzLnBvc2l0aW9uTGluZU51bWJlcj1uLHRoaXMucG9zaXRpb25Db2x1bW49cn10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbisiIC0+ICIrdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIrIiwiK3RoaXMucG9zaXRpb25Db2x1bW4rIl0ifWVxdWFsc1NlbGVjdGlvbihlKXtyZXR1cm4gS3Quc2VsZWN0aW9uc0VxdWFsKHRoaXMsZSl9c3RhdGljIHNlbGVjdGlvbnNFcXVhbChlLHQpe3JldHVybiBlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PXQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyJiZlLnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09dC5zZWxlY3Rpb25TdGFydENvbHVtbiYmZS5wb3NpdGlvbkxpbmVOdW1iZXI9PT10LnBvc2l0aW9uTGluZU51bWJlciYmZS5wb3NpdGlvbkNvbHVtbj09PXQucG9zaXRpb25Db2x1bW59Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dGhpcy5zdGFydExpbmVOdW1iZXImJnRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10aGlzLnN0YXJ0Q29sdW1uPzA6MX1zZXRFbmRQb3NpdGlvbihlLHQpe3JldHVybiAwPT09dGhpcy5nZXREaXJlY3Rpb24oKT9uZXcgS3QodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbixlLHQpOm5ldyBLdChlLHQsdGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbil9Z2V0UG9zaXRpb24oKXtyZXR1cm4gbmV3IFFlKHRoaXMucG9zaXRpb25MaW5lTnVtYmVyLHRoaXMucG9zaXRpb25Db2x1bW4pfWdldFNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIG5ldyBRZSh0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcix0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKX1zZXRTdGFydFBvc2l0aW9uKGUsdCl7cmV0dXJuIDA9PT10aGlzLmdldERpcmVjdGlvbigpP25ldyBLdChlLHQsdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKTpuZXcgS3QodGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uLGUsdCl9c3RhdGljIGZyb21Qb3NpdGlvbnMoZSx0PWUpe3JldHVybiBuZXcgS3QoZS5saW5lTnVtYmVyLGUuY29sdW1uLHQubGluZU51bWJlcix0LmNvbHVtbil9c3RhdGljIGZyb21SYW5nZShlLHQpe3JldHVybiAwPT09dD9uZXcgS3QoZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbixlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4pOm5ldyBLdChlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4sZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbil9c3RhdGljIGxpZnRTZWxlY3Rpb24oZSl7cmV0dXJuIG5ldyBLdChlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcixlLnNlbGVjdGlvblN0YXJ0Q29sdW1uLGUucG9zaXRpb25MaW5lTnVtYmVyLGUucG9zaXRpb25Db2x1bW4pfXN0YXRpYyBzZWxlY3Rpb25zQXJyRXF1YWwoZSx0KXtpZihlJiYhdHx8IWUmJnQpcmV0dXJuITE7aWYoIWUmJiF0KXJldHVybiEwO2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKCF0aGlzLnNlbGVjdGlvbnNFcXVhbChlW25dLHRbbl0pKXJldHVybiExO3JldHVybiEwfXN0YXRpYyBpc0lTZWxlY3Rpb24oZSl7cmV0dXJuIGUmJiJudW1iZXIiPT10eXBlb2YgZS5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5zZWxlY3Rpb25TdGFydENvbHVtbiYmIm51bWJlciI9PXR5cGVvZiBlLnBvc2l0aW9uTGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLnBvc2l0aW9uQ29sdW1ufXN0YXRpYyBjcmVhdGVXaXRoRGlyZWN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIDA9PT1pP25ldyBLdChlLHQsbixyKTpuZXcgS3QobixyLGUsdCl9fWNsYXNzIGp0e2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLmlkPWUsdGhpcy5kZWZpbml0aW9uPXQsdGhpcy5kZXNjcmlwdGlvbj1uLGp0Ll9hbGxDb2RpY29ucy5wdXNoKHRoaXMpfWdldCBjbGFzc05hbWVzKCl7cmV0dXJuImNvZGljb24gY29kaWNvbi0iK3RoaXMuaWR9Z2V0IGNsYXNzTmFtZXNBcnJheSgpe3JldHVyblsiY29kaWNvbiIsImNvZGljb24tIit0aGlzLmlkXX1nZXQgY3NzU2VsZWN0b3IoKXtyZXR1cm4iLmNvZGljb24uY29kaWNvbi0iK3RoaXMuaWR9c3RhdGljIGdldEFsbCgpe3JldHVybiBqdC5fYWxsQ29kaWNvbnN9fWp0Ll9hbGxDb2RpY29ucz1bXSxqdC5hZGQ9bmV3IGp0KCJhZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjAifSksanQucGx1cz1uZXcganQoInBsdXMiLGp0LmFkZC5kZWZpbml0aW9uKSxqdC5naXN0TmV3PW5ldyBqdCgiZ2lzdC1uZXciLGp0LmFkZC5kZWZpbml0aW9uKSxqdC5yZXBvQ3JlYXRlPW5ldyBqdCgicmVwby1jcmVhdGUiLGp0LmFkZC5kZWZpbml0aW9uKSxqdC5saWdodGJ1bGI9bmV3IGp0KCJsaWdodGJ1bGIiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjEifSksanQubGlnaHRCdWxiPW5ldyBqdCgibGlnaHQtYnVsYiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MSJ9KSxqdC5yZXBvPW5ldyBqdCgicmVwbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MiJ9KSxqdC5yZXBvRGVsZXRlPW5ldyBqdCgicmVwby1kZWxldGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjIifSksanQuZ2lzdEZvcms9bmV3IGp0KCJnaXN0LWZvcmsiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjMifSksanQucmVwb0ZvcmtlZD1uZXcganQoInJlcG8tZm9ya2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYTYzIn0pLGp0LmdpdFB1bGxSZXF1ZXN0PW5ldyBqdCgiZ2l0LXB1bGwtcmVxdWVzdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NCJ9KSxqdC5naXRQdWxsUmVxdWVzdEFiYW5kb25lZD1uZXcganQoImdpdC1wdWxsLXJlcXVlc3QtYWJhbmRvbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTY0In0pLGp0LnJlY29yZEtleXM9bmV3IGp0KCJyZWNvcmQta2V5cyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NSJ9KSxqdC5rZXlib2FyZD1uZXcganQoImtleWJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYTY1In0pLGp0LnRhZz1uZXcganQoInRhZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NiJ9KSxqdC50YWdBZGQ9bmV3IGp0KCJ0YWctYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLGp0LnRhZ1JlbW92ZT1uZXcganQoInRhZy1yZW1vdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjYifSksanQucGVyc29uPW5ldyBqdCgicGVyc29uIix7Zm9udENoYXJhY3RlcjoiXFxlYTY3In0pLGp0LnBlcnNvbkZvbGxvdz1uZXcganQoInBlcnNvbi1mb2xsb3ciLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksanQucGVyc29uT3V0bGluZT1uZXcganQoInBlcnNvbi1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYTY3In0pLGp0LnBlcnNvbkZpbGxlZD1uZXcganQoInBlcnNvbi1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksanQuZ2l0QnJhbmNoPW5ldyBqdCgiZ2l0LWJyYW5jaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxqdC5naXRCcmFuY2hDcmVhdGU9bmV3IGp0KCJnaXQtYnJhbmNoLWNyZWF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxqdC5naXRCcmFuY2hEZWxldGU9bmV3IGp0KCJnaXQtYnJhbmNoLWRlbGV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxqdC5zb3VyY2VDb250cm9sPW5ldyBqdCgic291cmNlLWNvbnRyb2wiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksanQubWlycm9yPW5ldyBqdCgibWlycm9yIix7Zm9udENoYXJhY3RlcjoiXFxlYTY5In0pLGp0Lm1pcnJvclB1YmxpYz1uZXcganQoIm1pcnJvci1wdWJsaWMiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjkifSksanQuc3Rhcj1uZXcganQoInN0YXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksanQuc3RhckFkZD1uZXcganQoInN0YXItYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLGp0LnN0YXJEZWxldGU9bmV3IGp0KCJzdGFyLWRlbGV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxqdC5zdGFyRW1wdHk9bmV3IGp0KCJzdGFyLWVtcHR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLGp0LmNvbW1lbnQ9bmV3IGp0KCJjb21tZW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZiIn0pLGp0LmNvbW1lbnRBZGQ9bmV3IGp0KCJjb21tZW50LWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YiJ9KSxqdC5hbGVydD1uZXcganQoImFsZXJ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZjIn0pLGp0Lndhcm5pbmc9bmV3IGp0KCJ3YXJuaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYTZjIn0pLGp0LnNlYXJjaD1uZXcganQoInNlYXJjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZCJ9KSxqdC5zZWFyY2hTYXZlPW5ldyBqdCgic2VhcmNoLXNhdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmQifSksanQubG9nT3V0PW5ldyBqdCgibG9nLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZSJ9KSxqdC5zaWduT3V0PW5ldyBqdCgic2lnbi1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmUifSksanQubG9nSW49bmV3IGp0KCJsb2ctaW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhNmYifSksanQuc2lnbkluPW5ldyBqdCgic2lnbi1pbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZiJ9KSxqdC5leWU9bmV3IGp0KCJleWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzAifSksanQuZXllVW53YXRjaD1uZXcganQoImV5ZS11bndhdGNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTcwIn0pLGp0LmV5ZVdhdGNoPW5ldyBqdCgiZXllLXdhdGNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTcwIn0pLGp0LmNpcmNsZUZpbGxlZD1uZXcganQoImNpcmNsZS1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksanQucHJpbWl0aXZlRG90PW5ldyBqdCgicHJpbWl0aXZlLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxqdC5jbG9zZURpcnR5PW5ldyBqdCgiY2xvc2UtZGlydHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksanQuZGVidWdCcmVha3BvaW50PW5ldyBqdCgiZGVidWctYnJlYWtwb2ludCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnREaXNhYmxlZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksanQuZGVidWdIaW50PW5ldyBqdCgiZGVidWctaGludCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxqdC5wcmltaXRpdmVTcXVhcmU9bmV3IGp0KCJwcmltaXRpdmUtc3F1YXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYTcyIn0pLGp0LmVkaXQ9bmV3IGp0KCJlZGl0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTczIn0pLGp0LnBlbmNpbD1uZXcganQoInBlbmNpbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MyJ9KSxqdC5pbmZvPW5ldyBqdCgiaW5mbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NCJ9KSxqdC5pc3N1ZU9wZW5lZD1uZXcganQoImlzc3VlLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NCJ9KSxqdC5naXN0UHJpdmF0ZT1uZXcganQoImdpc3QtcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxqdC5naXRGb3JrUHJpdmF0ZT1uZXcganQoImdpdC1mb3JrLXByaXZhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksanQubG9jaz1uZXcganQoImxvY2siLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksanQubWlycm9yUHJpdmF0ZT1uZXcganQoIm1pcnJvci1wcml2YXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc1In0pLGp0LmNsb3NlPW5ldyBqdCgiY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzYifSksanQucmVtb3ZlQ2xvc2U9bmV3IGp0KCJyZW1vdmUtY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzYifSksanQueD1uZXcganQoIngiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzYifSksanQucmVwb1N5bmM9bmV3IGp0KCJyZXBvLXN5bmMiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzcifSksanQuc3luYz1uZXcganQoInN5bmMiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzcifSksanQuY2xvbmU9bmV3IGp0KCJjbG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3OCJ9KSxqdC5kZXNrdG9wRG93bmxvYWQ9bmV3IGp0KCJkZXNrdG9wLWRvd25sb2FkIix7Zm9udENoYXJhY3RlcjoiXFxlYTc4In0pLGp0LmJlYWtlcj1uZXcganQoImJlYWtlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3OSJ9KSxqdC5taWNyb3Njb3BlPW5ldyBqdCgibWljcm9zY29wZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3OSJ9KSxqdC52bT1uZXcganQoInZtIix7Zm9udENoYXJhY3RlcjoiXFxlYTdhIn0pLGp0LmRldmljZURlc2t0b3A9bmV3IGp0KCJkZXZpY2UtZGVza3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YSJ9KSxqdC5maWxlPW5ldyBqdCgiZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YiJ9KSxqdC5maWxlVGV4dD1uZXcganQoImZpbGUtdGV4dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YiJ9KSxqdC5tb3JlPW5ldyBqdCgibW9yZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxqdC5lbGxpcHNpcz1uZXcganQoImVsbGlwc2lzIix7Zm9udENoYXJhY3RlcjoiXFxlYTdjIn0pLGp0LmtlYmFiSG9yaXpvbnRhbD1uZXcganQoImtlYmFiLWhvcml6b250YWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2MifSksanQubWFpbFJlcGx5PW5ldyBqdCgibWFpbC1yZXBseSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZCJ9KSxqdC5yZXBseT1uZXcganQoInJlcGx5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdkIn0pLGp0Lm9yZ2FuaXphdGlvbj1uZXcganQoIm9yZ2FuaXphdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZSJ9KSxqdC5vcmdhbml6YXRpb25GaWxsZWQ9bmV3IGp0KCJvcmdhbml6YXRpb24tZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLGp0Lm9yZ2FuaXphdGlvbk91dGxpbmU9bmV3IGp0KCJvcmdhbml6YXRpb24tb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZSJ9KSxqdC5uZXdGaWxlPW5ldyBqdCgibmV3LWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2YifSksanQuZmlsZUFkZD1uZXcganQoImZpbGUtYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTdmIn0pLGp0Lm5ld0ZvbGRlcj1uZXcganQoIm5ldy1mb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODAifSksanQuZmlsZURpcmVjdG9yeUNyZWF0ZT1uZXcganQoImZpbGUtZGlyZWN0b3J5LWNyZWF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MCJ9KSxqdC50cmFzaD1uZXcganQoInRyYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTgxIn0pLGp0LnRyYXNoY2FuPW5ldyBqdCgidHJhc2hjYW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhODEifSksanQuaGlzdG9yeT1uZXcganQoImhpc3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhODIifSksanQuY2xvY2s9bmV3IGp0KCJjbG9jayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MiJ9KSxqdC5mb2xkZXI9bmV3IGp0KCJmb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksanQuZmlsZURpcmVjdG9yeT1uZXcganQoImZpbGUtZGlyZWN0b3J5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTgzIn0pLGp0LnN5bWJvbEZvbGRlcj1uZXcganQoInN5bWJvbC1mb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksanQubG9nb0dpdGh1Yj1uZXcganQoImxvZ28tZ2l0aHViIix7Zm9udENoYXJhY3RlcjoiXFxlYTg0In0pLGp0Lm1hcmtHaXRodWI9bmV3IGp0KCJtYXJrLWdpdGh1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NCJ9KSxqdC5naXRodWI9bmV3IGp0KCJnaXRodWIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODQifSksanQudGVybWluYWw9bmV3IGp0KCJ0ZXJtaW5hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NSJ9KSxqdC5jb25zb2xlPW5ldyBqdCgiY29uc29sZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NSJ9KSxqdC5yZXBsPW5ldyBqdCgicmVwbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NSJ9KSxqdC56YXA9bmV3IGp0KCJ6YXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhODYifSksanQuc3ltYm9sRXZlbnQ9bmV3IGp0KCJzeW1ib2wtZXZlbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhODYifSksanQuZXJyb3I9bmV3IGp0KCJlcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NyJ9KSxqdC5zdG9wPW5ldyBqdCgic3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NyJ9KSxqdC52YXJpYWJsZT1uZXcganQoInZhcmlhYmxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg4In0pLGp0LnN5bWJvbFZhcmlhYmxlPW5ldyBqdCgic3ltYm9sLXZhcmlhYmxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg4In0pLGp0LmFycmF5PW5ldyBqdCgiYXJyYXkiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGEifSksanQuc3ltYm9sQXJyYXk9bmV3IGp0KCJzeW1ib2wtYXJyYXkiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGEifSksanQuc3ltYm9sTW9kdWxlPW5ldyBqdCgic3ltYm9sLW1vZHVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxqdC5zeW1ib2xQYWNrYWdlPW5ldyBqdCgic3ltYm9sLXBhY2thZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGIifSksanQuc3ltYm9sTmFtZXNwYWNlPW5ldyBqdCgic3ltYm9sLW5hbWVzcGFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxqdC5zeW1ib2xPYmplY3Q9bmV3IGp0KCJzeW1ib2wtb2JqZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLGp0LnN5bWJvbE1ldGhvZD1uZXcganQoInN5bWJvbC1tZXRob2QiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGMifSksanQuc3ltYm9sRnVuY3Rpb249bmV3IGp0KCJzeW1ib2wtZnVuY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhOGMifSksanQuc3ltYm9sQ29uc3RydWN0b3I9bmV3IGp0KCJzeW1ib2wtY29uc3RydWN0b3IiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGMifSksanQuc3ltYm9sQm9vbGVhbj1uZXcganQoInN5bWJvbC1ib29sZWFuIix7Zm9udENoYXJhY3RlcjoiXFxlYThmIn0pLGp0LnN5bWJvbE51bGw9bmV3IGp0KCJzeW1ib2wtbnVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4ZiJ9KSxqdC5zeW1ib2xOdW1lcmljPW5ldyBqdCgic3ltYm9sLW51bWVyaWMiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTAifSksanQuc3ltYm9sTnVtYmVyPW5ldyBqdCgic3ltYm9sLW51bWJlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MCJ9KSxqdC5zeW1ib2xTdHJ1Y3R1cmU9bmV3IGp0KCJzeW1ib2wtc3RydWN0dXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYTkxIn0pLGp0LnN5bWJvbFN0cnVjdD1uZXcganQoInN5bWJvbC1zdHJ1Y3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTEifSksanQuc3ltYm9sUGFyYW1ldGVyPW5ldyBqdCgic3ltYm9sLXBhcmFtZXRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MiJ9KSxqdC5zeW1ib2xUeXBlUGFyYW1ldGVyPW5ldyBqdCgic3ltYm9sLXR5cGUtcGFyYW1ldGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTkyIn0pLGp0LnN5bWJvbEtleT1uZXcganQoInN5bWJvbC1rZXkiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTMifSksanQuc3ltYm9sVGV4dD1uZXcganQoInN5bWJvbC10ZXh0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTkzIn0pLGp0LnN5bWJvbFJlZmVyZW5jZT1uZXcganQoInN5bWJvbC1yZWZlcmVuY2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTQifSksanQuZ29Ub0ZpbGU9bmV3IGp0KCJnby10by1maWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk0In0pLGp0LnN5bWJvbEVudW09bmV3IGp0KCJzeW1ib2wtZW51bSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NSJ9KSxqdC5zeW1ib2xWYWx1ZT1uZXcganQoInN5bWJvbC12YWx1ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NSJ9KSxqdC5zeW1ib2xSdWxlcj1uZXcganQoInN5bWJvbC1ydWxlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NiJ9KSxqdC5zeW1ib2xVbml0PW5ldyBqdCgic3ltYm9sLXVuaXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTYifSksanQuYWN0aXZhdGVCcmVha3BvaW50cz1uZXcganQoImFjdGl2YXRlLWJyZWFrcG9pbnRzIix7Zm9udENoYXJhY3RlcjoiXFxlYTk3In0pLGp0LmFyY2hpdmU9bmV3IGp0KCJhcmNoaXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk4In0pLGp0LmFycm93Qm90aD1uZXcganQoImFycm93LWJvdGgiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTkifSksanQuYXJyb3dEb3duPW5ldyBqdCgiYXJyb3ctZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5YSJ9KSxqdC5hcnJvd0xlZnQ9bmV3IGp0KCJhcnJvdy1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTliIn0pLGp0LmFycm93UmlnaHQ9bmV3IGp0KCJhcnJvdy1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5YyJ9KSxqdC5hcnJvd1NtYWxsRG93bj1uZXcganQoImFycm93LXNtYWxsLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhOWQifSksanQuYXJyb3dTbWFsbExlZnQ9bmV3IGp0KCJhcnJvdy1zbWFsbC1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTllIn0pLGp0LmFycm93U21hbGxSaWdodD1uZXcganQoImFycm93LXNtYWxsLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTlmIn0pLGp0LmFycm93U21hbGxVcD1uZXcganQoImFycm93LXNtYWxsLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWEwIn0pLGp0LmFycm93VXA9bmV3IGp0KCJhcnJvdy11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhMSJ9KSxqdC5iZWxsPW5ldyBqdCgiYmVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhMiJ9KSxqdC5ib2xkPW5ldyBqdCgiYm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhMyJ9KSxqdC5ib29rPW5ldyBqdCgiYm9vayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNCJ9KSxqdC5ib29rbWFyaz1uZXcganQoImJvb2ttYXJrIix7Zm9udENoYXJhY3RlcjoiXFxlYWE1In0pLGp0LmRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsVW52ZXJpZmllZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtdW52ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNiJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTcifSksanQuZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxEaXNhYmxlZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTcifSksanQuZGVidWdCcmVha3BvaW50RGF0YVVudmVyaWZpZWQ9bmV3IGp0KCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtdW52ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhOCJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnREYXRhPW5ldyBqdCgiZGVidWctYnJlYWtwb2ludC1kYXRhIix7Zm9udENoYXJhY3RlcjoiXFxlYWE5In0pLGp0LmRlYnVnQnJlYWtwb2ludERhdGFEaXNhYmxlZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhOSJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnRMb2dVbnZlcmlmaWVkPW5ldyBqdCgiZGVidWctYnJlYWtwb2ludC1sb2ctdW52ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYSJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnRMb2c9bmV3IGp0KCJkZWJ1Zy1icmVha3BvaW50LWxvZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYiJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnRMb2dEaXNhYmxlZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtbG9nLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWFiIn0pLGp0LmJyaWVmY2FzZT1uZXcganQoImJyaWVmY2FzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYyJ9KSxqdC5icm9hZGNhc3Q9bmV3IGp0KCJicm9hZGNhc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWQifSksanQuYnJvd3Nlcj1uZXcganQoImJyb3dzZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWUifSksanQuYnVnPW5ldyBqdCgiYnVnIix7Zm9udENoYXJhY3RlcjoiXFxlYWFmIn0pLGp0LmNhbGVuZGFyPW5ldyBqdCgiY2FsZW5kYXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjAifSksanQuY2FzZVNlbnNpdGl2ZT1uZXcganQoImNhc2Utc2Vuc2l0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYWIxIn0pLGp0LmNoZWNrPW5ldyBqdCgiY2hlY2siLHtmb250Q2hhcmFjdGVyOiJcXGVhYjIifSksanQuY2hlY2tsaXN0PW5ldyBqdCgiY2hlY2tsaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWIzIn0pLGp0LmNoZXZyb25Eb3duPW5ldyBqdCgiY2hldnJvbi1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYWI0In0pLGp0LmRyb3BEb3duQnV0dG9uPW5ldyBqdCgiZHJvcC1kb3duLWJ1dHRvbiIsanQuY2hldnJvbkRvd24uZGVmaW5pdGlvbiksanQuY2hldnJvbkxlZnQ9bmV3IGp0KCJjaGV2cm9uLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjUifSksanQuY2hldnJvblJpZ2h0PW5ldyBqdCgiY2hldnJvbi1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNiJ9KSxqdC5jaGV2cm9uVXA9bmV3IGp0KCJjaGV2cm9uLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWI3In0pLGp0LmNocm9tZUNsb3NlPW5ldyBqdCgiY2hyb21lLWNsb3NlIix7Zm9udENoYXJhY3RlcjoiXFxlYWI4In0pLGp0LmNocm9tZU1heGltaXplPW5ldyBqdCgiY2hyb21lLW1heGltaXplIix7Zm9udENoYXJhY3RlcjoiXFxlYWI5In0pLGp0LmNocm9tZU1pbmltaXplPW5ldyBqdCgiY2hyb21lLW1pbmltaXplIix7Zm9udENoYXJhY3RlcjoiXFxlYWJhIn0pLGp0LmNocm9tZVJlc3RvcmU9bmV3IGp0KCJjaHJvbWUtcmVzdG9yZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYiJ9KSxqdC5jaXJjbGVPdXRsaW5lPW5ldyBqdCgiY2lyY2xlLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmMifSksanQuZGVidWdCcmVha3BvaW50VW52ZXJpZmllZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtdW52ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYyJ9KSxqdC5jaXJjbGVTbGFzaD1uZXcganQoImNpcmNsZS1zbGFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiZCJ9KSxqdC5jaXJjdWl0Qm9hcmQ9bmV3IGp0KCJjaXJjdWl0LWJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWJlIn0pLGp0LmNsZWFyQWxsPW5ldyBqdCgiY2xlYXItYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWJmIn0pLGp0LmNsaXBweT1uZXcganQoImNsaXBweSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMCJ9KSxqdC5jbG9zZUFsbD1uZXcganQoImNsb3NlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMSJ9KSxqdC5jbG91ZERvd25sb2FkPW5ldyBqdCgiY2xvdWQtZG93bmxvYWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzIifSksanQuY2xvdWRVcGxvYWQ9bmV3IGp0KCJjbG91ZC11cGxvYWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzMifSksanQuY29kZT1uZXcganQoImNvZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzQifSksanQuY29sbGFwc2VBbGw9bmV3IGp0KCJjb2xsYXBzZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzUifSksanQuY29sb3JNb2RlPW5ldyBqdCgiY29sb3ItbW9kZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNiJ9KSxqdC5jb21tZW50RGlzY3Vzc2lvbj1uZXcganQoImNvbW1lbnQtZGlzY3Vzc2lvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNyJ9KSxqdC5jb21wYXJlQ2hhbmdlcz1uZXcganQoImNvbXBhcmUtY2hhbmdlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmZCJ9KSxqdC5jcmVkaXRDYXJkPW5ldyBqdCgiY3JlZGl0LWNhcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzkifSksanQuZGFzaD1uZXcganQoImRhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVhY2MifSksanQuZGFzaGJvYXJkPW5ldyBqdCgiZGFzaGJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWNkIn0pLGp0LmRhdGFiYXNlPW5ldyBqdCgiZGF0YWJhc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhY2UifSksanQuZGVidWdDb250aW51ZT1uZXcganQoImRlYnVnLWNvbnRpbnVlIix7Zm9udENoYXJhY3RlcjoiXFxlYWNmIn0pLGp0LmRlYnVnRGlzY29ubmVjdD1uZXcganQoImRlYnVnLWRpc2Nvbm5lY3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDAifSksanQuZGVidWdQYXVzZT1uZXcganQoImRlYnVnLXBhdXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYWQxIn0pLGp0LmRlYnVnUmVzdGFydD1uZXcganQoImRlYnVnLXJlc3RhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDIifSksanQuZGVidWdTdGFydD1uZXcganQoImRlYnVnLXN0YXJ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWQzIn0pLGp0LmRlYnVnU3RlcEludG89bmV3IGp0KCJkZWJ1Zy1zdGVwLWludG8iLHtmb250Q2hhcmFjdGVyOiJcXGVhZDQifSksanQuZGVidWdTdGVwT3V0PW5ldyBqdCgiZGVidWctc3RlcC1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDUifSksanQuZGVidWdTdGVwT3Zlcj1uZXcganQoImRlYnVnLXN0ZXAtb3ZlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNiJ9KSxqdC5kZWJ1Z1N0b3A9bmV3IGp0KCJkZWJ1Zy1zdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYWQ3In0pLGp0LmRlYnVnPW5ldyBqdCgiZGVidWciLHtmb250Q2hhcmFjdGVyOiJcXGVhZDgifSksanQuZGV2aWNlQ2FtZXJhVmlkZW89bmV3IGp0KCJkZXZpY2UtY2FtZXJhLXZpZGVvIix7Zm9udENoYXJhY3RlcjoiXFxlYWQ5In0pLGp0LmRldmljZUNhbWVyYT1uZXcganQoImRldmljZS1jYW1lcmEiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGEifSksanQuZGV2aWNlTW9iaWxlPW5ldyBqdCgiZGV2aWNlLW1vYmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYiJ9KSxqdC5kaWZmQWRkZWQ9bmV3IGp0KCJkaWZmLWFkZGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWRjIn0pLGp0LmRpZmZJZ25vcmVkPW5ldyBqdCgiZGlmZi1pZ25vcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWRkIn0pLGp0LmRpZmZNb2RpZmllZD1uZXcganQoImRpZmYtbW9kaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGUifSksanQuZGlmZlJlbW92ZWQ9bmV3IGp0KCJkaWZmLXJlbW92ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGYifSksanQuZGlmZlJlbmFtZWQ9bmV3IGp0KCJkaWZmLXJlbmFtZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTAifSksanQuZGlmZj1uZXcganQoImRpZmYiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTEifSksanQuZGlzY2FyZD1uZXcganQoImRpc2NhcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTIifSksanQuZWRpdG9yTGF5b3V0PW5ldyBqdCgiZWRpdG9yLWxheW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMyJ9KSxqdC5lbXB0eVdpbmRvdz1uZXcganQoImVtcHR5LXdpbmRvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlNCJ9KSxqdC5leGNsdWRlPW5ldyBqdCgiZXhjbHVkZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlNSJ9KSxqdC5leHRlbnNpb25zPW5ldyBqdCgiZXh0ZW5zaW9ucyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlNiJ9KSxqdC5leWVDbG9zZWQ9bmV3IGp0KCJleWUtY2xvc2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYWU3In0pLGp0LmZpbGVCaW5hcnk9bmV3IGp0KCJmaWxlLWJpbmFyeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlOCJ9KSxqdC5maWxlQ29kZT1uZXcganQoImZpbGUtY29kZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlOSJ9KSxqdC5maWxlTWVkaWE9bmV3IGp0KCJmaWxlLW1lZGlhIix7Zm9udENoYXJhY3RlcjoiXFxlYWVhIn0pLGp0LmZpbGVQZGY9bmV3IGp0KCJmaWxlLXBkZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlYiJ9KSxqdC5maWxlU3VibW9kdWxlPW5ldyBqdCgiZmlsZS1zdWJtb2R1bGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWMifSksanQuZmlsZVN5bWxpbmtEaXJlY3Rvcnk9bmV3IGp0KCJmaWxlLXN5bWxpbmstZGlyZWN0b3J5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWVkIn0pLGp0LmZpbGVTeW1saW5rRmlsZT1uZXcganQoImZpbGUtc3ltbGluay1maWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYWVlIn0pLGp0LmZpbGVaaXA9bmV3IGp0KCJmaWxlLXppcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlZiJ9KSxqdC5maWxlcz1uZXcganQoImZpbGVzIix7Zm9udENoYXJhY3RlcjoiXFxlYWYwIn0pLGp0LmZpbHRlcj1uZXcganQoImZpbHRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmMSJ9KSxqdC5mbGFtZT1uZXcganQoImZsYW1lIix7Zm9udENoYXJhY3RlcjoiXFxlYWYyIn0pLGp0LmZvbGREb3duPW5ldyBqdCgiZm9sZC1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYWYzIn0pLGp0LmZvbGRVcD1uZXcganQoImZvbGQtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjQifSksanQuZm9sZD1uZXcganQoImZvbGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjUifSksanQuZm9sZGVyQWN0aXZlPW5ldyBqdCgiZm9sZGVyLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNiJ9KSxqdC5mb2xkZXJPcGVuZWQ9bmV3IGp0KCJmb2xkZXItb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWY3In0pLGp0LmdlYXI9bmV3IGp0KCJnZWFyIix7Zm9udENoYXJhY3RlcjoiXFxlYWY4In0pLGp0LmdpZnQ9bmV3IGp0KCJnaWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWY5In0pLGp0Lmdpc3RTZWNyZXQ9bmV3IGp0KCJnaXN0LXNlY3JldCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmYSJ9KSxqdC5naXN0PW5ldyBqdCgiZ2lzdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmYiJ9KSxqdC5naXRDb21taXQ9bmV3IGp0KCJnaXQtY29tbWl0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZjIn0pLGp0LmdpdENvbXBhcmU9bmV3IGp0KCJnaXQtY29tcGFyZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmZCJ9KSxqdC5naXRNZXJnZT1uZXcganQoImdpdC1tZXJnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmZSJ9KSxqdC5naXRodWJBY3Rpb249bmV3IGp0KCJnaXRodWItYWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYWZmIn0pLGp0LmdpdGh1YkFsdD1uZXcganQoImdpdGh1Yi1hbHQiLHtmb250Q2hhcmFjdGVyOiJcXGViMDAifSksanQuZ2xvYmU9bmV3IGp0KCJnbG9iZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMSJ9KSxqdC5ncmFiYmVyPW5ldyBqdCgiZ3JhYmJlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMiJ9KSxqdC5ncmFwaD1uZXcganQoImdyYXBoIix7Zm9udENoYXJhY3RlcjoiXFxlYjAzIn0pLGp0LmdyaXBwZXI9bmV3IGp0KCJncmlwcGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjA0In0pLGp0LmhlYXJ0PW5ldyBqdCgiaGVhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViMDUifSksanQuaG9tZT1uZXcganQoImhvbWUiLHtmb250Q2hhcmFjdGVyOiJcXGViMDYifSksanQuaG9yaXpvbnRhbFJ1bGU9bmV3IGp0KCJob3Jpem9udGFsLXJ1bGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMDcifSksanQuaHVib3Q9bmV3IGp0KCJodWJvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwOCJ9KSxqdC5pbmJveD1uZXcganQoImluYm94Iix7Zm9udENoYXJhY3RlcjoiXFxlYjA5In0pLGp0Lmlzc3VlQ2xvc2VkPW5ldyBqdCgiaXNzdWUtY2xvc2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYmE0In0pLGp0Lmlzc3VlUmVvcGVuZWQ9bmV3IGp0KCJpc3N1ZS1yZW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwYiJ9KSxqdC5pc3N1ZXM9bmV3IGp0KCJpc3N1ZXMiLHtmb250Q2hhcmFjdGVyOiJcXGViMGMifSksanQuaXRhbGljPW5ldyBqdCgiaXRhbGljIix7Zm9udENoYXJhY3RlcjoiXFxlYjBkIn0pLGp0LmplcnNleT1uZXcganQoImplcnNleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwZSJ9KSxqdC5qc29uPW5ldyBqdCgianNvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwZiJ9KSxqdC5rZWJhYlZlcnRpY2FsPW5ldyBqdCgia2ViYWItdmVydGljYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViMTAifSksanQua2V5PW5ldyBqdCgia2V5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjExIn0pLGp0Lmxhdz1uZXcganQoImxhdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMiJ9KSxqdC5saWdodGJ1bGJBdXRvZml4PW5ldyBqdCgibGlnaHRidWxiLWF1dG9maXgiLHtmb250Q2hhcmFjdGVyOiJcXGViMTMifSksanQubGlua0V4dGVybmFsPW5ldyBqdCgibGluay1leHRlcm5hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNCJ9KSxqdC5saW5rPW5ldyBqdCgibGluayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNSJ9KSxqdC5saXN0T3JkZXJlZD1uZXcganQoImxpc3Qtb3JkZXJlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNiJ9KSxqdC5saXN0VW5vcmRlcmVkPW5ldyBqdCgibGlzdC11bm9yZGVyZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMTcifSksanQubGl2ZVNoYXJlPW5ldyBqdCgibGl2ZS1zaGFyZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxOCJ9KSxqdC5sb2FkaW5nPW5ldyBqdCgibG9hZGluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxOSJ9KSxqdC5sb2NhdGlvbj1uZXcganQoImxvY2F0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjFhIn0pLGp0Lm1haWxSZWFkPW5ldyBqdCgibWFpbC1yZWFkIix7Zm9udENoYXJhY3RlcjoiXFxlYjFiIn0pLGp0Lm1haWw9bmV3IGp0KCJtYWlsIix7Zm9udENoYXJhY3RlcjoiXFxlYjFjIn0pLGp0Lm1hcmtkb3duPW5ldyBqdCgibWFya2Rvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWQifSksanQubWVnYXBob25lPW5ldyBqdCgibWVnYXBob25lIix7Zm9udENoYXJhY3RlcjoiXFxlYjFlIn0pLGp0Lm1lbnRpb249bmV3IGp0KCJtZW50aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjFmIn0pLGp0Lm1pbGVzdG9uZT1uZXcganQoIm1pbGVzdG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyMCJ9KSxqdC5tb3J0YXJCb2FyZD1uZXcganQoIm1vcnRhci1ib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyMSJ9KSxqdC5tb3ZlPW5ldyBqdCgibW92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyMiJ9KSxqdC5tdWx0aXBsZVdpbmRvd3M9bmV3IGp0KCJtdWx0aXBsZS13aW5kb3dzIix7Zm9udENoYXJhY3RlcjoiXFxlYjIzIn0pLGp0Lm11dGU9bmV3IGp0KCJtdXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYjI0In0pLGp0Lm5vTmV3bGluZT1uZXcganQoIm5vLW5ld2xpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjUifSksanQubm90ZT1uZXcganQoIm5vdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjYifSksanQub2N0b2ZhY2U9bmV3IGp0KCJvY3RvZmFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNyJ9KSxqdC5vcGVuUHJldmlldz1uZXcganQoIm9wZW4tcHJldmlldyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyOCJ9KSxqdC5wYWNrYWdlXz1uZXcganQoInBhY2thZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMjkifSksanQucGFpbnRjYW49bmV3IGp0KCJwYWludGNhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYSJ9KSxqdC5waW49bmV3IGp0KCJwaW4iLHtmb250Q2hhcmFjdGVyOiJcXGViMmIifSksanQucGxheT1uZXcganQoInBsYXkiLHtmb250Q2hhcmFjdGVyOiJcXGViMmMifSksanQucnVuPW5ldyBqdCgicnVuIix7Zm9udENoYXJhY3RlcjoiXFxlYjJjIn0pLGp0LnBsdWc9bmV3IGp0KCJwbHVnIix7Zm9udENoYXJhY3RlcjoiXFxlYjJkIn0pLGp0LnByZXNlcnZlQ2FzZT1uZXcganQoInByZXNlcnZlLWNhc2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMmUifSksanQucHJldmlldz1uZXcganQoInByZXZpZXciLHtmb250Q2hhcmFjdGVyOiJcXGViMmYifSksanQucHJvamVjdD1uZXcganQoInByb2plY3QiLHtmb250Q2hhcmFjdGVyOiJcXGViMzAifSksanQucHVsc2U9bmV3IGp0KCJwdWxzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMSJ9KSxqdC5xdWVzdGlvbj1uZXcganQoInF1ZXN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjMyIn0pLGp0LnF1b3RlPW5ldyBqdCgicXVvdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMzMifSksanQucmFkaW9Ub3dlcj1uZXcganQoInJhZGlvLXRvd2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYjM0In0pLGp0LnJlYWN0aW9ucz1uZXcganQoInJlYWN0aW9ucyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzNSJ9KSxqdC5yZWZlcmVuY2VzPW5ldyBqdCgicmVmZXJlbmNlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzNiJ9KSxqdC5yZWZyZXNoPW5ldyBqdCgicmVmcmVzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzNyJ9KSxqdC5yZWdleD1uZXcganQoInJlZ2V4Iix7Zm9udENoYXJhY3RlcjoiXFxlYjM4In0pLGp0LnJlbW90ZUV4cGxvcmVyPW5ldyBqdCgicmVtb3RlLWV4cGxvcmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjM5In0pLGp0LnJlbW90ZT1uZXcganQoInJlbW90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzYSJ9KSxqdC5yZW1vdmU9bmV3IGp0KCJyZW1vdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViM2IifSksanQucmVwbGFjZUFsbD1uZXcganQoInJlcGxhY2UtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjNjIn0pLGp0LnJlcGxhY2U9bmV3IGp0KCJyZXBsYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNkIn0pLGp0LnJlcG9DbG9uZT1uZXcganQoInJlcG8tY2xvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViM2UifSksanQucmVwb0ZvcmNlUHVzaD1uZXcganQoInJlcG8tZm9yY2UtcHVzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzZiJ9KSxqdC5yZXBvUHVsbD1uZXcganQoInJlcG8tcHVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MCJ9KSxqdC5yZXBvUHVzaD1uZXcganQoInJlcG8tcHVzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MSJ9KSxqdC5yZXBvcnQ9bmV3IGp0KCJyZXBvcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViNDIifSksanQucmVxdWVzdENoYW5nZXM9bmV3IGp0KCJyZXF1ZXN0LWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGViNDMifSksanQucm9ja2V0PW5ldyBqdCgicm9ja2V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjQ0In0pLGp0LnJvb3RGb2xkZXJPcGVuZWQ9bmV3IGp0KCJyb290LWZvbGRlci1vcGVuZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViNDUifSksanQucm9vdEZvbGRlcj1uZXcganQoInJvb3QtZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ2In0pLGp0LnJzcz1uZXcganQoInJzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NyJ9KSxqdC5ydWJ5PW5ldyBqdCgicnVieSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0OCJ9KSxqdC5zYXZlQWxsPW5ldyBqdCgic2F2ZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNDkifSksanQuc2F2ZUFzPW5ldyBqdCgic2F2ZS1hcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0YSJ9KSxqdC5zYXZlPW5ldyBqdCgic2F2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0YiJ9KSxqdC5zY3JlZW5GdWxsPW5ldyBqdCgic2NyZWVuLWZ1bGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNGMifSksanQuc2NyZWVuTm9ybWFsPW5ldyBqdCgic2NyZWVuLW5vcm1hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0ZCJ9KSxqdC5zZWFyY2hTdG9wPW5ldyBqdCgic2VhcmNoLXN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGViNGUifSksanQuc2VydmVyPW5ldyBqdCgic2VydmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjUwIn0pLGp0LnNldHRpbmdzR2Vhcj1uZXcganQoInNldHRpbmdzLWdlYXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNTEifSksanQuc2V0dGluZ3M9bmV3IGp0KCJzZXR0aW5ncyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MiJ9KSxqdC5zaGllbGQ9bmV3IGp0KCJzaGllbGQiLHtmb250Q2hhcmFjdGVyOiJcXGViNTMifSksanQuc21pbGV5PW5ldyBqdCgic21pbGV5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjU0In0pLGp0LnNvcnRQcmVjZWRlbmNlPW5ldyBqdCgic29ydC1wcmVjZWRlbmNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjU1In0pLGp0LnNwbGl0SG9yaXpvbnRhbD1uZXcganQoInNwbGl0LWhvcml6b250YWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTYifSksanQuc3BsaXRWZXJ0aWNhbD1uZXcganQoInNwbGl0LXZlcnRpY2FsIix7Zm9udENoYXJhY3RlcjoiXFxlYjU3In0pLGp0LnNxdWlycmVsPW5ldyBqdCgic3F1aXJyZWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTgifSksanQuc3RhckZ1bGw9bmV3IGp0KCJzdGFyLWZ1bGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTkifSksanQuc3RhckhhbGY9bmV3IGp0KCJzdGFyLWhhbGYiLHtmb250Q2hhcmFjdGVyOiJcXGViNWEifSksanQuc3ltYm9sQ2xhc3M9bmV3IGp0KCJzeW1ib2wtY2xhc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViNWIifSksanQuc3ltYm9sQ29sb3I9bmV3IGp0KCJzeW1ib2wtY29sb3IiLHtmb250Q2hhcmFjdGVyOiJcXGViNWMifSksanQuc3ltYm9sQ3VzdG9tQ29sb3I9bmV3IGp0KCJzeW1ib2wtY3VzdG9tY29sb3IiLHtmb250Q2hhcmFjdGVyOiJcXGViNWMifSksanQuc3ltYm9sQ29uc3RhbnQ9bmV3IGp0KCJzeW1ib2wtY29uc3RhbnQiLHtmb250Q2hhcmFjdGVyOiJcXGViNWQifSksanQuc3ltYm9sRW51bU1lbWJlcj1uZXcganQoInN5bWJvbC1lbnVtLW1lbWJlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZSJ9KSxqdC5zeW1ib2xGaWVsZD1uZXcganQoInN5bWJvbC1maWVsZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZiJ9KSxqdC5zeW1ib2xGaWxlPW5ldyBqdCgic3ltYm9sLWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGViNjAifSksanQuc3ltYm9sSW50ZXJmYWNlPW5ldyBqdCgic3ltYm9sLWludGVyZmFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MSJ9KSxqdC5zeW1ib2xLZXl3b3JkPW5ldyBqdCgic3ltYm9sLWtleXdvcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViNjIifSksanQuc3ltYm9sTWlzYz1uZXcganQoInN5bWJvbC1taXNjIix7Zm9udENoYXJhY3RlcjoiXFxlYjYzIn0pLGp0LnN5bWJvbE9wZXJhdG9yPW5ldyBqdCgic3ltYm9sLW9wZXJhdG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYjY0In0pLGp0LnN5bWJvbFByb3BlcnR5PW5ldyBqdCgic3ltYm9sLXByb3BlcnR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLGp0LndyZW5jaD1uZXcganQoIndyZW5jaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NSJ9KSxqdC53cmVuY2hTdWJhY3Rpb249bmV3IGp0KCJ3cmVuY2gtc3ViYWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLGp0LnN5bWJvbFNuaXBwZXQ9bmV3IGp0KCJzeW1ib2wtc25pcHBldCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NiJ9KSxqdC50YXNrbGlzdD1uZXcganQoInRhc2tsaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjY3In0pLGp0LnRlbGVzY29wZT1uZXcganQoInRlbGVzY29wZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2OCJ9KSxqdC50ZXh0U2l6ZT1uZXcganQoInRleHQtc2l6ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2OSJ9KSxqdC50aHJlZUJhcnM9bmV3IGp0KCJ0aHJlZS1iYXJzIix7Zm9udENoYXJhY3RlcjoiXFxlYjZhIn0pLGp0LnRodW1ic2Rvd249bmV3IGp0KCJ0aHVtYnNkb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYjZiIn0pLGp0LnRodW1ic3VwPW5ldyBqdCgidGh1bWJzdXAiLHtmb250Q2hhcmFjdGVyOiJcXGViNmMifSksanQudG9vbHM9bmV3IGp0KCJ0b29scyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2ZCJ9KSxqdC50cmlhbmdsZURvd249bmV3IGp0KCJ0cmlhbmdsZS1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYjZlIn0pLGp0LnRyaWFuZ2xlTGVmdD1uZXcganQoInRyaWFuZ2xlLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViNmYifSksanQudHJpYW5nbGVSaWdodD1uZXcganQoInRyaWFuZ2xlLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjcwIn0pLGp0LnRyaWFuZ2xlVXA9bmV3IGp0KCJ0cmlhbmdsZS11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MSJ9KSxqdC50d2l0dGVyPW5ldyBqdCgidHdpdHRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MiJ9KSxqdC51bmZvbGQ9bmV3IGp0KCJ1bmZvbGQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzMifSksanQudW5sb2NrPW5ldyBqdCgidW5sb2NrIix7Zm9udENoYXJhY3RlcjoiXFxlYjc0In0pLGp0LnVubXV0ZT1uZXcganQoInVubXV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3NSJ9KSxqdC51bnZlcmlmaWVkPW5ldyBqdCgidW52ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3NiJ9KSxqdC52ZXJpZmllZD1uZXcganQoInZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjc3In0pLGp0LnZlcnNpb25zPW5ldyBqdCgidmVyc2lvbnMiLHtmb250Q2hhcmFjdGVyOiJcXGViNzgifSksanQudm1BY3RpdmU9bmV3IGp0KCJ2bS1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViNzkifSksanQudm1PdXRsaW5lPW5ldyBqdCgidm0tb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YSJ9KSxqdC52bVJ1bm5pbmc9bmV3IGp0KCJ2bS1ydW5uaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjdiIn0pLGp0LndhdGNoPW5ldyBqdCgid2F0Y2giLHtmb250Q2hhcmFjdGVyOiJcXGViN2MifSksanQud2hpdGVzcGFjZT1uZXcganQoIndoaXRlc3BhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViN2QifSksanQud2hvbGVXb3JkPW5ldyBqdCgid2hvbGUtd29yZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZSJ9KSxqdC53aW5kb3c9bmV3IGp0KCJ3aW5kb3ciLHtmb250Q2hhcmFjdGVyOiJcXGViN2YifSksanQud29yZFdyYXA9bmV3IGp0KCJ3b3JkLXdyYXAiLHtmb250Q2hhcmFjdGVyOiJcXGViODAifSksanQuem9vbUluPW5ldyBqdCgiem9vbS1pbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MSJ9KSxqdC56b29tT3V0PW5ldyBqdCgiem9vbS1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGViODIifSksanQubGlzdEZpbHRlcj1uZXcganQoImxpc3QtZmlsdGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjgzIn0pLGp0Lmxpc3RGbGF0PW5ldyBqdCgibGlzdC1mbGF0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjg0In0pLGp0Lmxpc3RTZWxlY3Rpb249bmV3IGp0KCJsaXN0LXNlbGVjdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NSJ9KSxqdC5zZWxlY3Rpb249bmV3IGp0KCJzZWxlY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViODUifSksanQubGlzdFRyZWU9bmV3IGp0KCJsaXN0LXRyZWUiLHtmb250Q2hhcmFjdGVyOiJcXGViODYifSksanQuZGVidWdCcmVha3BvaW50RnVuY3Rpb25VbnZlcmlmaWVkPW5ldyBqdCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbi11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjg3In0pLGp0LmRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uPW5ldyBqdCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4OCJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbkRpc2FibGVkPW5ldyBqdCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbi1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4OCJ9KSxqdC5kZWJ1Z1N0YWNrZnJhbWVBY3RpdmU9bmV3IGp0KCJkZWJ1Zy1zdGFja2ZyYW1lLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4OSJ9KSxqdC5jaXJjbGVTbWFsbEZpbGxlZD1uZXcganQoImNpcmNsZS1zbWFsbC1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViOGEifSksanQuZGVidWdTdGFja2ZyYW1lRG90PW5ldyBqdCgiZGVidWctc3RhY2tmcmFtZS1kb3QiLGp0LmNpcmNsZVNtYWxsRmlsbGVkLmRlZmluaXRpb24pLGp0LmRlYnVnU3RhY2tmcmFtZT1uZXcganQoImRlYnVnLXN0YWNrZnJhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOGIifSksanQuZGVidWdTdGFja2ZyYW1lRm9jdXNlZD1uZXcganQoImRlYnVnLXN0YWNrZnJhbWUtZm9jdXNlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YiJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnRVbnN1cHBvcnRlZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtdW5zdXBwb3J0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViOGMifSksanQuc3ltYm9sU3RyaW5nPW5ldyBqdCgic3ltYm9sLXN0cmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4ZCJ9KSxqdC5kZWJ1Z1JldmVyc2VDb250aW51ZT1uZXcganQoImRlYnVnLXJldmVyc2UtY29udGludWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOGUifSksanQuZGVidWdTdGVwQmFjaz1uZXcganQoImRlYnVnLXN0ZXAtYmFjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4ZiJ9KSxqdC5kZWJ1Z1Jlc3RhcnRGcmFtZT1uZXcganQoImRlYnVnLXJlc3RhcnQtZnJhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTAifSksanQuY2FsbEluY29taW5nPW5ldyBqdCgiY2FsbC1pbmNvbWluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MiJ9KSxqdC5jYWxsT3V0Z29pbmc9bmV3IGp0KCJjYWxsLW91dGdvaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjkzIn0pLGp0Lm1lbnU9bmV3IGp0KCJtZW51Iix7Zm9udENoYXJhY3RlcjoiXFxlYjk0In0pLGp0LmV4cGFuZEFsbD1uZXcganQoImV4cGFuZC1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViOTUifSksanQuZmVlZGJhY2s9bmV3IGp0KCJmZWVkYmFjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5NiJ9KSxqdC5ncm91cEJ5UmVmVHlwZT1uZXcganQoImdyb3VwLWJ5LXJlZi10eXBlIix7Zm9udENoYXJhY3RlcjoiXFxlYjk3In0pLGp0LnVuZ3JvdXBCeVJlZlR5cGU9bmV3IGp0KCJ1bmdyb3VwLWJ5LXJlZi10eXBlIix7Zm9udENoYXJhY3RlcjoiXFxlYjk4In0pLGp0LmFjY291bnQ9bmV3IGp0KCJhY2NvdW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYjk5In0pLGp0LmJlbGxEb3Q9bmV3IGp0KCJiZWxsLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5YSJ9KSxqdC5kZWJ1Z0NvbnNvbGU9bmV3IGp0KCJkZWJ1Zy1jb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYjliIn0pLGp0LmxpYnJhcnk9bmV3IGp0KCJsaWJyYXJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjljIn0pLGp0Lm91dHB1dD1uZXcganQoIm91dHB1dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5ZCJ9KSxqdC5ydW5BbGw9bmV3IGp0KCJydW4tYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjllIn0pLGp0LnN5bmNJZ25vcmVkPW5ldyBqdCgic3luYy1pZ25vcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjlmIn0pLGp0LnBpbm5lZD1uZXcganQoInBpbm5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMCJ9KSxqdC5naXRodWJJbnZlcnRlZD1uZXcganQoImdpdGh1Yi1pbnZlcnRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMSJ9KSxqdC5kZWJ1Z0FsdD1uZXcganQoImRlYnVnLWFsdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MSJ9KSxqdC5zZXJ2ZXJQcm9jZXNzPW5ldyBqdCgic2VydmVyLXByb2Nlc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViYTIifSksanQuc2VydmVyRW52aXJvbm1lbnQ9bmV3IGp0KCJzZXJ2ZXItZW52aXJvbm1lbnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTMifSksanQucGFzcz1uZXcganQoInBhc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViYTQifSksanQuc3RvcENpcmNsZT1uZXcganQoInN0b3AtY2lyY2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYmE1In0pLGp0LnBsYXlDaXJjbGU9bmV3IGp0KCJwbGF5LWNpcmNsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNiJ9KSxqdC5yZWNvcmQ9bmV3IGp0KCJyZWNvcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTcifSksanQuZGVidWdBbHRTbWFsbD1uZXcganQoImRlYnVnLWFsdC1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhOCJ9KSxqdC52bUNvbm5lY3Q9bmV3IGp0KCJ2bS1jb25uZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmE5In0pLGp0LmNsb3VkPW5ldyBqdCgiY2xvdWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWEifSksanQubWVyZ2U9bmV3IGp0KCJtZXJnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhYiJ9KSxqdC5leHBvcnRJY29uPW5ldyBqdCgiZXhwb3J0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFjIn0pLGp0LmdyYXBoTGVmdD1uZXcganQoImdyYXBoLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWQifSksanQubWFnbmV0PW5ldyBqdCgibWFnbmV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFlIn0pLGp0Lm5vdGVib29rPW5ldyBqdCgibm90ZWJvb2siLHtmb250Q2hhcmFjdGVyOiJcXGViYWYifSksanQucmVkbz1uZXcganQoInJlZG8iLHtmb250Q2hhcmFjdGVyOiJcXGViYjAifSksanQuY2hlY2tBbGw9bmV3IGp0KCJjaGVjay1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViYjEifSksanQucGlubmVkRGlydHk9bmV3IGp0KCJwaW5uZWQtZGlydHkiLHtmb250Q2hhcmFjdGVyOiJcXGViYjIifSksanQucGFzc0ZpbGxlZD1uZXcganQoInBhc3MtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmIzIn0pLGp0LmNpcmNsZUxhcmdlRmlsbGVkPW5ldyBqdCgiY2lyY2xlLWxhcmdlLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNCJ9KSxqdC5jaXJjbGVMYXJnZU91dGxpbmU9bmV3IGp0KCJjaXJjbGUtbGFyZ2Utb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNSJ9KSxqdC5jb21iaW5lPW5ldyBqdCgiY29tYmluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNiJ9KSxqdC5nYXRoZXI9bmV3IGp0KCJnYXRoZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViYjYifSksanQudGFibGU9bmV3IGp0KCJ0YWJsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNyJ9KSxqdC52YXJpYWJsZUdyb3VwPW5ldyBqdCgidmFyaWFibGUtZ3JvdXAiLHtmb250Q2hhcmFjdGVyOiJcXGViYjgifSksanQudHlwZUhpZXJhcmNoeT1uZXcganQoInR5cGUtaGllcmFyY2h5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmI5In0pLGp0LnR5cGVIaWVyYXJjaHlTdWI9bmV3IGp0KCJ0eXBlLWhpZXJhcmNoeS1zdWIiLHtmb250Q2hhcmFjdGVyOiJcXGViYmEifSksanQudHlwZUhpZXJhcmNoeVN1cGVyPW5ldyBqdCgidHlwZS1oaWVyYXJjaHktc3VwZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViYmIifSksanQuZ2l0UHVsbFJlcXVlc3RDcmVhdGU9bmV3IGp0KCJnaXQtcHVsbC1yZXF1ZXN0LWNyZWF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiYyJ9KSxqdC5ydW5BYm92ZT1uZXcganQoInJ1bi1hYm92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZCJ9KSxqdC5ydW5CZWxvdz1uZXcganQoInJ1bi1iZWxvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZSJ9KSxqdC5ub3RlYm9va1RlbXBsYXRlPW5ldyBqdCgibm90ZWJvb2stdGVtcGxhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYmYifSksanQuZGVidWdSZXJ1bj1uZXcganQoImRlYnVnLXJlcnVuIix7Zm9udENoYXJhY3RlcjoiXFxlYmMwIn0pLGp0LndvcmtzcGFjZVRydXN0ZWQ9bmV3IGp0KCJ3b3Jrc3BhY2UtdHJ1c3RlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjMSJ9KSxqdC53b3Jrc3BhY2VVbnRydXN0ZWQ9bmV3IGp0KCJ3b3Jrc3BhY2UtdW50cnVzdGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMyIn0pLGp0LndvcmtzcGFjZVVuc3BlY2lmaWVkPW5ldyBqdCgid29ya3NwYWNlLXVuc3BlY2lmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMzIn0pLGp0LnRlcm1pbmFsQ21kPW5ldyBqdCgidGVybWluYWwtY21kIix7Zm9udENoYXJhY3RlcjoiXFxlYmM0In0pLGp0LnRlcm1pbmFsRGViaWFuPW5ldyBqdCgidGVybWluYWwtZGViaWFuIix7Zm9udENoYXJhY3RlcjoiXFxlYmM1In0pLGp0LnRlcm1pbmFsTGludXg9bmV3IGp0KCJ0ZXJtaW5hbC1saW51eCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNiJ9KSxqdC50ZXJtaW5hbFBvd2Vyc2hlbGw9bmV3IGp0KCJ0ZXJtaW5hbC1wb3dlcnNoZWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmM3In0pLGp0LnRlcm1pbmFsVG11eD1uZXcganQoInRlcm1pbmFsLXRtdXgiLHtmb250Q2hhcmFjdGVyOiJcXGViYzgifSksanQudGVybWluYWxVYnVudHU9bmV3IGp0KCJ0ZXJtaW5hbC11YnVudHUiLHtmb250Q2hhcmFjdGVyOiJcXGViYzkifSksanQudGVybWluYWxCYXNoPW5ldyBqdCgidGVybWluYWwtYmFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjYSJ9KSxqdC5hcnJvd1N3YXA9bmV3IGp0KCJhcnJvdy1zd2FwIix7Zm9udENoYXJhY3RlcjoiXFxlYmNiIn0pLGp0LmNvcHk9bmV3IGp0KCJjb3B5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmNjIn0pLGp0LnBlcnNvbkFkZD1uZXcganQoInBlcnNvbi1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGViY2QifSksanQuZmlsdGVyRmlsbGVkPW5ldyBqdCgiZmlsdGVyLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZSJ9KSxqdC53YW5kPW5ldyBqdCgid2FuZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZiJ9KSxqdC5kZWJ1Z0xpbmVCeUxpbmU9bmV3IGp0KCJkZWJ1Zy1saW5lLWJ5LWxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDAifSksanQuaW5zcGVjdD1uZXcganQoImluc3BlY3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZDEifSksanQubGF5ZXJzPW5ldyBqdCgibGF5ZXJzIix7Zm9udENoYXJhY3RlcjoiXFxlYmQyIn0pLGp0LmxheWVyc0RvdD1uZXcganQoImxheWVycy1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZDMifSksanQubGF5ZXJzQWN0aXZlPW5ldyBqdCgibGF5ZXJzLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNCJ9KSxqdC5jb21wYXNzPW5ldyBqdCgiY29tcGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNSJ9KSxqdC5jb21wYXNzRG90PW5ldyBqdCgiY29tcGFzcy1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZDYifSksanQuY29tcGFzc0FjdGl2ZT1uZXcganQoImNvbXBhc3MtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ3In0pLGp0LmF6dXJlPW5ldyBqdCgiYXp1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDgifSksanQuaXNzdWVEcmFmdD1uZXcganQoImlzc3VlLWRyYWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQ5In0pLGp0LmdpdFB1bGxSZXF1ZXN0Q2xvc2VkPW5ldyBqdCgiZ2l0LXB1bGwtcmVxdWVzdC1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViZGEifSksanQuZ2l0UHVsbFJlcXVlc3REcmFmdD1uZXcganQoImdpdC1wdWxsLXJlcXVlc3QtZHJhZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZGIifSksanQuZGVidWdBbGw9bmV3IGp0KCJkZWJ1Zy1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZGMifSksanQuZGVidWdDb3ZlcmFnZT1uZXcganQoImRlYnVnLWNvdmVyYWdlIix7Zm9udENoYXJhY3RlcjoiXFxlYmRkIn0pLGp0LnJ1bkVycm9ycz1uZXcganQoInJ1bi1lcnJvcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViZGUifSksanQuZm9sZGVyTGlicmFyeT1uZXcganQoImZvbGRlci1saWJyYXJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmRmIn0pLGp0LmRlYnVnQ29udGludWVTbWFsbD1uZXcganQoImRlYnVnLWNvbnRpbnVlLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmUwIn0pLGp0LmJlYWtlclN0b3A9bmV3IGp0KCJiZWFrZXItc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMSJ9KSxqdC5ncmFwaExpbmU9bmV3IGp0KCJncmFwaC1saW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmUyIn0pLGp0LmdyYXBoU2NhdHRlcj1uZXcganQoImdyYXBoLXNjYXR0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZTMifSksanQucGllQ2hhcnQ9bmV3IGp0KCJwaWUtY2hhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZTQifSksanQuYnJhY2tldD1uZXcganQoImJyYWNrZXQiLGp0Lmpzb24uZGVmaW5pdGlvbiksanQuYnJhY2tldERvdD1uZXcganQoImJyYWNrZXQtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmU1In0pLGp0LmJyYWNrZXRFcnJvcj1uZXcganQoImJyYWNrZXQtZXJyb3IiLHtmb250Q2hhcmFjdGVyOiJcXGViZTYifSksanQubG9ja1NtYWxsPW5ldyBqdCgibG9jay1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNyJ9KSxqdC5henVyZURldm9wcz1uZXcganQoImF6dXJlLWRldm9wcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlOCJ9KSxqdC52ZXJpZmllZEZpbGxlZD1uZXcganQoInZlcmlmaWVkLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlOSJ9KSxqdC5uZXdMaW5lPW5ldyBqdCgibmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYSJ9KSxqdC5sYXlvdXQ9bmV3IGp0KCJsYXlvdXQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWIifSksanQubGF5b3V0QWN0aXZpdHliYXJMZWZ0PW5ldyBqdCgibGF5b3V0LWFjdGl2aXR5YmFyLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWMifSksanQubGF5b3V0QWN0aXZpdHliYXJSaWdodD1uZXcganQoImxheW91dC1hY3Rpdml0eWJhci1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZCJ9KSxqdC5sYXlvdXRQYW5lbExlZnQ9bmV3IGp0KCJsYXlvdXQtcGFuZWwtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZSJ9KSxqdC5sYXlvdXRQYW5lbENlbnRlcj1uZXcganQoImxheW91dC1wYW5lbC1jZW50ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZWYifSksanQubGF5b3V0UGFuZWxKdXN0aWZ5PW5ldyBqdCgibGF5b3V0LXBhbmVsLWp1c3RpZnkiLHtmb250Q2hhcmFjdGVyOiJcXGViZjAifSksanQubGF5b3V0UGFuZWxSaWdodD1uZXcganQoImxheW91dC1wYW5lbC1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMSJ9KSxqdC5sYXlvdXRQYW5lbD1uZXcganQoImxheW91dC1wYW5lbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMiJ9KSxqdC5sYXlvdXRTaWRlYmFyTGVmdD1uZXcganQoImxheW91dC1zaWRlYmFyLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjMifSksanQubGF5b3V0U2lkZWJhclJpZ2h0PW5ldyBqdCgibGF5b3V0LXNpZGViYXItcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjQifSksanQubGF5b3V0U3RhdHVzYmFyPW5ldyBqdCgibGF5b3V0LXN0YXR1c2JhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmNSJ9KSxqdC5sYXlvdXRNZW51YmFyPW5ldyBqdCgibGF5b3V0LW1lbnViYXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZjYifSksanQubGF5b3V0Q2VudGVyZWQ9bmV3IGp0KCJsYXlvdXQtY2VudGVyZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjcifSksanQubGF5b3V0U2lkZWJhclJpZ2h0T2ZmPW5ldyBqdCgibGF5b3V0LXNpZGViYXItcmlnaHQtb2ZmIix7Zm9udENoYXJhY3RlcjoiXFxlYzAwIn0pLGp0LmxheW91dFBhbmVsT2ZmPW5ldyBqdCgibGF5b3V0LXBhbmVsLW9mZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwMSJ9KSxqdC5sYXlvdXRTaWRlYmFyTGVmdE9mZj1uZXcganQoImxheW91dC1zaWRlYmFyLWxlZnQtb2ZmIix7Zm9udENoYXJhY3RlcjoiXFxlYzAyIn0pLGp0LnRhcmdldD1uZXcganQoInRhcmdldCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmOCJ9KSxqdC5pbmRlbnQ9bmV3IGp0KCJpbmRlbnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjkifSksanQucmVjb3JkU21hbGw9bmV3IGp0KCJyZWNvcmQtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZmEifSksanQuZXJyb3JTbWFsbD1uZXcganQoImVycm9yLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmZiIn0pLGp0LmFycm93Q2lyY2xlRG93bj1uZXcganQoImFycm93LWNpcmNsZS1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYmZjIn0pLGp0LmFycm93Q2lyY2xlTGVmdD1uZXcganQoImFycm93LWNpcmNsZS1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmZkIn0pLGp0LmFycm93Q2lyY2xlUmlnaHQ9bmV3IGp0KCJhcnJvdy1jaXJjbGUtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViZmUifSksanQuYXJyb3dDaXJjbGVVcD1uZXcganQoImFycm93LWNpcmNsZS11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmZiJ9KSxqdC5oZWFydEZpbGxlZD1uZXcganQoImhlYXJ0LWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwNCJ9KSxqdC5tYXA9bmV3IGp0KCJtYXAiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDUifSksanQubWFwRmlsbGVkPW5ldyBqdCgibWFwLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwNiJ9KSxqdC5jaXJjbGVTbWFsbD1uZXcganQoImNpcmNsZS1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwNyJ9KSxqdC5iZWxsU2xhc2g9bmV3IGp0KCJiZWxsLXNsYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYzA4In0pLGp0LmJlbGxTbGFzaERvdD1uZXcganQoImJlbGwtc2xhc2gtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYzA5In0pLGp0LmNvbW1lbnRVbnJlc29sdmVkPW5ldyBqdCgiY29tbWVudC11bnJlc29sdmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYzBhIn0pLGp0LmdpdFB1bGxSZXF1ZXN0R29Ub0NoYW5nZXM9bmV3IGp0KCJnaXQtcHVsbC1yZXF1ZXN0LWdvLXRvLWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVjMGIifSksanQuZ2l0UHVsbFJlcXVlc3ROZXdDaGFuZ2VzPW5ldyBqdCgiZ2l0LXB1bGwtcmVxdWVzdC1uZXctY2hhbmdlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwYyJ9KSxqdC5kaWFsb2dFcnJvcj1uZXcganQoImRpYWxvZy1lcnJvciIsanQuZXJyb3IuZGVmaW5pdGlvbiksanQuZGlhbG9nV2FybmluZz1uZXcganQoImRpYWxvZy13YXJuaW5nIixqdC53YXJuaW5nLmRlZmluaXRpb24pLGp0LmRpYWxvZ0luZm89bmV3IGp0KCJkaWFsb2ctaW5mbyIsanQuaW5mby5kZWZpbml0aW9uKSxqdC5kaWFsb2dDbG9zZT1uZXcganQoImRpYWxvZy1jbG9zZSIsanQuY2xvc2UuZGVmaW5pdGlvbiksanQudHJlZUl0ZW1FeHBhbmRlZD1uZXcganQoInRyZWUtaXRlbS1leHBhbmRlZCIsanQuY2hldnJvbkRvd24uZGVmaW5pdGlvbiksanQudHJlZUZpbHRlck9uVHlwZU9uPW5ldyBqdCgidHJlZS1maWx0ZXItb24tdHlwZS1vbiIsanQubGlzdEZpbHRlci5kZWZpbml0aW9uKSxqdC50cmVlRmlsdGVyT25UeXBlT2ZmPW5ldyBqdCgidHJlZS1maWx0ZXItb24tdHlwZS1vZmYiLGp0Lmxpc3RTZWxlY3Rpb24uZGVmaW5pdGlvbiksanQudHJlZUZpbHRlckNsZWFyPW5ldyBqdCgidHJlZS1maWx0ZXItY2xlYXIiLGp0LmNsb3NlLmRlZmluaXRpb24pLGp0LnRyZWVJdGVtTG9hZGluZz1uZXcganQoInRyZWUtaXRlbS1sb2FkaW5nIixqdC5sb2FkaW5nLmRlZmluaXRpb24pLGp0Lm1lbnVTZWxlY3Rpb249bmV3IGp0KCJtZW51LXNlbGVjdGlvbiIsanQuY2hlY2suZGVmaW5pdGlvbiksanQubWVudVN1Ym1lbnU9bmV3IGp0KCJtZW51LXN1Ym1lbnUiLGp0LmNoZXZyb25SaWdodC5kZWZpbml0aW9uKSxqdC5tZW51QmFyTW9yZT1uZXcganQoIm1lbnViYXItbW9yZSIsanQubW9yZS5kZWZpbml0aW9uKSxqdC5zY3JvbGxiYXJCdXR0b25MZWZ0PW5ldyBqdCgic2Nyb2xsYmFyLWJ1dHRvbi1sZWZ0IixqdC50cmlhbmdsZUxlZnQuZGVmaW5pdGlvbiksanQuc2Nyb2xsYmFyQnV0dG9uUmlnaHQ9bmV3IGp0KCJzY3JvbGxiYXItYnV0dG9uLXJpZ2h0IixqdC50cmlhbmdsZVJpZ2h0LmRlZmluaXRpb24pLGp0LnNjcm9sbGJhckJ1dHRvblVwPW5ldyBqdCgic2Nyb2xsYmFyLWJ1dHRvbi11cCIsanQudHJpYW5nbGVVcC5kZWZpbml0aW9uKSxqdC5zY3JvbGxiYXJCdXR0b25Eb3duPW5ldyBqdCgic2Nyb2xsYmFyLWJ1dHRvbi1kb3duIixqdC50cmlhbmdsZURvd24uZGVmaW5pdGlvbiksanQudG9vbEJhck1vcmU9bmV3IGp0KCJ0b29sYmFyLW1vcmUiLGp0Lm1vcmUuZGVmaW5pdGlvbiksanQucXVpY2tJbnB1dEJhY2s9bmV3IGp0KCJxdWljay1pbnB1dC1iYWNrIixqdC5hcnJvd0xlZnQuZGVmaW5pdGlvbiksZnVuY3Rpb24oZSl7ZS5pY29uTmFtZVNlZ21lbnQ9IltBLVphLXowLTldKyIsZS5pY29uTmFtZUV4cHJlc3Npb249IltBLVphLXowLTktXSsiLGUuaWNvbk1vZGlmaWVyRXhwcmVzc2lvbj0ifltBLVphLXpdKyIsZS5pY29uTmFtZUNoYXJhY3Rlcj0iW0EtWmEtejAtOX4tXSI7Y29uc3QgdD1uZXcgUmVnRXhwKGBeKCR7ZS5pY29uTmFtZUV4cHJlc3Npb259KSgke2UuaWNvbk1vZGlmaWVyRXhwcmVzc2lvbn0pPyRgKTtmdW5jdGlvbiBuKGUpe2lmKGUgaW5zdGFuY2VvZiBqdClyZXR1cm5bImNvZGljb24iLCJjb2RpY29uLSIrZS5pZF07Y29uc3Qgcj10LmV4ZWMoZS5pZCk7aWYoIXIpcmV0dXJuIG4oanQuZXJyb3IpO2NvbnN0WyxpLG9dPXIsYT1bImNvZGljb24iLCJjb2RpY29uLSIraV07cmV0dXJuIG8mJmEucHVzaCgiY29kaWNvbi1tb2RpZmllci0iK28uc3Vic3RyKDEpKSxhfWUuYXNDbGFzc05hbWVBcnJheT1uLGUuYXNDbGFzc05hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSkuam9pbigiICIpfSxlLmFzQ1NTU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIi4iK24oZSkuam9pbigiLiIpfX0oRHR8fChEdD17fSkpO3ZhciBVdCxCdCxxdCwkdCxXdCxIdCx6dCxHdCxKdCxYdCxadCxZdCxRdCxlbix0bixubixybixvbixhbixzbixjbixsbix1bixobixmbixkbixtbixnbixwbixibix2bix5bixDbix3bixfbixTbixBbixFbix4bixObixrbixMbixUbixPbixJbixNbixQbixSbixWbj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBhKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gcyhlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihhLHMpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX07Y2xhc3MgRm4gZXh0ZW5kcyBme2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcigpLHRoaXMuX3JlZ2lzdHJ5PWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX2ZhY3Rvcnk9bix0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX3Jlc29sdmVQcm9taXNlPW51bGwsdGhpcy5faXNSZXNvbHZlZD0hMX1nZXQgaXNSZXNvbHZlZCgpe3JldHVybiB0aGlzLl9pc1Jlc29sdmVkfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkPSEwLHN1cGVyLmRpc3Bvc2UoKX1yZXNvbHZlKCl7cmV0dXJuIFZuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVQcm9taXNlfHwodGhpcy5fcmVzb2x2ZVByb21pc2U9dGhpcy5fY3JlYXRlKCkpLHRoaXMuX3Jlc29sdmVQcm9taXNlfSkpfV9jcmVhdGUoKXtyZXR1cm4gVm4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIFByb21pc2UucmVzb2x2ZSh0aGlzLl9mYWN0b3J5LmNyZWF0ZVRva2VuaXphdGlvblN1cHBvcnQoKSk7dGhpcy5faXNSZXNvbHZlZD0hMCxlJiYhdGhpcy5faXNEaXNwb3NlZCYmdGhpcy5fcmVnaXN0ZXIodGhpcy5fcmVnaXN0cnkucmVnaXN0ZXIodGhpcy5fbGFuZ3VhZ2VJZCxlKSl9KSl9fWNsYXNzIERue2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLl90b2tlbkJyYW5kPXZvaWQgMCx0aGlzLm9mZnNldD1lLHRoaXMudHlwZT10LHRoaXMubGFuZ3VhZ2U9bn10b1N0cmluZygpe3JldHVybiIoIit0aGlzLm9mZnNldCsiLCAiK3RoaXMudHlwZSsiKSJ9fSFmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxqdC5zeW1ib2xNZXRob2QpLHQuc2V0KDEsanQuc3ltYm9sRnVuY3Rpb24pLHQuc2V0KDIsanQuc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDMsanQuc3ltYm9sRmllbGQpLHQuc2V0KDQsanQuc3ltYm9sVmFyaWFibGUpLHQuc2V0KDUsanQuc3ltYm9sQ2xhc3MpLHQuc2V0KDYsanQuc3ltYm9sU3RydWN0KSx0LnNldCg3LGp0LnN5bWJvbEludGVyZmFjZSksdC5zZXQoOCxqdC5zeW1ib2xNb2R1bGUpLHQuc2V0KDksanQuc3ltYm9sUHJvcGVydHkpLHQuc2V0KDEwLGp0LnN5bWJvbEV2ZW50KSx0LnNldCgxMSxqdC5zeW1ib2xPcGVyYXRvciksdC5zZXQoMTIsanQuc3ltYm9sVW5pdCksdC5zZXQoMTMsanQuc3ltYm9sVmFsdWUpLHQuc2V0KDE1LGp0LnN5bWJvbEVudW0pLHQuc2V0KDE0LGp0LnN5bWJvbENvbnN0YW50KSx0LnNldCgxNSxqdC5zeW1ib2xFbnVtKSx0LnNldCgxNixqdC5zeW1ib2xFbnVtTWVtYmVyKSx0LnNldCgxNyxqdC5zeW1ib2xLZXl3b3JkKSx0LnNldCgyNyxqdC5zeW1ib2xTbmlwcGV0KSx0LnNldCgxOCxqdC5zeW1ib2xUZXh0KSx0LnNldCgxOSxqdC5zeW1ib2xDb2xvciksdC5zZXQoMjAsanQuc3ltYm9sRmlsZSksdC5zZXQoMjEsanQuc3ltYm9sUmVmZXJlbmNlKSx0LnNldCgyMixqdC5zeW1ib2xDdXN0b21Db2xvciksdC5zZXQoMjMsanQuc3ltYm9sRm9sZGVyKSx0LnNldCgyNCxqdC5zeW1ib2xUeXBlUGFyYW1ldGVyKSx0LnNldCgyNSxqdC5hY2NvdW50KSx0LnNldCgyNixqdC5pc3N1ZXMpLGUudG9JY29uPWZ1bmN0aW9uKGUpe2xldCBuPXQuZ2V0KGUpO3JldHVybiBufHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBDb21wbGV0aW9uSXRlbUtpbmQgIitlKSxuPWp0LnN5bWJvbFByb3BlcnR5KSxufTtjb25zdCBuPW5ldyBNYXA7bi5zZXQoIm1ldGhvZCIsMCksbi5zZXQoImZ1bmN0aW9uIiwxKSxuLnNldCgiY29uc3RydWN0b3IiLDIpLG4uc2V0KCJmaWVsZCIsMyksbi5zZXQoInZhcmlhYmxlIiw0KSxuLnNldCgiY2xhc3MiLDUpLG4uc2V0KCJzdHJ1Y3QiLDYpLG4uc2V0KCJpbnRlcmZhY2UiLDcpLG4uc2V0KCJtb2R1bGUiLDgpLG4uc2V0KCJwcm9wZXJ0eSIsOSksbi5zZXQoImV2ZW50IiwxMCksbi5zZXQoIm9wZXJhdG9yIiwxMSksbi5zZXQoInVuaXQiLDEyKSxuLnNldCgidmFsdWUiLDEzKSxuLnNldCgiY29uc3RhbnQiLDE0KSxuLnNldCgiZW51bSIsMTUpLG4uc2V0KCJlbnVtLW1lbWJlciIsMTYpLG4uc2V0KCJlbnVtTWVtYmVyIiwxNiksbi5zZXQoImtleXdvcmQiLDE3KSxuLnNldCgic25pcHBldCIsMjcpLG4uc2V0KCJ0ZXh0IiwxOCksbi5zZXQoImNvbG9yIiwxOSksbi5zZXQoImZpbGUiLDIwKSxuLnNldCgicmVmZXJlbmNlIiwyMSksbi5zZXQoImN1c3RvbWNvbG9yIiwyMiksbi5zZXQoImZvbGRlciIsMjMpLG4uc2V0KCJ0eXBlLXBhcmFtZXRlciIsMjQpLG4uc2V0KCJ0eXBlUGFyYW1ldGVyIiwyNCksbi5zZXQoImFjY291bnQiLDI1KSxuLnNldCgiaXNzdWUiLDI2KSxlLmZyb21TdHJpbmc9ZnVuY3Rpb24oZSx0KXtsZXQgcj1uLmdldChlKTtyZXR1cm4gdm9pZCAwIT09cnx8dHx8KHI9OSkscn19KFV0fHwoVXQ9e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifShCdHx8KEJ0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifShxdHx8KHF0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5SZWFkPTFdPSJSZWFkIixlW2UuV3JpdGU9Ml09IldyaXRlIn0oJHR8fCgkdD17fSkpLGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLGp0LnN5bWJvbEZpbGUpLHQuc2V0KDEsanQuc3ltYm9sTW9kdWxlKSx0LnNldCgyLGp0LnN5bWJvbE5hbWVzcGFjZSksdC5zZXQoMyxqdC5zeW1ib2xQYWNrYWdlKSx0LnNldCg0LGp0LnN5bWJvbENsYXNzKSx0LnNldCg1LGp0LnN5bWJvbE1ldGhvZCksdC5zZXQoNixqdC5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoNyxqdC5zeW1ib2xGaWVsZCksdC5zZXQoOCxqdC5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoOSxqdC5zeW1ib2xFbnVtKSx0LnNldCgxMCxqdC5zeW1ib2xJbnRlcmZhY2UpLHQuc2V0KDExLGp0LnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgxMixqdC5zeW1ib2xWYXJpYWJsZSksdC5zZXQoMTMsanQuc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE0LGp0LnN5bWJvbFN0cmluZyksdC5zZXQoMTUsanQuc3ltYm9sTnVtYmVyKSx0LnNldCgxNixqdC5zeW1ib2xCb29sZWFuKSx0LnNldCgxNyxqdC5zeW1ib2xBcnJheSksdC5zZXQoMTgsanQuc3ltYm9sT2JqZWN0KSx0LnNldCgxOSxqdC5zeW1ib2xLZXkpLHQuc2V0KDIwLGp0LnN5bWJvbE51bGwpLHQuc2V0KDIxLGp0LnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDIyLGp0LnN5bWJvbFN0cnVjdCksdC5zZXQoMjMsanQuc3ltYm9sRXZlbnQpLHQuc2V0KDI0LGp0LnN5bWJvbE9wZXJhdG9yKSx0LnNldCgyNSxqdC5zeW1ib2xUeXBlUGFyYW1ldGVyKSxlLnRvSWNvbj1mdW5jdGlvbihlKXtsZXQgbj10LmdldChlKTtyZXR1cm4gbnx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgU3ltYm9sS2luZCAiK2UpLG49anQuc3ltYm9sUHJvcGVydHkpLG59fShXdHx8KFd0PXt9KSksZnVuY3Rpb24oZSl7ZS5pcz1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwib2JqZWN0IiE9dHlwZW9mIGUpJiYoInN0cmluZyI9PXR5cGVvZiBlLmlkJiYic3RyaW5nIj09dHlwZW9mIGUudGl0bGUpfX0oSHR8fChIdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifSh6dHx8KHp0PXt9KSksbmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXAsdGhpcy5fZmFjdG9yaWVzPW5ldyBNYXAsdGhpcy5fb25EaWRDaGFuZ2U9bmV3IEIsdGhpcy5vbkRpZENoYW5nZT10aGlzLl9vbkRpZENoYW5nZS5ldmVudCx0aGlzLl9jb2xvck1hcD1udWxsfWZpcmUoZSl7dGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczplLGNoYW5nZWRDb2xvck1hcDohMX0pfXJlZ2lzdGVyKGUsdCl7cmV0dXJuIHRoaXMuX21hcC5zZXQoZSx0KSx0aGlzLmZpcmUoW2VdKSx1KCgoKT0+e3RoaXMuX21hcC5nZXQoZSk9PT10JiYodGhpcy5fbWFwLmRlbGV0ZShlKSx0aGlzLmZpcmUoW2VdKSl9KSl9cmVnaXN0ZXJGYWN0b3J5KGUsdCl7dmFyIG47bnVsbD09PShuPXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSkpfHx2b2lkIDA9PT1ufHxuLmRpc3Bvc2UoKTtjb25zdCByPW5ldyBGbih0aGlzLGUsdCk7cmV0dXJuIHRoaXMuX2ZhY3Rvcmllcy5zZXQoZSxyKSx1KCgoKT0+e2NvbnN0IHQ9dGhpcy5fZmFjdG9yaWVzLmdldChlKTt0JiZ0PT09ciYmKHRoaXMuX2ZhY3Rvcmllcy5kZWxldGUoZSksdC5kaXNwb3NlKCkpfSkpfWdldE9yQ3JlYXRlKGUpe3JldHVybiBWbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9dGhpcy5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBuPXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSk7cmV0dXJuIW58fG4uaXNSZXNvbHZlZD9udWxsOih5aWVsZCBuLnJlc29sdmUoKSx0aGlzLmdldChlKSl9KSl9Z2V0KGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUpfHxudWxsfWlzUmVzb2x2ZWQoZSl7aWYodGhpcy5nZXQoZSkpcmV0dXJuITA7Y29uc3QgdD10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3JldHVybiEodCYmIXQuaXNSZXNvbHZlZCl9c2V0Q29sb3JNYXAoZSl7dGhpcy5fY29sb3JNYXA9ZSx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOkFycmF5LmZyb20odGhpcy5fbWFwLmtleXMoKSksY2hhbmdlZENvbG9yTWFwOiEwfSl9Z2V0Q29sb3JNYXAoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXB9Z2V0RGVmYXVsdEJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXAmJnRoaXMuX2NvbG9yTWFwLmxlbmd0aD4yP3RoaXMuX2NvbG9yTWFwWzJdOm51bGx9fSxmdW5jdGlvbihlKXtlW2UuVW5rbm93bj0wXT0iVW5rbm93biIsZVtlLkRpc2FibGVkPTFdPSJEaXNhYmxlZCIsZVtlLkVuYWJsZWQ9Ml09IkVuYWJsZWQifShHdHx8KEd0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuQXV0bz0yXT0iQXV0byJ9KEp0fHwoSnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuS2VlcFdoaXRlc3BhY2U9MV09IktlZXBXaGl0ZXNwYWNlIixlW2UuSW5zZXJ0QXNTbmlwcGV0PTRdPSJJbnNlcnRBc1NuaXBwZXQifShYdHx8KFh0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLk1ldGhvZD0wXT0iTWV0aG9kIixlW2UuRnVuY3Rpb249MV09IkZ1bmN0aW9uIixlW2UuQ29uc3RydWN0b3I9Ml09IkNvbnN0cnVjdG9yIixlW2UuRmllbGQ9M109IkZpZWxkIixlW2UuVmFyaWFibGU9NF09IlZhcmlhYmxlIixlW2UuQ2xhc3M9NV09IkNsYXNzIixlW2UuU3RydWN0PTZdPSJTdHJ1Y3QiLGVbZS5JbnRlcmZhY2U9N109IkludGVyZmFjZSIsZVtlLk1vZHVsZT04XT0iTW9kdWxlIixlW2UuUHJvcGVydHk9OV09IlByb3BlcnR5IixlW2UuRXZlbnQ9MTBdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTExXT0iT3BlcmF0b3IiLGVbZS5Vbml0PTEyXT0iVW5pdCIsZVtlLlZhbHVlPTEzXT0iVmFsdWUiLGVbZS5Db25zdGFudD0xNF09IkNvbnN0YW50IixlW2UuRW51bT0xNV09IkVudW0iLGVbZS5FbnVtTWVtYmVyPTE2XT0iRW51bU1lbWJlciIsZVtlLktleXdvcmQ9MTddPSJLZXl3b3JkIixlW2UuVGV4dD0xOF09IlRleHQiLGVbZS5Db2xvcj0xOV09IkNvbG9yIixlW2UuRmlsZT0yMF09IkZpbGUiLGVbZS5SZWZlcmVuY2U9MjFdPSJSZWZlcmVuY2UiLGVbZS5DdXN0b21jb2xvcj0yMl09IkN1c3RvbWNvbG9yIixlW2UuRm9sZGVyPTIzXT0iRm9sZGVyIixlW2UuVHlwZVBhcmFtZXRlcj0yNF09IlR5cGVQYXJhbWV0ZXIiLGVbZS5Vc2VyPTI1XT0iVXNlciIsZVtlLklzc3VlPTI2XT0iSXNzdWUiLGVbZS5TbmlwcGV0PTI3XT0iU25pcHBldCJ9KFp0fHwoWnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KFl0fHwoWXQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTFdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucz0yXT0iVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucyJ9KFF0fHwoUXQ9e30pKSxmdW5jdGlvbihlKXtlW2UuRVhBQ1Q9MF09IkVYQUNUIixlW2UuQUJPVkU9MV09IkFCT1ZFIixlW2UuQkVMT1c9Ml09IkJFTE9XIn0oZW58fChlbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob3RTZXQ9MF09Ik5vdFNldCIsZVtlLkNvbnRlbnRGbHVzaD0xXT0iQ29udGVudEZsdXNoIixlW2UuUmVjb3ZlckZyb21NYXJrZXJzPTJdPSJSZWNvdmVyRnJvbU1hcmtlcnMiLGVbZS5FeHBsaWNpdD0zXT0iRXhwbGljaXQiLGVbZS5QYXN0ZT00XT0iUGFzdGUiLGVbZS5VbmRvPTVdPSJVbmRvIixlW2UuUmVkbz02XT0iUmVkbyJ9KHRufHwodG49e30pKSxmdW5jdGlvbihlKXtlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KG5ufHwobm49e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifShybnx8KHJuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwPTFdPSJLZWVwIixlW2UuQnJhY2tldHM9Ml09IkJyYWNrZXRzIixlW2UuQWR2YW5jZWQ9M109IkFkdmFuY2VkIixlW2UuRnVsbD00XT0iRnVsbCJ9KG9ufHwob249e30pKSxmdW5jdGlvbihlKXtlW2UuYWNjZXB0U3VnZ2VzdGlvbk9uQ29tbWl0Q2hhcmFjdGVyPTBdPSJhY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXIiLGVbZS5hY2NlcHRTdWdnZXN0aW9uT25FbnRlcj0xXT0iYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXIiLGVbZS5hY2Nlc3NpYmlsaXR5U3VwcG9ydD0yXT0iYWNjZXNzaWJpbGl0eVN1cHBvcnQiLGVbZS5hY2Nlc3NpYmlsaXR5UGFnZVNpemU9M109ImFjY2Vzc2liaWxpdHlQYWdlU2l6ZSIsZVtlLmFyaWFMYWJlbD00XT0iYXJpYUxhYmVsIixlW2UuYXV0b0Nsb3NpbmdCcmFja2V0cz01XT0iYXV0b0Nsb3NpbmdCcmFja2V0cyIsZVtlLmF1dG9DbG9zaW5nRGVsZXRlPTZdPSJhdXRvQ2xvc2luZ0RlbGV0ZSIsZVtlLmF1dG9DbG9zaW5nT3ZlcnR5cGU9N109ImF1dG9DbG9zaW5nT3ZlcnR5cGUiLGVbZS5hdXRvQ2xvc2luZ1F1b3Rlcz04XT0iYXV0b0Nsb3NpbmdRdW90ZXMiLGVbZS5hdXRvSW5kZW50PTldPSJhdXRvSW5kZW50IixlW2UuYXV0b21hdGljTGF5b3V0PTEwXT0iYXV0b21hdGljTGF5b3V0IixlW2UuYXV0b1N1cnJvdW5kPTExXT0iYXV0b1N1cnJvdW5kIixlW2UuYnJhY2tldFBhaXJDb2xvcml6YXRpb249MTJdPSJicmFja2V0UGFpckNvbG9yaXphdGlvbiIsZVtlLmd1aWRlcz0xM109Imd1aWRlcyIsZVtlLmNvZGVMZW5zPTE0XT0iY29kZUxlbnMiLGVbZS5jb2RlTGVuc0ZvbnRGYW1pbHk9MTVdPSJjb2RlTGVuc0ZvbnRGYW1pbHkiLGVbZS5jb2RlTGVuc0ZvbnRTaXplPTE2XT0iY29kZUxlbnNGb250U2l6ZSIsZVtlLmNvbG9yRGVjb3JhdG9ycz0xN109ImNvbG9yRGVjb3JhdG9ycyIsZVtlLmNvbHVtblNlbGVjdGlvbj0xOF09ImNvbHVtblNlbGVjdGlvbiIsZVtlLmNvbW1lbnRzPTE5XT0iY29tbWVudHMiLGVbZS5jb250ZXh0bWVudT0yMF09ImNvbnRleHRtZW51IixlW2UuY29weVdpdGhTeW50YXhIaWdobGlnaHRpbmc9MjFdPSJjb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZyIsZVtlLmN1cnNvckJsaW5raW5nPTIyXT0iY3Vyc29yQmxpbmtpbmciLGVbZS5jdXJzb3JTbW9vdGhDYXJldEFuaW1hdGlvbj0yM109ImN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uIixlW2UuY3Vyc29yU3R5bGU9MjRdPSJjdXJzb3JTdHlsZSIsZVtlLmN1cnNvclN1cnJvdW5kaW5nTGluZXM9MjVdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lc1N0eWxlPTI2XT0iY3Vyc29yU3Vycm91bmRpbmdMaW5lc1N0eWxlIixlW2UuY3Vyc29yV2lkdGg9MjddPSJjdXJzb3JXaWR0aCIsZVtlLmRpc2FibGVMYXllckhpbnRpbmc9MjhdPSJkaXNhYmxlTGF5ZXJIaW50aW5nIixlW2UuZGlzYWJsZU1vbm9zcGFjZU9wdGltaXphdGlvbnM9MjldPSJkaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucyIsZVtlLmRvbVJlYWRPbmx5PTMwXT0iZG9tUmVhZE9ubHkiLGVbZS5kcmFnQW5kRHJvcD0zMV09ImRyYWdBbmREcm9wIixlW2UuZHJvcEludG9FZGl0b3I9MzJdPSJkcm9wSW50b0VkaXRvciIsZVtlLmVtcHR5U2VsZWN0aW9uQ2xpcGJvYXJkPTMzXT0iZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQiLGVbZS5leHBlcmltZW50YWw9MzRdPSJleHBlcmltZW50YWwiLGVbZS5leHRyYUVkaXRvckNsYXNzTmFtZT0zNV09ImV4dHJhRWRpdG9yQ2xhc3NOYW1lIixlW2UuZmFzdFNjcm9sbFNlbnNpdGl2aXR5PTM2XT0iZmFzdFNjcm9sbFNlbnNpdGl2aXR5IixlW2UuZmluZD0zN109ImZpbmQiLGVbZS5maXhlZE92ZXJmbG93V2lkZ2V0cz0zOF09ImZpeGVkT3ZlcmZsb3dXaWRnZXRzIixlW2UuZm9sZGluZz0zOV09ImZvbGRpbmciLGVbZS5mb2xkaW5nU3RyYXRlZ3k9NDBdPSJmb2xkaW5nU3RyYXRlZ3kiLGVbZS5mb2xkaW5nSGlnaGxpZ2h0PTQxXT0iZm9sZGluZ0hpZ2hsaWdodCIsZVtlLmZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0PTQyXT0iZm9sZGluZ0ltcG9ydHNCeURlZmF1bHQiLGVbZS5mb2xkaW5nTWF4aW11bVJlZ2lvbnM9NDNdPSJmb2xkaW5nTWF4aW11bVJlZ2lvbnMiLGVbZS51bmZvbGRPbkNsaWNrQWZ0ZXJFbmRPZkxpbmU9NDRdPSJ1bmZvbGRPbkNsaWNrQWZ0ZXJFbmRPZkxpbmUiLGVbZS5mb250RmFtaWx5PTQ1XT0iZm9udEZhbWlseSIsZVtlLmZvbnRJbmZvPTQ2XT0iZm9udEluZm8iLGVbZS5mb250TGlnYXR1cmVzPTQ3XT0iZm9udExpZ2F0dXJlcyIsZVtlLmZvbnRTaXplPTQ4XT0iZm9udFNpemUiLGVbZS5mb250V2VpZ2h0PTQ5XT0iZm9udFdlaWdodCIsZVtlLmZvcm1hdE9uUGFzdGU9NTBdPSJmb3JtYXRPblBhc3RlIixlW2UuZm9ybWF0T25UeXBlPTUxXT0iZm9ybWF0T25UeXBlIixlW2UuZ2x5cGhNYXJnaW49NTJdPSJnbHlwaE1hcmdpbiIsZVtlLmdvdG9Mb2NhdGlvbj01M109ImdvdG9Mb2NhdGlvbiIsZVtlLmhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXI9NTRdPSJoaWRlQ3Vyc29ySW5PdmVydmlld1J1bGVyIixlW2UuaG92ZXI9NTVdPSJob3ZlciIsZVtlLmluRGlmZkVkaXRvcj01Nl09ImluRGlmZkVkaXRvciIsZVtlLmlubGluZVN1Z2dlc3Q9NTddPSJpbmxpbmVTdWdnZXN0IixlW2UubGV0dGVyU3BhY2luZz01OF09ImxldHRlclNwYWNpbmciLGVbZS5saWdodGJ1bGI9NTldPSJsaWdodGJ1bGIiLGVbZS5saW5lRGVjb3JhdGlvbnNXaWR0aD02MF09ImxpbmVEZWNvcmF0aW9uc1dpZHRoIixlW2UubGluZUhlaWdodD02MV09ImxpbmVIZWlnaHQiLGVbZS5saW5lTnVtYmVycz02Ml09ImxpbmVOdW1iZXJzIixlW2UubGluZU51bWJlcnNNaW5DaGFycz02M109ImxpbmVOdW1iZXJzTWluQ2hhcnMiLGVbZS5saW5rZWRFZGl0aW5nPTY0XT0ibGlua2VkRWRpdGluZyIsZVtlLmxpbmtzPTY1XT0ibGlua3MiLGVbZS5tYXRjaEJyYWNrZXRzPTY2XT0ibWF0Y2hCcmFja2V0cyIsZVtlLm1pbmltYXA9NjddPSJtaW5pbWFwIixlW2UubW91c2VTdHlsZT02OF09Im1vdXNlU3R5bGUiLGVbZS5tb3VzZVdoZWVsU2Nyb2xsU2Vuc2l0aXZpdHk9NjldPSJtb3VzZVdoZWVsU2Nyb2xsU2Vuc2l0aXZpdHkiLGVbZS5tb3VzZVdoZWVsWm9vbT03MF09Im1vdXNlV2hlZWxab29tIixlW2UubXVsdGlDdXJzb3JNZXJnZU92ZXJsYXBwaW5nPTcxXT0ibXVsdGlDdXJzb3JNZXJnZU92ZXJsYXBwaW5nIixlW2UubXVsdGlDdXJzb3JNb2RpZmllcj03Ml09Im11bHRpQ3Vyc29yTW9kaWZpZXIiLGVbZS5tdWx0aUN1cnNvclBhc3RlPTczXT0ibXVsdGlDdXJzb3JQYXN0ZSIsZVtlLm9jY3VycmVuY2VzSGlnaGxpZ2h0PTc0XT0ib2NjdXJyZW5jZXNIaWdobGlnaHQiLGVbZS5vdmVydmlld1J1bGVyQm9yZGVyPTc1XT0ib3ZlcnZpZXdSdWxlckJvcmRlciIsZVtlLm92ZXJ2aWV3UnVsZXJMYW5lcz03Nl09Im92ZXJ2aWV3UnVsZXJMYW5lcyIsZVtlLnBhZGRpbmc9NzddPSJwYWRkaW5nIixlW2UucGFyYW1ldGVySGludHM9NzhdPSJwYXJhbWV0ZXJIaW50cyIsZVtlLnBlZWtXaWRnZXREZWZhdWx0Rm9jdXM9NzldPSJwZWVrV2lkZ2V0RGVmYXVsdEZvY3VzIixlW2UuZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlaz04MF09ImRlZmluaXRpb25MaW5rT3BlbnNJblBlZWsiLGVbZS5xdWlja1N1Z2dlc3Rpb25zPTgxXT0icXVpY2tTdWdnZXN0aW9ucyIsZVtlLnF1aWNrU3VnZ2VzdGlvbnNEZWxheT04Ml09InF1aWNrU3VnZ2VzdGlvbnNEZWxheSIsZVtlLnJlYWRPbmx5PTgzXT0icmVhZE9ubHkiLGVbZS5yZW5hbWVPblR5cGU9ODRdPSJyZW5hbWVPblR5cGUiLGVbZS5yZW5kZXJDb250cm9sQ2hhcmFjdGVycz04NV09InJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzIixlW2UucmVuZGVyRmluYWxOZXdsaW5lPTg2XT0icmVuZGVyRmluYWxOZXdsaW5lIixlW2UucmVuZGVyTGluZUhpZ2hsaWdodD04N109InJlbmRlckxpbmVIaWdobGlnaHQiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cz04OF09InJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzIixlW2UucmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zPTg5XT0icmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zIixlW2UucmVuZGVyV2hpdGVzcGFjZT05MF09InJlbmRlcldoaXRlc3BhY2UiLGVbZS5yZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nPTkxXT0icmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZyIsZVtlLnJvdW5kZWRTZWxlY3Rpb249OTJdPSJyb3VuZGVkU2VsZWN0aW9uIixlW2UucnVsZXJzPTkzXT0icnVsZXJzIixlW2Uuc2Nyb2xsYmFyPTk0XT0ic2Nyb2xsYmFyIixlW2Uuc2Nyb2xsQmV5b25kTGFzdENvbHVtbj05NV09InNjcm9sbEJleW9uZExhc3RDb2x1bW4iLGVbZS5zY3JvbGxCZXlvbmRMYXN0TGluZT05Nl09InNjcm9sbEJleW9uZExhc3RMaW5lIixlW2Uuc2Nyb2xsUHJlZG9taW5hbnRBeGlzPTk3XT0ic2Nyb2xsUHJlZG9taW5hbnRBeGlzIixlW2Uuc2VsZWN0aW9uQ2xpcGJvYXJkPTk4XT0ic2VsZWN0aW9uQ2xpcGJvYXJkIixlW2Uuc2VsZWN0aW9uSGlnaGxpZ2h0PTk5XT0ic2VsZWN0aW9uSGlnaGxpZ2h0IixlW2Uuc2VsZWN0T25MaW5lTnVtYmVycz0xMDBdPSJzZWxlY3RPbkxpbmVOdW1iZXJzIixlW2Uuc2hvd0ZvbGRpbmdDb250cm9scz0xMDFdPSJzaG93Rm9sZGluZ0NvbnRyb2xzIixlW2Uuc2hvd1VudXNlZD0xMDJdPSJzaG93VW51c2VkIixlW2Uuc25pcHBldFN1Z2dlc3Rpb25zPTEwM109InNuaXBwZXRTdWdnZXN0aW9ucyIsZVtlLnNtYXJ0U2VsZWN0PTEwNF09InNtYXJ0U2VsZWN0IixlW2Uuc21vb3RoU2Nyb2xsaW5nPTEwNV09InNtb290aFNjcm9sbGluZyIsZVtlLnN0aWNreVRhYlN0b3BzPTEwNl09InN0aWNreVRhYlN0b3BzIixlW2Uuc3RvcFJlbmRlcmluZ0xpbmVBZnRlcj0xMDddPSJzdG9wUmVuZGVyaW5nTGluZUFmdGVyIixlW2Uuc3VnZ2VzdD0xMDhdPSJzdWdnZXN0IixlW2Uuc3VnZ2VzdEZvbnRTaXplPTEwOV09InN1Z2dlc3RGb250U2l6ZSIsZVtlLnN1Z2dlc3RMaW5lSGVpZ2h0PTExMF09InN1Z2dlc3RMaW5lSGVpZ2h0IixlW2Uuc3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnM9MTExXT0ic3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnMiLGVbZS5zdWdnZXN0U2VsZWN0aW9uPTExMl09InN1Z2dlc3RTZWxlY3Rpb24iLGVbZS50YWJDb21wbGV0aW9uPTExM109InRhYkNvbXBsZXRpb24iLGVbZS50YWJJbmRleD0xMTRdPSJ0YWJJbmRleCIsZVtlLnVuaWNvZGVIaWdobGlnaHRpbmc9MTE1XT0idW5pY29kZUhpZ2hsaWdodGluZyIsZVtlLnVudXN1YWxMaW5lVGVybWluYXRvcnM9MTE2XT0idW51c3VhbExpbmVUZXJtaW5hdG9ycyIsZVtlLnVzZVNoYWRvd0RPTT0xMTddPSJ1c2VTaGFkb3dET00iLGVbZS51c2VUYWJTdG9wcz0xMThdPSJ1c2VUYWJTdG9wcyIsZVtlLndvcmRTZXBhcmF0b3JzPTExOV09IndvcmRTZXBhcmF0b3JzIixlW2Uud29yZFdyYXA9MTIwXT0id29yZFdyYXAiLGVbZS53b3JkV3JhcEJyZWFrQWZ0ZXJDaGFyYWN0ZXJzPTEyMV09IndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnMiLGVbZS53b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycz0xMjJdPSJ3b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQ29sdW1uPTEyM109IndvcmRXcmFwQ29sdW1uIixlW2Uud29yZFdyYXBPdmVycmlkZTE9MTI0XT0id29yZFdyYXBPdmVycmlkZTEiLGVbZS53b3JkV3JhcE92ZXJyaWRlMj0xMjVdPSJ3b3JkV3JhcE92ZXJyaWRlMiIsZVtlLndyYXBwaW5nSW5kZW50PTEyNl09IndyYXBwaW5nSW5kZW50IixlW2Uud3JhcHBpbmdTdHJhdGVneT0xMjddPSJ3cmFwcGluZ1N0cmF0ZWd5IixlW2Uuc2hvd0RlcHJlY2F0ZWQ9MTI4XT0ic2hvd0RlcHJlY2F0ZWQiLGVbZS5pbmxheUhpbnRzPTEyOV09ImlubGF5SGludHMiLGVbZS5lZGl0b3JDbGFzc05hbWU9MTMwXT0iZWRpdG9yQ2xhc3NOYW1lIixlW2UucGl4ZWxSYXRpbz0xMzFdPSJwaXhlbFJhdGlvIixlW2UudGFiRm9jdXNNb2RlPTEzMl09InRhYkZvY3VzTW9kZSIsZVtlLmxheW91dEluZm89MTMzXT0ibGF5b3V0SW5mbyIsZVtlLndyYXBwaW5nSW5mbz0xMzRdPSJ3cmFwcGluZ0luZm8ifShhbnx8KGFuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRleHREZWZpbmVkPTBdPSJUZXh0RGVmaW5lZCIsZVtlLkxGPTFdPSJMRiIsZVtlLkNSTEY9Ml09IkNSTEYifShzbnx8KHNuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxGPTBdPSJMRiIsZVtlLkNSTEY9MV09IkNSTEYifShjbnx8KGNuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5JbmRlbnQ9MV09IkluZGVudCIsZVtlLkluZGVudE91dGRlbnQ9Ml09IkluZGVudE91dGRlbnQiLGVbZS5PdXRkZW50PTNdPSJPdXRkZW50In0obG58fChsbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Cb3RoPTBdPSJCb3RoIixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTGVmdD0yXT0iTGVmdCIsZVtlLk5vbmU9M109Ik5vbmUifSh1bnx8KHVuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KGhufHwoaG49e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifShmbnx8KGZuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRlcGVuZHNPbktiTGF5b3V0PS0xXT0iRGVwZW5kc09uS2JMYXlvdXQiLGVbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuQmFja3NwYWNlPTFdPSJCYWNrc3BhY2UiLGVbZS5UYWI9Ml09IlRhYiIsZVtlLkVudGVyPTNdPSJFbnRlciIsZVtlLlNoaWZ0PTRdPSJTaGlmdCIsZVtlLkN0cmw9NV09IkN0cmwiLGVbZS5BbHQ9Nl09IkFsdCIsZVtlLlBhdXNlQnJlYWs9N109IlBhdXNlQnJlYWsiLGVbZS5DYXBzTG9jaz04XT0iQ2Fwc0xvY2siLGVbZS5Fc2NhcGU9OV09IkVzY2FwZSIsZVtlLlNwYWNlPTEwXT0iU3BhY2UiLGVbZS5QYWdlVXA9MTFdPSJQYWdlVXAiLGVbZS5QYWdlRG93bj0xMl09IlBhZ2VEb3duIixlW2UuRW5kPTEzXT0iRW5kIixlW2UuSG9tZT0xNF09IkhvbWUiLGVbZS5MZWZ0QXJyb3c9MTVdPSJMZWZ0QXJyb3ciLGVbZS5VcEFycm93PTE2XT0iVXBBcnJvdyIsZVtlLlJpZ2h0QXJyb3c9MTddPSJSaWdodEFycm93IixlW2UuRG93bkFycm93PTE4XT0iRG93bkFycm93IixlW2UuSW5zZXJ0PTE5XT0iSW5zZXJ0IixlW2UuRGVsZXRlPTIwXT0iRGVsZXRlIixlW2UuRGlnaXQwPTIxXT0iRGlnaXQwIixlW2UuRGlnaXQxPTIyXT0iRGlnaXQxIixlW2UuRGlnaXQyPTIzXT0iRGlnaXQyIixlW2UuRGlnaXQzPTI0XT0iRGlnaXQzIixlW2UuRGlnaXQ0PTI1XT0iRGlnaXQ0IixlW2UuRGlnaXQ1PTI2XT0iRGlnaXQ1IixlW2UuRGlnaXQ2PTI3XT0iRGlnaXQ2IixlW2UuRGlnaXQ3PTI4XT0iRGlnaXQ3IixlW2UuRGlnaXQ4PTI5XT0iRGlnaXQ4IixlW2UuRGlnaXQ5PTMwXT0iRGlnaXQ5IixlW2UuS2V5QT0zMV09IktleUEiLGVbZS5LZXlCPTMyXT0iS2V5QiIsZVtlLktleUM9MzNdPSJLZXlDIixlW2UuS2V5RD0zNF09IktleUQiLGVbZS5LZXlFPTM1XT0iS2V5RSIsZVtlLktleUY9MzZdPSJLZXlGIixlW2UuS2V5Rz0zN109IktleUciLGVbZS5LZXlIPTM4XT0iS2V5SCIsZVtlLktleUk9MzldPSJLZXlJIixlW2UuS2V5Sj00MF09IktleUoiLGVbZS5LZXlLPTQxXT0iS2V5SyIsZVtlLktleUw9NDJdPSJLZXlMIixlW2UuS2V5TT00M109IktleU0iLGVbZS5LZXlOPTQ0XT0iS2V5TiIsZVtlLktleU89NDVdPSJLZXlPIixlW2UuS2V5UD00Nl09IktleVAiLGVbZS5LZXlRPTQ3XT0iS2V5USIsZVtlLktleVI9NDhdPSJLZXlSIixlW2UuS2V5Uz00OV09IktleVMiLGVbZS5LZXlUPTUwXT0iS2V5VCIsZVtlLktleVU9NTFdPSJLZXlVIixlW2UuS2V5Vj01Ml09IktleVYiLGVbZS5LZXlXPTUzXT0iS2V5VyIsZVtlLktleVg9NTRdPSJLZXlYIixlW2UuS2V5WT01NV09IktleVkiLGVbZS5LZXlaPTU2XT0iS2V5WiIsZVtlLk1ldGE9NTddPSJNZXRhIixlW2UuQ29udGV4dE1lbnU9NThdPSJDb250ZXh0TWVudSIsZVtlLkYxPTU5XT0iRjEiLGVbZS5GMj02MF09IkYyIixlW2UuRjM9NjFdPSJGMyIsZVtlLkY0PTYyXT0iRjQiLGVbZS5GNT02M109IkY1IixlW2UuRjY9NjRdPSJGNiIsZVtlLkY3PTY1XT0iRjciLGVbZS5GOD02Nl09IkY4IixlW2UuRjk9NjddPSJGOSIsZVtlLkYxMD02OF09IkYxMCIsZVtlLkYxMT02OV09IkYxMSIsZVtlLkYxMj03MF09IkYxMiIsZVtlLkYxMz03MV09IkYxMyIsZVtlLkYxND03Ml09IkYxNCIsZVtlLkYxNT03M109IkYxNSIsZVtlLkYxNj03NF09IkYxNiIsZVtlLkYxNz03NV09IkYxNyIsZVtlLkYxOD03Nl09IkYxOCIsZVtlLkYxOT03N109IkYxOSIsZVtlLk51bUxvY2s9NzhdPSJOdW1Mb2NrIixlW2UuU2Nyb2xsTG9jaz03OV09IlNjcm9sbExvY2siLGVbZS5TZW1pY29sb249ODBdPSJTZW1pY29sb24iLGVbZS5FcXVhbD04MV09IkVxdWFsIixlW2UuQ29tbWE9ODJdPSJDb21tYSIsZVtlLk1pbnVzPTgzXT0iTWludXMiLGVbZS5QZXJpb2Q9ODRdPSJQZXJpb2QiLGVbZS5TbGFzaD04NV09IlNsYXNoIixlW2UuQmFja3F1b3RlPTg2XT0iQmFja3F1b3RlIixlW2UuQnJhY2tldExlZnQ9ODddPSJCcmFja2V0TGVmdCIsZVtlLkJhY2tzbGFzaD04OF09IkJhY2tzbGFzaCIsZVtlLkJyYWNrZXRSaWdodD04OV09IkJyYWNrZXRSaWdodCIsZVtlLlF1b3RlPTkwXT0iUXVvdGUiLGVbZS5PRU1fOD05MV09Ik9FTV84IixlW2UuSW50bEJhY2tzbGFzaD05Ml09IkludGxCYWNrc2xhc2giLGVbZS5OdW1wYWQwPTkzXT0iTnVtcGFkMCIsZVtlLk51bXBhZDE9OTRdPSJOdW1wYWQxIixlW2UuTnVtcGFkMj05NV09Ik51bXBhZDIiLGVbZS5OdW1wYWQzPTk2XT0iTnVtcGFkMyIsZVtlLk51bXBhZDQ9OTddPSJOdW1wYWQ0IixlW2UuTnVtcGFkNT05OF09Ik51bXBhZDUiLGVbZS5OdW1wYWQ2PTk5XT0iTnVtcGFkNiIsZVtlLk51bXBhZDc9MTAwXT0iTnVtcGFkNyIsZVtlLk51bXBhZDg9MTAxXT0iTnVtcGFkOCIsZVtlLk51bXBhZDk9MTAyXT0iTnVtcGFkOSIsZVtlLk51bXBhZE11bHRpcGx5PTEwM109Ik51bXBhZE11bHRpcGx5IixlW2UuTnVtcGFkQWRkPTEwNF09Ik51bXBhZEFkZCIsZVtlLk5VTVBBRF9TRVBBUkFUT1I9MTA1XT0iTlVNUEFEX1NFUEFSQVRPUiIsZVtlLk51bXBhZFN1YnRyYWN0PTEwNl09Ik51bXBhZFN1YnRyYWN0IixlW2UuTnVtcGFkRGVjaW1hbD0xMDddPSJOdW1wYWREZWNpbWFsIixlW2UuTnVtcGFkRGl2aWRlPTEwOF09Ik51bXBhZERpdmlkZSIsZVtlLktFWV9JTl9DT01QT1NJVElPTj0xMDldPSJLRVlfSU5fQ09NUE9TSVRJT04iLGVbZS5BQk5UX0MxPTExMF09IkFCTlRfQzEiLGVbZS5BQk5UX0MyPTExMV09IkFCTlRfQzIiLGVbZS5BdWRpb1ZvbHVtZU11dGU9MTEyXT0iQXVkaW9Wb2x1bWVNdXRlIixlW2UuQXVkaW9Wb2x1bWVVcD0xMTNdPSJBdWRpb1ZvbHVtZVVwIixlW2UuQXVkaW9Wb2x1bWVEb3duPTExNF09IkF1ZGlvVm9sdW1lRG93biIsZVtlLkJyb3dzZXJTZWFyY2g9MTE1XT0iQnJvd3NlclNlYXJjaCIsZVtlLkJyb3dzZXJIb21lPTExNl09IkJyb3dzZXJIb21lIixlW2UuQnJvd3NlckJhY2s9MTE3XT0iQnJvd3NlckJhY2siLGVbZS5Ccm93c2VyRm9yd2FyZD0xMThdPSJCcm93c2VyRm9yd2FyZCIsZVtlLk1lZGlhVHJhY2tOZXh0PTExOV09Ik1lZGlhVHJhY2tOZXh0IixlW2UuTWVkaWFUcmFja1ByZXZpb3VzPTEyMF09Ik1lZGlhVHJhY2tQcmV2aW91cyIsZVtlLk1lZGlhU3RvcD0xMjFdPSJNZWRpYVN0b3AiLGVbZS5NZWRpYVBsYXlQYXVzZT0xMjJdPSJNZWRpYVBsYXlQYXVzZSIsZVtlLkxhdW5jaE1lZGlhUGxheWVyPTEyM109IkxhdW5jaE1lZGlhUGxheWVyIixlW2UuTGF1bmNoTWFpbD0xMjRdPSJMYXVuY2hNYWlsIixlW2UuTGF1bmNoQXBwMj0xMjVdPSJMYXVuY2hBcHAyIixlW2UuQ2xlYXI9MTI2XT0iQ2xlYXIiLGVbZS5NQVhfVkFMVUU9MTI3XT0iTUFYX1ZBTFVFIn0oZG58fChkbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5IaW50PTFdPSJIaW50IixlW2UuSW5mbz0yXT0iSW5mbyIsZVtlLldhcm5pbmc9NF09Ildhcm5pbmciLGVbZS5FcnJvcj04XT0iRXJyb3IifShtbnx8KG1uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVubmVjZXNzYXJ5PTFdPSJVbm5lY2Vzc2FyeSIsZVtlLkRlcHJlY2F0ZWQ9Ml09IkRlcHJlY2F0ZWQifShnbnx8KGduPXt9KSksZnVuY3Rpb24oZSl7ZVtlLklubGluZT0xXT0iSW5saW5lIixlW2UuR3V0dGVyPTJdPSJHdXR0ZXIifShwbnx8KHBuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09IlVOS05PV04iLGVbZS5URVhUQVJFQT0xXT0iVEVYVEFSRUEiLGVbZS5HVVRURVJfR0xZUEhfTUFSR0lOPTJdPSJHVVRURVJfR0xZUEhfTUFSR0lOIixlW2UuR1VUVEVSX0xJTkVfTlVNQkVSUz0zXT0iR1VUVEVSX0xJTkVfTlVNQkVSUyIsZVtlLkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TPTRdPSJHVVRURVJfTElORV9ERUNPUkFUSU9OUyIsZVtlLkdVVFRFUl9WSUVXX1pPTkU9NV09IkdVVFRFUl9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1RFWFQ9Nl09IkNPTlRFTlRfVEVYVCIsZVtlLkNPTlRFTlRfRU1QVFk9N109IkNPTlRFTlRfRU1QVFkiLGVbZS5DT05URU5UX1ZJRVdfWk9ORT04XT0iQ09OVEVOVF9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1dJREdFVD05XT0iQ09OVEVOVF9XSURHRVQiLGVbZS5PVkVSVklFV19SVUxFUj0xMF09Ik9WRVJWSUVXX1JVTEVSIixlW2UuU0NST0xMQkFSPTExXT0iU0NST0xMQkFSIixlW2UuT1ZFUkxBWV9XSURHRVQ9MTJdPSJPVkVSTEFZX1dJREdFVCIsZVtlLk9VVFNJREVfRURJVE9SPTEzXT0iT1VUU0lERV9FRElUT1IifShibnx8KGJuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRPUF9SSUdIVF9DT1JORVI9MF09IlRPUF9SSUdIVF9DT1JORVIiLGVbZS5CT1RUT01fUklHSFRfQ09STkVSPTFdPSJCT1RUT01fUklHSFRfQ09STkVSIixlW2UuVE9QX0NFTlRFUj0yXT0iVE9QX0NFTlRFUiJ9KHZufHwodm49e30pKSxmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KHlufHwoeW49e30pKSxmdW5jdGlvbihlKXtlW2UuTGVmdD0wXT0iTGVmdCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLk5vbmU9Ml09Ik5vbmUiLGVbZS5MZWZ0T2ZJbmplY3RlZFRleHQ9M109IkxlZnRPZkluamVjdGVkVGV4dCIsZVtlLlJpZ2h0T2ZJbmplY3RlZFRleHQ9NF09IlJpZ2h0T2ZJbmplY3RlZFRleHQifShDbnx8KENuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk9mZj0wXT0iT2ZmIixlW2UuT249MV09Ik9uIixlW2UuUmVsYXRpdmU9Ml09IlJlbGF0aXZlIixlW2UuSW50ZXJ2YWw9M109IkludGVydmFsIixlW2UuQ3VzdG9tPTRdPSJDdXN0b20ifSh3bnx8KHduPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5UZXh0PTFdPSJUZXh0IixlW2UuQmxvY2tzPTJdPSJCbG9ja3MifShfbnx8KF9uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlNtb290aD0wXT0iU21vb3RoIixlW2UuSW1tZWRpYXRlPTFdPSJJbW1lZGlhdGUifShTbnx8KFNuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkF1dG89MV09IkF1dG8iLGVbZS5IaWRkZW49Ml09IkhpZGRlbiIsZVtlLlZpc2libGU9M109IlZpc2libGUifShBbnx8KEFuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxUUj0wXT0iTFRSIixlW2UuUlRMPTFdPSJSVEwifShFbnx8KEVuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifSh4bnx8KHhuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkZpbGU9MF09IkZpbGUiLGVbZS5Nb2R1bGU9MV09Ik1vZHVsZSIsZVtlLk5hbWVzcGFjZT0yXT0iTmFtZXNwYWNlIixlW2UuUGFja2FnZT0zXT0iUGFja2FnZSIsZVtlLkNsYXNzPTRdPSJDbGFzcyIsZVtlLk1ldGhvZD01XT0iTWV0aG9kIixlW2UuUHJvcGVydHk9Nl09IlByb3BlcnR5IixlW2UuRmllbGQ9N109IkZpZWxkIixlW2UuQ29uc3RydWN0b3I9OF09IkNvbnN0cnVjdG9yIixlW2UuRW51bT05XT0iRW51bSIsZVtlLkludGVyZmFjZT0xMF09IkludGVyZmFjZSIsZVtlLkZ1bmN0aW9uPTExXT0iRnVuY3Rpb24iLGVbZS5WYXJpYWJsZT0xMl09IlZhcmlhYmxlIixlW2UuQ29uc3RhbnQ9MTNdPSJDb25zdGFudCIsZVtlLlN0cmluZz0xNF09IlN0cmluZyIsZVtlLk51bWJlcj0xNV09Ik51bWJlciIsZVtlLkJvb2xlYW49MTZdPSJCb29sZWFuIixlW2UuQXJyYXk9MTddPSJBcnJheSIsZVtlLk9iamVjdD0xOF09Ik9iamVjdCIsZVtlLktleT0xOV09IktleSIsZVtlLk51bGw9MjBdPSJOdWxsIixlW2UuRW51bU1lbWJlcj0yMV09IkVudW1NZW1iZXIiLGVbZS5TdHJ1Y3Q9MjJdPSJTdHJ1Y3QiLGVbZS5FdmVudD0yM109IkV2ZW50IixlW2UuT3BlcmF0b3I9MjRdPSJPcGVyYXRvciIsZVtlLlR5cGVQYXJhbWV0ZXI9MjVdPSJUeXBlUGFyYW1ldGVyIn0oTm58fChObj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0oa258fChrbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5IaWRkZW49MF09IkhpZGRlbiIsZVtlLkJsaW5rPTFdPSJCbGluayIsZVtlLlNtb290aD0yXT0iU21vb3RoIixlW2UuUGhhc2U9M109IlBoYXNlIixlW2UuRXhwYW5kPTRdPSJFeHBhbmQiLGVbZS5Tb2xpZD01XT0iU29saWQifShMbnx8KExuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxpbmU9MV09IkxpbmUiLGVbZS5CbG9jaz0yXT0iQmxvY2siLGVbZS5VbmRlcmxpbmU9M109IlVuZGVybGluZSIsZVtlLkxpbmVUaGluPTRdPSJMaW5lVGhpbiIsZVtlLkJsb2NrT3V0bGluZT01XT0iQmxvY2tPdXRsaW5lIixlW2UuVW5kZXJsaW5lVGhpbj02XT0iVW5kZXJsaW5lVGhpbiJ9KFRufHwoVG49e30pKSxmdW5jdGlvbihlKXtlW2UuQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0wXT0iQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLk5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0xXT0iTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZT0yXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZSIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdBZnRlcj0zXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyIn0oT258fChPbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuU2FtZT0xXT0iU2FtZSIsZVtlLkluZGVudD0yXT0iSW5kZW50IixlW2UuRGVlcEluZGVudD0zXT0iRGVlcEluZGVudCJ9KElufHwoSW49e30pKTtjbGFzcyBLbntzdGF0aWMgY2hvcmQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4oZXwoNjU1MzUmdCk8PDE2Pj4+MCk+Pj4wfShlLHQpfX1mdW5jdGlvbiBqbihlLHQsbixyLGkpe3JldHVybiBmdW5jdGlvbihlLHQsbixyLGkpe2lmKDA9PT1yKXJldHVybiEwO2NvbnN0IG89dC5jaGFyQ29kZUF0KHItMSk7aWYoMCE9PWUuZ2V0KG8pKXJldHVybiEwO2lmKDEzPT09b3x8MTA9PT1vKXJldHVybiEwO2lmKGk+MCl7Y29uc3Qgbj10LmNoYXJDb2RlQXQocik7aWYoMCE9PWUuZ2V0KG4pKXJldHVybiEwfXJldHVybiExfShlLHQsMCxyLGkpJiZmdW5jdGlvbihlLHQsbixyLGkpe2lmKHIraT09PW4pcmV0dXJuITA7Y29uc3Qgbz10LmNoYXJDb2RlQXQocitpKTtpZigwIT09ZS5nZXQobykpcmV0dXJuITA7aWYoMTM9PT1vfHwxMD09PW8pcmV0dXJuITA7aWYoaT4wKXtjb25zdCBuPXQuY2hhckNvZGVBdChyK2ktMSk7aWYoMCE9PWUuZ2V0KG4pKXJldHVybiEwfXJldHVybiExfShlLHQsbixyLGkpfUtuLkN0cmxDbWQ9MjA0OCxLbi5TaGlmdD0xMDI0LEtuLkFsdD01MTIsS24uV2luQ3RybD0yNTYsZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTRdPSJSaWdodCIsZVtlLkZ1bGw9N109IkZ1bGwifShNbnx8KE1uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLklubGluZT0xXT0iSW5saW5lIixlW2UuR3V0dGVyPTJdPSJHdXR0ZXIifShQbnx8KFBuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KFJufHwoUm49e30pKTtjbGFzcyBVbntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX3dvcmRTZXBhcmF0b3JzPWUsdGhpcy5fc2VhcmNoUmVnZXg9dCx0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfXJlc2V0KGUpe3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleD1lLHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9bmV4dChlKXtjb25zdCB0PWUubGVuZ3RoO2xldCBuO2Rve2lmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgrdGhpcy5fcHJldk1hdGNoTGVuZ3RoPT09dClyZXR1cm4gbnVsbDtpZihuPXRoaXMuX3NlYXJjaFJlZ2V4LmV4ZWMoZSksIW4pcmV0dXJuIG51bGw7Y29uc3Qgcj1uLmluZGV4LGk9blswXS5sZW5ndGg7aWYocj09PXRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgmJmk9PT10aGlzLl9wcmV2TWF0Y2hMZW5ndGgpe2lmKDA9PT1pKXtYKGUsdCx0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgpPjY1NTM1P3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9Mjp0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTE7Y29udGludWV9cmV0dXJuIG51bGx9aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD1yLHRoaXMuX3ByZXZNYXRjaExlbmd0aD1pLCF0aGlzLl93b3JkU2VwYXJhdG9yc3x8am4odGhpcy5fd29yZFNlcGFyYXRvcnMsZSx0LHIsaSkpcmV0dXJuIG59d2hpbGUobik7cmV0dXJuIG51bGx9fWNsYXNzIEJue2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lLHRoaXMuYWxsb3dlZENvZGVQb2ludHM9bmV3IFNldChlLmFsbG93ZWRDb2RlUG9pbnRzKSx0aGlzLmFtYmlndW91c0NoYXJhY3RlcnM9WS5nZXRJbnN0YW5jZShuZXcgU2V0KGUuYWxsb3dlZExvY2FsZXMpKX1nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCl7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuImFsbE5vbkJhc2ljQXNjaWkiO2NvbnN0IGU9bmV3IFNldDtpZih0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiBRLmNvZGVQb2ludHMpcW4oU3RyaW5nLmZyb21Db2RlUG9pbnQodCkpfHxlLmFkZCh0KTtpZih0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiB0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKSllLmFkZCh0KTtmb3IoY29uc3QgdCBvZiB0aGlzLmFsbG93ZWRDb2RlUG9pbnRzKWUuZGVsZXRlKHQpO3JldHVybiBlfXNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSx0KXtjb25zdCBuPWUuY29kZVBvaW50QXQoMCk7aWYodGhpcy5hbGxvd2VkQ29kZVBvaW50cy5oYXMobikpcmV0dXJuIDA7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuIDE7bGV0IHI9ITEsaT0hMTtpZih0KWZvcihjb25zdCBlIG9mIHQpe2NvbnN0IHQ9ZS5jb2RlUG9pbnRBdCgwKSxuPShvPWUsWi50ZXN0KG8pKTtyPXJ8fG4sbnx8dGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKHQpfHxRLmlzSW52aXNpYmxlQ2hhcmFjdGVyKHQpfHwoaT0hMCl9dmFyIG87cmV0dXJuIXImJmk/MDp0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycyYmIXFuKGUpJiZRLmlzSW52aXNpYmxlQ2hhcmFjdGVyKG4pPzI6dGhpcy5vcHRpb25zLmFtYmlndW91c0NoYXJhY3RlcnMmJnRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyhuKT8zOjB9fWZ1bmN0aW9uIHFuKGUpe3JldHVybiIgIj09PWV8fCJcbiI9PT1lfHwiXHQiPT09ZX12YXIgJG49ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9O2NsYXNzIFduIGV4dGVuZHMgY2xhc3N7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGluZXM9dCx0aGlzLl9lb2w9bix0aGlzLl92ZXJzaW9uSWQ9cix0aGlzLl9saW5lU3RhcnRzPW51bGwsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX2xpbmVzLmxlbmd0aD0wfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb25JZH1nZXRUZXh0KCl7cmV0dXJuIG51bGw9PT10aGlzLl9jYWNoZWRUZXh0VmFsdWUmJih0aGlzLl9jYWNoZWRUZXh0VmFsdWU9dGhpcy5fbGluZXMuam9pbih0aGlzLl9lb2wpKSx0aGlzLl9jYWNoZWRUZXh0VmFsdWV9b25FdmVudHMoZSl7ZS5lb2wmJmUuZW9sIT09dGhpcy5fZW9sJiYodGhpcy5fZW9sPWUuZW9sLHRoaXMuX2xpbmVTdGFydHM9bnVsbCk7Y29uc3QgdD1lLmNoYW5nZXM7Zm9yKGNvbnN0IGUgb2YgdCl0aGlzLl9hY2NlcHREZWxldGVSYW5nZShlLnJhbmdlKSx0aGlzLl9hY2NlcHRJbnNlcnRUZXh0KG5ldyBRZShlLnJhbmdlLnN0YXJ0TGluZU51bWJlcixlLnJhbmdlLnN0YXJ0Q29sdW1uKSxlLnRleHQpO3RoaXMuX3ZlcnNpb25JZD1lLnZlcnNpb25JZCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1fZW5zdXJlTGluZVN0YXJ0cygpe2lmKCF0aGlzLl9saW5lU3RhcnRzKXtjb25zdCBlPXRoaXMuX2VvbC5sZW5ndGgsdD10aGlzLl9saW5lcy5sZW5ndGgsbj1uZXcgVWludDMyQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyluW3JdPXRoaXMuX2xpbmVzW3JdLmxlbmd0aCtlO3RoaXMuX2xpbmVTdGFydHM9bmV3IGR0KG4pfX1fc2V0TGluZVRleHQoZSx0KXt0aGlzLl9saW5lc1tlXT10LHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuc2V0VmFsdWUoZSx0aGlzLl9saW5lc1tlXS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aCl9X2FjY2VwdERlbGV0ZVJhbmdlKGUpe2lmKGUuc3RhcnRMaW5lTnVtYmVyIT09ZS5lbmRMaW5lTnVtYmVyKXRoaXMuX3NldExpbmVUZXh0KGUuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1tlLmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UoZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyLWUuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyhlLnN0YXJ0TGluZU51bWJlcixlLmVuZExpbmVOdW1iZXItZS5zdGFydExpbmVOdW1iZXIpO2Vsc2V7aWYoZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1uKXJldHVybjt0aGlzLl9zZXRMaW5lVGV4dChlLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKX19X2FjY2VwdEluc2VydFRleHQoZSx0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IG49dC5zcGxpdCgvXHJcbnxccnxcbi8pO2lmKDE9PT1uLmxlbmd0aClyZXR1cm4gdm9pZCB0aGlzLl9zZXRMaW5lVGV4dChlLmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5jb2x1bW4tMSkrblswXSt0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpKTtuW24ubGVuZ3RoLTFdKz10aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpLHRoaXMuX3NldExpbmVUZXh0KGUubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLmNvbHVtbi0xKStuWzBdKTtjb25zdCByPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aC0xKTtmb3IobGV0IHQ9MTt0PG4ubGVuZ3RoO3QrKyl0aGlzLl9saW5lcy5zcGxpY2UoZS5saW5lTnVtYmVyK3QtMSwwLG5bdF0pLHJbdC0xXT1uW3RdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoO3RoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuaW5zZXJ0VmFsdWVzKGUubGluZU51bWJlcixyKX19e2dldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBlb2woKXtyZXR1cm4gdGhpcy5fZW9sfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpfWdldExpbmVzQ29udGVudCgpe3JldHVybiB0aGlzLl9saW5lcy5zbGljZSgwKX1nZXRMaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5fbGluZXMubGVuZ3RofWdldExpbmVDb250ZW50KGUpe3JldHVybiB0aGlzLl9saW5lc1tlLTFdfWdldFdvcmRBdFBvc2l0aW9uKGUsdCl7Y29uc3Qgbj1idChlLmNvbHVtbixmdW5jdGlvbihlKXtsZXQgdD1ndDtpZihlJiZlIGluc3RhbmNlb2YgUmVnRXhwKWlmKGUuZ2xvYmFsKXQ9ZTtlbHNle2xldCBuPSJnIjtlLmlnbm9yZUNhc2UmJihuKz0iaSIpLGUubXVsdGlsaW5lJiYobis9Im0iKSxlLnVuaWNvZGUmJihuKz0idSIpLHQ9bmV3IFJlZ0V4cChlLnNvdXJjZSxuKX1yZXR1cm4gdC5sYXN0SW5kZXg9MCx0fSh0KSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0sMCk7cmV0dXJuIG4/bmV3IGV0KGUubGluZU51bWJlcixuLnN0YXJ0Q29sdW1uLGUubGluZU51bWJlcixuLmVuZENvbHVtbik6bnVsbH13b3JkcyhlKXtjb25zdCB0PXRoaXMuX2xpbmVzLG49dGhpcy5fd29yZGVuaXplLmJpbmQodGhpcyk7bGV0IHI9MCxpPSIiLG89MCxhPVtdO3JldHVybnsqW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IoOzspaWYobzxhLmxlbmd0aCl7Y29uc3QgZT1pLnN1YnN0cmluZyhhW29dLnN0YXJ0LGFbb10uZW5kKTtvKz0xLHlpZWxkIGV9ZWxzZXtpZighKHI8dC5sZW5ndGgpKWJyZWFrO2k9dFtyXSxhPW4oaSxlKSxvPTAscis9MX19fX1nZXRMaW5lV29yZHMoZSx0KXtjb25zdCBuPXRoaXMuX2xpbmVzW2UtMV0scj10aGlzLl93b3JkZW5pemUobix0KSxpPVtdO2Zvcihjb25zdCBlIG9mIHIpaS5wdXNoKHt3b3JkOm4uc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQpLHN0YXJ0Q29sdW1uOmUuc3RhcnQrMSxlbmRDb2x1bW46ZS5lbmQrMX0pO3JldHVybiBpfV93b3JkZW5pemUoZSx0KXtjb25zdCBuPVtdO2xldCByO2Zvcih0Lmxhc3RJbmRleD0wOyhyPXQuZXhlYyhlKSkmJjAhPT1yWzBdLmxlbmd0aDspbi5wdXNoKHtzdGFydDpyLmluZGV4LGVuZDpyLmluZGV4K3JbMF0ubGVuZ3RofSk7cmV0dXJuIG59Z2V0VmFsdWVJblJhbmdlKGUpe2lmKChlPXRoaXMuX3ZhbGlkYXRlUmFuZ2UoZSkpLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlcilyZXR1cm4gdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuc3RhcnRDb2x1bW4tMSxlLmVuZENvbHVtbi0xKTtjb25zdCB0PXRoaXMuX2VvbCxuPWUuc3RhcnRMaW5lTnVtYmVyLTEscj1lLmVuZExpbmVOdW1iZXItMSxpPVtdO2kucHVzaCh0aGlzLl9saW5lc1tuXS5zdWJzdHJpbmcoZS5zdGFydENvbHVtbi0xKSk7Zm9yKGxldCBlPW4rMTtlPHI7ZSsrKWkucHVzaCh0aGlzLl9saW5lc1tlXSk7cmV0dXJuIGkucHVzaCh0aGlzLl9saW5lc1tyXS5zdWJzdHJpbmcoMCxlLmVuZENvbHVtbi0xKSksaS5qb2luKHQpfW9mZnNldEF0KGUpe3JldHVybiBlPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oZSksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpLHRoaXMuX2xpbmVTdGFydHMuZ2V0UHJlZml4U3VtKGUubGluZU51bWJlci0yKSsoZS5jb2x1bW4tMSl9cG9zaXRpb25BdChlKXtlPU1hdGguZmxvb3IoZSksZT1NYXRoLm1heCgwLGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKTtjb25zdCB0PXRoaXMuX2xpbmVTdGFydHMuZ2V0SW5kZXhPZihlKSxuPXRoaXMuX2xpbmVzW3QuaW5kZXhdLmxlbmd0aDtyZXR1cm57bGluZU51bWJlcjoxK3QuaW5kZXgsY29sdW1uOjErTWF0aC5taW4odC5yZW1haW5kZXIsbil9fV92YWxpZGF0ZVJhbmdlKGUpe2NvbnN0IHQ9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjplLnN0YXJ0TGluZU51bWJlcixjb2x1bW46ZS5zdGFydENvbHVtbn0pLG49dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjplLmVuZExpbmVOdW1iZXIsY29sdW1uOmUuZW5kQ29sdW1ufSk7cmV0dXJuIHQubGluZU51bWJlciE9PWUuc3RhcnRMaW5lTnVtYmVyfHx0LmNvbHVtbiE9PWUuc3RhcnRDb2x1bW58fG4ubGluZU51bWJlciE9PWUuZW5kTGluZU51bWJlcnx8bi5jb2x1bW4hPT1lLmVuZENvbHVtbj97c3RhcnRMaW5lTnVtYmVyOnQubGluZU51bWJlcixzdGFydENvbHVtbjp0LmNvbHVtbixlbmRMaW5lTnVtYmVyOm4ubGluZU51bWJlcixlbmRDb2x1bW46bi5jb2x1bW59OmV9X3ZhbGlkYXRlUG9zaXRpb24oZSl7aWYoIVFlLmlzSVBvc2l0aW9uKGUpKXRocm93IG5ldyBFcnJvcigiYmFkIHBvc2l0aW9uIik7bGV0e2xpbmVOdW1iZXI6dCxjb2x1bW46bn09ZSxyPSExO2lmKHQ8MSl0PTEsbj0xLHI9ITA7ZWxzZSBpZih0PnRoaXMuX2xpbmVzLmxlbmd0aCl0PXRoaXMuX2xpbmVzLmxlbmd0aCxuPXRoaXMuX2xpbmVzW3QtMV0ubGVuZ3RoKzEscj0hMDtlbHNle2NvbnN0IGU9dGhpcy5fbGluZXNbdC0xXS5sZW5ndGgrMTtuPDE/KG49MSxyPSEwKTpuPmUmJihuPWUscj0hMCl9cmV0dXJuIHI/e2xpbmVOdW1iZXI6dCxjb2x1bW46bn06ZX19Y2xhc3MgSG57Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9ob3N0PWUsdGhpcy5fbW9kZWxzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnk9dCx0aGlzLl9mb3JlaWduTW9kdWxlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpfV9nZXRNb2RlbChlKXtyZXR1cm4gdGhpcy5fbW9kZWxzW2VdfV9nZXRNb2RlbHMoKXtjb25zdCBlPVtdO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tb2RlbHMpLmZvckVhY2goKHQ9PmUucHVzaCh0aGlzLl9tb2RlbHNbdF0pKSksZX1hY2NlcHROZXdNb2RlbChlKXt0aGlzLl9tb2RlbHNbZS51cmxdPW5ldyBXbihCZS5wYXJzZShlLnVybCksZS5saW5lcyxlLkVPTCxlLnZlcnNpb25JZCl9YWNjZXB0TW9kZWxDaGFuZ2VkKGUsdCl7aWYoIXRoaXMuX21vZGVsc1tlXSlyZXR1cm47dGhpcy5fbW9kZWxzW2VdLm9uRXZlbnRzKHQpfWFjY2VwdFJlbW92ZWRNb2RlbChlKXt0aGlzLl9tb2RlbHNbZV0mJmRlbGV0ZSB0aGlzLl9tb2RlbHNbZV19Y29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKGUsdCxuKXtyZXR1cm4gJG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPXRoaXMuX2dldE1vZGVsKGUpO3JldHVybiByP2NsYXNze3N0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodHMoZSx0LG4pe2NvbnN0IHI9bj9uLnN0YXJ0TGluZU51bWJlcjoxLGk9bj9uLmVuZExpbmVOdW1iZXI6ZS5nZXRMaW5lQ291bnQoKSxvPW5ldyBCbih0KSxhPW8uZ2V0Q2FuZGlkYXRlQ29kZVBvaW50cygpO2xldCBzO3ZhciBjO3M9ImFsbE5vbkJhc2ljQXNjaWkiPT09YT9uZXcgUmVnRXhwKCJbXlxcdFxcblxcclxceDIwLVxceDdFXSIsImciKTpuZXcgUmVnRXhwKGBbJHtjPUFycmF5LmZyb20oYSkubWFwKChlPT5TdHJpbmcuZnJvbUNvZGVQb2ludChlKSkpLmpvaW4oIiIpLGMucmVwbGFjZSgvW1xcXHtcfVwqXCtcP1x8XF5cJFwuXFtcXVwoXCldL2csIlxcJCYiKX1dYCwiZyIpO2NvbnN0IGw9bmV3IFVuKG51bGwscyksdT1bXTtsZXQgaCxmPSExLGQ9MCxtPTAsZz0wO2U6Zm9yKGxldCB0PXIsbj1pO3Q8PW47dCsrKXtjb25zdCBuPWUuZ2V0TGluZUNvbnRlbnQodCkscj1uLmxlbmd0aDtsLnJlc2V0KDApO2Rve2lmKGg9bC5uZXh0KG4pLGgpe2xldCBlPWguaW5kZXgsaT1oLmluZGV4K2hbMF0ubGVuZ3RoO2U+MCYmSihuLmNoYXJDb2RlQXQoZS0xKSkmJmUtLSxpKzE8ciYmSihuLmNoYXJDb2RlQXQoaS0xKSkmJmkrKztjb25zdCBhPW4uc3Vic3RyaW5nKGUsaSkscz1idChlKzEsZ3QsbiwwKSxjPW8uc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShhLHM/cy53b3JkOm51bGwpO2lmKDAhPT1jKXszPT09Yz9kKys6Mj09PWM/bSsrOjE9PT1jP2crKzpIKCk7Y29uc3Qgbj0xZTM7aWYodS5sZW5ndGg+PW4pe2Y9ITA7YnJlYWsgZX11LnB1c2gobmV3IGV0KHQsZSsxLHQsaSsxKSl9fX13aGlsZShoKX1yZXR1cm57cmFuZ2VzOnUsaGFzTW9yZTpmLGFtYmlndW91c0NoYXJhY3RlckNvdW50OmQsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6bSxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6Z319c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0UmVhc29uKGUsdCl7Y29uc3Qgbj1uZXcgQm4odCk7c3dpdGNoKG4uc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShlLG51bGwpKXtjYXNlIDA6cmV0dXJuIG51bGw7Y2FzZSAyOnJldHVybntraW5kOjF9O2Nhc2UgMzp7Y29uc3Qgcj1lLmNvZGVQb2ludEF0KDApLGk9bi5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldFByaW1hcnlDb25mdXNhYmxlKHIpLG89WS5nZXRMb2NhbGVzKCkuZmlsdGVyKChlPT4hWS5nZXRJbnN0YW5jZShuZXcgU2V0KFsuLi50LmFsbG93ZWRMb2NhbGVzLGVdKSkuaXNBbWJpZ3VvdXMocikpKTtyZXR1cm57a2luZDowLGNvbmZ1c2FibGVXaXRoOlN0cmluZy5mcm9tQ29kZVBvaW50KGkpLG5vdEFtYmlndW91c0luTG9jYWxlczpvfX1jYXNlIDE6cmV0dXJue2tpbmQ6Mn19fX0uY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHIsdCxuKTp7cmFuZ2VzOltdLGhhc01vcmU6ITEsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6MCxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDowLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDowfX0pKX1jb21wdXRlRGlmZihlLHQsbixyKXtyZXR1cm4gJG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPXRoaXMuX2dldE1vZGVsKGUpLG89dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIGkmJm8/SG4uY29tcHV0ZURpZmYoaSxvLG4scik6bnVsbH0pKX1zdGF0aWMgY29tcHV0ZURpZmYoZSx0LG4scil7Y29uc3QgaT1lLmdldExpbmVzQ29udGVudCgpLG89dC5nZXRMaW5lc0NvbnRlbnQoKSxhPW5ldyBhdChpLG8se3Nob3VsZENvbXB1dGVDaGFyQ2hhbmdlczohMCxzaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzOiEwLHNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlOm4sc2hvdWxkTWFrZVByZXR0eURpZmY6ITAsbWF4Q29tcHV0YXRpb25UaW1lOnJ9KS5jb21wdXRlRGlmZigpLHM9IShhLmNoYW5nZXMubGVuZ3RoPjApJiZ0aGlzLl9tb2RlbHNBcmVJZGVudGljYWwoZSx0KTtyZXR1cm57cXVpdEVhcmx5OmEucXVpdEVhcmx5LGlkZW50aWNhbDpzLGNoYW5nZXM6YS5jaGFuZ2VzfX1zdGF0aWMgX21vZGVsc0FyZUlkZW50aWNhbChlLHQpe2NvbnN0IG49ZS5nZXRMaW5lQ291bnQoKTtpZihuIT09dC5nZXRMaW5lQ291bnQoKSlyZXR1cm4hMTtmb3IobGV0IHI9MTtyPD1uO3IrKyl7aWYoZS5nZXRMaW5lQ29udGVudChyKSE9PXQuZ2V0TGluZUNvbnRlbnQocikpcmV0dXJuITF9cmV0dXJuITB9Y29tcHV0ZU1vcmVNaW5pbWFsRWRpdHMoZSx0KXtyZXR1cm4gJG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBuPXRoaXMuX2dldE1vZGVsKGUpO2lmKCFuKXJldHVybiB0O2NvbnN0IHI9W107bGV0IGk7dD10LnNsaWNlKDApLnNvcnQoKChlLHQpPT57aWYoZS5yYW5nZSYmdC5yYW5nZSlyZXR1cm4gZXQuY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKGUucmFuZ2UsdC5yYW5nZSk7cmV0dXJuKGUucmFuZ2U/MDoxKS0odC5yYW5nZT8wOjEpfSkpO2ZvcihsZXR7cmFuZ2U6ZSx0ZXh0Om8sZW9sOmF9b2YgdCl7aWYoIm51bWJlciI9PXR5cGVvZiBhJiYoaT1hKSxldC5pc0VtcHR5KGUpJiYhbyljb250aW51ZTtjb25zdCB0PW4uZ2V0VmFsdWVJblJhbmdlKGUpO2lmKG89by5yZXBsYWNlKC9cclxufFxufFxyL2csbi5lb2wpLHQ9PT1vKWNvbnRpbnVlO2lmKE1hdGgubWF4KG8ubGVuZ3RoLHQubGVuZ3RoKT5Ibi5fZGlmZkxpbWl0KXtyLnB1c2goe3JhbmdlOmUsdGV4dDpvfSk7Y29udGludWV9Y29uc3Qgcz1kZSh0LG8sITEpLGM9bi5vZmZzZXRBdChldC5saWZ0KGUpLmdldFN0YXJ0UG9zaXRpb24oKSk7Zm9yKGNvbnN0IGUgb2Ygcyl7Y29uc3QgdD1uLnBvc2l0aW9uQXQoYytlLm9yaWdpbmFsU3RhcnQpLGk9bi5wb3NpdGlvbkF0KGMrZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgpLGE9e3RleHQ6by5zdWJzdHIoZS5tb2RpZmllZFN0YXJ0LGUubW9kaWZpZWRMZW5ndGgpLHJhbmdlOntzdGFydExpbmVOdW1iZXI6dC5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOnQuY29sdW1uLGVuZExpbmVOdW1iZXI6aS5saW5lTnVtYmVyLGVuZENvbHVtbjppLmNvbHVtbn19O24uZ2V0VmFsdWVJblJhbmdlKGEucmFuZ2UpIT09YS50ZXh0JiZyLnB1c2goYSl9fXJldHVybiJudW1iZXIiPT10eXBlb2YgaSYmci5wdXNoKHtlb2w6aSx0ZXh0OiIiLHJhbmdlOntzdGFydExpbmVOdW1iZXI6MCxzdGFydENvbHVtbjowLGVuZExpbmVOdW1iZXI6MCxlbmRDb2x1bW46MH19KSxyfSkpfWNvbXB1dGVMaW5rcyhlKXtyZXR1cm4gJG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXRoaXMuX2dldE1vZGVsKGUpO3JldHVybiB0P2Z1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRMaW5lQ291bnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldExpbmVDb250ZW50P0F0LmNvbXB1dGVMaW5rcyhlKTpbXX0odCk6bnVsbH0pKX10ZXh0dWFsU3VnZ2VzdChlLHQsbixyKXtyZXR1cm4gJG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPW5ldyBWKCEwKSxvPW5ldyBSZWdFeHAobixyKSxhPW5ldyBTZXQ7ZTpmb3IoY29uc3QgbiBvZiBlKXtjb25zdCBlPXRoaXMuX2dldE1vZGVsKG4pO2lmKGUpZm9yKGNvbnN0IG4gb2YgZS53b3JkcyhvKSlpZihuIT09dCYmaXNOYU4oTnVtYmVyKG4pKSYmKGEuYWRkKG4pLGEuc2l6ZT5Ibi5fc3VnZ2VzdGlvbnNMaW1pdCkpYnJlYWsgZX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShhKSxkdXJhdGlvbjppLmVsYXBzZWQoKX19KSl9Y29tcHV0ZVdvcmRSYW5nZXMoZSx0LG4scil7cmV0dXJuICRuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT10aGlzLl9nZXRNb2RlbChlKTtpZighaSlyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBvPW5ldyBSZWdFeHAobixyKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBlPXQuc3RhcnRMaW5lTnVtYmVyO2U8dC5lbmRMaW5lTnVtYmVyO2UrKyl7Y29uc3QgdD1pLmdldExpbmVXb3JkcyhlLG8pO2Zvcihjb25zdCBuIG9mIHQpe2lmKCFpc05hTihOdW1iZXIobi53b3JkKSkpY29udGludWU7bGV0IHQ9YVtuLndvcmRdO3R8fCh0PVtdLGFbbi53b3JkXT10KSx0LnB1c2goe3N0YXJ0TGluZU51bWJlcjplLHN0YXJ0Q29sdW1uOm4uc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjplLGVuZENvbHVtbjpuLmVuZENvbHVtbn0pfX1yZXR1cm4gYX0pKX1uYXZpZ2F0ZVZhbHVlU2V0KGUsdCxuLHIsaSl7cmV0dXJuICRuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbz10aGlzLl9nZXRNb2RlbChlKTtpZighbylyZXR1cm4gbnVsbDtjb25zdCBhPW5ldyBSZWdFeHAocixpKTt0LnN0YXJ0Q29sdW1uPT09dC5lbmRDb2x1bW4mJih0PXtzdGFydExpbmVOdW1iZXI6dC5zdGFydExpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOnQuZW5kTGluZU51bWJlcixlbmRDb2x1bW46dC5lbmRDb2x1bW4rMX0pO2NvbnN0IHM9by5nZXRWYWx1ZUluUmFuZ2UodCksYz1vLmdldFdvcmRBdFBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjp0LnN0YXJ0Q29sdW1ufSxhKTtpZighYylyZXR1cm4gbnVsbDtjb25zdCBsPW8uZ2V0VmFsdWVJblJhbmdlKGMpO3JldHVybiBFdC5JTlNUQU5DRS5uYXZpZ2F0ZVZhbHVlU2V0KHQscyxjLGwsbil9KSl9bG9hZEZvcmVpZ25Nb2R1bGUoZSx0LG4pe2NvbnN0IHI9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPWU9PmZ1bmN0aW9uKCl7Y29uc3Qgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQoZSxuKX0scj17fTtmb3IoY29uc3QgdCBvZiBlKXJbdF09bih0KTtyZXR1cm4gcn0obiwoKGUsdCk9PnRoaXMuX2hvc3QuZmhyKGUsdCkpKSxpPXtob3N0OnIsZ2V0TWlycm9yTW9kZWxzOigpPT50aGlzLl9nZXRNb2RlbHMoKX07cmV0dXJuIHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5Pyh0aGlzLl9mb3JlaWduTW9kdWxlPXRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5KGksdCksUHJvbWlzZS5yZXNvbHZlKFcodGhpcy5fZm9yZWlnbk1vZHVsZSkpKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdXNhZ2UiKSl9Zm1yKGUsdCl7aWYoIXRoaXMuX2ZvcmVpZ25Nb2R1bGV8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mb3JlaWduTW9kdWxlW2VdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIgb3IgbWV0aG9kOiAiK2UpKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9mb3JlaWduTW9kdWxlW2VdLmFwcGx5KHRoaXMuX2ZvcmVpZ25Nb2R1bGUsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19fUhuLl9kaWZmTGltaXQ9MWU1LEhuLl9zdWdnZXN0aW9uc0xpbWl0PTFlNCwiZnVuY3Rpb24iPT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmKE4ubW9uYWNvPXtlZGl0b3I6dm9pZCAwLGxhbmd1YWdlczp2b2lkIDAsQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2U6THQsRW1pdHRlcjpCLEtleUNvZGU6ZG4sS2V5TW9kOktuLFBvc2l0aW9uOlFlLFJhbmdlOmV0LFNlbGVjdGlvbjpLdCxTZWxlY3Rpb25EaXJlY3Rpb246RW4sTWFya2VyU2V2ZXJpdHk6bW4sTWFya2VyVGFnOmduLFVyaTpCZSxUb2tlbjpEbn0pO2xldCB6bj0hMTtmdW5jdGlvbiBHbihlKXtpZih6bilyZXR1cm47em49ITA7Y29uc3QgdD1uZXcgY2UoKGU9PntzZWxmLnBvc3RNZXNzYWdlKGUpfSksKHQ9Pm5ldyBIbih0LGUpKSk7c2VsZi5vbm1lc3NhZ2U9ZT0+e3Qub25tZXNzYWdlKGUuZGF0YSl9fQovKiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgKiBWZXJzaW9uOiAwLjM0LjAoOWQyNzg2ODViMDc4MTU4NDkxOTY0ZjhmZDdhYzk2MjhmZmZhMGYzMCkKICAgICAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQogICAgICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9tb25hY28tZWRpdG9yL2Jsb2IvbWFpbi9MSUNFTlNFLnR4dAogICAgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmZ1bmN0aW9uIEpuKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPWUubGVuZ3RoLHI9MCxpPSIiLG89MCxhPTE2LHM9MCxjPTAsbD0wLHU9MCxoPTA7ZnVuY3Rpb24gZih0LG4pe2Zvcih2YXIgaT0wLG89MDtpPHR8fCFuOyl7dmFyIGE9ZS5jaGFyQ29kZUF0KHIpO2lmKGE+PTQ4JiZhPD01NylvPTE2Km8rYS00ODtlbHNlIGlmKGE+PTY1JiZhPD03MClvPTE2Km8rYS02NSsxMDtlbHNle2lmKCEoYT49OTcmJmE8PTEwMikpYnJlYWs7bz0xNipvK2EtOTcrMTB9cisrLGkrK31yZXR1cm4gaTx0JiYobz0tMSksb31mdW5jdGlvbiBkKCl7aWYoaT0iIixoPTAsbz1yLGM9cyx1PWwscj49bilyZXR1cm4gbz1uLGE9MTc7dmFyIHQ9ZS5jaGFyQ29kZUF0KHIpO2lmKFhuKHQpKXtkb3tyKyssaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSx0PWUuY2hhckNvZGVBdChyKX13aGlsZShYbih0KSk7cmV0dXJuIGE9MTV9aWYoWm4odCkpcmV0dXJuIHIrKyxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLDEzPT09dCYmMTA9PT1lLmNoYXJDb2RlQXQocikmJihyKyssaSs9IlxuIikscysrLGw9cixhPTE0O3N3aXRjaCh0KXtjYXNlIDEyMzpyZXR1cm4gcisrLGE9MTtjYXNlIDEyNTpyZXR1cm4gcisrLGE9MjtjYXNlIDkxOnJldHVybiByKyssYT0zO2Nhc2UgOTM6cmV0dXJuIHIrKyxhPTQ7Y2FzZSA1ODpyZXR1cm4gcisrLGE9NjtjYXNlIDQ0OnJldHVybiByKyssYT01O2Nhc2UgMzQ6cmV0dXJuIHIrKyxpPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSIiLGk9cjs7KXtpZihyPj1uKXt0Kz1lLnN1YnN0cmluZyhpLHIpLGg9MjticmVha312YXIgbz1lLmNoYXJDb2RlQXQocik7aWYoMzQ9PT1vKXt0Kz1lLnN1YnN0cmluZyhpLHIpLHIrKzticmVha31pZig5MiE9PW8pe2lmKG8+PTAmJm88PTMxKXtpZihabihvKSl7dCs9ZS5zdWJzdHJpbmcoaSxyKSxoPTI7YnJlYWt9aD02fXIrK31lbHNle2lmKHQrPWUuc3Vic3RyaW5nKGksciksKytyPj1uKXtoPTI7YnJlYWt9c3dpdGNoKGUuY2hhckNvZGVBdChyKyspKXtjYXNlIDM0OnQrPSciJzticmVhaztjYXNlIDkyOnQrPSJcXCI7YnJlYWs7Y2FzZSA0Nzp0Kz0iLyI7YnJlYWs7Y2FzZSA5ODp0Kz0iXGIiO2JyZWFrO2Nhc2UgMTAyOnQrPSJcZiI7YnJlYWs7Y2FzZSAxMTA6dCs9IlxuIjticmVhaztjYXNlIDExNDp0Kz0iXHIiO2JyZWFrO2Nhc2UgMTE2OnQrPSJcdCI7YnJlYWs7Y2FzZSAxMTc6dmFyIGE9Zig0LCEwKTthPj0wP3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoYSk6aD00O2JyZWFrO2RlZmF1bHQ6aD01fWk9cn19cmV0dXJuIHR9KCksYT0xMDtjYXNlIDQ3OnZhciBkPXItMTtpZig0Nz09PWUuY2hhckNvZGVBdChyKzEpKXtmb3Iocis9MjtyPG4mJiFabihlLmNoYXJDb2RlQXQocikpOylyKys7cmV0dXJuIGk9ZS5zdWJzdHJpbmcoZCxyKSxhPTEyfWlmKDQyPT09ZS5jaGFyQ29kZUF0KHIrMSkpe3IrPTI7Zm9yKHZhciBnPW4tMSxwPSExO3I8Zzspe3ZhciBiPWUuY2hhckNvZGVBdChyKTtpZig0Mj09PWImJjQ3PT09ZS5jaGFyQ29kZUF0KHIrMSkpe3IrPTIscD0hMDticmVha31yKyssWm4oYikmJigxMz09PWImJjEwPT09ZS5jaGFyQ29kZUF0KHIpJiZyKysscysrLGw9cil9cmV0dXJuIHB8fChyKyssaD0xKSxpPWUuc3Vic3RyaW5nKGQsciksYT0xM31yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxyKyssYT0xNjtjYXNlIDQ1OmlmKGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCksKytyPT09bnx8IVluKGUuY2hhckNvZGVBdChyKSkpcmV0dXJuIGE9MTY7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gaSs9ZnVuY3Rpb24oKXt2YXIgdD1yO2lmKDQ4PT09ZS5jaGFyQ29kZUF0KHIpKXIrKztlbHNlIGZvcihyKys7cjxlLmxlbmd0aCYmWW4oZS5jaGFyQ29kZUF0KHIpKTspcisrO2lmKHI8ZS5sZW5ndGgmJjQ2PT09ZS5jaGFyQ29kZUF0KHIpKXtpZighKCsrcjxlLmxlbmd0aCYmWW4oZS5jaGFyQ29kZUF0KHIpKSkpcmV0dXJuIGg9MyxlLnN1YnN0cmluZyh0LHIpO2ZvcihyKys7cjxlLmxlbmd0aCYmWW4oZS5jaGFyQ29kZUF0KHIpKTspcisrfXZhciBuPXI7aWYocjxlLmxlbmd0aCYmKDY5PT09ZS5jaGFyQ29kZUF0KHIpfHwxMDE9PT1lLmNoYXJDb2RlQXQocikpKWlmKCgrK3I8ZS5sZW5ndGgmJjQzPT09ZS5jaGFyQ29kZUF0KHIpfHw0NT09PWUuY2hhckNvZGVBdChyKSkmJnIrKyxyPGUubGVuZ3RoJiZZbihlLmNoYXJDb2RlQXQocikpKXtmb3IocisrO3I8ZS5sZW5ndGgmJlluKGUuY2hhckNvZGVBdChyKSk7KXIrKztuPXJ9ZWxzZSBoPTM7cmV0dXJuIGUuc3Vic3RyaW5nKHQsbil9KCksYT0xMTtkZWZhdWx0OmZvcig7cjxuJiZtKHQpOylyKyssdD1lLmNoYXJDb2RlQXQocik7aWYobyE9PXIpe3N3aXRjaChpPWUuc3Vic3RyaW5nKG8scikpe2Nhc2UidHJ1ZSI6cmV0dXJuIGE9ODtjYXNlImZhbHNlIjpyZXR1cm4gYT05O2Nhc2UibnVsbCI6cmV0dXJuIGE9N31yZXR1cm4gYT0xNn1yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxyKyssYT0xNn19ZnVuY3Rpb24gbShlKXtpZihYbihlKXx8Wm4oZSkpcmV0dXJuITE7c3dpdGNoKGUpe2Nhc2UgMTI1OmNhc2UgOTM6Y2FzZSAxMjM6Y2FzZSA5MTpjYXNlIDM0OmNhc2UgNTg6Y2FzZSA0NDpjYXNlIDQ3OnJldHVybiExfXJldHVybiEwfXJldHVybntzZXRQb3NpdGlvbjpmdW5jdGlvbihlKXtyPWUsaT0iIixvPTAsYT0xNixoPTB9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNjYW46dD9mdW5jdGlvbigpe3ZhciBlO2Rve2U9ZCgpfXdoaWxlKGU+PTEyJiZlPD0xNSk7cmV0dXJuIGV9OmQsZ2V0VG9rZW46ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZ2V0VG9rZW5WYWx1ZTpmdW5jdGlvbigpe3JldHVybiBpfSxnZXRUb2tlbk9mZnNldDpmdW5jdGlvbigpe3JldHVybiBvfSxnZXRUb2tlbkxlbmd0aDpmdW5jdGlvbigpe3JldHVybiByLW99LGdldFRva2VuU3RhcnRMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGdldFRva2VuU3RhcnRDaGFyYWN0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gby11fSxnZXRUb2tlbkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGh9fX1mdW5jdGlvbiBYbihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTE9PT1lfHwxMj09PWV8fDE2MD09PWV8fDU3NjA9PT1lfHxlPj04MTkyJiZlPD04MjAzfHw4MjM5PT09ZXx8ODI4Nz09PWV8fDEyMjg4PT09ZXx8NjUyNzk9PT1lfWZ1bmN0aW9uIFpuKGUpe3JldHVybiAxMD09PWV8fDEzPT09ZXx8ODIzMj09PWV8fDgyMzM9PT1lfWZ1bmN0aW9uIFluKGUpe3JldHVybiBlPj00OCYmZTw9NTd9ZnVuY3Rpb24gUW4oZSx0LG4pe3ZhciByLGksbyxhLHM7aWYodCl7Zm9yKGE9dC5vZmZzZXQscz1hK3QubGVuZ3RoLG89YTtvPjAmJiF0cihlLG8tMSk7KW8tLTtmb3IodmFyIGM9cztjPGUubGVuZ3RoJiYhdHIoZSxjKTspYysrO2k9ZS5zdWJzdHJpbmcobyxjKSxyPWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPTAsaT10LnRhYlNpemV8fDQ7Zm9yKDtuPGUubGVuZ3RoOyl7dmFyIG89ZS5jaGFyQXQobik7aWYoIiAiPT09bylyKys7ZWxzZXtpZigiXHQiIT09bylicmVhaztyKz1pfW4rK31yZXR1cm4gTWF0aC5mbG9vcihyL2kpfShpLG4pfWVsc2UgaT1lLHI9MCxvPTAsYT0wLHM9ZS5sZW5ndGg7dmFyIGwsdT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10LmNoYXJBdChuKTtpZigiXHIiPT09cilyZXR1cm4gbisxPHQubGVuZ3RoJiYiXG4iPT09dC5jaGFyQXQobisxKT8iXHJcbiI6IlxyIjtpZigiXG4iPT09cilyZXR1cm4iXG4ifXJldHVybiBlJiZlLmVvbHx8IlxuIn0obixlKSxoPSExLGY9MDtsPW4uaW5zZXJ0U3BhY2VzP2VyKCIgIixuLnRhYlNpemV8fDQpOiJcdCI7dmFyIGQ9Sm4oaSwhMSksbT0hMTtmdW5jdGlvbiBnKCl7cmV0dXJuIHUrZXIobCxyK2YpfWZ1bmN0aW9uIHAoKXt2YXIgZT1kLnNjYW4oKTtmb3IoaD0hMTsxNT09PWV8fDE0PT09ZTspaD1ofHwxND09PWUsZT1kLnNjYW4oKTtyZXR1cm4gbT0xNj09PWV8fDAhPT1kLmdldFRva2VuRXJyb3IoKSxlfXZhciBiPVtdO2Z1bmN0aW9uIHYobixyLGkpe218fHQmJiEocjxzJiZpPmEpfHxlLnN1YnN0cmluZyhyLGkpPT09bnx8Yi5wdXNoKHtvZmZzZXQ6cixsZW5ndGg6aS1yLGNvbnRlbnQ6bn0pfXZhciB5PXAoKTtpZigxNyE9PXkpe3ZhciBDPWQuZ2V0VG9rZW5PZmZzZXQoKStvO3YoZXIobCxyKSxvLEMpfWZvcig7MTchPT15Oyl7Zm9yKHZhciB3PWQuZ2V0VG9rZW5PZmZzZXQoKStkLmdldFRva2VuTGVuZ3RoKCkrbyxfPXAoKSxTPSIiLEE9ITE7IWgmJigxMj09PV98fDEzPT09Xyk7KXt2KCIgIix3LGQuZ2V0VG9rZW5PZmZzZXQoKStvKSx3PWQuZ2V0VG9rZW5PZmZzZXQoKStkLmdldFRva2VuTGVuZ3RoKCkrbyxTPShBPTEyPT09Xyk/ZygpOiIiLF89cCgpfWlmKDI9PT1fKTEhPT15JiYoZi0tLFM9ZygpKTtlbHNlIGlmKDQ9PT1fKTMhPT15JiYoZi0tLFM9ZygpKTtlbHNle3N3aXRjaCh5KXtjYXNlIDM6Y2FzZSAxOmYrKyxTPWcoKTticmVhaztjYXNlIDU6Y2FzZSAxMjpTPWcoKTticmVhaztjYXNlIDEzOmg/Uz1nKCk6QXx8KFM9IiAiKTticmVhaztjYXNlIDY6QXx8KFM9IiAiKTticmVhaztjYXNlIDEwOmlmKDY9PT1fKXtBfHwoUz0iIik7YnJlYWt9Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMTpjYXNlIDI6Y2FzZSA0OjEyPT09X3x8MTM9PT1fP0F8fChTPSIgIik6NSE9PV8mJjE3IT09XyYmKG09ITApO2JyZWFrO2Nhc2UgMTY6bT0hMH0haHx8MTIhPT1fJiYxMyE9PV98fChTPWcoKSl9MTc9PT1fJiYoUz1uLmluc2VydEZpbmFsTmV3bGluZT91OiIiKSx2KFMsdyxkLmdldFRva2VuT2Zmc2V0KCkrbykseT1ffXJldHVybiBifWZ1bmN0aW9uIGVyKGUsdCl7Zm9yKHZhciBuPSIiLHI9MDtyPHQ7cisrKW4rPWU7cmV0dXJuIG59ZnVuY3Rpb24gdHIoZSx0KXtyZXR1cm4tMSE9PSJcclxuIi5pbmRleE9mKGUuY2hhckF0KHQpKX12YXIgbnI7c2VsZi5vbm1lc3NhZ2U9ZT0+e3pufHxHbihudWxsKX0sKG5yfHwobnI9e30pKS5ERUZBVUxUPXthbGxvd1RyYWlsaW5nQ29tbWE6ITF9O3ZhciBycixpcixvcixhcixzcixjcixscix1cixocixmcixkcixtcixncixwcixicix2cix5cixDcix3cixfcixTcixBcixFcix4cixOcixrcixMcixUcixPcixJcixNcixQcixScixWcixGcixEcixLcixqcixVcixCcixxciwkcixXcixIcix6cixHcixKcixYcixacixZcj1KbixRcj1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPW5yLkRFRkFVTFQpO3ZhciByPW51bGwsaT1bXSxvPVtdO2Z1bmN0aW9uIGEoZSl7QXJyYXkuaXNBcnJheShpKT9pLnB1c2goZSk6bnVsbCE9PXImJihpW3JdPWUpfXJldHVybiBmdW5jdGlvbihlLHQsbil7dm9pZCAwPT09biYmKG49bnIuREVGQVVMVCk7dmFyIHI9Sm4oZSwhMSk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZT9mdW5jdGlvbigpe3JldHVybiBlKHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT9mdW5jdGlvbih0KXtyZXR1cm4gZSh0LHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19dmFyIGE9aSh0Lm9uT2JqZWN0QmVnaW4pLHM9byh0Lm9uT2JqZWN0UHJvcGVydHkpLGM9aSh0Lm9uT2JqZWN0RW5kKSxsPWkodC5vbkFycmF5QmVnaW4pLHU9aSh0Lm9uQXJyYXlFbmQpLGg9byh0Lm9uTGl0ZXJhbFZhbHVlKSxmPW8odC5vblNlcGFyYXRvciksZD1pKHQub25Db21tZW50KSxtPW8odC5vbkVycm9yKSxnPW4mJm4uZGlzYWxsb3dDb21tZW50cyxwPW4mJm4uYWxsb3dUcmFpbGluZ0NvbW1hO2Z1bmN0aW9uIGIoKXtmb3IoOzspe3ZhciBlPXIuc2NhbigpO3N3aXRjaChyLmdldFRva2VuRXJyb3IoKSl7Y2FzZSA0OnYoMTQpO2JyZWFrO2Nhc2UgNTp2KDE1KTticmVhaztjYXNlIDM6digxMyk7YnJlYWs7Y2FzZSAxOmd8fHYoMTEpO2JyZWFrO2Nhc2UgMjp2KDEyKTticmVhaztjYXNlIDY6digxNil9c3dpdGNoKGUpe2Nhc2UgMTI6Y2FzZSAxMzpnP3YoMTApOmQoKTticmVhaztjYXNlIDE2OnYoMSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIGV9fX1mdW5jdGlvbiB2KGUsdCxuKXtpZih2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49W10pLG0oZSksdC5sZW5ndGgrbi5sZW5ndGg+MClmb3IodmFyIGk9ci5nZXRUb2tlbigpOzE3IT09aTspe2lmKC0xIT09dC5pbmRleE9mKGkpKXtiKCk7YnJlYWt9aWYoLTEhPT1uLmluZGV4T2YoaSkpYnJlYWs7aT1iKCl9fWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ci5nZXRUb2tlblZhbHVlKCk7cmV0dXJuIGU/aCh0KTpzKHQpLGIoKSwhMH1mdW5jdGlvbiBDKCl7c3dpdGNoKHIuZ2V0VG9rZW4oKSl7Y2FzZSAxMTp2YXIgZT1yLmdldFRva2VuVmFsdWUoKSx0PU51bWJlcihlKTtpc05hTih0KSYmKHYoMiksdD0wKSxoKHQpO2JyZWFrO2Nhc2UgNzpoKG51bGwpO2JyZWFrO2Nhc2UgODpoKCEwKTticmVhaztjYXNlIDk6aCghMSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gYigpLCEwfWZ1bmN0aW9uIHcoKXtyZXR1cm4gMTAhPT1yLmdldFRva2VuKCk/KHYoMyxbXSxbMiw1XSksITEpOih5KCExKSw2PT09ci5nZXRUb2tlbigpPyhmKCI6IiksYigpLEEoKXx8dig0LFtdLFsyLDVdKSk6dig1LFtdLFsyLDVdKSwhMCl9ZnVuY3Rpb24gXygpe2EoKSxiKCk7Zm9yKHZhciBlPSExOzIhPT1yLmdldFRva2VuKCkmJjE3IT09ci5nZXRUb2tlbigpOyl7aWYoNT09PXIuZ2V0VG9rZW4oKSl7aWYoZXx8dig0LFtdLFtdKSxmKCIsIiksYigpLDI9PT1yLmdldFRva2VuKCkmJnApYnJlYWt9ZWxzZSBlJiZ2KDYsW10sW10pO3coKXx8dig0LFtdLFsyLDVdKSxlPSEwfXJldHVybiBjKCksMiE9PXIuZ2V0VG9rZW4oKT92KDcsWzJdLFtdKTpiKCksITB9ZnVuY3Rpb24gUygpe2woKSxiKCk7Zm9yKHZhciBlPSExOzQhPT1yLmdldFRva2VuKCkmJjE3IT09ci5nZXRUb2tlbigpOyl7aWYoNT09PXIuZ2V0VG9rZW4oKSl7aWYoZXx8dig0LFtdLFtdKSxmKCIsIiksYigpLDQ9PT1yLmdldFRva2VuKCkmJnApYnJlYWt9ZWxzZSBlJiZ2KDYsW10sW10pO0EoKXx8dig0LFtdLFs0LDVdKSxlPSEwfXJldHVybiB1KCksNCE9PXIuZ2V0VG9rZW4oKT92KDgsWzRdLFtdKTpiKCksITB9ZnVuY3Rpb24gQSgpe3N3aXRjaChyLmdldFRva2VuKCkpe2Nhc2UgMzpyZXR1cm4gUygpO2Nhc2UgMTpyZXR1cm4gXygpO2Nhc2UgMTA6cmV0dXJuIHkoITApO2RlZmF1bHQ6cmV0dXJuIEMoKX19aWYoYigpLDE3PT09ci5nZXRUb2tlbigpKXJldHVybiEhbi5hbGxvd0VtcHR5Q29udGVudHx8KHYoNCxbXSxbXSksITEpO2lmKCFBKCkpcmV0dXJuIHYoNCxbXSxbXSksITE7MTchPT1yLmdldFRva2VuKCkmJnYoOSxbXSxbXSl9KGUse29uT2JqZWN0QmVnaW46ZnVuY3Rpb24oKXt2YXIgZT17fTthKGUpLG8ucHVzaChpKSxpPWUscj1udWxsfSxvbk9iamVjdFByb3BlcnR5OmZ1bmN0aW9uKGUpe3I9ZX0sb25PYmplY3RFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uQXJyYXlCZWdpbjpmdW5jdGlvbigpe3ZhciBlPVtdO2EoZSksby5wdXNoKGkpLGk9ZSxyPW51bGx9LG9uQXJyYXlFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uTGl0ZXJhbFZhbHVlOmEsb25FcnJvcjpmdW5jdGlvbihlLG4scil7dC5wdXNoKHtlcnJvcjplLG9mZnNldDpuLGxlbmd0aDpyfSl9fSxuKSxpWzBdfSxlaT1mdW5jdGlvbiBlKHQsbixyKXtpZih2b2lkIDA9PT1yJiYocj0hMSksZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0hMSksdD49ZS5vZmZzZXQmJnQ8ZS5vZmZzZXQrZS5sZW5ndGh8fG4mJnQ9PT1lLm9mZnNldCtlLmxlbmd0aH0odCxuLHIpKXt2YXIgaT10LmNoaWxkcmVuO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aCYmaVtvXS5vZmZzZXQ8PW47bysrKXt2YXIgYT1lKGlbb10sbixyKTtpZihhKXJldHVybiBhfXJldHVybiB0fX0sdGk9ZnVuY3Rpb24gZSh0KXtpZighdC5wYXJlbnR8fCF0LnBhcmVudC5jaGlsZHJlbilyZXR1cm5bXTt2YXIgbj1lKHQucGFyZW50KTtpZigicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIHI9dC5wYXJlbnQuY2hpbGRyZW5bMF0udmFsdWU7bi5wdXNoKHIpfWVsc2UgaWYoImFycmF5Ij09PXQucGFyZW50LnR5cGUpe3ZhciBpPXQucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodCk7LTEhPT1pJiZuLnB1c2goaSl9cmV0dXJuIG59LG5pPWZ1bmN0aW9uIGUodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHQuY2hpbGRyZW4ubWFwKGUpO2Nhc2Uib2JqZWN0Ijpmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPTAsaT10LmNoaWxkcmVuO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdLGE9by5jaGlsZHJlblsxXTthJiYobltvLmNoaWxkcmVuWzBdLnZhbHVlXT1lKGEpKX1yZXR1cm4gbjtjYXNlIm51bGwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdC52YWx1ZTtkZWZhdWx0OnJldHVybn19O2Z1bmN0aW9uIHJpKGUsdCl7aWYoZT09PXQpcmV0dXJuITA7aWYobnVsbD09ZXx8bnVsbD09dClyZXR1cm4hMTtpZih0eXBlb2YgZSE9dHlwZW9mIHQpcmV0dXJuITE7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoZSkhPT1BcnJheS5pc0FycmF5KHQpKXJldHVybiExO3ZhciBuLHI7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKCFyaShlW25dLHRbbl0pKXJldHVybiExfWVsc2V7dmFyIGk9W107Zm9yKHIgaW4gZSlpLnB1c2gocik7aS5zb3J0KCk7dmFyIG89W107Zm9yKHIgaW4gdClvLnB1c2gocik7aWYoby5zb3J0KCksIXJpKGksbykpcmV0dXJuITE7Zm9yKG49MDtuPGkubGVuZ3RoO24rKylpZighcmkoZVtpW25dXSx0W2lbbl1dKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBpaShlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9ZnVuY3Rpb24gb2koZSl7cmV0dXJuIHZvaWQgMCE9PWV9ZnVuY3Rpb24gYWkoZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX1mdW5jdGlvbiBzaShlLHQpe3ZhciBuPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiBuPjA/ZS5sYXN0SW5kZXhPZih0KT09PW46MD09PW4mJmU9PT10fWZ1bmN0aW9uIGNpKGUpe3ZhciB0PSIiOyhmdW5jdGlvbihlLHQpe2lmKGUubGVuZ3RoPHQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKGVbbl0hPT10W25dKXJldHVybiExO3JldHVybiEwfSkoZSwiKD9pKSIpJiYoZT1lLnN1YnN0cmluZyg0KSx0PSJpIik7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCsidSIpfWNhdGNoKG4pe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChlLHQpfWNhdGNoKGUpe3JldHVybn19fShpcj1ycnx8KHJyPXt9KSkuTUlOX1ZBTFVFPS0yMTQ3NDgzNjQ4LGlyLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3LChhcj1vcnx8KG9yPXt9KSkuTUlOX1ZBTFVFPTAsYXIuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsKGNyPXNyfHwoc3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PU51bWJlci5NQVhfVkFMVUUmJihlPW9yLk1BWF9WQUxVRSksdD09PU51bWJlci5NQVhfVkFMVUUmJih0PW9yLk1BWF9WQUxVRSkse2xpbmU6ZSxjaGFyYWN0ZXI6dH19LGNyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLm9iamVjdExpdGVyYWwodCkmJmNvLnVpbnRlZ2VyKHQubGluZSkmJmNvLnVpbnRlZ2VyKHQuY2hhcmFjdGVyKX0sKHVyPWxyfHwobHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYoY28udWludGVnZXIoZSkmJmNvLnVpbnRlZ2VyKHQpJiZjby51aW50ZWdlcihuKSYmY28udWludGVnZXIocikpcmV0dXJue3N0YXJ0OnNyLmNyZWF0ZShlLHQpLGVuZDpzci5jcmVhdGUobixyKX07aWYoc3IuaXMoZSkmJnNyLmlzKHQpKXJldHVybntzdGFydDplLGVuZDp0fTt0aHJvdyBuZXcgRXJyb3IoIlJhbmdlI2NyZWF0ZSBjYWxsZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50c1siK2UrIiwgIit0KyIsICIrbisiLCAiK3IrIl0iKX0sdXIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28ub2JqZWN0TGl0ZXJhbCh0KSYmc3IuaXModC5zdGFydCkmJnNyLmlzKHQuZW5kKX0sKGZyPWhyfHwoaHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dXJpOmUscmFuZ2U6dH19LGZyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLmRlZmluZWQodCkmJmxyLmlzKHQucmFuZ2UpJiYoY28uc3RyaW5nKHQudXJpKXx8Y28udW5kZWZpbmVkKHQudXJpKSl9LChtcj1kcnx8KGRyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybnt0YXJnZXRVcmk6ZSx0YXJnZXRSYW5nZTp0LHRhcmdldFNlbGVjdGlvblJhbmdlOm4sb3JpZ2luU2VsZWN0aW9uUmFuZ2U6cn19LG1yLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLmRlZmluZWQodCkmJmxyLmlzKHQudGFyZ2V0UmFuZ2UpJiZjby5zdHJpbmcodC50YXJnZXRVcmkpJiYobHIuaXModC50YXJnZXRTZWxlY3Rpb25SYW5nZSl8fGNvLnVuZGVmaW5lZCh0LnRhcmdldFNlbGVjdGlvblJhbmdlKSkmJihsci5pcyh0Lm9yaWdpblNlbGVjdGlvblJhbmdlKXx8Y28udW5kZWZpbmVkKHQub3JpZ2luU2VsZWN0aW9uUmFuZ2UpKX0sKHByPWdyfHwoZ3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJue3JlZDplLGdyZWVuOnQsYmx1ZTpuLGFscGhhOnJ9fSxwci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBjby5udW1iZXJSYW5nZSh0LnJlZCwwLDEpJiZjby5udW1iZXJSYW5nZSh0LmdyZWVuLDAsMSkmJmNvLm51bWJlclJhbmdlKHQuYmx1ZSwwLDEpJiZjby5udW1iZXJSYW5nZSh0LmFscGhhLDAsMSl9LCh2cj1icnx8KGJyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsY29sb3I6dH19LHZyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGxyLmlzKHQucmFuZ2UpJiZnci5pcyh0LmNvbG9yKX0sKENyPXlyfHwoeXI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntsYWJlbDplLHRleHRFZGl0OnQsYWRkaXRpb25hbFRleHRFZGl0czpufX0sQ3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28uc3RyaW5nKHQubGFiZWwpJiYoY28udW5kZWZpbmVkKHQudGV4dEVkaXQpfHxWci5pcyh0KSkmJihjby51bmRlZmluZWQodC5hZGRpdGlvbmFsVGV4dEVkaXRzKXx8Y28udHlwZWRBcnJheSh0LmFkZGl0aW9uYWxUZXh0RWRpdHMsVnIuaXMpKX0sKF9yPXdyfHwod3I9e30pKS5Db21tZW50PSJjb21tZW50Iixfci5JbXBvcnRzPSJpbXBvcnRzIixfci5SZWdpb249InJlZ2lvbiIsKEFyPVNyfHwoU3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz17c3RhcnRMaW5lOmUsZW5kTGluZTp0fTtyZXR1cm4gY28uZGVmaW5lZChuKSYmKG8uc3RhcnRDaGFyYWN0ZXI9biksY28uZGVmaW5lZChyKSYmKG8uZW5kQ2hhcmFjdGVyPXIpLGNvLmRlZmluZWQoaSkmJihvLmtpbmQ9aSksb30sQXIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28udWludGVnZXIodC5zdGFydExpbmUpJiZjby51aW50ZWdlcih0LnN0YXJ0TGluZSkmJihjby51bmRlZmluZWQodC5zdGFydENoYXJhY3Rlcil8fGNvLnVpbnRlZ2VyKHQuc3RhcnRDaGFyYWN0ZXIpKSYmKGNvLnVuZGVmaW5lZCh0LmVuZENoYXJhY3Rlcil8fGNvLnVpbnRlZ2VyKHQuZW5kQ2hhcmFjdGVyKSkmJihjby51bmRlZmluZWQodC5raW5kKXx8Y28uc3RyaW5nKHQua2luZCkpfSwoeHI9RXJ8fChFcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntsb2NhdGlvbjplLG1lc3NhZ2U6dH19LHhyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLmRlZmluZWQodCkmJmhyLmlzKHQubG9jYXRpb24pJiZjby5zdHJpbmcodC5tZXNzYWdlKX0sKGtyPU5yfHwoTnI9e30pKS5FcnJvcj0xLGtyLldhcm5pbmc9Mixrci5JbmZvcm1hdGlvbj0zLGtyLkhpbnQ9NCwoVHI9THJ8fChMcj17fSkpLlVubmVjZXNzYXJ5PTEsVHIuRGVwcmVjYXRlZD0yLChPcnx8KE9yPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gbnVsbCE9dCYmY28uc3RyaW5nKHQuaHJlZil9LChNcj1Jcnx8KElyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT17cmFuZ2U6ZSxtZXNzYWdlOnR9O3JldHVybiBjby5kZWZpbmVkKG4pJiYoYS5zZXZlcml0eT1uKSxjby5kZWZpbmVkKHIpJiYoYS5jb2RlPXIpLGNvLmRlZmluZWQoaSkmJihhLnNvdXJjZT1pKSxjby5kZWZpbmVkKG8pJiYoYS5yZWxhdGVkSW5mb3JtYXRpb249byksYX0sTXIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lO3JldHVybiBjby5kZWZpbmVkKG4pJiZsci5pcyhuLnJhbmdlKSYmY28uc3RyaW5nKG4ubWVzc2FnZSkmJihjby5udW1iZXIobi5zZXZlcml0eSl8fGNvLnVuZGVmaW5lZChuLnNldmVyaXR5KSkmJihjby5pbnRlZ2VyKG4uY29kZSl8fGNvLnN0cmluZyhuLmNvZGUpfHxjby51bmRlZmluZWQobi5jb2RlKSkmJihjby51bmRlZmluZWQobi5jb2RlRGVzY3JpcHRpb24pfHxjby5zdHJpbmcobnVsbD09PSh0PW4uY29kZURlc2NyaXB0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ocmVmKSkmJihjby5zdHJpbmcobi5zb3VyY2UpfHxjby51bmRlZmluZWQobi5zb3VyY2UpKSYmKGNvLnVuZGVmaW5lZChuLnJlbGF0ZWRJbmZvcm1hdGlvbil8fGNvLnR5cGVkQXJyYXkobi5yZWxhdGVkSW5mb3JtYXRpb24sRXIuaXMpKX0sKFJyPVByfHwoUHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT17dGl0bGU6ZSxjb21tYW5kOnR9O3JldHVybiBjby5kZWZpbmVkKG4pJiZuLmxlbmd0aD4wJiYoaS5hcmd1bWVudHM9biksaX0sUnIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28uZGVmaW5lZCh0KSYmY28uc3RyaW5nKHQudGl0bGUpJiZjby5zdHJpbmcodC5jb21tYW5kKX0sKEZyPVZyfHwoVnI9e30pKS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDp0fX0sRnIuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOntzdGFydDplLGVuZDplfSxuZXdUZXh0OnR9fSxGci5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIn19LEZyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLm9iamVjdExpdGVyYWwodCkmJmNvLnN0cmluZyh0Lm5ld1RleHQpJiZsci5pcyh0LnJhbmdlKX0sKEtyPURyfHwoRHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtsYWJlbDplfTtyZXR1cm4gdm9pZCAwIT09dCYmKHIubmVlZHNDb25maXJtYXRpb249dCksdm9pZCAwIT09biYmKHIuZGVzY3JpcHRpb249bikscn0sS3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdm9pZCAwIT09dCYmY28ub2JqZWN0TGl0ZXJhbCh0KSYmY28uc3RyaW5nKHQubGFiZWwpJiYoY28uYm9vbGVhbih0Lm5lZWRzQ29uZmlybWF0aW9uKXx8dm9pZCAwPT09dC5uZWVkc0NvbmZpcm1hdGlvbikmJihjby5zdHJpbmcodC5kZXNjcmlwdGlvbil8fHZvaWQgMD09PXQuZGVzY3JpcHRpb24pfSwoanJ8fChqcj17fSkpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0sKEJyPVVyfHwoVXI9e30pKS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OnQsYW5ub3RhdGlvbklkOm59fSxCci5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTp7c3RhcnQ6ZSxlbmQ6ZX0sbmV3VGV4dDp0LGFubm90YXRpb25JZDpufX0sQnIuZGVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIixhbm5vdGF0aW9uSWQ6dH19LEJyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIFZyLmlzKHQpJiYoRHIuaXModC5hbm5vdGF0aW9uSWQpfHxqci5pcyh0LmFubm90YXRpb25JZCkpfSwoJHI9cXJ8fChxcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0ZXh0RG9jdW1lbnQ6ZSxlZGl0czp0fX0sJHIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28uZGVmaW5lZCh0KSYmZGkuaXModC50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KHQuZWRpdHMpfSwoSHI9V3J8fChXcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e2tpbmQ6ImNyZWF0ZSIsdXJpOmV9O3JldHVybiB2b2lkIDA9PT10fHx2b2lkIDA9PT10Lm92ZXJ3cml0ZSYmdm9pZCAwPT09dC5pZ25vcmVJZkV4aXN0c3x8KHIub3B0aW9ucz10KSx2b2lkIDAhPT1uJiYoci5hbm5vdGF0aW9uSWQ9bikscn0sSHIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmImNyZWF0ZSI9PT10LmtpbmQmJmNvLnN0cmluZyh0LnVyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMub3ZlcndyaXRlfHxjby5ib29sZWFuKHQub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8Y28uYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8anIuaXModC5hbm5vdGF0aW9uSWQpKX0sKEdyPXpyfHwoenI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOmUsbmV3VXJpOnR9O3JldHVybiB2b2lkIDA9PT1ufHx2b2lkIDA9PT1uLm92ZXJ3cml0ZSYmdm9pZCAwPT09bi5pZ25vcmVJZkV4aXN0c3x8KGkub3B0aW9ucz1uKSx2b2lkIDAhPT1yJiYoaS5hbm5vdGF0aW9uSWQ9ciksaX0sR3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmInJlbmFtZSI9PT10LmtpbmQmJmNvLnN0cmluZyh0Lm9sZFVyaSkmJmNvLnN0cmluZyh0Lm5ld1VyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMub3ZlcndyaXRlfHxjby5ib29sZWFuKHQub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8Y28uYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8anIuaXModC5hbm5vdGF0aW9uSWQpKX0sKFhyPUpyfHwoSnI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtraW5kOiJkZWxldGUiLHVyaTplfTtyZXR1cm4gdm9pZCAwPT09dHx8dm9pZCAwPT09dC5yZWN1cnNpdmUmJnZvaWQgMD09PXQuaWdub3JlSWZOb3RFeGlzdHN8fChyLm9wdGlvbnM9dCksdm9pZCAwIT09biYmKHIuYW5ub3RhdGlvbklkPW4pLHJ9LFhyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJiJkZWxldGUiPT09dC5raW5kJiZjby5zdHJpbmcodC51cmkpJiYodm9pZCAwPT09dC5vcHRpb25zfHwodm9pZCAwPT09dC5vcHRpb25zLnJlY3Vyc2l2ZXx8Y28uYm9vbGVhbih0Lm9wdGlvbnMucmVjdXJzaXZlKSkmJih2b2lkIDA9PT10Lm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHN8fGNvLmJvb2xlYW4odC5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzKSkpJiYodm9pZCAwPT09dC5hbm5vdGF0aW9uSWR8fGpyLmlzKHQuYW5ub3RhdGlvbklkKSl9LChacnx8KFpyPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmKHZvaWQgMCE9PXQuY2hhbmdlc3x8dm9pZCAwIT09dC5kb2N1bWVudENoYW5nZXMpJiYodm9pZCAwPT09dC5kb2N1bWVudENoYW5nZXN8fHQuZG9jdW1lbnRDaGFuZ2VzLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gY28uc3RyaW5nKGUua2luZCk/V3IuaXMoZSl8fHpyLmlzKGUpfHxKci5pcyhlKTpxci5pcyhlKX0pKSl9O3ZhciBsaSx1aSxoaSxmaSxkaSxtaSxnaSxwaSxiaSx2aSx5aSxDaSx3aSxfaSxTaSxBaSxFaSx4aSxOaSxraSxMaSxUaSxPaSxJaSxNaSxQaSxSaSxWaSxGaSxEaSxLaSxqaSxVaSxCaSxxaSwkaSxXaSxIaSx6aSxHaSxKaSxYaSxaaSxZaSxRaSxlbyx0byxubyxybyxpbyxvbyxhbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmVkaXRzPWUsdGhpcy5jaGFuZ2VBbm5vdGF0aW9ucz10fXJldHVybiBlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09bj9yPVZyLmluc2VydChlLHQpOmpyLmlzKG4pPyhpPW4scj1Vci5pbnNlcnQoZSx0LG4pKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxpPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKG4pLHI9VXIuaW5zZXJ0KGUsdCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LGUucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09bj9yPVZyLnJlcGxhY2UoZSx0KTpqci5pcyhuKT8oaT1uLHI9VXIucmVwbGFjZShlLHQsbikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLGk9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2Uobikscj1Vci5yZXBsYWNlKGUsdCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYodm9pZCAwPT09dD9uPVZyLmRlbChlKTpqci5pcyh0KT8ocj10LG49VXIuZGVsKGUsdCkpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLHI9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UodCksbj1Vci5kZWwoZSxyKSksdGhpcy5lZGl0cy5wdXNoKG4pLHZvaWQgMCE9PXIpcmV0dXJuIHJ9LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmVkaXRzLnB1c2goZSl9LGUucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZWRpdHMuc3BsaWNlKDAsdGhpcy5lZGl0cy5sZW5ndGgpfSxlLnByb3RvdHlwZS5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiVGV4dCBlZGl0IGNoYW5nZSBpcyBub3QgY29uZmlndXJlZCB0byBtYW5hZ2UgY2hhbmdlIGFubm90YXRpb25zLiIpfSxlfSgpLHNvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLl9hbm5vdGF0aW9ucz12b2lkIDA9PT1lP09iamVjdC5jcmVhdGUobnVsbCk6ZSx0aGlzLl9jb3VudGVyPTAsdGhpcy5fc2l6ZT0wfXJldHVybiBlLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm1hbmFnZT1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKGpyLmlzKGUpP249ZToobj10aGlzLm5leHRJZCgpLHQ9ZSksdm9pZCAwIT09dGhpcy5fYW5ub3RhdGlvbnNbbl0pdGhyb3cgbmV3IEVycm9yKCJJZCAiK24rIiBpcyBhbHJlYWR5IGluIHVzZS4iKTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBFcnJvcigiTm8gYW5ub3RhdGlvbiBwcm92aWRlZCBmb3IgaWQgIituKTtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnNbbl09dCx0aGlzLl9zaXplKyssbn0sZS5wcm90b3R5cGUubmV4dElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvdW50ZXIrKyx0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCl9LGV9KCk7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzO3RoaXMuX3RleHRFZGl0Q2hhbmdlcz1PYmplY3QuY3JlYXRlKG51bGwpLHZvaWQgMCE9PWU/KHRoaXMuX3dvcmtzcGFjZUVkaXQ9ZSxlLmRvY3VtZW50Q2hhbmdlcz8odGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IHNvKGUuY2hhbmdlQW5ub3RhdGlvbnMpLGUuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCksZS5kb2N1bWVudENoYW5nZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYocXIuaXMoZSkpe3ZhciBuPW5ldyBhbyhlLmVkaXRzLHQuX2NoYW5nZUFubm90YXRpb25zKTt0Ll90ZXh0RWRpdENoYW5nZXNbZS50ZXh0RG9jdW1lbnQudXJpXT1ufX0pKSk6ZS5jaGFuZ2VzJiZPYmplY3Qua2V5cyhlLmNoYW5nZXMpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPW5ldyBhbyhlLmNoYW5nZXNbbl0pO3QuX3RleHRFZGl0Q2hhbmdlc1tuXT1yfSkpKTp0aGlzLl93b3Jrc3BhY2VFZGl0PXt9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZWRpdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDAhPT10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyYmKDA9PT10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5zaXplP3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dm9pZCAwOnRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCkpLHRoaXMuX3dvcmtzcGFjZUVkaXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZ2V0VGV4dEVkaXRDaGFuZ2U9ZnVuY3Rpb24oZSl7aWYoZGkuaXMoZSkpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHQ9e3VyaTplLnVyaSx2ZXJzaW9uOmUudmVyc2lvbn07aWYoIShyPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0LnVyaV0pKXt2YXIgbj17dGV4dERvY3VtZW50OnQsZWRpdHM6aT1bXX07dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChuKSxyPW5ldyBhbyhpLHRoaXMuX2NoYW5nZUFubm90YXRpb25zKSx0aGlzLl90ZXh0RWRpdENoYW5nZXNbdC51cmldPXJ9cmV0dXJuIHJ9aWYodGhpcy5pbml0Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBub3JtYWwgdGV4dCBlZGl0IGNoYW5nZXMuIik7dmFyIHI7aWYoIShyPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXSkpe3ZhciBpPVtdO3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlc1tlXT1pLHI9bmV3IGFvKGkpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXT1yfXJldHVybiByfSxlLnByb3RvdHlwZS5pbml0RG9jdW1lbnRDaGFuZ2VzPWZ1bmN0aW9uKCl7dm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMmJnZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyYmKHRoaXMuX2NoYW5nZUFubm90YXRpb25zPW5ldyBzbyx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz1bXSx0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpKX0sZS5wcm90b3R5cGUuaW5pdENoYW5nZXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyYmdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzJiYodGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzPU9iamVjdC5jcmVhdGUobnVsbCkpfSxlLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciByLGksbztpZihEci5pcyh0KXx8anIuaXModCk/cj10Om49dCx2b2lkIDA9PT1yP2k9V3IuY3JlYXRlKGUsbik6KG89anIuaXMocik/cjp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksaT1Xci5jcmVhdGUoZSxuLG8pKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKGkpLHZvaWQgMCE9PW8pcmV0dXJuIG99LGUucHJvdG90eXBlLnJlbmFtZUZpbGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgaSxvLGE7aWYoRHIuaXMobil8fGpyLmlzKG4pP2k9bjpyPW4sdm9pZCAwPT09aT9vPXpyLmNyZWF0ZShlLHQscik6KGE9anIuaXMoaSk/aTp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoaSksbz16ci5jcmVhdGUoZSx0LHIsYSkpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2gobyksdm9pZCAwIT09YSlyZXR1cm4gYX0sZS5wcm90b3R5cGUuZGVsZXRlRmlsZT1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgcixpLG87aWYoRHIuaXModCl8fGpyLmlzKHQpP3I9dDpuPXQsdm9pZCAwPT09cj9pPUpyLmNyZWF0ZShlLG4pOihvPWpyLmlzKHIpP3I6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHIpLGk9SnIuY3JlYXRlKGUsbixvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChpKSx2b2lkIDAhPT1vKXJldHVybiBvfX0oKSwodWk9bGl8fChsaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm57dXJpOmV9fSx1aS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBjby5kZWZpbmVkKHQpJiZjby5zdHJpbmcodC51cmkpfSwoZmk9aGl8fChoaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSx2ZXJzaW9uOnR9fSxmaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBjby5kZWZpbmVkKHQpJiZjby5zdHJpbmcodC51cmkpJiZjby5pbnRlZ2VyKHQudmVyc2lvbil9LChtaT1kaXx8KGRpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3VyaTplLHZlcnNpb246dH19LG1pLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLmRlZmluZWQodCkmJmNvLnN0cmluZyh0LnVyaSkmJihudWxsPT09dC52ZXJzaW9ufHxjby5pbnRlZ2VyKHQudmVyc2lvbikpfSwocGk9Z2l8fChnaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm57dXJpOmUsbGFuZ3VhZ2VJZDp0LHZlcnNpb246bix0ZXh0OnJ9fSxwaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBjby5kZWZpbmVkKHQpJiZjby5zdHJpbmcodC51cmkpJiZjby5zdHJpbmcodC5sYW5ndWFnZUlkKSYmY28uaW50ZWdlcih0LnZlcnNpb24pJiZjby5zdHJpbmcodC50ZXh0KX0sKHZpPWJpfHwoYmk9e30pKS5QbGFpblRleHQ9InBsYWludGV4dCIsdmkuTWFya2Rvd249Im1hcmtkb3duIixmdW5jdGlvbihlKXtlLmlzPWZ1bmN0aW9uKHQpe3ZhciBuPXQ7cmV0dXJuIG49PT1lLlBsYWluVGV4dHx8bj09PWUuTWFya2Rvd259fShiaXx8KGJpPXt9KSksKHlpfHwoeWk9e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBjby5vYmplY3RMaXRlcmFsKGUpJiZiaS5pcyh0LmtpbmQpJiZjby5zdHJpbmcodC52YWx1ZSl9LCh3aT1DaXx8KENpPXt9KSkuVGV4dD0xLHdpLk1ldGhvZD0yLHdpLkZ1bmN0aW9uPTMsd2kuQ29uc3RydWN0b3I9NCx3aS5GaWVsZD01LHdpLlZhcmlhYmxlPTYsd2kuQ2xhc3M9Nyx3aS5JbnRlcmZhY2U9OCx3aS5Nb2R1bGU9OSx3aS5Qcm9wZXJ0eT0xMCx3aS5Vbml0PTExLHdpLlZhbHVlPTEyLHdpLkVudW09MTMsd2kuS2V5d29yZD0xNCx3aS5TbmlwcGV0PTE1LHdpLkNvbG9yPTE2LHdpLkZpbGU9MTcsd2kuUmVmZXJlbmNlPTE4LHdpLkZvbGRlcj0xOSx3aS5FbnVtTWVtYmVyPTIwLHdpLkNvbnN0YW50PTIxLHdpLlN0cnVjdD0yMix3aS5FdmVudD0yMyx3aS5PcGVyYXRvcj0yNCx3aS5UeXBlUGFyYW1ldGVyPTI1LChTaT1faXx8KF9pPXt9KSkuUGxhaW5UZXh0PTEsU2kuU25pcHBldD0yLChBaXx8KEFpPXt9KSkuRGVwcmVjYXRlZD0xLCh4aT1FaXx8KEVpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57bmV3VGV4dDplLGluc2VydDp0LHJlcGxhY2U6bn19LHhpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJmNvLnN0cmluZyh0Lm5ld1RleHQpJiZsci5pcyh0Lmluc2VydCkmJmxyLmlzKHQucmVwbGFjZSl9LChraT1OaXx8KE5pPXt9KSkuYXNJcz0xLGtpLmFkanVzdEluZGVudGF0aW9uPTIsKExpfHwoTGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJue2xhYmVsOmV9fSwoVGl8fChUaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntpdGVtczplfHxbXSxpc0luY29tcGxldGU6ISF0fX0sKElpPU9pfHwoT2k9e30pKS5mcm9tUGxhaW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX0sSWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28uc3RyaW5nKHQpfHxjby5vYmplY3RMaXRlcmFsKHQpJiZjby5zdHJpbmcodC5sYW5ndWFnZSkmJmNvLnN0cmluZyh0LnZhbHVlKX0sKE1pfHwoTWk9e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiEhdCYmY28ub2JqZWN0TGl0ZXJhbCh0KSYmKHlpLmlzKHQuY29udGVudHMpfHxPaS5pcyh0LmNvbnRlbnRzKXx8Y28udHlwZWRBcnJheSh0LmNvbnRlbnRzLE9pLmlzKSkmJih2b2lkIDA9PT1lLnJhbmdlfHxsci5pcyhlLnJhbmdlKSl9LChQaXx8KFBpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/e2xhYmVsOmUsZG9jdW1lbnRhdGlvbjp0fTp7bGFiZWw6ZX19LChSaXx8KFJpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bci0yXT1hcmd1bWVudHNbcl07dmFyIGk9e2xhYmVsOmV9O3JldHVybiBjby5kZWZpbmVkKHQpJiYoaS5kb2N1bWVudGF0aW9uPXQpLGNvLmRlZmluZWQobik/aS5wYXJhbWV0ZXJzPW46aS5wYXJhbWV0ZXJzPVtdLGl9LChGaT1WaXx8KFZpPXt9KSkuVGV4dD0xLEZpLlJlYWQ9MixGaS5Xcml0ZT0zLChEaXx8KERpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e3JhbmdlOmV9O3JldHVybiBjby5udW1iZXIodCkmJihuLmtpbmQ9dCksbn0sKGppPUtpfHwoS2k9e30pKS5GaWxlPTEsamkuTW9kdWxlPTIsamkuTmFtZXNwYWNlPTMsamkuUGFja2FnZT00LGppLkNsYXNzPTUsamkuTWV0aG9kPTYsamkuUHJvcGVydHk9NyxqaS5GaWVsZD04LGppLkNvbnN0cnVjdG9yPTksamkuRW51bT0xMCxqaS5JbnRlcmZhY2U9MTEsamkuRnVuY3Rpb249MTIsamkuVmFyaWFibGU9MTMsamkuQ29uc3RhbnQ9MTQsamkuU3RyaW5nPTE1LGppLk51bWJlcj0xNixqaS5Cb29sZWFuPTE3LGppLkFycmF5PTE4LGppLk9iamVjdD0xOSxqaS5LZXk9MjAsamkuTnVsbD0yMSxqaS5FbnVtTWVtYmVyPTIyLGppLlN0cnVjdD0yMyxqaS5FdmVudD0yNCxqaS5PcGVyYXRvcj0yNSxqaS5UeXBlUGFyYW1ldGVyPTI2LChVaXx8KFVpPXt9KSkuRGVwcmVjYXRlZD0xLChCaXx8KEJpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89e25hbWU6ZSxraW5kOnQsbG9jYXRpb246e3VyaTpyLHJhbmdlOm59fTtyZXR1cm4gaSYmKG8uY29udGFpbmVyTmFtZT1pKSxvfSwoJGk9cWl8fChxaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9e25hbWU6ZSxkZXRhaWw6dCxraW5kOm4scmFuZ2U6cixzZWxlY3Rpb25SYW5nZTppfTtyZXR1cm4gdm9pZCAwIT09byYmKGEuY2hpbGRyZW49byksYX0sJGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmY28uc3RyaW5nKHQubmFtZSkmJmNvLm51bWJlcih0LmtpbmQpJiZsci5pcyh0LnJhbmdlKSYmbHIuaXModC5zZWxlY3Rpb25SYW5nZSkmJih2b2lkIDA9PT10LmRldGFpbHx8Y28uc3RyaW5nKHQuZGV0YWlsKSkmJih2b2lkIDA9PT10LmRlcHJlY2F0ZWR8fGNvLmJvb2xlYW4odC5kZXByZWNhdGVkKSkmJih2b2lkIDA9PT10LmNoaWxkcmVufHxBcnJheS5pc0FycmF5KHQuY2hpbGRyZW4pKSYmKHZvaWQgMD09PXQudGFnc3x8QXJyYXkuaXNBcnJheSh0LnRhZ3MpKX0sKEhpPVdpfHwoV2k9e30pKS5FbXB0eT0iIixIaS5RdWlja0ZpeD0icXVpY2tmaXgiLEhpLlJlZmFjdG9yPSJyZWZhY3RvciIsSGkuUmVmYWN0b3JFeHRyYWN0PSJyZWZhY3Rvci5leHRyYWN0IixIaS5SZWZhY3RvcklubGluZT0icmVmYWN0b3IuaW5saW5lIixIaS5SZWZhY3RvclJld3JpdGU9InJlZmFjdG9yLnJld3JpdGUiLEhpLlNvdXJjZT0ic291cmNlIixIaS5Tb3VyY2VPcmdhbml6ZUltcG9ydHM9InNvdXJjZS5vcmdhbml6ZUltcG9ydHMiLEhpLlNvdXJjZUZpeEFsbD0ic291cmNlLmZpeEFsbCIsKEdpPXppfHwoemk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17ZGlhZ25vc3RpY3M6ZX07cmV0dXJuIG51bGwhPXQmJihuLm9ubHk9dCksbn0sR2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28uZGVmaW5lZCh0KSYmY28udHlwZWRBcnJheSh0LmRpYWdub3N0aWNzLElyLmlzKSYmKHZvaWQgMD09PXQub25seXx8Y28udHlwZWRBcnJheSh0Lm9ubHksY28uc3RyaW5nKSl9LChYaT1KaXx8KEppPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17dGl0bGU6ZX0saT0hMDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KGk9ITEsci5raW5kPXQpOlByLmlzKHQpP3IuY29tbWFuZD10OnIuZWRpdD10LGkmJnZvaWQgMCE9PW4mJihyLmtpbmQ9bikscn0sWGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmY28uc3RyaW5nKHQudGl0bGUpJiYodm9pZCAwPT09dC5kaWFnbm9zdGljc3x8Y28udHlwZWRBcnJheSh0LmRpYWdub3N0aWNzLElyLmlzKSkmJih2b2lkIDA9PT10LmtpbmR8fGNvLnN0cmluZyh0LmtpbmQpKSYmKHZvaWQgMCE9PXQuZWRpdHx8dm9pZCAwIT09dC5jb21tYW5kKSYmKHZvaWQgMD09PXQuY29tbWFuZHx8UHIuaXModC5jb21tYW5kKSkmJih2b2lkIDA9PT10LmlzUHJlZmVycmVkfHxjby5ib29sZWFuKHQuaXNQcmVmZXJyZWQpKSYmKHZvaWQgMD09PXQuZWRpdHx8WnIuaXModC5lZGl0KSl9LChZaT1aaXx8KFppPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e3JhbmdlOmV9O3JldHVybiBjby5kZWZpbmVkKHQpJiYobi5kYXRhPXQpLG59LFlpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLmRlZmluZWQodCkmJmxyLmlzKHQucmFuZ2UpJiYoY28udW5kZWZpbmVkKHQuY29tbWFuZCl8fFByLmlzKHQuY29tbWFuZCkpfSwoZW89UWl8fChRaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0YWJTaXplOmUsaW5zZXJ0U3BhY2VzOnR9fSxlby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBjby5kZWZpbmVkKHQpJiZjby51aW50ZWdlcih0LnRhYlNpemUpJiZjby5ib29sZWFuKHQuaW5zZXJ0U3BhY2VzKX0sKG5vPXRvfHwodG89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTplLHRhcmdldDp0LGRhdGE6bn19LG5vLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLmRlZmluZWQodCkmJmxyLmlzKHQucmFuZ2UpJiYoY28udW5kZWZpbmVkKHQudGFyZ2V0KXx8Y28uc3RyaW5nKHQudGFyZ2V0KSl9LChpbz1yb3x8KHJvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUscGFyZW50OnR9fSxpby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB2b2lkIDAhPT10JiZsci5pcyh0LnJhbmdlKSYmKHZvaWQgMD09PXQucGFyZW50fHxpby5pcyh0LnBhcmVudCkpfSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7dmFyIHI9ZS5sZW5ndGgvMnwwLGk9ZS5zbGljZSgwLHIpLG89ZS5zbGljZShyKTt0KGksbiksdChvLG4pO2Zvcih2YXIgYT0wLHM9MCxjPTA7YTxpLmxlbmd0aCYmczxvLmxlbmd0aDspe3ZhciBsPW4oaVthXSxvW3NdKTtlW2MrK109bDw9MD9pW2ErK106b1tzKytdfWZvcig7YTxpLmxlbmd0aDspZVtjKytdPWlbYSsrXTtmb3IoO3M8by5sZW5ndGg7KWVbYysrXT1vW3MrK107cmV0dXJuIGV9ZS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyBobyhlLHQsbixyKX0sZS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiEhKGNvLmRlZmluZWQodCkmJmNvLnN0cmluZyh0LnVyaSkmJihjby51bmRlZmluZWQodC5sYW5ndWFnZUlkKXx8Y28uc3RyaW5nKHQubGFuZ3VhZ2VJZCkpJiZjby51aW50ZWdlcih0LmxpbmVDb3VudCkmJmNvLmZ1bmModC5nZXRUZXh0KSYmY28uZnVuYyh0LnBvc2l0aW9uQXQpJiZjby5mdW5jKHQub2Zmc2V0QXQpKX0sZS5hcHBseUVkaXRzPWZ1bmN0aW9uKGUsbil7Zm9yKHZhciByPWUuZ2V0VGV4dCgpLGk9dChuLChmdW5jdGlvbihlLHQpe3ZhciBuPWUucmFuZ2Uuc3RhcnQubGluZS10LnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIDA9PT1uP2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOm59KSksbz1yLmxlbmd0aCxhPWkubGVuZ3RoLTE7YT49MDthLS0pe3ZhciBzPWlbYV0sYz1lLm9mZnNldEF0KHMucmFuZ2Uuc3RhcnQpLGw9ZS5vZmZzZXRBdChzLnJhbmdlLmVuZCk7aWYoIShsPD1vKSl0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTtyPXIuc3Vic3RyaW5nKDAsYykrcy5uZXdUZXh0K3Iuc3Vic3RyaW5nKGwsci5sZW5ndGgpLG89Y31yZXR1cm4gcn19KG9vfHwob289e30pKTt2YXIgY28sbG8sdW8saG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ1cmkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXJpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGFuZ3VhZ2VJZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmVyc2lvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxuPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyh0LG4pfXJldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLl9jb250ZW50PWUudGV4dCx0aGlzLl92ZXJzaW9uPXQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfSxlLnByb3RvdHlwZS5nZXRMaW5lT2Zmc2V0cz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuX2xpbmVPZmZzZXRzKXtmb3IodmFyIGU9W10sdD10aGlzLl9jb250ZW50LG49ITAscj0wO3I8dC5sZW5ndGg7cisrKXtuJiYoZS5wdXNoKHIpLG49ITEpO3ZhciBpPXQuY2hhckF0KHIpO249IlxyIj09PWl8fCJcbiI9PT1pLCJcciI9PT1pJiZyKzE8dC5sZW5ndGgmJiJcbiI9PT10LmNoYXJBdChyKzEpJiZyKyt9biYmdC5sZW5ndGg+MCYmZS5wdXNoKHQubGVuZ3RoKSx0aGlzLl9saW5lT2Zmc2V0cz1lfXJldHVybiB0aGlzLl9saW5lT2Zmc2V0c30sZS5wcm90b3R5cGUucG9zaXRpb25BdD1mdW5jdGlvbihlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAscj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm4gc3IuY3JlYXRlKDAsZSk7Zm9yKDtuPHI7KXt2YXIgaT1NYXRoLmZsb29yKChuK3IpLzIpO3RbaV0+ZT9yPWk6bj1pKzF9dmFyIG89bi0xO3JldHVybiBzci5jcmVhdGUobyxlLXRbb10pfSxlLnByb3RvdHlwZS5vZmZzZXRBdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7dmFyIG49dFtlLmxpbmVdLHI9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsciksbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGluZUNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZX0oKTtsbz1jb3x8KGNvPXt9KSx1bz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGxvLmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWV9LGxvLnVuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZX0sbG8uYm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZX0sbG8uc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09dW8uY2FsbChlKX0sbG8ubnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09dW8uY2FsbChlKX0sbG8ubnVtYmVyUmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09dW8uY2FsbChlKSYmdDw9ZSYmZTw9bn0sbG8uaW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PXVvLmNhbGwoZSkmJi0yMTQ3NDgzNjQ4PD1lJiZlPD0yMTQ3NDgzNjQ3fSxsby51aW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PXVvLmNhbGwoZSkmJjA8PWUmJmU8PTIxNDc0ODM2NDd9LGxvLmZ1bmM9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PXVvLmNhbGwoZSl9LGxvLm9iamVjdExpdGVyYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9LGxvLnR5cGVkQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmZS5ldmVyeSh0KX07dmFyIGZvLG1vLGdvLHBvLGJvLHZvPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dChlKXtpZihlKXtjb25zdCB0PXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSx0KXtmb3IobGV0IHQgb2YgZSlpZih2by5pc0luY3JlbWVudGFsKHQpKXtjb25zdCBlPXdvKHQucmFuZ2UpLG49dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxyPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3RoaXMuX2NvbnRlbnQ9dGhpcy5fY29udGVudC5zdWJzdHJpbmcoMCxuKSt0LnRleHQrdGhpcy5fY29udGVudC5zdWJzdHJpbmcocix0aGlzLl9jb250ZW50Lmxlbmd0aCk7Y29uc3QgaT1NYXRoLm1heChlLnN0YXJ0LmxpbmUsMCksbz1NYXRoLm1heChlLmVuZC5saW5lLDApO2xldCBhPXRoaXMuX2xpbmVPZmZzZXRzO2NvbnN0IHM9Q28odC50ZXh0LCExLG4pO2lmKG8taT09PXMubGVuZ3RoKWZvcihsZXQgZT0wLHQ9cy5sZW5ndGg7ZTx0O2UrKylhW2UraSsxXT1zW2VdO2Vsc2Ugcy5sZW5ndGg8MWU0P2Euc3BsaWNlKGkrMSxvLWksLi4ucyk6dGhpcy5fbGluZU9mZnNldHM9YT1hLnNsaWNlKDAsaSsxKS5jb25jYXQocyxhLnNsaWNlKG8rMSkpO2NvbnN0IGM9dC50ZXh0Lmxlbmd0aC0oci1uKTtpZigwIT09Yylmb3IobGV0IGU9aSsxK3MubGVuZ3RoLHQ9YS5sZW5ndGg7ZTx0O2UrKylhW2VdPWFbZV0rY31lbHNle2lmKCF2by5pc0Z1bGwodCkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNoYW5nZSBldmVudCByZWNlaXZlZCIpO3RoaXMuX2NvbnRlbnQ9dC50ZXh0LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH10aGlzLl92ZXJzaW9uPXR9Z2V0TGluZU9mZnNldHMoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fbGluZU9mZnNldHMmJih0aGlzLl9saW5lT2Zmc2V0cz1Dbyh0aGlzLl9jb250ZW50LCEwKSksdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAscj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm57bGluZTowLGNoYXJhY3RlcjplfTtmb3IoO248cjspe2xldCBpPU1hdGguZmxvb3IoKG4rcikvMik7dFtpXT5lP3I9aTpuPWkrMX1sZXQgaT1uLTE7cmV0dXJue2xpbmU6aSxjaGFyYWN0ZXI6ZS10W2ldfX1vZmZzZXRBdChlKXtsZXQgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7bGV0IG49dFtlLmxpbmVdLHI9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsciksbil9Z2V0IGxpbmVDb3VudCgpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofXN0YXRpYyBpc0luY3JlbWVudGFsKGUpe2xldCB0PWU7cmV0dXJuIG51bGwhPXQmJiJzdHJpbmciPT10eXBlb2YgdC50ZXh0JiZ2b2lkIDAhPT10LnJhbmdlJiYodm9pZCAwPT09dC5yYW5nZUxlbmd0aHx8Im51bWJlciI9PXR5cGVvZiB0LnJhbmdlTGVuZ3RoKX1zdGF0aWMgaXNGdWxsKGUpe2xldCB0PWU7cmV0dXJuIG51bGwhPXQmJiJzdHJpbmciPT10eXBlb2YgdC50ZXh0JiZ2b2lkIDA9PT10LnJhbmdlJiZ2b2lkIDA9PT10LnJhbmdlTGVuZ3RofX07ZnVuY3Rpb24geW8oZSx0KXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCBuPWUubGVuZ3RoLzJ8MCxyPWUuc2xpY2UoMCxuKSxpPWUuc2xpY2Uobik7eW8ocix0KSx5byhpLHQpO2xldCBvPTAsYT0wLHM9MDtmb3IoO288ci5sZW5ndGgmJmE8aS5sZW5ndGg7KXtsZXQgbj10KHJbb10saVthXSk7ZVtzKytdPW48PTA/cltvKytdOmlbYSsrXX1mb3IoO288ci5sZW5ndGg7KWVbcysrXT1yW28rK107Zm9yKDthPGkubGVuZ3RoOyllW3MrK109aVthKytdO3JldHVybiBlfWZ1bmN0aW9uIENvKGUsdCxuPTApe2NvbnN0IHI9dD9bbl06W107Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBpPWUuY2hhckNvZGVBdCh0KTsxMyE9PWkmJjEwIT09aXx8KDEzPT09aSYmdCsxPGUubGVuZ3RoJiYxMD09PWUuY2hhckNvZGVBdCh0KzEpJiZ0Kyssci5wdXNoKG4rdCsxKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gd28oZSl7Y29uc3QgdD1lLnN0YXJ0LG49ZS5lbmQ7cmV0dXJuIHQubGluZT5uLmxpbmV8fHQubGluZT09PW4ubGluZSYmdC5jaGFyYWN0ZXI+bi5jaGFyYWN0ZXI/e3N0YXJ0Om4sZW5kOnR9OmV9ZnVuY3Rpb24gX28oZSl7Y29uc3QgdD13byhlLnJhbmdlKTtyZXR1cm4gdCE9PWUucmFuZ2U/e25ld1RleHQ6ZS5uZXdUZXh0LHJhbmdlOnR9OmV9ZnVuY3Rpb24gU28oZSx0LC4uLm4pe3JldHVybiBmdW5jdGlvbihlLHQpe2xldCBuO3JldHVybiBuPTA9PT10Lmxlbmd0aD9lOmUucmVwbGFjZSgvXHsoXGQrKVx9L2csKChlLG4pPT57bGV0IHI9blswXTtyZXR1cm4gdm9pZCAwIT09dFtyXT90W3JdOmV9KSksbn0odCxuKX1mdW5jdGlvbiBBbyhlKXtyZXR1cm4gU299KG1vPWZvfHwoZm89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyB2byhlLHQsbixyKX0sbW8udXBkYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZihlIGluc3RhbmNlb2Ygdm8pcmV0dXJuIGUudXBkYXRlKHQsbiksZTt0aHJvdyBuZXcgRXJyb3IoIlRleHREb2N1bWVudC51cGRhdGU6IGRvY3VtZW50IG11c3QgYmUgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIil9LG1vLmFwcGx5RWRpdHM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmdldFRleHQoKSxyPXlvKHQubWFwKF9vKSwoKGUsdCk9PntsZXQgbj1lLnJhbmdlLnN0YXJ0LmxpbmUtdC5yYW5nZS5zdGFydC5saW5lO3JldHVybiAwPT09bj9lLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci10LnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpufSkpLGk9MDtjb25zdCBvPVtdO2Zvcihjb25zdCB0IG9mIHIpe2xldCByPWUub2Zmc2V0QXQodC5yYW5nZS5zdGFydCk7aWYocjxpKXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO3I+aSYmby5wdXNoKG4uc3Vic3RyaW5nKGkscikpLHQubmV3VGV4dC5sZW5ndGgmJm8ucHVzaCh0Lm5ld1RleHQpLGk9ZS5vZmZzZXRBdCh0LnJhbmdlLmVuZCl9cmV0dXJuIG8ucHVzaChuLnN1YnN0cihpKSksby5qb2luKCIiKX0sKHBvPWdvfHwoZ289e30pKVtwby5VbmRlZmluZWQ9MF09IlVuZGVmaW5lZCIscG9bcG8uRW51bVZhbHVlTWlzbWF0Y2g9MV09IkVudW1WYWx1ZU1pc21hdGNoIixwb1twby5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIixwb1twby5VbmV4cGVjdGVkRW5kT2ZDb21tZW50PTI1N109IlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLHBvW3BvLlVuZXhwZWN0ZWRFbmRPZlN0cmluZz0yNThdPSJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLHBvW3BvLlVuZXhwZWN0ZWRFbmRPZk51bWJlcj0yNTldPSJVbmV4cGVjdGVkRW5kT2ZOdW1iZXIiLHBvW3BvLkludmFsaWRVbmljb2RlPTI2MF09IkludmFsaWRVbmljb2RlIixwb1twby5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyPTI2MV09IkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLHBvW3BvLkludmFsaWRDaGFyYWN0ZXI9MjYyXT0iSW52YWxpZENoYXJhY3RlciIscG9bcG8uUHJvcGVydHlFeHBlY3RlZD01MTNdPSJQcm9wZXJ0eUV4cGVjdGVkIixwb1twby5Db21tYUV4cGVjdGVkPTUxNF09IkNvbW1hRXhwZWN0ZWQiLHBvW3BvLkNvbG9uRXhwZWN0ZWQ9NTE1XT0iQ29sb25FeHBlY3RlZCIscG9bcG8uVmFsdWVFeHBlY3RlZD01MTZdPSJWYWx1ZUV4cGVjdGVkIixwb1twby5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZD01MTddPSJDb21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCIscG9bcG8uQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZD01MThdPSJDb21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkIixwb1twby5UcmFpbGluZ0NvbW1hPTUxOV09IlRyYWlsaW5nQ29tbWEiLHBvW3BvLkR1cGxpY2F0ZUtleT01MjBdPSJEdXBsaWNhdGVLZXkiLHBvW3BvLkNvbW1lbnROb3RQZXJtaXR0ZWQ9NTIxXT0iQ29tbWVudE5vdFBlcm1pdHRlZCIscG9bcG8uU2NoZW1hUmVzb2x2ZUVycm9yPTc2OF09IlNjaGVtYVJlc29sdmVFcnJvciIsKGJvfHwoYm89e30pKS5MQVRFU1Q9e3RleHREb2N1bWVudDp7Y29tcGxldGlvbjp7Y29tcGxldGlvbkl0ZW06e2RvY3VtZW50YXRpb25Gb3JtYXQ6W2JpLk1hcmtkb3duLGJpLlBsYWluVGV4dF0sY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnQ6ITB9fX19O3ZhciBFbyx4byxObyxrbz0oRW89ZnVuY3Rpb24oZSx0KXtyZXR1cm4oRW89T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfUVvKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSksTG89QW8oKSxUbz17ImNvbG9yLWhleCI6e2Vycm9yTWVzc2FnZTpMbygiY29sb3JIZXhGb3JtYXRXYXJuaW5nIiwiSW52YWxpZCBjb2xvciBmb3JtYXQuIFVzZSAjUkdCLCAjUkdCQSwgI1JSR0dCQiBvciAjUlJHR0JCQUEuIikscGF0dGVybjovXiMoWzAtOUEtRmEtZl17Myw0fXwoWzAtOUEtRmEtZl17Mn0pezMsNH0pJC99LCJkYXRlLXRpbWUiOntlcnJvck1lc3NhZ2U6TG8oImRhdGVUaW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUtdGltZS4iKSxwYXR0ZXJuOi9eKFxkezR9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdWzAtOV18M1swMV0pVChbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZGF0ZTp7ZXJyb3JNZXNzYWdlOkxvKCJkYXRlRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKSQvaX0sdGltZTp7ZXJyb3JNZXNzYWdlOkxvKCJ0aW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IHRpbWUuIikscGF0dGVybjovXihbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZW1haWw6e2Vycm9yTWVzc2FnZTpMbygiZW1haWxGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBlLW1haWwgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aMC05LV0rXC4pK1thLXpBLVpdezIsfSkpJC99LGhvc3RuYW1lOntlcnJvck1lc3NhZ2U6TG8oImhvc3RuYW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBob3N0bmFtZS4iKSxwYXR0ZXJuOi9eKD89LnsxLDI1M31cLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcLj8kL2l9LGlwdjQ6e2Vycm9yTWVzc2FnZTpMbygiaXB2NEZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIElQdjQgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZClcLil7M30oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSQvfSxpcHY2OntlcnJvck1lc3NhZ2U6TG8oImlwdjZGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBJUHY2IGFkZHJlc3MuIikscGF0dGVybjovXigoKFswLTlhLWZdezEsNH06KXs3fShbMC05YS1mXXsxLDR9fDopKXwoKFswLTlhLWZdezEsNH06KXs2fSg6WzAtOWEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezV9KCgoOlswLTlhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezR9KCgoOlswLTlhLWZdezEsNH0pezEsM30pfCgoOlswLTlhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXszfSgoKDpbMC05YS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05YS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezJ9KCgoOlswLTlhLWZdezEsNH0pezEsNX0pfCgoOlswLTlhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7MX0oKCg6WzAtOWEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoOigoKDpbMC05YS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05YS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpKSQvaX19LE9vPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09biYmKG49MCksdGhpcy5vZmZzZXQ9dCx0aGlzLmxlbmd0aD1uLHRoaXMucGFyZW50PWV9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0eXBlOiAiK3RoaXMudHlwZSsiICgiK3RoaXMub2Zmc2V0KyIvIit0aGlzLmxlbmd0aCsiKSIrKHRoaXMucGFyZW50PyIgcGFyZW50OiB7Iit0aGlzLnBhcmVudC50b1N0cmluZygpKyJ9IjoiIil9LGV9KCksSW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIudHlwZT0ibnVsbCIsci52YWx1ZT1udWxsLHJ9cmV0dXJuIGtvKHQsZSksdH0oT28pLE1vPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQscil8fHRoaXM7cmV0dXJuIGkudHlwZT0iYm9vbGVhbiIsaS52YWx1ZT1uLGl9cmV0dXJuIGtvKHQsZSksdH0oT28pLFBvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9ImFycmF5IixyLml0ZW1zPVtdLHJ9cmV0dXJuIGtvKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZW1zfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KE9vKSxSbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJudW1iZXIiLHIuaXNJbnRlZ2VyPSEwLHIudmFsdWU9TnVtYmVyLk5hTixyfXJldHVybiBrbyh0LGUpLHR9KE9vKSxWbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyKXt2YXIgaT1lLmNhbGwodGhpcyx0LG4scil8fHRoaXM7cmV0dXJuIGkudHlwZT0ic3RyaW5nIixpLnZhbHVlPSIiLGl9cmV0dXJuIGtvKHQsZSksdH0oT28pLEZvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIGkudHlwZT0icHJvcGVydHkiLGkuY29sb25PZmZzZXQ9LTEsaS5rZXlOb2RlPXIsaX1yZXR1cm4ga28odCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVOb2RlP1t0aGlzLmtleU5vZGUsdGhpcy52YWx1ZU5vZGVdOlt0aGlzLmtleU5vZGVdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KE9vKSxEbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJvYmplY3QiLHIucHJvcGVydGllcz1bXSxyfXJldHVybiBrbyh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wZXJ0aWVzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KE9vKTtmdW5jdGlvbiBLbyhlKXtyZXR1cm4gYWkoZSk/ZT97fTp7bm90Ont9fTplfShObz14b3x8KHhvPXt9KSlbTm8uS2V5PTBdPSJLZXkiLE5vW05vLkVudW09MV09IkVudW0iO3ZhciBqbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT1lJiYoZT0tMSksdGhpcy5mb2N1c09mZnNldD1lLHRoaXMuZXhjbHVkZT10LHRoaXMuc2NoZW1hcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuc2NoZW1hcy5wdXNoKGUpfSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnNjaGVtYXMsZS5zY2hlbWFzKX0sZS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbihlKXtyZXR1cm4oLTE9PT10aGlzLmZvY3VzT2Zmc2V0fHxXbyhlLHRoaXMuZm9jdXNPZmZzZXQpKSYmZSE9PXRoaXMuZXhjbHVkZX0sZS5wcm90b3R5cGUubmV3U3ViPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKC0xLHRoaXMuZXhjbHVkZSl9LGV9KCksVW89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNjaGVtYXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7fSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXt9LGUucHJvdG90eXBlLmluY2x1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuITB9LGUucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmluc3RhbmNlPW5ldyBlLGV9KCksQm89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5wcm9ibGVtcz1bXSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzPTAsdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzPTAsdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzPTAsdGhpcy5lbnVtVmFsdWVNYXRjaD0hMSx0aGlzLmVudW1WYWx1ZXM9dm9pZCAwfXJldHVybiBlLnByb3RvdHlwZS5oYXNQcm9ibGVtcz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5wcm9ibGVtcy5sZW5ndGh9LGUucHJvdG90eXBlLm1lcmdlQWxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZTt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTt0aGlzLm1lcmdlKHIpfX0sZS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24oZSl7dGhpcy5wcm9ibGVtcz10aGlzLnByb2JsZW1zLmNvbmNhdChlLnByb2JsZW1zKX0sZS5wcm90b3R5cGUubWVyZ2VFbnVtVmFsdWVzPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmVudW1WYWx1ZU1hdGNoJiYhZS5lbnVtVmFsdWVNYXRjaCYmdGhpcy5lbnVtVmFsdWVzJiZlLmVudW1WYWx1ZXMpe3RoaXMuZW51bVZhbHVlcz10aGlzLmVudW1WYWx1ZXMuY29uY2F0KGUuZW51bVZhbHVlcyk7Zm9yKHZhciB0PTAsbj10aGlzLnByb2JsZW1zO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO3IuY29kZT09PWdvLkVudW1WYWx1ZU1pc21hdGNoJiYoci5tZXNzYWdlPUxvKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0aGlzLmVudW1WYWx1ZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9KSkuam9pbigiLCAiKSkpfX19LGUucHJvdG90eXBlLm1lcmdlUHJvcGVydHlNYXRjaD1mdW5jdGlvbihlKXt0aGlzLm1lcmdlKGUpLHRoaXMucHJvcGVydGllc01hdGNoZXMrKywoZS5lbnVtVmFsdWVNYXRjaHx8IWUuaGFzUHJvYmxlbXMoKSYmZS5wcm9wZXJ0aWVzTWF0Y2hlcykmJnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrLGUuZW51bVZhbHVlTWF0Y2gmJmUuZW51bVZhbHVlcyYmMT09PWUuZW51bVZhbHVlcy5sZW5ndGgmJnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcysrfSxlLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzUHJvYmxlbXMoKTtyZXR1cm4gdCE9PWUuaGFzUHJvYmxlbXMoKT90Py0xOjE6dGhpcy5lbnVtVmFsdWVNYXRjaCE9PWUuZW51bVZhbHVlTWF0Y2g/ZS5lbnVtVmFsdWVNYXRjaD8tMToxOnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcyE9PWUucHJpbWFyeVZhbHVlTWF0Y2hlcz90aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMtZS5wcmltYXJ5VmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyE9PWUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcz90aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMtZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc01hdGNoZXMtZS5wcm9wZXJ0aWVzTWF0Y2hlc30sZX0oKTtmdW5jdGlvbiBxbyhlKXtyZXR1cm4gbmkoZSl9ZnVuY3Rpb24gJG8oZSl7cmV0dXJuIHRpKGUpfWZ1bmN0aW9uIFdvKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49ITEpLHQ+PWUub2Zmc2V0JiZ0PGUub2Zmc2V0K2UubGVuZ3RofHxuJiZ0PT09ZS5vZmZzZXQrZS5sZW5ndGh9dmFyIEhvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPVtdKSx0aGlzLnJvb3Q9ZSx0aGlzLnN5bnRheEVycm9ycz10LHRoaXMuY29tbWVudHM9bn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Tm9kZUZyb21PZmZzZXQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD0hMSksdGhpcy5yb290KXJldHVybiBlaSh0aGlzLnJvb3QsZSx0KX0sZS5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5yb290KXt2YXIgdD1mdW5jdGlvbihuKXt2YXIgcj1lKG4pLGk9bi5jaGlsZHJlbjtpZihBcnJheS5pc0FycmF5KGkpKWZvcih2YXIgbz0wO288aS5sZW5ndGgmJnI7bysrKXI9dChpW29dKTtyZXR1cm4gcn07dCh0aGlzLnJvb3QpfX0sZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMD09PW4mJihuPU5yLldhcm5pbmcpLHRoaXMucm9vdCYmdCl7dmFyIHI9bmV3IEJvO3JldHVybiB6byh0aGlzLnJvb3QsdCxyLFVvLmluc3RhbmNlKSxyLnByb2JsZW1zLm1hcCgoZnVuY3Rpb24odCl7dmFyIHIsaT1sci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQubG9jYXRpb24ub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5sb2NhdGlvbi5vZmZzZXQrdC5sb2NhdGlvbi5sZW5ndGgpKTtyZXR1cm4gSXIuY3JlYXRlKGksdC5tZXNzYWdlLG51bGwhPT0ocj10LnNldmVyaXR5KSYmdm9pZCAwIT09cj9yOm4sdC5jb2RlKX0pKX19LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09dCYmKHQ9LTEpO3ZhciByPW5ldyBqbyh0LG4pO3JldHVybiB0aGlzLnJvb3QmJmUmJnpvKHRoaXMucm9vdCxlLG5ldyBCbyxyKSxyLnNjaGVtYXN9LGV9KCk7ZnVuY3Rpb24gem8oZSx0LG4scil7aWYoZSYmci5pbmNsdWRlKGUpKXt2YXIgaT1lO3N3aXRjaChpLnR5cGUpe2Nhc2Uib2JqZWN0IjohZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpPU9iamVjdC5jcmVhdGUobnVsbCksbz1bXSxhPTAscz1lLnByb3BlcnRpZXM7YTxzLmxlbmd0aDthKyspe2lbSz0ocD1zW2FdKS5rZXlOb2RlLnZhbHVlXT1wLnZhbHVlTm9kZSxvLnB1c2goSyl9aWYoQXJyYXkuaXNBcnJheSh0LnJlcXVpcmVkKSlmb3IodmFyIGM9MCxsPXQucmVxdWlyZWQ7YzxsLmxlbmd0aDtjKyspe2lmKCFpW1M9bFtjXV0pe3ZhciB1PWUucGFyZW50JiYicHJvcGVydHkiPT09ZS5wYXJlbnQudHlwZSYmZS5wYXJlbnQua2V5Tm9kZSxoPXU/e29mZnNldDp1Lm9mZnNldCxsZW5ndGg6dS5sZW5ndGh9OntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOjF9O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246aCxtZXNzYWdlOkxvKCJNaXNzaW5nUmVxdWlyZWRQcm9wV2FybmluZyIsJ01pc3NpbmcgcHJvcGVydHkgInswfSIuJyxTKX0pfX12YXIgZj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9by5pbmRleE9mKGUpO3Q+PTA7KW8uc3BsaWNlKHQsMSksdD1vLmluZGV4T2YoZSl9O2lmKHQucHJvcGVydGllcylmb3IodmFyIGQ9MCxtPU9iamVjdC5rZXlzKHQucHJvcGVydGllcyk7ZDxtLmxlbmd0aDtkKyspe2YoUz1tW2RdKTt2YXIgZz10LnByb3BlcnRpZXNbU107aWYoTD1pW1NdKWlmKGFpKGcpKWlmKGcpbi5wcm9wZXJ0aWVzTWF0Y2hlcysrLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2V7dmFyIHA9TC5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fExvKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLFMpfSl9ZWxzZSB6byhMLGcseD1uZXcgQm8sciksbi5tZXJnZVByb3BlcnR5TWF0Y2goeCl9aWYodC5wYXR0ZXJuUHJvcGVydGllcylmb3IodmFyIGI9MCx2PU9iamVjdC5rZXlzKHQucGF0dGVyblByb3BlcnRpZXMpO2I8di5sZW5ndGg7YisrKWZvcih2YXIgeT12W2JdLEM9Y2koeSksdz0wLF89by5zbGljZSgwKTt3PF8ubGVuZ3RoO3crKyl7dmFyIFM9X1t3XTtpZihudWxsPT1DP3ZvaWQgMDpDLnRlc3QoUykpaWYoZihTKSxMPWlbU10paWYoYWkoZz10LnBhdHRlcm5Qcm9wZXJ0aWVzW3ldKSlpZihnKW4ucHJvcGVydGllc01hdGNoZXMrKyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKztlbHNle3A9TC5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fExvKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLFMpfSl9ZWxzZSB6byhMLGcseD1uZXcgQm8sciksbi5tZXJnZVByb3BlcnR5TWF0Y2goeCl9aWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKWZvcih2YXIgQT0wLEU9bztBPEUubGVuZ3RoO0ErKyl7aWYoTD1pW1M9RVtBXV0pe3ZhciB4PW5ldyBCbzt6byhMLHQuYWRkaXRpb25hbFByb3BlcnRpZXMseCxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaCh4KX19ZWxzZSBpZighMT09PXQuYWRkaXRpb25hbFByb3BlcnRpZXMmJm8ubGVuZ3RoPjApZm9yKHZhciBOPTAsaz1vO048ay5sZW5ndGg7TisrKXt2YXIgTDtpZihMPWlbUz1rW05dXSl7cD1MLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6cC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8TG8oIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsUyl9KX19aWkodC5tYXhQcm9wZXJ0aWVzKSYmZS5wcm9wZXJ0aWVzLmxlbmd0aD50Lm1heFByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIk1heFByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBtb3JlIHByb3BlcnRpZXMgdGhhbiBsaW1pdCBvZiB7MH0uIix0Lm1heFByb3BlcnRpZXMpfSk7aWkodC5taW5Qcm9wZXJ0aWVzKSYmZS5wcm9wZXJ0aWVzLmxlbmd0aDx0Lm1pblByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIk1pblByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBmZXdlciBwcm9wZXJ0aWVzIHRoYW4gdGhlIHJlcXVpcmVkIG51bWJlciBvZiB7MH0iLHQubWluUHJvcGVydGllcyl9KTtpZih0LmRlcGVuZGVuY2llcylmb3IodmFyIFQ9MCxPPU9iamVjdC5rZXlzKHQuZGVwZW5kZW5jaWVzKTtUPE8ubGVuZ3RoO1QrKyl7aWYoaVtLPU9bVF1dKXt2YXIgST10LmRlcGVuZGVuY2llc1tLXTtpZihBcnJheS5pc0FycmF5KEkpKWZvcih2YXIgTT0wLFA9STtNPFAubGVuZ3RoO00rKyl7dmFyIFI9UFtNXTtpW1JdP24ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrOm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIlJlcXVpcmVkRGVwZW5kZW50UHJvcFdhcm5pbmciLCJPYmplY3QgaXMgbWlzc2luZyBwcm9wZXJ0eSB7MH0gcmVxdWlyZWQgYnkgcHJvcGVydHkgezF9LiIsUixLKX0pfWVsc2UgaWYoZz1LbyhJKSl6byhlLGcseD1uZXcgQm8sciksbi5tZXJnZVByb3BlcnR5TWF0Y2goeCl9fXZhciBWPUtvKHQucHJvcGVydHlOYW1lcyk7aWYoVilmb3IodmFyIEY9MCxEPWUucHJvcGVydGllcztGPEQubGVuZ3RoO0YrKyl7dmFyIEs7KEs9RFtGXS5rZXlOb2RlKSYmem8oSyxWLG4sVW8uaW5zdGFuY2UpfX0oaSx0LG4scik7YnJlYWs7Y2FzZSJhcnJheSI6IWZ1bmN0aW9uKGUsdCxuLHIpe2lmKEFycmF5LmlzQXJyYXkodC5pdGVtcykpe2Zvcih2YXIgaT10Lml0ZW1zLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGE9S28oaVtvXSkscz1uZXcgQm87KGY9ZS5pdGVtc1tvXSk/KHpvKGYsYSxzLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHMpKTplLml0ZW1zLmxlbmd0aD49aS5sZW5ndGgmJm4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrfWlmKGUuaXRlbXMubGVuZ3RoPmkubGVuZ3RoKWlmKCJvYmplY3QiPT10eXBlb2YgdC5hZGRpdGlvbmFsSXRlbXMpZm9yKHZhciBjPWkubGVuZ3RoO2M8ZS5pdGVtcy5sZW5ndGg7YysrKXtzPW5ldyBCbzt6byhlLml0ZW1zW2NdLHQuYWRkaXRpb25hbEl0ZW1zLHMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2gocyl9ZWxzZSExPT09dC5hZGRpdGlvbmFsSXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oImFkZGl0aW9uYWxJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMgYWNjb3JkaW5nIHRvIHNjaGVtYS4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsaS5sZW5ndGgpfSl9ZWxzZXt2YXIgbD1Lbyh0Lml0ZW1zKTtpZihsKWZvcih2YXIgdT0wLGg9ZS5pdGVtczt1PGgubGVuZ3RoO3UrKyl7dmFyIGY7em8oZj1oW3VdLGwscz1uZXcgQm8sciksbi5tZXJnZVByb3BlcnR5TWF0Y2gocyl9fXZhciBkPUtvKHQuY29udGFpbnMpO2lmKGQpe2UuaXRlbXMuc29tZSgoZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEJvO3JldHVybiB6byhlLGQsdCxVby5pbnN0YW5jZSksIXQuaGFzUHJvYmxlbXMoKX0pKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8TG8oInJlcXVpcmVkSXRlbU1pc3NpbmdXYXJuaW5nIiwiQXJyYXkgZG9lcyBub3QgY29udGFpbiByZXF1aXJlZCBpdGVtLiIpfSl9aWkodC5taW5JdGVtcykmJmUuaXRlbXMubGVuZ3RoPHQubWluSXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIm1pbkl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gZmV3IGl0ZW1zLiBFeHBlY3RlZCB7MH0gb3IgbW9yZS4iLHQubWluSXRlbXMpfSk7aWkodC5tYXhJdGVtcykmJmUuaXRlbXMubGVuZ3RoPnQubWF4SXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIm1heEl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcy4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsdC5tYXhJdGVtcyl9KTtpZighMD09PXQudW5pcXVlSXRlbXMpe3ZhciBtPXFvKGUpO20uc29tZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCE9PW0ubGFzdEluZGV4T2YoZSl9KSkmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oInVuaXF1ZUl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyBkdXBsaWNhdGUgaXRlbXMuIil9KX19KGksdCxuLHIpO2JyZWFrO2Nhc2Uic3RyaW5nIjohZnVuY3Rpb24oZSx0LG4scil7aWkodC5taW5MZW5ndGgpJiZlLnZhbHVlLmxlbmd0aDx0Lm1pbkxlbmd0aCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpMbygibWluTGVuZ3RoV2FybmluZyIsIlN0cmluZyBpcyBzaG9ydGVyIHRoYW4gdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHswfS4iLHQubWluTGVuZ3RoKX0pO2lpKHQubWF4TGVuZ3RoKSYmZS52YWx1ZS5sZW5ndGg+dC5tYXhMZW5ndGgmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIm1heExlbmd0aFdhcm5pbmciLCJTdHJpbmcgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gbGVuZ3RoIG9mIHswfS4iLHQubWF4TGVuZ3RoKX0pO2lmKG89dC5wYXR0ZXJuLCJzdHJpbmciPT10eXBlb2Ygbyl7dmFyIGk9Y2kodC5wYXR0ZXJuKTsobnVsbD09aT92b2lkIDA6aS50ZXN0KGUudmFsdWUpKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LnBhdHRlcm5FcnJvck1lc3NhZ2V8fHQuZXJyb3JNZXNzYWdlfHxMbygicGF0dGVybldhcm5pbmciLCdTdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIHBhdHRlcm4gb2YgInswfSIuJyx0LnBhdHRlcm4pfSl9dmFyIG87aWYodC5mb3JtYXQpc3dpdGNoKHQuZm9ybWF0KXtjYXNlInVyaSI6Y2FzZSJ1cmktcmVmZXJlbmNlIjp2YXIgYT12b2lkIDA7aWYoZS52YWx1ZSl7dmFyIHM9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8uZXhlYyhlLnZhbHVlKTtzP3NbMl18fCJ1cmkiIT09dC5mb3JtYXR8fChhPUxvKCJ1cmlTY2hlbWVNaXNzaW5nIiwiVVJJIHdpdGggYSBzY2hlbWUgaXMgZXhwZWN0ZWQuIikpOmE9TG8oInVyaU1pc3NpbmciLCJVUkkgaXMgZXhwZWN0ZWQuIil9ZWxzZSBhPUxvKCJ1cmlFbXB0eSIsIlVSSSBleHBlY3RlZC4iKTthJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQucGF0dGVybkVycm9yTWVzc2FnZXx8dC5lcnJvck1lc3NhZ2V8fExvKCJ1cmlGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFVSSTogezB9IixhKX0pO2JyZWFrO2Nhc2UiY29sb3ItaGV4IjpjYXNlImRhdGUtdGltZSI6Y2FzZSJkYXRlIjpjYXNlInRpbWUiOmNhc2UiZW1haWwiOmNhc2UiaG9zdG5hbWUiOmNhc2UiaXB2NCI6Y2FzZSJpcHY2Ijp2YXIgYz1Ub1t0LmZvcm1hdF07ZS52YWx1ZSYmYy5wYXR0ZXJuLmV4ZWMoZS52YWx1ZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8Yy5lcnJvck1lc3NhZ2V9KX19KGksdCxuKTticmVhaztjYXNlIm51bWJlciI6IWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWUudmFsdWU7ZnVuY3Rpb24gbyhlKXt2YXIgdCxuPS9eKC0/XGQrKSg/OlwuKFxkKykpPyg/OmUoWy0rXVxkKykpPyQvLmV4ZWMoZS50b1N0cmluZygpKTtyZXR1cm4gbiYme3ZhbHVlOk51bWJlcihuWzFdKyhuWzJdfHwiIikpLG11bHRpcGxpZXI6KChudWxsPT09KHQ9blsyXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKXx8MCktKHBhcnNlSW50KG5bM10pfHwwKX19aWYoaWkodC5tdWx0aXBsZU9mKSl7dmFyIGE9LTE7aWYoTnVtYmVyLmlzSW50ZWdlcih0Lm11bHRpcGxlT2YpKWE9aSV0Lm11bHRpcGxlT2Y7ZWxzZXt2YXIgcz1vKHQubXVsdGlwbGVPZiksYz1vKGkpO2lmKHMmJmMpe3ZhciBsPU1hdGgucG93KDEwLE1hdGguYWJzKGMubXVsdGlwbGllci1zLm11bHRpcGxpZXIpKTtjLm11bHRpcGxpZXI8cy5tdWx0aXBsaWVyP2MudmFsdWUqPWw6cy52YWx1ZSo9bCxhPWMudmFsdWUlcy52YWx1ZX19MCE9PWEmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIm11bHRpcGxlT2ZXYXJuaW5nIiwiVmFsdWUgaXMgbm90IGRpdmlzaWJsZSBieSB7MH0uIix0Lm11bHRpcGxlT2YpfSl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBpaSh0KT90OmFpKHQpJiZ0P2U6dm9pZCAwfWZ1bmN0aW9uIGgoZSx0KXtpZighYWkodCl8fCF0KXJldHVybiBlfXZhciBmPXUodC5taW5pbXVtLHQuZXhjbHVzaXZlTWluaW11bSk7aWkoZikmJmk8PWYmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oImV4Y2x1c2l2ZU1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIGV4Y2x1c2l2ZSBtaW5pbXVtIG9mIHswfS4iLGYpfSk7dmFyIGQ9dSh0Lm1heGltdW0sdC5leGNsdXNpdmVNYXhpbXVtKTtpaShkKSYmaT49ZCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpMbygiZXhjbHVzaXZlTWF4aW11bVdhcm5pbmciLCJWYWx1ZSBpcyBhYm92ZSB0aGUgZXhjbHVzaXZlIG1heGltdW0gb2YgezB9LiIsZCl9KTt2YXIgbT1oKHQubWluaW11bSx0LmV4Y2x1c2l2ZU1pbmltdW0pO2lpKG0pJiZpPG0mJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIm1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIG1pbmltdW0gb2YgezB9LiIsbSl9KTt2YXIgZz1oKHQubWF4aW11bSx0LmV4Y2x1c2l2ZU1heGltdW0pO2lpKGcpJiZpPmcmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIm1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIG1heGltdW0gb2YgezB9LiIsZyl9KX0oaSx0LG4pO2JyZWFrO2Nhc2UicHJvcGVydHkiOnJldHVybiB6byhpLnZhbHVlTm9kZSx0LG4scil9IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gaS50eXBlPT09ZXx8ImludGVnZXIiPT09ZSYmIm51bWJlciI9PT1pLnR5cGUmJmkuaXNJbnRlZ2VyfUFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGUuc29tZShlKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8TG8oInR5cGVBcnJheU1pc21hdGNoV2FybmluZyIsIkluY29ycmVjdCB0eXBlLiBFeHBlY3RlZCBvbmUgb2YgezB9LiIsdC50eXBlLmpvaW4oIiwgIikpfSk6dC50eXBlJiYoZSh0LnR5cGUpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxMbygidHlwZU1pc21hdGNoV2FybmluZyIsJ0luY29ycmVjdCB0eXBlLiBFeHBlY3RlZCAiezB9Ii4nLHQudHlwZSl9KSk7aWYoQXJyYXkuaXNBcnJheSh0LmFsbE9mKSlmb3IodmFyIG89MCxhPXQuYWxsT2Y7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107em8oaSxLbyhzKSxuLHIpfXZhciBjPUtvKHQubm90KTtpZihjKXt2YXIgbD1uZXcgQm8sdT1yLm5ld1N1YigpO3pvKGksYyxsLHUpLGwuaGFzUHJvYmxlbXMoKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTpMbygibm90U2NoZW1hV2FybmluZyIsIk1hdGNoZXMgYSBzY2hlbWEgdGhhdCBpcyBub3QgYWxsb3dlZC4iKX0pO2Zvcih2YXIgaD0wLGY9dS5zY2hlbWFzO2g8Zi5sZW5ndGg7aCsrKXt2YXIgZD1mW2hdO2QuaW52ZXJ0ZWQ9IWQuaW52ZXJ0ZWQsci5hZGQoZCl9fXZhciBtPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPVtdLGE9dm9pZCAwLHM9MCxjPWU7czxjLmxlbmd0aDtzKyspe3ZhciBsPUtvKGNbc10pLHU9bmV3IEJvLGg9ci5uZXdTdWIoKTtpZih6byhpLGwsdSxoKSx1Lmhhc1Byb2JsZW1zKCl8fG8ucHVzaChsKSxhKWlmKHR8fHUuaGFzUHJvYmxlbXMoKXx8YS52YWxpZGF0aW9uUmVzdWx0Lmhhc1Byb2JsZW1zKCkpe3ZhciBmPXUuY29tcGFyZShhLnZhbGlkYXRpb25SZXN1bHQpO2Y+MD9hPXtzY2hlbWE6bCx2YWxpZGF0aW9uUmVzdWx0OnUsbWF0Y2hpbmdTY2hlbWFzOmh9OjA9PT1mJiYoYS5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoaCksYS52YWxpZGF0aW9uUmVzdWx0Lm1lcmdlRW51bVZhbHVlcyh1KSl9ZWxzZSBhLm1hdGNoaW5nU2NoZW1hcy5tZXJnZShoKSxhLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc01hdGNoZXMrPXUucHJvcGVydGllc01hdGNoZXMsYS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPXUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcztlbHNlIGE9e3NjaGVtYTpsLHZhbGlkYXRpb25SZXN1bHQ6dSxtYXRjaGluZ1NjaGVtYXM6aH19cmV0dXJuIG8ubGVuZ3RoPjEmJnQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6MX0sbWVzc2FnZTpMbygib25lT2ZXYXJuaW5nIiwiTWF0Y2hlcyBtdWx0aXBsZSBzY2hlbWFzIHdoZW4gb25seSBvbmUgbXVzdCB2YWxpZGF0ZS4iKX0pLGEmJihuLm1lcmdlKGEudmFsaWRhdGlvblJlc3VsdCksbi5wcm9wZXJ0aWVzTWF0Y2hlcys9YS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9YS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMsci5tZXJnZShhLm1hdGNoaW5nU2NoZW1hcykpLG8ubGVuZ3RofTtBcnJheS5pc0FycmF5KHQuYW55T2YpJiZtKHQuYW55T2YsITEpO0FycmF5LmlzQXJyYXkodC5vbmVPZikmJm0odC5vbmVPZiwhMCk7dmFyIGc9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEJvLG89ci5uZXdTdWIoKTt6byhpLEtvKGUpLHQsbyksbi5tZXJnZSh0KSxuLnByb3BlcnRpZXNNYXRjaGVzKz10LnByb3BlcnRpZXNNYXRjaGVzLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9dC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLHIubWVyZ2Uobyl9LHA9S28odC5pZik7cCYmKGI9cCx2PUtvKHQudGhlbikseT1Lbyh0LmVsc2UpLEM9S28oYiksdz1uZXcgQm8sXz1yLm5ld1N1YigpLHpvKGksQyx3LF8pLHIubWVyZ2UoXyksdy5oYXNQcm9ibGVtcygpP3kmJmcoeSk6diYmZyh2KSk7dmFyIGIsdix5LEMsdyxfO2lmKEFycmF5LmlzQXJyYXkodC5lbnVtKSl7Zm9yKHZhciBTPXFvKGkpLEE9ITEsRT0wLHg9dC5lbnVtO0U8eC5sZW5ndGg7RSsrKXt2YXIgTj14W0VdO2lmKHJpKFMsTikpe0E9ITA7YnJlYWt9fW4uZW51bVZhbHVlcz10LmVudW0sbi5lbnVtVmFsdWVNYXRjaD1BLEF8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LGNvZGU6Z28uRW51bVZhbHVlTWlzbWF0Y2gsbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8TG8oImVudW1XYXJuaW5nIiwiVmFsdWUgaXMgbm90IGFjY2VwdGVkLiBWYWxpZCB2YWx1ZXM6IHswfS4iLHQuZW51bS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0pKS5qb2luKCIsICIpKX0pfWlmKG9pKHQuY29uc3QpKXtyaShTPXFvKGkpLHQuY29uc3QpP24uZW51bVZhbHVlTWF0Y2g9ITA6KG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LGNvZGU6Z28uRW51bVZhbHVlTWlzbWF0Y2gsbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8TG8oImNvbnN0V2FybmluZyIsIlZhbHVlIG11c3QgYmUgezB9LiIsSlNPTi5zdHJpbmdpZnkodC5jb25zdCkpfSksbi5lbnVtVmFsdWVNYXRjaD0hMSksbi5lbnVtVmFsdWVzPVt0LmNvbnN0XX10LmRlcHJlY2F0aW9uTWVzc2FnZSYmaS5wYXJlbnQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLnBhcmVudC5vZmZzZXQsbGVuZ3RoOmkucGFyZW50Lmxlbmd0aH0sc2V2ZXJpdHk6TnIuV2FybmluZyxtZXNzYWdlOnQuZGVwcmVjYXRpb25NZXNzYWdlLGNvZGU6Z28uRGVwcmVjYXRlZH0pfSgpLHIuYWRkKHtub2RlOmksc2NoZW1hOnR9KX19ZnVuY3Rpb24gR28oZSx0KXt2YXIgbj1bXSxyPS0xLGk9ZS5nZXRUZXh0KCksbz1ZcihpLCExKSxhPXQmJnQuY29sbGVjdENvbW1lbnRzP1tdOnZvaWQgMDtmdW5jdGlvbiBzKCl7Zm9yKDs7KXt2YXIgdD1vLnNjYW4oKTtzd2l0Y2godSgpLHQpe2Nhc2UgMTI6Y2FzZSAxMzpBcnJheS5pc0FycmF5KGEpJiZhLnB1c2gobHIuY3JlYXRlKGUucG9zaXRpb25BdChvLmdldFRva2VuT2Zmc2V0KCkpLGUucG9zaXRpb25BdChvLmdldFRva2VuT2Zmc2V0KCkrby5nZXRUb2tlbkxlbmd0aCgpKSkpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNDpicmVhaztkZWZhdWx0OnJldHVybiB0fX19ZnVuY3Rpb24gYyh0LGksbyxhLHMpe2lmKHZvaWQgMD09PXMmJihzPU5yLkVycm9yKSwwPT09bi5sZW5ndGh8fG8hPT1yKXt2YXIgYz1sci5jcmVhdGUoZS5wb3NpdGlvbkF0KG8pLGUucG9zaXRpb25BdChhKSk7bi5wdXNoKElyLmNyZWF0ZShjLHQscyxpLGUubGFuZ3VhZ2VJZCkpLHI9b319ZnVuY3Rpb24gbChlLHQsbixyLGEpe3ZvaWQgMD09PW4mJihuPXZvaWQgMCksdm9pZCAwPT09ciYmKHI9W10pLHZvaWQgMD09PWEmJihhPVtdKTt2YXIgbD1vLmdldFRva2VuT2Zmc2V0KCksdT1vLmdldFRva2VuT2Zmc2V0KCkrby5nZXRUb2tlbkxlbmd0aCgpO2lmKGw9PT11JiZsPjApe2ZvcihsLS07bD4wJiYvXHMvLnRlc3QoaS5jaGFyQXQobCkpOylsLS07dT1sKzF9aWYoYyhlLHQsbCx1KSxuJiZoKG4sITEpLHIubGVuZ3RoK2EubGVuZ3RoPjApZm9yKHZhciBmPW8uZ2V0VG9rZW4oKTsxNyE9PWY7KXtpZigtMSE9PXIuaW5kZXhPZihmKSl7cygpO2JyZWFrfWlmKC0xIT09YS5pbmRleE9mKGYpKWJyZWFrO2Y9cygpfXJldHVybiBufWZ1bmN0aW9uIHUoKXtzd2l0Y2goby5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDpyZXR1cm4gbChMbygiSW52YWxpZFVuaWNvZGUiLCJJbnZhbGlkIHVuaWNvZGUgc2VxdWVuY2UgaW4gc3RyaW5nLiIpLGdvLkludmFsaWRVbmljb2RlKSwhMDtjYXNlIDU6cmV0dXJuIGwoTG8oIkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLCJJbnZhbGlkIGVzY2FwZSBjaGFyYWN0ZXIgaW4gc3RyaW5nLiIpLGdvLkludmFsaWRFc2NhcGVDaGFyYWN0ZXIpLCEwO2Nhc2UgMzpyZXR1cm4gbChMbygiVW5leHBlY3RlZEVuZE9mTnVtYmVyIiwiVW5leHBlY3RlZCBlbmQgb2YgbnVtYmVyLiIpLGdvLlVuZXhwZWN0ZWRFbmRPZk51bWJlciksITA7Y2FzZSAxOnJldHVybiBsKExvKCJVbmV4cGVjdGVkRW5kT2ZDb21tZW50IiwiVW5leHBlY3RlZCBlbmQgb2YgY29tbWVudC4iKSxnby5VbmV4cGVjdGVkRW5kT2ZDb21tZW50KSwhMDtjYXNlIDI6cmV0dXJuIGwoTG8oIlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIsIlVuZXhwZWN0ZWQgZW5kIG9mIHN0cmluZy4iKSxnby5VbmV4cGVjdGVkRW5kT2ZTdHJpbmcpLCEwO2Nhc2UgNjpyZXR1cm4gbChMbygiSW52YWxpZENoYXJhY3RlciIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBzdHJpbmcuIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IGJlIGVzY2FwZWQuIiksZ28uSW52YWxpZENoYXJhY3RlciksITB9cmV0dXJuITF9ZnVuY3Rpb24gaChlLHQpe3JldHVybiBlLmxlbmd0aD1vLmdldFRva2VuT2Zmc2V0KCkrby5nZXRUb2tlbkxlbmd0aCgpLWUub2Zmc2V0LHQmJnMoKSxlfXZhciBmPW5ldyBWbyh2b2lkIDAsMCwwKTtmdW5jdGlvbiBkKHQsbil7dmFyIHI9bmV3IEZvKHQsby5nZXRUb2tlbk9mZnNldCgpLGYpLGk9bShyKTtpZighaSl7aWYoMTYhPT1vLmdldFRva2VuKCkpcmV0dXJuO2woTG8oIkRvdWJsZVF1b3Rlc0V4cGVjdGVkIiwiUHJvcGVydHkga2V5cyBtdXN0IGJlIGRvdWJsZXF1b3RlZCIpLGdvLlVuZGVmaW5lZCk7dmFyIGE9bmV3IFZvKHIsby5nZXRUb2tlbk9mZnNldCgpLG8uZ2V0VG9rZW5MZW5ndGgoKSk7YS52YWx1ZT1vLmdldFRva2VuVmFsdWUoKSxpPWEscygpfXIua2V5Tm9kZT1pO3ZhciB1PW5baS52YWx1ZV07aWYodT8oYyhMbygiRHVwbGljYXRlS2V5V2FybmluZyIsIkR1cGxpY2F0ZSBvYmplY3Qga2V5IiksZ28uRHVwbGljYXRlS2V5LHIua2V5Tm9kZS5vZmZzZXQsci5rZXlOb2RlLm9mZnNldCtyLmtleU5vZGUubGVuZ3RoLE5yLldhcm5pbmcpLCJvYmplY3QiPT10eXBlb2YgdSYmYyhMbygiRHVwbGljYXRlS2V5V2FybmluZyIsIkR1cGxpY2F0ZSBvYmplY3Qga2V5IiksZ28uRHVwbGljYXRlS2V5LHUua2V5Tm9kZS5vZmZzZXQsdS5rZXlOb2RlLm9mZnNldCt1LmtleU5vZGUubGVuZ3RoLE5yLldhcm5pbmcpLG5baS52YWx1ZV09ITApOm5baS52YWx1ZV09ciw2PT09by5nZXRUb2tlbigpKXIuY29sb25PZmZzZXQ9by5nZXRUb2tlbk9mZnNldCgpLHMoKTtlbHNlIGlmKGwoTG8oIkNvbG9uRXhwZWN0ZWQiLCJDb2xvbiBleHBlY3RlZCIpLGdvLkNvbG9uRXhwZWN0ZWQpLDEwPT09by5nZXRUb2tlbigpJiZlLnBvc2l0aW9uQXQoaS5vZmZzZXQraS5sZW5ndGgpLmxpbmU8ZS5wb3NpdGlvbkF0KG8uZ2V0VG9rZW5PZmZzZXQoKSkubGluZSlyZXR1cm4gci5sZW5ndGg9aS5sZW5ndGgscjt2YXIgaD1nKHIpO3JldHVybiBoPyhyLnZhbHVlTm9kZT1oLHIubGVuZ3RoPWgub2Zmc2V0K2gubGVuZ3RoLXIub2Zmc2V0LHIpOmwoTG8oIlZhbHVlRXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLGdvLlZhbHVlRXhwZWN0ZWQscixbXSxbMiw1XSl9ZnVuY3Rpb24gbShlKXtpZigxMD09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IFZvKGUsby5nZXRUb2tlbk9mZnNldCgpKTtyZXR1cm4gdC52YWx1ZT1vLmdldFRva2VuVmFsdWUoKSxoKHQsITApfX1mdW5jdGlvbiBnKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZigzPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgUG8oZSxvLmdldFRva2VuT2Zmc2V0KCkpO3MoKTtmb3IodmFyIG49ITE7NCE9PW8uZ2V0VG9rZW4oKSYmMTchPT1vLmdldFRva2VuKCk7KXtpZig1PT09by5nZXRUb2tlbigpKXtufHxsKExvKCJWYWx1ZUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSxnby5WYWx1ZUV4cGVjdGVkKTt2YXIgcj1vLmdldFRva2VuT2Zmc2V0KCk7aWYocygpLDQ9PT1vLmdldFRva2VuKCkpe24mJmMoTG8oIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLGdvLlRyYWlsaW5nQ29tbWEscixyKzEpO2NvbnRpbnVlfX1lbHNlIG4mJmwoTG8oIkV4cGVjdGVkQ29tbWEiLCJFeHBlY3RlZCBjb21tYSIpLGdvLkNvbW1hRXhwZWN0ZWQpO3ZhciBpPWcodCk7aT90Lml0ZW1zLnB1c2goaSk6bChMbygiUHJvcGVydHlFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksZ28uVmFsdWVFeHBlY3RlZCx2b2lkIDAsW10sWzQsNV0pLG49ITB9cmV0dXJuIDQhPT1vLmdldFRva2VuKCk/bChMbygiRXhwZWN0ZWRDbG9zZUJyYWNrZXQiLCJFeHBlY3RlZCBjb21tYSBvciBjbG9zaW5nIGJyYWNrZXQiKSxnby5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCx0KTpoKHQsITApfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKDE9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyBEbyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSksbj1PYmplY3QuY3JlYXRlKG51bGwpO3MoKTtmb3IodmFyIHI9ITE7MiE9PW8uZ2V0VG9rZW4oKSYmMTchPT1vLmdldFRva2VuKCk7KXtpZig1PT09by5nZXRUb2tlbigpKXtyfHxsKExvKCJQcm9wZXJ0eUV4cGVjdGVkIiwiUHJvcGVydHkgZXhwZWN0ZWQiKSxnby5Qcm9wZXJ0eUV4cGVjdGVkKTt2YXIgaT1vLmdldFRva2VuT2Zmc2V0KCk7aWYocygpLDI9PT1vLmdldFRva2VuKCkpe3ImJmMoTG8oIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLGdvLlRyYWlsaW5nQ29tbWEsaSxpKzEpO2NvbnRpbnVlfX1lbHNlIHImJmwoTG8oIkV4cGVjdGVkQ29tbWEiLCJFeHBlY3RlZCBjb21tYSIpLGdvLkNvbW1hRXhwZWN0ZWQpO3ZhciBhPWQodCxuKTthP3QucHJvcGVydGllcy5wdXNoKGEpOmwoTG8oIlByb3BlcnR5RXhwZWN0ZWQiLCJQcm9wZXJ0eSBleHBlY3RlZCIpLGdvLlByb3BlcnR5RXhwZWN0ZWQsdm9pZCAwLFtdLFsyLDVdKSxyPSEwfXJldHVybiAyIT09by5nZXRUb2tlbigpP2woTG8oIkV4cGVjdGVkQ2xvc2VCcmFjZSIsIkV4cGVjdGVkIGNvbW1hIG9yIGNsb3NpbmcgYnJhY2UiKSxnby5Db21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkLHQpOmgodCwhMCl9fShlKXx8bShlKXx8ZnVuY3Rpb24oZSl7aWYoMTE9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyBSbyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSk7aWYoMD09PW8uZ2V0VG9rZW5FcnJvcigpKXt2YXIgbj1vLmdldFRva2VuVmFsdWUoKTt0cnl7dmFyIHI9SlNPTi5wYXJzZShuKTtpZighaWkocikpcmV0dXJuIGwoTG8oIkludmFsaWROdW1iZXJGb3JtYXQiLCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksZ28uVW5kZWZpbmVkLHQpO3QudmFsdWU9cn1jYXRjaChlKXtyZXR1cm4gbChMbygiSW52YWxpZE51bWJlckZvcm1hdCIsIkludmFsaWQgbnVtYmVyIGZvcm1hdC4iKSxnby5VbmRlZmluZWQsdCl9dC5pc0ludGVnZXI9LTE9PT1uLmluZGV4T2YoIi4iKX1yZXR1cm4gaCh0LCEwKX19KGUpfHxmdW5jdGlvbihlKXtzd2l0Y2goby5nZXRUb2tlbigpKXtjYXNlIDc6cmV0dXJuIGgobmV3IElvKGUsby5nZXRUb2tlbk9mZnNldCgpKSwhMCk7Y2FzZSA4OnJldHVybiBoKG5ldyBNbyhlLCEwLG8uZ2V0VG9rZW5PZmZzZXQoKSksITApO2Nhc2UgOTpyZXR1cm4gaChuZXcgTW8oZSwhMSxvLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtkZWZhdWx0OnJldHVybn19KGUpfXZhciBwPXZvaWQgMDtyZXR1cm4gMTchPT1zKCkmJigocD1nKHApKT8xNyE9PW8uZ2V0VG9rZW4oKSYmbChMbygiRW5kIG9mIGZpbGUgZXhwZWN0ZWQiLCJFbmQgb2YgZmlsZSBleHBlY3RlZC4iKSxnby5VbmRlZmluZWQpOmwoTG8oIkludmFsaWQgc3ltYm9sIiwiRXhwZWN0ZWQgYSBKU09OIG9iamVjdCwgYXJyYXkgb3IgbGl0ZXJhbC4iKSxnby5VbmRlZmluZWQpKSxuZXcgSG8ocCxuLGEpfWZ1bmN0aW9uIEpvKGUsdCxuKXtpZihudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgcj10KyJcdCI7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiJbXSI7Zm9yKHZhciBpPSJbXG4iLG89MDtvPGUubGVuZ3RoO28rKylpKz1yK0pvKGVbb10scixuKSxvPGUubGVuZ3RoLTEmJihpKz0iLCIpLGkrPSJcbiI7cmV0dXJuIGkrPXQrIl0ifXZhciBhPU9iamVjdC5rZXlzKGUpO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4ie30iO2ZvcihpPSJ7XG4iLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtpKz1yK0pTT04uc3RyaW5naWZ5KHMpKyI6ICIrSm8oZVtzXSxyLG4pLG88YS5sZW5ndGgtMSYmKGkrPSIsIiksaSs9IlxuIn1yZXR1cm4gaSs9dCsifSJ9cmV0dXJuIG4oZSl9dmFyIFhvPUFvKCksWm89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1uJiYobj1Qcm9taXNlKSx2b2lkIDA9PT1yJiYocj17fSksdGhpcy5zY2hlbWFTZXJ2aWNlPWUsdGhpcy5jb250cmlidXRpb25zPXQsdGhpcy5wcm9taXNlQ29uc3RydWN0b3I9bix0aGlzLmNsaWVudENhcGFiaWxpdGllcz1yfXJldHVybiBlLnByb3RvdHlwZS5kb1Jlc29sdmU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIG49dGhpcy5jb250cmlidXRpb25zW3RdLnJlc29sdmVDb21wbGV0aW9uO2lmKG4pe3ZhciByPW4oZSk7aWYocilyZXR1cm4gcn19cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUoZSl9LGUucHJvdG90eXBlLmRvQ29tcGxldGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMsaT17aXRlbXM6W10saXNJbmNvbXBsZXRlOiExfSxvPWUuZ2V0VGV4dCgpLGE9ZS5vZmZzZXRBdCh0KSxzPW4uZ2V0Tm9kZUZyb21PZmZzZXQoYSwhMCk7aWYodGhpcy5pc0luQ29tbWVudChlLHM/cy5vZmZzZXQ6MCxhKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpO2lmKHMmJmE9PT1zLm9mZnNldCtzLmxlbmd0aCYmYT4wKXt2YXIgYz1vW2EtMV07KCJvYmplY3QiPT09cy50eXBlJiYifSI9PT1jfHwiYXJyYXkiPT09cy50eXBlJiYiXSI9PT1jKSYmKHM9cy5wYXJlbnQpfXZhciBsLHU9dGhpcy5nZXRDdXJyZW50V29yZChlLGEpO2lmKCFzfHwic3RyaW5nIiE9PXMudHlwZSYmIm51bWJlciIhPT1zLnR5cGUmJiJib29sZWFuIiE9PXMudHlwZSYmIm51bGwiIT09cy50eXBlKXt2YXIgaD1hLXUubGVuZ3RoO2g+MCYmJyInPT09b1toLTFdJiZoLS0sbD1sci5jcmVhdGUoZS5wb3NpdGlvbkF0KGgpLHQpfWVsc2UgbD1sci5jcmVhdGUoZS5wb3NpdGlvbkF0KHMub2Zmc2V0KSxlLnBvc2l0aW9uQXQocy5vZmZzZXQrcy5sZW5ndGgpKTt2YXIgZj17fSxkPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sYWJlbCxuPWZbdF07aWYobiluLmRvY3VtZW50YXRpb258fChuLmRvY3VtZW50YXRpb249ZS5kb2N1bWVudGF0aW9uKSxuLmRldGFpbHx8KG4uZGV0YWlsPWUuZGV0YWlsKTtlbHNle2lmKCh0PXQucmVwbGFjZSgvW1xuXS9nLCLihrUiKSkubGVuZ3RoPjYwKXt2YXIgcj10LnN1YnN0cigwLDU3KS50cmltKCkrIi4uLiI7ZltyXXx8KHQ9cil9bCYmdm9pZCAwIT09ZS5pbnNlcnRUZXh0JiYoZS50ZXh0RWRpdD1Wci5yZXBsYWNlKGwsZS5pbnNlcnRUZXh0KSksZS5sYWJlbD10LGZbdF09ZSxpLml0ZW1zLnB1c2goZSl9fSxzZXRBc0luY29tcGxldGU6ZnVuY3Rpb24oKXtpLmlzSW5jb21wbGV0ZT0hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcihlKX0sbG9nOmZ1bmN0aW9uKGUpe2NvbnNvbGUubG9nKGUpfSxnZXROdW1iZXJPZlByb3Bvc2FsczpmdW5jdGlvbigpe3JldHVybiBpLml0ZW1zLmxlbmd0aH19O3JldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksbikudGhlbigoZnVuY3Rpb24odCl7dmFyIGM9W10saD0hMCxtPSIiLGc9dm9pZCAwO2lmKHMmJiJzdHJpbmciPT09cy50eXBlKXt2YXIgcD1zLnBhcmVudDtwJiYicHJvcGVydHkiPT09cC50eXBlJiZwLmtleU5vZGU9PT1zJiYoaD0hcC52YWx1ZU5vZGUsZz1wLG09by5zdWJzdHIocy5vZmZzZXQrMSxzLmxlbmd0aC0yKSxwJiYocz1wLnBhcmVudCkpfWlmKHMmJiJvYmplY3QiPT09cy50eXBlKXtpZihzLm9mZnNldD09PWEpcmV0dXJuIGk7cy5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2cmJmc9PT1lfHwoZltlLmtleU5vZGUudmFsdWVdPUxpLmNyZWF0ZSgiX18iKSl9KSk7dmFyIGI9IiI7aCYmKGI9ci5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGUsZS5vZmZzZXRBdChsLmVuZCkpKSx0P3IuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyh0LG4scyxoLGIsZCk6ci5nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucyhuLHMsbSxkKTt2YXIgdj0kbyhzKTtyLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dC5jb2xsZWN0UHJvcGVydHlDb21wbGV0aW9ucyhlLnVyaSx2LHUsaCwiIj09PWIsZCk7biYmYy5wdXNoKG4pfSkpLCF0JiZ1Lmxlbmd0aD4wJiYnIichPT1vLmNoYXJBdChhLXUubGVuZ3RoLTEpJiYoZC5hZGQoe2tpbmQ6Q2kuUHJvcGVydHksbGFiZWw6ci5nZXRMYWJlbEZvclZhbHVlKHUpLGluc2VydFRleHQ6ci5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkodSx2b2lkIDAsITEsYiksaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSxkLnNldEFzSW5jb21wbGV0ZSgpKX12YXIgeT17fTtyZXR1cm4gdD9yLmdldFZhbHVlQ29tcGxldGlvbnModCxuLHMsYSxlLGQseSk6ci5nZXRTY2hlbWFMZXNzVmFsdWVDb21wbGV0aW9ucyhuLHMsYSxlLGQpLHIuY29udHJpYnV0aW9ucy5sZW5ndGg+MCYmci5nZXRDb250cmlidXRlZFZhbHVlQ29tcGxldGlvbnMobixzLGEsZSxkLGMpLHIucHJvbWlzZUNvbnN0cnVjdG9yLmFsbChjKS50aGVuKChmdW5jdGlvbigpe2lmKDA9PT1kLmdldE51bWJlck9mUHJvcG9zYWxzKCkpe3ZhciB0PWE7IXN8fCJzdHJpbmciIT09cy50eXBlJiYibnVtYmVyIiE9PXMudHlwZSYmImJvb2xlYW4iIT09cy50eXBlJiYibnVsbCIhPT1zLnR5cGV8fCh0PXMub2Zmc2V0K3MubGVuZ3RoKTt2YXIgbj1yLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoZSx0KTtyLmFkZEZpbGxlclZhbHVlQ29tcGxldGlvbnMoeSxuLGQpfXJldHVybiBpfSkpfSkpfSxlLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT10aGlzO3QuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLG4ub2Zmc2V0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLm5vZGU9PT1uJiYhZS5pbnZlcnRlZCl7dmFyIHQ9ZS5zY2hlbWEucHJvcGVydGllczt0JiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10W2VdO2lmKCJvYmplY3QiPT10eXBlb2YgbiYmIW4uZGVwcmVjYXRpb25NZXNzYWdlJiYhbi5kb05vdFN1Z2dlc3Qpe3ZhciBzPXtraW5kOkNpLlByb3BlcnR5LGxhYmVsOmUsaW5zZXJ0VGV4dDphLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eShlLG4scixpKSxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZmlsdGVyVGV4dDphLmdldEZpbHRlclRleHRGb3JWYWx1ZShlKSxkb2N1bWVudGF0aW9uOmEuZnJvbU1hcmt1cChuLm1hcmtkb3duRGVzY3JpcHRpb24pfHxuLmRlc2NyaXB0aW9ufHwiIn07dm9pZCAwIT09bi5zdWdnZXN0U29ydFRleHQmJihzLnNvcnRUZXh0PW4uc3VnZ2VzdFNvcnRUZXh0KSxzLmluc2VydFRleHQmJnNpKHMuaW5zZXJ0VGV4dCwiJDEiLmNvbmNhdChpKSkmJihzLmNvbW1hbmQ9e3RpdGxlOiJTdWdnZXN0Iixjb21tYW5kOiJlZGl0b3IuYWN0aW9uLnRyaWdnZXJTdWdnZXN0In0pLG8uYWRkKHMpfX0pKTt2YXIgcz1lLnNjaGVtYS5wcm9wZXJ0eU5hbWVzO2lmKCJvYmplY3QiPT10eXBlb2YgcyYmIXMuZGVwcmVjYXRpb25NZXNzYWdlJiYhcy5kb05vdFN1Z2dlc3Qpe3ZhciBjPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKTt2YXIgbj17a2luZDpDaS5Qcm9wZXJ0eSxsYWJlbDplLGluc2VydFRleHQ6YS5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoZSx2b2lkIDAscixpKSxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZmlsdGVyVGV4dDphLmdldEZpbHRlclRleHRGb3JWYWx1ZShlKSxkb2N1bWVudGF0aW9uOnR8fGEuZnJvbU1hcmt1cChzLm1hcmtkb3duRGVzY3JpcHRpb24pfHxzLmRlc2NyaXB0aW9ufHwiIn07dm9pZCAwIT09cy5zdWdnZXN0U29ydFRleHQmJihuLnNvcnRUZXh0PXMuc3VnZ2VzdFNvcnRUZXh0KSxuLmluc2VydFRleHQmJnNpKG4uaW5zZXJ0VGV4dCwiJDEiLmNvbmNhdChpKSkmJihuLmNvbW1hbmQ9e3RpdGxlOiJTdWdnZXN0Iixjb21tYW5kOiJlZGl0b3IuYWN0aW9uLnRyaWdnZXJTdWdnZXN0In0pLG8uYWRkKG4pfTtpZihzLmVudW0pZm9yKHZhciBsPTA7bDxzLmVudW0ubGVuZ3RoO2wrKyl7dmFyIHU9dm9pZCAwO3MubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zJiZsPHMubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zLmxlbmd0aD91PWEuZnJvbU1hcmt1cChzLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1tsXSk6cy5lbnVtRGVzY3JpcHRpb25zJiZsPHMuZW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJih1PXMuZW51bURlc2NyaXB0aW9uc1tsXSksYyhzLmVudW1bbF0sdSl9cy5jb25zdCYmYyhzLmNvbnN0KX19fSkpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLG89ZnVuY3Rpb24oZSl7ZS5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Tm9kZS52YWx1ZTtyLmFkZCh7a2luZDpDaS5Qcm9wZXJ0eSxsYWJlbDp0LGluc2VydFRleHQ6aS5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUodCwiIiksaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGZpbHRlclRleHQ6aS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUodCksZG9jdW1lbnRhdGlvbjoiIn0pfSkpfTtpZih0LnBhcmVudClpZigicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIGE9dC5wYXJlbnQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KChmdW5jdGlvbihlKXtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiZlIT09dC5wYXJlbnQmJmUua2V5Tm9kZS52YWx1ZT09PWEmJmUudmFsdWVOb2RlJiYib2JqZWN0Ij09PWUudmFsdWVOb2RlLnR5cGUmJm8oZS52YWx1ZU5vZGUpLCEwfSkpfWVsc2UiYXJyYXkiPT09dC5wYXJlbnQudHlwZSYmdC5wYXJlbnQuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Im9iamVjdCI9PT1lLnR5cGUmJmUhPT10JiZvKGUpfSkpO2Vsc2Uib2JqZWN0Ij09PXQudHlwZSYmci5hZGQoe2tpbmQ6Q2kuUHJvcGVydHksbGFiZWw6IiRzY2hlbWEiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoIiRzY2hlbWEiLHZvaWQgMCwhMCwiIiksaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiIsZmlsdGVyVGV4dDp0aGlzLmdldEZpbHRlclRleHRGb3JWYWx1ZSgiJHNjaGVtYSIpfSl9LGUucHJvdG90eXBlLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89dGhpcyxhPW47aWYoIXR8fCJzdHJpbmciIT09dC50eXBlJiYibnVtYmVyIiE9PXQudHlwZSYmImJvb2xlYW4iIT09dC50eXBlJiYibnVsbCIhPT10LnR5cGV8fChhPXQub2Zmc2V0K3QubGVuZ3RoLHQ9dC5wYXJlbnQpLCF0KXJldHVybiBpLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJvYmplY3QiKSxsYWJlbDoiRW1wdHkgb2JqZWN0IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHt9LCIiKSxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLHZvaWQgaS5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYXJyYXkiKSxsYWJlbDoiRW1wdHkgYXJyYXkiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoW10sIiIpLGluc2VydFRleHRGb3JtYXQ6X2kuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSk7dmFyIHM9dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKHIsYSksYz1mdW5jdGlvbihlKXtlLnBhcmVudCYmIVdvKGUucGFyZW50LG4sITApJiZpLmFkZCh7a2luZDpvLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6by5nZXRMYWJlbFRleHRGb3JNYXRjaGluZ05vZGUoZSxyKSxpbnNlcnRUZXh0Om8uZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZShlLHIscyksaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSwiYm9vbGVhbiI9PT1lLnR5cGUmJm8uYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighZS52YWx1ZSxzLGkpfTtpZigicHJvcGVydHkiPT09dC50eXBlJiZuPih0LmNvbG9uT2Zmc2V0fHwwKSl7dmFyIGw9dC52YWx1ZU5vZGU7aWYobCYmKG4+bC5vZmZzZXQrbC5sZW5ndGh8fCJvYmplY3QiPT09bC50eXBlfHwiYXJyYXkiPT09bC50eXBlKSlyZXR1cm47dmFyIHU9dC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoKGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUua2V5Tm9kZS52YWx1ZT09PXUmJmUudmFsdWVOb2RlJiZjKGUudmFsdWVOb2RlKSwhMH0pKSwiJHNjaGVtYSI9PT11JiZ0LnBhcmVudCYmIXQucGFyZW50LnBhcmVudCYmdGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhzLGkpfWlmKCJhcnJheSI9PT10LnR5cGUpaWYodC5wYXJlbnQmJiJwcm9wZXJ0eSI9PT10LnBhcmVudC50eXBlKXt2YXIgaD10LnBhcmVudC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoKGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUua2V5Tm9kZS52YWx1ZT09PWgmJmUudmFsdWVOb2RlJiYiYXJyYXkiPT09ZS52YWx1ZU5vZGUudHlwZSYmZS52YWx1ZU5vZGUuaXRlbXMuZm9yRWFjaChjKSwhMH0pKX1lbHNlIHQuaXRlbXMuZm9yRWFjaChjKX0sZS5wcm90b3R5cGUuZ2V0VmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGksbyxhKXt2YXIgcz1yLGM9dm9pZCAwLGw9dm9pZCAwO2lmKCFufHwic3RyaW5nIiE9PW4udHlwZSYmIm51bWJlciIhPT1uLnR5cGUmJiJib29sZWFuIiE9PW4udHlwZSYmIm51bGwiIT09bi50eXBlfHwocz1uLm9mZnNldCtuLmxlbmd0aCxsPW4sbj1uLnBhcmVudCksbil7aWYoInByb3BlcnR5Ij09PW4udHlwZSYmcj4obi5jb2xvbk9mZnNldHx8MCkpe3ZhciB1PW4udmFsdWVOb2RlO2lmKHUmJnI+dS5vZmZzZXQrdS5sZW5ndGgpcmV0dXJuO2M9bi5rZXlOb2RlLnZhbHVlLG49bi5wYXJlbnR9aWYobiYmKHZvaWQgMCE9PWN8fCJhcnJheSI9PT1uLnR5cGUpKXtmb3IodmFyIGg9dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGkscyksZj0wLGQ9dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEsbi5vZmZzZXQsbCk7ZjxkLmxlbmd0aDtmKyspe3ZhciBtPWRbZl07aWYobS5ub2RlPT09biYmIW0uaW52ZXJ0ZWQmJm0uc2NoZW1hKXtpZigiYXJyYXkiPT09bi50eXBlJiZtLnNjaGVtYS5pdGVtcylpZihBcnJheS5pc0FycmF5KG0uc2NoZW1hLml0ZW1zKSl7dmFyIGc9dGhpcy5maW5kSXRlbUF0T2Zmc2V0KG4saSxyKTtnPG0uc2NoZW1hLml0ZW1zLmxlbmd0aCYmdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKG0uc2NoZW1hLml0ZW1zW2ddLGgsbyxhKX1lbHNlIHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhtLnNjaGVtYS5pdGVtcyxoLG8sYSk7aWYodm9pZCAwIT09Yyl7dmFyIHA9ITE7aWYobS5zY2hlbWEucHJvcGVydGllcykodz1tLnNjaGVtYS5wcm9wZXJ0aWVzW2NdKSYmKHA9ITAsdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHcsaCxvLGEpKTtpZihtLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyYmIXApZm9yKHZhciBiPTAsdj1PYmplY3Qua2V5cyhtLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyk7Yjx2Lmxlbmd0aDtiKyspe3ZhciB5PXZbYl0sQz1jaSh5KTtpZihudWxsPT1DP3ZvaWQgMDpDLnRlc3QoYykpe3A9ITA7dmFyIHc9bS5zY2hlbWEucGF0dGVyblByb3BlcnRpZXNbeV07dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHcsaCxvLGEpfX1pZihtLnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyYmIXApe3c9bS5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXM7dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHcsaCxvLGEpfX19fSIkc2NoZW1hIiE9PWN8fG4ucGFyZW50fHx0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKGgsbyksYS5ib29sZWFuJiYodGhpcy5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCEwLGgsbyksdGhpcy5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCExLGgsbykpLGEubnVsbCYmdGhpcy5hZGROdWxsVmFsdWVDb21wbGV0aW9uKGgsbyl9fWVsc2UgdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUuc2NoZW1hLCIiLG8sYSl9LGUucHJvdG90eXBlLmdldENvbnRyaWJ1dGVkVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGksbyl7aWYodCl7aWYoInN0cmluZyIhPT10LnR5cGUmJiJudW1iZXIiIT09dC50eXBlJiYiYm9vbGVhbiIhPT10LnR5cGUmJiJudWxsIiE9PXQudHlwZXx8KHQ9dC5wYXJlbnQpLHQmJiJwcm9wZXJ0eSI9PT10LnR5cGUmJm4+KHQuY29sb25PZmZzZXR8fDApKXt2YXIgYT10LmtleU5vZGUudmFsdWUscz10LnZhbHVlTm9kZTtpZigoIXN8fG48PXMub2Zmc2V0K3MubGVuZ3RoKSYmdC5wYXJlbnQpe3ZhciBjPSRvKHQucGFyZW50KTt0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xsZWN0VmFsdWVDb21wbGV0aW9ucyhyLnVyaSxjLGEsaSk7dCYmby5wdXNoKHQpfSkpfX19ZWxzZSB0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xsZWN0RGVmYXVsdENvbXBsZXRpb25zKHIudXJpLGkpO3QmJm8ucHVzaCh0KX0pKX0sZS5wcm90b3R5cGUuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzOyJvYmplY3QiPT10eXBlb2YgZSYmKHRoaXMuYWRkRW51bVZhbHVlQ29tcGxldGlvbnMoZSx0LG4pLHRoaXMuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnMoZSx0LG4pLHRoaXMuY29sbGVjdFR5cGVzKGUsciksQXJyYXkuaXNBcnJheShlLmFsbE9mKSYmZS5hbGxPZi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIpfSkpLEFycmF5LmlzQXJyYXkoZS5hbnlPZikmJmUuYW55T2YuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQsbixyKX0pKSxBcnJheS5pc0FycmF5KGUub25lT2YpJiZlLm9uZU9mLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LG4scil9KSkpfSxlLnByb3RvdHlwZS5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzO3ZvaWQgMD09PXImJihyPTApO3ZhciBvPSExO2lmKG9pKGUuZGVmYXVsdCkpe2Zvcih2YXIgYT1lLnR5cGUscz1lLmRlZmF1bHQsYz1yO2M+MDtjLS0pcz1bc10sYT0iYXJyYXkiO24uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoYSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKHMpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUocyx0KSxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZGV0YWlsOlhvKCJqc29uLnN1Z2dlc3QuZGVmYXVsdCIsIkRlZmF1bHQgdmFsdWUiKX0pLG89ITB9QXJyYXkuaXNBcnJheShlLmV4YW1wbGVzKSYmZS5leGFtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihhKXtmb3IodmFyIHM9ZS50eXBlLGM9YSxsPXI7bD4wO2wtLSljPVtjXSxzPSJhcnJheSI7bi5hZGQoe2tpbmQ6aS5nZXRTdWdnZXN0aW9uS2luZChzKSxsYWJlbDppLmdldExhYmVsRm9yVmFsdWUoYyksaW5zZXJ0VGV4dDppLmdldEluc2VydFRleHRGb3JWYWx1ZShjLHQpLGluc2VydFRleHRGb3JtYXQ6X2kuU25pcHBldH0pLG89ITB9KSksQXJyYXkuaXNBcnJheShlLmRlZmF1bHRTbmlwcGV0cykmJmUuZGVmYXVsdFNuaXBwZXRzLmZvckVhY2goKGZ1bmN0aW9uKGEpe3ZhciBzLGMsbD1lLnR5cGUsdT1hLmJvZHksaD1hLmxhYmVsO2lmKG9pKHUpKXtlLnR5cGU7Zm9yKHZhciBmPXI7Zj4wO2YtLSl1PVt1XTtzPWkuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZSh1LHQpLGM9aS5nZXRGaWx0ZXJUZXh0Rm9yU25pcHBldFZhbHVlKHUpLGg9aHx8aS5nZXRMYWJlbEZvclNuaXBwZXRWYWx1ZSh1KX1lbHNle2lmKCJzdHJpbmciIT10eXBlb2YgYS5ib2R5VGV4dClyZXR1cm47dmFyIGQ9IiIsbT0iIixnPSIiO2ZvcihmPXI7Zj4wO2YtLSlkPWQrZysiW1xuIixtPW0rIlxuIitnKyJdIixnKz0iXHQiLGw9ImFycmF5IjtzPWQrZythLmJvZHlUZXh0LnNwbGl0KCJcbiIpLmpvaW4oIlxuIitnKSttK3QsaD1ofHxzLGM9cy5yZXBsYWNlKC9bXG5dL2csIiIpfW4uYWRkKHtraW5kOmkuZ2V0U3VnZ2VzdGlvbktpbmQobCksbGFiZWw6aCxkb2N1bWVudGF0aW9uOmkuZnJvbU1hcmt1cChhLm1hcmtkb3duRGVzY3JpcHRpb24pfHxhLmRlc2NyaXB0aW9uLGluc2VydFRleHQ6cyxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZmlsdGVyVGV4dDpjfSksbz0hMH0pKSwhbyYmIm9iamVjdCI9PXR5cGVvZiBlLml0ZW1zJiYhQXJyYXkuaXNBcnJheShlLml0ZW1zKSYmcjw1JiZ0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKGUuaXRlbXMsdCxuLHIrMSl9LGUucHJvdG90eXBlLmFkZEVudW1WYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuKXtpZihvaShlLmNvbnN0KSYmbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShlLmNvbnN0KSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUuY29uc3QsdCksaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGRvY3VtZW50YXRpb246dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25EZXNjcmlwdGlvbil8fGUuZGVzY3JpcHRpb259KSxBcnJheS5pc0FycmF5KGUuZW51bSkpZm9yKHZhciByPTAsaT1lLmVudW0ubGVuZ3RoO3I8aTtyKyspe3ZhciBvPWUuZW51bVtyXSxhPXRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRGVzY3JpcHRpb24pfHxlLmRlc2NyaXB0aW9uO2UubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zJiZyPGUubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCk/YT10aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbcl0pOmUuZW51bURlc2NyaXB0aW9ucyYmcjxlLmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYoYT1lLmVudW1EZXNjcmlwdGlvbnNbcl0pLG4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUobyksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShvLHQpLGluc2VydFRleHRGb3JtYXQ6X2kuU25pcHBldCxkb2N1bWVudGF0aW9uOmF9KX19LGUucHJvdG90eXBlLmNvbGxlY3RUeXBlcz1mdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUuZW51bSkmJiFvaShlLmNvbnN0KSl7dmFyIG49ZS50eXBlO0FycmF5LmlzQXJyYXkobik/bi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXT0hMH0pKTpuJiYodFtuXT0hMCl9fSxlLnByb3RvdHlwZS5hZGRGaWxsZXJWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuKXtlLm9iamVjdCYmbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6Int9IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh7fSx0KSxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZGV0YWlsOlhvKCJkZWZhdWx0cy5vYmplY3QiLCJOZXcgb2JqZWN0IiksZG9jdW1lbnRhdGlvbjoiIn0pLGUuYXJyYXkmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IltdIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZShbXSx0KSxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZGV0YWlsOlhvKCJkZWZhdWx0cy5hcnJheSIsIk5ldyBhcnJheSIpLGRvY3VtZW50YXRpb246IiJ9KX0sZS5wcm90b3R5cGUuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbj1mdW5jdGlvbihlLHQsbil7bi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYm9vbGVhbiIpLGxhYmVsOmU/InRydWUiOiJmYWxzZSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpLGluc2VydFRleHRGb3JtYXQ6X2kuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9LGUucHJvdG90eXBlLmFkZE51bGxWYWx1ZUNvbXBsZXRpb249ZnVuY3Rpb24oZSx0KXt0LmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJudWxsIiksbGFiZWw6Im51bGwiLGluc2VydFRleHQ6Im51bGwiK2UsaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0sZS5wcm90b3R5cGUuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9dGhpcy5zY2hlbWFTZXJ2aWNlLmdldFJlZ2lzdGVyZWRTY2hlbWFJZHMoKGZ1bmN0aW9uKGUpe3JldHVybiJodHRwIj09PWV8fCJodHRwcyI9PT1lfSkpO3IuZm9yRWFjaCgoZnVuY3Rpb24ocil7cmV0dXJuIHQuYWRkKHtraW5kOkNpLk1vZHVsZSxsYWJlbDpuLmdldExhYmVsRm9yVmFsdWUociksZmlsdGVyVGV4dDpuLmdldEZpbHRlclRleHRGb3JWYWx1ZShyKSxpbnNlcnRUZXh0Om4uZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHIsZSksaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0pKX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxGb3JWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9LGUucHJvdG90eXBlLmdldEZpbHRlclRleHRGb3JWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9LGUucHJvdG90eXBlLmdldEZpbHRlclRleHRGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL1wkXHtcZCs6KFtefV0rKVx9fFwkXGQrL2csIiQxIil9LGUucHJvdG90eXBlLmdldExhYmVsRm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9cJFx7XGQrOihbXn1dKylcfXxcJFxkKy9nLCIkMSIpfSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXFwkXH1dL2csIlxcJCYiKX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlPWZ1bmN0aW9uKGUsdCl7dmFyIG49SlNPTi5zdHJpbmdpZnkoZSxudWxsLCJcdCIpO3JldHVybiJ7fSI9PT1uPyJ7JDF9Iit0OiJbXSI9PT1uPyJbJDFdIit0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChuK3QpfSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEpvKGUsIiIsKGZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmIl4iPT09ZVswXT9lLnN1YnN0cigxKTpKU09OLnN0cmluZ2lmeShlKX0pKSt0fSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlIm9iamVjdCI6cmV0dXJuIG51bGw9PT1lPyIkezE6bnVsbH0iK3Q6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KTtjYXNlInN0cmluZyI6dmFyIG49SlNPTi5zdHJpbmdpZnkoZSk7cmV0dXJuIG49bi5zdWJzdHIoMSxuLmxlbmd0aC0yKSwnIiR7MTonKyhuPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChuKSkrJ30iJyt0O2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOnJldHVybiIkezE6IitKU09OLnN0cmluZ2lmeShlKSsifSIrdH1yZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KX0sZS5wcm90b3R5cGUuZ2V0U3VnZ2VzdGlvbktpbmQ9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIHQ9ZTtlPXQubGVuZ3RoPjA/dFswXTp2b2lkIDB9aWYoIWUpcmV0dXJuIENpLlZhbHVlO3N3aXRjaChlKXtjYXNlInN0cmluZyI6ZGVmYXVsdDpyZXR1cm4gQ2kuVmFsdWU7Y2FzZSJvYmplY3QiOnJldHVybiBDaS5Nb2R1bGU7Y2FzZSJwcm9wZXJ0eSI6cmV0dXJuIENpLlByb3BlcnR5fX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIltdIjtjYXNlIm9iamVjdCI6cmV0dXJuInt9IjtkZWZhdWx0OnJldHVybiB0LmdldFRleHQoKS5zdWJzdHIoZS5vZmZzZXQsZS5sZW5ndGgpfX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZT1mdW5jdGlvbihlLHQsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLG4pO2Nhc2Uib2JqZWN0IjpyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoe30sbik7ZGVmYXVsdDp2YXIgcj10LmdldFRleHQoKS5zdWJzdHIoZS5vZmZzZXQsZS5sZW5ndGgpK247cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChyKX19LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLCIiKTtpZighbilyZXR1cm4gaTt2YXIgbyxhPWkrIjogIixzPTA7aWYodCl7aWYoQXJyYXkuaXNBcnJheSh0LmRlZmF1bHRTbmlwcGV0cykpe2lmKDE9PT10LmRlZmF1bHRTbmlwcGV0cy5sZW5ndGgpe3ZhciBjPXQuZGVmYXVsdFNuaXBwZXRzWzBdLmJvZHk7b2koYykmJihvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZShjLCIiKSl9cys9dC5kZWZhdWx0U25pcHBldHMubGVuZ3RofWlmKHQuZW51bSYmKG98fDEhPT10LmVudW0ubGVuZ3RofHwobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5lbnVtWzBdLCIiKSkscys9dC5lbnVtLmxlbmd0aCksb2kodC5kZWZhdWx0KSYmKG98fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmRlZmF1bHQsIiIpKSxzKyspLEFycmF5LmlzQXJyYXkodC5leGFtcGxlcykmJnQuZXhhbXBsZXMubGVuZ3RoJiYob3x8KG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZXhhbXBsZXNbMF0sIiIpKSxzKz10LmV4YW1wbGVzLmxlbmd0aCksMD09PXMpe3ZhciBsPUFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGVbMF06dC50eXBlO3N3aXRjaChsfHwodC5wcm9wZXJ0aWVzP2w9Im9iamVjdCI6dC5pdGVtcyYmKGw9ImFycmF5IikpLGwpe2Nhc2UiYm9vbGVhbiI6bz0iJDEiO2JyZWFrO2Nhc2Uic3RyaW5nIjpvPSciJDEiJzticmVhaztjYXNlIm9iamVjdCI6bz0ieyQxfSI7YnJlYWs7Y2FzZSJhcnJheSI6bz0iWyQxXSI7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6bz0iJHsxOjB9IjticmVhaztjYXNlIm51bGwiOm89IiR7MTpudWxsfSI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gaX19fXJldHVybighb3x8cz4xKSYmKG89IiQxIiksYStvK3J9LGUucHJvdG90eXBlLmdldEN1cnJlbnRXb3JkPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQtMSxyPWUuZ2V0VGV4dCgpO24+PTAmJi0xPT09JyBcdFxuXHJcdiI6e1ssXX0nLmluZGV4T2Yoci5jaGFyQXQobikpOyluLS07cmV0dXJuIHIuc3Vic3RyaW5nKG4rMSx0KX0sZS5wcm90b3R5cGUuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcj1mdW5jdGlvbihlLHQpe3ZhciBuPVlyKGUuZ2V0VGV4dCgpLCEwKTtzd2l0Y2gobi5zZXRQb3NpdGlvbih0KSxuLnNjYW4oKSl7Y2FzZSA1OmNhc2UgMjpjYXNlIDQ6Y2FzZSAxNzpyZXR1cm4iIjtkZWZhdWx0OnJldHVybiIsIn19LGUucHJvdG90eXBlLmZpbmRJdGVtQXRPZmZzZXQ9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1Zcih0LmdldFRleHQoKSwhMCksaT1lLml0ZW1zLG89aS5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIGE9aVtvXTtpZihuPmEub2Zmc2V0K2EubGVuZ3RoKXJldHVybiByLnNldFBvc2l0aW9uKGEub2Zmc2V0K2EubGVuZ3RoKSw1PT09ci5zY2FuKCkmJm4+PXIuZ2V0VG9rZW5PZmZzZXQoKStyLmdldFRva2VuTGVuZ3RoKCk/bysxOm87aWYobj49YS5vZmZzZXQpcmV0dXJuIG99cmV0dXJuIDB9LGUucHJvdG90eXBlLmlzSW5Db21tZW50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1ZcihlLmdldFRleHQoKSwhMSk7ci5zZXRQb3NpdGlvbih0KTtmb3IodmFyIGk9ci5zY2FuKCk7MTchPT1pJiZyLmdldFRva2VuT2Zmc2V0KCkrci5nZXRUb2tlbkxlbmd0aCgpPG47KWk9ci5zY2FuKCk7cmV0dXJuKDEyPT09aXx8MTM9PT1pKSYmci5nZXRUb2tlbk9mZnNldCgpPD1ufSxlLnByb3RvdHlwZS5mcm9tTWFya3VwPWZ1bmN0aW9uKGUpe2lmKGUmJnRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpKXJldHVybntraW5kOmJpLk1hcmtkb3duLHZhbHVlOmV9fSxlLnByb3RvdHlwZS5kb2VzU3VwcG9ydE1hcmtkb3duPWZ1bmN0aW9uKCl7aWYoIW9pKHRoaXMuc3VwcG9ydHNNYXJrZG93bikpe3ZhciBlPXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCYmdGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50LmNvbXBsZXRpb247dGhpcy5zdXBwb3J0c01hcmtkb3duPWUmJmUuY29tcGxldGlvbkl0ZW0mJkFycmF5LmlzQXJyYXkoZS5jb21wbGV0aW9uSXRlbS5kb2N1bWVudGF0aW9uRm9ybWF0KSYmLTEhPT1lLmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQuaW5kZXhPZihiaS5NYXJrZG93bil9cmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bn0sZS5wcm90b3R5cGUuZG9lc1N1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycz1mdW5jdGlvbigpe2lmKCFvaSh0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycykpe3ZhciBlPXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCYmdGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50LmNvbXBsZXRpb247dGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnM9ZSYmZS5jb21wbGV0aW9uSXRlbSYmISFlLmNvbXBsZXRpb25JdGVtLmNvbW1pdENoYXJhY3RlcnNTdXBwb3J0fXJldHVybiB0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVyc30sZX0oKSxZbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYVNlcnZpY2U9ZSx0aGlzLmNvbnRyaWJ1dGlvbnM9dCx0aGlzLnByb21pc2U9bnx8UHJvbWlzZX1yZXR1cm4gZS5wcm90b3R5cGUuZG9Ib3Zlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5vZmZzZXRBdCh0KSxpPW4uZ2V0Tm9kZUZyb21PZmZzZXQocik7aWYoIWl8fCgib2JqZWN0Ij09PWkudHlwZXx8ImFycmF5Ij09PWkudHlwZSkmJnI+aS5vZmZzZXQrMSYmcjxpLm9mZnNldCtpLmxlbmd0aC0xKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShudWxsKTt2YXIgbz1pO2lmKCJzdHJpbmciPT09aS50eXBlKXt2YXIgYT1pLnBhcmVudDtpZihhJiYicHJvcGVydHkiPT09YS50eXBlJiZhLmtleU5vZGU9PT1pJiYhKGk9YS52YWx1ZU5vZGUpKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShudWxsKX1mb3IodmFyIHM9bHIuY3JlYXRlKGUucG9zaXRpb25BdChvLm9mZnNldCksZS5wb3NpdGlvbkF0KG8ub2Zmc2V0K28ubGVuZ3RoKSksYz1mdW5jdGlvbihlKXtyZXR1cm57Y29udGVudHM6ZSxyYW5nZTpzfX0sbD0kbyhpKSx1PXRoaXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTt1Pj0wO3UtLSl7dmFyIGg9dGhpcy5jb250cmlidXRpb25zW3VdLmdldEluZm9Db250cmlidXRpb24oZS51cmksbCk7aWYoaClyZXR1cm4gaC50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gYyhlKX0pKX1yZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLG4pLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGUmJmkpe3ZhciB0PW4uZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLGkub2Zmc2V0KSxyPXZvaWQgMCxvPXZvaWQgMCxhPXZvaWQgMCxzPXZvaWQgMDt0LmV2ZXJ5KChmdW5jdGlvbihlKXtpZihlLm5vZGU9PT1pJiYhZS5pbnZlcnRlZCYmZS5zY2hlbWEmJihyPXJ8fGUuc2NoZW1hLnRpdGxlLG89b3x8ZS5zY2hlbWEubWFya2Rvd25EZXNjcmlwdGlvbnx8UW8oZS5zY2hlbWEuZGVzY3JpcHRpb24pLGUuc2NoZW1hLmVudW0pKXt2YXIgdD1lLnNjaGVtYS5lbnVtLmluZGV4T2YocW8oaSkpO2Uuc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucz9hPWUuc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1t0XTplLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zJiYoYT1RbyhlLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zW3RdKSksYSYmInN0cmluZyIhPXR5cGVvZihzPWUuc2NoZW1hLmVudW1bdF0pJiYocz1KU09OLnN0cmluZ2lmeShzKSl9cmV0dXJuITB9KSk7dmFyIGw9IiI7cmV0dXJuIHImJihsPVFvKHIpKSxvJiYobC5sZW5ndGg+MCYmKGwrPSJcblxuIiksbCs9byksYSYmKGwubGVuZ3RoPjAmJihsKz0iXG5cbiIpLGwrPSJgIi5jb25jYXQoZnVuY3Rpb24oZSl7aWYoLTEhPT1lLmluZGV4T2YoImAiKSlyZXR1cm4iYGAgIitlKyIgYGAiO3JldHVybiBlfShzKSwiYDogIikuY29uY2F0KGEpKSxjKFtsXSl9cmV0dXJuIG51bGx9KSl9LGV9KCk7ZnVuY3Rpb24gUW8oZSl7aWYoZSlyZXR1cm4gZS5yZXBsYWNlKC8oW15cblxyXSkoXHI/XG4pKFteXG5ccl0pL2dtLCIkMVxuXG4kMyIpLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX12YXIgZWE9QW8oKSx0YT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmpzb25TY2hlbWFTZXJ2aWNlPWUsdGhpcy5wcm9taXNlPXQsdGhpcy52YWxpZGF0aW9uRW5hYmxlZD0hMH1yZXR1cm4gZS5wcm90b3R5cGUuY29uZmlndXJlPWZ1bmN0aW9uKGUpe2UmJih0aGlzLnZhbGlkYXRpb25FbmFibGVkPSExIT09ZS52YWxpZGF0ZSx0aGlzLmNvbW1lbnRTZXZlcml0eT1lLmFsbG93Q29tbWVudHM/dm9pZCAwOk5yLkVycm9yKX0sZS5wcm90b3R5cGUuZG9WYWxpZGF0aW9uPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXM7aWYoIXRoaXMudmFsaWRhdGlvbkVuYWJsZWQpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKFtdKTt2YXIgbz1bXSxhPXt9LHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yYW5nZS5zdGFydC5saW5lKyIgIitlLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcisiICIrZS5tZXNzYWdlO2FbdF18fChhW3RdPSEwLG8ucHVzaChlKSl9LGM9ZnVuY3Rpb24ocil7dmFyIGE9KG51bGw9PW4/dm9pZCAwOm4udHJhaWxpbmdDb21tYXMpP29hKG4udHJhaWxpbmdDb21tYXMpOk5yLkVycm9yLGM9KG51bGw9PW4/dm9pZCAwOm4uY29tbWVudHMpP29hKG4uY29tbWVudHMpOmkuY29tbWVudFNldmVyaXR5LGw9KG51bGw9PW4/dm9pZCAwOm4uc2NoZW1hVmFsaWRhdGlvbik/b2Eobi5zY2hlbWFWYWxpZGF0aW9uKTpOci5XYXJuaW5nLHU9KG51bGw9PW4/dm9pZCAwOm4uc2NoZW1hUmVxdWVzdCk/b2Eobi5zY2hlbWFSZXF1ZXN0KTpOci5XYXJuaW5nO2lmKHIpe2lmKHIuZXJyb3JzLmxlbmd0aCYmdC5yb290JiZ1KXt2YXIgaD10LnJvb3QsZj0ib2JqZWN0Ij09PWgudHlwZT9oLnByb3BlcnRpZXNbMF06dm9pZCAwO2lmKGYmJiIkc2NoZW1hIj09PWYua2V5Tm9kZS52YWx1ZSl7dmFyIGQ9Zi52YWx1ZU5vZGV8fGYsbT1sci5jcmVhdGUoZS5wb3NpdGlvbkF0KGQub2Zmc2V0KSxlLnBvc2l0aW9uQXQoZC5vZmZzZXQrZC5sZW5ndGgpKTtzKElyLmNyZWF0ZShtLHIuZXJyb3JzWzBdLHUsZ28uU2NoZW1hUmVzb2x2ZUVycm9yKSl9ZWxzZXttPWxyLmNyZWF0ZShlLnBvc2l0aW9uQXQoaC5vZmZzZXQpLGUucG9zaXRpb25BdChoLm9mZnNldCsxKSk7cyhJci5jcmVhdGUobSxyLmVycm9yc1swXSx1LGdvLlNjaGVtYVJlc29sdmVFcnJvcikpfX1lbHNlIGlmKGwpe3ZhciBnPXQudmFsaWRhdGUoZSxyLnNjaGVtYSxsKTtnJiZnLmZvckVhY2gocyl9cmEoci5zY2hlbWEpJiYoYz12b2lkIDApLGlhKHIuc2NoZW1hKSYmKGE9dm9pZCAwKX1mb3IodmFyIHA9MCxiPXQuc3ludGF4RXJyb3JzO3A8Yi5sZW5ndGg7cCsrKXt2YXIgdj1iW3BdO2lmKHYuY29kZT09PWdvLlRyYWlsaW5nQ29tbWEpe2lmKCJudW1iZXIiIT10eXBlb2YgYSljb250aW51ZTt2LnNldmVyaXR5PWF9cyh2KX1pZigibnVtYmVyIj09dHlwZW9mIGMpe3ZhciB5PWVhKCJJbnZhbGlkQ29tbWVudFRva2VuIiwiQ29tbWVudHMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gSlNPTi4iKTt0LmNvbW1lbnRzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3MoSXIuY3JlYXRlKGUseSxjLGdvLkNvbW1lbnROb3RQZXJtaXR0ZWQpKX0pKX1yZXR1cm4gb307aWYocil7dmFyIGw9ci5pZHx8InNjaGVtYXNlcnZpY2U6Ly91bnRpdGxlZC8iK25hKys7cmV0dXJuIHRoaXMuanNvblNjaGVtYVNlcnZpY2UucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShsLFtdLHIpLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSl9KSl9cmV0dXJuIHRoaXMuanNvblNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSl9KSl9LGUucHJvdG90eXBlLmdldExhbmd1YWdlU3RhdHVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3NjaGVtYXM6dGhpcy5qc29uU2NoZW1hU2VydmljZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2UoZS51cmksdCl9fSxlfSgpLG5hPTA7ZnVuY3Rpb24gcmEoZSl7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXtpZihhaShlLmFsbG93Q29tbWVudHMpKXJldHVybiBlLmFsbG93Q29tbWVudHM7aWYoZS5hbGxPZilmb3IodmFyIHQ9MCxuPWUuYWxsT2Y7dDxuLmxlbmd0aDt0Kyspe3ZhciByPXJhKG5bdF0pO2lmKGFpKHIpKXJldHVybiByfX19ZnVuY3Rpb24gaWEoZSl7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXtpZihhaShlLmFsbG93VHJhaWxpbmdDb21tYXMpKXJldHVybiBlLmFsbG93VHJhaWxpbmdDb21tYXM7dmFyIHQ9ZTtpZihhaSh0LmFsbG93c1RyYWlsaW5nQ29tbWFzKSlyZXR1cm4gdC5hbGxvd3NUcmFpbGluZ0NvbW1hcztpZihlLmFsbE9mKWZvcih2YXIgbj0wLHI9ZS5hbGxPZjtuPHIubGVuZ3RoO24rKyl7dmFyIGk9aWEocltuXSk7aWYoYWkoaSkpcmV0dXJuIGl9fX1mdW5jdGlvbiBvYShlKXtzd2l0Y2goZSl7Y2FzZSJlcnJvciI6cmV0dXJuIE5yLkVycm9yO2Nhc2Uid2FybmluZyI6cmV0dXJuIE5yLldhcm5pbmc7Y2FzZSJpZ25vcmUiOnJldHVybn19ZnVuY3Rpb24gYWEoZSl7cmV0dXJuIGU8NDg/MDplPD01Nz9lLTQ4OihlPDk3JiYoZSs9MzIpLGU+PTk3JiZlPD0xMDI/ZS05NysxMDowKX1mdW5jdGlvbiBzYShlKXtpZigiIyI9PT1lWzBdKXN3aXRjaChlLmxlbmd0aCl7Y2FzZSA0OnJldHVybntyZWQ6MTcqYWEoZS5jaGFyQ29kZUF0KDEpKS8yNTUsZ3JlZW46MTcqYWEoZS5jaGFyQ29kZUF0KDIpKS8yNTUsYmx1ZToxNyphYShlLmNoYXJDb2RlQXQoMykpLzI1NSxhbHBoYToxfTtjYXNlIDU6cmV0dXJue3JlZDoxNyphYShlLmNoYXJDb2RlQXQoMSkpLzI1NSxncmVlbjoxNyphYShlLmNoYXJDb2RlQXQoMikpLzI1NSxibHVlOjE3KmFhKGUuY2hhckNvZGVBdCgzKSkvMjU1LGFscGhhOjE3KmFhKGUuY2hhckNvZGVBdCg0KSkvMjU1fTtjYXNlIDc6cmV0dXJue3JlZDooMTYqYWEoZS5jaGFyQ29kZUF0KDEpKSthYShlLmNoYXJDb2RlQXQoMikpKS8yNTUsZ3JlZW46KDE2KmFhKGUuY2hhckNvZGVBdCgzKSkrYWEoZS5jaGFyQ29kZUF0KDQpKSkvMjU1LGJsdWU6KDE2KmFhKGUuY2hhckNvZGVBdCg1KSkrYWEoZS5jaGFyQ29kZUF0KDYpKSkvMjU1LGFscGhhOjF9O2Nhc2UgOTpyZXR1cm57cmVkOigxNiphYShlLmNoYXJDb2RlQXQoMSkpK2FhKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjooMTYqYWEoZS5jaGFyQ29kZUF0KDMpKSthYShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZTooMTYqYWEoZS5jaGFyQ29kZUF0KDUpKSthYShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6KDE2KmFhKGUuY2hhckNvZGVBdCg3KSkrYWEoZS5jaGFyQ29kZUF0KDgpKSkvMjU1fX19dmFyIGNhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnNjaGVtYVNlcnZpY2U9ZX1yZXR1cm4gZS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9scz1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17cmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRX0pO3ZhciBpPXQucm9vdDtpZighaSlyZXR1cm5bXTt2YXIgbz1uLnJlc3VsdExpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFLGE9ZS51cmk7aWYoKCJ2c2NvZGU6Ly9kZWZhdWx0c2V0dGluZ3Mva2V5YmluZGluZ3MuanNvbiI9PT1hfHxzaShhLnRvTG93ZXJDYXNlKCksIi91c2VyL2tleWJpbmRpbmdzLmpzb24iKSkmJiJhcnJheSI9PT1pLnR5cGUpe2Zvcih2YXIgcz1bXSxjPTAsbD1pLml0ZW1zO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1sW2NdO2lmKCJvYmplY3QiPT09dS50eXBlKWZvcih2YXIgaD0wLGY9dS5wcm9wZXJ0aWVzO2g8Zi5sZW5ndGg7aCsrKXt2YXIgZD1mW2hdO2lmKCJrZXkiPT09ZC5rZXlOb2RlLnZhbHVlJiZkLnZhbHVlTm9kZSl7dmFyIG09aHIuY3JlYXRlKGUudXJpLGxhKGUsdSkpO2lmKHMucHVzaCh7bmFtZTpxbyhkLnZhbHVlTm9kZSksa2luZDpLaS5GdW5jdGlvbixsb2NhdGlvbjptfSksLS1vPD0wKXJldHVybiBuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoYSksc319fXJldHVybiBzfWZvcih2YXIgZz1be25vZGU6aSxjb250YWluZXJOYW1lOiIifV0scD0wLGI9ITEsdj1bXSx5PWZ1bmN0aW9uKHQsbil7ImFycmF5Ij09PXQudHlwZT90Lml0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UmJmcucHVzaCh7bm9kZTplLGNvbnRhaW5lck5hbWU6bn0pfSkpOiJvYmplY3QiPT09dC50eXBlJiZ0LnByb3BlcnRpZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9dC52YWx1ZU5vZGU7aWYoaSlpZihvPjApe28tLTt2YXIgYT1oci5jcmVhdGUoZS51cmksbGEoZSx0KSkscz1uP24rIi4iK3Qua2V5Tm9kZS52YWx1ZTp0LmtleU5vZGUudmFsdWU7di5wdXNoKHtuYW1lOnIuZ2V0S2V5TGFiZWwodCksa2luZDpyLmdldFN5bWJvbEtpbmQoaS50eXBlKSxsb2NhdGlvbjphLGNvbnRhaW5lck5hbWU6bn0pLGcucHVzaCh7bm9kZTppLGNvbnRhaW5lck5hbWU6c30pfWVsc2UgYj0hMH0pKX07cDxnLmxlbmd0aDspe3ZhciBDPWdbcCsrXTt5KEMubm9kZSxDLmNvbnRhaW5lck5hbWUpfXJldHVybiBiJiZuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoYSksdn0sZS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9sczI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49e3Jlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUV9KTt2YXIgaT10LnJvb3Q7aWYoIWkpcmV0dXJuW107dmFyIG89bi5yZXN1bHRMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRSxhPWUudXJpO2lmKCgidnNjb2RlOi8vZGVmYXVsdHNldHRpbmdzL2tleWJpbmRpbmdzLmpzb24iPT09YXx8c2koYS50b0xvd2VyQ2FzZSgpLCIvdXNlci9rZXliaW5kaW5ncy5qc29uIikpJiYiYXJyYXkiPT09aS50eXBlKXtmb3IodmFyIHM9W10sYz0wLGw9aS5pdGVtcztjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bFtjXTtpZigib2JqZWN0Ij09PXUudHlwZSlmb3IodmFyIGg9MCxmPXUucHJvcGVydGllcztoPGYubGVuZ3RoO2grKyl7dmFyIGQ9ZltoXTtpZigia2V5Ij09PWQua2V5Tm9kZS52YWx1ZSYmZC52YWx1ZU5vZGUpe3ZhciBtPWxhKGUsdSksZz1sYShlLGQua2V5Tm9kZSk7aWYocy5wdXNoKHtuYW1lOnFvKGQudmFsdWVOb2RlKSxraW5kOktpLkZ1bmN0aW9uLHJhbmdlOm0sc2VsZWN0aW9uUmFuZ2U6Z30pLC0tbzw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGEpLHN9fX1yZXR1cm4gc31mb3IodmFyIHA9W10sYj1be25vZGU6aSxyZXN1bHQ6cH1dLHY9MCx5PSExLEM9ZnVuY3Rpb24odCxuKXsiYXJyYXkiPT09dC50eXBlP3QuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXtpZih0KWlmKG8+MCl7by0tO3ZhciBhPWxhKGUsdCkscz1hLGM9e25hbWU6U3RyaW5nKGkpLGtpbmQ6ci5nZXRTeW1ib2xLaW5kKHQudHlwZSkscmFuZ2U6YSxzZWxlY3Rpb25SYW5nZTpzLGNoaWxkcmVuOltdfTtuLnB1c2goYyksYi5wdXNoKHtyZXN1bHQ6Yy5jaGlsZHJlbixub2RlOnR9KX1lbHNlIHk9ITB9KSk6Im9iamVjdCI9PT10LnR5cGUmJnQucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LnZhbHVlTm9kZTtpZihpKWlmKG8+MCl7by0tO3ZhciBhPWxhKGUsdCkscz1sYShlLHQua2V5Tm9kZSksYz1bXSxsPXtuYW1lOnIuZ2V0S2V5TGFiZWwodCksa2luZDpyLmdldFN5bWJvbEtpbmQoaS50eXBlKSxyYW5nZTphLHNlbGVjdGlvblJhbmdlOnMsY2hpbGRyZW46YyxkZXRhaWw6ci5nZXREZXRhaWwoaSl9O24ucHVzaChsKSxiLnB1c2goe3Jlc3VsdDpjLG5vZGU6aX0pfWVsc2UgeT0hMH0pKX07djxiLmxlbmd0aDspe3ZhciB3PWJbdisrXTtDKHcubm9kZSx3LnJlc3VsdCl9cmV0dXJuIHkmJm4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChhKSxwfSxlLnByb3RvdHlwZS5nZXRTeW1ib2xLaW5kPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIm9iamVjdCI6cmV0dXJuIEtpLk1vZHVsZTtjYXNlInN0cmluZyI6cmV0dXJuIEtpLlN0cmluZztjYXNlIm51bWJlciI6cmV0dXJuIEtpLk51bWJlcjtjYXNlImFycmF5IjpyZXR1cm4gS2kuQXJyYXk7Y2FzZSJib29sZWFuIjpyZXR1cm4gS2kuQm9vbGVhbjtkZWZhdWx0OnJldHVybiBLaS5WYXJpYWJsZX19LGUucHJvdG90eXBlLmdldEtleUxhYmVsPWZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Tm9kZS52YWx1ZTtyZXR1cm4gdCYmKHQ9dC5yZXBsYWNlKC9bXG5dL2csIuKGtSIpKSx0JiZ0LnRyaW0oKT90OiciJy5jb25jYXQodCwnIicpfSxlLnByb3RvdHlwZS5nZXREZXRhaWw9ZnVuY3Rpb24oZSl7aWYoZSlyZXR1cm4iYm9vbGVhbiI9PT1lLnR5cGV8fCJudW1iZXIiPT09ZS50eXBlfHwibnVsbCI9PT1lLnR5cGV8fCJzdHJpbmciPT09ZS50eXBlP1N0cmluZyhlLnZhbHVlKToiYXJyYXkiPT09ZS50eXBlP2UuY2hpbGRyZW4ubGVuZ3RoP3ZvaWQgMDoiW10iOiJvYmplY3QiPT09ZS50eXBlP2UuY2hpbGRyZW4ubGVuZ3RoP3ZvaWQgMDoie30iOnZvaWQgMH0sZS5wcm90b3R5cGUuZmluZERvY3VtZW50Q29sb3JzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKHIpe3ZhciBpPVtdO2lmKHIpZm9yKHZhciBvPW4mJiJudW1iZXIiPT10eXBlb2Ygbi5yZXN1bHRMaW1pdD9uLnJlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUUsYT17fSxzPTAsYz10LmdldE1hdGNoaW5nU2NoZW1hcyhyLnNjaGVtYSk7czxjLmxlbmd0aDtzKyspe3ZhciBsPWNbc107aWYoIWwuaW52ZXJ0ZWQmJmwuc2NoZW1hJiYoImNvbG9yIj09PWwuc2NoZW1hLmZvcm1hdHx8ImNvbG9yLWhleCI9PT1sLnNjaGVtYS5mb3JtYXQpJiZsLm5vZGUmJiJzdHJpbmciPT09bC5ub2RlLnR5cGUpe3ZhciB1PVN0cmluZyhsLm5vZGUub2Zmc2V0KTtpZighYVt1XSl7dmFyIGg9c2EocW8obC5ub2RlKSk7aWYoaCl7dmFyIGY9bGEoZSxsLm5vZGUpO2kucHVzaCh7Y29sb3I6aCxyYW5nZTpmfSl9aWYoYVt1XT0hMCwtLW88PTApcmV0dXJuIG4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChlLnVyaSksaX19fXJldHVybiBpfSkpfSxlLnByb3RvdHlwZS5nZXRDb2xvclByZXNlbnRhdGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1bXSxhPU1hdGgucm91bmQoMjU1Km4ucmVkKSxzPU1hdGgucm91bmQoMjU1Km4uZ3JlZW4pLGM9TWF0aC5yb3VuZCgyNTUqbi5ibHVlKTtmdW5jdGlvbiBsKGUpe3ZhciB0PWUudG9TdHJpbmcoMTYpO3JldHVybiAyIT09dC5sZW5ndGg/IjAiK3Q6dH1yZXR1cm4gaT0xPT09bi5hbHBoYT8iIyIuY29uY2F0KGwoYSkpLmNvbmNhdChsKHMpKS5jb25jYXQobChjKSk6IiMiLmNvbmNhdChsKGEpKS5jb25jYXQobChzKSkuY29uY2F0KGwoYykpLmNvbmNhdChsKE1hdGgucm91bmQoMjU1Km4uYWxwaGEpKSksby5wdXNoKHtsYWJlbDppLHRleHRFZGl0OlZyLnJlcGxhY2UocixKU09OLnN0cmluZ2lmeShpKSl9KSxvfSxlfSgpO2Z1bmN0aW9uIGxhKGUsdCl7cmV0dXJuIGxyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aCkpfXZhciB1YSxoYSxmYSxkYSxtYSxnYSxwYT1BbygpLGJhPXtzY2hlbWFBc3NvY2lhdGlvbnM6W10sc2NoZW1hczp7Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hIyI6eyRyZWY6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyJ9LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiOnskc2NoZW1hOiJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiLGRlZmluaXRpb25zOntzY2hlbWFBcnJheTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsaXRlbXM6eyRyZWY6IiMifX0scG9zaXRpdmVJbnRlZ2VyOnt0eXBlOiJpbnRlZ2VyIixtaW5pbXVtOjB9LHBvc2l0aXZlSW50ZWdlckRlZmF1bHQwOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn0se2RlZmF1bHQ6MH1dfSxzaW1wbGVUeXBlczp7dHlwZToic3RyaW5nIixlbnVtOlsiYXJyYXkiLCJib29sZWFuIiwiaW50ZWdlciIsIm51bGwiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciXX0sc3RyaW5nQXJyYXk6e3R5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIn0sbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH19LHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7aWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSwkc2NoZW1hOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpIn0sdGl0bGU6e3R5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0eXBlOiJzdHJpbmcifSxkZWZhdWx0Ont9LG11bHRpcGxlT2Y6e3R5cGU6Im51bWJlciIsbWluaW11bTowLGV4Y2x1c2l2ZU1pbmltdW06ITB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1heExlbmd0aDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluTGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHBhdHRlcm46e3R5cGU6InN0cmluZyIsZm9ybWF0OiJyZWdleCJ9LGFkZGl0aW9uYWxJdGVtczp7YW55T2Y6W3t0eXBlOiJib29sZWFuIn0seyRyZWY6IiMifV0sZGVmYXVsdDp7fX0saXRlbXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dLGRlZmF1bHQ6e319LG1heEl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5JdGVtczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4UHJvcGVydGllczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluUHJvcGVydGllczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSxyZXF1aXJlZDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfSxhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3t0eXBlOiJib29sZWFuIn0seyRyZWY6IiMifV0sZGVmYXVsdDp7fX0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxkZXBlbmRlbmNpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfX0sZW51bTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9LHR5cGU6e2FueU9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LHt0eXBlOiJhcnJheSIsaXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfV19LGZvcm1hdDp7YW55T2Y6W3t0eXBlOiJzdHJpbmciLGVudW06WyJkYXRlLXRpbWUiLCJ1cmkiLCJlbWFpbCIsImhvc3RuYW1lIiwiaXB2NCIsImlwdjYiLCJyZWdleCJdfSx7dHlwZToic3RyaW5nIn1dfSxhbGxPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxhbnlPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxvbmVPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxub3Q6e2FsbE9mOlt7JHJlZjoiIyJ9XX19LGRlcGVuZGVuY2llczp7ZXhjbHVzaXZlTWF4aW11bTpbIm1heGltdW0iXSxleGNsdXNpdmVNaW5pbXVtOlsibWluaW11bSJdfSxkZWZhdWx0Ont9fSwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIjp7ZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxub25OZWdhdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0sbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOntlbnVtOlsiYXJyYXkiLCJib29sZWFuIiwiaW50ZWdlciIsIm51bGwiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciXX0sc3RyaW5nQXJyYXk6e3R5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIn0sdW5pcXVlSXRlbXM6ITAsZGVmYXVsdDpbXX19LHR5cGU6WyJvYmplY3QiLCJib29sZWFuIl0scHJvcGVydGllczp7JGlkOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpLXJlZmVyZW5jZSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSwkcmVmOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpLXJlZmVyZW5jZSJ9LCRjb21tZW50Ont0eXBlOiJzdHJpbmcifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6ITAscmVhZE9ubHk6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGV4YW1wbGVzOnt0eXBlOiJhcnJheSIsaXRlbXM6ITB9LG11bHRpcGxlT2Y6e3R5cGU6Im51bWJlciIsZXhjbHVzaXZlTWluaW11bTowfSxtYXhpbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNYXhpbXVtOnt0eXBlOiJudW1iZXIifSxtaW5pbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0eXBlOiJudW1iZXIifSxtYXhMZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluTGVuZ3RoOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnskcmVmOiIjIn0saXRlbXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dLGRlZmF1bHQ6ITB9LG1heEl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pbkl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0sdW5pcXVlSXRlbXM6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGNvbnRhaW5zOnskcmVmOiIjIn0sbWF4UHJvcGVydGllczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5Qcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0scmVxdWlyZWQ6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifSxhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmluaXRpb25zOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHBhdHRlcm5Qcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0scHJvcGVydHlOYW1lczp7Zm9ybWF0OiJyZWdleCJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxwcm9wZXJ0eU5hbWVzOnskcmVmOiIjIn0sY29uc3Q6ITAsZW51bTp7dHlwZToiYXJyYXkiLGl0ZW1zOiEwLG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9LHR5cGU6e2FueU9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LHt0eXBlOiJhcnJheSIsaXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfV19LGZvcm1hdDp7dHlwZToic3RyaW5nIn0sY29udGVudE1lZGlhVHlwZTp7dHlwZToic3RyaW5nIn0sY29udGVudEVuY29kaW5nOnt0eXBlOiJzdHJpbmcifSxpZjp7JHJlZjoiIyJ9LHRoZW46eyRyZWY6IiMifSxlbHNlOnskcmVmOiIjIn0sYWxsT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxhbnlPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LG9uZU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sbm90OnskcmVmOiIjIn19LGRlZmF1bHQ6ITB9fX0sdmE9e2lkOnBhKCJzY2hlbWEuanNvbi5pZCIsIkEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzY2hlbWEuIiksJHNjaGVtYTpwYSgic2NoZW1hLmpzb24uJHNjaGVtYSIsIlRoZSBzY2hlbWEgdG8gdmVyaWZ5IHRoaXMgZG9jdW1lbnQgYWdhaW5zdC4iKSx0aXRsZTpwYSgic2NoZW1hLmpzb24udGl0bGUiLCJBIGRlc2NyaXB0aXZlIHRpdGxlIG9mIHRoZSBlbGVtZW50LiIpLGRlc2NyaXB0aW9uOnBhKCJzY2hlbWEuanNvbi5kZXNjcmlwdGlvbiIsIkEgbG9uZyBkZXNjcmlwdGlvbiBvZiB0aGUgZWxlbWVudC4gVXNlZCBpbiBob3ZlciBtZW51cyBhbmQgc3VnZ2VzdGlvbnMuIiksZGVmYXVsdDpwYSgic2NoZW1hLmpzb24uZGVmYXVsdCIsIkEgZGVmYXVsdCB2YWx1ZS4gVXNlZCBieSBzdWdnZXN0aW9ucy4iKSxtdWx0aXBsZU9mOnBhKCJzY2hlbWEuanNvbi5tdWx0aXBsZU9mIiwiQSBudW1iZXIgdGhhdCBzaG91bGQgY2xlYW5seSBkaXZpZGUgdGhlIGN1cnJlbnQgdmFsdWUgKGkuZS4gaGF2ZSBubyByZW1haW5kZXIpLiIpLG1heGltdW06cGEoInNjaGVtYS5qc29uLm1heGltdW0iLCJUaGUgbWF4aW11bSBudW1lcmljYWwgdmFsdWUsIGluY2x1c2l2ZSBieSBkZWZhdWx0LiIpLGV4Y2x1c2l2ZU1heGltdW06cGEoInNjaGVtYS5qc29uLmV4Y2x1c2l2ZU1heGltdW0iLCJNYWtlcyB0aGUgbWF4aW11bSBwcm9wZXJ0eSBleGNsdXNpdmUuIiksbWluaW11bTpwYSgic2NoZW1hLmpzb24ubWluaW11bSIsIlRoZSBtaW5pbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWluaW11bTpwYSgic2NoZW1hLmpzb24uZXhjbHVzaXZlTWluaW51bSIsIk1ha2VzIHRoZSBtaW5pbXVtIHByb3BlcnR5IGV4Y2x1c2l2ZS4iKSxtYXhMZW5ndGg6cGEoInNjaGVtYS5qc29uLm1heExlbmd0aCIsIlRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxtaW5MZW5ndGg6cGEoInNjaGVtYS5qc29uLm1pbkxlbmd0aCIsIlRoZSBtaW5pbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxwYXR0ZXJuOnBhKCJzY2hlbWEuanNvbi5wYXR0ZXJuIiwiQSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIHN0cmluZyBhZ2FpbnN0LiBJdCBpcyBub3QgaW1wbGljaXRseSBhbmNob3JlZC4iKSxhZGRpdGlvbmFsSXRlbXM6cGEoInNjaGVtYS5qc29uLmFkZGl0aW9uYWxJdGVtcyIsIkZvciBhcnJheXMsIG9ubHkgd2hlbiBpdGVtcyBpcyBzZXQgYXMgYW4gYXJyYXkuIElmIGl0IGlzIGEgc2NoZW1hLCB0aGVuIHRoaXMgc2NoZW1hIHZhbGlkYXRlcyBpdGVtcyBhZnRlciB0aGUgb25lcyBzcGVjaWZpZWQgYnkgdGhlIGl0ZW1zIGFycmF5LiBJZiBpdCBpcyBmYWxzZSwgdGhlbiBhZGRpdGlvbmFsIGl0ZW1zIHdpbGwgY2F1c2UgdmFsaWRhdGlvbiB0byBmYWlsLiIpLGl0ZW1zOnBhKCJzY2hlbWEuanNvbi5pdGVtcyIsIkZvciBhcnJheXMuIENhbiBlaXRoZXIgYmUgYSBzY2hlbWEgdG8gdmFsaWRhdGUgZXZlcnkgZWxlbWVudCBhZ2FpbnN0IG9yIGFuIGFycmF5IG9mIHNjaGVtYXMgdG8gdmFsaWRhdGUgZWFjaCBpdGVtIGFnYWluc3QgaW4gb3JkZXIgKHRoZSBmaXJzdCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgZmlyc3QgZWxlbWVudCwgdGhlIHNlY29uZCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi4iKSxtYXhJdGVtczpwYSgic2NoZW1hLmpzb24ubWF4SXRlbXMiLCJUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgaW5zaWRlIGFuIGFycmF5LiBJbmNsdXNpdmUuIiksbWluSXRlbXM6cGEoInNjaGVtYS5qc29uLm1pbkl0ZW1zIiwiVGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLHVuaXF1ZUl0ZW1zOnBhKCJzY2hlbWEuanNvbi51bmlxdWVJdGVtcyIsIklmIGFsbCBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5IG11c3QgYmUgdW5pcXVlLiBEZWZhdWx0cyB0byBmYWxzZS4iKSxtYXhQcm9wZXJ0aWVzOnBhKCJzY2hlbWEuanNvbi5tYXhQcm9wZXJ0aWVzIiwiVGhlIG1heGltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMgYW4gb2JqZWN0IGNhbiBoYXZlLiBJbmNsdXNpdmUuIiksbWluUHJvcGVydGllczpwYSgic2NoZW1hLmpzb24ubWluUHJvcGVydGllcyIsIlRoZSBtaW5pbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLHJlcXVpcmVkOnBhKCJzY2hlbWEuanNvbi5yZXF1aXJlZCIsIkFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIHByb3BlcnRpZXMgcmVxdWlyZWQgb24gdGhpcyBvYmplY3QuIiksYWRkaXRpb25hbFByb3BlcnRpZXM6cGEoInNjaGVtYS5qc29uLmFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiRWl0aGVyIGEgc2NoZW1hIG9yIGEgYm9vbGVhbi4gSWYgYSBzY2hlbWEsIHRoZW4gdXNlZCB0byB2YWxpZGF0ZSBhbGwgcHJvcGVydGllcyBub3QgbWF0Y2hlZCBieSAncHJvcGVydGllcycgb3IgJ3BhdHRlcm5Qcm9wZXJ0aWVzJy4gSWYgZmFsc2UsIHRoZW4gYW55IHByb3BlcnRpZXMgbm90IG1hdGNoZWQgYnkgZWl0aGVyIHdpbGwgY2F1c2UgdGhpcyBzY2hlbWEgdG8gZmFpbC4iKSxkZWZpbml0aW9uczpwYSgic2NoZW1hLmpzb24uZGVmaW5pdGlvbnMiLCJOb3QgdXNlZCBmb3IgdmFsaWRhdGlvbi4gUGxhY2Ugc3Vic2NoZW1hcyBoZXJlIHRoYXQgeW91IHdpc2ggdG8gcmVmZXJlbmNlIGlubGluZSB3aXRoICRyZWYuIikscHJvcGVydGllczpwYSgic2NoZW1hLmpzb24ucHJvcGVydGllcyIsIkEgbWFwIG9mIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIGVhY2ggcHJvcGVydHkuIikscGF0dGVyblByb3BlcnRpZXM6cGEoInNjaGVtYS5qc29uLnBhdHRlcm5Qcm9wZXJ0aWVzIiwiQSBtYXAgb2YgcmVndWxhciBleHByZXNzaW9ucyBvbiBwcm9wZXJ0eSBuYW1lcyB0byBzY2hlbWFzIGZvciBtYXRjaGluZyBwcm9wZXJ0aWVzLiIpLGRlcGVuZGVuY2llczpwYSgic2NoZW1hLmpzb24uZGVwZW5kZW5jaWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gZWl0aGVyIGFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG9yIGEgc2NoZW1hLiBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBtZWFucyB0aGUgcHJvcGVydHkgbmFtZWQgaW4gdGhlIGtleSBkZXBlbmRzIG9uIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheSBiZWluZyBwcmVzZW50IGluIHRoZSBvYmplY3QgaW4gb3JkZXIgdG8gYmUgdmFsaWQuIElmIHRoZSB2YWx1ZSBpcyBhIHNjaGVtYSwgdGhlbiB0aGUgc2NoZW1hIGlzIG9ubHkgYXBwbGllZCB0byB0aGUgb2JqZWN0IGlmIHRoZSBwcm9wZXJ0eSBpbiB0aGUga2V5IGV4aXN0cyBvbiB0aGUgb2JqZWN0LiIpLGVudW06cGEoInNjaGVtYS5qc29uLmVudW0iLCJUaGUgc2V0IG9mIGxpdGVyYWwgdmFsdWVzIHRoYXQgYXJlIHZhbGlkLiIpLHR5cGU6cGEoInNjaGVtYS5qc29uLnR5cGUiLCJFaXRoZXIgYSBzdHJpbmcgb2Ygb25lIG9mIHRoZSBiYXNpYyBzY2hlbWEgdHlwZXMgKG51bWJlciwgaW50ZWdlciwgbnVsbCwgYXJyYXksIG9iamVjdCwgYm9vbGVhbiwgc3RyaW5nKSBvciBhbiBhcnJheSBvZiBzdHJpbmdzIHNwZWNpZnlpbmcgYSBzdWJzZXQgb2YgdGhvc2UgdHlwZXMuIiksZm9ybWF0OnBhKCJzY2hlbWEuanNvbi5mb3JtYXQiLCJEZXNjcmliZXMgdGhlIGZvcm1hdCBleHBlY3RlZCBmb3IgdGhlIHZhbHVlLiIpLGFsbE9mOnBhKCJzY2hlbWEuanNvbi5hbGxPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIGFsbCBvZiB3aGljaCBtdXN0IG1hdGNoLiIpLGFueU9mOnBhKCJzY2hlbWEuanNvbi5hbnlPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIHdoZXJlIGF0IGxlYXN0IG9uZSBtdXN0IG1hdGNoLiIpLG9uZU9mOnBhKCJzY2hlbWEuanNvbi5vbmVPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIGV4YWN0bHkgb25lIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksbm90OnBhKCJzY2hlbWEuanNvbi5ub3QiLCJBIHNjaGVtYSB3aGljaCBtdXN0IG5vdCBtYXRjaC4iKSwkaWQ6cGEoInNjaGVtYS5qc29uLiRpZCIsIkEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzY2hlbWEuIiksJHJlZjpwYSgic2NoZW1hLmpzb24uJHJlZiIsIlJlZmVyZW5jZSBhIGRlZmluaXRpb24gaG9zdGVkIG9uIGFueSBsb2NhdGlvbi4iKSwkY29tbWVudDpwYSgic2NoZW1hLmpzb24uJGNvbW1lbnQiLCJDb21tZW50cyBmcm9tIHNjaGVtYSBhdXRob3JzIHRvIHJlYWRlcnMgb3IgbWFpbnRhaW5lcnMgb2YgdGhlIHNjaGVtYS4iKSxyZWFkT25seTpwYSgic2NoZW1hLmpzb24ucmVhZE9ubHkiLCJJbmRpY2F0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIGluc3RhbmNlIGlzIG1hbmFnZWQgZXhjbHVzaXZlbHkgYnkgdGhlIG93bmluZyBhdXRob3JpdHkuIiksZXhhbXBsZXM6cGEoInNjaGVtYS5qc29uLmV4YW1wbGVzIiwiU2FtcGxlIEpTT04gdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2NoZW1hLCBmb3IgdGhlIHB1cnBvc2Ugb2YgaWxsdXN0cmF0aW5nIHVzYWdlLiIpLGNvbnRhaW5zOnBhKCJzY2hlbWEuanNvbi5jb250YWlucyIsJ0FuIGFycmF5IGluc3RhbmNlIGlzIHZhbGlkIGFnYWluc3QgImNvbnRhaW5zIiBpZiBhdCBsZWFzdCBvbmUgb2YgaXRzIGVsZW1lbnRzIGlzIHZhbGlkIGFnYWluc3QgdGhlIGdpdmVuIHNjaGVtYS4nKSxwcm9wZXJ0eU5hbWVzOnBhKCJzY2hlbWEuanNvbi5wcm9wZXJ0eU5hbWVzIiwiSWYgdGhlIGluc3RhbmNlIGlzIGFuIG9iamVjdCwgdGhpcyBrZXl3b3JkIHZhbGlkYXRlcyBpZiBldmVyeSBwcm9wZXJ0eSBuYW1lIGluIHRoZSBpbnN0YW5jZSB2YWxpZGF0ZXMgYWdhaW5zdCB0aGUgcHJvdmlkZWQgc2NoZW1hLiIpLGNvbnN0OnBhKCJzY2hlbWEuanNvbi5jb25zdCIsIkFuIGluc3RhbmNlIHZhbGlkYXRlcyBzdWNjZXNzZnVsbHkgYWdhaW5zdCB0aGlzIGtleXdvcmQgaWYgaXRzIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiB0aGUga2V5d29yZC4iKSxjb250ZW50TWVkaWFUeXBlOnBhKCJzY2hlbWEuanNvbi5jb250ZW50TWVkaWFUeXBlIiwiRGVzY3JpYmVzIHRoZSBtZWRpYSB0eXBlIG9mIGEgc3RyaW5nIHByb3BlcnR5LiIpLGNvbnRlbnRFbmNvZGluZzpwYSgic2NoZW1hLmpzb24uY29udGVudEVuY29kaW5nIiwiRGVzY3JpYmVzIHRoZSBjb250ZW50IGVuY29kaW5nIG9mIGEgc3RyaW5nIHByb3BlcnR5LiIpLGlmOnBhKCJzY2hlbWEuanNvbi5pZiIsJ1RoZSB2YWxpZGF0aW9uIG91dGNvbWUgb2YgdGhlICJpZiIgc3Vic2NoZW1hIGNvbnRyb2xzIHdoaWNoIG9mIHRoZSAidGhlbiIgb3IgImVsc2UiIGtleXdvcmRzIGFyZSBldmFsdWF0ZWQuJyksdGhlbjpwYSgic2NoZW1hLmpzb24udGhlbiIsJ1RoZSAiaWYiIHN1YnNjaGVtYSBpcyB1c2VkIGZvciB2YWxpZGF0aW9uIHdoZW4gdGhlICJpZiIgc3Vic2NoZW1hIHN1Y2NlZWRzLicpLGVsc2U6cGEoInNjaGVtYS5qc29uLmVsc2UiLCdUaGUgImVsc2UiIHN1YnNjaGVtYSBpcyB1c2VkIGZvciB2YWxpZGF0aW9uIHdoZW4gdGhlICJpZiIgc3Vic2NoZW1hIGZhaWxzLicpfTtmb3IobWEgaW4gYmEuc2NoZW1hcylmb3IoZGEgaW4odWE9YmEuc2NoZW1hc1ttYV0pLnByb3BlcnRpZXMpImJvb2xlYW4iPT10eXBlb2YoaGE9dWEucHJvcGVydGllc1tkYV0pJiYoaGE9dWEucHJvcGVydGllc1tkYV09e30pLChmYT12YVtkYV0pP2hhLmRlc2NyaXB0aW9uPWZhOmNvbnNvbGUubG9nKCIiLmNvbmNhdChkYSwiOiBsb2NhbGl6ZSgnc2NoZW1hLmpzb24uIikuY29uY2F0KGRhLCdcJywgIiIpJykpO2dhPSgoKT0+e3ZhciBlPXs0NzA6ZT0+e2Z1bmN0aW9uIHQoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeShlKSl9ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgbixyPSIiLGk9MCxvPS0xLGE9MCxzPTA7czw9ZS5sZW5ndGg7KytzKXtpZihzPGUubGVuZ3RoKW49ZS5jaGFyQ29kZUF0KHMpO2Vsc2V7aWYoNDc9PT1uKWJyZWFrO249NDd9aWYoNDc9PT1uKXtpZihvPT09cy0xfHwxPT09YSk7ZWxzZSBpZihvIT09cy0xJiYyPT09YSl7aWYoci5sZW5ndGg8Mnx8MiE9PWl8fDQ2IT09ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpfHw0NiE9PXIuY2hhckNvZGVBdChyLmxlbmd0aC0yKSlpZihyLmxlbmd0aD4yKXt2YXIgYz1yLmxhc3RJbmRleE9mKCIvIik7aWYoYyE9PXIubGVuZ3RoLTEpey0xPT09Yz8ocj0iIixpPTApOmk9KHI9ci5zbGljZSgwLGMpKS5sZW5ndGgtMS1yLmxhc3RJbmRleE9mKCIvIiksbz1zLGE9MDtjb250aW51ZX19ZWxzZSBpZigyPT09ci5sZW5ndGh8fDE9PT1yLmxlbmd0aCl7cj0iIixpPTAsbz1zLGE9MDtjb250aW51ZX10JiYoci5sZW5ndGg+MD9yKz0iLy4uIjpyPSIuLiIsaT0yKX1lbHNlIHIubGVuZ3RoPjA/cis9Ii8iK2Uuc2xpY2UobysxLHMpOnI9ZS5zbGljZShvKzEscyksaT1zLW8tMTtvPXMsYT0wfWVsc2UgNDY9PT1uJiYtMSE9PWE/KythOmE9LTF9cmV0dXJuIHJ9dmFyIHI9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIGUscj0iIixpPSExLG89YXJndW1lbnRzLmxlbmd0aC0xO28+PS0xJiYhaTtvLS0pe3ZhciBhO28+PTA/YT1hcmd1bWVudHNbb106KHZvaWQgMD09PWUmJihlPXByb2Nlc3MuY3dkKCkpLGE9ZSksdChhKSwwIT09YS5sZW5ndGgmJihyPWErIi8iK3IsaT00Nz09PWEuY2hhckNvZGVBdCgwKSl9cmV0dXJuIHI9bihyLCFpKSxpP3IubGVuZ3RoPjA/Ii8iK3I6Ii8iOnIubGVuZ3RoPjA/cjoiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbihlKXtpZih0KGUpLDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7dmFyIHI9NDc9PT1lLmNoYXJDb2RlQXQoMCksaT00Nz09PWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKTtyZXR1cm4gMCE9PShlPW4oZSwhcikpLmxlbmd0aHx8cnx8KGU9Ii4iKSxlLmxlbmd0aD4wJiZpJiYoZSs9Ii8iKSxyPyIvIitlOmV9LGlzQWJzb2x1dGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSksZS5sZW5ndGg+MCYmNDc9PT1lLmNoYXJDb2RlQXQoMCl9LGpvaW46ZnVuY3Rpb24oKXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBlLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7KytuKXt2YXIgaT1hcmd1bWVudHNbbl07dChpKSxpLmxlbmd0aD4wJiYodm9pZCAwPT09ZT9lPWk6ZSs9Ii8iK2kpfXJldHVybiB2b2lkIDA9PT1lPyIuIjpyLm5vcm1hbGl6ZShlKX0scmVsYXRpdmU6ZnVuY3Rpb24oZSxuKXtpZih0KGUpLHQobiksZT09PW4pcmV0dXJuIiI7aWYoKGU9ci5yZXNvbHZlKGUpKT09PShuPXIucmVzb2x2ZShuKSkpcmV0dXJuIiI7Zm9yKHZhciBpPTE7aTxlLmxlbmd0aCYmNDc9PT1lLmNoYXJDb2RlQXQoaSk7KytpKTtmb3IodmFyIG89ZS5sZW5ndGgsYT1vLWkscz0xO3M8bi5sZW5ndGgmJjQ3PT09bi5jaGFyQ29kZUF0KHMpOysrcyk7Zm9yKHZhciBjPW4ubGVuZ3RoLXMsbD1hPGM/YTpjLHU9LTEsaD0wO2g8PWw7KytoKXtpZihoPT09bCl7aWYoYz5sKXtpZig0Nz09PW4uY2hhckNvZGVBdChzK2gpKXJldHVybiBuLnNsaWNlKHMraCsxKTtpZigwPT09aClyZXR1cm4gbi5zbGljZShzK2gpfWVsc2UgYT5sJiYoNDc9PT1lLmNoYXJDb2RlQXQoaStoKT91PWg6MD09PWgmJih1PTApKTticmVha312YXIgZj1lLmNoYXJDb2RlQXQoaStoKTtpZihmIT09bi5jaGFyQ29kZUF0KHMraCkpYnJlYWs7NDc9PT1mJiYodT1oKX12YXIgZD0iIjtmb3IoaD1pK3UrMTtoPD1vOysraCloIT09byYmNDchPT1lLmNoYXJDb2RlQXQoaCl8fCgwPT09ZC5sZW5ndGg/ZCs9Ii4uIjpkKz0iLy4uIik7cmV0dXJuIGQubGVuZ3RoPjA/ZCtuLnNsaWNlKHMrdSk6KHMrPXUsNDc9PT1uLmNoYXJDb2RlQXQocykmJisrcyxuLnNsaWNlKHMpKX0sX21ha2VMb25nOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxkaXJuYW1lOmZ1bmN0aW9uKGUpe2lmKHQoZSksMD09PWUubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIG49ZS5jaGFyQ29kZUF0KDApLHI9NDc9PT1uLGk9LTEsbz0hMCxhPWUubGVuZ3RoLTE7YT49MTstLWEpaWYoNDc9PT0obj1lLmNoYXJDb2RlQXQoYSkpKXtpZighbyl7aT1hO2JyZWFrfX1lbHNlIG89ITE7cmV0dXJuLTE9PT1pP3I/Ii8iOiIuIjpyJiYxPT09aT8iLy8iOmUuc2xpY2UoMCxpKX0sYmFzZW5hbWU6ZnVuY3Rpb24oZSxuKXtpZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO3QoZSk7dmFyIHIsaT0wLG89LTEsYT0hMDtpZih2b2lkIDAhPT1uJiZuLmxlbmd0aD4wJiZuLmxlbmd0aDw9ZS5sZW5ndGgpe2lmKG4ubGVuZ3RoPT09ZS5sZW5ndGgmJm49PT1lKXJldHVybiIiO3ZhciBzPW4ubGVuZ3RoLTEsYz0tMTtmb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKXt2YXIgbD1lLmNoYXJDb2RlQXQocik7aWYoNDc9PT1sKXtpZighYSl7aT1yKzE7YnJlYWt9fWVsc2UtMT09PWMmJihhPSExLGM9cisxKSxzPj0wJiYobD09PW4uY2hhckNvZGVBdChzKT8tMT09LS1zJiYobz1yKToocz0tMSxvPWMpKX1yZXR1cm4gaT09PW8/bz1jOi0xPT09byYmKG89ZS5sZW5ndGgpLGUuc2xpY2UoaSxvKX1mb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKWlmKDQ3PT09ZS5jaGFyQ29kZUF0KHIpKXtpZighYSl7aT1yKzE7YnJlYWt9fWVsc2UtMT09PW8mJihhPSExLG89cisxKTtyZXR1cm4tMT09PW8/IiI6ZS5zbGljZShpLG8pfSxleHRuYW1lOmZ1bmN0aW9uKGUpe3QoZSk7Zm9yKHZhciBuPS0xLHI9MCxpPS0xLG89ITAsYT0wLHM9ZS5sZW5ndGgtMTtzPj0wOy0tcyl7dmFyIGM9ZS5jaGFyQ29kZUF0KHMpO2lmKDQ3IT09YyktMT09PWkmJihvPSExLGk9cysxKSw0Nj09PWM/LTE9PT1uP249czoxIT09YSYmKGE9MSk6LTEhPT1uJiYoYT0tMSk7ZWxzZSBpZighbyl7cj1zKzE7YnJlYWt9fXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09YXx8MT09PWEmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6ZnVuY3Rpb24oZSl7aWYobnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInBhdGhPYmplY3QiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7cmV0dXJuIG49KHQ9ZSkuZGlyfHx0LnJvb3Qscj10LmJhc2V8fCh0Lm5hbWV8fCIiKSsodC5leHR8fCIiKSxuP249PT10LnJvb3Q/bityOm4rIi8iK3I6cjt2YXIgdCxuLHJ9LHBhcnNlOmZ1bmN0aW9uKGUpe3QoZSk7dmFyIG49e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbjt2YXIgcixpPWUuY2hhckNvZGVBdCgwKSxvPTQ3PT09aTtvPyhuLnJvb3Q9Ii8iLHI9MSk6cj0wO2Zvcih2YXIgYT0tMSxzPTAsYz0tMSxsPSEwLHU9ZS5sZW5ndGgtMSxoPTA7dT49cjstLXUpaWYoNDchPT0oaT1lLmNoYXJDb2RlQXQodSkpKS0xPT09YyYmKGw9ITEsYz11KzEpLDQ2PT09aT8tMT09PWE/YT11OjEhPT1oJiYoaD0xKTotMSE9PWEmJihoPS0xKTtlbHNlIGlmKCFsKXtzPXUrMTticmVha31yZXR1cm4tMT09PWF8fC0xPT09Y3x8MD09PWh8fDE9PT1oJiZhPT09Yy0xJiZhPT09cysxPy0xIT09YyYmKG4uYmFzZT1uLm5hbWU9MD09PXMmJm8/ZS5zbGljZSgxLGMpOmUuc2xpY2UocyxjKSk6KDA9PT1zJiZvPyhuLm5hbWU9ZS5zbGljZSgxLGEpLG4uYmFzZT1lLnNsaWNlKDEsYykpOihuLm5hbWU9ZS5zbGljZShzLGEpLG4uYmFzZT1lLnNsaWNlKHMsYykpLG4uZXh0PWUuc2xpY2UoYSxjKSkscz4wP24uZGlyPWUuc2xpY2UoMCxzLTEpOm8mJihuLmRpcj0iLyIpLG59LHNlcDoiLyIsZGVsaW1pdGVyOiI6Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9O3IucG9zaXg9cixlLmV4cG9ydHM9cn0sNDQ3OihlLHQsbik9Pnt2YXIgcjtpZihuLnIodCksbi5kKHQse1VSSTooKT0+ZyxVdGlsczooKT0+eH0pLCJvYmplY3QiPT10eXBlb2YgcHJvY2VzcylyPSJ3aW4zMiI9PT1wcm9jZXNzLnBsYXRmb3JtO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3Ipe3ZhciBpPW5hdmlnYXRvci51c2VyQWdlbnQ7cj1pLmluZGV4T2YoIldpbmRvd3MiKT49MH12YXIgbyxhLHM9KG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4obz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHQpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9byhlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX0pLGM9L15cd1tcd1xkKy4tXSokLyxsPS9eXC8vLHU9L15cL1wvLztmdW5jdGlvbiBoKGUsdCl7aWYoIWUuc2NoZW1lJiZ0KXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogU2NoZW1lIGlzIG1pc3Npbmc6IHtzY2hlbWU6ICIiLCBhdXRob3JpdHk6ICInLmNvbmNhdChlLmF1dGhvcml0eSwnIiwgcGF0aDogIicpLmNvbmNhdChlLnBhdGgsJyIsIHF1ZXJ5OiAiJykuY29uY2F0KGUucXVlcnksJyIsIGZyYWdtZW50OiAiJykuY29uY2F0KGUuZnJhZ21lbnQsJyJ9JykpO2lmKGUuc2NoZW1lJiYhYy50ZXN0KGUuc2NoZW1lKSl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IFNjaGVtZSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuIik7aWYoZS5wYXRoKWlmKGUuYXV0aG9yaXR5KXtpZighbC50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZih1LnRlc3QoZS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoIi8vIiknKX12YXIgZj0iIixkPSIvIixtPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIsaSxvKXt2YXIgYSxzO3ZvaWQgMD09PW8mJihvPSExKSwib2JqZWN0Ij09dHlwZW9mIGU/KHRoaXMuc2NoZW1lPWUuc2NoZW1lfHxmLHRoaXMuYXV0aG9yaXR5PWUuYXV0aG9yaXR5fHxmLHRoaXMucGF0aD1lLnBhdGh8fGYsdGhpcy5xdWVyeT1lLnF1ZXJ5fHxmLHRoaXMuZnJhZ21lbnQ9ZS5mcmFnbWVudHx8Zik6KHRoaXMuc2NoZW1lPShzPW8sKGE9ZSl8fHM/YToiZmlsZSIpLHRoaXMuYXV0aG9yaXR5PXR8fGYsdGhpcy5wYXRoPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0P3RbMF0hPT1kJiYodD1kK3QpOnQ9ZH1yZXR1cm4gdH0odGhpcy5zY2hlbWUsbnx8ZiksdGhpcy5xdWVyeT1yfHxmLHRoaXMuZnJhZ21lbnQ9aXx8ZixoKHRoaXMsbykpfXJldHVybiBlLmlzVXJpPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZXx8ISF0JiYic3RyaW5nIj09dHlwZW9mIHQuYXV0aG9yaXR5JiYic3RyaW5nIj09dHlwZW9mIHQuZnJhZ21lbnQmJiJzdHJpbmciPT10eXBlb2YgdC5wYXRoJiYic3RyaW5nIj09dHlwZW9mIHQucXVlcnkmJiJzdHJpbmciPT10eXBlb2YgdC5zY2hlbWUmJiJzdHJpbmciPT10eXBlb2YgdC5mc1BhdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LndpdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRvU3RyaW5nfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZzUGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB3KHRoaXMsITEpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLndpdGg9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIHQ9ZS5zY2hlbWUsbj1lLmF1dGhvcml0eSxyPWUucGF0aCxpPWUucXVlcnksbz1lLmZyYWdtZW50O3JldHVybiB2b2lkIDA9PT10P3Q9dGhpcy5zY2hlbWU6bnVsbD09PXQmJih0PWYpLHZvaWQgMD09PW4/bj10aGlzLmF1dGhvcml0eTpudWxsPT09biYmKG49Ziksdm9pZCAwPT09cj9yPXRoaXMucGF0aDpudWxsPT09ciYmKHI9Ziksdm9pZCAwPT09aT9pPXRoaXMucXVlcnk6bnVsbD09PWkmJihpPWYpLHZvaWQgMD09PW8/bz10aGlzLmZyYWdtZW50Om51bGw9PT1vJiYobz1mKSx0PT09dGhpcy5zY2hlbWUmJm49PT10aGlzLmF1dGhvcml0eSYmcj09PXRoaXMucGF0aCYmaT09PXRoaXMucXVlcnkmJm89PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IGIodCxuLHIsaSxvKX0sZS5wYXJzZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgbj1tLmV4ZWMoZSk7cmV0dXJuIG4/bmV3IGIoblsyXXx8ZixFKG5bNF18fGYpLEUobls1XXx8ZiksRShuWzddfHxmKSxFKG5bOV18fGYpLHQpOm5ldyBiKGYsZixmLGYsZil9LGUuZmlsZT1mdW5jdGlvbihlKXt2YXIgdD1mO2lmKHImJihlPWUucmVwbGFjZSgvXFwvZyxkKSksZVswXT09PWQmJmVbMV09PT1kKXt2YXIgbj1lLmluZGV4T2YoZCwyKTstMT09PW4/KHQ9ZS5zdWJzdHJpbmcoMiksZT1kKToodD1lLnN1YnN0cmluZygyLG4pLGU9ZS5zdWJzdHJpbmcobil8fGQpfXJldHVybiBuZXcgYigiZmlsZSIsdCxlLGYsZil9LGUuZnJvbT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgYihlLnNjaGVtZSxlLmF1dGhvcml0eSxlLnBhdGgsZS5xdWVyeSxlLmZyYWdtZW50KTtyZXR1cm4gaCh0LCEwKSx0fSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLF8odGhpcyxlKX0sZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUucmV2aXZlPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiBlKXJldHVybiB0O3ZhciBuPW5ldyBiKHQpO3JldHVybiBuLl9mb3JtYXR0ZWQ9dC5leHRlcm5hbCxuLl9mc1BhdGg9dC5fc2VwPT09cD90LmZzUGF0aDpudWxsLG59cmV0dXJuIHR9LGV9KCkscD1yPzE6dm9pZCAwLGI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5fZm9ybWF0dGVkPW51bGwsdC5fZnNQYXRoPW51bGwsdH1yZXR1cm4gcyh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD13KHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxlP18odGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1fKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYoZS5mc1BhdGg9dGhpcy5fZnNQYXRoLGUuX3NlcD1wKSx0aGlzLl9mb3JtYXR0ZWQmJihlLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoZS5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihlLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihlLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKGUucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKGUuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksZX0sdH0oZyksdj0oKGE9e30pWzU4XT0iJTNBIixhWzQ3XT0iJTJGIixhWzYzXT0iJTNGIixhWzM1XT0iJTIzIixhWzkxXT0iJTVCIixhWzkzXT0iJTVEIixhWzY0XT0iJTQwIixhWzMzXT0iJTIxIixhWzM2XT0iJTI0IixhWzM4XT0iJTI2IixhWzM5XT0iJTI3IixhWzQwXT0iJTI4IixhWzQxXT0iJTI5IixhWzQyXT0iJTJBIixhWzQzXT0iJTJCIixhWzQ0XT0iJTJDIixhWzU5XT0iJTNCIixhWzYxXT0iJTNEIixhWzMyXT0iJTIwIixhKTtmdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciBuPXZvaWQgMCxyPS0xLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZS5jaGFyQ29kZUF0KGkpO2lmKG8+PTk3JiZvPD0xMjJ8fG8+PTY1JiZvPD05MHx8bz49NDgmJm88PTU3fHw0NT09PW98fDQ2PT09b3x8OTU9PT1vfHwxMjY9PT1vfHx0JiY0Nz09PW8pLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLHZvaWQgMCE9PW4mJihuKz1lLmNoYXJBdChpKSk7ZWxzZXt2b2lkIDA9PT1uJiYobj1lLnN1YnN0cigwLGkpKTt2YXIgYT12W29dO3ZvaWQgMCE9PWE/KC0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLGkpKSxyPS0xKSxuKz1hKTotMT09PXImJihyPWkpfX1yZXR1cm4tMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocikpKSx2b2lkIDAhPT1uP246ZX1mdW5jdGlvbiBDKGUpe2Zvcih2YXIgdD12b2lkIDAsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lLmNoYXJDb2RlQXQobik7MzU9PT1yfHw2Mz09PXI/KHZvaWQgMD09PXQmJih0PWUuc3Vic3RyKDAsbikpLHQrPXZbcl0pOnZvaWQgMCE9PXQmJih0Kz1lW25dKX1yZXR1cm4gdm9pZCAwIT09dD90OmV9ZnVuY3Rpb24gdyhlLHQpe3ZhciBuO3JldHVybiBuPWUuYXV0aG9yaXR5JiZlLnBhdGgubGVuZ3RoPjEmJiJmaWxlIj09PWUuc2NoZW1lPyIvLyIuY29uY2F0KGUuYXV0aG9yaXR5KS5jb25jYXQoZS5wYXRoKTo0Nz09PWUucGF0aC5jaGFyQ29kZUF0KDApJiYoZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTY1JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9OTB8fGUucGF0aC5jaGFyQ29kZUF0KDEpPj05NyYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTEyMikmJjU4PT09ZS5wYXRoLmNoYXJDb2RlQXQoMik/dD9lLnBhdGguc3Vic3RyKDEpOmUucGF0aFsxXS50b0xvd2VyQ2FzZSgpK2UucGF0aC5zdWJzdHIoMik6ZS5wYXRoLHImJihuPW4ucmVwbGFjZSgvXC8vZywiXFwiKSksbn1mdW5jdGlvbiBfKGUsdCl7dmFyIG49dD9DOnkscj0iIixpPWUuc2NoZW1lLG89ZS5hdXRob3JpdHksYT1lLnBhdGgscz1lLnF1ZXJ5LGM9ZS5mcmFnbWVudDtpZihpJiYocis9aSxyKz0iOiIpLChvfHwiZmlsZSI9PT1pKSYmKHIrPWQscis9ZCksbyl7dmFyIGw9by5pbmRleE9mKCJAIik7aWYoLTEhPT1sKXt2YXIgdT1vLnN1YnN0cigwLGwpO289by5zdWJzdHIobCsxKSwtMT09PShsPXUuaW5kZXhPZigiOiIpKT9yKz1uKHUsITEpOihyKz1uKHUuc3Vic3RyKDAsbCksITEpLHIrPSI6IixyKz1uKHUuc3Vic3RyKGwrMSksITEpKSxyKz0iQCJ9LTE9PT0obD0obz1vLnRvTG93ZXJDYXNlKCkpLmluZGV4T2YoIjoiKSk/cis9bihvLCExKToocis9bihvLnN1YnN0cigwLGwpLCExKSxyKz1vLnN1YnN0cihsKSl9aWYoYSl7aWYoYS5sZW5ndGg+PTMmJjQ3PT09YS5jaGFyQ29kZUF0KDApJiY1OD09PWEuY2hhckNvZGVBdCgyKSkoaD1hLmNoYXJDb2RlQXQoMSkpPj02NSYmaDw9OTAmJihhPSIvIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShoKzMyKSwiOiIpLmNvbmNhdChhLnN1YnN0cigzKSkpO2Vsc2UgaWYoYS5sZW5ndGg+PTImJjU4PT09YS5jaGFyQ29kZUF0KDEpKXt2YXIgaDsoaD1hLmNoYXJDb2RlQXQoMCkpPj02NSYmaDw9OTAmJihhPSIiLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGgrMzIpLCI6IikuY29uY2F0KGEuc3Vic3RyKDIpKSl9cis9bihhLCEwKX1yZXR1cm4gcyYmKHIrPSI/IixyKz1uKHMsITEpKSxjJiYocis9IiMiLHIrPXQ/Yzp5KGMsITEpKSxyfWZ1bmN0aW9uIFMoZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2godCl7cmV0dXJuIGUubGVuZ3RoPjM/ZS5zdWJzdHIoMCwzKStTKGUuc3Vic3RyKDMpKTplfX12YXIgQT0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBFKGUpe3JldHVybiBlLm1hdGNoKEEpP2UucmVwbGFjZShBLChmdW5jdGlvbihlKXtyZXR1cm4gUyhlKX0pKTplfXZhciB4LE4saz1uKDQ3MCksTD1mdW5jdGlvbihlLHQsbil7aWYobnx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciByLGk9MCxvPXQubGVuZ3RoO2k8bztpKyspIXImJmkgaW4gdHx8KHJ8fChyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxpKSkscltpXT10W2ldKTtyZXR1cm4gZS5jb25jYXQocnx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpfSxUPWsucG9zaXh8fGs7KE49eHx8KHg9e30pKS5qb2luUGF0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gZS53aXRoKHtwYXRoOlQuam9pbi5hcHBseShULEwoW2UucGF0aF0sdCwhMSkpfSl9LE4ucmVzb2x2ZVBhdGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07dmFyIHI9ZS5wYXRofHwiLyI7cmV0dXJuIGUud2l0aCh7cGF0aDpULnJlc29sdmUuYXBwbHkoVCxMKFtyXSx0LCExKSl9KX0sTi5kaXJuYW1lPWZ1bmN0aW9uKGUpe3ZhciB0PVQuZGlybmFtZShlLnBhdGgpO3JldHVybiAxPT09dC5sZW5ndGgmJjQ2PT09dC5jaGFyQ29kZUF0KDApP2U6ZS53aXRoKHtwYXRoOnR9KX0sTi5iYXNlbmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gVC5iYXNlbmFtZShlLnBhdGgpfSxOLmV4dG5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFQuZXh0bmFtZShlLnBhdGgpfX19LHQ9e307ZnVuY3Rpb24gbihyKXtpZih0W3JdKXJldHVybiB0W3JdLmV4cG9ydHM7dmFyIGk9dFtyXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfXJldHVybiBuLmQ9KGUsdCk9Pntmb3IodmFyIHIgaW4gdCluLm8odCxyKSYmIW4ubyhlLHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtlbnVtZXJhYmxlOiEwLGdldDp0W3JdfSl9LG4ubz0oZSx0KT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCksbi5yPWU9PnsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxuKDQ0Nyl9KSgpO3ZhcntVUkk6eWEsVXRpbHM6Q2F9PWdhO2Z1bmN0aW9uIHdhKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIik7Zm9yKHZhciBuLHI9U3RyaW5nKGUpLGk9IiIsbz0hIXQmJiEhdC5leHRlbmRlZCxhPSEhdCYmISF0Lmdsb2JzdGFyLHM9ITEsYz10JiYic3RyaW5nIj09dHlwZW9mIHQuZmxhZ3M/dC5mbGFnczoiIixsPTAsdT1yLmxlbmd0aDtsPHU7bCsrKXN3aXRjaChuPXJbbF0pe2Nhc2UiLyI6Y2FzZSIkIjpjYXNlIl4iOmNhc2UiKyI6Y2FzZSIuIjpjYXNlIigiOmNhc2UiKSI6Y2FzZSI9IjpjYXNlIiEiOmNhc2UifCI6aSs9IlxcIituO2JyZWFrO2Nhc2UiPyI6aWYobyl7aSs9Ii4iO2JyZWFrfWNhc2UiWyI6Y2FzZSJdIjppZihvKXtpKz1uO2JyZWFrfWNhc2UieyI6aWYobyl7cz0hMCxpKz0iKCI7YnJlYWt9Y2FzZSJ9IjppZihvKXtzPSExLGkrPSIpIjticmVha31jYXNlIiwiOmlmKHMpe2krPSJ8IjticmVha31pKz0iXFwiK247YnJlYWs7Y2FzZSIqIjpmb3IodmFyIGg9cltsLTFdLGY9MTsiKiI9PT1yW2wrMV07KWYrKyxsKys7dmFyIGQ9cltsKzFdO2lmKGEpZj4xJiYoIi8iPT09aHx8dm9pZCAwPT09aHx8InsiPT09aHx8IiwiPT09aCkmJigiLyI9PT1kfHx2b2lkIDA9PT1kfHwiLCI9PT1kfHwifSI9PT1kKT8oIi8iPT09ZD9sKys6Ii8iPT09aCYmaS5lbmRzV2l0aCgiXFwvIikmJihpPWkuc3Vic3RyKDAsaS5sZW5ndGgtMikpLGkrPSIoKD86W14vXSooPzovfCQpKSopIik6aSs9IihbXi9dKikiO2Vsc2UgaSs9Ii4qIjticmVhaztkZWZhdWx0OmkrPW59cmV0dXJuIGMmJn5jLmluZGV4T2YoImciKXx8KGk9Il4iK2krIiQiKSxuZXcgUmVnRXhwKGksYyl9dmFyIF9hLFNhPUFvKCksQWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5nbG9iV3JhcHBlcnM9W107dHJ5e2Zvcih2YXIgbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxvPSIhIiE9PWlbMF07b3x8KGk9aS5zdWJzdHJpbmcoMSkpLGkubGVuZ3RoPjAmJigiLyI9PT1pWzBdJiYoaT1pLnN1YnN0cmluZygxKSksdGhpcy5nbG9iV3JhcHBlcnMucHVzaCh7cmVnZXhwOndhKCIqKi8iK2kse2V4dGVuZGVkOiEwLGdsb2JzdGFyOiEwfSksaW5jbHVkZTpvfSkpfXRoaXMudXJpcz10fWNhdGNoKGUpe3RoaXMuZ2xvYldyYXBwZXJzLmxlbmd0aD0wLHRoaXMudXJpcz1bXX19cmV0dXJuIGUucHJvdG90eXBlLm1hdGNoZXNQYXR0ZXJuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMSxuPTAscj10aGlzLmdsb2JXcmFwcGVycztuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxvPWkucmVnZXhwLGE9aS5pbmNsdWRlO28udGVzdChlKSYmKHQ9YSl9cmV0dXJuIHR9LGUucHJvdG90eXBlLmdldFVSSXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cmlzfSxlfSgpLEVhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5zZXJ2aWNlPWUsdGhpcy51cmk9dCx0aGlzLmRlcGVuZGVuY2llcz1uZXcgU2V0LHRoaXMuYW5jaG9ycz12b2lkIDAsbiYmKHRoaXMudW5yZXNvbHZlZFNjaGVtYT10aGlzLnNlcnZpY2UucHJvbWlzZS5yZXNvbHZlKG5ldyB4YShuKSkpfXJldHVybiBlLnByb3RvdHlwZS5nZXRVbnJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5yZXNvbHZlZFNjaGVtYXx8KHRoaXMudW5yZXNvbHZlZFNjaGVtYT10aGlzLnNlcnZpY2UubG9hZFNjaGVtYSh0aGlzLnVyaSkpLHRoaXMudW5yZXNvbHZlZFNjaGVtYX0sZS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLnJlc29sdmVkU2NoZW1hfHwodGhpcy5yZXNvbHZlZFNjaGVtYT10aGlzLmdldFVucmVzb2x2ZWRTY2hlbWEoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gZS5zZXJ2aWNlLnJlc29sdmVTY2hlbWFDb250ZW50KHQsZSl9KSkpLHRoaXMucmVzb2x2ZWRTY2hlbWF9LGUucHJvdG90eXBlLmNsZWFyU2NoZW1hPWZ1bmN0aW9uKCl7dmFyIGU9ISF0aGlzLnVucmVzb2x2ZWRTY2hlbWE7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWE9dm9pZCAwLHRoaXMudW5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKSx0aGlzLmFuY2hvcnM9dm9pZCAwLGV9LGV9KCkseGE9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zY2hlbWE9ZSx0aGlzLmVycm9ycz10fSxOYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zY2hlbWE9ZSx0aGlzLmVycm9ycz10fXJldHVybiBlLnByb3RvdHlwZS5nZXRTZWN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHRoaXMuc2NoZW1hKTtpZih0KXJldHVybiBLbyh0KX0sZS5wcm90b3R5cGUuZ2V0U2VjdGlvblJlY3Vyc2l2ZT1mdW5jdGlvbihlLHQpe2lmKCF0fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49ZS5zaGlmdCgpO2lmKHQucHJvcGVydGllcyYmKHQucHJvcGVydGllc1tuXSwxKSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5wcm9wZXJ0aWVzW25dKTtpZih0LnBhdHRlcm5Qcm9wZXJ0aWVzKWZvcih2YXIgcj0wLGk9T2JqZWN0LmtleXModC5wYXR0ZXJuUHJvcGVydGllcyk7cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl0sYT1jaShvKTtpZihudWxsPT1hP3ZvaWQgMDphLnRlc3QobikpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQucGF0dGVyblByb3BlcnRpZXNbb10pfWVsc2V7aWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtpZihuLm1hdGNoKCJbMC05XSsiKSlpZihBcnJheS5pc0FycmF5KHQuaXRlbXMpKXt2YXIgcz1wYXJzZUludChuLDEwKTtpZighaXNOYU4ocykmJnQuaXRlbXNbc10pcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuaXRlbXNbc10pfWVsc2UgaWYodC5pdGVtcylyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5pdGVtcyl9fSxlfSgpLGthPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5jb250ZXh0U2VydmljZT10LHRoaXMucmVxdWVzdFNlcnZpY2U9ZSx0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcj1ufHxQcm9taXNlLHRoaXMuY2FsbE9uRGlzcG9zZT1bXSx0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXM9e30sdGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM9W10sdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e319cmV0dXJuIGUucHJvdG90eXBlLmdldFJlZ2lzdGVyZWRTY2hlbWFJZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHMpLmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIG49eWEucGFyc2UodCkuc2NoZW1lO3JldHVybiJzY2hlbWFzZXJ2aWNlIiE9PW4mJighZXx8ZShuKSl9KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicHJvbWlzZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmNhbGxPbkRpc3Bvc2UubGVuZ3RoPjA7KXRoaXMuY2FsbE9uRGlzcG9zZS5wb3AoKSgpfSxlLnByb3RvdHlwZS5vblJlc291cmNlQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDA7Zm9yKHZhciBuPSExLHI9W2U9VGEoZSldLGk9T2JqZWN0LmtleXModGhpcy5zY2hlbWFzQnlJZCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5zY2hlbWFzQnlJZFtlXX0pKTtyLmxlbmd0aDspZm9yKHZhciBvPXIucG9wKCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdO3MmJihzLnVyaT09PW98fHMuZGVwZW5kZW5jaWVzLmhhcyhvKSkmJihzLnVyaSE9PW8mJnIucHVzaChzLnVyaSkscy5jbGVhclNjaGVtYSgpJiYobj0hMCksaVthXT12b2lkIDApfXJldHVybiBufSxlLnByb3RvdHlwZS5zZXRTY2hlbWFDb250cmlidXRpb25zPWZ1bmN0aW9uKGUpe2lmKGUuc2NoZW1hcyl7dmFyIHQ9ZS5zY2hlbWFzO2Zvcih2YXIgbiBpbiB0KXt2YXIgcj1UYShuKTt0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbcl09dGhpcy5hZGRTY2hlbWFIYW5kbGUocix0W25dKX19aWYoQXJyYXkuaXNBcnJheShlLnNjaGVtYUFzc29jaWF0aW9ucykpZm9yKHZhciBpPTAsbz1lLnNjaGVtYUFzc29jaWF0aW9ucztpPG8ubGVuZ3RoO2krKyl7dmFyIGE9b1tpXSxzPWEudXJpcy5tYXAoVGEpLGM9dGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKGEucGF0dGVybixzKTt0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucy5wdXNoKGMpfX0sZS5wcm90b3R5cGUuYWRkU2NoZW1hSGFuZGxlPWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IEVhKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXT1uLG59LGUucHJvdG90eXBlLmdldE9yQWRkU2NoZW1hSGFuZGxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc2NoZW1hc0J5SWRbZV18fHRoaXMuYWRkU2NoZW1hSGFuZGxlKGUsdCl9LGUucHJvdG90eXBlLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgQWEoZSx0KTtyZXR1cm4gdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucy5wdXNoKG4pLG59LGUucHJvdG90eXBlLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWE9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVRhKGUpO3JldHVybiB0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzW3JdPSEwLHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwLHQmJnRoaXMuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbih0LFtyXSksbj90aGlzLmFkZFNjaGVtYUhhbmRsZShyLG4pOnRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUocil9LGUucHJvdG90eXBlLmNsZWFyRXh0ZXJuYWxTY2hlbWFzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuc2NoZW1hc0J5SWQ9e30sdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucz1bXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzPXt9LHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwLHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcyl0aGlzLnNjaGVtYXNCeUlkW2VdPXRoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tlXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzW2VdPSEwO2Zvcih2YXIgdD0wLG49dGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07dGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucy5wdXNoKHIpfX0sZS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oZSl7dmFyIHQ9VGEoZSksbj10aGlzLnNjaGVtYXNCeUlkW3RdO3JldHVybiBuP24uZ2V0UmVzb2x2ZWRTY2hlbWEoKTp0aGlzLnByb21pc2UucmVzb2x2ZSh2b2lkIDApfSxlLnByb3RvdHlwZS5sb2FkU2NoZW1hPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLnJlcXVlc3RTZXJ2aWNlKXt2YXIgdD1TYSgianNvbi5zY2hlbWEubm9yZXF1ZXN0c2VydmljZSIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nLiBObyBzY2hlbWEgcmVxdWVzdCBzZXJ2aWNlIGF2YWlsYWJsZSIsT2EoZSkpO3JldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShuZXcgeGEoe30sW3RdKSl9cmV0dXJuIHRoaXMucmVxdWVzdFNlcnZpY2UoZSkudGhlbigoZnVuY3Rpb24odCl7aWYoIXQpe3ZhciBuPVNhKCJqc29uLnNjaGVtYS5ub2NvbnRlbnQiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9JzogTm8gY29udGVudC4iLE9hKGUpKTtyZXR1cm4gbmV3IHhhKHt9LFtuXSl9dmFyIHIsaT1bXTtyPVFyKHQsaSk7dmFyIG89aS5sZW5ndGg/W1NhKCJqc29uLnNjaGVtYS5pbnZhbGlkRm9ybWF0IiwiVW5hYmxlIHRvIHBhcnNlIGNvbnRlbnQgZnJvbSAnezB9JzogUGFyc2UgZXJyb3IgYXQgb2Zmc2V0IHsxfS4iLE9hKGUpLGlbMF0ub2Zmc2V0KV06W107cmV0dXJuIG5ldyB4YShyLG8pfSksKGZ1bmN0aW9uKHQpe3ZhciBuPXQudG9TdHJpbmcoKSxyPXQudG9TdHJpbmcoKS5zcGxpdCgiRXJyb3I6ICIpO3JldHVybiByLmxlbmd0aD4xJiYobj1yWzFdKSxzaShuLCIuIikmJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtMSkpLG5ldyB4YSh7fSxbU2EoImpzb24uc2NoZW1hLm5vY29udGVudCIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nOiB7MX0uIixPYShlKSxuKV0pfSkpfSxlLnByb3RvdHlwZS5yZXNvbHZlU2NoZW1hQ29udGVudD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1lLmVycm9ycy5zbGljZSgwKSxpPWUuc2NoZW1hO2lmKGkuJHNjaGVtYSl7dmFyIG89VGEoaS4kc2NoZW1hKTtpZigiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wMy9zY2hlbWEiPT09bylyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobmV3IE5hKHt9LFtTYSgianNvbi5zY2hlbWEuZHJhZnQwMy5ub3RzdXBwb3J0ZWQiLCJEcmFmdC0wMyBzY2hlbWFzIGFyZSBub3Qgc3VwcG9ydGVkLiIpXSkpOyJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDE5LTA5L3NjaGVtYSI9PT1vP3IucHVzaChTYSgianNvbi5zY2hlbWEuZHJhZnQyMDE5MDkubm90c3VwcG9ydGVkIiwiRHJhZnQgMjAxOS0wOSBzY2hlbWFzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4iKSk6Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hIj09PW8mJnIucHVzaChTYSgianNvbi5zY2hlbWEuZHJhZnQyMDIwMTIubm90c3VwcG9ydGVkIiwiRHJhZnQgMjAyMC0xMiBzY2hlbWFzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4iKSl9dmFyIGE9dGhpcy5jb250ZXh0U2VydmljZSxzPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLGEscyxjO3ZvaWQgMD09PWl8fDA9PT1pLmxlbmd0aD9vPXQ6Ii8iPT09aS5jaGFyQXQoMCk/bz1mdW5jdGlvbihlLHQpe3Q9ZGVjb2RlVVJJQ29tcG9uZW50KHQpO3ZhciBuPWU7cmV0dXJuIi8iPT09dFswXSYmKHQ9dC5zdWJzdHJpbmcoMSkpLHQuc3BsaXQoIi8iKS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+IiksIShuPW5bZV0pfSkpLG59KHQsaSk6KGE9dCxjPWksKHM9bikuYW5jaG9yc3x8KHMuYW5jaG9ycz11KGEpKSxvPXMuYW5jaG9ycy5nZXQoYykpLG8/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYhZS5oYXNPd25Qcm9wZXJ0eShuKSYmImlkIiE9PW4mJiIkaWQiIT09biYmKGVbbl09dFtuXSl9KGUsbyk6ci5wdXNoKFNhKCJqc29uLnNjaGVtYS5pbnZhbGlkaWQiLCIkcmVmICd7MH0nIGluICd7MX0nIGNhbiBub3QgYmUgcmVzb2x2ZWQuIixpLG4udXJpKSl9LGM9ZnVuY3Rpb24oZSx0LGksbyl7YSYmIS9eW0EtWmEtel1bQS1aYS16MC05K1wtLitdKjpcL1wvLiovLnRlc3QodCkmJih0PWEucmVzb2x2ZVJlbGF0aXZlUGF0aCh0LG8udXJpKSksdD1UYSh0KTt2YXIgYz1uLmdldE9yQWRkU2NoZW1hSGFuZGxlKHQpO3JldHVybiBjLmdldFVucmVzb2x2ZWRTY2hlbWEoKS50aGVuKChmdW5jdGlvbihuKXtpZihvLmRlcGVuZGVuY2llcy5hZGQodCksbi5lcnJvcnMubGVuZ3RoKXt2YXIgYT1pP3QrIiMiK2k6dDtyLnB1c2goU2EoImpzb24uc2NoZW1hLnByb2JsZW1sb2FkaW5ncmVmIiwiUHJvYmxlbXMgbG9hZGluZyByZWZlcmVuY2UgJ3swfSc6IHsxfSIsYSxuLmVycm9yc1swXSkpfXJldHVybiBzKGUsbi5zY2hlbWEsYyxpKSxsKGUsbi5zY2hlbWEsYyl9KSl9LGw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPVtdO3JldHVybiBuLnRyYXZlcnNlTm9kZXMoZSwoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPW5ldyBTZXQ7ZS4kcmVmOyl7dmFyIG89ZS4kcmVmLGE9by5zcGxpdCgiIyIsMik7aWYoZGVsZXRlIGUuJHJlZixhWzBdLmxlbmd0aD4wKXJldHVybiB2b2lkIGkucHVzaChjKGUsYVswXSxhWzFdLHIpKTtpZighbi5oYXMobykpe3ZhciBsPWFbMV07cyhlLHQscixsKSxuLmFkZChvKX19fSkpLG4ucHJvbWlzZS5hbGwoaSl9LHU9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE1hcDtyZXR1cm4gbi50cmF2ZXJzZU5vZGVzKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPWUuJGlkfHxlLmlkO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIiMiPT09bi5jaGFyQXQoMCkpe3ZhciBpPW4uc3Vic3RyaW5nKDEpO3QuaGFzKGkpP3IucHVzaChTYSgianNvbi5zY2hlbWEuZHVwbGljYXRlaWQiLCJEdXBsaWNhdGUgaWQgZGVjbGFyYXRpb246ICd7MH0nIixuKSk6dC5zZXQoaSxlKX19KSksdH07cmV0dXJuIGwoaSxpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTmEoaSxyKX0pKX0sZS5wcm90b3R5cGUudHJhdmVyc2VOb2Rlcz1mdW5jdGlvbihlLHQpe2lmKCFlfHwib2JqZWN0IiE9dHlwZW9mIGUpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtmb3IodmFyIG49bmV3IFNldCxyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTsib2JqZWN0Ij09dHlwZW9mIGkmJmEucHVzaChpKX19LGk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKCJvYmplY3QiPT10eXBlb2YgaSlmb3IodmFyIG8gaW4gaSl7dmFyIHM9byxjPWlbc107Im9iamVjdCI9PXR5cGVvZiBjJiZhLnB1c2goYyl9fX0sbz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoQXJyYXkuaXNBcnJheShpKSlmb3IodmFyIG89MCxzPWk7bzxzLmxlbmd0aDtvKyspe3ZhciBjPXNbb107Im9iamVjdCI9PXR5cGVvZiBjJiZhLnB1c2goYyl9fX0sYT1bZV0scz1hLnBvcCgpO3M7KW4uaGFzKHMpfHwobi5hZGQocyksdChzKSxyKHMuaXRlbXMscy5hZGRpdGlvbmFsSXRlbXMscy5hZGRpdGlvbmFsUHJvcGVydGllcyxzLm5vdCxzLmNvbnRhaW5zLHMucHJvcGVydHlOYW1lcyxzLmlmLHMudGhlbixzLmVsc2UpLGkocy5kZWZpbml0aW9ucyxzLnByb3BlcnRpZXMscy5wYXR0ZXJuUHJvcGVydGllcyxzLmRlcGVuZGVuY2llcyksbyhzLmFueU9mLHMuYWxsT2Yscy5vbmVPZixzLml0ZW1zKSkscz1hLnBvcCgpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGcm9tUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXt2YXIgbixyO2lmKCJvYmplY3QiPT09KG51bGw9PT0obj10LnJvb3QpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnR5cGUpKWZvcih2YXIgaT0wLG89dC5yb290LnByb3BlcnRpZXM7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV07aWYoIiRzY2hlbWEiPT09YS5rZXlOb2RlLnZhbHVlJiYic3RyaW5nIj09PShudWxsPT09KHI9YS52YWx1ZU5vZGUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnR5cGUpKXt2YXIgcz1hLnZhbHVlTm9kZS52YWx1ZTtyZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZSYmIS9eXHdbXHdcZCsuLV0qOi8udGVzdChzKSYmKHM9dGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlUmVsYXRpdmVQYXRoKHMsZSkpLHN9fX0sZS5wcm90b3R5cGUuZ2V0QXNzb2NpYXRlZFNjaGVtYXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU9iamVjdC5jcmVhdGUobnVsbCksbj1bXSxyPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4geWEucGFyc2UoZSkud2l0aCh7ZnJhZ21lbnQ6bnVsbCxxdWVyeTpudWxsfSkudG9TdHJpbmcoITApfWNhdGNoKHQpe3JldHVybiBlfX0oZSksaT0wLG89dGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucztpPG8ubGVuZ3RoO2krKyl7dmFyIGE9b1tpXTtpZihhLm1hdGNoZXNQYXR0ZXJuKHIpKWZvcih2YXIgcz0wLGM9YS5nZXRVUklzKCk7czxjLmxlbmd0aDtzKyspe3ZhciBsPWNbc107dFtsXXx8KG4ucHVzaChsKSx0W2xdPSEwKX19cmV0dXJuIG59LGUucHJvdG90eXBlLmdldFNjaGVtYVVSSXNGb3JSZXNvdXJjZT1mdW5jdGlvbihlLHQpe3ZhciBuPXQmJnRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7cmV0dXJuIG4/W25dOnRoaXMuZ2V0QXNzb2NpYXRlZFNjaGVtYXMoZSl9LGUucHJvdG90eXBlLmdldFNjaGVtYUZvclJlc291cmNlPWZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49dGhpcy5nZXRTY2hlbWFGcm9tUHJvcGVydHkoZSx0KTtpZihuKXt2YXIgcj1UYShuKTtyZXR1cm4gdGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZShyKS5nZXRSZXNvbHZlZFNjaGVtYSgpfX1pZih0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlJiZ0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlLnJlc291cmNlPT09ZSlyZXR1cm4gdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvbHZlZFNjaGVtYTt2YXIgaT10aGlzLmdldEFzc29jaWF0ZWRTY2hlbWFzKGUpLG89aS5sZW5ndGg+MD90aGlzLmNyZWF0ZUNvbWJpbmVkU2NoZW1hKGUsaSkuZ2V0UmVzb2x2ZWRTY2hlbWEoKTp0aGlzLnByb21pc2UucmVzb2x2ZSh2b2lkIDApO3JldHVybiB0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXtyZXNvdXJjZTplLHJlc29sdmVkU2NoZW1hOm99LG99LGUucHJvdG90eXBlLmNyZWF0ZUNvbWJpbmVkU2NoZW1hPWZ1bmN0aW9uKGUsdCl7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0aGlzLmdldE9yQWRkU2NoZW1hSGFuZGxlKHRbMF0pO3ZhciBuPSJzY2hlbWFzZXJ2aWNlOi8vY29tYmluZWRTY2hlbWEvIitlbmNvZGVVUklDb21wb25lbnQoZSkscj17YWxsT2Y6dC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybnskcmVmOmV9fSkpfTtyZXR1cm4gdGhpcy5hZGRTY2hlbWFIYW5kbGUobixyKX0sZS5wcm90b3R5cGUuZ2V0TWF0Y2hpbmdTY2hlbWFzPWZ1bmN0aW9uKGUsdCxuKXtpZihuKXt2YXIgcj1uLmlkfHwic2NoZW1hc2VydmljZTovL3VudGl0bGVkL21hdGNoaW5nU2NoZW1hcy8iK0xhKys7cmV0dXJuIHRoaXMuYWRkU2NoZW1hSGFuZGxlKHIsbikuZ2V0UmVzb2x2ZWRTY2hlbWEoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gdC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaW52ZXJ0ZWR9KSl9KSl9cmV0dXJuIHRoaXMuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGU/dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaW52ZXJ0ZWR9KSk6W119KSl9LGV9KCksTGE9MDtmdW5jdGlvbiBUYShlKXt0cnl7cmV0dXJuIHlhLnBhcnNlKGUpLnRvU3RyaW5nKCEwKX1jYXRjaCh0KXtyZXR1cm4gZX19ZnVuY3Rpb24gT2EoZSl7dHJ5e3ZhciB0PXlhLnBhcnNlKGUpO2lmKCJmaWxlIj09PXQuc2NoZW1lKXJldHVybiB0LmZzUGF0aH1jYXRjaChlKXt9cmV0dXJuIGV9ZnVuY3Rpb24gSWEoZSx0KXt2YXIgbj1bXSxyPVtdLGk9W10sbz0tMSxhPVlyKGUuZ2V0VGV4dCgpLCExKSxzPWEuc2NhbigpO2Z1bmN0aW9uIGMoZSl7bi5wdXNoKGUpLHIucHVzaChpLmxlbmd0aCl9Zm9yKDsxNyE9PXM7KXtzd2l0Y2gocyl7Y2FzZSAxOmNhc2UgMzp2YXIgbD17c3RhcnRMaW5lOmY9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSkubGluZSxlbmRMaW5lOmYsa2luZDoxPT09cz8ib2JqZWN0IjoiYXJyYXkifTtpLnB1c2gobCk7YnJlYWs7Y2FzZSAyOmNhc2UgNDp2YXIgdT0yPT09cz8ib2JqZWN0IjoiYXJyYXkiO2lmKGkubGVuZ3RoPjAmJmlbaS5sZW5ndGgtMV0ua2luZD09PXUpe2w9aS5wb3AoKTt2YXIgaD1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lO2wmJmg+bC5zdGFydExpbmUrMSYmbyE9PWwuc3RhcnRMaW5lJiYobC5lbmRMaW5lPWgtMSxjKGwpLG89bC5zdGFydExpbmUpfWJyZWFrO2Nhc2UgMTM6dmFyIGY9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSkubGluZSxkPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkrYS5nZXRUb2tlbkxlbmd0aCgpKS5saW5lOzE9PT1hLmdldFRva2VuRXJyb3IoKSYmZisxPGUubGluZUNvdW50P2Euc2V0UG9zaXRpb24oZS5vZmZzZXRBdChzci5jcmVhdGUoZisxLDApKSk6ZjxkJiYoYyh7c3RhcnRMaW5lOmYsZW5kTGluZTpkLGtpbmQ6d3IuQ29tbWVudH0pLG89Zik7YnJlYWs7Y2FzZSAxMjp2YXIgbT1lLmdldFRleHQoKS5zdWJzdHIoYS5nZXRUb2tlbk9mZnNldCgpLGEuZ2V0VG9rZW5MZW5ndGgoKSkubWF0Y2goL15cL1wvXHMqIyhyZWdpb25cYil8KGVuZHJlZ2lvblxiKS8pO2lmKG0pe2g9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSkubGluZTtpZihtWzFdKXtsPXtzdGFydExpbmU6aCxlbmRMaW5lOmgsa2luZDp3ci5SZWdpb259O2kucHVzaChsKX1lbHNle2Zvcih2YXIgZz1pLmxlbmd0aC0xO2c+PTAmJmlbZ10ua2luZCE9PXdyLlJlZ2lvbjspZy0tO2lmKGc+PTApe2w9aVtnXTtpLmxlbmd0aD1nLGg+bC5zdGFydExpbmUmJm8hPT1sLnN0YXJ0TGluZSYmKGwuZW5kTGluZT1oLGMobCksbz1sLnN0YXJ0TGluZSl9fX19cz1hLnNjYW4oKX12YXIgcD10JiZ0LnJhbmdlTGltaXQ7aWYoIm51bWJlciIhPXR5cGVvZiBwfHxuLmxlbmd0aDw9cClyZXR1cm4gbjt0JiZ0Lm9uUmFuZ2VMaW1pdEV4Y2VlZGVkJiZ0Lm9uUmFuZ2VMaW1pdEV4Y2VlZGVkKGUudXJpKTtmb3IodmFyIGI9W10sdj0wLHk9cjt2PHkubGVuZ3RoO3YrKyl7KEE9eVt2XSk8MzAmJihiW0FdPShiW0FdfHwwKSsxKX12YXIgQz0wLHc9MDtmb3IoZz0wO2c8Yi5sZW5ndGg7ZysrKXt2YXIgXz1iW2ddO2lmKF8pe2lmKF8rQz5wKXt3PWc7YnJlYWt9Qys9X319dmFyIFM9W107Zm9yKGc9MDtnPG4ubGVuZ3RoO2crKyl7dmFyIEE7Im51bWJlciI9PXR5cGVvZihBPXJbZ10pJiYoQTx3fHxBPT09dyYmQysrPHApJiZTLnB1c2gobltnXSl9cmV0dXJuIFN9ZnVuY3Rpb24gTWEoZSx0LG4pe2Z1bmN0aW9uIHIodCxuKXtyZXR1cm4gbHIuY3JlYXRlKGUucG9zaXRpb25BdCh0KSxlLnBvc2l0aW9uQXQobikpfXZhciBpPVlyKGUuZ2V0VGV4dCgpLCEwKTtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGkuc2V0UG9zaXRpb24oZSksaS5zY2FuKCk9PT10P2kuZ2V0VG9rZW5PZmZzZXQoKStpLmdldFRva2VuTGVuZ3RoKCk6LTF9cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtmb3IodmFyIGk9ZS5vZmZzZXRBdCh0KSxhPW4uZ2V0Tm9kZUZyb21PZmZzZXQoaSwhMCkscz1bXTthOyl7c3dpdGNoKGEudHlwZSl7Y2FzZSJzdHJpbmciOmNhc2Uib2JqZWN0IjpjYXNlImFycmF5Ijp2YXIgYz1hLm9mZnNldCsxLGw9YS5vZmZzZXQrYS5sZW5ndGgtMTtjPGwmJmk+PWMmJmk8PWwmJnMucHVzaChyKGMsbCkpLHMucHVzaChyKGEub2Zmc2V0LGEub2Zmc2V0K2EubGVuZ3RoKSk7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6Y2FzZSJudWxsIjpjYXNlInByb3BlcnR5IjpzLnB1c2gocihhLm9mZnNldCxhLm9mZnNldCthLmxlbmd0aCkpfWlmKCJwcm9wZXJ0eSI9PT1hLnR5cGV8fGEucGFyZW50JiYiYXJyYXkiPT09YS5wYXJlbnQudHlwZSl7dmFyIHU9byhhLm9mZnNldCthLmxlbmd0aCw1KTstMSE9PXUmJnMucHVzaChyKGEub2Zmc2V0LHUpKX1hPWEucGFyZW50fWZvcih2YXIgaD12b2lkIDAsZj1zLmxlbmd0aC0xO2Y+PTA7Zi0tKWg9cm8uY3JlYXRlKHNbZl0saCk7cmV0dXJuIGh8fChoPXJvLmNyZWF0ZShsci5jcmVhdGUodCx0KSkpLGh9KSl9ZnVuY3Rpb24gUGEoZSx0KXt2YXIgbj1bXTtyZXR1cm4gdC52aXNpdCgoZnVuY3Rpb24ocil7dmFyIGk7aWYoInByb3BlcnR5Ij09PXIudHlwZSYmIiRyZWYiPT09ci5rZXlOb2RlLnZhbHVlJiYic3RyaW5nIj09PShudWxsPT09KGk9ci52YWx1ZU5vZGUpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnR5cGUpKXt2YXIgbz1yLnZhbHVlTm9kZS52YWx1ZSxhPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7aWYoIiMiPT09ZSlyZXR1cm5bXTtpZigiIyIhPT1lWzBdfHwiLyIhPT1lWzFdKXJldHVybiBudWxsO3JldHVybiBlLnN1YnN0cmluZygyKS5zcGxpdCgvXC8vKS5tYXAoRmEpfSh0KTtpZighbilyZXR1cm4gbnVsbDtyZXR1cm4gVmEobixlLnJvb3QpfSh0LG8pO2lmKGEpe3ZhciBzPWUucG9zaXRpb25BdChhLm9mZnNldCk7bi5wdXNoKHt0YXJnZXQ6IiIuY29uY2F0KGUudXJpLCIjIikuY29uY2F0KHMubGluZSsxLCIsIikuY29uY2F0KHMuY2hhcmFjdGVyKzEpLHJhbmdlOlJhKGUsci52YWx1ZU5vZGUpfSl9fXJldHVybiEwfSkpLFByb21pc2UucmVzb2x2ZShuKX1mdW5jdGlvbiBSYShlLHQpe3JldHVybiBsci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KzEpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aC0xKSl9ZnVuY3Rpb24gVmEoZSx0KXtpZighdClyZXR1cm4gbnVsbDtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49ZS5zaGlmdCgpO2lmKHQmJiJvYmplY3QiPT09dC50eXBlKXt2YXIgcj10LnByb3BlcnRpZXMuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5Tm9kZS52YWx1ZT09PW59KSk7cmV0dXJuIHI/VmEoZSxyLnZhbHVlTm9kZSk6bnVsbH1pZih0JiYiYXJyYXkiPT09dC50eXBlJiZuLm1hdGNoKC9eKDB8WzEtOV1bMC05XSopJC8pKXt2YXIgaT1OdW1iZXIucGFyc2VJbnQobiksbz10Lml0ZW1zW2ldO3JldHVybiBvP1ZhKGUsbyk6bnVsbH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBGYShlKXtyZXR1cm4gZS5yZXBsYWNlKC9+MS9nLCIvIikucmVwbGFjZSgvfjAvZywifiIpfWZ1bmN0aW9uIERhKGUpe3ZhciB0PWUucHJvbWlzZUNvbnN0cnVjdG9yfHxQcm9taXNlLG49bmV3IGthKGUuc2NoZW1hUmVxdWVzdFNlcnZpY2UsZS53b3Jrc3BhY2VDb250ZXh0LHQpO24uc2V0U2NoZW1hQ29udHJpYnV0aW9ucyhiYSk7dmFyIHI9bmV3IFpvKG4sZS5jb250cmlidXRpb25zLHQsZS5jbGllbnRDYXBhYmlsaXRpZXMpLGk9bmV3IFlvKG4sZS5jb250cmlidXRpb25zLHQpLG89bmV3IGNhKG4pLGE9bmV3IHRhKG4sdCk7cmV0dXJue2NvbmZpZ3VyZTpmdW5jdGlvbihlKXtuLmNsZWFyRXh0ZXJuYWxTY2hlbWFzKCksZS5zY2hlbWFzJiZlLnNjaGVtYXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bi5yZWdpc3RlckV4dGVybmFsU2NoZW1hKGUudXJpLGUuZmlsZU1hdGNoLGUuc2NoZW1hKX0pKSxhLmNvbmZpZ3VyZShlKX0scmVzZXRTY2hlbWE6ZnVuY3Rpb24oZSl7cmV0dXJuIG4ub25SZXNvdXJjZUNoYW5nZShlKX0sZG9WYWxpZGF0aW9uOmEuZG9WYWxpZGF0aW9uLmJpbmQoYSksZ2V0TGFuZ3VhZ2VTdGF0dXM6YS5nZXRMYW5ndWFnZVN0YXR1cy5iaW5kKGEpLHBhcnNlSlNPTkRvY3VtZW50OmZ1bmN0aW9uKGUpe3JldHVybiBHbyhlLHtjb2xsZWN0Q29tbWVudHM6ITB9KX0sbmV3SlNPTkRvY3VtZW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVtdKSxuZXcgSG8oZSx0LFtdKX0oZSx0KX0sZ2V0TWF0Y2hpbmdTY2hlbWFzOm4uZ2V0TWF0Y2hpbmdTY2hlbWFzLmJpbmQobiksZG9SZXNvbHZlOnIuZG9SZXNvbHZlLmJpbmQociksZG9Db21wbGV0ZTpyLmRvQ29tcGxldGUuYmluZChyKSxmaW5kRG9jdW1lbnRTeW1ib2xzOm8uZmluZERvY3VtZW50U3ltYm9scy5iaW5kKG8pLGZpbmREb2N1bWVudFN5bWJvbHMyOm8uZmluZERvY3VtZW50U3ltYm9sczIuYmluZChvKSxmaW5kRG9jdW1lbnRDb2xvcnM6by5maW5kRG9jdW1lbnRDb2xvcnMuYmluZChvKSxnZXRDb2xvclByZXNlbnRhdGlvbnM6by5nZXRDb2xvclByZXNlbnRhdGlvbnMuYmluZChvKSxkb0hvdmVyOmkuZG9Ib3Zlci5iaW5kKGkpLGdldEZvbGRpbmdSYW5nZXM6SWEsZ2V0U2VsZWN0aW9uUmFuZ2VzOk1hLGZpbmREZWZpbml0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSl9LGZpbmRMaW5rczpQYSxmb3JtYXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXZvaWQgMDtpZih0KXt2YXIgaT1lLm9mZnNldEF0KHQuc3RhcnQpO3I9e29mZnNldDppLGxlbmd0aDplLm9mZnNldEF0KHQuZW5kKS1pfX12YXIgbz17dGFiU2l6ZTpuP24udGFiU2l6ZTo0LGluc2VydFNwYWNlczohMD09PShudWxsPT1uP3ZvaWQgMDpuLmluc2VydFNwYWNlcyksaW5zZXJ0RmluYWxOZXdsaW5lOiEwPT09KG51bGw9PW4/dm9pZCAwOm4uaW5zZXJ0RmluYWxOZXdsaW5lKSxlb2w6IlxuIn07cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUW4oZSx0LG4pfShlLmdldFRleHQoKSxyLG8pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIFZyLnJlcGxhY2UobHIuY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoKSksdC5jb250ZW50KX0pKX19fSJ1bmRlZmluZWQiIT10eXBlb2YgZmV0Y2gmJihfYT1mdW5jdGlvbihlKXtyZXR1cm4gZmV0Y2goZSkudGhlbigoZT0+ZS50ZXh0KCkpKX0pO3ZhciBLYT0iLyIuY2hhckNvZGVBdCgwKSxqYT0iLiIuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBVYShlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpMD09PW4ubGVuZ3RofHwxPT09bi5sZW5ndGgmJm4uY2hhckNvZGVBdCgwKT09PWphfHwoMj09PW4ubGVuZ3RoJiZuLmNoYXJDb2RlQXQoMCk9PT1qYSYmbi5jaGFyQ29kZUF0KDEpPT09amE/dC5wb3AoKTp0LnB1c2gobikpO2UubGVuZ3RoPjEmJjA9PT1lW2UubGVuZ3RoLTFdLmxlbmd0aCYmdC5wdXNoKCIiKTtsZXQgbj10LmpvaW4oIi8iKTtyZXR1cm4gMD09PWVbMF0ubGVuZ3RoJiYobj0iLyIrbiksbn1zZWxmLm9ubWVzc2FnZT0oKT0+e0duKCgoZSx0KT0+bmV3IGNsYXNze19jdHg7X2xhbmd1YWdlU2VydmljZTtfbGFuZ3VhZ2VTZXR0aW5ncztfbGFuZ3VhZ2VJZDtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2N0eD1lLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3M9dC5sYW5ndWFnZVNldHRpbmdzLHRoaXMuX2xhbmd1YWdlSWQ9dC5sYW5ndWFnZUlkLHRoaXMuX2xhbmd1YWdlU2VydmljZT1EYSh7d29ya3NwYWNlQ29udGV4dDp7cmVzb2x2ZVJlbGF0aXZlUGF0aDooZSx0KT0+ZnVuY3Rpb24oZSx0KXtpZihmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQ29kZUF0KDApPT09S2F9KHQpKXtjb25zdCBuPXlhLnBhcnNlKGUpLHI9dC5zcGxpdCgiLyIpO3JldHVybiBuLndpdGgoe3BhdGg6VWEocil9KS50b1N0cmluZygpfXJldHVybiBmdW5jdGlvbihlLC4uLnQpe2NvbnN0IG49eWEucGFyc2UoZSkscj1uLnBhdGguc3BsaXQoIi8iKTtmb3IobGV0IGUgb2YgdClyLnB1c2goLi4uZS5zcGxpdCgiLyIpKTtyZXR1cm4gbi53aXRoKHtwYXRoOlVhKHIpfSkudG9TdHJpbmcoKX0oZSx0KX0odC5zdWJzdHIoMCx0Lmxhc3RJbmRleE9mKCIvIikrMSksZSl9LHNjaGVtYVJlcXVlc3RTZXJ2aWNlOnQuZW5hYmxlU2NoZW1hUmVxdWVzdD9fYTp2b2lkIDB9KSx0aGlzLl9sYW5ndWFnZVNlcnZpY2UuY29uZmlndXJlKHRoaXMuX2xhbmd1YWdlU2V0dGluZ3MpfWFzeW5jIGRvVmFsaWRhdGlvbihlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYodCl7bGV0IGU9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9WYWxpZGF0aW9uKHQsZSx0aGlzLl9sYW5ndWFnZVNldHRpbmdzKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKX1hc3luYyBkb0NvbXBsZXRlKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybiBudWxsO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvQ29tcGxldGUobix0LHIpfWFzeW5jIGRvUmVzb2x2ZShlKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvUmVzb2x2ZShlKX1hc3luYyBkb0hvdmVyKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybiBudWxsO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvSG92ZXIobix0LHIpfWFzeW5jIGZvcm1hdChlLHQsbil7bGV0IHI9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFyKXJldHVybltdO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5mb3JtYXQocix0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9YXN5bmMgcmVzZXRTY2hlbWEoZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9sYW5ndWFnZVNlcnZpY2UucmVzZXRTY2hlbWEoZSkpfWFzeW5jIGZpbmREb2N1bWVudFN5bWJvbHMoZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCF0KXJldHVybltdO2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KSxyPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRTeW1ib2xzKHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBmaW5kRG9jdW1lbnRDb2xvcnMoZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCF0KXJldHVybltdO2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KSxyPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRDb2xvcnModCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGdldENvbG9yUHJlc2VudGF0aW9ucyhlLHQsbil7bGV0IHI9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFyKXJldHVybltdO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChyKSxvPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRDb2xvclByZXNlbnRhdGlvbnMocixpLHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShvKX1hc3luYyBnZXRGb2xkaW5nUmFuZ2VzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRGb2xkaW5nUmFuZ2VzKG4sdCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBnZXRTZWxlY3Rpb25SYW5nZXMoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuW107bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pLGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldFNlbGVjdGlvblJhbmdlcyhuLHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1fZ2V0VGV4dERvY3VtZW50KGUpe2xldCB0PXRoaXMuX2N0eC5nZXRNaXJyb3JNb2RlbHMoKTtmb3IobGV0IG4gb2YgdClpZihuLnVyaS50b1N0cmluZygpPT09ZSlyZXR1cm4gZm8uY3JlYXRlKGUsdGhpcy5fbGFuZ3VhZ2VJZCxuLnZlcnNpb24sbi5nZXRWYWx1ZSgpKTtyZXR1cm4gbnVsbH19KGUsdCkpKX19KCk7Cgo=', null, false);
3
+ var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y29uc3QgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24oZSl7c2V0VGltZW91dCgoKCk9PntpZihlLnN0YWNrKXtpZihvLmlzRXJyb3JOb1RlbGVtZXRyeShlKSl0aHJvdyBuZXcgbyhlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spO3Rocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spfXRocm93IGV9KSwwKX19ZW1pdChlKXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKCh0PT57dChlKX0pKX1vblVuZXhwZWN0ZWRFcnJvcihlKXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSksdGhpcy5lbWl0KGUpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpfX07ZnVuY3Rpb24gdCh0KXsoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGkpcmV0dXJuITA7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09ciYmZS5tZXNzYWdlPT09cn0pKHQpfHxlLm9uVW5leHBlY3RlZEVycm9yKHQpfWZ1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOmUuc3RhY2t0cmFjZXx8ZS5zdGFjayxub1RlbGVtZXRyeTpvLmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3Qgcj0iQ2FuY2VsZWQiO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHIpLHRoaXMubmFtZT10aGlzLm1lc3NhZ2V9fWNsYXNzIG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9IkVycm9yTm9UZWxlbWV0cnkifXN0YXRpYyBmcm9tRXJyb3IoZSl7aWYoZSBpbnN0YW5jZW9mIG8pcmV0dXJuIGU7Y29uc3QgdD1uZXcgbztyZXR1cm4gdC5tZXNzYWdlPWUubWVzc2FnZSx0LnN0YWNrPWUuc3RhY2ssdH1zdGF0aWMgaXNFcnJvck5vVGVsZW1ldHJ5KGUpe3JldHVybiJFcnJvck5vVGVsZW1ldHJ5Ij09PWUubmFtZX19ZnVuY3Rpb24gYShlKXtjb25zdCB0PXRoaXM7bGV0IG4scj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcnx8KHI9ITAsbj1lLmFwcGx5KHQsYXJndW1lbnRzKSksbn19dmFyIHM7IWZ1bmN0aW9uKGUpe2UuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbU3ltYm9sLml0ZXJhdG9yXX07Y29uc3QgdD1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbiBuKHQsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe2NvbnN0IHI9W107aWYoMD09PW4pcmV0dXJuW3IsdF07Y29uc3QgaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IobGV0IHQ9MDt0PG47dCsrKXtjb25zdCB0PWkubmV4dCgpO2lmKHQuZG9uZSlyZXR1cm5bcixlLmVtcHR5KCldO3IucHVzaCh0LnZhbHVlKX1yZXR1cm5bcix7W1N5bWJvbC5pdGVyYXRvcl06KCk9Pml9XX1lLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUuc2luZ2xlPWZ1bmN0aW9uKihlKXt5aWVsZCBlfSxlLmZyb209ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fHR9LGUuaXNFbXB0eT1mdW5jdGlvbihlKXtyZXR1cm4hZXx8ITA9PT1lW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkuZG9uZX0sZS5maXJzdD1mdW5jdGlvbihlKXtyZXR1cm4gZVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLnZhbHVlfSxlLnNvbWU9ZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiBlKWlmKHQobikpcmV0dXJuITA7cmV0dXJuITF9LGUuZmluZD1mdW5jdGlvbihlLHQpe2Zvcihjb25zdCBuIG9mIGUpaWYodChuKSlyZXR1cm4gbn0sZS5maWx0ZXI9ZnVuY3Rpb24qKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSl0KG4pJiYoeWllbGQgbil9LGUubWFwPWZ1bmN0aW9uKihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl5aWVsZCB0KHIsbisrKX0sZS5jb25jYXQ9ZnVuY3Rpb24qKC4uLmUpe2Zvcihjb25zdCB0IG9mIGUpZm9yKGNvbnN0IGUgb2YgdCl5aWVsZCBlfSxlLmNvbmNhdE5lc3RlZD1mdW5jdGlvbiooZSl7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgZSBvZiB0KXlpZWxkIGV9LGUucmVkdWNlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1uO2Zvcihjb25zdCBuIG9mIGUpcj10KHIsbik7cmV0dXJuIHJ9LGUuZm9yRWFjaD1mdW5jdGlvbihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl0KHIsbisrKX0sZS5zbGljZT1mdW5jdGlvbiooZSx0LG49ZS5sZW5ndGgpe2Zvcih0PDAmJih0Kz1lLmxlbmd0aCksbjwwP24rPWUubGVuZ3RoOm4+ZS5sZW5ndGgmJihuPWUubGVuZ3RoKTt0PG47dCsrKXlpZWxkIGVbdF19LGUuY29uc3VtZT1uLGUuY29sbGVjdD1mdW5jdGlvbihlKXtyZXR1cm4gbihlKVswXX0sZS5lcXVhbHM9ZnVuY3Rpb24oZSx0LG49KChlLHQpPT5lPT09dCkpe2NvbnN0IHI9ZVtTeW1ib2wuaXRlcmF0b3JdKCksaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOzspe2NvbnN0IGU9ci5uZXh0KCksdD1pLm5leHQoKTtpZihlLmRvbmUhPT10LmRvbmUpcmV0dXJuITE7aWYoZS5kb25lKXJldHVybiEwO2lmKCFuKGUudmFsdWUsdC52YWx1ZSkpcmV0dXJuITF9fX0oc3x8KHM9e30pKTtjbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUuIEVycm9yczogWyR7ZS5qb2luKCIsICIpfV1gKSx0aGlzLmVycm9ycz1lfX1mdW5jdGlvbiBsKGUpe2lmKHMuaXMoZSkpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSlpZihuKXRyeXtuLmRpc3Bvc2UoKX1jYXRjaChlKXt0LnB1c2goZSl9aWYoMT09PXQubGVuZ3RoKXRocm93IHRbMF07aWYodC5sZW5ndGg+MSl0aHJvdyBuZXcgYyh0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bXTplfWlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gdShlKXtyZXR1cm57ZGlzcG9zZTphKCgoKT0+e2UoKX0pKX19Y2xhc3MgaHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvRGlzcG9zZT1uZXcgU2V0LHRoaXMuX2lzRGlzcG9zZWQ9ITF9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9pc0Rpc3Bvc2VkPSEwLHRoaXMuY2xlYXIoKSl9Z2V0IGlzRGlzcG9zZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZH1jbGVhcigpe3RyeXtsKHRoaXMuX3RvRGlzcG9zZS52YWx1ZXMoKSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKGUpe2lmKCFlKXJldHVybiBlO2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/aC5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkd8fGNvbnNvbGUud2FybihuZXcgRXJyb3IoIlRyeWluZyB0byBhZGQgYSBkaXNwb3NhYmxlIHRvIGEgRGlzcG9zYWJsZVN0b3JlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi4gVGhlIGFkZGVkIG9iamVjdCB3aWxsIGJlIGxlYWtlZCEiKS5zdGFjayk6dGhpcy5fdG9EaXNwb3NlLmFkZChlKSxlfX1oLkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyBme2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RvcmU9bmV3IGgsdGhpcy5fc3RvcmV9ZGlzcG9zZSgpe3RoaXMuX3N0b3JlLmRpc3Bvc2UoKX1fcmVnaXN0ZXIoZSl7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5fc3RvcmUuYWRkKGUpfX1mLk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtjbGFzcyBke2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwb3NlPSgpPT57fSx0aGlzLnVuc2V0PSgpPT57fSx0aGlzLmlzc2V0PSgpPT4hMX1zZXQoZSl7bGV0IHQ9ZTtyZXR1cm4gdGhpcy51bnNldD0oKT0+dD12b2lkIDAsdGhpcy5pc3NldD0oKT0+dm9pZCAwIT09dCx0aGlzLmRpc3Bvc2U9KCk9Pnt0JiYodCgpLHQ9dm9pZCAwKX0sdGhpc319Y2xhc3MgbXtjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm5leHQ9bS5VbmRlZmluZWQsdGhpcy5wcmV2PW0uVW5kZWZpbmVkfX1tLlVuZGVmaW5lZD1uZXcgbSh2b2lkIDApO2NsYXNzIGd7Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1tLlVuZGVmaW5lZCx0aGlzLl9sYXN0PW0uVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1tLlVuZGVmaW5lZH1jbGVhcigpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl7Y29uc3QgdD1lLm5leHQ7ZS5wcmV2PW0uVW5kZWZpbmVkLGUubmV4dD1tLlVuZGVmaW5lZCxlPXR9dGhpcy5fZmlyc3Q9bS5VbmRlZmluZWQsdGhpcy5fbGFzdD1tLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdChlKXtyZXR1cm4gdGhpcy5faW5zZXJ0KGUsITEpfXB1c2goZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCEwKX1faW5zZXJ0KGUsdCl7Y29uc3Qgbj1uZXcgbShlKTtpZih0aGlzLl9maXJzdD09PW0uVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PW4sdGhpcy5fbGFzdD1uO2Vsc2UgaWYodCl7Y29uc3QgZT10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9bixuLnByZXY9ZSxlLm5leHQ9bn1lbHNle2NvbnN0IGU9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9bixuLm5leHQ9ZSxlLnByZXY9bn10aGlzLl9zaXplKz0xO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5fcmVtb3ZlKG4pKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksZX19cG9wKCl7aWYodGhpcy5fbGFzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLGV9fV9yZW1vdmUoZSl7aWYoZS5wcmV2IT09bS5VbmRlZmluZWQmJmUubmV4dCE9PW0uVW5kZWZpbmVkKXtjb25zdCB0PWUucHJldjt0Lm5leHQ9ZS5uZXh0LGUubmV4dC5wcmV2PXR9ZWxzZSBlLnByZXY9PT1tLlVuZGVmaW5lZCYmZS5uZXh0PT09bS5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PW0uVW5kZWZpbmVkLHRoaXMuX2xhc3Q9bS5VbmRlZmluZWQpOmUubmV4dD09PW0uVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9bS5VbmRlZmluZWQpOmUucHJldj09PW0uVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PW0uVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl5aWVsZCBlLmVsZW1lbnQsZT1lLm5leHR9fWxldCBwPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmxvY2F0aW9uJiZkb2N1bWVudC5sb2NhdGlvbi5oYXNoLmluZGV4T2YoInBzZXVkbz10cnVlIik+PTA7dmFyIGI7Y29uc3Qgdj0iZW4iO2xldCB5LEMsdyxfPSExLFM9ITEsQT0hMSxFPSExLHg9djtjb25zdCBOPSJvYmplY3QiPT10eXBlb2Ygc2VsZj9zZWxmOiJvYmplY3QiPT10eXBlb2YgZ2xvYmFsP2dsb2JhbDp7fTtsZXQgazt2b2lkIDAhPT1OLnZzY29kZSYmdm9pZCAwIT09Ti52c2NvZGUucHJvY2Vzcz9rPU4udnNjb2RlLnByb2Nlc3M6InVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzJiYoaz1wcm9jZXNzKTtjb25zdCBMPSJzdHJpbmciPT10eXBlb2YobnVsbD09PShiPW51bGw9PWs/dm9pZCAwOmsudmVyc2lvbnMpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLmVsZWN0cm9uKSYmInJlbmRlcmVyIj09PShudWxsPT1rP3ZvaWQgMDprLnR5cGUpO2lmKCJvYmplY3QiIT10eXBlb2YgbmF2aWdhdG9yfHxMKWlmKCJvYmplY3QiPT10eXBlb2Ygayl7Xz0id2luMzIiPT09ay5wbGF0Zm9ybSxTPSJkYXJ3aW4iPT09ay5wbGF0Zm9ybSxBPSJsaW51eCI9PT1rLnBsYXRmb3JtLEEmJmsuZW52LlNOQVAmJmsuZW52LlNOQVBfUkVWSVNJT04say5lbnYuQ0l8fGsuZW52LkJVSUxEX0FSVElGQUNUU1RBR0lOR0RJUkVDVE9SWSx5PXYseD12O2NvbnN0IGU9ay5lbnYuVlNDT0RFX05MU19DT05GSUc7aWYoZSl0cnl7Y29uc3QgdD1KU09OLnBhcnNlKGUpLG49dC5hdmFpbGFibGVMYW5ndWFnZXNbIioiXTt5PXQubG9jYWxlLHg9bnx8dixDPXQuX3RyYW5zbGF0aW9uc0NvbmZpZ0ZpbGV9Y2F0Y2goZSl7fX1lbHNlIGNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2Vsc2Ugdz1uYXZpZ2F0b3IudXNlckFnZW50LF89dy5pbmRleE9mKCJXaW5kb3dzIik+PTAsUz13LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wLCh3LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wfHx3LmluZGV4T2YoImlQYWQiKT49MHx8dy5pbmRleE9mKCJpUGhvbmUiKT49MCkmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzLEE9dy5pbmRleE9mKCJMaW51eCIpPj0wLEU9ITAsZnVuY3Rpb24oZSx0LC4uLm4peyFmdW5jdGlvbihlLHQpe2xldCBuO249MD09PXQubGVuZ3RoP2U6ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoKGUsbik9Pntjb25zdCByPW5bMF0saT10W3JdO2xldCBvPWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBpP289aToibnVtYmVyIiE9dHlwZW9mIGkmJiJib29sZWFuIiE9dHlwZW9mIGkmJm51bGwhPWl8fChvPVN0cmluZyhpKSksb30pKSxwJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKX0odCxuKX0oMCwiXyIpLHk9dix4PXk7Y29uc3QgVD1fLE89UztFJiZOLmltcG9ydFNjcmlwdHM7Y29uc3QgST13LE09ImZ1bmN0aW9uIj09dHlwZW9mIE4ucG9zdE1lc3NhZ2UmJiFOLmltcG9ydFNjcmlwdHM7KCgpPT57aWYoTSl7Y29uc3QgZT1bXTtOLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh0PT57aWYodC5kYXRhJiZ0LmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspZm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXtjb25zdCByPWVbbl07aWYoci5pZD09PXQuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylyZXR1cm4gZS5zcGxpY2UobiwxKSx2b2lkIHIuY2FsbGJhY2soKX19KSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IHI9Kyt0O2UucHVzaCh7aWQ6cixjYWxsYmFjazpufSksTi5wb3N0TWVzc2FnZSh7dnNjb2RlU2NoZWR1bGVBc3luY1dvcms6cn0sIioiKX19fSkoKTtjb25zdCBQPSEhKEkmJkkuaW5kZXhPZigiQ2hyb21lIik+PTApO0kmJkkuaW5kZXhPZigiRmlyZWZveCIpLCFQJiZJJiZJLmluZGV4T2YoIlNhZmFyaSIpLEkmJkkuaW5kZXhPZigiRWRnLyIpLEkmJkkuaW5kZXhPZigiQW5kcm9pZCIpO2NvbnN0IFI9Ti5wZXJmb3JtYW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIE4ucGVyZm9ybWFuY2Uubm93O2NsYXNzIFZ7Y29uc3RydWN0b3IoZSl7dGhpcy5faGlnaFJlc29sdXRpb249UiYmZSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RhdGljIGNyZWF0ZShlPSEwKXtyZXR1cm4gbmV3IFYoZSl9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfWVsYXBzZWQoKXtyZXR1cm4tMSE9PXRoaXMuX3N0b3BUaW1lP3RoaXMuX3N0b3BUaW1lLXRoaXMuX3N0YXJ0VGltZTp0aGlzLl9ub3coKS10aGlzLl9zdGFydFRpbWV9X25vdygpe3JldHVybiB0aGlzLl9oaWdoUmVzb2x1dGlvbj9OLnBlcmZvcm1hbmNlLm5vdygpOkRhdGUubm93KCl9fXZhciBGLEQ7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQsbj1udWxsLHIpPT57bGV0IGksbz0hMTtyZXR1cm4gaT1lKChlPT57aWYoIW8pcmV0dXJuIGk/aS5kaXNwb3NlKCk6bz0hMCx0LmNhbGwobixlKX0pLG51bGwsciksbyYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+bi5jYWxsKHIsdChlKSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBhKCgobixyPW51bGwsaSk9PmUoKGU9Pnt0KGUpLG4uY2FsbChyLGUpfSksbnVsbCxpKSksbil9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+dChlKSYmbi5jYWxsKHIsZSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIG8oZSx0LHIsaSl7bGV0IG89cjtyZXR1cm4gbihlLChlPT4obz10KG8sZSksbykpLGkpfWZ1bmN0aW9uIGEoZSx0KXtsZXQgbjtjb25zdCByPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtuPWUoci5maXJlLHIpfSxvbkxhc3RMaXN0ZW5lclJlbW92ZSgpe251bGw9PW58fG4uZGlzcG9zZSgpfX0pO3JldHVybiBudWxsPT10fHx0LmFkZChyKSxyLmV2ZW50fWZ1bmN0aW9uIHMoZSx0LG49MTAwLHI9ITEsaSxvKXtsZXQgYSxzLGMsbD0wO2NvbnN0IHU9bmV3IEIoe2xlYWtXYXJuaW5nVGhyZXNob2xkOmksb25GaXJzdExpc3RlbmVyQWRkKCl7YT1lKChlPT57bCsrLHM9dChzLGUpLHImJiFjJiYodS5maXJlKHMpLHM9dm9pZCAwKSxjbGVhclRpbWVvdXQoYyksYz1zZXRUaW1lb3V0KCgoKT0+e2NvbnN0IGU9cztzPXZvaWQgMCxjPXZvaWQgMCwoIXJ8fGw+MSkmJnUuZmlyZShlKSxsPTB9KSxuKX0pKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXthLmRpc3Bvc2UoKX19KTtyZXR1cm4gbnVsbD09b3x8by5hZGQodSksdS5ldmVudH1mdW5jdGlvbiBjKGUsdD0oKGUsdCk9PmU9PT10KSxuKXtsZXQgcixvPSEwO3JldHVybiBpKGUsKGU9Pntjb25zdCBuPW98fCF0KGUscik7cmV0dXJuIG89ITEscj1lLG59KSxuKX1lLk5vbmU9KCk9PmYuTm9uZSxlLm9uY2U9dCxlLm1hcD1uLGUuZm9yRWFjaD1yLGUuZmlsdGVyPWksZS5zaWduYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuYW55PWZ1bmN0aW9uKC4uLmUpe3JldHVybih0LG49bnVsbCxyKT0+ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIHUoKCgpPT5sKGUpKSl9KC4uLmUubWFwKChlPT5lKChlPT50LmNhbGwobixlKSksbnVsbCxyKSkpKX0sZS5yZWR1Y2U9byxlLmRlYm91bmNlPXMsZS5sYXRjaD1jLGUuc3BsaXQ9ZnVuY3Rpb24odCxuLHIpe3JldHVybltlLmZpbHRlcih0LG4sciksZS5maWx0ZXIodCwoZT0+IW4oZSkpLHIpXX0sZS5idWZmZXI9ZnVuY3Rpb24oZSx0PSExLG49W10pe2xldCByPW4uc2xpY2UoKSxpPWUoKGU9PntyP3IucHVzaChlKTphLmZpcmUoZSl9KSk7Y29uc3Qgbz0oKT0+e251bGw9PXJ8fHIuZm9yRWFjaCgoZT0+YS5maXJlKGUpKSkscj1udWxsfSxhPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtpfHwoaT1lKChlPT5hLmZpcmUoZSkpKSl9LG9uRmlyc3RMaXN0ZW5lckRpZEFkZCgpe3ImJih0P3NldFRpbWVvdXQobyk6bygpKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXtpJiZpLmRpc3Bvc2UoKSxpPW51bGx9fSk7cmV0dXJuIGEuZXZlbnR9O2NsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5ldmVudD1lLHRoaXMuZGlzcG9zYWJsZXM9bmV3IGh9bWFwKGUpe3JldHVybiBuZXcgZChuKHRoaXMuZXZlbnQsZSx0aGlzLmRpc3Bvc2FibGVzKSl9Zm9yRWFjaChlKXtyZXR1cm4gbmV3IGQocih0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfWZpbHRlcihlKXtyZXR1cm4gbmV3IGQoaSh0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfXJlZHVjZShlLHQpe3JldHVybiBuZXcgZChvKHRoaXMuZXZlbnQsZSx0LHRoaXMuZGlzcG9zYWJsZXMpKX1sYXRjaCgpe3JldHVybiBuZXcgZChjKHRoaXMuZXZlbnQsdm9pZCAwLHRoaXMuZGlzcG9zYWJsZXMpKX1kZWJvdW5jZShlLHQ9MTAwLG49ITEscil7cmV0dXJuIG5ldyBkKHModGhpcy5ldmVudCxlLHQsbixyLHRoaXMuZGlzcG9zYWJsZXMpKX1vbihlLHQsbil7cmV0dXJuIHRoaXMuZXZlbnQoZSx0LG4pfW9uY2UoZSxuLHIpe3JldHVybiB0KHRoaXMuZXZlbnQpKGUsbixyKX1kaXNwb3NlKCl7dGhpcy5kaXNwb3NhYmxlcy5kaXNwb3NlKCl9fWUuY2hhaW49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkKGUpfSxlLmZyb21Ob2RlRXZlbnRFbWl0dGVyPWZ1bmN0aW9uKGUsdCxuPShlPT5lKSl7Y29uc3Qgcj0oLi4uZSk9PmkuZmlyZShuKC4uLmUpKSxpPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQ6KCk9PmUub24odCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVMaXN0ZW5lcih0LHIpfSk7cmV0dXJuIGkuZXZlbnR9LGUuZnJvbURPTUV2ZW50RW1pdHRlcj1mdW5jdGlvbihlLHQsbj0oZT0+ZSkpe2NvbnN0IHI9KC4uLmUpPT5pLmZpcmUobiguLi5lKSksaT1uZXcgQih7b25GaXJzdExpc3RlbmVyQWRkOigpPT5lLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQscil9KTtyZXR1cm4gaS5ldmVudH0sZS50b1Byb21pc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChuPT50KGUpKG4pKSl9LGUucnVuQW5kU3Vic2NyaWJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQodm9pZCAwKSxlKChlPT50KGUpKSl9LGUucnVuQW5kU3Vic2NyaWJlV2l0aFN0b3JlPWZ1bmN0aW9uKGUsdCl7bGV0IG49bnVsbDtmdW5jdGlvbiByKGUpe251bGw9PW58fG4uZGlzcG9zZSgpLG49bmV3IGgsdChlLG4pfXIodm9pZCAwKTtjb25zdCBpPWUoKGU9PnIoZSkpKTtyZXR1cm4gdSgoKCk9PntpLmRpc3Bvc2UoKSxudWxsPT1ufHxuLmRpc3Bvc2UoKX0pKX07Y2xhc3MgbXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMub2JzPWUsdGhpcy5fY291bnRlcj0wLHRoaXMuX2hhc0NoYW5nZWQ9ITE7Y29uc3Qgbj17b25GaXJzdExpc3RlbmVyQWRkOigpPT57ZS5hZGRPYnNlcnZlcih0aGlzKX0sb25MYXN0TGlzdGVuZXJSZW1vdmU6KCk9PntlLnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyBCKG4pLHQmJnQuYWRkKHRoaXMuZW1pdHRlcil9YmVnaW5VcGRhdGUoZSl7dGhpcy5fY291bnRlcisrfWhhbmRsZUNoYW5nZShlLHQpe3RoaXMuX2hhc0NoYW5nZWQ9ITB9ZW5kVXBkYXRlKGUpezA9PS0tdGhpcy5fY291bnRlciYmdGhpcy5faGFzQ2hhbmdlZCYmKHRoaXMuX2hhc0NoYW5nZWQ9ITEsdGhpcy5lbWl0dGVyLmZpcmUodGhpcy5vYnMuZ2V0KCkpKX19ZS5mcm9tT2JzZXJ2YWJsZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbShlLHQpLmVtaXR0ZXIuZXZlbnR9fShGfHwoRj17fSkpO2NsYXNzIEt7Y29uc3RydWN0b3IoZSl7dGhpcy5fbGlzdGVuZXJDb3VudD0wLHRoaXMuX2ludm9jYXRpb25Db3VudD0wLHRoaXMuX2VsYXBzZWRPdmVyYWxsPTAsdGhpcy5fbmFtZT1gJHtlfV8ke0suX2lkUG9vbCsrfWB9c3RhcnQoZSl7dGhpcy5fc3RvcFdhdGNoPW5ldyBWKCEwKSx0aGlzLl9saXN0ZW5lckNvdW50PWV9c3RvcCgpe2lmKHRoaXMuX3N0b3BXYXRjaCl7Y29uc3QgZT10aGlzLl9zdG9wV2F0Y2guZWxhcHNlZCgpO3RoaXMuX2VsYXBzZWRPdmVyYWxsKz1lLHRoaXMuX2ludm9jYXRpb25Db3VudCs9MSxjb25zb2xlLmluZm8oYGRpZCBGSVJFICR7dGhpcy5fbmFtZX06IGVsYXBzZWRfbXM6ICR7ZS50b0ZpeGVkKDUpfSwgbGlzdGVuZXI6ICR7dGhpcy5fbGlzdGVuZXJDb3VudH0gKGVsYXBzZWRfb3ZlcmFsbDogJHt0aGlzLl9lbGFwc2VkT3ZlcmFsbC50b0ZpeGVkKDIpfSwgaW52b2NhdGlvbnM6ICR7dGhpcy5faW52b2NhdGlvbkNvdW50fSlgKSx0aGlzLl9zdG9wV2F0Y2g9dm9pZCAwfX19Sy5faWRQb29sPTA7Y2xhc3Mgantjb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlPWV9c3RhdGljIGNyZWF0ZSgpe3ZhciBlO3JldHVybiBuZXcgaihudWxsIT09KGU9KG5ldyBFcnJvcikuc3RhY2spJiZ2b2lkIDAhPT1lP2U6IiIpfXByaW50KCl7Y29uc29sZS53YXJuKHRoaXMudmFsdWUuc3BsaXQoIlxuIikuc2xpY2UoMikuam9pbigiXG4iKSl9fWNsYXNzIFV7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuY2FsbGJhY2s9ZSx0aGlzLmNhbGxiYWNrVGhpcz10LHRoaXMuc3RhY2s9bix0aGlzLnN1YnNjcmlwdGlvbj1uZXcgZH1pbnZva2UoZSl7dGhpcy5jYWxsYmFjay5jYWxsKHRoaXMuY2FsbGJhY2tUaGlzLGUpfX1jbGFzcyBCe2NvbnN0cnVjdG9yKGUpe3ZhciB0LG47dGhpcy5fZGlzcG9zZWQ9ITEsdGhpcy5fb3B0aW9ucz1lLHRoaXMuX2xlYWthZ2VNb249dm9pZCAwLHRoaXMuX3BlcmZNb249KG51bGw9PT0odD10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09dD92b2lkIDA6dC5fcHJvZk5hbWUpP25ldyBLKHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT1udWxsPT09KG49dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dmFyIGUsdCxuLHI7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCx0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVycy5jbGVhcigpLG51bGw9PT0oZT10aGlzLl9kZWxpdmVyeVF1ZXVlKXx8dm9pZCAwPT09ZXx8ZS5jbGVhcih0aGlzKSxudWxsPT09KG49bnVsbD09PSh0PXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm9uTGFzdExpc3RlbmVyUmVtb3ZlKXx8dm9pZCAwPT09bnx8bi5jYWxsKHQpLG51bGw9PT0ocj10aGlzLl9sZWFrYWdlTW9uKXx8dm9pZCAwPT09cnx8ci5kaXNwb3NlKCkpfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PShlLHQsbik9Pnt2YXIgcixpLG87dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBnKTtjb25zdCBhPXRoaXMuX2xpc3RlbmVycy5pc0VtcHR5KCk7bGV0IHMsYzthJiYobnVsbD09PShyPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm9uRmlyc3RMaXN0ZW5lckFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkKHRoaXMpLHRoaXMuX2xlYWthZ2VNb24mJnRoaXMuX2xpc3RlbmVycy5zaXplPj0zMCYmKGM9ai5jcmVhdGUoKSxzPXRoaXMuX2xlYWthZ2VNb24uY2hlY2soYyx0aGlzLl9saXN0ZW5lcnMuc2l6ZSsxKSk7Y29uc3QgbD1uZXcgVShlLHQsYyksdT10aGlzLl9saXN0ZW5lcnMucHVzaChsKTthJiYobnVsbD09PShpPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLm9uRmlyc3RMaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyRGlkQWRkKHRoaXMpLChudWxsPT09KG89dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ub25MaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25MaXN0ZW5lckRpZEFkZCh0aGlzLGUsdCk7Y29uc3QgZj1sLnN1YnNjcmlwdGlvbi5zZXQoKCgpPT57aWYobnVsbD09c3x8cygpLCF0aGlzLl9kaXNwb3NlZCYmKHUoKSx0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlKSl7dGhpcy5fbGlzdGVuZXJzJiYhdGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKXx8dGhpcy5fb3B0aW9ucy5vbkxhc3RMaXN0ZW5lclJlbW92ZSh0aGlzKX19KSk7cmV0dXJuIG4gaW5zdGFuY2VvZiBoP24uYWRkKGYpOkFycmF5LmlzQXJyYXkobikmJm4ucHVzaChmKSxmfSksdGhpcy5fZXZlbnR9ZmlyZShlKXt2YXIgdCxuO2lmKHRoaXMuX2xpc3RlbmVycyl7dGhpcy5fZGVsaXZlcnlRdWV1ZXx8KHRoaXMuX2RlbGl2ZXJ5UXVldWU9bmV3ICQpO2Zvcihjb25zdCB0IG9mIHRoaXMuX2xpc3RlbmVycyl0aGlzLl9kZWxpdmVyeVF1ZXVlLnB1c2godGhpcyx0LGUpO251bGw9PT0odD10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09dHx8dC5zdGFydCh0aGlzLl9kZWxpdmVyeVF1ZXVlLnNpemUpLHRoaXMuX2RlbGl2ZXJ5UXVldWUuZGVsaXZlcigpLG51bGw9PT0obj10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09bnx8bi5zdG9wKCl9fX1jbGFzcyBxe2NvbnN0cnVjdG9yKCl7dGhpcy5fcXVldWU9bmV3IGd9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fcXVldWUuc2l6ZX1wdXNoKGUsdCxuKXt0aGlzLl9xdWV1ZS5wdXNoKG5ldyBXKGUsdCxuKSl9Y2xlYXIoZSl7Y29uc3QgdD1uZXcgZztmb3IoY29uc3QgbiBvZiB0aGlzLl9xdWV1ZSluLmVtaXR0ZXIhPT1lJiZ0LnB1c2gobik7dGhpcy5fcXVldWU9dH1kZWxpdmVyKCl7Zm9yKDt0aGlzLl9xdWV1ZS5zaXplPjA7KXtjb25zdCBlPXRoaXMuX3F1ZXVlLnNoaWZ0KCk7dHJ5e2UubGlzdGVuZXIuaW52b2tlKGUuZXZlbnQpfWNhdGNoKGUpe3QoZSl9fX19Y2xhc3MgJCBleHRlbmRzIHF7Y2xlYXIoZSl7dGhpcy5fcXVldWUuY2xlYXIoKX19Y2xhc3MgV3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbWl0dGVyPWUsdGhpcy5saXN0ZW5lcj10LHRoaXMuZXZlbnQ9bn19ZnVuY3Rpb24gSChlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGZ1bmN0aW9uKGUpe2xldCB0PVtdLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO2Zvcig7T2JqZWN0LnByb3RvdHlwZSE9PW47KXQ9dC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikpLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiB0fShlKSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIHooZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1jbGFzcyBHe2NvbnN0cnVjdG9yKGUpe3RoaXMuZXhlY3V0b3I9ZSx0aGlzLl9kaWRSdW49ITF9aGFzVmFsdWUoKXtyZXR1cm4gdGhpcy5fZGlkUnVufWdldFZhbHVlKCl7aWYoIXRoaXMuX2RpZFJ1bil0cnl7dGhpcy5fdmFsdWU9dGhpcy5leGVjdXRvcigpfWNhdGNoKGUpe3RoaXMuX2Vycm9yPWV9ZmluYWxseXt0aGlzLl9kaWRSdW49ITB9aWYodGhpcy5fZXJyb3IpdGhyb3cgdGhpcy5fZXJyb3I7cmV0dXJuIHRoaXMuX3ZhbHVlfWdldCByYXdWYWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX19ZnVuY3Rpb24gSihlKXtyZXR1cm4gZT49NjUmJmU8PTkwfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBaKGUsdCxuKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTtpZihYKHIpJiZuKzE8dCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobisxKTtpZihmdW5jdGlvbihlKXtyZXR1cm4gNTYzMjA8PWUmJmU8PTU3MzQzfSh0KSlyZXR1cm4gdC01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fXJldHVybiByfWNvbnN0IFk9L15bXHRcblxyXHgyMC1ceDdFXSokLztjbGFzcyBRe2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9ZX1zdGF0aWMgZ2V0SW5zdGFuY2UoZSl7cmV0dXJuIFEuY2FjaGUuZ2V0KEFycmF5LmZyb20oZSkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIFEuX2xvY2FsZXMuZ2V0VmFsdWUoKX1pc0FtYmlndW91cyhlKXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXMoZSl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUoZSl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KGUpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX1EPVEsUS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhPW5ldyBHKCgoKT0+SlNPTi5wYXJzZSgneyJfY29tbW9uIjpbODIzMiwzMiw4MjMzLDMyLDU3NjAsMzIsODE5MiwzMiw4MTkzLDMyLDgxOTQsMzIsODE5NSwzMiw4MTk2LDMyLDgxOTcsMzIsODE5OCwzMiw4MjAwLDMyLDgyMDEsMzIsODIwMiwzMiw4Mjg3LDMyLDgxOTksMzIsODIzOSwzMiwyMDQyLDk1LDY1MTAxLDk1LDY1MTAyLDk1LDY1MTAzLDk1LDgyMDgsNDUsODIwOSw0NSw4MjEwLDQ1LDY1MTEyLDQ1LDE3NDgsNDUsODI1OSw0NSw3MjcsNDUsODcyMiw0NSwxMDEzNCw0NSwxMTQ1MCw0NSwxNTQ5LDQ0LDE2NDMsNDQsODIxOCw0NCwxODQsNDQsNDIyMzMsNDQsODk0LDU5LDIzMDcsNTgsMjY5MSw1OCwxNDE3LDU4LDE3OTUsNTgsMTc5Niw1OCw1ODY4LDU4LDY1MDcyLDU4LDYxNDcsNTgsNjE1Myw1OCw4MjgyLDU4LDE0NzUsNTgsNzYwLDU4LDQyODg5LDU4LDg3NTgsNTgsNzIwLDU4LDQyMjM3LDU4LDQ1MSwzMywxMTYwMSwzMyw2NjAsNjMsNTc3LDYzLDI0MjksNjMsNTAzOCw2Myw0MjczMSw2MywxMTkxNDksNDYsODIyOCw0NiwxNzkzLDQ2LDE3OTQsNDYsNDI1MTAsNDYsNjgxNzYsNDYsMTYzMiw0NiwxNzc2LDQ2LDQyMjMyLDQ2LDEzNzMsOTYsNjUyODcsOTYsODIxOSw5Niw4MjQyLDk2LDEzNzAsOTYsMTUyMyw5Niw4MTc1LDk2LDY1MzQ0LDk2LDkwMCw5Niw4MTg5LDk2LDgxMjUsOTYsODEyNyw5Niw4MTkwLDk2LDY5Nyw5Niw4ODQsOTYsNzEyLDk2LDcxNCw5Niw3MTUsOTYsNzU2LDk2LDY5OSw5Niw3MDEsOTYsNzAwLDk2LDcwMiw5Niw0Mjg5Miw5NiwxNDk3LDk2LDIwMzYsOTYsMjAzNyw5Niw1MTk0LDk2LDU4MzYsOTYsOTQwMzMsOTYsOTQwMzQsOTYsNjUzMzksOTEsMTAwODgsNDAsMTAwOTgsNDAsMTIzMDgsNDAsNjQ4MzAsNDAsNjUzNDEsOTMsMTAwODksNDEsMTAwOTksNDEsMTIzMDksNDEsNjQ4MzEsNDEsMTAxMDAsMTIzLDExOTA2MCwxMjMsMTAxMDEsMTI1LDY1MzQyLDk0LDgyNzAsNDIsMTY0NSw0Miw4NzI3LDQyLDY2MzM1LDQyLDU5NDEsNDcsODI1Nyw0Nyw4NzI1LDQ3LDgyNjAsNDcsOTU4NSw0NywxMDE4Nyw0NywxMDc0NCw0NywxMTkzNTQsNDcsMTI3NTUsNDcsMTIzMzksNDcsMTE0NjIsNDcsMjAwMzEsNDcsMTIwMzUsNDcsNjUzNDAsOTIsNjUxMjgsOTIsODcyNiw5MiwxMDE4OSw5MiwxMDc0MSw5MiwxMDc0NSw5MiwxMTkzMTEsOTIsMTE5MzU1LDkyLDEyNzU2LDkyLDIwMDIyLDkyLDEyMDM0LDkyLDQyODcyLDM4LDcwOCw5NCw3MTAsOTQsNTg2OSw0MywxMDEzMyw0Myw2NjIwMyw0Myw4MjQ5LDYwLDEwMDk0LDYwLDcwNiw2MCwxMTkzNTAsNjAsNTE3Niw2MCw1ODEwLDYwLDUxMjAsNjEsMTE4NDAsNjEsMTI0NDgsNjEsNDIyMzksNjEsODI1MCw2MiwxMDA5NSw2Miw3MDcsNjIsMTE5MzUxLDYyLDUxNzEsNjIsOTQwMTUsNjIsODI3NSwxMjYsNzMyLDEyNiw4MTI4LDEyNiw4NzY0LDEyNiw2NTM3MiwxMjQsNjUyOTMsNDUsMTIwNzg0LDUwLDEyMDc5NCw1MCwxMjA4MDQsNTAsMTIwODE0LDUwLDEyMDgyNCw1MCwxMzAwMzQsNTAsNDI4NDIsNTAsNDIzLDUwLDEwMDAsNTAsNDI1NjQsNTAsNTMxMSw1MCw0MjczNSw1MCwxMTkzMDIsNTEsMTIwNzg1LDUxLDEyMDc5NSw1MSwxMjA4MDUsNTEsMTIwODE1LDUxLDEyMDgyNSw1MSwxMzAwMzUsNTEsNDI5MjMsNTEsNTQwLDUxLDQzOSw1MSw0Mjg1OCw1MSwxMTQ2OCw1MSwxMjQ4LDUxLDk0MDExLDUxLDcxODgyLDUxLDEyMDc4Niw1MiwxMjA3OTYsNTIsMTIwODA2LDUyLDEyMDgxNiw1MiwxMjA4MjYsNTIsMTMwMDM2LDUyLDUwNzAsNTIsNzE4NTUsNTIsMTIwNzg3LDUzLDEyMDc5Nyw1MywxMjA4MDcsNTMsMTIwODE3LDUzLDEyMDgyNyw1MywxMzAwMzcsNTMsNDQ0LDUzLDcxODY3LDUzLDEyMDc4OCw1NCwxMjA3OTgsNTQsMTIwODA4LDU0LDEyMDgxOCw1NCwxMjA4MjgsNTQsMTMwMDM4LDU0LDExNDc0LDU0LDUxMDIsNTQsNzE4OTMsNTQsMTE5MzE0LDU1LDEyMDc4OSw1NSwxMjA3OTksNTUsMTIwODA5LDU1LDEyMDgxOSw1NSwxMjA4MjksNTUsMTMwMDM5LDU1LDY2NzcwLDU1LDcxODc4LDU1LDI4MTksNTYsMjUzOCw1NiwyNjY2LDU2LDEyNTEzMSw1NiwxMjA3OTAsNTYsMTIwODAwLDU2LDEyMDgxMCw1NiwxMjA4MjAsNTYsMTIwODMwLDU2LDEzMDA0MCw1Niw1NDcsNTYsNTQ2LDU2LDY2MzMwLDU2LDI2NjMsNTcsMjkyMCw1NywyNTQxLDU3LDM0MzcsNTcsMTIwNzkxLDU3LDEyMDgwMSw1NywxMjA4MTEsNTcsMTIwODIxLDU3LDEyMDgzMSw1NywxMzAwNDEsNTcsNDI4NjIsNTcsMTE0NjYsNTcsNzE4ODQsNTcsNzE4NTIsNTcsNzE4OTQsNTcsOTA4Miw5Nyw2NTM0NSw5NywxMTk4MzQsOTcsMTE5ODg2LDk3LDExOTkzOCw5NywxMTk5OTAsOTcsMTIwMDQyLDk3LDEyMDA5NCw5NywxMjAxNDYsOTcsMTIwMTk4LDk3LDEyMDI1MCw5NywxMjAzMDIsOTcsMTIwMzU0LDk3LDEyMDQwNiw5NywxMjA0NTgsOTcsNTkzLDk3LDk0NSw5NywxMjA1MTQsOTcsMTIwNTcyLDk3LDEyMDYzMCw5NywxMjA2ODgsOTcsMTIwNzQ2LDk3LDY1MzEzLDY1LDExOTgwOCw2NSwxMTk4NjAsNjUsMTE5OTEyLDY1LDExOTk2NCw2NSwxMjAwMTYsNjUsMTIwMDY4LDY1LDEyMDEyMCw2NSwxMjAxNzIsNjUsMTIwMjI0LDY1LDEyMDI3Niw2NSwxMjAzMjgsNjUsMTIwMzgwLDY1LDEyMDQzMiw2NSw5MTMsNjUsMTIwNDg4LDY1LDEyMDU0Niw2NSwxMjA2MDQsNjUsMTIwNjYyLDY1LDEyMDcyMCw2NSw1MDM0LDY1LDU1NzMsNjUsNDIyMjIsNjUsOTQwMTYsNjUsNjYyMDgsNjUsMTE5ODM1LDk4LDExOTg4Nyw5OCwxMTk5MzksOTgsMTE5OTkxLDk4LDEyMDA0Myw5OCwxMjAwOTUsOTgsMTIwMTQ3LDk4LDEyMDE5OSw5OCwxMjAyNTEsOTgsMTIwMzAzLDk4LDEyMDM1NSw5OCwxMjA0MDcsOTgsMTIwNDU5LDk4LDM4OCw5OCw1MDcxLDk4LDUyMzQsOTgsNTU1MSw5OCw2NTMxNCw2Niw4NDkyLDY2LDExOTgwOSw2NiwxMTk4NjEsNjYsMTE5OTEzLDY2LDEyMDAxNyw2NiwxMjAwNjksNjYsMTIwMTIxLDY2LDEyMDE3Myw2NiwxMjAyMjUsNjYsMTIwMjc3LDY2LDEyMDMyOSw2NiwxMjAzODEsNjYsMTIwNDMzLDY2LDQyOTMyLDY2LDkxNCw2NiwxMjA0ODksNjYsMTIwNTQ3LDY2LDEyMDYwNSw2NiwxMjA2NjMsNjYsMTIwNzIxLDY2LDUxMDgsNjYsNTYyMyw2Niw0MjE5Miw2Niw2NjE3OCw2Niw2NjIwOSw2Niw2NjMwNSw2Niw2NTM0Nyw5OSw4NTczLDk5LDExOTgzNiw5OSwxMTk4ODgsOTksMTE5OTQwLDk5LDExOTk5Miw5OSwxMjAwNDQsOTksMTIwMDk2LDk5LDEyMDE0OCw5OSwxMjAyMDAsOTksMTIwMjUyLDk5LDEyMDMwNCw5OSwxMjAzNTYsOTksMTIwNDA4LDk5LDEyMDQ2MCw5OSw3NDI4LDk5LDEwMTAsOTksMTE0MjksOTksNDM5NTEsOTksNjY2MjEsOTksMTI4ODQ0LDY3LDcxOTIyLDY3LDcxOTEzLDY3LDY1MzE1LDY3LDg1NTcsNjcsODQ1MCw2Nyw4NDkzLDY3LDExOTgxMCw2NywxMTk4NjIsNjcsMTE5OTE0LDY3LDExOTk2Niw2NywxMjAwMTgsNjcsMTIwMTc0LDY3LDEyMDIyNiw2NywxMjAyNzgsNjcsMTIwMzMwLDY3LDEyMDM4Miw2NywxMjA0MzQsNjcsMTAxNyw2NywxMTQyOCw2Nyw1MDg3LDY3LDQyMjAyLDY3LDY2MjEwLDY3LDY2MzA2LDY3LDY2NTgxLDY3LDY2ODQ0LDY3LDg1NzQsMTAwLDg1MTgsMTAwLDExOTgzNywxMDAsMTE5ODg5LDEwMCwxMTk5NDEsMTAwLDExOTk5MywxMDAsMTIwMDQ1LDEwMCwxMjAwOTcsMTAwLDEyMDE0OSwxMDAsMTIwMjAxLDEwMCwxMjAyNTMsMTAwLDEyMDMwNSwxMDAsMTIwMzU3LDEwMCwxMjA0MDksMTAwLDEyMDQ2MSwxMDAsMTI4MSwxMDAsNTA5NSwxMDAsNTIzMSwxMDAsNDIxOTQsMTAwLDg1NTgsNjgsODUxNyw2OCwxMTk4MTEsNjgsMTE5ODYzLDY4LDExOTkxNSw2OCwxMTk5NjcsNjgsMTIwMDE5LDY4LDEyMDA3MSw2OCwxMjAxMjMsNjgsMTIwMTc1LDY4LDEyMDIyNyw2OCwxMjAyNzksNjgsMTIwMzMxLDY4LDEyMDM4Myw2OCwxMjA0MzUsNjgsNTAyNCw2OCw1NTk4LDY4LDU2MTAsNjgsNDIxOTUsNjgsODQ5NCwxMDEsNjUzNDksMTAxLDg0OTUsMTAxLDg1MTksMTAxLDExOTgzOCwxMDEsMTE5ODkwLDEwMSwxMTk5NDIsMTAxLDEyMDA0NiwxMDEsMTIwMDk4LDEwMSwxMjAxNTAsMTAxLDEyMDIwMiwxMDEsMTIwMjU0LDEwMSwxMjAzMDYsMTAxLDEyMDM1OCwxMDEsMTIwNDEwLDEwMSwxMjA0NjIsMTAxLDQzODI2LDEwMSwxMjEzLDEwMSw4OTU5LDY5LDY1MzE3LDY5LDg0OTYsNjksMTE5ODEyLDY5LDExOTg2NCw2OSwxMTk5MTYsNjksMTIwMDIwLDY5LDEyMDA3Miw2OSwxMjAxMjQsNjksMTIwMTc2LDY5LDEyMDIyOCw2OSwxMjAyODAsNjksMTIwMzMyLDY5LDEyMDM4NCw2OSwxMjA0MzYsNjksOTE3LDY5LDEyMDQ5Miw2OSwxMjA1NTAsNjksMTIwNjA4LDY5LDEyMDY2Niw2OSwxMjA3MjQsNjksMTE1NzcsNjksNTAzNiw2OSw0MjIyNCw2OSw3MTg0Niw2OSw3MTg1NCw2OSw2NjE4Miw2OSwxMTk4MzksMTAyLDExOTg5MSwxMDIsMTE5OTQzLDEwMiwxMTk5OTUsMTAyLDEyMDA0NywxMDIsMTIwMDk5LDEwMiwxMjAxNTEsMTAyLDEyMDIwMywxMDIsMTIwMjU1LDEwMiwxMjAzMDcsMTAyLDEyMDM1OSwxMDIsMTIwNDExLDEwMiwxMjA0NjMsMTAyLDQzODI5LDEwMiw0MjkwNSwxMDIsMzgzLDEwMiw3ODM3LDEwMiwxNDEyLDEwMiwxMTkzMTUsNzAsODQ5Nyw3MCwxMTk4MTMsNzAsMTE5ODY1LDcwLDExOTkxNyw3MCwxMjAwMjEsNzAsMTIwMDczLDcwLDEyMDEyNSw3MCwxMjAxNzcsNzAsMTIwMjI5LDcwLDEyMDI4MSw3MCwxMjAzMzMsNzAsMTIwMzg1LDcwLDEyMDQzNyw3MCw0MjkwNCw3MCw5ODgsNzAsMTIwNzc4LDcwLDU1NTYsNzAsNDIyMDUsNzAsNzE4NzQsNzAsNzE4NDIsNzAsNjYxODMsNzAsNjYyMTMsNzAsNjY4NTMsNzAsNjUzNTEsMTAzLDg0NTgsMTAzLDExOTg0MCwxMDMsMTE5ODkyLDEwMywxMTk5NDQsMTAzLDEyMDA0OCwxMDMsMTIwMTAwLDEwMywxMjAxNTIsMTAzLDEyMDIwNCwxMDMsMTIwMjU2LDEwMywxMjAzMDgsMTAzLDEyMDM2MCwxMDMsMTIwNDEyLDEwMywxMjA0NjQsMTAzLDYwOSwxMDMsNzU1NSwxMDMsMzk3LDEwMywxNDA5LDEwMywxMTk4MTQsNzEsMTE5ODY2LDcxLDExOTkxOCw3MSwxMTk5NzAsNzEsMTIwMDIyLDcxLDEyMDA3NCw3MSwxMjAxMjYsNzEsMTIwMTc4LDcxLDEyMDIzMCw3MSwxMjAyODIsNzEsMTIwMzM0LDcxLDEyMDM4Niw3MSwxMjA0MzgsNzEsMTI5Miw3MSw1MDU2LDcxLDUxMDcsNzEsNDIxOTgsNzEsNjUzNTIsMTA0LDg0NjIsMTA0LDExOTg0MSwxMDQsMTE5OTQ1LDEwNCwxMTk5OTcsMTA0LDEyMDA0OSwxMDQsMTIwMTAxLDEwNCwxMjAxNTMsMTA0LDEyMDIwNSwxMDQsMTIwMjU3LDEwNCwxMjAzMDksMTA0LDEyMDM2MSwxMDQsMTIwNDEzLDEwNCwxMjA0NjUsMTA0LDEyMTEsMTA0LDEzOTIsMTA0LDUwNTgsMTA0LDY1MzIwLDcyLDg0NTksNzIsODQ2MCw3Miw4NDYxLDcyLDExOTgxNSw3MiwxMTk4NjcsNzIsMTE5OTE5LDcyLDEyMDAyMyw3MiwxMjAxNzksNzIsMTIwMjMxLDcyLDEyMDI4Myw3MiwxMjAzMzUsNzIsMTIwMzg3LDcyLDEyMDQzOSw3Miw5MTksNzIsMTIwNDk0LDcyLDEyMDU1Miw3MiwxMjA2MTAsNzIsMTIwNjY4LDcyLDEyMDcyNiw3MiwxMTQwNiw3Miw1MDUxLDcyLDU1MDAsNzIsNDIyMTUsNzIsNjYyNTUsNzIsNzMxLDEwNSw5MDc1LDEwNSw2NTM1MywxMDUsODU2MCwxMDUsODUwNSwxMDUsODUyMCwxMDUsMTE5ODQyLDEwNSwxMTk4OTQsMTA1LDExOTk0NiwxMDUsMTE5OTk4LDEwNSwxMjAwNTAsMTA1LDEyMDEwMiwxMDUsMTIwMTU0LDEwNSwxMjAyMDYsMTA1LDEyMDI1OCwxMDUsMTIwMzEwLDEwNSwxMjAzNjIsMTA1LDEyMDQxNCwxMDUsMTIwNDY2LDEwNSwxMjA0ODQsMTA1LDYxOCwxMDUsNjE3LDEwNSw5NTMsMTA1LDgxMjYsMTA1LDg5MCwxMDUsMTIwNTIyLDEwNSwxMjA1ODAsMTA1LDEyMDYzOCwxMDUsMTIwNjk2LDEwNSwxMjA3NTQsMTA1LDExMTAsMTA1LDQyNTY3LDEwNSwxMjMxLDEwNSw0Mzg5MywxMDUsNTAyOSwxMDUsNzE4NzUsMTA1LDY1MzU0LDEwNiw4NTIxLDEwNiwxMTk4NDMsMTA2LDExOTg5NSwxMDYsMTE5OTQ3LDEwNiwxMTk5OTksMTA2LDEyMDA1MSwxMDYsMTIwMTAzLDEwNiwxMjAxNTUsMTA2LDEyMDIwNywxMDYsMTIwMjU5LDEwNiwxMjAzMTEsMTA2LDEyMDM2MywxMDYsMTIwNDE1LDEwNiwxMjA0NjcsMTA2LDEwMTEsMTA2LDExMTIsMTA2LDY1MzIyLDc0LDExOTgxNyw3NCwxMTk4NjksNzQsMTE5OTIxLDc0LDExOTk3Myw3NCwxMjAwMjUsNzQsMTIwMDc3LDc0LDEyMDEyOSw3NCwxMjAxODEsNzQsMTIwMjMzLDc0LDEyMDI4NSw3NCwxMjAzMzcsNzQsMTIwMzg5LDc0LDEyMDQ0MSw3NCw0MjkzMCw3NCw4OTUsNzQsMTAzMiw3NCw1MDM1LDc0LDUyNjEsNzQsNDIyMDEsNzQsMTE5ODQ0LDEwNywxMTk4OTYsMTA3LDExOTk0OCwxMDcsMTIwMDAwLDEwNywxMjAwNTIsMTA3LDEyMDEwNCwxMDcsMTIwMTU2LDEwNywxMjAyMDgsMTA3LDEyMDI2MCwxMDcsMTIwMzEyLDEwNywxMjAzNjQsMTA3LDEyMDQxNiwxMDcsMTIwNDY4LDEwNyw4NDkwLDc1LDY1MzIzLDc1LDExOTgxOCw3NSwxMTk4NzAsNzUsMTE5OTIyLDc1LDExOTk3NCw3NSwxMjAwMjYsNzUsMTIwMDc4LDc1LDEyMDEzMCw3NSwxMjAxODIsNzUsMTIwMjM0LDc1LDEyMDI4Niw3NSwxMjAzMzgsNzUsMTIwMzkwLDc1LDEyMDQ0Miw3NSw5MjIsNzUsMTIwNDk3LDc1LDEyMDU1NSw3NSwxMjA2MTMsNzUsMTIwNjcxLDc1LDEyMDcyOSw3NSwxMTQxMiw3NSw1MDk0LDc1LDU4NDUsNzUsNDIxOTksNzUsNjY4NDAsNzUsMTQ3MiwxMDgsODczOSw3Myw5MjEzLDczLDY1NTEyLDczLDE2MzMsMTA4LDE3NzcsNzMsNjYzMzYsMTA4LDEyNTEyNywxMDgsMTIwNzgzLDczLDEyMDc5Myw3MywxMjA4MDMsNzMsMTIwODEzLDczLDEyMDgyMyw3MywxMzAwMzMsNzMsNjUzMjEsNzMsODU0NCw3Myw4NDY0LDczLDg0NjUsNzMsMTE5ODE2LDczLDExOTg2OCw3MywxMTk5MjAsNzMsMTIwMDI0LDczLDEyMDEyOCw3MywxMjAxODAsNzMsMTIwMjMyLDczLDEyMDI4NCw3MywxMjAzMzYsNzMsMTIwMzg4LDczLDEyMDQ0MCw3Myw2NTM1NiwxMDgsODU3Miw3Myw4NDY3LDEwOCwxMTk4NDUsMTA4LDExOTg5NywxMDgsMTE5OTQ5LDEwOCwxMjAwMDEsMTA4LDEyMDA1MywxMDgsMTIwMTA1LDczLDEyMDE1Nyw3MywxMjAyMDksNzMsMTIwMjYxLDczLDEyMDMxMyw3MywxMjAzNjUsNzMsMTIwNDE3LDczLDEyMDQ2OSw3Myw0NDgsNzMsMTIwNDk2LDczLDEyMDU1NCw3MywxMjA2MTIsNzMsMTIwNjcwLDczLDEyMDcyOCw3MywxMTQxMCw3MywxMDMwLDczLDEyMTYsNzMsMTQ5MywxMDgsMTUwMywxMDgsMTU3NSwxMDgsMTI2NDY0LDEwOCwxMjY1OTIsMTA4LDY1MTY2LDEwOCw2NTE2NSwxMDgsMTk5NCwxMDgsMTE1OTksNzMsNTgyNSw3Myw0MjIyNiw3Myw5Mzk5Miw3Myw2NjE4NiwxMjQsNjYzMTMsMTI0LDExOTMzOCw3Niw4NTU2LDc2LDg0NjYsNzYsMTE5ODE5LDc2LDExOTg3MSw3NiwxMTk5MjMsNzYsMTIwMDI3LDc2LDEyMDA3OSw3NiwxMjAxMzEsNzYsMTIwMTgzLDc2LDEyMDIzNSw3NiwxMjAyODcsNzYsMTIwMzM5LDc2LDEyMDM5MSw3NiwxMjA0NDMsNzYsMTE0NzIsNzYsNTA4Niw3Niw1MjkwLDc2LDQyMjA5LDc2LDkzOTc0LDc2LDcxODQzLDc2LDcxODU4LDc2LDY2NTg3LDc2LDY2ODU0LDc2LDY1MzI1LDc3LDg1NTksNzcsODQ5OSw3NywxMTk4MjAsNzcsMTE5ODcyLDc3LDExOTkyNCw3NywxMjAwMjgsNzcsMTIwMDgwLDc3LDEyMDEzMiw3NywxMjAxODQsNzcsMTIwMjM2LDc3LDEyMDI4OCw3NywxMjAzNDAsNzcsMTIwMzkyLDc3LDEyMDQ0NCw3Nyw5MjQsNzcsMTIwNDk5LDc3LDEyMDU1Nyw3NywxMjA2MTUsNzcsMTIwNjczLDc3LDEyMDczMSw3NywxMDE4LDc3LDExNDE2LDc3LDUwNDcsNzcsNTYxNiw3Nyw1ODQ2LDc3LDQyMjA3LDc3LDY2MjI0LDc3LDY2MzIxLDc3LDExOTg0NywxMTAsMTE5ODk5LDExMCwxMTk5NTEsMTEwLDEyMDAwMywxMTAsMTIwMDU1LDExMCwxMjAxMDcsMTEwLDEyMDE1OSwxMTAsMTIwMjExLDExMCwxMjAyNjMsMTEwLDEyMDMxNSwxMTAsMTIwMzY3LDExMCwxMjA0MTksMTEwLDEyMDQ3MSwxMTAsMTQwMCwxMTAsMTQwNCwxMTAsNjUzMjYsNzgsODQ2OSw3OCwxMTk4MjEsNzgsMTE5ODczLDc4LDExOTkyNSw3OCwxMTk5NzcsNzgsMTIwMDI5LDc4LDEyMDA4MSw3OCwxMjAxODUsNzgsMTIwMjM3LDc4LDEyMDI4OSw3OCwxMjAzNDEsNzgsMTIwMzkzLDc4LDEyMDQ0NSw3OCw5MjUsNzgsMTIwNTAwLDc4LDEyMDU1OCw3OCwxMjA2MTYsNzgsMTIwNjc0LDc4LDEyMDczMiw3OCwxMTQxOCw3OCw0MjIwOCw3OCw2NjgzNSw3OCwzMDc0LDExMSwzMjAyLDExMSwzMzMwLDExMSwzNDU4LDExMSwyNDA2LDExMSwyNjYyLDExMSwyNzkwLDExMSwzMDQ2LDExMSwzMTc0LDExMSwzMzAyLDExMSwzNDMwLDExMSwzNjY0LDExMSwzNzkyLDExMSw0MTYwLDExMSwxNjM3LDExMSwxNzgxLDExMSw2NTM1OSwxMTEsODUwMCwxMTEsMTE5ODQ4LDExMSwxMTk5MDAsMTExLDExOTk1MiwxMTEsMTIwMDU2LDExMSwxMjAxMDgsMTExLDEyMDE2MCwxMTEsMTIwMjEyLDExMSwxMjAyNjQsMTExLDEyMDMxNiwxMTEsMTIwMzY4LDExMSwxMjA0MjAsMTExLDEyMDQ3MiwxMTEsNzQzOSwxMTEsNzQ0MSwxMTEsNDM4MzcsMTExLDk1OSwxMTEsMTIwNTI4LDExMSwxMjA1ODYsMTExLDEyMDY0NCwxMTEsMTIwNzAyLDExMSwxMjA3NjAsMTExLDk2MywxMTEsMTIwNTMyLDExMSwxMjA1OTAsMTExLDEyMDY0OCwxMTEsMTIwNzA2LDExMSwxMjA3NjQsMTExLDExNDIzLDExMSw0MzUxLDExMSwxNDEzLDExMSwxNTA1LDExMSwxNjA3LDExMSwxMjY1MDAsMTExLDEyNjU2NCwxMTEsMTI2NTk2LDExMSw2NTI1OSwxMTEsNjUyNjAsMTExLDY1MjU4LDExMSw2NTI1NywxMTEsMTcyNiwxMTEsNjQ0MjgsMTExLDY0NDI5LDExMSw2NDQyNywxMTEsNjQ0MjYsMTExLDE3MjksMTExLDY0NDI0LDExMSw2NDQyNSwxMTEsNjQ0MjMsMTExLDY0NDIyLDExMSwxNzQ5LDExMSwzMzYwLDExMSw0MTI1LDExMSw2Njc5NCwxMTEsNzE4ODAsMTExLDcxODk1LDExMSw2NjYwNCwxMTEsMTk4NCw3OSwyNTM0LDc5LDI5MTgsNzksMTIyOTUsNzksNzA4NjQsNzksNzE5MDQsNzksMTIwNzgyLDc5LDEyMDc5Miw3OSwxMjA4MDIsNzksMTIwODEyLDc5LDEyMDgyMiw3OSwxMzAwMzIsNzksNjUzMjcsNzksMTE5ODIyLDc5LDExOTg3NCw3OSwxMTk5MjYsNzksMTE5OTc4LDc5LDEyMDAzMCw3OSwxMjAwODIsNzksMTIwMTM0LDc5LDEyMDE4Niw3OSwxMjAyMzgsNzksMTIwMjkwLDc5LDEyMDM0Miw3OSwxMjAzOTQsNzksMTIwNDQ2LDc5LDkyNyw3OSwxMjA1MDIsNzksMTIwNTYwLDc5LDEyMDYxOCw3OSwxMjA2NzYsNzksMTIwNzM0LDc5LDExNDIyLDc5LDEzNjUsNzksMTE2MDQsNzksNDgxNiw3OSwyODQ4LDc5LDY2NzU0LDc5LDQyMjI3LDc5LDcxODYxLDc5LDY2MTk0LDc5LDY2MjE5LDc5LDY2NTY0LDc5LDY2ODM4LDc5LDkwNzYsMTEyLDY1MzYwLDExMiwxMTk4NDksMTEyLDExOTkwMSwxMTIsMTE5OTUzLDExMiwxMjAwMDUsMTEyLDEyMDA1NywxMTIsMTIwMTA5LDExMiwxMjAxNjEsMTEyLDEyMDIxMywxMTIsMTIwMjY1LDExMiwxMjAzMTcsMTEyLDEyMDM2OSwxMTIsMTIwNDIxLDExMiwxMjA0NzMsMTEyLDk2MSwxMTIsMTIwNTMwLDExMiwxMjA1NDQsMTEyLDEyMDU4OCwxMTIsMTIwNjAyLDExMiwxMjA2NDYsMTEyLDEyMDY2MCwxMTIsMTIwNzA0LDExMiwxMjA3MTgsMTEyLDEyMDc2MiwxMTIsMTIwNzc2LDExMiwxMTQyNywxMTIsNjUzMjgsODAsODQ3Myw4MCwxMTk4MjMsODAsMTE5ODc1LDgwLDExOTkyNyw4MCwxMTk5NzksODAsMTIwMDMxLDgwLDEyMDA4Myw4MCwxMjAxODcsODAsMTIwMjM5LDgwLDEyMDI5MSw4MCwxMjAzNDMsODAsMTIwMzk1LDgwLDEyMDQ0Nyw4MCw5MjksODAsMTIwNTA0LDgwLDEyMDU2Miw4MCwxMjA2MjAsODAsMTIwNjc4LDgwLDEyMDczNiw4MCwxMTQyNiw4MCw1MDkwLDgwLDUyMjksODAsNDIxOTMsODAsNjYxOTcsODAsMTE5ODUwLDExMywxMTk5MDIsMTEzLDExOTk1NCwxMTMsMTIwMDA2LDExMywxMjAwNTgsMTEzLDEyMDExMCwxMTMsMTIwMTYyLDExMywxMjAyMTQsMTEzLDEyMDI2NiwxMTMsMTIwMzE4LDExMywxMjAzNzAsMTEzLDEyMDQyMiwxMTMsMTIwNDc0LDExMywxMzA3LDExMywxMzc5LDExMywxMzgyLDExMyw4NDc0LDgxLDExOTgyNCw4MSwxMTk4NzYsODEsMTE5OTI4LDgxLDExOTk4MCw4MSwxMjAwMzIsODEsMTIwMDg0LDgxLDEyMDE4OCw4MSwxMjAyNDAsODEsMTIwMjkyLDgxLDEyMDM0NCw4MSwxMjAzOTYsODEsMTIwNDQ4LDgxLDExNjA1LDgxLDExOTg1MSwxMTQsMTE5OTAzLDExNCwxMTk5NTUsMTE0LDEyMDAwNywxMTQsMTIwMDU5LDExNCwxMjAxMTEsMTE0LDEyMDE2MywxMTQsMTIwMjE1LDExNCwxMjAyNjcsMTE0LDEyMDMxOSwxMTQsMTIwMzcxLDExNCwxMjA0MjMsMTE0LDEyMDQ3NSwxMTQsNDM4NDcsMTE0LDQzODQ4LDExNCw3NDYyLDExNCwxMTM5NywxMTQsNDM5MDUsMTE0LDExOTMxOCw4Miw4NDc1LDgyLDg0NzYsODIsODQ3Nyw4MiwxMTk4MjUsODIsMTE5ODc3LDgyLDExOTkyOSw4MiwxMjAwMzMsODIsMTIwMTg5LDgyLDEyMDI0MSw4MiwxMjAyOTMsODIsMTIwMzQ1LDgyLDEyMDM5Nyw4MiwxMjA0NDksODIsNDIyLDgyLDUwMjUsODIsNTA3NCw4Miw2Njc0MCw4Miw1NTExLDgyLDQyMjExLDgyLDk0MDA1LDgyLDY1MzYzLDExNSwxMTk4NTIsMTE1LDExOTkwNCwxMTUsMTE5OTU2LDExNSwxMjAwMDgsMTE1LDEyMDA2MCwxMTUsMTIwMTEyLDExNSwxMjAxNjQsMTE1LDEyMDIxNiwxMTUsMTIwMjY4LDExNSwxMjAzMjAsMTE1LDEyMDM3MiwxMTUsMTIwNDI0LDExNSwxMjA0NzYsMTE1LDQyODAxLDExNSw0NDUsMTE1LDExMDksMTE1LDQzOTQ2LDExNSw3MTg3MywxMTUsNjY2MzIsMTE1LDY1MzMxLDgzLDExOTgyNiw4MywxMTk4NzgsODMsMTE5OTMwLDgzLDExOTk4Miw4MywxMjAwMzQsODMsMTIwMDg2LDgzLDEyMDEzOCw4MywxMjAxOTAsODMsMTIwMjQyLDgzLDEyMDI5NCw4MywxMjAzNDYsODMsMTIwMzk4LDgzLDEyMDQ1MCw4MywxMDI5LDgzLDEzNTksODMsNTA3Nyw4Myw1MDgyLDgzLDQyMjEwLDgzLDk0MDEwLDgzLDY2MTk4LDgzLDY2NTkyLDgzLDExOTg1MywxMTYsMTE5OTA1LDExNiwxMTk5NTcsMTE2LDEyMDAwOSwxMTYsMTIwMDYxLDExNiwxMjAxMTMsMTE2LDEyMDE2NSwxMTYsMTIwMjE3LDExNiwxMjAyNjksMTE2LDEyMDMyMSwxMTYsMTIwMzczLDExNiwxMjA0MjUsMTE2LDEyMDQ3NywxMTYsODg2OCw4NCwxMDIwMSw4NCwxMjg4NzIsODQsNjUzMzIsODQsMTE5ODI3LDg0LDExOTg3OSw4NCwxMTk5MzEsODQsMTE5OTgzLDg0LDEyMDAzNSw4NCwxMjAwODcsODQsMTIwMTM5LDg0LDEyMDE5MSw4NCwxMjAyNDMsODQsMTIwMjk1LDg0LDEyMDM0Nyw4NCwxMjAzOTksODQsMTIwNDUxLDg0LDkzMiw4NCwxMjA1MDcsODQsMTIwNTY1LDg0LDEyMDYyMyw4NCwxMjA2ODEsODQsMTIwNzM5LDg0LDExNDMwLDg0LDUwMjYsODQsNDIxOTYsODQsOTM5NjIsODQsNzE4NjgsODQsNjYxOTksODQsNjYyMjUsODQsNjYzMjUsODQsMTE5ODU0LDExNywxMTk5MDYsMTE3LDExOTk1OCwxMTcsMTIwMDEwLDExNywxMjAwNjIsMTE3LDEyMDExNCwxMTcsMTIwMTY2LDExNywxMjAyMTgsMTE3LDEyMDI3MCwxMTcsMTIwMzIyLDExNywxMjAzNzQsMTE3LDEyMDQyNiwxMTcsMTIwNDc4LDExNyw0MjkxMSwxMTcsNzQ1MiwxMTcsNDM4NTQsMTE3LDQzODU4LDExNyw2NTEsMTE3LDk2NSwxMTcsMTIwNTM0LDExNywxMjA1OTIsMTE3LDEyMDY1MCwxMTcsMTIwNzA4LDExNywxMjA3NjYsMTE3LDE0MDUsMTE3LDY2ODA2LDExNyw3MTg5NiwxMTcsODc0Niw4NSw4ODk5LDg1LDExOTgyOCw4NSwxMTk4ODAsODUsMTE5OTMyLDg1LDExOTk4NCw4NSwxMjAwMzYsODUsMTIwMDg4LDg1LDEyMDE0MCw4NSwxMjAxOTIsODUsMTIwMjQ0LDg1LDEyMDI5Niw4NSwxMjAzNDgsODUsMTIwNDAwLDg1LDEyMDQ1Miw4NSwxMzU3LDg1LDQ2MDgsODUsNjY3NjYsODUsNTE5Niw4NSw0MjIyOCw4NSw5NDAxOCw4NSw3MTg2NCw4NSw4NzQ0LDExOCw4ODk3LDExOCw2NTM2NiwxMTgsODU2NCwxMTgsMTE5ODU1LDExOCwxMTk5MDcsMTE4LDExOTk1OSwxMTgsMTIwMDExLDExOCwxMjAwNjMsMTE4LDEyMDExNSwxMTgsMTIwMTY3LDExOCwxMjAyMTksMTE4LDEyMDI3MSwxMTgsMTIwMzIzLDExOCwxMjAzNzUsMTE4LDEyMDQyNywxMTgsMTIwNDc5LDExOCw3NDU2LDExOCw5NTcsMTE4LDEyMDUyNiwxMTgsMTIwNTg0LDExOCwxMjA2NDIsMTE4LDEyMDcwMCwxMTgsMTIwNzU4LDExOCwxMTQxLDExOCwxNDk2LDExOCw3MTQzMCwxMTgsNDM5NDUsMTE4LDcxODcyLDExOCwxMTkzMDksODYsMTYzOSw4NiwxNzgzLDg2LDg1NDgsODYsMTE5ODI5LDg2LDExOTg4MSw4NiwxMTk5MzMsODYsMTE5OTg1LDg2LDEyMDAzNyw4NiwxMjAwODksODYsMTIwMTQxLDg2LDEyMDE5Myw4NiwxMjAyNDUsODYsMTIwMjk3LDg2LDEyMDM0OSw4NiwxMjA0MDEsODYsMTIwNDUzLDg2LDExNDAsODYsMTE1NzYsODYsNTA4MSw4Niw1MTY3LDg2LDQyNzE5LDg2LDQyMjE0LDg2LDkzOTYwLDg2LDcxODQwLDg2LDY2ODQ1LDg2LDYyMywxMTksMTE5ODU2LDExOSwxMTk5MDgsMTE5LDExOTk2MCwxMTksMTIwMDEyLDExOSwxMjAwNjQsMTE5LDEyMDExNiwxMTksMTIwMTY4LDExOSwxMjAyMjAsMTE5LDEyMDI3MiwxMTksMTIwMzI0LDExOSwxMjAzNzYsMTE5LDEyMDQyOCwxMTksMTIwNDgwLDExOSw3NDU3LDExOSwxMTIxLDExOSwxMzA5LDExOSwxMzc3LDExOSw3MTQzNCwxMTksNzE0MzgsMTE5LDcxNDM5LDExOSw0MzkwNywxMTksNzE5MTksODcsNzE5MTAsODcsMTE5ODMwLDg3LDExOTg4Miw4NywxMTk5MzQsODcsMTE5OTg2LDg3LDEyMDAzOCw4NywxMjAwOTAsODcsMTIwMTQyLDg3LDEyMDE5NCw4NywxMjAyNDYsODcsMTIwMjk4LDg3LDEyMDM1MCw4NywxMjA0MDIsODcsMTIwNDU0LDg3LDEzMDgsODcsNTA0Myw4Nyw1MDc2LDg3LDQyMjE4LDg3LDU3NDIsMTIwLDEwNTM5LDEyMCwxMDU0MCwxMjAsMTA3OTksMTIwLDY1MzY4LDEyMCw4NTY5LDEyMCwxMTk4NTcsMTIwLDExOTkwOSwxMjAsMTE5OTYxLDEyMCwxMjAwMTMsMTIwLDEyMDA2NSwxMjAsMTIwMTE3LDEyMCwxMjAxNjksMTIwLDEyMDIyMSwxMjAsMTIwMjczLDEyMCwxMjAzMjUsMTIwLDEyMDM3NywxMjAsMTIwNDI5LDEyMCwxMjA0ODEsMTIwLDU0NDEsMTIwLDU1MDEsMTIwLDU3NDEsODgsOTU4Nyw4OCw2NjMzOCw4OCw3MTkxNiw4OCw2NTMzNiw4OCw4NTUzLDg4LDExOTgzMSw4OCwxMTk4ODMsODgsMTE5OTM1LDg4LDExOTk4Nyw4OCwxMjAwMzksODgsMTIwMDkxLDg4LDEyMDE0Myw4OCwxMjAxOTUsODgsMTIwMjQ3LDg4LDEyMDI5OSw4OCwxMjAzNTEsODgsMTIwNDAzLDg4LDEyMDQ1NSw4OCw0MjkzMSw4OCw5MzUsODgsMTIwNTEwLDg4LDEyMDU2OCw4OCwxMjA2MjYsODgsMTIwNjg0LDg4LDEyMDc0Miw4OCwxMTQzNiw4OCwxMTYxMyw4OCw1ODE1LDg4LDQyMjE5LDg4LDY2MTkyLDg4LDY2MjI4LDg4LDY2MzI3LDg4LDY2ODU1LDg4LDYxMSwxMjEsNzU2NCwxMjEsNjUzNjksMTIxLDExOTg1OCwxMjEsMTE5OTEwLDEyMSwxMTk5NjIsMTIxLDEyMDAxNCwxMjEsMTIwMDY2LDEyMSwxMjAxMTgsMTIxLDEyMDE3MCwxMjEsMTIwMjIyLDEyMSwxMjAyNzQsMTIxLDEyMDMyNiwxMjEsMTIwMzc4LDEyMSwxMjA0MzAsMTIxLDEyMDQ4MiwxMjEsNjU1LDEyMSw3OTM1LDEyMSw0Mzg2NiwxMjEsOTQ3LDEyMSw4NTA5LDEyMSwxMjA1MTYsMTIxLDEyMDU3NCwxMjEsMTIwNjMyLDEyMSwxMjA2OTAsMTIxLDEyMDc0OCwxMjEsMTE5OSwxMjEsNDMyNywxMjEsNzE5MDAsMTIxLDY1MzM3LDg5LDExOTgzMiw4OSwxMTk4ODQsODksMTE5OTM2LDg5LDExOTk4OCw4OSwxMjAwNDAsODksMTIwMDkyLDg5LDEyMDE0NCw4OSwxMjAxOTYsODksMTIwMjQ4LDg5LDEyMDMwMCw4OSwxMjAzNTIsODksMTIwNDA0LDg5LDEyMDQ1Niw4OSw5MzMsODksOTc4LDg5LDEyMDUwOCw4OSwxMjA1NjYsODksMTIwNjI0LDg5LDEyMDY4Miw4OSwxMjA3NDAsODksMTE0MzIsODksMTE5OCw4OSw1MDMzLDg5LDUwNTMsODksNDIyMjAsODksOTQwMTksODksNzE4NDQsODksNjYyMjYsODksMTE5ODU5LDEyMiwxMTk5MTEsMTIyLDExOTk2MywxMjIsMTIwMDE1LDEyMiwxMjAwNjcsMTIyLDEyMDExOSwxMjIsMTIwMTcxLDEyMiwxMjAyMjMsMTIyLDEyMDI3NSwxMjIsMTIwMzI3LDEyMiwxMjAzNzksMTIyLDEyMDQzMSwxMjIsMTIwNDgzLDEyMiw3NDU4LDEyMiw0MzkyMywxMjIsNzE4NzYsMTIyLDY2MjkzLDkwLDcxOTA5LDkwLDY1MzM4LDkwLDg0ODQsOTAsODQ4OCw5MCwxMTk4MzMsOTAsMTE5ODg1LDkwLDExOTkzNyw5MCwxMTk5ODksOTAsMTIwMDQxLDkwLDEyMDE5Nyw5MCwxMjAyNDksOTAsMTIwMzAxLDkwLDEyMDM1Myw5MCwxMjA0MDUsOTAsMTIwNDU3LDkwLDkxOCw5MCwxMjA0OTMsOTAsMTIwNTUxLDkwLDEyMDYwOSw5MCwxMjA2NjcsOTAsMTIwNzI1LDkwLDUwNTksOTAsNDIyMDQsOTAsNzE4NDksOTAsNjUyODIsMzQsNjUyODQsMzYsNjUyODUsMzcsNjUyODYsMzgsNjUyOTAsNDIsNjUyOTEsNDMsNjUyOTQsNDYsNjUyOTUsNDcsNjUyOTYsNDgsNjUyOTcsNDksNjUyOTgsNTAsNjUyOTksNTEsNjUzMDAsNTIsNjUzMDEsNTMsNjUzMDIsNTQsNjUzMDMsNTUsNjUzMDQsNTYsNjUzMDUsNTcsNjUzMDgsNjAsNjUzMDksNjEsNjUzMTAsNjIsNjUzMTIsNjQsNjUzMTYsNjgsNjUzMTgsNzAsNjUzMTksNzEsNjUzMjQsNzYsNjUzMjksODEsNjUzMzAsODIsNjUzMzMsODUsNjUzMzQsODYsNjUzMzUsODcsNjUzNDMsOTUsNjUzNDYsOTgsNjUzNDgsMTAwLDY1MzUwLDEwMiw2NTM1NSwxMDcsNjUzNTcsMTA5LDY1MzU4LDExMCw2NTM2MSwxMTMsNjUzNjIsMTE0LDY1MzY0LDExNiw2NTM2NSwxMTcsNjUzNjcsMTE5LDY1MzcwLDEyMiw2NTM3MSwxMjMsNjUzNzMsMTI1XSwiX2RlZmF1bHQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiY3MiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImRlIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJlcyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJmciI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJpdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiamEiOls4MjExLDQ1LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI5Miw0NCw2NTMwNyw1OV0sImtvIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwbCI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwdC1CUiI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJxcHMtcGxvYyI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJydSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMzA1LDEwNSw5MjEsNzMsMTAwOSwxMTIsMjE1LDEyMCw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInRyIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInpoLWhhbnMiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODgsNDAsNjUyODksNDFdLCJ6aC1oYW50IjpbODIxMSw0NSw2NTM3NCwxMjYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MzA3LDU5XX0nKSkpLFEuY2FjaGU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZm49ZSx0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQoZSl7Y29uc3QgdD1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gdGhpcy5sYXN0QXJnS2V5IT09dCYmKHRoaXMubGFzdEFyZ0tleT10LHRoaXMubGFzdENhY2hlPXRoaXMuZm4oZSkpLHRoaXMubGFzdENhY2hlfX0oKGU9PntmdW5jdGlvbiB0KGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTIpdC5zZXQoZVtuXSxlW24rMV0pO3JldHVybiB0fWZ1bmN0aW9uIG4oZSx0KXtpZighZSlyZXR1cm4gdDtjb25zdCBuPW5ldyBNYXA7Zm9yKGNvbnN0W3IsaV1vZiBlKXQuaGFzKHIpJiZuLnNldChyLGkpO3JldHVybiBufWNvbnN0IHI9RC5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCk7bGV0IGksbz1lLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpJiZlIGluIHIpKTswPT09by5sZW5ndGgmJihvPVsiX2RlZmF1bHQiXSk7Zm9yKGNvbnN0IGUgb2Ygbyl7aT1uKGksdChyW2VdKSl9Y29uc3QgYT1mdW5jdGlvbihlLHQpe2NvbnN0IG49bmV3IE1hcChlKTtmb3IoY29uc3RbZSxyXW9mIHQpbi5zZXQoZSxyKTtyZXR1cm4gbn0odChyLl9jb21tb24pLGkpO3JldHVybiBuZXcgUShhKX0pKSxRLl9sb2NhbGVzPW5ldyBHKCgoKT0+T2JqZWN0LmtleXMoUS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCkpLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpKSkpKTtjbGFzcyBlZXtzdGF0aWMgZ2V0UmF3RGF0YSgpe3JldHVybiBKU09OLnBhcnNlKCJbOSwxMCwxMSwxMiwxMywzMiwxMjcsMTYwLDE3Myw4NDcsMTU2NCw0NDQ3LDQ0NDgsNjA2OCw2MDY5LDYxNTUsNjE1Niw2MTU3LDYxNTgsNzM1NSw3MzU2LDgxOTIsODE5Myw4MTk0LDgxOTUsODE5Niw4MTk3LDgxOTgsODE5OSw4MjAwLDgyMDEsODIwMiw4MjAzLDgyMDQsODIwNSw4MjA2LDgyMDcsODIzNCw4MjM1LDgyMzYsODIzNyw4MjM4LDgyMzksODI4Nyw4Mjg4LDgyODksODI5MCw4MjkxLDgyOTIsODI5Myw4Mjk0LDgyOTUsODI5Niw4Mjk3LDgyOTgsODI5OSw4MzAwLDgzMDEsODMwMiw4MzAzLDEwMjQwLDEyMjg4LDEyNjQ0LDY1MDI0LDY1MDI1LDY1MDI2LDY1MDI3LDY1MDI4LDY1MDI5LDY1MDMwLDY1MDMxLDY1MDMyLDY1MDMzLDY1MDM0LDY1MDM1LDY1MDM2LDY1MDM3LDY1MDM4LDY1MDM5LDY1Mjc5LDY1NDQwLDY1NTIwLDY1NTIxLDY1NTIyLDY1NTIzLDY1NTI0LDY1NTI1LDY1NTI2LDY1NTI3LDY1NTI4LDY1NTMyLDc4ODQ0LDExOTE1NSwxMTkxNTYsMTE5MTU3LDExOTE1OCwxMTkxNTksMTE5MTYwLDExOTE2MSwxMTkxNjIsOTE3NTA0LDkxNzUwNSw5MTc1MDYsOTE3NTA3LDkxNzUwOCw5MTc1MDksOTE3NTEwLDkxNzUxMSw5MTc1MTIsOTE3NTEzLDkxNzUxNCw5MTc1MTUsOTE3NTE2LDkxNzUxNyw5MTc1MTgsOTE3NTE5LDkxNzUyMCw5MTc1MjEsOTE3NTIyLDkxNzUyMyw5MTc1MjQsOTE3NTI1LDkxNzUyNiw5MTc1MjcsOTE3NTI4LDkxNzUyOSw5MTc1MzAsOTE3NTMxLDkxNzUzMiw5MTc1MzMsOTE3NTM0LDkxNzUzNSw5MTc1MzYsOTE3NTM3LDkxNzUzOCw5MTc1MzksOTE3NTQwLDkxNzU0MSw5MTc1NDIsOTE3NTQzLDkxNzU0NCw5MTc1NDUsOTE3NTQ2LDkxNzU0Nyw5MTc1NDgsOTE3NTQ5LDkxNzU1MCw5MTc1NTEsOTE3NTUyLDkxNzU1Myw5MTc1NTQsOTE3NTU1LDkxNzU1Niw5MTc1NTcsOTE3NTU4LDkxNzU1OSw5MTc1NjAsOTE3NTYxLDkxNzU2Miw5MTc1NjMsOTE3NTY0LDkxNzU2NSw5MTc1NjYsOTE3NTY3LDkxNzU2OCw5MTc1NjksOTE3NTcwLDkxNzU3MSw5MTc1NzIsOTE3NTczLDkxNzU3NCw5MTc1NzUsOTE3NTc2LDkxNzU3Nyw5MTc1NzgsOTE3NTc5LDkxNzU4MCw5MTc1ODEsOTE3NTgyLDkxNzU4Myw5MTc1ODQsOTE3NTg1LDkxNzU4Niw5MTc1ODcsOTE3NTg4LDkxNzU4OSw5MTc1OTAsOTE3NTkxLDkxNzU5Miw5MTc1OTMsOTE3NTk0LDkxNzU5NSw5MTc1OTYsOTE3NTk3LDkxNzU5OCw5MTc1OTksOTE3NjAwLDkxNzYwMSw5MTc2MDIsOTE3NjAzLDkxNzYwNCw5MTc2MDUsOTE3NjA2LDkxNzYwNyw5MTc2MDgsOTE3NjA5LDkxNzYxMCw5MTc2MTEsOTE3NjEyLDkxNzYxMyw5MTc2MTQsOTE3NjE1LDkxNzYxNiw5MTc2MTcsOTE3NjE4LDkxNzYxOSw5MTc2MjAsOTE3NjIxLDkxNzYyMiw5MTc2MjMsOTE3NjI0LDkxNzYyNSw5MTc2MjYsOTE3NjI3LDkxNzYyOCw5MTc2MjksOTE3NjMwLDkxNzYzMSw5MTc3NjAsOTE3NzYxLDkxNzc2Miw5MTc3NjMsOTE3NzY0LDkxNzc2NSw5MTc3NjYsOTE3NzY3LDkxNzc2OCw5MTc3NjksOTE3NzcwLDkxNzc3MSw5MTc3NzIsOTE3NzczLDkxNzc3NCw5MTc3NzUsOTE3Nzc2LDkxNzc3Nyw5MTc3NzgsOTE3Nzc5LDkxNzc4MCw5MTc3ODEsOTE3NzgyLDkxNzc4Myw5MTc3ODQsOTE3Nzg1LDkxNzc4Niw5MTc3ODcsOTE3Nzg4LDkxNzc4OSw5MTc3OTAsOTE3NzkxLDkxNzc5Miw5MTc3OTMsOTE3Nzk0LDkxNzc5NSw5MTc3OTYsOTE3Nzk3LDkxNzc5OCw5MTc3OTksOTE3ODAwLDkxNzgwMSw5MTc4MDIsOTE3ODAzLDkxNzgwNCw5MTc4MDUsOTE3ODA2LDkxNzgwNyw5MTc4MDgsOTE3ODA5LDkxNzgxMCw5MTc4MTEsOTE3ODEyLDkxNzgxMyw5MTc4MTQsOTE3ODE1LDkxNzgxNiw5MTc4MTcsOTE3ODE4LDkxNzgxOSw5MTc4MjAsOTE3ODIxLDkxNzgyMiw5MTc4MjMsOTE3ODI0LDkxNzgyNSw5MTc4MjYsOTE3ODI3LDkxNzgyOCw5MTc4MjksOTE3ODMwLDkxNzgzMSw5MTc4MzIsOTE3ODMzLDkxNzgzNCw5MTc4MzUsOTE3ODM2LDkxNzgzNyw5MTc4MzgsOTE3ODM5LDkxNzg0MCw5MTc4NDEsOTE3ODQyLDkxNzg0Myw5MTc4NDQsOTE3ODQ1LDkxNzg0Niw5MTc4NDcsOTE3ODQ4LDkxNzg0OSw5MTc4NTAsOTE3ODUxLDkxNzg1Miw5MTc4NTMsOTE3ODU0LDkxNzg1NSw5MTc4NTYsOTE3ODU3LDkxNzg1OCw5MTc4NTksOTE3ODYwLDkxNzg2MSw5MTc4NjIsOTE3ODYzLDkxNzg2NCw5MTc4NjUsOTE3ODY2LDkxNzg2Nyw5MTc4NjgsOTE3ODY5LDkxNzg3MCw5MTc4NzEsOTE3ODcyLDkxNzg3Myw5MTc4NzQsOTE3ODc1LDkxNzg3Niw5MTc4NzcsOTE3ODc4LDkxNzg3OSw5MTc4ODAsOTE3ODgxLDkxNzg4Miw5MTc4ODMsOTE3ODg0LDkxNzg4NSw5MTc4ODYsOTE3ODg3LDkxNzg4OCw5MTc4ODksOTE3ODkwLDkxNzg5MSw5MTc4OTIsOTE3ODkzLDkxNzg5NCw5MTc4OTUsOTE3ODk2LDkxNzg5Nyw5MTc4OTgsOTE3ODk5LDkxNzkwMCw5MTc5MDEsOTE3OTAyLDkxNzkwMyw5MTc5MDQsOTE3OTA1LDkxNzkwNiw5MTc5MDcsOTE3OTA4LDkxNzkwOSw5MTc5MTAsOTE3OTExLDkxNzkxMiw5MTc5MTMsOTE3OTE0LDkxNzkxNSw5MTc5MTYsOTE3OTE3LDkxNzkxOCw5MTc5MTksOTE3OTIwLDkxNzkyMSw5MTc5MjIsOTE3OTIzLDkxNzkyNCw5MTc5MjUsOTE3OTI2LDkxNzkyNyw5MTc5MjgsOTE3OTI5LDkxNzkzMCw5MTc5MzEsOTE3OTMyLDkxNzkzMyw5MTc5MzQsOTE3OTM1LDkxNzkzNiw5MTc5MzcsOTE3OTM4LDkxNzkzOSw5MTc5NDAsOTE3OTQxLDkxNzk0Miw5MTc5NDMsOTE3OTQ0LDkxNzk0NSw5MTc5NDYsOTE3OTQ3LDkxNzk0OCw5MTc5NDksOTE3OTUwLDkxNzk1MSw5MTc5NTIsOTE3OTUzLDkxNzk1NCw5MTc5NTUsOTE3OTU2LDkxNzk1Nyw5MTc5NTgsOTE3OTU5LDkxNzk2MCw5MTc5NjEsOTE3OTYyLDkxNzk2Myw5MTc5NjQsOTE3OTY1LDkxNzk2Niw5MTc5NjcsOTE3OTY4LDkxNzk2OSw5MTc5NzAsOTE3OTcxLDkxNzk3Miw5MTc5NzMsOTE3OTc0LDkxNzk3NSw5MTc5NzYsOTE3OTc3LDkxNzk3OCw5MTc5NzksOTE3OTgwLDkxNzk4MSw5MTc5ODIsOTE3OTgzLDkxNzk4NCw5MTc5ODUsOTE3OTg2LDkxNzk4Nyw5MTc5ODgsOTE3OTg5LDkxNzk5MCw5MTc5OTEsOTE3OTkyLDkxNzk5Myw5MTc5OTQsOTE3OTk1LDkxNzk5Niw5MTc5OTcsOTE3OTk4LDkxNzk5OV0iKX1zdGF0aWMgZ2V0RGF0YSgpe3JldHVybiB0aGlzLl9kYXRhfHwodGhpcy5fZGF0YT1uZXcgU2V0KGVlLmdldFJhd0RhdGEoKSkpLHRoaXMuX2RhdGF9c3RhdGljIGlzSW52aXNpYmxlQ2hhcmFjdGVyKGUpe3JldHVybiBlZS5nZXREYXRhKCkuaGFzKGUpfXN0YXRpYyBnZXQgY29kZVBvaW50cygpe3JldHVybiBlZS5nZXREYXRhKCl9fWVlLl9kYXRhPXZvaWQgMDtjbGFzcyB0ZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLm1ldGhvZD1uLHRoaXMuYXJncz1yLHRoaXMudHlwZT0wfX1jbGFzcyBuZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5zZXE9dCx0aGlzLnJlcz1uLHRoaXMuZXJyPXIsdGhpcy50eXBlPTF9fWNsYXNzIHJle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnROYW1lPW4sdGhpcy5hcmc9cix0aGlzLnR5cGU9Mn19Y2xhc3MgaWV7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnQ9bix0aGlzLnR5cGU9M319Y2xhc3Mgb2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLnR5cGU9NH19Y2xhc3MgYWV7Y29uc3RydWN0b3IoZSl7dGhpcy5fd29ya2VySWQ9LTEsdGhpcy5faGFuZGxlcj1lLHRoaXMuX2xhc3RTZW50UmVxPTAsdGhpcy5fcGVuZGluZ1JlcGxpZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9wZW5kaW5nRW1pdHRlcnM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nRXZlbnRzPW5ldyBNYXB9c2V0V29ya2VySWQoZSl7dGhpcy5fd29ya2VySWQ9ZX1zZW5kTWVzc2FnZShlLHQpe2NvbnN0IG49U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpO3JldHVybiBuZXcgUHJvbWlzZSgoKHIsaSk9Pnt0aGlzLl9wZW5kaW5nUmVwbGllc1tuXT17cmVzb2x2ZTpyLHJlamVjdDppfSx0aGlzLl9zZW5kKG5ldyB0ZSh0aGlzLl93b3JrZXJJZCxuLGUsdCkpfSkpfWxpc3RlbihlLHQpe2xldCBuPW51bGw7Y29uc3Qgcj1uZXcgQih7b25GaXJzdExpc3RlbmVyQWRkOigpPT57bj1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzLnNldChuLHIpLHRoaXMuX3NlbmQobmV3IHJlKHRoaXMuX3dvcmtlcklkLG4sZSx0KSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT57dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmRlbGV0ZShuKSx0aGlzLl9zZW5kKG5ldyBvZSh0aGlzLl93b3JrZXJJZCxuKSksbj1udWxsfX0pO3JldHVybiByLmV2ZW50fWhhbmRsZU1lc3NhZ2UoZSl7ZSYmZS52c1dvcmtlciYmKC0xIT09dGhpcy5fd29ya2VySWQmJmUudnNXb3JrZXIhPT10aGlzLl93b3JrZXJJZHx8dGhpcy5faGFuZGxlTWVzc2FnZShlKSl9X2hhbmRsZU1lc3NhZ2UoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLl9oYW5kbGVSZXBseU1lc3NhZ2UoZSk7Y2FzZSAwOnJldHVybiB0aGlzLl9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKTtjYXNlIDI6cmV0dXJuIHRoaXMuX2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKTtjYXNlIDM6cmV0dXJuIHRoaXMuX2hhbmRsZUV2ZW50TWVzc2FnZShlKTtjYXNlIDQ6cmV0dXJuIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpfX1faGFuZGxlUmVwbHlNZXNzYWdlKGUpe2lmKCF0aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV0pcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJHb3QgcmVwbHkgdG8gdW5rbm93biBzZXEiKTtjb25zdCB0PXRoaXMuX3BlbmRpbmdSZXBsaWVzW2Uuc2VxXTtpZihkZWxldGUgdGhpcy5fcGVuZGluZ1JlcGxpZXNbZS5zZXFdLGUuZXJyKXtsZXQgbj1lLmVycjtyZXR1cm4gZS5lcnIuJGlzRXJyb3ImJihuPW5ldyBFcnJvcixuLm5hbWU9ZS5lcnIubmFtZSxuLm1lc3NhZ2U9ZS5lcnIubWVzc2FnZSxuLnN0YWNrPWUuZXJyLnN0YWNrKSx2b2lkIHQucmVqZWN0KG4pfXQucmVzb2x2ZShlLnJlcyl9X2hhbmRsZVJlcXVlc3RNZXNzYWdlKGUpe2NvbnN0IHQ9ZS5yZXE7dGhpcy5faGFuZGxlci5oYW5kbGVNZXNzYWdlKGUubWV0aG9kLGUuYXJncykudGhlbigoZT0+e3RoaXMuX3NlbmQobmV3IG5lKHRoaXMuX3dvcmtlcklkLHQsZSx2b2lkIDApKX0pLChlPT57ZS5kZXRhaWwgaW5zdGFuY2VvZiBFcnJvciYmKGUuZGV0YWlsPW4oZS5kZXRhaWwpKSx0aGlzLl9zZW5kKG5ldyBuZSh0aGlzLl93b3JrZXJJZCx0LHZvaWQgMCxuKGUpKSl9KSl9X2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKXtjb25zdCB0PWUucmVxLG49dGhpcy5faGFuZGxlci5oYW5kbGVFdmVudChlLmV2ZW50TmFtZSxlLmFyZykoKGU9Pnt0aGlzLl9zZW5kKG5ldyBpZSh0aGlzLl93b3JrZXJJZCx0LGUpKX0pKTt0aGlzLl9wZW5kaW5nRXZlbnRzLnNldCh0LG4pfV9oYW5kbGVFdmVudE1lc3NhZ2UoZSl7dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmhhcyhlLnJlcSk/dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmdldChlLnJlcSkuZmlyZShlLmV2ZW50KTpjb25zb2xlLndhcm4oIkdvdCBldmVudCBmb3IgdW5rbm93biByZXEiKX1faGFuZGxlVW5zdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSl7dGhpcy5fcGVuZGluZ0V2ZW50cy5oYXMoZS5yZXEpPyh0aGlzLl9wZW5kaW5nRXZlbnRzLmdldChlLnJlcSkuZGlzcG9zZSgpLHRoaXMuX3BlbmRpbmdFdmVudHMuZGVsZXRlKGUucmVxKSk6Y29uc29sZS53YXJuKCJHb3QgdW5zdWJzY3JpYmUgZm9yIHVua25vd24gcmVxIil9X3NlbmQoZSl7Y29uc3QgdD1bXTtpZigwPT09ZS50eXBlKWZvcihsZXQgbj0wO248ZS5hcmdzLmxlbmd0aDtuKyspZS5hcmdzW25daW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdC5wdXNoKGUuYXJnc1tuXSk7ZWxzZSAxPT09ZS50eXBlJiZlLnJlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZ0LnB1c2goZS5yZXMpO3RoaXMuX2hhbmRsZXIuc2VuZE1lc3NhZ2UoZSx0KX19ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIm8iPT09ZVswXSYmIm4iPT09ZVsxXSYmSihlLmNoYXJDb2RlQXQoMikpfWZ1bmN0aW9uIGNlKGUpe3JldHVybi9eb25EeW5hbWljLy50ZXN0KGUpJiZKKGUuY2hhckNvZGVBdCg5KSl9Y2xhc3MgbGV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk9dCx0aGlzLl9yZXF1ZXN0SGFuZGxlcj1udWxsLHRoaXMuX3Byb3RvY29sPW5ldyBhZSh7c2VuZE1lc3NhZ2U6KHQsbik9PntlKHQsbil9LGhhbmRsZU1lc3NhZ2U6KGUsdCk9PnRoaXMuX2hhbmRsZU1lc3NhZ2UoZSx0KSxoYW5kbGVFdmVudDooZSx0KT0+dGhpcy5faGFuZGxlRXZlbnQoZSx0KX0pfW9ubWVzc2FnZShlKXt0aGlzLl9wcm90b2NvbC5oYW5kbGVNZXNzYWdlKGUpfV9oYW5kbGVNZXNzYWdlKGUsdCl7aWYoIiRpbml0aWFsaXplIj09PWUpcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlcltlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0uYXBwbHkodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19X2hhbmRsZUV2ZW50KGUsdCl7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciIpO2lmKGNlKGUpKXtjb25zdCBuPXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmNhbGwodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGR5bmFtaWMgZXZlbnQgJHtlfSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIG59aWYoc2UoZSkpe2NvbnN0IHQ9dGhpcy5fcmVxdWVzdEhhbmRsZXJbZV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiB0fXRocm93IG5ldyBFcnJvcihgTWFsZm9ybWVkIGV2ZW50IG5hbWUgJHtlfWApfWluaXRpYWxpemUoZSx0LG4scil7dGhpcy5fcHJvdG9jb2wuc2V0V29ya2VySWQoZSk7Y29uc3QgaT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1lPT5mdW5jdGlvbigpe2NvbnN0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0KGUsbil9LGk9ZT0+ZnVuY3Rpb24odCl7cmV0dXJuIG4oZSx0KX0sbz17fTtmb3IoY29uc3QgdCBvZiBlKWNlKHQpP29bdF09aSh0KTpzZSh0KT9vW3RdPW4odCx2b2lkIDApOm9bdF09cih0KTtyZXR1cm4gb30ociwoKGUsdCk9PnRoaXMuX3Byb3RvY29sLnNlbmRNZXNzYWdlKGUsdCkpLCgoZSx0KT0+dGhpcy5fcHJvdG9jb2wubGlzdGVuKGUsdCkpKTtyZXR1cm4gdGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5Pyh0aGlzLl9yZXF1ZXN0SGFuZGxlcj10aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3RvcnkoaSksUHJvbWlzZS5yZXNvbHZlKEgodGhpcy5fcmVxdWVzdEhhbmRsZXIpKSk6KHQmJih2b2lkIDAhPT10LmJhc2VVcmwmJmRlbGV0ZSB0LmJhc2VVcmwsdm9pZCAwIT09dC5wYXRocyYmdm9pZCAwIT09dC5wYXRocy52cyYmZGVsZXRlIHQucGF0aHMudnMsdm9pZCAwIT09dHlwZW9mIHQudHJ1c3RlZFR5cGVzUG9saWN5JiZkZWxldGUgdC50cnVzdGVkVHlwZXNQb2xpY3ksdC5jYXRjaEVycm9yPSEwLE4ucmVxdWlyZS5jb25maWcodCkpLG5ldyBQcm9taXNlKCgoZSx0KT0+eygwLE4ucmVxdWlyZSkoW25dLChuPT57dGhpcy5fcmVxdWVzdEhhbmRsZXI9bi5jcmVhdGUoaSksdGhpcy5fcmVxdWVzdEhhbmRsZXI/ZShIKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSk6dChuZXcgRXJyb3IoIk5vIFJlcXVlc3RIYW5kbGVyISIpKX0pLHQpfSkpKX19Y2xhc3MgdWV7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5vcmlnaW5hbFN0YXJ0PWUsdGhpcy5vcmlnaW5hbExlbmd0aD10LHRoaXMubW9kaWZpZWRTdGFydD1uLHRoaXMubW9kaWZpZWRMZW5ndGg9cn1nZXRPcmlnaW5hbEVuZCgpe3JldHVybiB0aGlzLm9yaWdpbmFsU3RhcnQrdGhpcy5vcmlnaW5hbExlbmd0aH1nZXRNb2RpZmllZEVuZCgpe3JldHVybiB0aGlzLm1vZGlmaWVkU3RhcnQrdGhpcy5tb2RpZmllZExlbmd0aH19ZnVuY3Rpb24gaGUoZSx0KXtyZXR1cm4odDw8NSktdCtlfDB9ZnVuY3Rpb24gZmUoZSx0KXt0PWhlKDE0OTQxNyx0KTtmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspdD1oZShlLmNoYXJDb2RlQXQobiksdCk7cmV0dXJuIHR9Y2xhc3MgZGV7Y29uc3RydWN0b3IoZSl7dGhpcy5zb3VyY2U9ZX1nZXRFbGVtZW50cygpe2NvbnN0IGU9dGhpcy5zb3VyY2UsdD1uZXcgSW50MzJBcnJheShlLmxlbmd0aCk7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRbbl09ZS5jaGFyQ29kZUF0KG4pO3JldHVybiB0fX1mdW5jdGlvbiBtZShlLHQsbil7cmV0dXJuIG5ldyB2ZShuZXcgZGUoZSksbmV3IGRlKHQpKS5Db21wdXRlRGlmZihuKS5jaGFuZ2VzfWNsYXNzIGdle3N0YXRpYyBBc3NlcnQoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodCl9fWNsYXNzIHBle3N0YXRpYyBDb3B5KGUsdCxuLHIsaSl7Zm9yKGxldCBvPTA7bzxpO28rKyluW3Irb109ZVt0K29dfXN0YXRpYyBDb3B5MihlLHQsbixyLGkpe2ZvcihsZXQgbz0wO288aTtvKyspbltyK29dPWVbdCtvXX19Y2xhc3MgYmV7Y29uc3RydWN0b3IoKXt0aGlzLm1fY2hhbmdlcz1bXSx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wfU1hcmtOZXh0Q2hhbmdlKCl7KHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLm1fY2hhbmdlcy5wdXNoKG5ldyB1ZSh0aGlzLm1fb3JpZ2luYWxTdGFydCx0aGlzLm1fb3JpZ2luYWxDb3VudCx0aGlzLm1fbW9kaWZpZWRTdGFydCx0aGlzLm1fbW9kaWZpZWRDb3VudCkpLHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MCx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjR9QWRkT3JpZ2luYWxFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX29yaWdpbmFsQ291bnQrK31BZGRNb2RpZmllZEVsZW1lbnQoZSx0KXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCxlKSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRDb3VudCsrfWdldENoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlc31nZXRSZXZlcnNlQ2hhbmdlcygpe3JldHVybih0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzLnJldmVyc2UoKSx0aGlzLm1fY2hhbmdlc319Y2xhc3MgdmV7Y29uc3RydWN0b3IoZSx0LG49bnVsbCl7dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGU9bix0aGlzLl9vcmlnaW5hbFNlcXVlbmNlPWUsdGhpcy5fbW9kaWZpZWRTZXF1ZW5jZT10O2NvbnN0W3IsaSxvXT12ZS5fZ2V0RWxlbWVudHMoZSksW2EscyxjXT12ZS5fZ2V0RWxlbWVudHModCk7dGhpcy5faGFzU3RyaW5ncz1vJiZjLHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHM9cix0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoPWksdGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50cz1hLHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2g9cyx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdfXN0YXRpYyBfaXNTdHJpbmdBcnJheShlKXtyZXR1cm4gZS5sZW5ndGg+MCYmInN0cmluZyI9PXR5cGVvZiBlWzBdfXN0YXRpYyBfZ2V0RWxlbWVudHMoZSl7Y29uc3QgdD1lLmdldEVsZW1lbnRzKCk7aWYodmUuX2lzU3RyaW5nQXJyYXkodCkpe2NvbnN0IGU9bmV3IEludDMyQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllW25dPWZlKHRbbl0sMCk7cmV0dXJuW3QsZSwhMF19cmV0dXJuIHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5P1tbXSx0LCExXTpbW10sbmV3IEludDMyQXJyYXkodCksITFdfUVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfUVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoZSx0KXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKGUsdCkpcmV0dXJuITE7cmV0dXJuIHZlLl9nZXRTdHJpY3RFbGVtZW50KHRoaXMuX29yaWdpbmFsU2VxdWVuY2UsZSk9PT12ZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9tb2RpZmllZFNlcXVlbmNlLHQpfXN0YXRpYyBfZ2V0U3RyaWN0RWxlbWVudChlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldFN0cmljdEVsZW1lbnQ/ZS5nZXRTdHJpY3RFbGVtZW50KHQpOm51bGx9T3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3RdKX1Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfUNvbXB1dGVEaWZmKGUpe3JldHVybiB0aGlzLl9Db21wdXRlRGlmZigwLHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTEsMCx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLGUpfV9Db21wdXRlRGlmZihlLHQsbixyLGkpe2NvbnN0IG89WyExXTtsZXQgYT10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKGUsdCxuLHIsbyk7cmV0dXJuIGkmJihhPXRoaXMuUHJldHRpZnlDaGFuZ2VzKGEpKSx7cXVpdEVhcmx5Om9bMF0sY2hhbmdlczphfX1Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLHQsbixyLGkpe2ZvcihpWzBdPSExO2U8PXQmJm48PXImJnRoaXMuRWxlbWVudHNBcmVFcXVhbChlLG4pOyllKyssbisrO2Zvcig7dD49ZSYmcj49biYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQscik7KXQtLSxyLS07aWYoZT50fHxuPnIpe2xldCBpO3JldHVybiBuPD1yPyhnZS5Bc3NlcnQoZT09PXQrMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksaT1bbmV3IHVlKGUsMCxuLHItbisxKV0pOmU8PXQ/KGdlLkFzc2VydChuPT09cisxLCJtb2RpZmllZFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gbW9kaWZpZWRFbmQiKSxpPVtuZXcgdWUoZSx0LWUrMSxuLDApXSk6KGdlLkFzc2VydChlPT09dCsxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxnZS5Bc3NlcnQobj09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksaT1bXSksaX1jb25zdCBvPVswXSxhPVswXSxzPXRoaXMuQ29tcHV0ZVJlY3Vyc2lvblBvaW50KGUsdCxuLHIsbyxhLGkpLGM9b1swXSxsPWFbMF07aWYobnVsbCE9PXMpcmV0dXJuIHM7aWYoIWlbMF0pe2NvbnN0IG89dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLGMsbixsLGkpO2xldCBhPVtdO3JldHVybiBhPWlbMF0/W25ldyB1ZShjKzEsdC0oYysxKSsxLGwrMSxyLShsKzEpKzEpXTp0aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKGMrMSx0LGwrMSxyLGkpLHRoaXMuQ29uY2F0ZW5hdGVDaGFuZ2VzKG8sYSl9cmV0dXJuW25ldyB1ZShlLHQtZSsxLG4sci1uKzEpXX1XQUxLVFJBQ0UoZSx0LG4scixpLG8sYSxzLGMsbCx1LGgsZixkLG0sZyxwLGIpe2xldCB2PW51bGwseT1udWxsLEM9bmV3IGJlLHc9dCxfPW4sUz1mWzBdLWdbMF0tcixBPS0xMDczNzQxODI0LEU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5Lmxlbmd0aC0xO2Rve2NvbnN0IHQ9UytlO3Q9PT13fHx0PF8mJmNbdC0xXTxjW3QrMV0/KGQ9KHU9Y1t0KzFdKS1TLXIsdTxBJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT11LEMuQWRkTW9kaWZpZWRFbGVtZW50KHUrMSxkKSxTPXQrMS1lKTooZD0odT1jW3QtMV0rMSktUy1yLHU8QSYmQy5NYXJrTmV4dENoYW5nZSgpLEE9dS0xLEMuQWRkT3JpZ2luYWxFbGVtZW50KHUsZCsxKSxTPXQtMS1lKSxFPj0wJiYoZT0oYz10aGlzLm1fZm9yd2FyZEhpc3RvcnlbRV0pWzBdLHc9MSxfPWMubGVuZ3RoLTEpfXdoaWxlKC0tRT49LTEpO2lmKHY9Qy5nZXRSZXZlcnNlQ2hhbmdlcygpLGJbMF0pe2xldCBlPWZbMF0rMSx0PWdbMF0rMTtpZihudWxsIT09diYmdi5sZW5ndGg+MCl7Y29uc3Qgbj12W3YubGVuZ3RoLTFdO2U9TWF0aC5tYXgoZSxuLmdldE9yaWdpbmFsRW5kKCkpLHQ9TWF0aC5tYXgodCxuLmdldE1vZGlmaWVkRW5kKCkpfXk9W25ldyB1ZShlLGgtZSsxLHQsbS10KzEpXX1lbHNle0M9bmV3IGJlLHc9byxfPWEsUz1mWzBdLWdbMF0tcyxBPTEwNzM3NDE4MjQsRT1wP3RoaXMubV9yZXZlcnNlSGlzdG9yeS5sZW5ndGgtMTp0aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTI7ZG97Y29uc3QgZT1TK2k7ZT09PXd8fGU8XyYmbFtlLTFdPj1sW2UrMV0/KGQ9KHU9bFtlKzFdLTEpLVMtcyx1PkEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUrMSxDLkFkZE9yaWdpbmFsRWxlbWVudCh1KzEsZCsxKSxTPWUrMS1pKTooZD0odT1sW2UtMV0pLVMtcyx1PkEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUsQy5BZGRNb2RpZmllZEVsZW1lbnQodSsxLGQrMSksUz1lLTEtaSksRT49MCYmKGk9KGw9dGhpcy5tX3JldmVyc2VIaXN0b3J5W0VdKVswXSx3PTEsXz1sLmxlbmd0aC0xKX13aGlsZSgtLUU+PS0xKTt5PUMuZ2V0Q2hhbmdlcygpfXJldHVybiB0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyh2LHkpfUNvbXB1dGVSZWN1cnNpb25Qb2ludChlLHQsbixyLGksbyxhKXtsZXQgcz0wLGM9MCxsPTAsdT0wLGg9MCxmPTA7ZS0tLG4tLSxpWzBdPTAsb1swXT0wLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W107Y29uc3QgZD10LWUrKHItbiksbT1kKzEsZz1uZXcgSW50MzJBcnJheShtKSxwPW5ldyBJbnQzMkFycmF5KG0pLGI9ci1uLHY9dC1lLHk9ZS1uLEM9dC1yLHc9KHYtYiklMj09MDtnW2JdPWUscFt2XT10LGFbMF09ITE7Zm9yKGxldCBfPTE7Xzw9ZC8yKzE7XysrKXtsZXQgZD0wLFM9MDtsPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoYi1fLF8sYixtKSx1PXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoYitfLF8sYixtKTtmb3IobGV0IGU9bDtlPD11O2UrPTIpe3M9ZT09PWx8fGU8dSYmZ1tlLTFdPGdbZSsxXT9nW2UrMV06Z1tlLTFdKzEsYz1zLShlLWIpLXk7Y29uc3Qgbj1zO2Zvcig7czx0JiZjPHImJnRoaXMuRWxlbWVudHNBcmVFcXVhbChzKzEsYysxKTspcysrLGMrKztpZihnW2VdPXMscytjPmQrUyYmKGQ9cyxTPWMpLCF3JiZNYXRoLmFicyhlLXYpPD1fLTEmJnM+PXBbZV0pcmV0dXJuIGlbMF09cyxvWzBdPWMsbjw9cFtlXSYmXzw9MTQ0OD90aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSk6bnVsbH1jb25zdCBBPShkLWUrKFMtbiktXykvMjtpZihudWxsIT09dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUmJiF0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZShkLEEpKXJldHVybiBhWzBdPSEwLGlbMF09ZCxvWzBdPVMsQT4wJiZfPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKGIsbCx1LHksdixoLGYsQyxnLHAscyx0LGksYyxyLG8sdyxhKTooZSsrLG4rKyxbbmV3IHVlKGUsdC1lKzEsbixyLW4rMSldKTtoPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQodi1fLF8sdixtKSxmPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoditfLF8sdixtKTtmb3IobGV0IGQ9aDtkPD1mO2QrPTIpe3M9ZD09PWh8fGQ8ZiYmcFtkLTFdPj1wW2QrMV0/cFtkKzFdLTE6cFtkLTFdLGM9cy0oZC12KS1DO2NvbnN0IG09cztmb3IoO3M+ZSYmYz5uJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwocyxjKTspcy0tLGMtLTtpZihwW2RdPXMsdyYmTWF0aC5hYnMoZC1iKTw9XyYmczw9Z1tkXSlyZXR1cm4gaVswXT1zLG9bMF09YyxtPj1nW2RdJiZfPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKGIsbCx1LHksdixoLGYsQyxnLHAscyx0LGksYyxyLG8sdyxhKTpudWxsfWlmKF88PTE0NDcpe2xldCBlPW5ldyBJbnQzMkFycmF5KHUtbCsyKTtlWzBdPWItbCsxLHBlLkNvcHkyKGcsbCxlLDEsdS1sKzEpLHRoaXMubV9mb3J3YXJkSGlzdG9yeS5wdXNoKGUpLGU9bmV3IEludDMyQXJyYXkoZi1oKzIpLGVbMF09di1oKzEscGUuQ29weTIocCxoLGUsMSxmLWgrMSksdGhpcy5tX3JldmVyc2VIaXN0b3J5LnB1c2goZSl9fXJldHVybiB0aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSl9UHJldHRpZnlDaGFuZ2VzKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBuPWVbdF0scj10PGUubGVuZ3RoLTE/ZVt0KzFdLm9yaWdpbmFsU3RhcnQ6dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgsaT10PGUubGVuZ3RoLTE/ZVt0KzFdLm1vZGlmaWVkU3RhcnQ6dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgsbz1uLm9yaWdpbmFsTGVuZ3RoPjAsYT1uLm1vZGlmaWVkTGVuZ3RoPjA7Zm9yKDtuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aDxyJiZuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aDxpJiYoIW98fHRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKG4ub3JpZ2luYWxTdGFydCxuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCkpJiYoIWF8fHRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKG4ubW9kaWZpZWRTdGFydCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCkpOyl7Y29uc3QgZT10aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwobi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRTdGFydCk7aWYodGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKSYmIWUpYnJlYWs7bi5vcmlnaW5hbFN0YXJ0Kyssbi5tb2RpZmllZFN0YXJ0Kyt9Y29uc3Qgcz1bbnVsbF07dDxlLmxlbmd0aC0xJiZ0aGlzLkNoYW5nZXNPdmVybGFwKGVbdF0sZVt0KzFdLHMpJiYoZVt0XT1zWzBdLGUuc3BsaWNlKHQrMSwxKSx0LS0pfWZvcihsZXQgdD1lLmxlbmd0aC0xO3Q+PTA7dC0tKXtjb25zdCBuPWVbdF07bGV0IHI9MCxpPTA7aWYodD4wKXtjb25zdCBuPWVbdC0xXTtyPW4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLGk9bi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGh9Y29uc3Qgbz1uLm9yaWdpbmFsTGVuZ3RoPjAsYT1uLm1vZGlmaWVkTGVuZ3RoPjA7bGV0IHM9MCxjPXRoaXMuX2JvdW5kYXJ5U2NvcmUobi5vcmlnaW5hbFN0YXJ0LG4ub3JpZ2luYWxMZW5ndGgsbi5tb2RpZmllZFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGgpO2ZvcihsZXQgZT0xOztlKyspe2NvbnN0IHQ9bi5vcmlnaW5hbFN0YXJ0LWUsbD1uLm1vZGlmaWVkU3RhcnQtZTtpZih0PHJ8fGw8aSlicmVhaztpZihvJiYhdGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwodCx0K24ub3JpZ2luYWxMZW5ndGgpKWJyZWFrO2lmKGEmJiF0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChsLGwrbi5tb2RpZmllZExlbmd0aCkpYnJlYWs7Y29uc3QgdT0odD09PXImJmw9PT1pPzU6MCkrdGhpcy5fYm91bmRhcnlTY29yZSh0LG4ub3JpZ2luYWxMZW5ndGgsbCxuLm1vZGlmaWVkTGVuZ3RoKTt1PmMmJihjPXUscz1lKX1uLm9yaWdpbmFsU3RhcnQtPXMsbi5tb2RpZmllZFN0YXJ0LT1zO2NvbnN0IGw9W251bGxdO3Q+MCYmdGhpcy5DaGFuZ2VzT3ZlcmxhcChlW3QtMV0sZVt0XSxsKSYmKGVbdC0xXT1sWzBdLGUuc3BsaWNlKHQsMSksdCsrKX1pZih0aGlzLl9oYXNTdHJpbmdzKWZvcihsZXQgdD0xLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1lW3QtMV0scj1lW3RdLGk9ci5vcmlnaW5hbFN0YXJ0LW4ub3JpZ2luYWxTdGFydC1uLm9yaWdpbmFsTGVuZ3RoLG89bi5vcmlnaW5hbFN0YXJ0LGE9ci5vcmlnaW5hbFN0YXJ0K3Iub3JpZ2luYWxMZW5ndGgscz1hLW8sYz1uLm1vZGlmaWVkU3RhcnQsbD1yLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aCx1PWwtYztpZihpPDUmJnM8MjAmJnU8MjApe2NvbnN0IGU9dGhpcy5fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShvLHMsYyx1LGkpO2lmKGUpe2NvbnN0W3Qsb109ZTt0PT09bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgmJm89PT1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aHx8KG4ub3JpZ2luYWxMZW5ndGg9dC1uLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZExlbmd0aD1vLW4ubW9kaWZpZWRTdGFydCxyLm9yaWdpbmFsU3RhcnQ9dCtpLHIubW9kaWZpZWRTdGFydD1vK2ksci5vcmlnaW5hbExlbmd0aD1hLXIub3JpZ2luYWxTdGFydCxyLm1vZGlmaWVkTGVuZ3RoPWwtci5tb2RpZmllZFN0YXJ0KX19fXJldHVybiBlfV9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKGUsdCxuLHIsaSl7aWYodDxpfHxyPGkpcmV0dXJuIG51bGw7Y29uc3Qgbz1lK3QtaSsxLGE9bityLWkrMTtsZXQgcz0wLGM9MCxsPTA7Zm9yKGxldCB0PWU7dDxvO3QrKylmb3IobGV0IGU9bjtlPGE7ZSsrKXtjb25zdCBuPXRoaXMuX2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKHQsZSxpKTtuPjAmJm4+cyYmKHM9bixjPXQsbD1lKX1yZXR1cm4gcz4wP1tjLGxdOm51bGx9X2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKGUsdCxuKXtsZXQgcj0wO2ZvcihsZXQgaT0wO2k8bjtpKyspe2lmKCF0aGlzLkVsZW1lbnRzQXJlRXF1YWwoZStpLHQraSkpcmV0dXJuIDA7cis9dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlK2ldLmxlbmd0aH1yZXR1cm4gcn1fT3JpZ2luYWxJc0JvdW5kYXJ5KGUpe3JldHVybiBlPD0wfHxlPj10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xfHx0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXSl9X09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeShlLHQpe2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShlKXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGUtMSkpcmV0dXJuITA7aWYodD4wKXtjb25zdCBuPWUrdDtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkobi0xKXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KG4pKXJldHVybiEwfXJldHVybiExfV9Nb2RpZmllZElzQm91bmRhcnkoZSl7cmV0dXJuIGU8PTB8fGU+PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTF8fHRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW2VdKX1fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KGUsdCl7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGUpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoZS0xKSlyZXR1cm4hMDtpZih0PjApe2NvbnN0IG49ZSt0O2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShuLTEpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkobikpcmV0dXJuITB9cmV0dXJuITF9X2JvdW5kYXJ5U2NvcmUoZSx0LG4scil7cmV0dXJuKHRoaXMuX09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeShlLHQpPzE6MCkrKHRoaXMuX01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeShuLHIpPzE6MCl9Q29uY2F0ZW5hdGVDaGFuZ2VzKGUsdCl7Y29uc3Qgbj1bXTtpZigwPT09ZS5sZW5ndGh8fDA9PT10Lmxlbmd0aClyZXR1cm4gdC5sZW5ndGg+MD90OmU7aWYodGhpcy5DaGFuZ2VzT3ZlcmxhcChlW2UubGVuZ3RoLTFdLHRbMF0sbikpe2NvbnN0IHI9bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoLTEpO3JldHVybiBwZS5Db3B5KGUsMCxyLDAsZS5sZW5ndGgtMSkscltlLmxlbmd0aC0xXT1uWzBdLHBlLkNvcHkodCwxLHIsZS5sZW5ndGgsdC5sZW5ndGgtMSkscn17Y29uc3Qgbj1uZXcgQXJyYXkoZS5sZW5ndGgrdC5sZW5ndGgpO3JldHVybiBwZS5Db3B5KGUsMCxuLDAsZS5sZW5ndGgpLHBlLkNvcHkodCwwLG4sZS5sZW5ndGgsdC5sZW5ndGgpLG59fUNoYW5nZXNPdmVybGFwKGUsdCxuKXtpZihnZS5Bc3NlcnQoZS5vcmlnaW5hbFN0YXJ0PD10Lm9yaWdpbmFsU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksZ2UuQXNzZXJ0KGUubW9kaWZpZWRTdGFydDw9dC5tb2RpZmllZFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoPj10Lm9yaWdpbmFsU3RhcnR8fGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoPj10Lm1vZGlmaWVkU3RhcnQpe2NvbnN0IHI9ZS5vcmlnaW5hbFN0YXJ0O2xldCBpPWUub3JpZ2luYWxMZW5ndGg7Y29uc3Qgbz1lLm1vZGlmaWVkU3RhcnQ7bGV0IGE9ZS5tb2RpZmllZExlbmd0aDtyZXR1cm4gZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGg+PXQub3JpZ2luYWxTdGFydCYmKGk9dC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtZS5vcmlnaW5hbFN0YXJ0KSxlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aD49dC5tb2RpZmllZFN0YXJ0JiYoYT10Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC1lLm1vZGlmaWVkU3RhcnQpLG5bMF09bmV3IHVlKHIsaSxvLGEpLCEwfXJldHVybiBuWzBdPW51bGwsITF9Q2xpcERpYWdvbmFsQm91bmQoZSx0LG4scil7aWYoZT49MCYmZTxyKXJldHVybiBlO2NvbnN0IGk9dCUyPT0wO2lmKGU8MCl7cmV0dXJuIGk9PT0obiUyPT0wKT8wOjF9cmV0dXJuIGk9PT0oKHItbi0xKSUyPT0wKT9yLTE6ci0yfX1sZXQgeWU7aWYodm9pZCAwIT09Ti52c2NvZGUmJnZvaWQgMCE9PU4udnNjb2RlLnByb2Nlc3Mpe2NvbnN0IGU9Ti52c2NvZGUucHJvY2Vzczt5ZT17Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIGUucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIGUuYXJjaH0sZ2V0IGVudigpe3JldHVybiBlLmVudn0sY3dkOigpPT5lLmN3ZCgpfX1lbHNlIHllPSJ1bmRlZmluZWQiIT10eXBlb2YgcHJvY2Vzcz97Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIHByb2Nlc3MucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIHByb2Nlc3MuYXJjaH0sZ2V0IGVudigpe3JldHVybiBwcm9jZXNzLmVudn0sY3dkOigpPT5wcm9jZXNzLmVudi5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfTp7Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIFQ/IndpbjMyIjpPPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZDooKT0+Ii8ifTtjb25zdCBDZT15ZS5jd2Qsd2U9eWUuZW52LF9lPXllLnBsYXRmb3JtLFNlPTQ2LEFlPTQ3LEVlPTkyLHhlPTU4O2NsYXNzIE5lIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LG4pe2xldCByOyJzdHJpbmciPT10eXBlb2YgdCYmMD09PXQuaW5kZXhPZigibm90ICIpPyhyPSJtdXN0IG5vdCBiZSIsdD10LnJlcGxhY2UoL15ub3QgLywiIikpOnI9Im11c3QgYmUiO2NvbnN0IGk9LTEhPT1lLmluZGV4T2YoIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7bGV0IG89YFRoZSAiJHtlfSIgJHtpfSAke3J9IG9mIHR5cGUgJHt0fWA7bys9Ii4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBuLHN1cGVyKG8pLHRoaXMuY29kZT0iRVJSX0lOVkFMSURfQVJHX1RZUEUifX1mdW5jdGlvbiBrZShlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgTmUodCwic3RyaW5nIixlKX1mdW5jdGlvbiBMZShlKXtyZXR1cm4gZT09PUFlfHxlPT09RWV9ZnVuY3Rpb24gVGUoZSl7cmV0dXJuIGU9PT1BZX1mdW5jdGlvbiBPZShlKXtyZXR1cm4gZT49NjUmJmU8PTkwfHxlPj05NyYmZTw9MTIyfWZ1bmN0aW9uIEllKGUsdCxuLHIpe2xldCBpPSIiLG89MCxhPS0xLHM9MCxjPTA7Zm9yKGxldCBsPTA7bDw9ZS5sZW5ndGg7KytsKXtpZihsPGUubGVuZ3RoKWM9ZS5jaGFyQ29kZUF0KGwpO2Vsc2V7aWYocihjKSlicmVhaztjPUFlfWlmKHIoYykpe2lmKGE9PT1sLTF8fDE9PT1zKTtlbHNlIGlmKDI9PT1zKXtpZihpLmxlbmd0aDwyfHwyIT09b3x8aS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09U2V8fGkuY2hhckNvZGVBdChpLmxlbmd0aC0yKSE9PVNlKXtpZihpLmxlbmd0aD4yKXtjb25zdCBlPWkubGFzdEluZGV4T2Yobik7LTE9PT1lPyhpPSIiLG89MCk6KGk9aS5zbGljZSgwLGUpLG89aS5sZW5ndGgtMS1pLmxhc3RJbmRleE9mKG4pKSxhPWwscz0wO2NvbnRpbnVlfWlmKDAhPT1pLmxlbmd0aCl7aT0iIixvPTAsYT1sLHM9MDtjb250aW51ZX19dCYmKGkrPWkubGVuZ3RoPjA/YCR7bn0uLmA6Ii4uIixvPTIpfWVsc2UgaS5sZW5ndGg+MD9pKz1gJHtufSR7ZS5zbGljZShhKzEsbCl9YDppPWUuc2xpY2UoYSsxLGwpLG89bC1hLTE7YT1sLHM9MH1lbHNlIGM9PT1TZSYmLTEhPT1zPysrczpzPS0xfXJldHVybiBpfWZ1bmN0aW9uIE1lKGUsdCl7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBuZXcgTmUoInBhdGhPYmplY3QiLCJPYmplY3QiLHQpO2NvbnN0IG49dC5kaXJ8fHQucm9vdCxyPXQuYmFzZXx8YCR7dC5uYW1lfHwiIn0ke3QuZXh0fHwiIn1gO3JldHVybiBuP249PT10LnJvb3Q/YCR7bn0ke3J9YDpgJHtufSR7ZX0ke3J9YDpyfWNvbnN0IFBlPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49IiIscj0hMTtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0tMTtpLS0pe2xldCBvO2lmKGk+PTApe2lmKG89ZVtpXSxrZShvLCJwYXRoIiksMD09PW8ubGVuZ3RoKWNvbnRpbnVlfWVsc2UgMD09PXQubGVuZ3RoP289Q2UoKToobz13ZVtgPSR7dH1gXXx8Q2UoKSwodm9pZCAwPT09b3x8by5zbGljZSgwLDIpLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkmJm8uY2hhckNvZGVBdCgyKT09PUVlKSYmKG89YCR7dH1cXGApKTtjb25zdCBhPW8ubGVuZ3RoO2xldCBzPTAsYz0iIixsPSExO2NvbnN0IHU9by5jaGFyQ29kZUF0KDApO2lmKDE9PT1hKUxlKHUpJiYocz0xLGw9ITApO2Vsc2UgaWYoTGUodSkpaWYobD0hMCxMZShvLmNoYXJDb2RlQXQoMSkpKXtsZXQgZT0yLHQ9ZTtmb3IoO2U8YSYmIUxlKG8uY2hhckNvZGVBdChlKSk7KWUrKztpZihlPGEmJmUhPT10KXtjb25zdCBuPW8uc2xpY2UodCxlKTtmb3IodD1lO2U8YSYmTGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8YSYmZSE9PXQpe2Zvcih0PWU7ZTxhJiYhTGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2UhPT1hJiZlPT09dHx8KGM9YFxcXFwke259XFwke28uc2xpY2UodCxlKX1gLHM9ZSl9fX1lbHNlIHM9MTtlbHNlIE9lKHUpJiZvLmNoYXJDb2RlQXQoMSk9PT14ZSYmKGM9by5zbGljZSgwLDIpLHM9MixhPjImJkxlKG8uY2hhckNvZGVBdCgyKSkmJihsPSEwLHM9MykpO2lmKGMubGVuZ3RoPjApaWYodC5sZW5ndGg+MCl7aWYoYy50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWVsc2UgdD1jO2lmKHIpe2lmKHQubGVuZ3RoPjApYnJlYWt9ZWxzZSBpZihuPWAke28uc2xpY2Uocyl9XFwke259YCxyPWwsbCYmdC5sZW5ndGg+MClicmVha31yZXR1cm4gbj1JZShuLCFyLCJcXCIsTGUpLHI/YCR7dH1cXCR7bn1gOmAke3R9JHtufWB8fCIuIn0sbm9ybWFsaXplKGUpe2tlKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKDA9PT10KXJldHVybiIuIjtsZXQgbixyPTAsaT0hMTtjb25zdCBvPWUuY2hhckNvZGVBdCgwKTtpZigxPT09dClyZXR1cm4gVGUobyk/IlxcIjplO2lmKExlKG8pKWlmKGk9ITAsTGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiFMZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Y29uc3QgYT1lLnNsaWNlKG8saSk7Zm9yKG89aTtpPHQmJkxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIUxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm5gXFxcXCR7YX1cXCR7ZS5zbGljZShvKX1cXGA7aSE9PW8mJihuPWBcXFxcJHthfVxcJHtlLnNsaWNlKG8saSl9YCxyPWkpfX19ZWxzZSByPTE7ZWxzZSBPZShvKSYmZS5jaGFyQ29kZUF0KDEpPT09eGUmJihuPWUuc2xpY2UoMCwyKSxyPTIsdD4yJiZMZShlLmNoYXJDb2RlQXQoMikpJiYoaT0hMCxyPTMpKTtsZXQgYT1yPHQ/SWUoZS5zbGljZShyKSwhaSwiXFwiLExlKToiIjtyZXR1cm4gMCE9PWEubGVuZ3RofHxpfHwoYT0iLiIpLGEubGVuZ3RoPjAmJkxlKGUuY2hhckNvZGVBdCh0LTEpKSYmKGErPSJcXCIpLHZvaWQgMD09PW4/aT9gXFwke2F9YDphOmk/YCR7bn1cXCR7YX1gOmAke259JHthfWB9LGlzQWJzb2x1dGUoZSl7a2UoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuITE7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIExlKG4pfHx0PjImJk9lKG4pJiZlLmNoYXJDb2RlQXQoMSk9PT14ZSYmTGUoZS5jaGFyQ29kZUF0KDIpKX0sam9pbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2xldCB0LG47Zm9yKGxldCByPTA7cjxlLmxlbmd0aDsrK3Ipe2NvbnN0IGk9ZVtyXTtrZShpLCJwYXRoIiksaS5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1uPWk6dCs9YFxcJHtpfWApfWlmKHZvaWQgMD09PXQpcmV0dXJuIi4iO2xldCByPSEwLGk9MDtpZigic3RyaW5nIj09dHlwZW9mIG4mJkxlKG4uY2hhckNvZGVBdCgwKSkpeysraTtjb25zdCBlPW4ubGVuZ3RoO2U+MSYmTGUobi5jaGFyQ29kZUF0KDEpKSYmKCsraSxlPjImJihMZShuLmNoYXJDb2RlQXQoMikpPysraTpyPSExKSl9aWYocil7Zm9yKDtpPHQubGVuZ3RoJiZMZSh0LmNoYXJDb2RlQXQoaSkpOylpKys7aT49MiYmKHQ9YFxcJHt0LnNsaWNlKGkpfWApfXJldHVybiBQZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoa2UoZSwiZnJvbSIpLGtlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj1QZS5yZXNvbHZlKGUpLHI9UGUucmVzb2x2ZSh0KTtpZihuPT09cilyZXR1cm4iIjtpZigoZT1uLnRvTG93ZXJDYXNlKCkpPT09KHQ9ci50b0xvd2VyQ2FzZSgpKSlyZXR1cm4iIjtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KGkpPT09RWU7KWkrKztsZXQgbz1lLmxlbmd0aDtmb3IoO28tMT5pJiZlLmNoYXJDb2RlQXQoby0xKT09PUVlOylvLS07Y29uc3QgYT1vLWk7bGV0IHM9MDtmb3IoO3M8dC5sZW5ndGgmJnQuY2hhckNvZGVBdChzKT09PUVlOylzKys7bGV0IGM9dC5sZW5ndGg7Zm9yKDtjLTE+cyYmdC5jaGFyQ29kZUF0KGMtMSk9PT1FZTspYy0tO2NvbnN0IGw9Yy1zLHU9YTxsP2E6bDtsZXQgaD0tMSxmPTA7Zm9yKDtmPHU7ZisrKXtjb25zdCBuPWUuY2hhckNvZGVBdChpK2YpO2lmKG4hPT10LmNoYXJDb2RlQXQocytmKSlicmVhaztuPT09RWUmJihoPWYpfWlmKGYhPT11KXtpZigtMT09PWgpcmV0dXJuIHJ9ZWxzZXtpZihsPnUpe2lmKHQuY2hhckNvZGVBdChzK2YpPT09RWUpcmV0dXJuIHIuc2xpY2UocytmKzEpO2lmKDI9PT1mKXJldHVybiByLnNsaWNlKHMrZil9YT51JiYoZS5jaGFyQ29kZUF0KGkrZik9PT1FZT9oPWY6Mj09PWYmJihoPTMpKSwtMT09PWgmJihoPTApfWxldCBkPSIiO2ZvcihmPWkraCsxO2Y8PW87KytmKWYhPT1vJiZlLmNoYXJDb2RlQXQoZikhPT1FZXx8KGQrPTA9PT1kLmxlbmd0aD8iLi4iOiJcXC4uIik7cmV0dXJuIHMrPWgsZC5sZW5ndGg+MD9gJHtkfSR7ci5zbGljZShzLGMpfWA6KHIuY2hhckNvZGVBdChzKT09PUVlJiYrK3Msci5zbGljZShzLGMpKX0sdG9OYW1lc3BhY2VkUGF0aChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIGU7aWYoMD09PWUubGVuZ3RoKXJldHVybiIiO2NvbnN0IHQ9UGUucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1FZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09RWUpe2NvbnN0IGU9dC5jaGFyQ29kZUF0KDIpO2lmKDYzIT09ZSYmZSE9PVNlKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihPZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT14ZSYmdC5jaGFyQ29kZUF0KDIpPT09RWUpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4iLiI7bGV0IG49LTEscj0wO2NvbnN0IGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT10KXJldHVybiBMZShpKT9lOiIuIjtpZihMZShpKSl7aWYobj1yPTEsTGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiFMZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Zm9yKG89aTtpPHQmJkxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIUxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm4gZTtpIT09byYmKG49cj1pKzEpfX19fWVsc2UgT2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PXhlJiYobj10PjImJkxlKGUuY2hhckNvZGVBdCgyKSk/MzoyLHI9bik7bGV0IG89LTEsYT0hMDtmb3IobGV0IG49dC0xO24+PXI7LS1uKWlmKExlKGUuY2hhckNvZGVBdChuKSkpe2lmKCFhKXtvPW47YnJlYWt9fWVsc2UgYT0hMTtpZigtMT09PW8pe2lmKC0xPT09bilyZXR1cm4iLiI7bz1ufXJldHVybiBlLnNsaWNlKDAsbyl9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYoZS5sZW5ndGg+PTImJk9lKGUuY2hhckNvZGVBdCgwKSkmJmUuY2hhckNvZGVBdCgxKT09PXhlJiYocj0yKSx2b2lkIDAhPT10JiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBhPXQubGVuZ3RoLTEscz0tMTtmb3Iobj1lLmxlbmd0aC0xO24+PXI7LS1uKXtjb25zdCBjPWUuY2hhckNvZGVBdChuKTtpZihMZShjKSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1zJiYobz0hMSxzPW4rMSksYT49MCYmKGM9PT10LmNoYXJDb2RlQXQoYSk/LTE9PS0tYSYmKGk9bik6KGE9LTEsaT1zKSl9cmV0dXJuIHI9PT1pP2k9czotMT09PWkmJihpPWUubGVuZ3RoKSxlLnNsaWNlKHIsaSl9Zm9yKG49ZS5sZW5ndGgtMTtuPj1yOy0tbilpZihMZShlLmNoYXJDb2RlQXQobikpKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0wLG49LTEscj0wLGk9LTEsbz0hMCxhPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PXhlJiZPZShlLmNoYXJDb2RlQXQoMCkpJiYodD1yPTIpO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PXQ7LS1zKXtjb25zdCB0PWUuY2hhckNvZGVBdChzKTtpZihMZSh0KSl7aWYoIW8pe3I9cysxO2JyZWFrfX1lbHNlLTE9PT1pJiYobz0hMSxpPXMrMSksdD09PVNlPy0xPT09bj9uPXM6MSE9PWEmJihhPTEpOi0xIT09biYmKGE9LTEpfXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09YXx8MT09PWEmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6TWUuYmluZChudWxsLCJcXCIpLHBhcnNlKGUpe2tlKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7Y29uc3Qgbj1lLmxlbmd0aDtsZXQgcj0wLGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiBMZShpKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZihMZShpKSl7aWYocj0xLExlKGUuY2hhckNvZGVBdCgxKSkpe2xldCB0PTIsaT10O2Zvcig7dDxuJiYhTGUoZS5jaGFyQ29kZUF0KHQpKTspdCsrO2lmKHQ8biYmdCE9PWkpe2ZvcihpPXQ7dDxuJiZMZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7aWYodDxuJiZ0IT09aSl7Zm9yKGk9dDt0PG4mJiFMZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7dD09PW4/cj10OnQhPT1pJiYocj10KzEpfX19fWVsc2UgaWYoT2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PXhlKXtpZihuPD0yKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O2lmKHI9MixMZShlLmNoYXJDb2RlQXQoMikpKXtpZigzPT09bilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtyPTN9fXI+MCYmKHQucm9vdD1lLnNsaWNlKDAscikpO2xldCBvPS0xLGE9cixzPS0xLGM9ITAsbD1lLmxlbmd0aC0xLHU9MDtmb3IoO2w+PXI7LS1sKWlmKGk9ZS5jaGFyQ29kZUF0KGwpLExlKGkpKXtpZighYyl7YT1sKzE7YnJlYWt9fWVsc2UtMT09PXMmJihjPSExLHM9bCsxKSxpPT09U2U/LTE9PT1vP289bDoxIT09dSYmKHU9MSk6LTEhPT1vJiYodT0tMSk7cmV0dXJuLTEhPT1zJiYoLTE9PT1vfHwwPT09dXx8MT09PXUmJm89PT1zLTEmJm89PT1hKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGEscyk6KHQubmFtZT1lLnNsaWNlKGEsbyksdC5iYXNlPWUuc2xpY2UoYSxzKSx0LmV4dD1lLnNsaWNlKG8scykpKSx0LmRpcj1hPjAmJmEhPT1yP2Uuc2xpY2UoMCxhLTEpOnQucm9vdCx0fSxzZXA6IlxcIixkZWxpbWl0ZXI6IjsiLHdpbjMyOm51bGwscG9zaXg6bnVsbH0sUmU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0hMTtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0tMSYmIW47ci0tKXtjb25zdCBpPXI+PTA/ZVtyXTpDZSgpO2tlKGksInBhdGgiKSwwIT09aS5sZW5ndGgmJih0PWAke2l9LyR7dH1gLG49aS5jaGFyQ29kZUF0KDApPT09QWUpfXJldHVybiB0PUllKHQsIW4sIi8iLFRlKSxuP2AvJHt0fWA6dC5sZW5ndGg+MD90OiIuIn0sbm9ybWFsaXplKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09QWUsbj1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk9PT1BZTtyZXR1cm4gMD09PShlPUllKGUsIXQsIi8iLFRlKSkubGVuZ3RoP3Q/Ii8iOm4/Ii4vIjoiLiI6KG4mJihlKz0iLyIpLHQ/YC8ke2V9YDplKX0saXNBYnNvbHV0ZTplPT4oa2UoZSwicGF0aCIpLGUubGVuZ3RoPjAmJmUuY2hhckNvZGVBdCgwKT09PUFlKSxqb2luKC4uLmUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDsrK24pe2NvbnN0IHI9ZVtuXTtrZShyLCJwYXRoIiksci5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1yOnQrPWAvJHtyfWApfXJldHVybiB2b2lkIDA9PT10PyIuIjpSZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoa2UoZSwiZnJvbSIpLGtlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7aWYoKGU9UmUucmVzb2x2ZShlKSk9PT0odD1SZS5yZXNvbHZlKHQpKSlyZXR1cm4iIjtjb25zdCBuPWUubGVuZ3RoLHI9bi0xLGk9dC5sZW5ndGgtMSxvPXI8aT9yOmk7bGV0IGE9LTEscz0wO2Zvcig7czxvO3MrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMStzKTtpZihuIT09dC5jaGFyQ29kZUF0KDErcykpYnJlYWs7bj09PUFlJiYoYT1zKX1pZihzPT09bylpZihpPm8pe2lmKHQuY2hhckNvZGVBdCgxK3MpPT09QWUpcmV0dXJuIHQuc2xpY2UoMStzKzEpO2lmKDA9PT1zKXJldHVybiB0LnNsaWNlKDErcyl9ZWxzZSByPm8mJihlLmNoYXJDb2RlQXQoMStzKT09PUFlP2E9czowPT09cyYmKGE9MCkpO2xldCBjPSIiO2ZvcihzPTErYSsxO3M8PW47KytzKXMhPT1uJiZlLmNoYXJDb2RlQXQocykhPT1BZXx8KGMrPTA9PT1jLmxlbmd0aD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtjfSR7dC5zbGljZSgxK2EpfWB9LHRvTmFtZXNwYWNlZFBhdGg6ZT0+ZSxkaXJuYW1lKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09QWU7bGV0IG49LTEscj0hMDtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0xOy0tdClpZihlLmNoYXJDb2RlQXQodCk9PT1BZSl7aWYoIXIpe249dDticmVha319ZWxzZSByPSExO3JldHVybi0xPT09bj90PyIvIjoiLiI6dCYmMT09PW4/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYodm9pZCAwIT09dCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLHM9LTE7Zm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7Y29uc3QgYz1lLmNoYXJDb2RlQXQobik7aWYoYz09PUFlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PXMmJihvPSExLHM9bisxKSxhPj0wJiYoYz09PXQuY2hhckNvZGVBdChhKT8tMT09LS1hJiYoaT1uKTooYT0tMSxpPXMpKX1yZXR1cm4gcj09PWk/aT1zOi0xPT09aSYmKGk9ZS5sZW5ndGgpLGUuc2xpY2UocixpKX1mb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWlmKGUuY2hhckNvZGVBdChuKT09PUFlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0tMSxuPTAscj0tMSxpPSEwLG89MDtmb3IobGV0IGE9ZS5sZW5ndGgtMTthPj0wOy0tYSl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQoYSk7aWYocyE9PUFlKS0xPT09ciYmKGk9ITEscj1hKzEpLHM9PT1TZT8tMT09PXQ/dD1hOjEhPT1vJiYobz0xKTotMSE9PXQmJihvPS0xKTtlbHNlIGlmKCFpKXtuPWErMTticmVha319cmV0dXJuLTE9PT10fHwtMT09PXJ8fDA9PT1vfHwxPT09byYmdD09PXItMSYmdD09PW4rMT8iIjplLnNsaWNlKHQscil9LGZvcm1hdDpNZS5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09QWU7bGV0IHI7bj8odC5yb290PSIvIixyPTEpOnI9MDtsZXQgaT0tMSxvPTAsYT0tMSxzPSEwLGM9ZS5sZW5ndGgtMSxsPTA7Zm9yKDtjPj1yOy0tYyl7Y29uc3QgdD1lLmNoYXJDb2RlQXQoYyk7aWYodCE9PUFlKS0xPT09YSYmKHM9ITEsYT1jKzEpLHQ9PT1TZT8tMT09PWk/aT1jOjEhPT1sJiYobD0xKTotMSE9PWkmJihsPS0xKTtlbHNlIGlmKCFzKXtvPWMrMTticmVha319aWYoLTEhPT1hKXtjb25zdCByPTA9PT1vJiZuPzE6bzstMT09PWl8fDA9PT1sfHwxPT09bCYmaT09PWEtMSYmaT09PW8rMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UocixhKToodC5uYW1lPWUuc2xpY2UocixpKSx0LmJhc2U9ZS5zbGljZShyLGEpLHQuZXh0PWUuc2xpY2UoaSxhKSl9cmV0dXJuIG8+MD90LmRpcj1lLnNsaWNlKDAsby0xKTpuJiYodC5kaXI9Ii8iKSx0fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtSZS53aW4zMj1QZS53aW4zMj1QZSxSZS5wb3NpeD1QZS5wb3NpeD1SZSwid2luMzIiPT09X2U/UGUubm9ybWFsaXplOlJlLm5vcm1hbGl6ZSwid2luMzIiPT09X2U/UGUucmVzb2x2ZTpSZS5yZXNvbHZlLCJ3aW4zMiI9PT1fZT9QZS5yZWxhdGl2ZTpSZS5yZWxhdGl2ZSwid2luMzIiPT09X2U/UGUuZGlybmFtZTpSZS5kaXJuYW1lLCJ3aW4zMiI9PT1fZT9QZS5iYXNlbmFtZTpSZS5iYXNlbmFtZSwid2luMzIiPT09X2U/UGUuZXh0bmFtZTpSZS5leHRuYW1lLCJ3aW4zMiI9PT1fZT9QZS5zZXA6UmUuc2VwO2NvbnN0IFZlPS9eXHdbXHdcZCsuLV0qJC8sRmU9L15cLy8sRGU9L15cL1wvLztmdW5jdGlvbiBLZShlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIVZlLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFGZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihEZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9Y29uc3QgamU9IiIsVWU9Ii8iLEJlPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2xldCBxZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbixyLGksbz0hMSl7Im9iamVjdCI9PXR5cGVvZiBlPyh0aGlzLnNjaGVtZT1lLnNjaGVtZXx8amUsdGhpcy5hdXRob3JpdHk9ZS5hdXRob3JpdHl8fGplLHRoaXMucGF0aD1lLnBhdGh8fGplLHRoaXMucXVlcnk9ZS5xdWVyeXx8amUsdGhpcy5mcmFnbWVudD1lLmZyYWdtZW50fHxqZSk6KHRoaXMuc2NoZW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV8fHQ/ZToiZmlsZSJ9KGUsbyksdGhpcy5hdXRob3JpdHk9dHx8amUsdGhpcy5wYXRoPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0P3RbMF0hPT1VZSYmKHQ9VWUrdCk6dD1VZX1yZXR1cm4gdH0odGhpcy5zY2hlbWUsbnx8amUpLHRoaXMucXVlcnk9cnx8amUsdGhpcy5mcmFnbWVudD1pfHxqZSxLZSh0aGlzLG8pKX1zdGF0aWMgaXNVcmkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBxZXx8ISFlJiYoInN0cmluZyI9PXR5cGVvZiBlLmF1dGhvcml0eSYmInN0cmluZyI9PXR5cGVvZiBlLmZyYWdtZW50JiYic3RyaW5nIj09dHlwZW9mIGUucGF0aCYmInN0cmluZyI9PXR5cGVvZiBlLnF1ZXJ5JiYic3RyaW5nIj09dHlwZW9mIGUuc2NoZW1lJiYic3RyaW5nIj09dHlwZW9mIGUuZnNQYXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS53aXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS50b1N0cmluZyl9Z2V0IGZzUGF0aCgpe3JldHVybiBKZSh0aGlzLCExKX13aXRoKGUpe2lmKCFlKXJldHVybiB0aGlzO2xldHtzY2hlbWU6dCxhdXRob3JpdHk6bixwYXRoOnIscXVlcnk6aSxmcmFnbWVudDpvfT1lO3JldHVybiB2b2lkIDA9PT10P3Q9dGhpcy5zY2hlbWU6bnVsbD09PXQmJih0PWplKSx2b2lkIDA9PT1uP249dGhpcy5hdXRob3JpdHk6bnVsbD09PW4mJihuPWplKSx2b2lkIDA9PT1yP3I9dGhpcy5wYXRoOm51bGw9PT1yJiYocj1qZSksdm9pZCAwPT09aT9pPXRoaXMucXVlcnk6bnVsbD09PWkmJihpPWplKSx2b2lkIDA9PT1vP289dGhpcy5mcmFnbWVudDpudWxsPT09byYmKG89amUpLHQ9PT10aGlzLnNjaGVtZSYmbj09PXRoaXMuYXV0aG9yaXR5JiZyPT09dGhpcy5wYXRoJiZpPT09dGhpcy5xdWVyeSYmbz09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgV2UodCxuLHIsaSxvKX1zdGF0aWMgcGFyc2UoZSx0PSExKXtjb25zdCBuPUJlLmV4ZWMoZSk7cmV0dXJuIG4/bmV3IFdlKG5bMl18fGplLFFlKG5bNF18fGplKSxRZShuWzVdfHxqZSksUWUobls3XXx8amUpLFFlKG5bOV18fGplKSx0KTpuZXcgV2UoamUsamUsamUsamUsamUpfXN0YXRpYyBmaWxlKGUpe2xldCB0PWplO2lmKFQmJihlPWUucmVwbGFjZSgvXFwvZyxVZSkpLGVbMF09PT1VZSYmZVsxXT09PVVlKXtjb25zdCBuPWUuaW5kZXhPZihVZSwyKTstMT09PW4/KHQ9ZS5zdWJzdHJpbmcoMiksZT1VZSk6KHQ9ZS5zdWJzdHJpbmcoMixuKSxlPWUuc3Vic3RyaW5nKG4pfHxVZSl9cmV0dXJuIG5ldyBXZSgiZmlsZSIsdCxlLGplLGplKX1zdGF0aWMgZnJvbShlKXtjb25zdCB0PW5ldyBXZShlLnNjaGVtZSxlLmF1dGhvcml0eSxlLnBhdGgsZS5xdWVyeSxlLmZyYWdtZW50KTtyZXR1cm4gS2UodCwhMCksdH1zdGF0aWMgam9pblBhdGgoZSwuLi50KXtpZighZS5wYXRoKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogY2Fubm90IGNhbGwgam9pblBhdGggb24gVVJJIHdpdGhvdXQgcGF0aCIpO2xldCBuO3JldHVybiBuPVQmJiJmaWxlIj09PWUuc2NoZW1lP3FlLmZpbGUoUGUuam9pbihKZShlLCEwKSwuLi50KSkucGF0aDpSZS5qb2luKGUucGF0aCwuLi50KSxlLndpdGgoe3BhdGg6bn0pfXRvU3RyaW5nKGU9ITEpe3JldHVybiBYZSh0aGlzLGUpfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUoZSl7aWYoZSl7aWYoZSBpbnN0YW5jZW9mIHFlKXJldHVybiBlO3tjb25zdCB0PW5ldyBXZShlKTtyZXR1cm4gdC5fZm9ybWF0dGVkPWUuZXh0ZXJuYWwsdC5fZnNQYXRoPWUuX3NlcD09PSRlP2UuZnNQYXRoOm51bGwsdH19cmV0dXJuIGV9fTtjb25zdCAkZT1UPzE6dm9pZCAwO2NsYXNzIFdlIGV4dGVuZHMgcWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Zvcm1hdHRlZD1udWxsLHRoaXMuX2ZzUGF0aD1udWxsfWdldCBmc1BhdGgoKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPUplKHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9dG9TdHJpbmcoZT0hMSl7cmV0dXJuIGU/WGUodGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1YZSh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX10b0pTT04oKXtjb25zdCBlPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihlLmZzUGF0aD10aGlzLl9mc1BhdGgsZS5fc2VwPSRlKSx0aGlzLl9mb3JtYXR0ZWQmJihlLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoZS5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihlLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihlLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKGUucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKGUuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksZX19Y29uc3QgSGU9ezU4OiIlM0EiLDQ3OiIlMkYiLDYzOiIlM0YiLDM1OiIlMjMiLDkxOiIlNUIiLDkzOiIlNUQiLDY0OiIlNDAiLDMzOiIlMjEiLDM2OiIlMjQiLDM4OiIlMjYiLDM5OiIlMjciLDQwOiIlMjgiLDQxOiIlMjkiLDQyOiIlMkEiLDQzOiIlMkIiLDQ0OiIlMkMiLDU5OiIlM0IiLDYxOiIlM0QiLDMyOiIlMjAifTtmdW5jdGlvbiB6ZShlLHQpe2xldCBuLHI9LTE7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IG89ZS5jaGFyQ29kZUF0KGkpO2lmKG8+PTk3JiZvPD0xMjJ8fG8+PTY1JiZvPD05MHx8bz49NDgmJm88PTU3fHw0NT09PW98fDQ2PT09b3x8OTU9PT1vfHwxMjY9PT1vfHx0JiY0Nz09PW8pLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLHZvaWQgMCE9PW4mJihuKz1lLmNoYXJBdChpKSk7ZWxzZXt2b2lkIDA9PT1uJiYobj1lLnN1YnN0cigwLGkpKTtjb25zdCB0PUhlW29dO3ZvaWQgMCE9PXQ/KC0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLGkpKSxyPS0xKSxuKz10KTotMT09PXImJihyPWkpfX1yZXR1cm4tMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocikpKSx2b2lkIDAhPT1uP246ZX1mdW5jdGlvbiBHZShlKXtsZXQgdDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobik7MzU9PT1yfHw2Mz09PXI/KHZvaWQgMD09PXQmJih0PWUuc3Vic3RyKDAsbikpLHQrPUhlW3JdKTp2b2lkIDAhPT10JiYodCs9ZVtuXSl9cmV0dXJuIHZvaWQgMCE9PXQ/dDplfWZ1bmN0aW9uIEplKGUsdCl7bGV0IG47cmV0dXJuIG49ZS5hdXRob3JpdHkmJmUucGF0aC5sZW5ndGg+MSYmImZpbGUiPT09ZS5zY2hlbWU/YC8vJHtlLmF1dGhvcml0eX0ke2UucGF0aH1gOjQ3PT09ZS5wYXRoLmNoYXJDb2RlQXQoMCkmJihlLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8ZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmNTg9PT1lLnBhdGguY2hhckNvZGVBdCgyKT90P2UucGF0aC5zdWJzdHIoMSk6ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTplLnBhdGgsVCYmKG49bi5yZXBsYWNlKC9cLy9nLCJcXCIpKSxufWZ1bmN0aW9uIFhlKGUsdCl7Y29uc3Qgbj10P0dlOnplO2xldCByPSIiLHtzY2hlbWU6aSxhdXRob3JpdHk6byxwYXRoOmEscXVlcnk6cyxmcmFnbWVudDpjfT1lO2lmKGkmJihyKz1pLHIrPSI6IiksKG98fCJmaWxlIj09PWkpJiYocis9VWUscis9VWUpLG8pe2xldCBlPW8uaW5kZXhPZigiQCIpO2lmKC0xIT09ZSl7Y29uc3QgdD1vLnN1YnN0cigwLGUpO289by5zdWJzdHIoZSsxKSxlPXQuaW5kZXhPZigiOiIpLC0xPT09ZT9yKz1uKHQsITEpOihyKz1uKHQuc3Vic3RyKDAsZSksITEpLHIrPSI6IixyKz1uKHQuc3Vic3RyKGUrMSksITEpKSxyKz0iQCJ9bz1vLnRvTG93ZXJDYXNlKCksZT1vLmluZGV4T2YoIjoiKSwtMT09PWU/cis9bihvLCExKToocis9bihvLnN1YnN0cigwLGUpLCExKSxyKz1vLnN1YnN0cihlKSl9aWYoYSl7aWYoYS5sZW5ndGg+PTMmJjQ3PT09YS5jaGFyQ29kZUF0KDApJiY1OD09PWEuY2hhckNvZGVBdCgyKSl7Y29uc3QgZT1hLmNoYXJDb2RlQXQoMSk7ZT49NjUmJmU8PTkwJiYoYT1gLyR7U3RyaW5nLmZyb21DaGFyQ29kZShlKzMyKX06JHthLnN1YnN0cigzKX1gKX1lbHNlIGlmKGEubGVuZ3RoPj0yJiY1OD09PWEuY2hhckNvZGVBdCgxKSl7Y29uc3QgZT1hLmNoYXJDb2RlQXQoMCk7ZT49NjUmJmU8PTkwJiYoYT1gJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGUrMzIpfToke2Euc3Vic3RyKDIpfWApfXIrPW4oYSwhMCl9cmV0dXJuIHMmJihyKz0iPyIscis9bihzLCExKSksYyYmKHIrPSIjIixyKz10P2M6emUoYywhMSkpLHJ9ZnVuY3Rpb24gWmUoZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2godCl7cmV0dXJuIGUubGVuZ3RoPjM/ZS5zdWJzdHIoMCwzKStaZShlLnN1YnN0cigzKSk6ZX19Y29uc3QgWWU9LyglWzAtOUEtWmEtel1bMC05QS1aYS16XSkrL2c7ZnVuY3Rpb24gUWUoZSl7cmV0dXJuIGUubWF0Y2goWWUpP2UucmVwbGFjZShZZSwoZT0+WmUoZSkpKTplfWxldCBldD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMubGluZU51bWJlcj1lLHRoaXMuY29sdW1uPXR9d2l0aChlPXRoaXMubGluZU51bWJlcix0PXRoaXMuY29sdW1uKXtyZXR1cm4gZT09PXRoaXMubGluZU51bWJlciYmdD09PXRoaXMuY29sdW1uP3RoaXM6bmV3IGV0KGUsdCl9ZGVsdGEoZT0wLHQ9MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrZSx0aGlzLmNvbHVtbit0KX1lcXVhbHMoZSl7cmV0dXJuIGV0LmVxdWFscyh0aGlzLGUpfXN0YXRpYyBlcXVhbHMoZSx0KXtyZXR1cm4hZSYmIXR8fCEhZSYmISF0JiZlLmxpbmVOdW1iZXI9PT10LmxpbmVOdW1iZXImJmUuY29sdW1uPT09dC5jb2x1bW59aXNCZWZvcmUoZSl7cmV0dXJuIGV0LmlzQmVmb3JlKHRoaXMsZSl9c3RhdGljIGlzQmVmb3JlKGUsdCl7cmV0dXJuIGUubGluZU51bWJlcjx0LmxpbmVOdW1iZXJ8fCEodC5saW5lTnVtYmVyPGUubGluZU51bWJlcikmJmUuY29sdW1uPHQuY29sdW1ufWlzQmVmb3JlT3JFcXVhbChlKXtyZXR1cm4gZXQuaXNCZWZvcmVPckVxdWFsKHRoaXMsZSl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbChlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjw9dC5jb2x1bW59c3RhdGljIGNvbXBhcmUoZSx0KXtjb25zdCBuPTB8ZS5saW5lTnVtYmVyLHI9MHx0LmxpbmVOdW1iZXI7aWYobj09PXIpe3JldHVybigwfGUuY29sdW1uKS0oMHx0LmNvbHVtbil9cmV0dXJuIG4tcn1jbG9uZSgpe3JldHVybiBuZXcgZXQodGhpcy5saW5lTnVtYmVyLHRoaXMuY29sdW1uKX10b1N0cmluZygpe3JldHVybiIoIit0aGlzLmxpbmVOdW1iZXIrIiwiK3RoaXMuY29sdW1uKyIpIn1zdGF0aWMgbGlmdChlKXtyZXR1cm4gbmV3IGV0KGUubGluZU51bWJlcixlLmNvbHVtbil9c3RhdGljIGlzSVBvc2l0aW9uKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUubGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLmNvbHVtbn19LHR0PWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe2U+bnx8ZT09PW4mJnQ+cj8odGhpcy5zdGFydExpbmVOdW1iZXI9bix0aGlzLnN0YXJ0Q29sdW1uPXIsdGhpcy5lbmRMaW5lTnVtYmVyPWUsdGhpcy5lbmRDb2x1bW49dCk6KHRoaXMuc3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zdGFydENvbHVtbj10LHRoaXMuZW5kTGluZU51bWJlcj1uLHRoaXMuZW5kQ29sdW1uPXIpfWlzRW1wdHkoKXtyZXR1cm4gdHQuaXNFbXB0eSh0aGlzKX1zdGF0aWMgaXNFbXB0eShlKXtyZXR1cm4gZS5zdGFydExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJmUuc3RhcnRDb2x1bW49PT1lLmVuZENvbHVtbn1jb250YWluc1Bvc2l0aW9uKGUpe3JldHVybiB0dC5jb250YWluc1Bvc2l0aW9uKHRoaXMsZSl9c3RhdGljIGNvbnRhaW5zUG9zaXRpb24oZSx0KXtyZXR1cm4hKHQubGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5saW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQubGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmNvbHVtbjxlLnN0YXJ0Q29sdW1uKSYmISh0LmxpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuY29sdW1uPmUuZW5kQ29sdW1uKSl9c3RhdGljIHN0cmljdENvbnRhaW5zUG9zaXRpb24oZSx0KXtyZXR1cm4hKHQubGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5saW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQubGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmNvbHVtbjw9ZS5zdGFydENvbHVtbikmJiEodC5saW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmNvbHVtbj49ZS5lbmRDb2x1bW4pKX1jb250YWluc1JhbmdlKGUpe3JldHVybiB0dC5jb250YWluc1JhbmdlKHRoaXMsZSl9c3RhdGljIGNvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPGUuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW4+ZS5lbmRDb2x1bW4pKSl9c3RyaWN0Q29udGFpbnNSYW5nZShlKXtyZXR1cm4gdHQuc3RyaWN0Q29udGFpbnNSYW5nZSh0aGlzLGUpfXN0YXRpYyBzdHJpY3RDb250YWluc1JhbmdlKGUsdCl7cmV0dXJuISh0LnN0YXJ0TGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyKSYmKCEodC5zdGFydExpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyKSYmKCEodC5zdGFydExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5zdGFydENvbHVtbjw9ZS5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbj49ZS5lbmRDb2x1bW4pKSl9cGx1c1JhbmdlKGUpe3JldHVybiB0dC5wbHVzUmFuZ2UodGhpcyxlKX1zdGF0aWMgcGx1c1JhbmdlKGUsdCl7bGV0IG4scixpLG87cmV0dXJuIHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyPyhuPXQuc3RhcnRMaW5lTnVtYmVyLHI9dC5zdGFydENvbHVtbik6dC5zdGFydExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlcj8obj10LnN0YXJ0TGluZU51bWJlcixyPU1hdGgubWluKHQuc3RhcnRDb2x1bW4sZS5zdGFydENvbHVtbikpOihuPWUuc3RhcnRMaW5lTnVtYmVyLHI9ZS5zdGFydENvbHVtbiksdC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcj8oaT10LmVuZExpbmVOdW1iZXIsbz10LmVuZENvbHVtbik6dC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyPyhpPXQuZW5kTGluZU51bWJlcixvPU1hdGgubWF4KHQuZW5kQ29sdW1uLGUuZW5kQ29sdW1uKSk6KGk9ZS5lbmRMaW5lTnVtYmVyLG89ZS5lbmRDb2x1bW4pLG5ldyB0dChuLHIsaSxvKX1pbnRlcnNlY3RSYW5nZXMoZSl7cmV0dXJuIHR0LmludGVyc2VjdFJhbmdlcyh0aGlzLGUpfXN0YXRpYyBpbnRlcnNlY3RSYW5nZXMoZSx0KXtsZXQgbj1lLnN0YXJ0TGluZU51bWJlcixyPWUuc3RhcnRDb2x1bW4saT1lLmVuZExpbmVOdW1iZXIsbz1lLmVuZENvbHVtbjtjb25zdCBhPXQuc3RhcnRMaW5lTnVtYmVyLHM9dC5zdGFydENvbHVtbixjPXQuZW5kTGluZU51bWJlcixsPXQuZW5kQ29sdW1uO3JldHVybiBuPGE/KG49YSxyPXMpOm49PT1hJiYocj1NYXRoLm1heChyLHMpKSxpPmM/KGk9YyxvPWwpOmk9PT1jJiYobz1NYXRoLm1pbihvLGwpKSxuPml8fG49PT1pJiZyPm8/bnVsbDpuZXcgdHQobixyLGksbyl9ZXF1YWxzUmFuZ2UoZSl7cmV0dXJuIHR0LmVxdWFsc1JhbmdlKHRoaXMsZSl9c3RhdGljIGVxdWFsc1JhbmdlKGUsdCl7cmV0dXJuISFlJiYhIXQmJmUuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuc3RhcnRDb2x1bW49PT10LnN0YXJ0Q29sdW1uJiZlLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPT09dC5lbmRDb2x1bW59Z2V0RW5kUG9zaXRpb24oKXtyZXR1cm4gdHQuZ2V0RW5kUG9zaXRpb24odGhpcyl9c3RhdGljIGdldEVuZFBvc2l0aW9uKGUpe3JldHVybiBuZXcgZXQoZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uKX1nZXRTdGFydFBvc2l0aW9uKCl7cmV0dXJuIHR0LmdldFN0YXJ0UG9zaXRpb24odGhpcyl9c3RhdGljIGdldFN0YXJ0UG9zaXRpb24oZSl7cmV0dXJuIG5ldyBldChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zdGFydENvbHVtbisiIC0+ICIrdGhpcy5lbmRMaW5lTnVtYmVyKyIsIit0aGlzLmVuZENvbHVtbisiXSJ9c2V0RW5kUG9zaXRpb24oZSx0KXtyZXR1cm4gbmV3IHR0KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sZSx0KX1zZXRTdGFydFBvc2l0aW9uKGUsdCl7cmV0dXJuIG5ldyB0dChlLHQsdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKX1jb2xsYXBzZVRvU3RhcnQoKXtyZXR1cm4gdHQuY29sbGFwc2VUb1N0YXJ0KHRoaXMpfXN0YXRpYyBjb2xsYXBzZVRvU3RhcnQoZSl7cmV0dXJuIG5ldyB0dChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKGUsdD1lKXtyZXR1cm4gbmV3IHR0KGUubGluZU51bWJlcixlLmNvbHVtbix0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBsaWZ0KGUpe3JldHVybiBlP25ldyB0dChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbik6bnVsbH1zdGF0aWMgaXNJUmFuZ2UoZSl7cmV0dXJuIGUmJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydENvbHVtbiYmIm51bWJlciI9PXR5cGVvZiBlLmVuZExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5lbmRDb2x1bW59c3RhdGljIGFyZUludGVyc2VjdGluZ09yVG91Y2hpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPHQuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBhcmVJbnRlcnNlY3RpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPD10LnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjw9ZS5zdGFydENvbHVtbil9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLHQpe2lmKGUmJnQpe2NvbnN0IG49MHxlLnN0YXJ0TGluZU51bWJlcixyPTB8dC5zdGFydExpbmVOdW1iZXI7aWYobj09PXIpe2NvbnN0IG49MHxlLnN0YXJ0Q29sdW1uLHI9MHx0LnN0YXJ0Q29sdW1uO2lmKG49PT1yKXtjb25zdCBuPTB8ZS5lbmRMaW5lTnVtYmVyLHI9MHx0LmVuZExpbmVOdW1iZXI7aWYobj09PXIpe3JldHVybigwfGUuZW5kQ29sdW1uKS0oMHx0LmVuZENvbHVtbil9cmV0dXJuIG4tcn1yZXR1cm4gbi1yfXJldHVybiBuLXJ9cmV0dXJuKGU/MTowKS0odD8xOjApfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdFbmRzKGUsdCl7cmV0dXJuIGUuZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj9lLmVuZENvbHVtbj09PXQuZW5kQ29sdW1uP2Uuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/ZS5zdGFydENvbHVtbi10LnN0YXJ0Q29sdW1uOmUuc3RhcnRMaW5lTnVtYmVyLXQuc3RhcnRMaW5lTnVtYmVyOmUuZW5kQ29sdW1uLXQuZW5kQ29sdW1uOmUuZW5kTGluZU51bWJlci10LmVuZExpbmVOdW1iZXJ9c3RhdGljIHNwYW5zTXVsdGlwbGVMaW5lcyhlKXtyZXR1cm4gZS5lbmRMaW5lTnVtYmVyPmUuc3RhcnRMaW5lTnVtYmVyfXRvSlNPTigpe3JldHVybiB0aGlzfX07ZnVuY3Rpb24gbnQoZSx0LG4scil7cmV0dXJuIG5ldyB2ZShlLHQsbikuQ29tcHV0ZURpZmYocil9Y2xhc3MgcnR7Y29uc3RydWN0b3IoZSl7Y29uc3QgdD1bXSxuPVtdO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl0W3JdPWN0KGVbcl0sMSksbltyXT1sdChlW3JdLDEpO3RoaXMubGluZXM9ZSx0aGlzLl9zdGFydENvbHVtbnM9dCx0aGlzLl9lbmRDb2x1bW5zPW59Z2V0RWxlbWVudHMoKXtjb25zdCBlPVtdO2ZvcihsZXQgdD0wLG49dGhpcy5saW5lcy5sZW5ndGg7dDxuO3QrKyllW3RdPXRoaXMubGluZXNbdF0uc3Vic3RyaW5nKHRoaXMuX3N0YXJ0Q29sdW1uc1t0XS0xLHRoaXMuX2VuZENvbHVtbnNbdF0tMSk7cmV0dXJuIGV9Z2V0U3RyaWN0RWxlbWVudChlKXtyZXR1cm4gdGhpcy5saW5lc1tlXX1nZXRTdGFydExpbmVOdW1iZXIoZSl7cmV0dXJuIGUrMX1nZXRFbmRMaW5lTnVtYmVyKGUpe3JldHVybiBlKzF9Y3JlYXRlQ2hhclNlcXVlbmNlKGUsdCxuKXtjb25zdCByPVtdLGk9W10sbz1bXTtsZXQgYT0wO2ZvcihsZXQgcz10O3M8PW47cysrKXtjb25zdCB0PXRoaXMubGluZXNbc10sYz1lP3RoaXMuX3N0YXJ0Q29sdW1uc1tzXToxLGw9ZT90aGlzLl9lbmRDb2x1bW5zW3NdOnQubGVuZ3RoKzE7Zm9yKGxldCBlPWM7ZTxsO2UrKylyW2FdPXQuY2hhckNvZGVBdChlLTEpLGlbYV09cysxLG9bYV09ZSxhKys7IWUmJnM8biYmKHJbYV09MTAsaVthXT1zKzEsb1thXT10Lmxlbmd0aCsxLGErKyl9cmV0dXJuIG5ldyBpdChyLGksbyl9fWNsYXNzIGl0e2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLl9jaGFyQ29kZXM9ZSx0aGlzLl9saW5lTnVtYmVycz10LHRoaXMuX2NvbHVtbnM9bn10b1N0cmluZygpe3JldHVybiJbIit0aGlzLl9jaGFyQ29kZXMubWFwKCgoZSx0KT0+KDEwPT09ZT8iXFxuIjpTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKStgLSgke3RoaXMuX2xpbmVOdW1iZXJzW3RdfSwke3RoaXMuX2NvbHVtbnNbdF19KWApKS5qb2luKCIsICIpKyJdIn1fYXNzZXJ0SW5kZXgoZSx0KXtpZihlPDB8fGU+PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBpbmRleCIpfWdldEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuX2NoYXJDb2Rlc31nZXRTdGFydExpbmVOdW1iZXIoZSl7cmV0dXJuIGU+MCYmZT09PXRoaXMuX2xpbmVOdW1iZXJzLmxlbmd0aD90aGlzLmdldEVuZExpbmVOdW1iZXIoZS0xKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9saW5lTnVtYmVycyksdGhpcy5fbGluZU51bWJlcnNbZV0pfWdldEVuZExpbmVOdW1iZXIoZSl7cmV0dXJuLTE9PT1lP3RoaXMuZ2V0U3RhcnRMaW5lTnVtYmVyKGUrMSk6KHRoaXMuX2Fzc2VydEluZGV4KGUsdGhpcy5fbGluZU51bWJlcnMpLDEwPT09dGhpcy5fY2hhckNvZGVzW2VdP3RoaXMuX2xpbmVOdW1iZXJzW2VdKzE6dGhpcy5fbGluZU51bWJlcnNbZV0pfWdldFN0YXJ0Q29sdW1uKGUpe3JldHVybiBlPjAmJmU9PT10aGlzLl9jb2x1bW5zLmxlbmd0aD90aGlzLmdldEVuZENvbHVtbihlLTEpOih0aGlzLl9hc3NlcnRJbmRleChlLHRoaXMuX2NvbHVtbnMpLHRoaXMuX2NvbHVtbnNbZV0pfWdldEVuZENvbHVtbihlKXtyZXR1cm4tMT09PWU/dGhpcy5nZXRTdGFydENvbHVtbihlKzEpOih0aGlzLl9hc3NlcnRJbmRleChlLHRoaXMuX2NvbHVtbnMpLDEwPT09dGhpcy5fY2hhckNvZGVzW2VdPzE6dGhpcy5fY29sdW1uc1tlXSsxKX19Y2xhc3Mgb3R7Y29uc3RydWN0b3IoZSx0LG4scixpLG8sYSxzKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5vcmlnaW5hbFN0YXJ0Q29sdW1uPXQsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9bix0aGlzLm9yaWdpbmFsRW5kQ29sdW1uPXIsdGhpcy5tb2RpZmllZFN0YXJ0TGluZU51bWJlcj1pLHRoaXMubW9kaWZpZWRTdGFydENvbHVtbj1vLHRoaXMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWEsdGhpcy5tb2RpZmllZEVuZENvbHVtbj1zfXN0YXRpYyBjcmVhdGVGcm9tRGlmZkNoYW5nZShlLHQsbil7Y29uc3Qgcj10LmdldFN0YXJ0TGluZU51bWJlcihlLm9yaWdpbmFsU3RhcnQpLGk9dC5nZXRTdGFydENvbHVtbihlLm9yaWdpbmFsU3RhcnQpLG89dC5nZXRFbmRMaW5lTnVtYmVyKGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoLTEpLGE9dC5nZXRFbmRDb2x1bW4oZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgtMSkscz1uLmdldFN0YXJ0TGluZU51bWJlcihlLm1vZGlmaWVkU3RhcnQpLGM9bi5nZXRTdGFydENvbHVtbihlLm1vZGlmaWVkU3RhcnQpLGw9bi5nZXRFbmRMaW5lTnVtYmVyKGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoLTEpLHU9bi5nZXRFbmRDb2x1bW4oZS5tb2RpZmllZFN0YXJ0K2UubW9kaWZpZWRMZW5ndGgtMSk7cmV0dXJuIG5ldyBvdChyLGksbyxhLHMsYyxsLHUpfX1jbGFzcyBhdHtjb25zdHJ1Y3RvcihlLHQsbixyLGkpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9ZSx0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj10LHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9bix0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1yLHRoaXMuY2hhckNoYW5nZXM9aX1zdGF0aWMgY3JlYXRlRnJvbURpZmZSZXN1bHQoZSx0LG4scixpLG8sYSl7bGV0IHMsYyxsLHUsaDtpZigwPT09dC5vcmlnaW5hbExlbmd0aD8ocz1uLmdldFN0YXJ0TGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQpLTEsYz0wKToocz1uLmdldFN0YXJ0TGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQpLGM9bi5nZXRFbmRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLTEpKSwwPT09dC5tb2RpZmllZExlbmd0aD8obD1yLmdldFN0YXJ0TGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQpLTEsdT0wKToobD1yLmdldFN0YXJ0TGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQpLHU9ci5nZXRFbmRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpKSxvJiZ0Lm9yaWdpbmFsTGVuZ3RoPjAmJnQub3JpZ2luYWxMZW5ndGg8MjAmJnQubW9kaWZpZWRMZW5ndGg+MCYmdC5tb2RpZmllZExlbmd0aDwyMCYmaSgpKXtjb25zdCBvPW4uY3JlYXRlQ2hhclNlcXVlbmNlKGUsdC5vcmlnaW5hbFN0YXJ0LHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLTEpLHM9ci5jcmVhdGVDaGFyU2VxdWVuY2UoZSx0Lm1vZGlmaWVkU3RhcnQsdC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtMSk7aWYoby5nZXRFbGVtZW50cygpLmxlbmd0aD4wJiZzLmdldEVsZW1lbnRzKCkubGVuZ3RoPjApe2xldCBlPW50KG8scyxpLCEwKS5jaGFuZ2VzO2EmJihlPWZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IHQ9W2VbMF1dO2xldCBuPXRbMF07Zm9yKGxldCByPTEsaT1lLmxlbmd0aDtyPGk7cisrKXtjb25zdCBpPWVbcl0sbz1pLm9yaWdpbmFsU3RhcnQtKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoKSxhPWkubW9kaWZpZWRTdGFydC0obi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpO01hdGgubWluKG8sYSk8Mz8obi5vcmlnaW5hbExlbmd0aD1pLm9yaWdpbmFsU3RhcnQraS5vcmlnaW5hbExlbmd0aC1uLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZExlbmd0aD1pLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aC1uLm1vZGlmaWVkU3RhcnQpOih0LnB1c2goaSksbj1pKX1yZXR1cm4gdH0oZSkpLGg9W107Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKWgucHVzaChvdC5jcmVhdGVGcm9tRGlmZkNoYW5nZShlW3RdLG8scykpfX1yZXR1cm4gbmV3IGF0KHMsYyxsLHUsaCl9fWNsYXNzIHN0e2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcz1uLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM9bi5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U9bi5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSx0aGlzLnNob3VsZE1ha2VQcmV0dHlEaWZmPW4uc2hvdWxkTWFrZVByZXR0eURpZmYsdGhpcy5vcmlnaW5hbExpbmVzPWUsdGhpcy5tb2RpZmllZExpbmVzPXQsdGhpcy5vcmlnaW5hbD1uZXcgcnQoZSksdGhpcy5tb2RpZmllZD1uZXcgcnQodCksdGhpcy5jb250aW51ZUxpbmVEaWZmPXV0KG4ubWF4Q29tcHV0YXRpb25UaW1lKSx0aGlzLmNvbnRpbnVlQ2hhckRpZmY9dXQoMD09PW4ubWF4Q29tcHV0YXRpb25UaW1lPzA6TWF0aC5taW4obi5tYXhDb21wdXRhdGlvblRpbWUsNWUzKSl9Y29tcHV0ZURpZmYoKXtpZigxPT09dGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGgmJjA9PT10aGlzLm9yaWdpbmFsLmxpbmVzWzBdLmxlbmd0aClyZXR1cm4gMT09PXRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoJiYwPT09dGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGg/e3F1aXRFYXJseTohMSxjaGFuZ2VzOltdfTp7cXVpdEVhcmx5OiExLGNoYW5nZXM6W3tvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjoxLG9yaWdpbmFsRW5kTGluZU51bWJlcjoxLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOnRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoLGNoYXJDaGFuZ2VzOlt7bW9kaWZpZWRFbmRDb2x1bW46MCxtb2RpZmllZEVuZExpbmVOdW1iZXI6MCxtb2RpZmllZFN0YXJ0Q29sdW1uOjAsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MCxvcmlnaW5hbEVuZENvbHVtbjowLG9yaWdpbmFsRW5kTGluZU51bWJlcjowLG9yaWdpbmFsU3RhcnRDb2x1bW46MCxvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjowfV19XX07aWYoMT09PXRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoJiYwPT09dGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGgpcmV0dXJue3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6dGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGgsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6MSxjaGFyQ2hhbmdlczpbe21vZGlmaWVkRW5kQ29sdW1uOjAsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjAsbW9kaWZpZWRTdGFydENvbHVtbjowLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjAsb3JpZ2luYWxFbmRDb2x1bW46MCxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MCxvcmlnaW5hbFN0YXJ0Q29sdW1uOjAsb3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MH1dfV19O2NvbnN0IGU9bnQodGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVMaW5lRGlmZix0aGlzLnNob3VsZE1ha2VQcmV0dHlEaWZmKSx0PWUuY2hhbmdlcyxuPWUucXVpdEVhcmx5O2lmKHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2Upe2NvbnN0IGU9W107Zm9yKGxldCBuPTAscj10Lmxlbmd0aDtuPHI7bisrKWUucHVzaChhdC5jcmVhdGVGcm9tRGlmZlJlc3VsdCh0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHRbbl0sdGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVDaGFyRGlmZix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMpKTtyZXR1cm57cXVpdEVhcmx5Om4sY2hhbmdlczplfX1jb25zdCByPVtdO2xldCBpPTAsbz0wO2ZvcihsZXQgZT0tMSxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IGE9ZSsxPG4/dFtlKzFdOm51bGwscz1hP2Eub3JpZ2luYWxTdGFydDp0aGlzLm9yaWdpbmFsTGluZXMubGVuZ3RoLGM9YT9hLm1vZGlmaWVkU3RhcnQ6dGhpcy5tb2RpZmllZExpbmVzLmxlbmd0aDtmb3IoO2k8cyYmbzxjOyl7Y29uc3QgZT10aGlzLm9yaWdpbmFsTGluZXNbaV0sdD10aGlzLm1vZGlmaWVkTGluZXNbb107aWYoZSE9PXQpe3tsZXQgbj1jdChlLDEpLGE9Y3QodCwxKTtmb3IoO24+MSYmYT4xOyl7aWYoZS5jaGFyQ29kZUF0KG4tMikhPT10LmNoYXJDb2RlQXQoYS0yKSlicmVhaztuLS0sYS0tfShuPjF8fGE+MSkmJnRoaXMuX3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UocixpKzEsMSxuLG8rMSwxLGEpfXtsZXQgbj1sdChlLDEpLGE9bHQodCwxKTtjb25zdCBzPWUubGVuZ3RoKzEsYz10Lmxlbmd0aCsxO2Zvcig7bjxzJiZhPGM7KXtpZihlLmNoYXJDb2RlQXQobi0xKSE9PWUuY2hhckNvZGVBdChhLTEpKWJyZWFrO24rKyxhKyt9KG48c3x8YTxjKSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShyLGkrMSxuLHMsbysxLGEsYyl9fWkrKyxvKyt9YSYmKHIucHVzaChhdC5jcmVhdGVGcm9tRGlmZlJlc3VsdCh0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLGEsdGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVDaGFyRGlmZix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMpKSxpKz1hLm9yaWdpbmFsTGVuZ3RoLG8rPWEubW9kaWZpZWRMZW5ndGgpfXJldHVybntxdWl0RWFybHk6bixjaGFuZ2VzOnJ9fV9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGUsdCxuLHIsaSxvLGEpe2lmKHRoaXMuX21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGUsdCxuLHIsaSxvLGEpKXJldHVybjtsZXQgczt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmKHM9W25ldyBvdCh0LG4sdCxyLGksbyxpLGEpXSksZS5wdXNoKG5ldyBhdCh0LHQsaSxpLHMpKX1fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8sYSl7Y29uc3Qgcz1lLmxlbmd0aDtpZigwPT09cylyZXR1cm4hMTtjb25zdCBjPWVbcy0xXTtyZXR1cm4gMCE9PWMub3JpZ2luYWxFbmRMaW5lTnVtYmVyJiYwIT09Yy5tb2RpZmllZEVuZExpbmVOdW1iZXImJihjLm9yaWdpbmFsRW5kTGluZU51bWJlcisxPT09dCYmYy5tb2RpZmllZEVuZExpbmVOdW1iZXIrMT09PWkmJihjLm9yaWdpbmFsRW5kTGluZU51bWJlcj10LGMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWksdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJmMuY2hhckNoYW5nZXMmJmMuY2hhckNoYW5nZXMucHVzaChuZXcgb3QodCxuLHQscixpLG8saSxhKSksITApKX19ZnVuY3Rpb24gY3QoZSx0KXtjb25zdCBuPWZ1bmN0aW9uKGUpe2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQodCk7aWYoMzIhPT1uJiY5IT09bilyZXR1cm4gdH1yZXR1cm4tMX0oZSk7cmV0dXJuLTE9PT1uP3Q6bisxfWZ1bmN0aW9uIGx0KGUsdCl7Y29uc3Qgbj1mdW5jdGlvbihlLHQ9ZS5sZW5ndGgtMSl7Zm9yKGxldCBuPXQ7bj49MDtuLS0pe2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KG4pO2lmKDMyIT09dCYmOSE9PXQpcmV0dXJuIG59cmV0dXJuLTF9KGUpO3JldHVybi0xPT09bj90Om4rMn1mdW5jdGlvbiB1dChlKXtpZigwPT09ZSlyZXR1cm4oKT0+ITA7Y29uc3QgdD1EYXRlLm5vdygpO3JldHVybigpPT5EYXRlLm5vdygpLXQ8ZX12YXIgaHQ7ZnVuY3Rpb24gZnQoZSl7cmV0dXJuIGU8MD8wOmU+MjU1PzI1NTowfGV9ZnVuY3Rpb24gZHQoZSl7cmV0dXJuIGU8MD8wOmU+NDI5NDk2NzI5NT80Mjk0OTY3Mjk1OjB8ZX0hZnVuY3Rpb24oZSl7ZS5pc0xlc3NUaGFuPWZ1bmN0aW9uKGUpe3JldHVybiBlPDB9LGUuaXNHcmVhdGVyVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gZT4wfSxlLmlzTmVpdGhlckxlc3NPckdyZWF0ZXJUaGFuPWZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZX0sZS5ncmVhdGVyVGhhbj0xLGUubGVzc1RoYW49LTEsZS5uZWl0aGVyTGVzc09yR3JlYXRlclRoYW49MH0oaHR8fChodD17fSkpO2NsYXNzIG10e2NvbnN0cnVjdG9yKGUpe3RoaXMudmFsdWVzPWUsdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KGUubGVuZ3RoKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXg9bmV3IEludDMyQXJyYXkoMSksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPS0xfWluc2VydFZhbHVlcyhlLHQpe2U9ZHQoZSk7Y29uc3Qgbj10aGlzLnZhbHVlcyxyPXRoaXMucHJlZml4U3VtLGk9dC5sZW5ndGg7cmV0dXJuIDAhPT1pJiYodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KG4ubGVuZ3RoK2kpLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KDAsZSksMCksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoZSksZStpKSx0aGlzLnZhbHVlcy5zZXQodCxlKSxlLTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPWUtMSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPj0wJiZ0aGlzLnByZWZpeFN1bS5zZXQoci5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfXNldFZhbHVlKGUsdCl7cmV0dXJuIGU9ZHQoZSksdD1kdCh0KSx0aGlzLnZhbHVlc1tlXSE9PXQmJih0aGlzLnZhbHVlc1tlXT10LGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSwhMCl9cmVtb3ZlVmFsdWVzKGUsdCl7ZT1kdChlKSx0PWR0KHQpO2NvbnN0IG49dGhpcy52YWx1ZXMscj10aGlzLnByZWZpeFN1bTtpZihlPj1uLmxlbmd0aClyZXR1cm4hMTtjb25zdCBpPW4ubGVuZ3RoLWU7cmV0dXJuIHQ+PWkmJih0PWkpLDAhPT10JiYodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KG4ubGVuZ3RoLXQpLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KDAsZSksMCksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoZSt0KSxlKSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSxlLTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPWUtMSksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPj0wJiZ0aGlzLnByZWZpeFN1bS5zZXQoci5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfWdldFRvdGFsU3VtKCl7cmV0dXJuIDA9PT10aGlzLnZhbHVlcy5sZW5ndGg/MDp0aGlzLl9nZXRQcmVmaXhTdW0odGhpcy52YWx1ZXMubGVuZ3RoLTEpfWdldFByZWZpeFN1bShlKXtyZXR1cm4gZTwwPzA6KGU9ZHQoZSksdGhpcy5fZ2V0UHJlZml4U3VtKGUpKX1fZ2V0UHJlZml4U3VtKGUpe2lmKGU8PXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSlyZXR1cm4gdGhpcy5wcmVmaXhTdW1bZV07bGV0IHQ9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzE7MD09PXQmJih0aGlzLnByZWZpeFN1bVswXT10aGlzLnZhbHVlc1swXSx0KyspLGU+PXRoaXMudmFsdWVzLmxlbmd0aCYmKGU9dGhpcy52YWx1ZXMubGVuZ3RoLTEpO2ZvcihsZXQgbj10O248PWU7bisrKXRoaXMucHJlZml4U3VtW25dPXRoaXMucHJlZml4U3VtW24tMV0rdGhpcy52YWx1ZXNbbl07cmV0dXJuIHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1NYXRoLm1heCh0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0sZSksdGhpcy5wcmVmaXhTdW1bZV19Z2V0SW5kZXhPZihlKXtlPU1hdGguZmxvb3IoZSksdGhpcy5nZXRUb3RhbFN1bSgpO2xldCB0PTAsbj10aGlzLnZhbHVlcy5sZW5ndGgtMSxyPTAsaT0wLG89MDtmb3IoO3Q8PW47KWlmKHI9dCsobi10KS8yfDAsaT10aGlzLnByZWZpeFN1bVtyXSxvPWktdGhpcy52YWx1ZXNbcl0sZTxvKW49ci0xO2Vsc2V7aWYoIShlPj1pKSlicmVhazt0PXIrMX1yZXR1cm4gbmV3IGd0KHIsZS1vKX19Y2xhc3MgZ3R7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmluZGV4PWUsdGhpcy5yZW1haW5kZXI9dCx0aGlzLl9wcmVmaXhTdW1JbmRleE9mUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMuaW5kZXg9ZSx0aGlzLnJlbWFpbmRlcj10fX1jbGFzcyBwdHtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLl91cmk9ZSx0aGlzLl9saW5lcz10LHRoaXMuX2VvbD1uLHRoaXMuX3ZlcnNpb25JZD1yLHRoaXMuX2xpbmVTdGFydHM9bnVsbCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1kaXNwb3NlKCl7dGhpcy5fbGluZXMubGVuZ3RoPTB9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbklkfWdldFRleHQoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2NhY2hlZFRleHRWYWx1ZSYmKHRoaXMuX2NhY2hlZFRleHRWYWx1ZT10aGlzLl9saW5lcy5qb2luKHRoaXMuX2VvbCkpLHRoaXMuX2NhY2hlZFRleHRWYWx1ZX1vbkV2ZW50cyhlKXtlLmVvbCYmZS5lb2whPT10aGlzLl9lb2wmJih0aGlzLl9lb2w9ZS5lb2wsdGhpcy5fbGluZVN0YXJ0cz1udWxsKTtjb25zdCB0PWUuY2hhbmdlcztmb3IoY29uc3QgZSBvZiB0KXRoaXMuX2FjY2VwdERlbGV0ZVJhbmdlKGUucmFuZ2UpLHRoaXMuX2FjY2VwdEluc2VydFRleHQobmV3IGV0KGUucmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGUucmFuZ2Uuc3RhcnRDb2x1bW4pLGUudGV4dCk7dGhpcy5fdmVyc2lvbklkPWUudmVyc2lvbklkLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfV9lbnN1cmVMaW5lU3RhcnRzKCl7aWYoIXRoaXMuX2xpbmVTdGFydHMpe2NvbnN0IGU9dGhpcy5fZW9sLmxlbmd0aCx0PXRoaXMuX2xpbmVzLmxlbmd0aCxuPW5ldyBVaW50MzJBcnJheSh0KTtmb3IobGV0IHI9MDtyPHQ7cisrKW5bcl09dGhpcy5fbGluZXNbcl0ubGVuZ3RoK2U7dGhpcy5fbGluZVN0YXJ0cz1uZXcgbXQobil9fV9zZXRMaW5lVGV4dChlLHQpe3RoaXMuX2xpbmVzW2VdPXQsdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5zZXRWYWx1ZShlLHRoaXMuX2xpbmVzW2VdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoKX1fYWNjZXB0RGVsZXRlUmFuZ2UoZSl7aWYoZS5zdGFydExpbmVOdW1iZXIhPT1lLmVuZExpbmVOdW1iZXIpdGhpcy5fc2V0TGluZVRleHQoZS5zdGFydExpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLnN0YXJ0Q29sdW1uLTEpK3RoaXMuX2xpbmVzW2UuZW5kTGluZU51bWJlci0xXS5zdWJzdHJpbmcoZS5lbmRDb2x1bW4tMSkpLHRoaXMuX2xpbmVzLnNwbGljZShlLnN0YXJ0TGluZU51bWJlcixlLmVuZExpbmVOdW1iZXItZS5zdGFydExpbmVOdW1iZXIpLHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMucmVtb3ZlVmFsdWVzKGUuc3RhcnRMaW5lTnVtYmVyLGUuZW5kTGluZU51bWJlci1lLnN0YXJ0TGluZU51bWJlcik7ZWxzZXtpZihlLnN0YXJ0Q29sdW1uPT09ZS5lbmRDb2x1bW4pcmV0dXJuO3RoaXMuX3NldExpbmVUZXh0KGUuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1tlLnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoZS5lbmRDb2x1bW4tMSkpfX1fYWNjZXB0SW5zZXJ0VGV4dChlLHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm47Y29uc3Qgbj10LnNwbGl0KC9cclxufFxyfFxuLyk7aWYoMT09PW4ubGVuZ3RoKXJldHVybiB2b2lkIHRoaXMuX3NldExpbmVUZXh0KGUubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLmNvbHVtbi0xKStuWzBdK3RoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXS5zdWJzdHJpbmcoZS5jb2x1bW4tMSkpO25bbi5sZW5ndGgtMV0rPXRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXS5zdWJzdHJpbmcoZS5jb2x1bW4tMSksdGhpcy5fc2V0TGluZVRleHQoZS5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuY29sdW1uLTEpK25bMF0pO2NvbnN0IHI9bmV3IFVpbnQzMkFycmF5KG4ubGVuZ3RoLTEpO2ZvcihsZXQgdD0xO3Q8bi5sZW5ndGg7dCsrKXRoaXMuX2xpbmVzLnNwbGljZShlLmxpbmVOdW1iZXIrdC0xLDAsblt0XSksclt0LTFdPW5bdF0ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGg7dGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5pbnNlcnRWYWx1ZXMoZS5saW5lTnVtYmVyLHIpfX1jb25zdCBidD1mdW5jdGlvbihlPSIiKXtsZXQgdD0iKC0/XFxkKlxcLlxcZFxcdyopfChbXiI7Zm9yKGNvbnN0IG4gb2YiYH4hQCMkJV4mKigpLT0rW3tdfVxcfDs6J1wiLC48Pi8/IillLmluZGV4T2Yobik+PTB8fCh0Kz0iXFwiK24pO3JldHVybiB0Kz0iXFxzXSspIixuZXcgUmVnRXhwKHQsImciKX0oKTtjb25zdCB2dD1uZXcgZztmdW5jdGlvbiB5dChlLHQsbixyLGkpe2lmKGl8fChpPXMuZmlyc3QodnQpKSxuLmxlbmd0aD5pLm1heExlbil7bGV0IG89ZS1pLm1heExlbi8yO3JldHVybiBvPDA/bz0wOnIrPW8seXQoZSx0LG49bi5zdWJzdHJpbmcobyxlK2kubWF4TGVuLzIpLHIsaSl9Y29uc3Qgbz1EYXRlLm5vdygpLGE9ZS0xLXI7bGV0IGM9LTEsbD1udWxsO2ZvcihsZXQgZT0xOyEoRGF0ZS5ub3coKS1vPj1pLnRpbWVCdWRnZXQpO2UrKyl7Y29uc3Qgcj1hLWkud2luZG93U2l6ZSplO3QubGFzdEluZGV4PU1hdGgubWF4KDAscik7Y29uc3Qgbz1DdCh0LG4sYSxjKTtpZighbyYmbClicmVhaztpZihsPW8scjw9MClicmVhaztjPXJ9aWYobCl7Y29uc3QgZT17d29yZDpsWzBdLHN0YXJ0Q29sdW1uOnIrMStsLmluZGV4LGVuZENvbHVtbjpyKzErbC5pbmRleCtsWzBdLmxlbmd0aH07cmV0dXJuIHQubGFzdEluZGV4PTAsZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBDdChlLHQsbixyKXtsZXQgaTtmb3IoO2k9ZS5leGVjKHQpOyl7Y29uc3QgdD1pLmluZGV4fHwwO2lmKHQ8PW4mJmUubGFzdEluZGV4Pj1uKXJldHVybiBpO2lmKHI+MCYmdD5yKXJldHVybiBudWxsfXJldHVybiBudWxsfXZ0LnVuc2hpZnQoe21heExlbjoxZTMsd2luZG93U2l6ZToxNSx0aW1lQnVkZ2V0OjE1MH0pO2NsYXNzIHd0e2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9ZnQoZSk7dGhpcy5fZGVmYXVsdFZhbHVlPXQsdGhpcy5fYXNjaWlNYXA9d3QuX2NyZWF0ZUFzY2lpTWFwKHQpLHRoaXMuX21hcD1uZXcgTWFwfXN0YXRpYyBfY3JlYXRlQXNjaWlNYXAoZSl7Y29uc3QgdD1uZXcgVWludDhBcnJheSgyNTYpO2ZvcihsZXQgbj0wO248MjU2O24rKyl0W25dPWU7cmV0dXJuIHR9c2V0KGUsdCl7Y29uc3Qgbj1mdCh0KTtlPj0wJiZlPDI1Nj90aGlzLl9hc2NpaU1hcFtlXT1uOnRoaXMuX21hcC5zZXQoZSxuKX1nZXQoZSl7cmV0dXJuIGU+PTAmJmU8MjU2P3RoaXMuX2FzY2lpTWFwW2VdOnRoaXMuX21hcC5nZXQoZSl8fHRoaXMuX2RlZmF1bHRWYWx1ZX19Y2xhc3MgX3R7Y29uc3RydWN0b3IoZSx0LG4pe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZSp0KTtmb3IobGV0IGk9MCxvPWUqdDtpPG87aSsrKXJbaV09bjt0aGlzLl9kYXRhPXIsdGhpcy5yb3dzPWUsdGhpcy5jb2xzPXR9Z2V0KGUsdCl7cmV0dXJuIHRoaXMuX2RhdGFbZSp0aGlzLmNvbHMrdF19c2V0KGUsdCxuKXt0aGlzLl9kYXRhW2UqdGhpcy5jb2xzK3RdPW59fWNsYXNzIFN0e2NvbnN0cnVjdG9yKGUpe2xldCB0PTAsbj0wO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3RbaSxvLGFdPWVbcl07bz50JiYodD1vKSxpPm4mJihuPWkpLGE+biYmKG49YSl9dCsrLG4rKztjb25zdCByPW5ldyBfdChuLHQsMCk7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdFtuLGksb109ZVt0XTtyLnNldChuLGksbyl9dGhpcy5fc3RhdGVzPXIsdGhpcy5fbWF4Q2hhckNvZGU9dH1uZXh0U3RhdGUoZSx0KXtyZXR1cm4gdDwwfHx0Pj10aGlzLl9tYXhDaGFyQ29kZT8wOnRoaXMuX3N0YXRlcy5nZXQoZSx0KX19bGV0IEF0PW51bGw7bGV0IEV0PW51bGw7Y2xhc3MgeHR7c3RhdGljIF9jcmVhdGVMaW5rKGUsdCxuLHIsaSl7bGV0IG89aS0xO2Rve2NvbnN0IG49dC5jaGFyQ29kZUF0KG8pO2lmKDIhPT1lLmdldChuKSlicmVhaztvLS19d2hpbGUobz5yKTtpZihyPjApe2NvbnN0IGU9dC5jaGFyQ29kZUF0KHItMSksbj10LmNoYXJDb2RlQXQobyk7KDQwPT09ZSYmNDE9PT1ufHw5MT09PWUmJjkzPT09bnx8MTIzPT09ZSYmMTI1PT09bikmJm8tLX1yZXR1cm57cmFuZ2U6e3N0YXJ0TGluZU51bWJlcjpuLHN0YXJ0Q29sdW1uOnIrMSxlbmRMaW5lTnVtYmVyOm4sZW5kQ29sdW1uOm8rMn0sdXJsOnQuc3Vic3RyaW5nKHIsbysxKX19c3RhdGljIGNvbXB1dGVMaW5rcyhlLHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PUF0JiYoQXQ9bmV3IFN0KFtbMSwxMDQsMl0sWzEsNzIsMl0sWzEsMTAyLDZdLFsxLDcwLDZdLFsyLDExNiwzXSxbMiw4NCwzXSxbMywxMTYsNF0sWzMsODQsNF0sWzQsMTEyLDVdLFs0LDgwLDVdLFs1LDExNSw5XSxbNSw4Myw5XSxbNSw1OCwxMF0sWzYsMTA1LDddLFs2LDczLDddLFs3LDEwOCw4XSxbNyw3Niw4XSxbOCwxMDEsOV0sWzgsNjksOV0sWzksNTgsMTBdLFsxMCw0NywxMV0sWzExLDQ3LDEyXV0pKSxBdH0oKSl7Y29uc3Qgbj1mdW5jdGlvbigpe2lmKG51bGw9PT1FdCl7RXQ9bmV3IHd0KDApO2NvbnN0IGU9IiBcdDw+J1wi44CB44CC772h772k77yM77yO77ya77yb4oCY44CI44CM44CO44CU77yI77y7772b772i772j772d77y977yJ44CV44CP44CN44CJ4oCZ772A772e4oCmIjtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylFdC5zZXQoZS5jaGFyQ29kZUF0KHQpLDEpO2NvbnN0IHQ9Ii4sOzoiO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKUV0LnNldCh0LmNoYXJDb2RlQXQoZSksMil9cmV0dXJuIEV0fSgpLHI9W107Zm9yKGxldCBpPTEsbz1lLmdldExpbmVDb3VudCgpO2k8PW87aSsrKXtjb25zdCBvPWUuZ2V0TGluZUNvbnRlbnQoaSksYT1vLmxlbmd0aDtsZXQgcz0wLGM9MCxsPTAsdT0xLGg9ITEsZj0hMSxkPSExLG09ITE7Zm9yKDtzPGE7KXtsZXQgZT0hMTtjb25zdCBhPW8uY2hhckNvZGVBdChzKTtpZigxMz09PXUpe2xldCB0O3N3aXRjaChhKXtjYXNlIDQwOmg9ITAsdD0wO2JyZWFrO2Nhc2UgNDE6dD1oPzA6MTticmVhaztjYXNlIDkxOmQ9ITAsZj0hMCx0PTA7YnJlYWs7Y2FzZSA5MzpkPSExLHQ9Zj8wOjE7YnJlYWs7Y2FzZSAxMjM6bT0hMCx0PTA7YnJlYWs7Y2FzZSAxMjU6dD1tPzA6MTticmVhaztjYXNlIDM5OnQ9Mzk9PT1sPzE6MDticmVhaztjYXNlIDM0OnQ9MzQ9PT1sPzE6MDticmVhaztjYXNlIDk2OnQ9OTY9PT1sPzE6MDticmVhaztjYXNlIDQyOnQ9NDI9PT1sPzE6MDticmVhaztjYXNlIDEyNDp0PTEyND09PWw/MTowO2JyZWFrO2Nhc2UgMzI6dD1kPzA6MTticmVhaztkZWZhdWx0OnQ9bi5nZXQoYSl9MT09PXQmJihyLnB1c2goeHQuX2NyZWF0ZUxpbmsobixvLGksYyxzKSksZT0hMCl9ZWxzZSBpZigxMj09PXUpe2xldCB0OzkxPT09YT8oZj0hMCx0PTApOnQ9bi5nZXQoYSksMT09PXQ/ZT0hMDp1PTEzfWVsc2UgdT10Lm5leHRTdGF0ZSh1LGEpLDA9PT11JiYoZT0hMCk7ZSYmKHU9MSxoPSExLGY9ITEsbT0hMSxjPXMrMSxsPWEpLHMrK30xMz09PXUmJnIucHVzaCh4dC5fY3JlYXRlTGluayhuLG8saSxjLGEpKX1yZXR1cm4gcn19Y2xhc3MgTnR7Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0VmFsdWVTZXQ9W1sidHJ1ZSIsImZhbHNlIl0sWyJUcnVlIiwiRmFsc2UiXSxbIlByaXZhdGUiLCJQdWJsaWMiLCJGcmllbmQiLCJSZWFkT25seSIsIlBhcnRpYWwiLCJQcm90ZWN0ZWQiLCJXcml0ZU9ubHkiXSxbInB1YmxpYyIsInByb3RlY3RlZCIsInByaXZhdGUiXV19bmF2aWdhdGVWYWx1ZVNldChlLHQsbixyLGkpe2lmKGUmJnQpe2NvbnN0IG49dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQodCxpKTtpZihuKXJldHVybntyYW5nZTplLHZhbHVlOm59fWlmKG4mJnIpe2NvbnN0IGU9dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQocixpKTtpZihlKXJldHVybntyYW5nZTpuLHZhbHVlOmV9fXJldHVybiBudWxsfWRvTmF2aWdhdGVWYWx1ZVNldChlLHQpe2NvbnN0IG49dGhpcy5udW1iZXJSZXBsYWNlKGUsdCk7cmV0dXJuIG51bGwhPT1uP246dGhpcy50ZXh0UmVwbGFjZShlLHQpfW51bWJlclJlcGxhY2UoZSx0KXtjb25zdCBuPU1hdGgucG93KDEwLGUubGVuZ3RoLShlLmxhc3RJbmRleE9mKCIuIikrMSkpO2xldCByPU51bWJlcihlKTtjb25zdCBpPXBhcnNlRmxvYXQoZSk7cmV0dXJuIGlzTmFOKHIpfHxpc05hTihpKXx8ciE9PWk/bnVsbDowIT09cnx8dD8ocj1NYXRoLmZsb29yKHIqbikscis9dD9uOi1uLFN0cmluZyhyL24pKTpudWxsfXRleHRSZXBsYWNlKGUsdCl7cmV0dXJuIHRoaXMudmFsdWVTZXRzUmVwbGFjZSh0aGlzLl9kZWZhdWx0VmFsdWVTZXQsZSx0KX12YWx1ZVNldHNSZXBsYWNlKGUsdCxuKXtsZXQgcj1udWxsO2ZvcihsZXQgaT0wLG89ZS5sZW5ndGg7bnVsbD09PXImJmk8bztpKyspcj10aGlzLnZhbHVlU2V0UmVwbGFjZShlW2ldLHQsbik7cmV0dXJuIHJ9dmFsdWVTZXRSZXBsYWNlKGUsdCxuKXtsZXQgcj1lLmluZGV4T2YodCk7cmV0dXJuIHI+PTA/KHIrPW4/MTotMSxyPDA/cj1lLmxlbmd0aC0xOnIlPWUubGVuZ3RoLGVbcl0pOm51bGx9fU50LklOU1RBTkNFPW5ldyBOdDtjb25zdCBrdD1PYmplY3QuZnJlZXplKChmdW5jdGlvbihlLHQpe2NvbnN0IG49c2V0VGltZW91dChlLmJpbmQodCksMCk7cmV0dXJue2Rpc3Bvc2UoKXtjbGVhclRpbWVvdXQobil9fX0pKTt2YXIgTHQ7IWZ1bmN0aW9uKGUpe2UuaXNDYW5jZWxsYXRpb25Ub2tlbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuTm9uZXx8dD09PWUuQ2FuY2VsbGVkfHwodCBpbnN0YW5jZW9mIFR0fHwhKCF0fHwib2JqZWN0IiE9dHlwZW9mIHQpJiYoImJvb2xlYW4iPT10eXBlb2YgdC5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCYmImZ1bmN0aW9uIj09dHlwZW9mIHQub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQpKX0sZS5Ob25lPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiExLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOkYuTm9uZX0pLGUuQ2FuY2VsbGVkPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiEwLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOmt0fSl9KEx0fHwoTHQ9e30pKTtjbGFzcyBUdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzQ2FuY2VsbGVkPSExLHRoaXMuX2VtaXR0ZXI9bnVsbH1jYW5jZWwoKXt0aGlzLl9pc0NhbmNlbGxlZHx8KHRoaXMuX2lzQ2FuY2VsbGVkPSEwLHRoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmZpcmUodm9pZCAwKSx0aGlzLmRpc3Bvc2UoKSkpfWdldCBpc0NhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZH1nZXQgb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWQ/a3Q6KHRoaXMuX2VtaXR0ZXJ8fCh0aGlzLl9lbWl0dGVyPW5ldyBCKSx0aGlzLl9lbWl0dGVyLmV2ZW50KX1kaXNwb3NlKCl7dGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZGlzcG9zZSgpLHRoaXMuX2VtaXR0ZXI9bnVsbCl9fWNsYXNzIE90e2NvbnN0cnVjdG9yKGUpe3RoaXMuX3Rva2VuPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9ZSYmZS5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCh0aGlzLmNhbmNlbCx0aGlzKX1nZXQgdG9rZW4oKXtyZXR1cm4gdGhpcy5fdG9rZW58fCh0aGlzLl90b2tlbj1uZXcgVHQpLHRoaXMuX3Rva2VufWNhbmNlbCgpe3RoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgVHQmJnRoaXMuX3Rva2VuLmNhbmNlbCgpOnRoaXMuX3Rva2VuPUx0LkNhbmNlbGxlZH1kaXNwb3NlKGU9ITEpe2UmJnRoaXMuY2FuY2VsKCksdGhpcy5fcGFyZW50TGlzdGVuZXImJnRoaXMuX3BhcmVudExpc3RlbmVyLmRpc3Bvc2UoKSx0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIFR0JiZ0aGlzLl90b2tlbi5kaXNwb3NlKCk6dGhpcy5fdG9rZW49THQuTm9uZX19Y2xhc3MgSXR7Y29uc3RydWN0b3IoKXt0aGlzLl9rZXlDb2RlVG9TdHI9W10sdGhpcy5fc3RyVG9LZXlDb2RlPU9iamVjdC5jcmVhdGUobnVsbCl9ZGVmaW5lKGUsdCl7dGhpcy5fa2V5Q29kZVRvU3RyW2VdPXQsdGhpcy5fc3RyVG9LZXlDb2RlW3QudG9Mb3dlckNhc2UoKV09ZX1rZXlDb2RlVG9TdHIoZSl7cmV0dXJuIHRoaXMuX2tleUNvZGVUb1N0cltlXX1zdHJUb0tleUNvZGUoZSl7cmV0dXJuIHRoaXMuX3N0clRvS2V5Q29kZVtlLnRvTG93ZXJDYXNlKCldfHwwfX1jb25zdCBNdD1uZXcgSXQsUHQ9bmV3IEl0LFJ0PW5ldyBJdCxWdD1uZXcgQXJyYXkoMjMwKSxGdD1PYmplY3QuY3JlYXRlKG51bGwpLER0PU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIEt0LGp0OyFmdW5jdGlvbigpe2NvbnN0IGU9IiIsdD1bWzAsMSwwLCJOb25lIiwwLCJ1bmtub3duIiwwLCJWS19VTktOT1dOIixlLGVdLFswLDEsMSwiSHlwZXIiLDAsZSwwLGUsZSxlXSxbMCwxLDIsIlN1cGVyIiwwLGUsMCxlLGUsZV0sWzAsMSwzLCJGbiIsMCxlLDAsZSxlLGVdLFswLDEsNCwiRm5Mb2NrIiwwLGUsMCxlLGUsZV0sWzAsMSw1LCJTdXNwZW5kIiwwLGUsMCxlLGUsZV0sWzAsMSw2LCJSZXN1bWUiLDAsZSwwLGUsZSxlXSxbMCwxLDcsIlR1cmJvIiwwLGUsMCxlLGUsZV0sWzAsMSw4LCJTbGVlcCIsMCxlLDAsIlZLX1NMRUVQIixlLGVdLFswLDEsOSwiV2FrZVVwIiwwLGUsMCxlLGUsZV0sWzMxLDAsMTAsIktleUEiLDMxLCJBIiw2NSwiVktfQSIsZSxlXSxbMzIsMCwxMSwiS2V5QiIsMzIsIkIiLDY2LCJWS19CIixlLGVdLFszMywwLDEyLCJLZXlDIiwzMywiQyIsNjcsIlZLX0MiLGUsZV0sWzM0LDAsMTMsIktleUQiLDM0LCJEIiw2OCwiVktfRCIsZSxlXSxbMzUsMCwxNCwiS2V5RSIsMzUsIkUiLDY5LCJWS19FIixlLGVdLFszNiwwLDE1LCJLZXlGIiwzNiwiRiIsNzAsIlZLX0YiLGUsZV0sWzM3LDAsMTYsIktleUciLDM3LCJHIiw3MSwiVktfRyIsZSxlXSxbMzgsMCwxNywiS2V5SCIsMzgsIkgiLDcyLCJWS19IIixlLGVdLFszOSwwLDE4LCJLZXlJIiwzOSwiSSIsNzMsIlZLX0kiLGUsZV0sWzQwLDAsMTksIktleUoiLDQwLCJKIiw3NCwiVktfSiIsZSxlXSxbNDEsMCwyMCwiS2V5SyIsNDEsIksiLDc1LCJWS19LIixlLGVdLFs0MiwwLDIxLCJLZXlMIiw0MiwiTCIsNzYsIlZLX0wiLGUsZV0sWzQzLDAsMjIsIktleU0iLDQzLCJNIiw3NywiVktfTSIsZSxlXSxbNDQsMCwyMywiS2V5TiIsNDQsIk4iLDc4LCJWS19OIixlLGVdLFs0NSwwLDI0LCJLZXlPIiw0NSwiTyIsNzksIlZLX08iLGUsZV0sWzQ2LDAsMjUsIktleVAiLDQ2LCJQIiw4MCwiVktfUCIsZSxlXSxbNDcsMCwyNiwiS2V5USIsNDcsIlEiLDgxLCJWS19RIixlLGVdLFs0OCwwLDI3LCJLZXlSIiw0OCwiUiIsODIsIlZLX1IiLGUsZV0sWzQ5LDAsMjgsIktleVMiLDQ5LCJTIiw4MywiVktfUyIsZSxlXSxbNTAsMCwyOSwiS2V5VCIsNTAsIlQiLDg0LCJWS19UIixlLGVdLFs1MSwwLDMwLCJLZXlVIiw1MSwiVSIsODUsIlZLX1UiLGUsZV0sWzUyLDAsMzEsIktleVYiLDUyLCJWIiw4NiwiVktfViIsZSxlXSxbNTMsMCwzMiwiS2V5VyIsNTMsIlciLDg3LCJWS19XIixlLGVdLFs1NCwwLDMzLCJLZXlYIiw1NCwiWCIsODgsIlZLX1giLGUsZV0sWzU1LDAsMzQsIktleVkiLDU1LCJZIiw4OSwiVktfWSIsZSxlXSxbNTYsMCwzNSwiS2V5WiIsNTYsIloiLDkwLCJWS19aIixlLGVdLFsyMiwwLDM2LCJEaWdpdDEiLDIyLCIxIiw0OSwiVktfMSIsZSxlXSxbMjMsMCwzNywiRGlnaXQyIiwyMywiMiIsNTAsIlZLXzIiLGUsZV0sWzI0LDAsMzgsIkRpZ2l0MyIsMjQsIjMiLDUxLCJWS18zIixlLGVdLFsyNSwwLDM5LCJEaWdpdDQiLDI1LCI0Iiw1MiwiVktfNCIsZSxlXSxbMjYsMCw0MCwiRGlnaXQ1IiwyNiwiNSIsNTMsIlZLXzUiLGUsZV0sWzI3LDAsNDEsIkRpZ2l0NiIsMjcsIjYiLDU0LCJWS182IixlLGVdLFsyOCwwLDQyLCJEaWdpdDciLDI4LCI3Iiw1NSwiVktfNyIsZSxlXSxbMjksMCw0MywiRGlnaXQ4IiwyOSwiOCIsNTYsIlZLXzgiLGUsZV0sWzMwLDAsNDQsIkRpZ2l0OSIsMzAsIjkiLDU3LCJWS185IixlLGVdLFsyMSwwLDQ1LCJEaWdpdDAiLDIxLCIwIiw0OCwiVktfMCIsZSxlXSxbMywxLDQ2LCJFbnRlciIsMywiRW50ZXIiLDEzLCJWS19SRVRVUk4iLGUsZV0sWzksMSw0NywiRXNjYXBlIiw5LCJFc2NhcGUiLDI3LCJWS19FU0NBUEUiLGUsZV0sWzEsMSw0OCwiQmFja3NwYWNlIiwxLCJCYWNrc3BhY2UiLDgsIlZLX0JBQ0siLGUsZV0sWzIsMSw0OSwiVGFiIiwyLCJUYWIiLDksIlZLX1RBQiIsZSxlXSxbMTAsMSw1MCwiU3BhY2UiLDEwLCJTcGFjZSIsMzIsIlZLX1NQQUNFIixlLGVdLFs4MywwLDUxLCJNaW51cyIsODMsIi0iLDE4OSwiVktfT0VNX01JTlVTIiwiLSIsIk9FTV9NSU5VUyJdLFs4MSwwLDUyLCJFcXVhbCIsODEsIj0iLDE4NywiVktfT0VNX1BMVVMiLCI9IiwiT0VNX1BMVVMiXSxbODcsMCw1MywiQnJhY2tldExlZnQiLDg3LCJbIiwyMTksIlZLX09FTV80IiwiWyIsIk9FTV80Il0sWzg5LDAsNTQsIkJyYWNrZXRSaWdodCIsODksIl0iLDIyMSwiVktfT0VNXzYiLCJdIiwiT0VNXzYiXSxbODgsMCw1NSwiQmFja3NsYXNoIiw4OCwiXFwiLDIyMCwiVktfT0VNXzUiLCJcXCIsIk9FTV81Il0sWzAsMCw1NiwiSW50bEhhc2giLDAsZSwwLGUsZSxlXSxbODAsMCw1NywiU2VtaWNvbG9uIiw4MCwiOyIsMTg2LCJWS19PRU1fMSIsIjsiLCJPRU1fMSJdLFs5MCwwLDU4LCJRdW90ZSIsOTAsIiciLDIyMiwiVktfT0VNXzciLCInIiwiT0VNXzciXSxbODYsMCw1OSwiQmFja3F1b3RlIiw4NiwiYCIsMTkyLCJWS19PRU1fMyIsImAiLCJPRU1fMyJdLFs4MiwwLDYwLCJDb21tYSIsODIsIiwiLDE4OCwiVktfT0VNX0NPTU1BIiwiLCIsIk9FTV9DT01NQSJdLFs4NCwwLDYxLCJQZXJpb2QiLDg0LCIuIiwxOTAsIlZLX09FTV9QRVJJT0QiLCIuIiwiT0VNX1BFUklPRCJdLFs4NSwwLDYyLCJTbGFzaCIsODUsIi8iLDE5MSwiVktfT0VNXzIiLCIvIiwiT0VNXzIiXSxbOCwxLDYzLCJDYXBzTG9jayIsOCwiQ2Fwc0xvY2siLDIwLCJWS19DQVBJVEFMIixlLGVdLFs1OSwxLDY0LCJGMSIsNTksIkYxIiwxMTIsIlZLX0YxIixlLGVdLFs2MCwxLDY1LCJGMiIsNjAsIkYyIiwxMTMsIlZLX0YyIixlLGVdLFs2MSwxLDY2LCJGMyIsNjEsIkYzIiwxMTQsIlZLX0YzIixlLGVdLFs2MiwxLDY3LCJGNCIsNjIsIkY0IiwxMTUsIlZLX0Y0IixlLGVdLFs2MywxLDY4LCJGNSIsNjMsIkY1IiwxMTYsIlZLX0Y1IixlLGVdLFs2NCwxLDY5LCJGNiIsNjQsIkY2IiwxMTcsIlZLX0Y2IixlLGVdLFs2NSwxLDcwLCJGNyIsNjUsIkY3IiwxMTgsIlZLX0Y3IixlLGVdLFs2NiwxLDcxLCJGOCIsNjYsIkY4IiwxMTksIlZLX0Y4IixlLGVdLFs2NywxLDcyLCJGOSIsNjcsIkY5IiwxMjAsIlZLX0Y5IixlLGVdLFs2OCwxLDczLCJGMTAiLDY4LCJGMTAiLDEyMSwiVktfRjEwIixlLGVdLFs2OSwxLDc0LCJGMTEiLDY5LCJGMTEiLDEyMiwiVktfRjExIixlLGVdLFs3MCwxLDc1LCJGMTIiLDcwLCJGMTIiLDEyMywiVktfRjEyIixlLGVdLFswLDEsNzYsIlByaW50U2NyZWVuIiwwLGUsMCxlLGUsZV0sWzc5LDEsNzcsIlNjcm9sbExvY2siLDc5LCJTY3JvbGxMb2NrIiwxNDUsIlZLX1NDUk9MTCIsZSxlXSxbNywxLDc4LCJQYXVzZSIsNywiUGF1c2VCcmVhayIsMTksIlZLX1BBVVNFIixlLGVdLFsxOSwxLDc5LCJJbnNlcnQiLDE5LCJJbnNlcnQiLDQ1LCJWS19JTlNFUlQiLGUsZV0sWzE0LDEsODAsIkhvbWUiLDE0LCJIb21lIiwzNiwiVktfSE9NRSIsZSxlXSxbMTEsMSw4MSwiUGFnZVVwIiwxMSwiUGFnZVVwIiwzMywiVktfUFJJT1IiLGUsZV0sWzIwLDEsODIsIkRlbGV0ZSIsMjAsIkRlbGV0ZSIsNDYsIlZLX0RFTEVURSIsZSxlXSxbMTMsMSw4MywiRW5kIiwxMywiRW5kIiwzNSwiVktfRU5EIixlLGVdLFsxMiwxLDg0LCJQYWdlRG93biIsMTIsIlBhZ2VEb3duIiwzNCwiVktfTkVYVCIsZSxlXSxbMTcsMSw4NSwiQXJyb3dSaWdodCIsMTcsIlJpZ2h0QXJyb3ciLDM5LCJWS19SSUdIVCIsIlJpZ2h0IixlXSxbMTUsMSw4NiwiQXJyb3dMZWZ0IiwxNSwiTGVmdEFycm93IiwzNywiVktfTEVGVCIsIkxlZnQiLGVdLFsxOCwxLDg3LCJBcnJvd0Rvd24iLDE4LCJEb3duQXJyb3ciLDQwLCJWS19ET1dOIiwiRG93biIsZV0sWzE2LDEsODgsIkFycm93VXAiLDE2LCJVcEFycm93IiwzOCwiVktfVVAiLCJVcCIsZV0sWzc4LDEsODksIk51bUxvY2siLDc4LCJOdW1Mb2NrIiwxNDQsIlZLX05VTUxPQ0siLGUsZV0sWzEwOCwxLDkwLCJOdW1wYWREaXZpZGUiLDEwOCwiTnVtUGFkX0RpdmlkZSIsMTExLCJWS19ESVZJREUiLGUsZV0sWzEwMywxLDkxLCJOdW1wYWRNdWx0aXBseSIsMTAzLCJOdW1QYWRfTXVsdGlwbHkiLDEwNiwiVktfTVVMVElQTFkiLGUsZV0sWzEwNiwxLDkyLCJOdW1wYWRTdWJ0cmFjdCIsMTA2LCJOdW1QYWRfU3VidHJhY3QiLDEwOSwiVktfU1VCVFJBQ1QiLGUsZV0sWzEwNCwxLDkzLCJOdW1wYWRBZGQiLDEwNCwiTnVtUGFkX0FkZCIsMTA3LCJWS19BREQiLGUsZV0sWzMsMSw5NCwiTnVtcGFkRW50ZXIiLDMsZSwwLGUsZSxlXSxbOTQsMSw5NSwiTnVtcGFkMSIsOTQsIk51bVBhZDEiLDk3LCJWS19OVU1QQUQxIixlLGVdLFs5NSwxLDk2LCJOdW1wYWQyIiw5NSwiTnVtUGFkMiIsOTgsIlZLX05VTVBBRDIiLGUsZV0sWzk2LDEsOTcsIk51bXBhZDMiLDk2LCJOdW1QYWQzIiw5OSwiVktfTlVNUEFEMyIsZSxlXSxbOTcsMSw5OCwiTnVtcGFkNCIsOTcsIk51bVBhZDQiLDEwMCwiVktfTlVNUEFENCIsZSxlXSxbOTgsMSw5OSwiTnVtcGFkNSIsOTgsIk51bVBhZDUiLDEwMSwiVktfTlVNUEFENSIsZSxlXSxbOTksMSwxMDAsIk51bXBhZDYiLDk5LCJOdW1QYWQ2IiwxMDIsIlZLX05VTVBBRDYiLGUsZV0sWzEwMCwxLDEwMSwiTnVtcGFkNyIsMTAwLCJOdW1QYWQ3IiwxMDMsIlZLX05VTVBBRDciLGUsZV0sWzEwMSwxLDEwMiwiTnVtcGFkOCIsMTAxLCJOdW1QYWQ4IiwxMDQsIlZLX05VTVBBRDgiLGUsZV0sWzEwMiwxLDEwMywiTnVtcGFkOSIsMTAyLCJOdW1QYWQ5IiwxMDUsIlZLX05VTVBBRDkiLGUsZV0sWzkzLDEsMTA0LCJOdW1wYWQwIiw5MywiTnVtUGFkMCIsOTYsIlZLX05VTVBBRDAiLGUsZV0sWzEwNywxLDEwNSwiTnVtcGFkRGVjaW1hbCIsMTA3LCJOdW1QYWRfRGVjaW1hbCIsMTEwLCJWS19ERUNJTUFMIixlLGVdLFs5MiwwLDEwNiwiSW50bEJhY2tzbGFzaCIsOTIsIk9FTV8xMDIiLDIyNiwiVktfT0VNXzEwMiIsZSxlXSxbNTgsMSwxMDcsIkNvbnRleHRNZW51Iiw1OCwiQ29udGV4dE1lbnUiLDkzLGUsZSxlXSxbMCwxLDEwOCwiUG93ZXIiLDAsZSwwLGUsZSxlXSxbMCwxLDEwOSwiTnVtcGFkRXF1YWwiLDAsZSwwLGUsZSxlXSxbNzEsMSwxMTAsIkYxMyIsNzEsIkYxMyIsMTI0LCJWS19GMTMiLGUsZV0sWzcyLDEsMTExLCJGMTQiLDcyLCJGMTQiLDEyNSwiVktfRjE0IixlLGVdLFs3MywxLDExMiwiRjE1Iiw3MywiRjE1IiwxMjYsIlZLX0YxNSIsZSxlXSxbNzQsMSwxMTMsIkYxNiIsNzQsIkYxNiIsMTI3LCJWS19GMTYiLGUsZV0sWzc1LDEsMTE0LCJGMTciLDc1LCJGMTciLDEyOCwiVktfRjE3IixlLGVdLFs3NiwxLDExNSwiRjE4Iiw3NiwiRjE4IiwxMjksIlZLX0YxOCIsZSxlXSxbNzcsMSwxMTYsIkYxOSIsNzcsIkYxOSIsMTMwLCJWS19GMTkiLGUsZV0sWzAsMSwxMTcsIkYyMCIsMCxlLDAsIlZLX0YyMCIsZSxlXSxbMCwxLDExOCwiRjIxIiwwLGUsMCwiVktfRjIxIixlLGVdLFswLDEsMTE5LCJGMjIiLDAsZSwwLCJWS19GMjIiLGUsZV0sWzAsMSwxMjAsIkYyMyIsMCxlLDAsIlZLX0YyMyIsZSxlXSxbMCwxLDEyMSwiRjI0IiwwLGUsMCwiVktfRjI0IixlLGVdLFswLDEsMTIyLCJPcGVuIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjMsIkhlbHAiLDAsZSwwLGUsZSxlXSxbMCwxLDEyNCwiU2VsZWN0IiwwLGUsMCxlLGUsZV0sWzAsMSwxMjUsIkFnYWluIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjYsIlVuZG8iLDAsZSwwLGUsZSxlXSxbMCwxLDEyNywiQ3V0IiwwLGUsMCxlLGUsZV0sWzAsMSwxMjgsIkNvcHkiLDAsZSwwLGUsZSxlXSxbMCwxLDEyOSwiUGFzdGUiLDAsZSwwLGUsZSxlXSxbMCwxLDEzMCwiRmluZCIsMCxlLDAsZSxlLGVdLFswLDEsMTMxLCJBdWRpb1ZvbHVtZU11dGUiLDExMiwiQXVkaW9Wb2x1bWVNdXRlIiwxNzMsIlZLX1ZPTFVNRV9NVVRFIixlLGVdLFswLDEsMTMyLCJBdWRpb1ZvbHVtZVVwIiwxMTMsIkF1ZGlvVm9sdW1lVXAiLDE3NSwiVktfVk9MVU1FX1VQIixlLGVdLFswLDEsMTMzLCJBdWRpb1ZvbHVtZURvd24iLDExNCwiQXVkaW9Wb2x1bWVEb3duIiwxNzQsIlZLX1ZPTFVNRV9ET1dOIixlLGVdLFsxMDUsMSwxMzQsIk51bXBhZENvbW1hIiwxMDUsIk51bVBhZF9TZXBhcmF0b3IiLDEwOCwiVktfU0VQQVJBVE9SIixlLGVdLFsxMTAsMCwxMzUsIkludGxSbyIsMTEwLCJBQk5UX0MxIiwxOTMsIlZLX0FCTlRfQzEiLGUsZV0sWzAsMSwxMzYsIkthbmFNb2RlIiwwLGUsMCxlLGUsZV0sWzAsMCwxMzcsIkludGxZZW4iLDAsZSwwLGUsZSxlXSxbMCwxLDEzOCwiQ29udmVydCIsMCxlLDAsZSxlLGVdLFswLDEsMTM5LCJOb25Db252ZXJ0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDAsIkxhbmcxIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDEsIkxhbmcyIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDIsIkxhbmczIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDMsIkxhbmc0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDQsIkxhbmc1IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDUsIkFib3J0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDYsIlByb3BzIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDcsIk51bXBhZFBhcmVuTGVmdCIsMCxlLDAsZSxlLGVdLFswLDEsMTQ4LCJOdW1wYWRQYXJlblJpZ2h0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDksIk51bXBhZEJhY2tzcGFjZSIsMCxlLDAsZSxlLGVdLFswLDEsMTUwLCJOdW1wYWRNZW1vcnlTdG9yZSIsMCxlLDAsZSxlLGVdLFswLDEsMTUxLCJOdW1wYWRNZW1vcnlSZWNhbGwiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MiwiTnVtcGFkTWVtb3J5Q2xlYXIiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MywiTnVtcGFkTWVtb3J5QWRkIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTQsIk51bXBhZE1lbW9yeVN1YnRyYWN0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNTUsIk51bXBhZENsZWFyIiwxMjYsIkNsZWFyIiwxMiwiVktfQ0xFQVIiLGUsZV0sWzAsMSwxNTYsIk51bXBhZENsZWFyRW50cnkiLDAsZSwwLGUsZSxlXSxbNSwxLDAsZSw1LCJDdHJsIiwxNywiVktfQ09OVFJPTCIsZSxlXSxbNCwxLDAsZSw0LCJTaGlmdCIsMTYsIlZLX1NISUZUIixlLGVdLFs2LDEsMCxlLDYsIkFsdCIsMTgsIlZLX01FTlUiLGUsZV0sWzU3LDEsMCxlLDU3LCJNZXRhIiwwLCJWS19DT01NQU5EIixlLGVdLFs1LDEsMTU3LCJDb250cm9sTGVmdCIsNSxlLDAsIlZLX0xDT05UUk9MIixlLGVdLFs0LDEsMTU4LCJTaGlmdExlZnQiLDQsZSwwLCJWS19MU0hJRlQiLGUsZV0sWzYsMSwxNTksIkFsdExlZnQiLDYsZSwwLCJWS19MTUVOVSIsZSxlXSxbNTcsMSwxNjAsIk1ldGFMZWZ0Iiw1NyxlLDAsIlZLX0xXSU4iLGUsZV0sWzUsMSwxNjEsIkNvbnRyb2xSaWdodCIsNSxlLDAsIlZLX1JDT05UUk9MIixlLGVdLFs0LDEsMTYyLCJTaGlmdFJpZ2h0Iiw0LGUsMCwiVktfUlNISUZUIixlLGVdLFs2LDEsMTYzLCJBbHRSaWdodCIsNixlLDAsIlZLX1JNRU5VIixlLGVdLFs1NywxLDE2NCwiTWV0YVJpZ2h0Iiw1NyxlLDAsIlZLX1JXSU4iLGUsZV0sWzAsMSwxNjUsIkJyaWdodG5lc3NVcCIsMCxlLDAsZSxlLGVdLFswLDEsMTY2LCJCcmlnaHRuZXNzRG93biIsMCxlLDAsZSxlLGVdLFswLDEsMTY3LCJNZWRpYVBsYXkiLDAsZSwwLGUsZSxlXSxbMCwxLDE2OCwiTWVkaWFSZWNvcmQiLDAsZSwwLGUsZSxlXSxbMCwxLDE2OSwiTWVkaWFGYXN0Rm9yd2FyZCIsMCxlLDAsZSxlLGVdLFswLDEsMTcwLCJNZWRpYVJld2luZCIsMCxlLDAsZSxlLGVdLFsxMTQsMSwxNzEsIk1lZGlhVHJhY2tOZXh0IiwxMTksIk1lZGlhVHJhY2tOZXh0IiwxNzYsIlZLX01FRElBX05FWFRfVFJBQ0siLGUsZV0sWzExNSwxLDE3MiwiTWVkaWFUcmFja1ByZXZpb3VzIiwxMjAsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTc3LCJWS19NRURJQV9QUkVWX1RSQUNLIixlLGVdLFsxMTYsMSwxNzMsIk1lZGlhU3RvcCIsMTIxLCJNZWRpYVN0b3AiLDE3OCwiVktfTUVESUFfU1RPUCIsZSxlXSxbMCwxLDE3NCwiRWplY3QiLDAsZSwwLGUsZSxlXSxbMTE3LDEsMTc1LCJNZWRpYVBsYXlQYXVzZSIsMTIyLCJNZWRpYVBsYXlQYXVzZSIsMTc5LCJWS19NRURJQV9QTEFZX1BBVVNFIixlLGVdLFswLDEsMTc2LCJNZWRpYVNlbGVjdCIsMTIzLCJMYXVuY2hNZWRpYVBsYXllciIsMTgxLCJWS19NRURJQV9MQVVOQ0hfTUVESUFfU0VMRUNUIixlLGVdLFswLDEsMTc3LCJMYXVuY2hNYWlsIiwxMjQsIkxhdW5jaE1haWwiLDE4MCwiVktfTUVESUFfTEFVTkNIX01BSUwiLGUsZV0sWzAsMSwxNzgsIkxhdW5jaEFwcDIiLDEyNSwiTGF1bmNoQXBwMiIsMTgzLCJWS19NRURJQV9MQVVOQ0hfQVBQMiIsZSxlXSxbMCwxLDE3OSwiTGF1bmNoQXBwMSIsMCxlLDAsIlZLX01FRElBX0xBVU5DSF9BUFAxIixlLGVdLFswLDEsMTgwLCJTZWxlY3RUYXNrIiwwLGUsMCxlLGUsZV0sWzAsMSwxODEsIkxhdW5jaFNjcmVlblNhdmVyIiwwLGUsMCxlLGUsZV0sWzAsMSwxODIsIkJyb3dzZXJTZWFyY2giLDExNSwiQnJvd3NlclNlYXJjaCIsMTcwLCJWS19CUk9XU0VSX1NFQVJDSCIsZSxlXSxbMCwxLDE4MywiQnJvd3NlckhvbWUiLDExNiwiQnJvd3NlckhvbWUiLDE3MiwiVktfQlJPV1NFUl9IT01FIixlLGVdLFsxMTIsMSwxODQsIkJyb3dzZXJCYWNrIiwxMTcsIkJyb3dzZXJCYWNrIiwxNjYsIlZLX0JST1dTRVJfQkFDSyIsZSxlXSxbMTEzLDEsMTg1LCJCcm93c2VyRm9yd2FyZCIsMTE4LCJCcm93c2VyRm9yd2FyZCIsMTY3LCJWS19CUk9XU0VSX0ZPUldBUkQiLGUsZV0sWzAsMSwxODYsIkJyb3dzZXJTdG9wIiwwLGUsMCwiVktfQlJPV1NFUl9TVE9QIixlLGVdLFswLDEsMTg3LCJCcm93c2VyUmVmcmVzaCIsMCxlLDAsIlZLX0JST1dTRVJfUkVGUkVTSCIsZSxlXSxbMCwxLDE4OCwiQnJvd3NlckZhdm9yaXRlcyIsMCxlLDAsIlZLX0JST1dTRVJfRkFWT1JJVEVTIixlLGVdLFswLDEsMTg5LCJab29tVG9nZ2xlIiwwLGUsMCxlLGUsZV0sWzAsMSwxOTAsIk1haWxSZXBseSIsMCxlLDAsZSxlLGVdLFswLDEsMTkxLCJNYWlsRm9yd2FyZCIsMCxlLDAsZSxlLGVdLFswLDEsMTkyLCJNYWlsU2VuZCIsMCxlLDAsZSxlLGVdLFsxMDksMSwwLGUsMTA5LCJLZXlJbkNvbXBvc2l0aW9uIiwyMjksZSxlLGVdLFsxMTEsMSwwLGUsMTExLCJBQk5UX0MyIiwxOTQsIlZLX0FCTlRfQzIiLGUsZV0sWzkxLDEsMCxlLDkxLCJPRU1fOCIsMjIzLCJWS19PRU1fOCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfS0FOQSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfSEFOR1VMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19KVU5KQSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfRklOQUwiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0hBTkpBIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19LQU5KSSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQ09OVkVSVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfTk9OQ09OVkVSVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQUNDRVBUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19NT0RFQ0hBTkdFIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19TRUxFQ1QiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BSSU5UIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19FWEVDVVRFIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19TTkFQU0hPVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfSEVMUCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQVBQUyIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUFJPQ0VTU0tFWSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUEFDS0VUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19EQkVfU0JDU0NIQVIiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0RCRV9EQkNTQ0hBUiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQVRUTiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQ1JTRUwiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0VYU0VMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19FUkVPRiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUExBWSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfWk9PTSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfTk9OQU1FIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19QQTEiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX09FTV9DTEVBUiIsZSxlXV0sbj1bXSxyPVtdO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0W3QsaSxvLGEscyxjLGwsdSxoLGZdPWU7aWYocltvXXx8KHJbb109ITAsRnRbYV09byxEdFthLnRvTG93ZXJDYXNlKCldPW8pLCFuW3NdKXtpZihuW3NdPSEwLCFjKXRocm93IG5ldyBFcnJvcihgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG1pc3NpbmcgZm9yIGtleSBjb2RlICR7c30gYXJvdW5kIHNjYW4gY29kZSAke2F9YCk7TXQuZGVmaW5lKHMsYyksUHQuZGVmaW5lKHMsaHx8YyksUnQuZGVmaW5lKHMsZnx8aHx8Yyl9bCYmKFZ0W2xdPXMpfX0oKSxmdW5jdGlvbihlKXtlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBNdC5rZXlDb2RlVG9TdHIoZSl9LGUuZnJvbVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gTXQuc3RyVG9LZXlDb2RlKGUpfSxlLnRvVXNlclNldHRpbmdzVVM9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0LmtleUNvZGVUb1N0cihlKX0sZS50b1VzZXJTZXR0aW5nc0dlbmVyYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIFJ0LmtleUNvZGVUb1N0cihlKX0sZS5mcm9tVXNlclNldHRpbmdzPWZ1bmN0aW9uKGUpe3JldHVybiBQdC5zdHJUb0tleUNvZGUoZSl8fFJ0LnN0clRvS2V5Q29kZShlKX0sZS50b0VsZWN0cm9uQWNjZWxlcmF0b3I9ZnVuY3Rpb24oZSl7aWYoZT49OTMmJmU8PTEwOClyZXR1cm4gbnVsbDtzd2l0Y2goZSl7Y2FzZSAxNjpyZXR1cm4iVXAiO2Nhc2UgMTg6cmV0dXJuIkRvd24iO2Nhc2UgMTU6cmV0dXJuIkxlZnQiO2Nhc2UgMTc6cmV0dXJuIlJpZ2h0In1yZXR1cm4gTXQua2V5Q29kZVRvU3RyKGUpfX0oS3R8fChLdD17fSkpO2NsYXNzIFV0IGV4dGVuZHMgdHR7Y29uc3RydWN0b3IoZSx0LG4scil7c3VwZXIoZSx0LG4sciksdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9ZSx0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uPXQsdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXI9bix0aGlzLnBvc2l0aW9uQ29sdW1uPXJ9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMucG9zaXRpb25MaW5lTnVtYmVyKyIsIit0aGlzLnBvc2l0aW9uQ29sdW1uKyJdIn1lcXVhbHNTZWxlY3Rpb24oZSl7cmV0dXJuIFV0LnNlbGVjdGlvbnNFcXVhbCh0aGlzLGUpfXN0YXRpYyBzZWxlY3Rpb25zRXF1YWwoZSx0KXtyZXR1cm4gZS5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10LnNlbGVjdGlvblN0YXJ0TGluZU51bWJlciYmZS5zZWxlY3Rpb25TdGFydENvbHVtbj09PXQuc2VsZWN0aW9uU3RhcnRDb2x1bW4mJmUucG9zaXRpb25MaW5lTnVtYmVyPT09dC5wb3NpdGlvbkxpbmVOdW1iZXImJmUucG9zaXRpb25Db2x1bW49PT10LnBvc2l0aW9uQ29sdW1ufWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PXRoaXMuc3RhcnRMaW5lTnVtYmVyJiZ0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09dGhpcy5zdGFydENvbHVtbj8wOjF9c2V0RW5kUG9zaXRpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuZ2V0RGlyZWN0aW9uKCk/bmV3IFV0KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sZSx0KTpuZXcgVXQoZSx0LHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4pfWdldFBvc2l0aW9uKCl7cmV0dXJuIG5ldyBldCh0aGlzLnBvc2l0aW9uTGluZU51bWJlcix0aGlzLnBvc2l0aW9uQ29sdW1uKX1nZXRTZWxlY3Rpb25TdGFydCgpe3JldHVybiBuZXcgZXQodGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbil9c2V0U3RhcnRQb3NpdGlvbihlLHQpe3JldHVybiAwPT09dGhpcy5nZXREaXJlY3Rpb24oKT9uZXcgVXQoZSx0LHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbik6bmV3IFV0KHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbixlLHQpfXN0YXRpYyBmcm9tUG9zaXRpb25zKGUsdD1lKXtyZXR1cm4gbmV3IFV0KGUubGluZU51bWJlcixlLmNvbHVtbix0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBmcm9tUmFuZ2UoZSx0KXtyZXR1cm4gMD09PXQ/bmV3IFV0KGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4sZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uKTpuZXcgVXQoZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uLGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBsaWZ0U2VsZWN0aW9uKGUpe3JldHVybiBuZXcgVXQoZS5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsZS5zZWxlY3Rpb25TdGFydENvbHVtbixlLnBvc2l0aW9uTGluZU51bWJlcixlLnBvc2l0aW9uQ29sdW1uKX1zdGF0aWMgc2VsZWN0aW9uc0FyckVxdWFsKGUsdCl7aWYoZSYmIXR8fCFlJiZ0KXJldHVybiExO2lmKCFlJiYhdClyZXR1cm4hMDtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZighdGhpcy5zZWxlY3Rpb25zRXF1YWwoZVtuXSx0W25dKSlyZXR1cm4hMTtyZXR1cm4hMH1zdGF0aWMgaXNJU2VsZWN0aW9uKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuc2VsZWN0aW9uU3RhcnRDb2x1bW4mJiJudW1iZXIiPT10eXBlb2YgZS5wb3NpdGlvbkxpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5wb3NpdGlvbkNvbHVtbn1zdGF0aWMgY3JlYXRlV2l0aERpcmVjdGlvbihlLHQsbixyLGkpe3JldHVybiAwPT09aT9uZXcgVXQoZSx0LG4scik6bmV3IFV0KG4scixlLHQpfX1jbGFzcyBCdHtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5pZD1lLHRoaXMuZGVmaW5pdGlvbj10LHRoaXMuZGVzY3JpcHRpb249bixCdC5fYWxsQ29kaWNvbnMucHVzaCh0aGlzKX1nZXQgY2xhc3NOYW1lcygpe3JldHVybiJjb2RpY29uIGNvZGljb24tIit0aGlzLmlkfWdldCBjbGFzc05hbWVzQXJyYXkoKXtyZXR1cm5bImNvZGljb24iLCJjb2RpY29uLSIrdGhpcy5pZF19Z2V0IGNzc1NlbGVjdG9yKCl7cmV0dXJuIi5jb2RpY29uLmNvZGljb24tIit0aGlzLmlkfXN0YXRpYyBnZXRBbGwoKXtyZXR1cm4gQnQuX2FsbENvZGljb25zfX1CdC5fYWxsQ29kaWNvbnM9W10sQnQuYWRkPW5ldyBCdCgiYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTYwIn0pLEJ0LnBsdXM9bmV3IEJ0KCJwbHVzIixCdC5hZGQuZGVmaW5pdGlvbiksQnQuZ2lzdE5ldz1uZXcgQnQoImdpc3QtbmV3IixCdC5hZGQuZGVmaW5pdGlvbiksQnQucmVwb0NyZWF0ZT1uZXcgQnQoInJlcG8tY3JlYXRlIixCdC5hZGQuZGVmaW5pdGlvbiksQnQubGlnaHRidWxiPW5ldyBCdCgibGlnaHRidWxiIix7Zm9udENoYXJhY3RlcjoiXFxlYTYxIn0pLEJ0LmxpZ2h0QnVsYj1uZXcgQnQoImxpZ2h0LWJ1bGIiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjEifSksQnQucmVwbz1uZXcgQnQoInJlcG8iLHtmb250Q2hhcmFjdGVyOiJcXGVhNjIifSksQnQucmVwb0RlbGV0ZT1uZXcgQnQoInJlcG8tZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTYyIn0pLEJ0Lmdpc3RGb3JrPW5ldyBCdCgiZ2lzdC1mb3JrIix7Zm9udENoYXJhY3RlcjoiXFxlYTYzIn0pLEJ0LnJlcG9Gb3JrZWQ9bmV3IEJ0KCJyZXBvLWZvcmtlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MyJ9KSxCdC5naXRQdWxsUmVxdWVzdD1uZXcgQnQoImdpdC1wdWxsLXJlcXVlc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjQifSksQnQuZ2l0UHVsbFJlcXVlc3RBYmFuZG9uZWQ9bmV3IEJ0KCJnaXQtcHVsbC1yZXF1ZXN0LWFiYW5kb25lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NCJ9KSxCdC5yZWNvcmRLZXlzPW5ldyBCdCgicmVjb3JkLWtleXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjUifSksQnQua2V5Ym9hcmQ9bmV3IEJ0KCJrZXlib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NSJ9KSxCdC50YWc9bmV3IEJ0KCJ0YWciLHtmb250Q2hhcmFjdGVyOiJcXGVhNjYifSksQnQudGFnQWRkPW5ldyBCdCgidGFnLWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NiJ9KSxCdC50YWdSZW1vdmU9bmV3IEJ0KCJ0YWctcmVtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLEJ0LnBlcnNvbj1uZXcgQnQoInBlcnNvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxCdC5wZXJzb25Gb2xsb3c9bmV3IEJ0KCJwZXJzb24tZm9sbG93Iix7Zm9udENoYXJhY3RlcjoiXFxlYTY3In0pLEJ0LnBlcnNvbk91dGxpbmU9bmV3IEJ0KCJwZXJzb24tb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxCdC5wZXJzb25GaWxsZWQ9bmV3IEJ0KCJwZXJzb24tZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTY3In0pLEJ0LmdpdEJyYW5jaD1uZXcgQnQoImdpdC1icmFuY2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksQnQuZ2l0QnJhbmNoQ3JlYXRlPW5ldyBCdCgiZ2l0LWJyYW5jaC1jcmVhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksQnQuZ2l0QnJhbmNoRGVsZXRlPW5ldyBCdCgiZ2l0LWJyYW5jaC1kZWxldGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksQnQuc291cmNlQ29udHJvbD1uZXcgQnQoInNvdXJjZS1jb250cm9sIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLEJ0Lm1pcnJvcj1uZXcgQnQoIm1pcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OSJ9KSxCdC5taXJyb3JQdWJsaWM9bmV3IEJ0KCJtaXJyb3ItcHVibGljIix7Zm9udENoYXJhY3RlcjoiXFxlYTY5In0pLEJ0LnN0YXI9bmV3IEJ0KCJzdGFyIix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLEJ0LnN0YXJBZGQ9bmV3IEJ0KCJzdGFyLWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxCdC5zdGFyRGVsZXRlPW5ldyBCdCgic3Rhci1kZWxldGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksQnQuc3RhckVtcHR5PW5ldyBCdCgic3Rhci1lbXB0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxCdC5jb21tZW50PW5ldyBCdCgiY29tbWVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YiJ9KSxCdC5jb21tZW50QWRkPW5ldyBCdCgiY29tbWVudC1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmIifSksQnQuYWxlcnQ9bmV3IEJ0KCJhbGVydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YyJ9KSxCdC53YXJuaW5nPW5ldyBCdCgid2FybmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YyJ9KSxCdC5zZWFyY2g9bmV3IEJ0KCJzZWFyY2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNmQifSksQnQuc2VhcmNoU2F2ZT1uZXcgQnQoInNlYXJjaC1zYXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYTZkIn0pLEJ0LmxvZ091dD1uZXcgQnQoImxvZy1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmUifSksQnQuc2lnbk91dD1uZXcgQnQoInNpZ24tb3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZlIn0pLEJ0LmxvZ0luPW5ldyBCdCgibG9nLWluIix7Zm9udENoYXJhY3RlcjoiXFxlYTZmIn0pLEJ0LnNpZ25Jbj1uZXcgQnQoInNpZ24taW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhNmYifSksQnQuZXllPW5ldyBCdCgiZXllIix7Zm9udENoYXJhY3RlcjoiXFxlYTcwIn0pLEJ0LmV5ZVVud2F0Y2g9bmV3IEJ0KCJleWUtdW53YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxCdC5leWVXYXRjaD1uZXcgQnQoImV5ZS13YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxCdC5jaXJjbGVGaWxsZWQ9bmV3IEJ0KCJjaXJjbGUtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LnByaW1pdGl2ZURvdD1uZXcgQnQoInByaW1pdGl2ZS1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksQnQuY2xvc2VEaXJ0eT1uZXcgQnQoImNsb3NlLWRpcnR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LmRlYnVnQnJlYWtwb2ludD1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksQnQuZGVidWdCcmVha3BvaW50RGlzYWJsZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LmRlYnVnSGludD1uZXcgQnQoImRlYnVnLWhpbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksQnQucHJpbWl0aXZlU3F1YXJlPW5ldyBCdCgicHJpbWl0aXZlLXNxdWFyZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MiJ9KSxCdC5lZGl0PW5ldyBCdCgiZWRpdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MyJ9KSxCdC5wZW5jaWw9bmV3IEJ0KCJwZW5jaWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzMifSksQnQuaW5mbz1uZXcgQnQoImluZm8iLHtmb250Q2hhcmFjdGVyOiJcXGVhNzQifSksQnQuaXNzdWVPcGVuZWQ9bmV3IEJ0KCJpc3N1ZS1vcGVuZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzQifSksQnQuZ2lzdFByaXZhdGU9bmV3IEJ0KCJnaXN0LXByaXZhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksQnQuZ2l0Rm9ya1ByaXZhdGU9bmV3IEJ0KCJnaXQtZm9yay1wcml2YXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc1In0pLEJ0LmxvY2s9bmV3IEJ0KCJsb2NrIix7Zm9udENoYXJhY3RlcjoiXFxlYTc1In0pLEJ0Lm1pcnJvclByaXZhdGU9bmV3IEJ0KCJtaXJyb3ItcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxCdC5jbG9zZT1uZXcgQnQoImNsb3NlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc2In0pLEJ0LnJlbW92ZUNsb3NlPW5ldyBCdCgicmVtb3ZlLWNsb3NlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc2In0pLEJ0Lng9bmV3IEJ0KCJ4Iix7Zm9udENoYXJhY3RlcjoiXFxlYTc2In0pLEJ0LnJlcG9TeW5jPW5ldyBCdCgicmVwby1zeW5jIix7Zm9udENoYXJhY3RlcjoiXFxlYTc3In0pLEJ0LnN5bmM9bmV3IEJ0KCJzeW5jIix7Zm9udENoYXJhY3RlcjoiXFxlYTc3In0pLEJ0LmNsb25lPW5ldyBCdCgiY2xvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzgifSksQnQuZGVza3RvcERvd25sb2FkPW5ldyBCdCgiZGVza3RvcC1kb3dubG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3OCJ9KSxCdC5iZWFrZXI9bmV3IEJ0KCJiZWFrZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzkifSksQnQubWljcm9zY29wZT1uZXcgQnQoIm1pY3Jvc2NvcGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzkifSksQnQudm09bmV3IEJ0KCJ2bSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YSJ9KSxCdC5kZXZpY2VEZXNrdG9wPW5ldyBCdCgiZGV2aWNlLWRlc2t0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2EifSksQnQuZmlsZT1uZXcgQnQoImZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2IifSksQnQuZmlsZVRleHQ9bmV3IEJ0KCJmaWxlLXRleHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2IifSksQnQubW9yZT1uZXcgQnQoIm1vcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2MifSksQnQuZWxsaXBzaXM9bmV3IEJ0KCJlbGxpcHNpcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxCdC5rZWJhYkhvcml6b250YWw9bmV3IEJ0KCJrZWJhYi1ob3Jpem9udGFsIix7Zm9udENoYXJhY3RlcjoiXFxlYTdjIn0pLEJ0Lm1haWxSZXBseT1uZXcgQnQoIm1haWwtcmVwbHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2QifSksQnQucmVwbHk9bmV3IEJ0KCJyZXBseSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZCJ9KSxCdC5vcmdhbml6YXRpb249bmV3IEJ0KCJvcmdhbml6YXRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhN2UifSksQnQub3JnYW5pemF0aW9uRmlsbGVkPW5ldyBCdCgib3JnYW5pemF0aW9uLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZSJ9KSxCdC5vcmdhbml6YXRpb25PdXRsaW5lPW5ldyBCdCgib3JnYW5pemF0aW9uLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2UifSksQnQubmV3RmlsZT1uZXcgQnQoIm5ldy1maWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTdmIn0pLEJ0LmZpbGVBZGQ9bmV3IEJ0KCJmaWxlLWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZiJ9KSxCdC5uZXdGb2xkZXI9bmV3IEJ0KCJuZXctZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTgwIn0pLEJ0LmZpbGVEaXJlY3RvcnlDcmVhdGU9bmV3IEJ0KCJmaWxlLWRpcmVjdG9yeS1jcmVhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODAifSksQnQudHJhc2g9bmV3IEJ0KCJ0cmFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MSJ9KSxCdC50cmFzaGNhbj1uZXcgQnQoInRyYXNoY2FuIix7Zm9udENoYXJhY3RlcjoiXFxlYTgxIn0pLEJ0Lmhpc3Rvcnk9bmV3IEJ0KCJoaXN0b3J5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTgyIn0pLEJ0LmNsb2NrPW5ldyBCdCgiY2xvY2siLHtmb250Q2hhcmFjdGVyOiJcXGVhODIifSksQnQuZm9sZGVyPW5ldyBCdCgiZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTgzIn0pLEJ0LmZpbGVEaXJlY3Rvcnk9bmV3IEJ0KCJmaWxlLWRpcmVjdG9yeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MyJ9KSxCdC5zeW1ib2xGb2xkZXI9bmV3IEJ0KCJzeW1ib2wtZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTgzIn0pLEJ0LmxvZ29HaXRodWI9bmV3IEJ0KCJsb2dvLWdpdGh1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NCJ9KSxCdC5tYXJrR2l0aHViPW5ldyBCdCgibWFyay1naXRodWIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODQifSksQnQuZ2l0aHViPW5ldyBCdCgiZ2l0aHViIix7Zm9udENoYXJhY3RlcjoiXFxlYTg0In0pLEJ0LnRlcm1pbmFsPW5ldyBCdCgidGVybWluYWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhODUifSksQnQuY29uc29sZT1uZXcgQnQoImNvbnNvbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODUifSksQnQucmVwbD1uZXcgQnQoInJlcGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhODUifSksQnQuemFwPW5ldyBCdCgiemFwIix7Zm9udENoYXJhY3RlcjoiXFxlYTg2In0pLEJ0LnN5bWJvbEV2ZW50PW5ldyBCdCgic3ltYm9sLWV2ZW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTg2In0pLEJ0LmVycm9yPW5ldyBCdCgiZXJyb3IiLHtmb250Q2hhcmFjdGVyOiJcXGVhODcifSksQnQuc3RvcD1uZXcgQnQoInN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhODcifSksQnQudmFyaWFibGU9bmV3IEJ0KCJ2YXJpYWJsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4OCJ9KSxCdC5zeW1ib2xWYXJpYWJsZT1uZXcgQnQoInN5bWJvbC12YXJpYWJsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4OCJ9KSxCdC5hcnJheT1uZXcgQnQoImFycmF5Iix7Zm9udENoYXJhY3RlcjoiXFxlYThhIn0pLEJ0LnN5bWJvbEFycmF5PW5ldyBCdCgic3ltYm9sLWFycmF5Iix7Zm9udENoYXJhY3RlcjoiXFxlYThhIn0pLEJ0LnN5bWJvbE1vZHVsZT1uZXcgQnQoInN5bWJvbC1tb2R1bGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGIifSksQnQuc3ltYm9sUGFja2FnZT1uZXcgQnQoInN5bWJvbC1wYWNrYWdlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLEJ0LnN5bWJvbE5hbWVzcGFjZT1uZXcgQnQoInN5bWJvbC1uYW1lc3BhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGIifSksQnQuc3ltYm9sT2JqZWN0PW5ldyBCdCgic3ltYm9sLW9iamVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxCdC5zeW1ib2xNZXRob2Q9bmV3IEJ0KCJzeW1ib2wtbWV0aG9kIix7Zm9udENoYXJhY3RlcjoiXFxlYThjIn0pLEJ0LnN5bWJvbEZ1bmN0aW9uPW5ldyBCdCgic3ltYm9sLWZ1bmN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYThjIn0pLEJ0LnN5bWJvbENvbnN0cnVjdG9yPW5ldyBCdCgic3ltYm9sLWNvbnN0cnVjdG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYThjIn0pLEJ0LnN5bWJvbEJvb2xlYW49bmV3IEJ0KCJzeW1ib2wtYm9vbGVhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4ZiJ9KSxCdC5zeW1ib2xOdWxsPW5ldyBCdCgic3ltYm9sLW51bGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGYifSksQnQuc3ltYm9sTnVtZXJpYz1uZXcgQnQoInN5bWJvbC1udW1lcmljIix7Zm9udENoYXJhY3RlcjoiXFxlYTkwIn0pLEJ0LnN5bWJvbE51bWJlcj1uZXcgQnQoInN5bWJvbC1udW1iZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTAifSksQnQuc3ltYm9sU3RydWN0dXJlPW5ldyBCdCgic3ltYm9sLXN0cnVjdHVyZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MSJ9KSxCdC5zeW1ib2xTdHJ1Y3Q9bmV3IEJ0KCJzeW1ib2wtc3RydWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTkxIn0pLEJ0LnN5bWJvbFBhcmFtZXRlcj1uZXcgQnQoInN5bWJvbC1wYXJhbWV0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTIifSksQnQuc3ltYm9sVHlwZVBhcmFtZXRlcj1uZXcgQnQoInN5bWJvbC10eXBlLXBhcmFtZXRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MiJ9KSxCdC5zeW1ib2xLZXk9bmV3IEJ0KCJzeW1ib2wta2V5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTkzIn0pLEJ0LnN5bWJvbFRleHQ9bmV3IEJ0KCJzeW1ib2wtdGV4dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MyJ9KSxCdC5zeW1ib2xSZWZlcmVuY2U9bmV3IEJ0KCJzeW1ib2wtcmVmZXJlbmNlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk0In0pLEJ0LmdvVG9GaWxlPW5ldyBCdCgiZ28tdG8tZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NCJ9KSxCdC5zeW1ib2xFbnVtPW5ldyBCdCgic3ltYm9sLWVudW0iLHtmb250Q2hhcmFjdGVyOiJcXGVhOTUifSksQnQuc3ltYm9sVmFsdWU9bmV3IEJ0KCJzeW1ib2wtdmFsdWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTUifSksQnQuc3ltYm9sUnVsZXI9bmV3IEJ0KCJzeW1ib2wtcnVsZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTYifSksQnQuc3ltYm9sVW5pdD1uZXcgQnQoInN5bWJvbC11bml0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTk2In0pLEJ0LmFjdGl2YXRlQnJlYWtwb2ludHM9bmV3IEJ0KCJhY3RpdmF0ZS1icmVha3BvaW50cyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NyJ9KSxCdC5hcmNoaXZlPW5ldyBCdCgiYXJjaGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5OCJ9KSxCdC5hcnJvd0JvdGg9bmV3IEJ0KCJhcnJvdy1ib3RoIix7Zm9udENoYXJhY3RlcjoiXFxlYTk5In0pLEJ0LmFycm93RG93bj1uZXcgQnQoImFycm93LWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhOWEifSksQnQuYXJyb3dMZWZ0PW5ldyBCdCgiYXJyb3ctbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5YiJ9KSxCdC5hcnJvd1JpZ2h0PW5ldyBCdCgiYXJyb3ctcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWMifSksQnQuYXJyb3dTbWFsbERvd249bmV3IEJ0KCJhcnJvdy1zbWFsbC1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYTlkIn0pLEJ0LmFycm93U21hbGxMZWZ0PW5ldyBCdCgiYXJyb3ctc21hbGwtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZSJ9KSxCdC5hcnJvd1NtYWxsUmlnaHQ9bmV3IEJ0KCJhcnJvdy1zbWFsbC1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZiJ9KSxCdC5hcnJvd1NtYWxsVXA9bmV3IEJ0KCJhcnJvdy1zbWFsbC11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhMCJ9KSxCdC5hcnJvd1VwPW5ldyBCdCgiYXJyb3ctdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTEifSksQnQuYmVsbD1uZXcgQnQoImJlbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTIifSksQnQuYm9sZD1uZXcgQnQoImJvbGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTMifSksQnQuYm9vaz1uZXcgQnQoImJvb2siLHtmb250Q2hhcmFjdGVyOiJcXGVhYTQifSksQnQuYm9va21hcms9bmV3IEJ0KCJib29rbWFyayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNSJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbFVudmVyaWZpZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTYifSksQnQuZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWw9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsIix7Zm9udENoYXJhY3RlcjoiXFxlYWE3In0pLEJ0LmRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsRGlzYWJsZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE3In0pLEJ0LmRlYnVnQnJlYWtwb2ludERhdGFVbnZlcmlmaWVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1kYXRhLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTgifSksQnQuZGVidWdCcmVha3BvaW50RGF0YT1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtZGF0YSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhOSJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnREYXRhRGlzYWJsZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTkifSksQnQuZGVidWdCcmVha3BvaW50TG9nVW52ZXJpZmllZD1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtbG9nLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWEifSksQnQuZGVidWdCcmVha3BvaW50TG9nPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1sb2ciLHtmb250Q2hhcmFjdGVyOiJcXGVhYWIifSksQnQuZGVidWdCcmVha3BvaW50TG9nRGlzYWJsZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWxvZy1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYiJ9KSxCdC5icmllZmNhc2U9bmV3IEJ0KCJicmllZmNhc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWMifSksQnQuYnJvYWRjYXN0PW5ldyBCdCgiYnJvYWRjYXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWFkIn0pLEJ0LmJyb3dzZXI9bmV3IEJ0KCJicm93c2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYWFlIn0pLEJ0LmJ1Zz1uZXcgQnQoImJ1ZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhZiJ9KSxCdC5jYWxlbmRhcj1uZXcgQnQoImNhbGVuZGFyIix7Zm9udENoYXJhY3RlcjoiXFxlYWIwIn0pLEJ0LmNhc2VTZW5zaXRpdmU9bmV3IEJ0KCJjYXNlLXNlbnNpdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMSJ9KSxCdC5jaGVjaz1uZXcgQnQoImNoZWNrIix7Zm9udENoYXJhY3RlcjoiXFxlYWIyIn0pLEJ0LmNoZWNrbGlzdD1uZXcgQnQoImNoZWNrbGlzdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMyJ9KSxCdC5jaGV2cm9uRG93bj1uZXcgQnQoImNoZXZyb24tZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNCJ9KSxCdC5kcm9wRG93bkJ1dHRvbj1uZXcgQnQoImRyb3AtZG93bi1idXR0b24iLEJ0LmNoZXZyb25Eb3duLmRlZmluaXRpb24pLEJ0LmNoZXZyb25MZWZ0PW5ldyBCdCgiY2hldnJvbi1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWI1In0pLEJ0LmNoZXZyb25SaWdodD1uZXcgQnQoImNoZXZyb24tcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjYifSksQnQuY2hldnJvblVwPW5ldyBCdCgiY2hldnJvbi11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNyJ9KSxCdC5jaHJvbWVDbG9zZT1uZXcgQnQoImNocm9tZS1jbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiOCJ9KSxCdC5jaHJvbWVNYXhpbWl6ZT1uZXcgQnQoImNocm9tZS1tYXhpbWl6ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiOSJ9KSxCdC5jaHJvbWVNaW5pbWl6ZT1uZXcgQnQoImNocm9tZS1taW5pbWl6ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYSJ9KSxCdC5jaHJvbWVSZXN0b3JlPW5ldyBCdCgiY2hyb21lLXJlc3RvcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmIifSksQnQuY2lyY2xlT3V0bGluZT1uZXcgQnQoImNpcmNsZS1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYWJjIn0pLEJ0LmRlYnVnQnJlYWtwb2ludFVudmVyaWZpZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmMifSksQnQuY2lyY2xlU2xhc2g9bmV3IEJ0KCJjaXJjbGUtc2xhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVhYmQifSksQnQuY2lyY3VpdEJvYXJkPW5ldyBCdCgiY2lyY3VpdC1ib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiZSJ9KSxCdC5jbGVhckFsbD1uZXcgQnQoImNsZWFyLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiZiJ9KSxCdC5jbGlwcHk9bmV3IEJ0KCJjbGlwcHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzAifSksQnQuY2xvc2VBbGw9bmV3IEJ0KCJjbG9zZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzEifSksQnQuY2xvdWREb3dubG9hZD1uZXcgQnQoImNsb3VkLWRvd25sb2FkIix7Zm9udENoYXJhY3RlcjoiXFxlYWMyIn0pLEJ0LmNsb3VkVXBsb2FkPW5ldyBCdCgiY2xvdWQtdXBsb2FkIix7Zm9udENoYXJhY3RlcjoiXFxlYWMzIn0pLEJ0LmNvZGU9bmV3IEJ0KCJjb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWM0In0pLEJ0LmNvbGxhcHNlQWxsPW5ldyBCdCgiY29sbGFwc2UtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWM1In0pLEJ0LmNvbG9yTW9kZT1uZXcgQnQoImNvbG9yLW1vZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzYifSksQnQuY29tbWVudERpc2N1c3Npb249bmV3IEJ0KCJjb21tZW50LWRpc2N1c3Npb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhYzcifSksQnQuY29tcGFyZUNoYW5nZXM9bmV3IEJ0KCJjb21wYXJlLWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmQifSksQnQuY3JlZGl0Q2FyZD1uZXcgQnQoImNyZWRpdC1jYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWM5In0pLEJ0LmRhc2g9bmV3IEJ0KCJkYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYWNjIn0pLEJ0LmRhc2hib2FyZD1uZXcgQnQoImRhc2hib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZCJ9KSxCdC5kYXRhYmFzZT1uZXcgQnQoImRhdGFiYXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYWNlIn0pLEJ0LmRlYnVnQ29udGludWU9bmV3IEJ0KCJkZWJ1Zy1jb250aW51ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZiJ9KSxCdC5kZWJ1Z0Rpc2Nvbm5lY3Q9bmV3IEJ0KCJkZWJ1Zy1kaXNjb25uZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWQwIn0pLEJ0LmRlYnVnUGF1c2U9bmV3IEJ0KCJkZWJ1Zy1wYXVzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMSJ9KSxCdC5kZWJ1Z1Jlc3RhcnQ9bmV3IEJ0KCJkZWJ1Zy1yZXN0YXJ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWQyIn0pLEJ0LmRlYnVnU3RhcnQ9bmV3IEJ0KCJkZWJ1Zy1zdGFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMyJ9KSxCdC5kZWJ1Z1N0ZXBJbnRvPW5ldyBCdCgiZGVidWctc3RlcC1pbnRvIix7Zm9udENoYXJhY3RlcjoiXFxlYWQ0In0pLEJ0LmRlYnVnU3RlcE91dD1uZXcgQnQoImRlYnVnLXN0ZXAtb3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWQ1In0pLEJ0LmRlYnVnU3RlcE92ZXI9bmV3IEJ0KCJkZWJ1Zy1zdGVwLW92ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDYifSksQnQuZGVidWdTdG9wPW5ldyBCdCgiZGVidWctc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNyJ9KSxCdC5kZWJ1Zz1uZXcgQnQoImRlYnVnIix7Zm9udENoYXJhY3RlcjoiXFxlYWQ4In0pLEJ0LmRldmljZUNhbWVyYVZpZGVvPW5ldyBCdCgiZGV2aWNlLWNhbWVyYS12aWRlbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkOSJ9KSxCdC5kZXZpY2VDYW1lcmE9bmV3IEJ0KCJkZXZpY2UtY2FtZXJhIix7Zm9udENoYXJhY3RlcjoiXFxlYWRhIn0pLEJ0LmRldmljZU1vYmlsZT1uZXcgQnQoImRldmljZS1tb2JpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGIifSksQnQuZGlmZkFkZGVkPW5ldyBCdCgiZGlmZi1hZGRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYyJ9KSxCdC5kaWZmSWdub3JlZD1uZXcgQnQoImRpZmYtaWdub3JlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkZCJ9KSxCdC5kaWZmTW9kaWZpZWQ9bmV3IEJ0KCJkaWZmLW1vZGlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWRlIn0pLEJ0LmRpZmZSZW1vdmVkPW5ldyBCdCgiZGlmZi1yZW1vdmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWRmIn0pLEJ0LmRpZmZSZW5hbWVkPW5ldyBCdCgiZGlmZi1yZW5hbWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWUwIn0pLEJ0LmRpZmY9bmV3IEJ0KCJkaWZmIix7Zm9udENoYXJhY3RlcjoiXFxlYWUxIn0pLEJ0LmRpc2NhcmQ9bmV3IEJ0KCJkaXNjYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWUyIn0pLEJ0LmVkaXRvckxheW91dD1uZXcgQnQoImVkaXRvci1sYXlvdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTMifSksQnQuZW1wdHlXaW5kb3c9bmV3IEJ0KCJlbXB0eS13aW5kb3ciLHtmb250Q2hhcmFjdGVyOiJcXGVhZTQifSksQnQuZXhjbHVkZT1uZXcgQnQoImV4Y2x1ZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTUifSksQnQuZXh0ZW5zaW9ucz1uZXcgQnQoImV4dGVuc2lvbnMiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTYifSksQnQuZXllQ2xvc2VkPW5ldyBCdCgiZXllLWNsb3NlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlNyJ9KSxCdC5maWxlQmluYXJ5PW5ldyBCdCgiZmlsZS1iaW5hcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTgifSksQnQuZmlsZUNvZGU9bmV3IEJ0KCJmaWxlLWNvZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTkifSksQnQuZmlsZU1lZGlhPW5ldyBCdCgiZmlsZS1tZWRpYSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlYSJ9KSxCdC5maWxlUGRmPW5ldyBCdCgiZmlsZS1wZGYiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWIifSksQnQuZmlsZVN1Ym1vZHVsZT1uZXcgQnQoImZpbGUtc3VibW9kdWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYWVjIn0pLEJ0LmZpbGVTeW1saW5rRGlyZWN0b3J5PW5ldyBCdCgiZmlsZS1zeW1saW5rLWRpcmVjdG9yeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlZCJ9KSxCdC5maWxlU3ltbGlua0ZpbGU9bmV3IEJ0KCJmaWxlLXN5bWxpbmstZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlZSJ9KSxCdC5maWxlWmlwPW5ldyBCdCgiZmlsZS16aXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWYifSksQnQuZmlsZXM9bmV3IEJ0KCJmaWxlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmMCJ9KSxCdC5maWx0ZXI9bmV3IEJ0KCJmaWx0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjEifSksQnQuZmxhbWU9bmV3IEJ0KCJmbGFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmMiJ9KSxCdC5mb2xkRG93bj1uZXcgQnQoImZvbGQtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmMyJ9KSxCdC5mb2xkVXA9bmV3IEJ0KCJmb2xkLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWY0In0pLEJ0LmZvbGQ9bmV3IEJ0KCJmb2xkIix7Zm9udENoYXJhY3RlcjoiXFxlYWY1In0pLEJ0LmZvbGRlckFjdGl2ZT1uZXcgQnQoImZvbGRlci1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjYifSksQnQuZm9sZGVyT3BlbmVkPW5ldyBCdCgiZm9sZGVyLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNyJ9KSxCdC5nZWFyPW5ldyBCdCgiZ2VhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmOCJ9KSxCdC5naWZ0PW5ldyBCdCgiZ2lmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmOSJ9KSxCdC5naXN0U2VjcmV0PW5ldyBCdCgiZ2lzdC1zZWNyZXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmEifSksQnQuZ2lzdD1uZXcgQnQoImdpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmIifSksQnQuZ2l0Q29tbWl0PW5ldyBCdCgiZ2l0LWNvbW1pdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmYyJ9KSxCdC5naXRDb21wYXJlPW5ldyBCdCgiZ2l0LWNvbXBhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmQifSksQnQuZ2l0TWVyZ2U9bmV3IEJ0KCJnaXQtbWVyZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmUifSksQnQuZ2l0aHViQWN0aW9uPW5ldyBCdCgiZ2l0aHViLWFjdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmZiJ9KSxCdC5naXRodWJBbHQ9bmV3IEJ0KCJnaXRodWItYWx0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjAwIn0pLEJ0Lmdsb2JlPW5ldyBCdCgiZ2xvYmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMDEifSksQnQuZ3JhYmJlcj1uZXcgQnQoImdyYWJiZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMDIifSksQnQuZ3JhcGg9bmV3IEJ0KCJncmFwaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMyJ9KSxCdC5ncmlwcGVyPW5ldyBCdCgiZ3JpcHBlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNCJ9KSxCdC5oZWFydD1uZXcgQnQoImhlYXJ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjA1In0pLEJ0LmhvbWU9bmV3IEJ0KCJob21lIix7Zm9udENoYXJhY3RlcjoiXFxlYjA2In0pLEJ0Lmhvcml6b250YWxSdWxlPW5ldyBCdCgiaG9yaXpvbnRhbC1ydWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYjA3In0pLEJ0Lmh1Ym90PW5ldyBCdCgiaHVib3QiLHtmb250Q2hhcmFjdGVyOiJcXGViMDgifSksQnQuaW5ib3g9bmV3IEJ0KCJpbmJveCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwOSJ9KSxCdC5pc3N1ZUNsb3NlZD1uZXcgQnQoImlzc3VlLWNsb3NlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNCJ9KSxCdC5pc3N1ZVJlb3BlbmVkPW5ldyBCdCgiaXNzdWUtcmVvcGVuZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMGIifSksQnQuaXNzdWVzPW5ldyBCdCgiaXNzdWVzIix7Zm9udENoYXJhY3RlcjoiXFxlYjBjIn0pLEJ0Lml0YWxpYz1uZXcgQnQoIml0YWxpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwZCJ9KSxCdC5qZXJzZXk9bmV3IEJ0KCJqZXJzZXkiLHtmb250Q2hhcmFjdGVyOiJcXGViMGUifSksQnQuanNvbj1uZXcgQnQoImpzb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMGYifSksQnQua2ViYWJWZXJ0aWNhbD1uZXcgQnQoImtlYmFiLXZlcnRpY2FsIix7Zm9udENoYXJhY3RlcjoiXFxlYjEwIn0pLEJ0LmtleT1uZXcgQnQoImtleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMSJ9KSxCdC5sYXc9bmV3IEJ0KCJsYXciLHtmb250Q2hhcmFjdGVyOiJcXGViMTIifSksQnQubGlnaHRidWxiQXV0b2ZpeD1uZXcgQnQoImxpZ2h0YnVsYi1hdXRvZml4Iix7Zm9udENoYXJhY3RlcjoiXFxlYjEzIn0pLEJ0LmxpbmtFeHRlcm5hbD1uZXcgQnQoImxpbmstZXh0ZXJuYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViMTQifSksQnQubGluaz1uZXcgQnQoImxpbmsiLHtmb250Q2hhcmFjdGVyOiJcXGViMTUifSksQnQubGlzdE9yZGVyZWQ9bmV3IEJ0KCJsaXN0LW9yZGVyZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMTYifSksQnQubGlzdFVub3JkZXJlZD1uZXcgQnQoImxpc3QtdW5vcmRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjE3In0pLEJ0LmxpdmVTaGFyZT1uZXcgQnQoImxpdmUtc2hhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMTgifSksQnQubG9hZGluZz1uZXcgQnQoImxvYWRpbmciLHtmb250Q2hhcmFjdGVyOiJcXGViMTkifSksQnQubG9jYXRpb249bmV3IEJ0KCJsb2NhdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxYSJ9KSxCdC5tYWlsUmVhZD1uZXcgQnQoIm1haWwtcmVhZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxYiJ9KSxCdC5tYWlsPW5ldyBCdCgibWFpbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxYyJ9KSxCdC5tYXJrZG93bj1uZXcgQnQoIm1hcmtkb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYjFkIn0pLEJ0Lm1lZ2FwaG9uZT1uZXcgQnQoIm1lZ2FwaG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxZSJ9KSxCdC5tZW50aW9uPW5ldyBCdCgibWVudGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxZiJ9KSxCdC5taWxlc3RvbmU9bmV3IEJ0KCJtaWxlc3RvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjAifSksQnQubW9ydGFyQm9hcmQ9bmV3IEJ0KCJtb3J0YXItYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViMjEifSksQnQubW92ZT1uZXcgQnQoIm1vdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjIifSksQnQubXVsdGlwbGVXaW5kb3dzPW5ldyBCdCgibXVsdGlwbGUtd2luZG93cyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyMyJ9KSxCdC5tdXRlPW5ldyBCdCgibXV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNCJ9KSxCdC5ub05ld2xpbmU9bmV3IEJ0KCJuby1uZXdsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYjI1In0pLEJ0Lm5vdGU9bmV3IEJ0KCJub3RlIix7Zm9udENoYXJhY3RlcjoiXFxlYjI2In0pLEJ0Lm9jdG9mYWNlPW5ldyBCdCgib2N0b2ZhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMjcifSksQnQub3BlblByZXZpZXc9bmV3IEJ0KCJvcGVuLXByZXZpZXciLHtmb250Q2hhcmFjdGVyOiJcXGViMjgifSksQnQucGFja2FnZV89bmV3IEJ0KCJwYWNrYWdlIix7Zm9udENoYXJhY3RlcjoiXFxlYjI5In0pLEJ0LnBhaW50Y2FuPW5ldyBCdCgicGFpbnRjYW4iLHtmb250Q2hhcmFjdGVyOiJcXGViMmEifSksQnQucGluPW5ldyBCdCgicGluIix7Zm9udENoYXJhY3RlcjoiXFxlYjJiIn0pLEJ0LnBsYXk9bmV3IEJ0KCJwbGF5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjJjIn0pLEJ0LnJ1bj1uZXcgQnQoInJ1biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYyJ9KSxCdC5wbHVnPW5ldyBCdCgicGx1ZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyZCJ9KSxCdC5wcmVzZXJ2ZUNhc2U9bmV3IEJ0KCJwcmVzZXJ2ZS1jYXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjJlIn0pLEJ0LnByZXZpZXc9bmV3IEJ0KCJwcmV2aWV3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjJmIn0pLEJ0LnByb2plY3Q9bmV3IEJ0KCJwcm9qZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjMwIn0pLEJ0LnB1bHNlPW5ldyBCdCgicHVsc2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMzEifSksQnQucXVlc3Rpb249bmV3IEJ0KCJxdWVzdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMiJ9KSxCdC5xdW90ZT1uZXcgQnQoInF1b3RlIix7Zm9udENoYXJhY3RlcjoiXFxlYjMzIn0pLEJ0LnJhZGlvVG93ZXI9bmV3IEJ0KCJyYWRpby10b3dlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzNCJ9KSxCdC5yZWFjdGlvbnM9bmV3IEJ0KCJyZWFjdGlvbnMiLHtmb250Q2hhcmFjdGVyOiJcXGViMzUifSksQnQucmVmZXJlbmNlcz1uZXcgQnQoInJlZmVyZW5jZXMiLHtmb250Q2hhcmFjdGVyOiJcXGViMzYifSksQnQucmVmcmVzaD1uZXcgQnQoInJlZnJlc2giLHtmb250Q2hhcmFjdGVyOiJcXGViMzcifSksQnQucmVnZXg9bmV3IEJ0KCJyZWdleCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzOCJ9KSxCdC5yZW1vdGVFeHBsb3Jlcj1uZXcgQnQoInJlbW90ZS1leHBsb3JlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzOSJ9KSxCdC5yZW1vdGU9bmV3IEJ0KCJyZW1vdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViM2EifSksQnQucmVtb3ZlPW5ldyBCdCgicmVtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNiIn0pLEJ0LnJlcGxhY2VBbGw9bmV3IEJ0KCJyZXBsYWNlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzYyJ9KSxCdC5yZXBsYWNlPW5ldyBCdCgicmVwbGFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzZCJ9KSxCdC5yZXBvQ2xvbmU9bmV3IEJ0KCJyZXBvLWNsb25lIix7Zm9udENoYXJhY3RlcjoiXFxlYjNlIn0pLEJ0LnJlcG9Gb3JjZVB1c2g9bmV3IEJ0KCJyZXBvLWZvcmNlLXB1c2giLHtmb250Q2hhcmFjdGVyOiJcXGViM2YifSksQnQucmVwb1B1bGw9bmV3IEJ0KCJyZXBvLXB1bGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNDAifSksQnQucmVwb1B1c2g9bmV3IEJ0KCJyZXBvLXB1c2giLHtmb250Q2hhcmFjdGVyOiJcXGViNDEifSksQnQucmVwb3J0PW5ldyBCdCgicmVwb3J0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjQyIn0pLEJ0LnJlcXVlc3RDaGFuZ2VzPW5ldyBCdCgicmVxdWVzdC1jaGFuZ2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYjQzIn0pLEJ0LnJvY2tldD1uZXcgQnQoInJvY2tldCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NCJ9KSxCdC5yb290Rm9sZGVyT3BlbmVkPW5ldyBCdCgicm9vdC1mb2xkZXItb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ1In0pLEJ0LnJvb3RGb2xkZXI9bmV3IEJ0KCJyb290LWZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NiJ9KSxCdC5yc3M9bmV3IEJ0KCJyc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViNDcifSksQnQucnVieT1uZXcgQnQoInJ1YnkiLHtmb250Q2hhcmFjdGVyOiJcXGViNDgifSksQnQuc2F2ZUFsbD1uZXcgQnQoInNhdmUtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ5In0pLEJ0LnNhdmVBcz1uZXcgQnQoInNhdmUtYXMiLHtmb250Q2hhcmFjdGVyOiJcXGViNGEifSksQnQuc2F2ZT1uZXcgQnQoInNhdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViNGIifSksQnQuc2NyZWVuRnVsbD1uZXcgQnQoInNjcmVlbi1mdWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjRjIn0pLEJ0LnNjcmVlbk5vcm1hbD1uZXcgQnQoInNjcmVlbi1ub3JtYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNGQifSksQnQuc2VhcmNoU3RvcD1uZXcgQnQoInNlYXJjaC1zdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYjRlIn0pLEJ0LnNlcnZlcj1uZXcgQnQoInNlcnZlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MCJ9KSxCdC5zZXR0aW5nc0dlYXI9bmV3IEJ0KCJzZXR0aW5ncy1nZWFyIix7Zm9udENoYXJhY3RlcjoiXFxlYjUxIn0pLEJ0LnNldHRpbmdzPW5ldyBCdCgic2V0dGluZ3MiLHtmb250Q2hhcmFjdGVyOiJcXGViNTIifSksQnQuc2hpZWxkPW5ldyBCdCgic2hpZWxkIix7Zm9udENoYXJhY3RlcjoiXFxlYjUzIn0pLEJ0LnNtaWxleT1uZXcgQnQoInNtaWxleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NCJ9KSxCdC5zb3J0UHJlY2VkZW5jZT1uZXcgQnQoInNvcnQtcHJlY2VkZW5jZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NSJ9KSxCdC5zcGxpdEhvcml6b250YWw9bmV3IEJ0KCJzcGxpdC1ob3Jpem9udGFsIix7Zm9udENoYXJhY3RlcjoiXFxlYjU2In0pLEJ0LnNwbGl0VmVydGljYWw9bmV3IEJ0KCJzcGxpdC12ZXJ0aWNhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NyJ9KSxCdC5zcXVpcnJlbD1uZXcgQnQoInNxdWlycmVsIix7Zm9udENoYXJhY3RlcjoiXFxlYjU4In0pLEJ0LnN0YXJGdWxsPW5ldyBCdCgic3Rhci1mdWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjU5In0pLEJ0LnN0YXJIYWxmPW5ldyBCdCgic3Rhci1oYWxmIix7Zm9udENoYXJhY3RlcjoiXFxlYjVhIn0pLEJ0LnN5bWJvbENsYXNzPW5ldyBCdCgic3ltYm9sLWNsYXNzIix7Zm9udENoYXJhY3RlcjoiXFxlYjViIn0pLEJ0LnN5bWJvbENvbG9yPW5ldyBCdCgic3ltYm9sLWNvbG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYjVjIn0pLEJ0LnN5bWJvbEN1c3RvbUNvbG9yPW5ldyBCdCgic3ltYm9sLWN1c3RvbWNvbG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYjVjIn0pLEJ0LnN5bWJvbENvbnN0YW50PW5ldyBCdCgic3ltYm9sLWNvbnN0YW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYjVkIn0pLEJ0LnN5bWJvbEVudW1NZW1iZXI9bmV3IEJ0KCJzeW1ib2wtZW51bS1tZW1iZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNWUifSksQnQuc3ltYm9sRmllbGQ9bmV3IEJ0KCJzeW1ib2wtZmllbGQiLHtmb250Q2hhcmFjdGVyOiJcXGViNWYifSksQnQuc3ltYm9sRmlsZT1uZXcgQnQoInN5bWJvbC1maWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYjYwIn0pLEJ0LnN5bWJvbEludGVyZmFjZT1uZXcgQnQoInN5bWJvbC1pbnRlcmZhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViNjEifSksQnQuc3ltYm9sS2V5d29yZD1uZXcgQnQoInN5bWJvbC1rZXl3b3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYjYyIn0pLEJ0LnN5bWJvbE1pc2M9bmV3IEJ0KCJzeW1ib2wtbWlzYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MyJ9KSxCdC5zeW1ib2xPcGVyYXRvcj1uZXcgQnQoInN5bWJvbC1vcGVyYXRvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NCJ9KSxCdC5zeW1ib2xQcm9wZXJ0eT1uZXcgQnQoInN5bWJvbC1wcm9wZXJ0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NSJ9KSxCdC53cmVuY2g9bmV3IEJ0KCJ3cmVuY2giLHtmb250Q2hhcmFjdGVyOiJcXGViNjUifSksQnQud3JlbmNoU3ViYWN0aW9uPW5ldyBCdCgid3JlbmNoLXN1YmFjdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NSJ9KSxCdC5zeW1ib2xTbmlwcGV0PW5ldyBCdCgic3ltYm9sLXNuaXBwZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViNjYifSksQnQudGFza2xpc3Q9bmV3IEJ0KCJ0YXNrbGlzdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NyJ9KSxCdC50ZWxlc2NvcGU9bmV3IEJ0KCJ0ZWxlc2NvcGUiLHtmb250Q2hhcmFjdGVyOiJcXGViNjgifSksQnQudGV4dFNpemU9bmV3IEJ0KCJ0ZXh0LXNpemUiLHtmb250Q2hhcmFjdGVyOiJcXGViNjkifSksQnQudGhyZWVCYXJzPW5ldyBCdCgidGhyZWUtYmFycyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2YSJ9KSxCdC50aHVtYnNkb3duPW5ldyBCdCgidGh1bWJzZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2YiJ9KSxCdC50aHVtYnN1cD1uZXcgQnQoInRodW1ic3VwIix7Zm9udENoYXJhY3RlcjoiXFxlYjZjIn0pLEJ0LnRvb2xzPW5ldyBCdCgidG9vbHMiLHtmb250Q2hhcmFjdGVyOiJcXGViNmQifSksQnQudHJpYW5nbGVEb3duPW5ldyBCdCgidHJpYW5nbGUtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2ZSJ9KSxCdC50cmlhbmdsZUxlZnQ9bmV3IEJ0KCJ0cmlhbmdsZS1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjZmIn0pLEJ0LnRyaWFuZ2xlUmlnaHQ9bmV3IEJ0KCJ0cmlhbmdsZS1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MCJ9KSxCdC50cmlhbmdsZVVwPW5ldyBCdCgidHJpYW5nbGUtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGViNzEifSksQnQudHdpdHRlcj1uZXcgQnQoInR3aXR0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNzIifSksQnQudW5mb2xkPW5ldyBCdCgidW5mb2xkIix7Zm9udENoYXJhY3RlcjoiXFxlYjczIn0pLEJ0LnVubG9jaz1uZXcgQnQoInVubG9jayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3NCJ9KSxCdC51bm11dGU9bmV3IEJ0KCJ1bm11dGUiLHtmb250Q2hhcmFjdGVyOiJcXGViNzUifSksQnQudW52ZXJpZmllZD1uZXcgQnQoInVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzYifSksQnQudmVyaWZpZWQ9bmV3IEJ0KCJ2ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3NyJ9KSxCdC52ZXJzaW9ucz1uZXcgQnQoInZlcnNpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYjc4In0pLEJ0LnZtQWN0aXZlPW5ldyBCdCgidm0tYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjc5In0pLEJ0LnZtT3V0bGluZT1uZXcgQnQoInZtLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViN2EifSksQnQudm1SdW5uaW5nPW5ldyBCdCgidm0tcnVubmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YiJ9KSxCdC53YXRjaD1uZXcgQnQoIndhdGNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjdjIn0pLEJ0LndoaXRlc3BhY2U9bmV3IEJ0KCJ3aGl0ZXNwYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjdkIn0pLEJ0Lndob2xlV29yZD1uZXcgQnQoIndob2xlLXdvcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViN2UifSksQnQud2luZG93PW5ldyBCdCgid2luZG93Iix7Zm9udENoYXJhY3RlcjoiXFxlYjdmIn0pLEJ0LndvcmRXcmFwPW5ldyBCdCgid29yZC13cmFwIix7Zm9udENoYXJhY3RlcjoiXFxlYjgwIn0pLEJ0Lnpvb21Jbj1uZXcgQnQoInpvb20taW4iLHtmb250Q2hhcmFjdGVyOiJcXGViODEifSksQnQuem9vbU91dD1uZXcgQnQoInpvb20tb3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjgyIn0pLEJ0Lmxpc3RGaWx0ZXI9bmV3IEJ0KCJsaXN0LWZpbHRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MyJ9KSxCdC5saXN0RmxhdD1uZXcgQnQoImxpc3QtZmxhdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NCJ9KSxCdC5saXN0U2VsZWN0aW9uPW5ldyBCdCgibGlzdC1zZWxlY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViODUifSksQnQuc2VsZWN0aW9uPW5ldyBCdCgic2VsZWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg1In0pLEJ0Lmxpc3RUcmVlPW5ldyBCdCgibGlzdC10cmVlIix7Zm9udENoYXJhY3RlcjoiXFxlYjg2In0pLEJ0LmRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uVW52ZXJpZmllZD1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tdW52ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NyJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbj1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViODgifSksQnQuZGVidWdCcmVha3BvaW50RnVuY3Rpb25EaXNhYmxlZD1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViODgifSksQnQuZGVidWdTdGFja2ZyYW1lQWN0aXZlPW5ldyBCdCgiZGVidWctc3RhY2tmcmFtZS1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViODkifSksQnQuY2lyY2xlU21hbGxGaWxsZWQ9bmV3IEJ0KCJjaXJjbGUtc21hbGwtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjhhIn0pLEJ0LmRlYnVnU3RhY2tmcmFtZURvdD1uZXcgQnQoImRlYnVnLXN0YWNrZnJhbWUtZG90IixCdC5jaXJjbGVTbWFsbEZpbGxlZC5kZWZpbml0aW9uKSxCdC5kZWJ1Z1N0YWNrZnJhbWU9bmV3IEJ0KCJkZWJ1Zy1zdGFja2ZyYW1lIix7Zm9udENoYXJhY3RlcjoiXFxlYjhiIn0pLEJ0LmRlYnVnU3RhY2tmcmFtZUZvY3VzZWQ9bmV3IEJ0KCJkZWJ1Zy1zdGFja2ZyYW1lLWZvY3VzZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViOGIifSksQnQuZGVidWdCcmVha3BvaW50VW5zdXBwb3J0ZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LXVuc3VwcG9ydGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjhjIn0pLEJ0LnN5bWJvbFN0cmluZz1uZXcgQnQoInN5bWJvbC1zdHJpbmciLHtmb250Q2hhcmFjdGVyOiJcXGViOGQifSksQnQuZGVidWdSZXZlcnNlQ29udGludWU9bmV3IEJ0KCJkZWJ1Zy1yZXZlcnNlLWNvbnRpbnVlIix7Zm9udENoYXJhY3RlcjoiXFxlYjhlIn0pLEJ0LmRlYnVnU3RlcEJhY2s9bmV3IEJ0KCJkZWJ1Zy1zdGVwLWJhY2siLHtmb250Q2hhcmFjdGVyOiJcXGViOGYifSksQnQuZGVidWdSZXN0YXJ0RnJhbWU9bmV3IEJ0KCJkZWJ1Zy1yZXN0YXJ0LWZyYW1lIix7Zm9udENoYXJhY3RlcjoiXFxlYjkwIn0pLEJ0LmNhbGxJbmNvbWluZz1uZXcgQnQoImNhbGwtaW5jb21pbmciLHtmb250Q2hhcmFjdGVyOiJcXGViOTIifSksQnQuY2FsbE91dGdvaW5nPW5ldyBCdCgiY2FsbC1vdXRnb2luZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MyJ9KSxCdC5tZW51PW5ldyBCdCgibWVudSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5NCJ9KSxCdC5leHBhbmRBbGw9bmV3IEJ0KCJleHBhbmQtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjk1In0pLEJ0LmZlZWRiYWNrPW5ldyBCdCgiZmVlZGJhY2siLHtmb250Q2hhcmFjdGVyOiJcXGViOTYifSksQnQuZ3JvdXBCeVJlZlR5cGU9bmV3IEJ0KCJncm91cC1ieS1yZWYtdHlwZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5NyJ9KSxCdC51bmdyb3VwQnlSZWZUeXBlPW5ldyBCdCgidW5ncm91cC1ieS1yZWYtdHlwZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5OCJ9KSxCdC5hY2NvdW50PW5ldyBCdCgiYWNjb3VudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5OSJ9KSxCdC5iZWxsRG90PW5ldyBCdCgiYmVsbC1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGViOWEifSksQnQuZGVidWdDb25zb2xlPW5ldyBCdCgiZGVidWctY29uc29sZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5YiJ9KSxCdC5saWJyYXJ5PW5ldyBCdCgibGlicmFyeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5YyJ9KSxCdC5vdXRwdXQ9bmV3IEJ0KCJvdXRwdXQiLHtmb250Q2hhcmFjdGVyOiJcXGViOWQifSksQnQucnVuQWxsPW5ldyBCdCgicnVuLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5ZSJ9KSxCdC5zeW5jSWdub3JlZD1uZXcgQnQoInN5bmMtaWdub3JlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5ZiJ9KSxCdC5waW5uZWQ9bmV3IEJ0KCJwaW5uZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTAifSksQnQuZ2l0aHViSW52ZXJ0ZWQ9bmV3IEJ0KCJnaXRodWItaW52ZXJ0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTEifSksQnQuZGVidWdBbHQ9bmV3IEJ0KCJkZWJ1Zy1hbHQiLHtmb250Q2hhcmFjdGVyOiJcXGViOTEifSksQnQuc2VydmVyUHJvY2Vzcz1uZXcgQnQoInNlcnZlci1wcm9jZXNzIix7Zm9udENoYXJhY3RlcjoiXFxlYmEyIn0pLEJ0LnNlcnZlckVudmlyb25tZW50PW5ldyBCdCgic2VydmVyLWVudmlyb25tZW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYmEzIn0pLEJ0LnBhc3M9bmV3IEJ0KCJwYXNzIix7Zm9udENoYXJhY3RlcjoiXFxlYmE0In0pLEJ0LnN0b3BDaXJjbGU9bmV3IEJ0KCJzdG9wLWNpcmNsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNSJ9KSxCdC5wbGF5Q2lyY2xlPW5ldyBCdCgicGxheS1jaXJjbGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYTYifSksQnQucmVjb3JkPW5ldyBCdCgicmVjb3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYmE3In0pLEJ0LmRlYnVnQWx0U21hbGw9bmV3IEJ0KCJkZWJ1Zy1hbHQtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViYTgifSksQnQudm1Db25uZWN0PW5ldyBCdCgidm0tY29ubmVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhOSJ9KSxCdC5jbG91ZD1uZXcgQnQoImNsb3VkIix7Zm9udENoYXJhY3RlcjoiXFxlYmFhIn0pLEJ0Lm1lcmdlPW5ldyBCdCgibWVyZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGViYWIifSksQnQuZXhwb3J0SWNvbj1uZXcgQnQoImV4cG9ydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhYyJ9KSxCdC5ncmFwaExlZnQ9bmV3IEJ0KCJncmFwaC1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFkIn0pLEJ0Lm1hZ25ldD1uZXcgQnQoIm1hZ25ldCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhZSJ9KSxCdC5ub3RlYm9vaz1uZXcgQnQoIm5vdGVib29rIix7Zm9udENoYXJhY3RlcjoiXFxlYmFmIn0pLEJ0LnJlZG89bmV3IEJ0KCJyZWRvIix7Zm9udENoYXJhY3RlcjoiXFxlYmIwIn0pLEJ0LmNoZWNrQWxsPW5ldyBCdCgiY2hlY2stYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmIxIn0pLEJ0LnBpbm5lZERpcnR5PW5ldyBCdCgicGlubmVkLWRpcnR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmIyIn0pLEJ0LnBhc3NGaWxsZWQ9bmV3IEJ0KCJwYXNzLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMyJ9KSxCdC5jaXJjbGVMYXJnZUZpbGxlZD1uZXcgQnQoImNpcmNsZS1sYXJnZS1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYjQifSksQnQuY2lyY2xlTGFyZ2VPdXRsaW5lPW5ldyBCdCgiY2lyY2xlLWxhcmdlLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViYjUifSksQnQuY29tYmluZT1uZXcgQnQoImNvbWJpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViYjYifSksQnQuZ2F0aGVyPW5ldyBCdCgiZ2F0aGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYmI2In0pLEJ0LnRhYmxlPW5ldyBCdCgidGFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYjcifSksQnQudmFyaWFibGVHcm91cD1uZXcgQnQoInZhcmlhYmxlLWdyb3VwIix7Zm9udENoYXJhY3RlcjoiXFxlYmI4In0pLEJ0LnR5cGVIaWVyYXJjaHk9bmV3IEJ0KCJ0eXBlLWhpZXJhcmNoeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiOSJ9KSxCdC50eXBlSGllcmFyY2h5U3ViPW5ldyBCdCgidHlwZS1oaWVyYXJjaHktc3ViIix7Zm9udENoYXJhY3RlcjoiXFxlYmJhIn0pLEJ0LnR5cGVIaWVyYXJjaHlTdXBlcj1uZXcgQnQoInR5cGUtaGllcmFyY2h5LXN1cGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYmJiIn0pLEJ0LmdpdFB1bGxSZXF1ZXN0Q3JlYXRlPW5ldyBCdCgiZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYmMifSksQnQucnVuQWJvdmU9bmV3IEJ0KCJydW4tYWJvdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViYmQifSksQnQucnVuQmVsb3c9bmV3IEJ0KCJydW4tYmVsb3ciLHtmb250Q2hhcmFjdGVyOiJcXGViYmUifSksQnQubm90ZWJvb2tUZW1wbGF0ZT1uZXcgQnQoIm5vdGVib29rLXRlbXBsYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYmJmIn0pLEJ0LmRlYnVnUmVydW49bmV3IEJ0KCJkZWJ1Zy1yZXJ1biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjMCJ9KSxCdC53b3Jrc3BhY2VUcnVzdGVkPW5ldyBCdCgid29ya3NwYWNlLXRydXN0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzEifSksQnQud29ya3NwYWNlVW50cnVzdGVkPW5ldyBCdCgid29ya3NwYWNlLXVudHJ1c3RlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjMiJ9KSxCdC53b3Jrc3BhY2VVbnNwZWNpZmllZD1uZXcgQnQoIndvcmtzcGFjZS11bnNwZWNpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjMyJ9KSxCdC50ZXJtaW5hbENtZD1uZXcgQnQoInRlcm1pbmFsLWNtZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNCJ9KSxCdC50ZXJtaW5hbERlYmlhbj1uZXcgQnQoInRlcm1pbmFsLWRlYmlhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNSJ9KSxCdC50ZXJtaW5hbExpbnV4PW5ldyBCdCgidGVybWluYWwtbGludXgiLHtmb250Q2hhcmFjdGVyOiJcXGViYzYifSksQnQudGVybWluYWxQb3dlcnNoZWxsPW5ldyBCdCgidGVybWluYWwtcG93ZXJzaGVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNyJ9KSxCdC50ZXJtaW5hbFRtdXg9bmV3IEJ0KCJ0ZXJtaW5hbC10bXV4Iix7Zm9udENoYXJhY3RlcjoiXFxlYmM4In0pLEJ0LnRlcm1pbmFsVWJ1bnR1PW5ldyBCdCgidGVybWluYWwtdWJ1bnR1Iix7Zm9udENoYXJhY3RlcjoiXFxlYmM5In0pLEJ0LnRlcm1pbmFsQmFzaD1uZXcgQnQoInRlcm1pbmFsLWJhc2giLHtmb250Q2hhcmFjdGVyOiJcXGViY2EifSksQnQuYXJyb3dTd2FwPW5ldyBCdCgiYXJyb3ctc3dhcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjYiJ9KSxCdC5jb3B5PW5ldyBCdCgiY29weSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjYyJ9KSxCdC5wZXJzb25BZGQ9bmV3IEJ0KCJwZXJzb24tYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYmNkIn0pLEJ0LmZpbHRlckZpbGxlZD1uZXcgQnQoImZpbHRlci1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViY2UifSksQnQud2FuZD1uZXcgQnQoIndhbmQiLHtmb250Q2hhcmFjdGVyOiJcXGViY2YifSksQnQuZGVidWdMaW5lQnlMaW5lPW5ldyBCdCgiZGVidWctbGluZS1ieS1saW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmQwIn0pLEJ0Lmluc3BlY3Q9bmV3IEJ0KCJpbnNwZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQxIn0pLEJ0LmxheWVycz1uZXcgQnQoImxheWVycyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMiJ9KSxCdC5sYXllcnNEb3Q9bmV3IEJ0KCJsYXllcnMtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQzIn0pLEJ0LmxheWVyc0FjdGl2ZT1uZXcgQnQoImxheWVycy1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDQifSksQnQuY29tcGFzcz1uZXcgQnQoImNvbXBhc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViZDUifSksQnQuY29tcGFzc0RvdD1uZXcgQnQoImNvbXBhc3MtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQ2In0pLEJ0LmNvbXBhc3NBY3RpdmU9bmV3IEJ0KCJjb21wYXNzLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNyJ9KSxCdC5henVyZT1uZXcgQnQoImF6dXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ4In0pLEJ0Lmlzc3VlRHJhZnQ9bmV3IEJ0KCJpc3N1ZS1kcmFmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkOSJ9KSxCdC5naXRQdWxsUmVxdWVzdENsb3NlZD1uZXcgQnQoImdpdC1wdWxsLXJlcXVlc3QtY2xvc2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYmRhIn0pLEJ0LmdpdFB1bGxSZXF1ZXN0RHJhZnQ9bmV3IEJ0KCJnaXQtcHVsbC1yZXF1ZXN0LWRyYWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmRiIn0pLEJ0LmRlYnVnQWxsPW5ldyBCdCgiZGVidWctYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmRjIn0pLEJ0LmRlYnVnQ292ZXJhZ2U9bmV3IEJ0KCJkZWJ1Zy1jb3ZlcmFnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkZCJ9KSxCdC5ydW5FcnJvcnM9bmV3IEJ0KCJydW4tZXJyb3JzIix7Zm9udENoYXJhY3RlcjoiXFxlYmRlIn0pLEJ0LmZvbGRlckxpYnJhcnk9bmV3IEJ0KCJmb2xkZXItbGlicmFyeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkZiJ9KSxCdC5kZWJ1Z0NvbnRpbnVlU21hbGw9bmV3IEJ0KCJkZWJ1Zy1jb250aW51ZS1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMCJ9KSxCdC5iZWFrZXJTdG9wPW5ldyBCdCgiYmVha2VyLXN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGViZTEifSksQnQuZ3JhcGhMaW5lPW5ldyBCdCgiZ3JhcGgtbGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMiJ9KSxCdC5ncmFwaFNjYXR0ZXI9bmV3IEJ0KCJncmFwaC1zY2F0dGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYmUzIn0pLEJ0LnBpZUNoYXJ0PW5ldyBCdCgicGllLWNoYXJ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmU0In0pLEJ0LmJyYWNrZXQ9bmV3IEJ0KCJicmFja2V0IixCdC5qc29uLmRlZmluaXRpb24pLEJ0LmJyYWNrZXREb3Q9bmV3IEJ0KCJicmFja2V0LWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNSJ9KSxCdC5icmFja2V0RXJyb3I9bmV3IEJ0KCJicmFja2V0LWVycm9yIix7Zm9udENoYXJhY3RlcjoiXFxlYmU2In0pLEJ0LmxvY2tTbWFsbD1uZXcgQnQoImxvY2stc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZTcifSksQnQuYXp1cmVEZXZvcHM9bmV3IEJ0KCJhenVyZS1kZXZvcHMiLHtmb250Q2hhcmFjdGVyOiJcXGViZTgifSksQnQudmVyaWZpZWRGaWxsZWQ9bmV3IEJ0KCJ2ZXJpZmllZC1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViZTkifSksQnQubmV3TGluZT1uZXcgQnQoIm5ld2xpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZWEifSksQnQubGF5b3V0PW5ldyBCdCgibGF5b3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmViIn0pLEJ0LmxheW91dEFjdGl2aXR5YmFyTGVmdD1uZXcgQnQoImxheW91dC1hY3Rpdml0eWJhci1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmVjIn0pLEJ0LmxheW91dEFjdGl2aXR5YmFyUmlnaHQ9bmV3IEJ0KCJsYXlvdXQtYWN0aXZpdHliYXItcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWQifSksQnQubGF5b3V0UGFuZWxMZWZ0PW5ldyBCdCgibGF5b3V0LXBhbmVsLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWUifSksQnQubGF5b3V0UGFuZWxDZW50ZXI9bmV3IEJ0KCJsYXlvdXQtcGFuZWwtY2VudGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYmVmIn0pLEJ0LmxheW91dFBhbmVsSnVzdGlmeT1uZXcgQnQoImxheW91dC1wYW5lbC1qdXN0aWZ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmYwIn0pLEJ0LmxheW91dFBhbmVsUmlnaHQ9bmV3IEJ0KCJsYXlvdXQtcGFuZWwtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjEifSksQnQubGF5b3V0UGFuZWw9bmV3IEJ0KCJsYXlvdXQtcGFuZWwiLHtmb250Q2hhcmFjdGVyOiJcXGViZjIifSksQnQubGF5b3V0U2lkZWJhckxlZnQ9bmV3IEJ0KCJsYXlvdXQtc2lkZWJhci1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmYzIn0pLEJ0LmxheW91dFNpZGViYXJSaWdodD1uZXcgQnQoImxheW91dC1zaWRlYmFyLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmY0In0pLEJ0LmxheW91dFN0YXR1c2Jhcj1uZXcgQnQoImxheW91dC1zdGF0dXNiYXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZjUifSksQnQubGF5b3V0TWVudWJhcj1uZXcgQnQoImxheW91dC1tZW51YmFyIix7Zm9udENoYXJhY3RlcjoiXFxlYmY2In0pLEJ0LmxheW91dENlbnRlcmVkPW5ldyBCdCgibGF5b3V0LWNlbnRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmY3In0pLEJ0LmxheW91dFNpZGViYXJSaWdodE9mZj1uZXcgQnQoImxheW91dC1zaWRlYmFyLXJpZ2h0LW9mZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwMCJ9KSxCdC5sYXlvdXRQYW5lbE9mZj1uZXcgQnQoImxheW91dC1wYW5lbC1vZmYiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDEifSksQnQubGF5b3V0U2lkZWJhckxlZnRPZmY9bmV3IEJ0KCJsYXlvdXQtc2lkZWJhci1sZWZ0LW9mZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwMiJ9KSxCdC50YXJnZXQ9bmV3IEJ0KCJ0YXJnZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjgifSksQnQuaW5kZW50PW5ldyBCdCgiaW5kZW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYmY5In0pLEJ0LnJlY29yZFNtYWxsPW5ldyBCdCgicmVjb3JkLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmZhIn0pLEJ0LmVycm9yU21hbGw9bmV3IEJ0KCJlcnJvci1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmYiJ9KSxCdC5hcnJvd0NpcmNsZURvd249bmV3IEJ0KCJhcnJvdy1jaXJjbGUtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmYyJ9KSxCdC5hcnJvd0NpcmNsZUxlZnQ9bmV3IEJ0KCJhcnJvdy1jaXJjbGUtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmZCJ9KSxCdC5hcnJvd0NpcmNsZVJpZ2h0PW5ldyBCdCgiYXJyb3ctY2lyY2xlLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmZlIn0pLEJ0LmFycm93Q2lyY2xlVXA9bmV3IEJ0KCJhcnJvdy1jaXJjbGUtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGViZmYifSksQnQuaGVhcnRGaWxsZWQ9bmV3IEJ0KCJoZWFydC1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDQifSksQnQubWFwPW5ldyBCdCgibWFwIix7Zm9udENoYXJhY3RlcjoiXFxlYzA1In0pLEJ0Lm1hcEZpbGxlZD1uZXcgQnQoIm1hcC1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDYifSksQnQuY2lyY2xlU21hbGw9bmV3IEJ0KCJjaXJjbGUtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDcifSksQnQuYmVsbFNsYXNoPW5ldyBCdCgiYmVsbC1zbGFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwOCJ9KSxCdC5iZWxsU2xhc2hEb3Q9bmV3IEJ0KCJiZWxsLXNsYXNoLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwOSJ9KSxCdC5jb21tZW50VW5yZXNvbHZlZD1uZXcgQnQoImNvbW1lbnQtdW5yZXNvbHZlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwYSJ9KSxCdC5naXRQdWxsUmVxdWVzdEdvVG9DaGFuZ2VzPW5ldyBCdCgiZ2l0LXB1bGwtcmVxdWVzdC1nby10by1jaGFuZ2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYzBiIn0pLEJ0LmdpdFB1bGxSZXF1ZXN0TmV3Q2hhbmdlcz1uZXcgQnQoImdpdC1wdWxsLXJlcXVlc3QtbmV3LWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVjMGMifSksQnQuZGlhbG9nRXJyb3I9bmV3IEJ0KCJkaWFsb2ctZXJyb3IiLEJ0LmVycm9yLmRlZmluaXRpb24pLEJ0LmRpYWxvZ1dhcm5pbmc9bmV3IEJ0KCJkaWFsb2ctd2FybmluZyIsQnQud2FybmluZy5kZWZpbml0aW9uKSxCdC5kaWFsb2dJbmZvPW5ldyBCdCgiZGlhbG9nLWluZm8iLEJ0LmluZm8uZGVmaW5pdGlvbiksQnQuZGlhbG9nQ2xvc2U9bmV3IEJ0KCJkaWFsb2ctY2xvc2UiLEJ0LmNsb3NlLmRlZmluaXRpb24pLEJ0LnRyZWVJdGVtRXhwYW5kZWQ9bmV3IEJ0KCJ0cmVlLWl0ZW0tZXhwYW5kZWQiLEJ0LmNoZXZyb25Eb3duLmRlZmluaXRpb24pLEJ0LnRyZWVGaWx0ZXJPblR5cGVPbj1uZXcgQnQoInRyZWUtZmlsdGVyLW9uLXR5cGUtb24iLEJ0Lmxpc3RGaWx0ZXIuZGVmaW5pdGlvbiksQnQudHJlZUZpbHRlck9uVHlwZU9mZj1uZXcgQnQoInRyZWUtZmlsdGVyLW9uLXR5cGUtb2ZmIixCdC5saXN0U2VsZWN0aW9uLmRlZmluaXRpb24pLEJ0LnRyZWVGaWx0ZXJDbGVhcj1uZXcgQnQoInRyZWUtZmlsdGVyLWNsZWFyIixCdC5jbG9zZS5kZWZpbml0aW9uKSxCdC50cmVlSXRlbUxvYWRpbmc9bmV3IEJ0KCJ0cmVlLWl0ZW0tbG9hZGluZyIsQnQubG9hZGluZy5kZWZpbml0aW9uKSxCdC5tZW51U2VsZWN0aW9uPW5ldyBCdCgibWVudS1zZWxlY3Rpb24iLEJ0LmNoZWNrLmRlZmluaXRpb24pLEJ0Lm1lbnVTdWJtZW51PW5ldyBCdCgibWVudS1zdWJtZW51IixCdC5jaGV2cm9uUmlnaHQuZGVmaW5pdGlvbiksQnQubWVudUJhck1vcmU9bmV3IEJ0KCJtZW51YmFyLW1vcmUiLEJ0Lm1vcmUuZGVmaW5pdGlvbiksQnQuc2Nyb2xsYmFyQnV0dG9uTGVmdD1uZXcgQnQoInNjcm9sbGJhci1idXR0b24tbGVmdCIsQnQudHJpYW5nbGVMZWZ0LmRlZmluaXRpb24pLEJ0LnNjcm9sbGJhckJ1dHRvblJpZ2h0PW5ldyBCdCgic2Nyb2xsYmFyLWJ1dHRvbi1yaWdodCIsQnQudHJpYW5nbGVSaWdodC5kZWZpbml0aW9uKSxCdC5zY3JvbGxiYXJCdXR0b25VcD1uZXcgQnQoInNjcm9sbGJhci1idXR0b24tdXAiLEJ0LnRyaWFuZ2xlVXAuZGVmaW5pdGlvbiksQnQuc2Nyb2xsYmFyQnV0dG9uRG93bj1uZXcgQnQoInNjcm9sbGJhci1idXR0b24tZG93biIsQnQudHJpYW5nbGVEb3duLmRlZmluaXRpb24pLEJ0LnRvb2xCYXJNb3JlPW5ldyBCdCgidG9vbGJhci1tb3JlIixCdC5tb3JlLmRlZmluaXRpb24pLEJ0LnF1aWNrSW5wdXRCYWNrPW5ldyBCdCgicXVpY2staW5wdXQtYmFjayIsQnQuYXJyb3dMZWZ0LmRlZmluaXRpb24pLGZ1bmN0aW9uKGUpe2UuaWNvbk5hbWVTZWdtZW50PSJbQS1aYS16MC05XSsiLGUuaWNvbk5hbWVFeHByZXNzaW9uPSJbQS1aYS16MC05LV0rIixlLmljb25Nb2RpZmllckV4cHJlc3Npb249In5bQS1aYS16XSsiLGUuaWNvbk5hbWVDaGFyYWN0ZXI9IltBLVphLXowLTl+LV0iO2NvbnN0IHQ9bmV3IFJlZ0V4cChgXigke2UuaWNvbk5hbWVFeHByZXNzaW9ufSkoJHtlLmljb25Nb2RpZmllckV4cHJlc3Npb259KT8kYCk7ZnVuY3Rpb24gbihlKXtpZihlIGluc3RhbmNlb2YgQnQpcmV0dXJuWyJjb2RpY29uIiwiY29kaWNvbi0iK2UuaWRdO2NvbnN0IHI9dC5leGVjKGUuaWQpO2lmKCFyKXJldHVybiBuKEJ0LmVycm9yKTtjb25zdFssaSxvXT1yLGE9WyJjb2RpY29uIiwiY29kaWNvbi0iK2ldO3JldHVybiBvJiZhLnB1c2goImNvZGljb24tbW9kaWZpZXItIitvLnN1YnN0cigxKSksYX1lLmFzQ2xhc3NOYW1lQXJyYXk9bixlLmFzQ2xhc3NOYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBuKGUpLmpvaW4oIiAiKX0sZS5hc0NTU1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiIuIituKGUpLmpvaW4oIi4iKX19KGp0fHwoanQ9e30pKTt2YXIgcXQsJHQsV3QsSHQsenQsR3QsSnQsWHQsWnQsWXQsUXQsZW4sdG4sbm4scm4sb24sYW4sc24sY24sbG4sdW4saG4sZm4sZG4sbW4sZ24scG4sYm4sdm4seW4sQ24sd24sX24sU24sQW4sRW4seG4sTm4sa24sTG4sVG4sT24sSW4sTW4sUG4sUm4sVm4sRm4sRG49ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9O2NsYXNzIEtuIGV4dGVuZHMgZntjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoKSx0aGlzLl9yZWdpc3RyeT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl9mYWN0b3J5PW4sdGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLl9yZXNvbHZlUHJvbWlzZT1udWxsLHRoaXMuX2lzUmVzb2x2ZWQ9ITF9Z2V0IGlzUmVzb2x2ZWQoKXtyZXR1cm4gdGhpcy5faXNSZXNvbHZlZH1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZD0hMCxzdXBlci5kaXNwb3NlKCl9cmVzb2x2ZSgpe3JldHVybiBEbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9yZXNvbHZlUHJvbWlzZXx8KHRoaXMuX3Jlc29sdmVQcm9taXNlPXRoaXMuX2NyZWF0ZSgpKSx0aGlzLl9yZXNvbHZlUHJvbWlzZX0pKX1fY3JlYXRlKCl7cmV0dXJuIERuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBQcm9taXNlLnJlc29sdmUodGhpcy5fZmFjdG9yeS5jcmVhdGVUb2tlbml6YXRpb25TdXBwb3J0KCkpO3RoaXMuX2lzUmVzb2x2ZWQ9ITAsZSYmIXRoaXMuX2lzRGlzcG9zZWQmJnRoaXMuX3JlZ2lzdGVyKHRoaXMuX3JlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMuX2xhbmd1YWdlSWQsZSkpfSkpfX1jbGFzcyBqbntjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5fdG9rZW5CcmFuZD12b2lkIDAsdGhpcy5vZmZzZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLmxhbmd1YWdlPW59dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5vZmZzZXQrIiwgIit0aGlzLnR5cGUrIikifX0hZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3Quc2V0KDAsQnQuc3ltYm9sTWV0aG9kKSx0LnNldCgxLEJ0LnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgyLEJ0LnN5bWJvbENvbnN0cnVjdG9yKSx0LnNldCgzLEJ0LnN5bWJvbEZpZWxkKSx0LnNldCg0LEJ0LnN5bWJvbFZhcmlhYmxlKSx0LnNldCg1LEJ0LnN5bWJvbENsYXNzKSx0LnNldCg2LEJ0LnN5bWJvbFN0cnVjdCksdC5zZXQoNyxCdC5zeW1ib2xJbnRlcmZhY2UpLHQuc2V0KDgsQnQuc3ltYm9sTW9kdWxlKSx0LnNldCg5LEJ0LnN5bWJvbFByb3BlcnR5KSx0LnNldCgxMCxCdC5zeW1ib2xFdmVudCksdC5zZXQoMTEsQnQuc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDEyLEJ0LnN5bWJvbFVuaXQpLHQuc2V0KDEzLEJ0LnN5bWJvbFZhbHVlKSx0LnNldCgxNSxCdC5zeW1ib2xFbnVtKSx0LnNldCgxNCxCdC5zeW1ib2xDb25zdGFudCksdC5zZXQoMTUsQnQuc3ltYm9sRW51bSksdC5zZXQoMTYsQnQuc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMTcsQnQuc3ltYm9sS2V5d29yZCksdC5zZXQoMjcsQnQuc3ltYm9sU25pcHBldCksdC5zZXQoMTgsQnQuc3ltYm9sVGV4dCksdC5zZXQoMTksQnQuc3ltYm9sQ29sb3IpLHQuc2V0KDIwLEJ0LnN5bWJvbEZpbGUpLHQuc2V0KDIxLEJ0LnN5bWJvbFJlZmVyZW5jZSksdC5zZXQoMjIsQnQuc3ltYm9sQ3VzdG9tQ29sb3IpLHQuc2V0KDIzLEJ0LnN5bWJvbEZvbGRlciksdC5zZXQoMjQsQnQuc3ltYm9sVHlwZVBhcmFtZXRlciksdC5zZXQoMjUsQnQuYWNjb3VudCksdC5zZXQoMjYsQnQuaXNzdWVzKSxlLnRvSWNvbj1mdW5jdGlvbihlKXtsZXQgbj10LmdldChlKTtyZXR1cm4gbnx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgQ29tcGxldGlvbkl0ZW1LaW5kICIrZSksbj1CdC5zeW1ib2xQcm9wZXJ0eSksbn07Y29uc3Qgbj1uZXcgTWFwO24uc2V0KCJtZXRob2QiLDApLG4uc2V0KCJmdW5jdGlvbiIsMSksbi5zZXQoImNvbnN0cnVjdG9yIiwyKSxuLnNldCgiZmllbGQiLDMpLG4uc2V0KCJ2YXJpYWJsZSIsNCksbi5zZXQoImNsYXNzIiw1KSxuLnNldCgic3RydWN0Iiw2KSxuLnNldCgiaW50ZXJmYWNlIiw3KSxuLnNldCgibW9kdWxlIiw4KSxuLnNldCgicHJvcGVydHkiLDkpLG4uc2V0KCJldmVudCIsMTApLG4uc2V0KCJvcGVyYXRvciIsMTEpLG4uc2V0KCJ1bml0IiwxMiksbi5zZXQoInZhbHVlIiwxMyksbi5zZXQoImNvbnN0YW50IiwxNCksbi5zZXQoImVudW0iLDE1KSxuLnNldCgiZW51bS1tZW1iZXIiLDE2KSxuLnNldCgiZW51bU1lbWJlciIsMTYpLG4uc2V0KCJrZXl3b3JkIiwxNyksbi5zZXQoInNuaXBwZXQiLDI3KSxuLnNldCgidGV4dCIsMTgpLG4uc2V0KCJjb2xvciIsMTkpLG4uc2V0KCJmaWxlIiwyMCksbi5zZXQoInJlZmVyZW5jZSIsMjEpLG4uc2V0KCJjdXN0b21jb2xvciIsMjIpLG4uc2V0KCJmb2xkZXIiLDIzKSxuLnNldCgidHlwZS1wYXJhbWV0ZXIiLDI0KSxuLnNldCgidHlwZVBhcmFtZXRlciIsMjQpLG4uc2V0KCJhY2NvdW50IiwyNSksbi5zZXQoImlzc3VlIiwyNiksZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUsdCl7bGV0IHI9bi5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PXJ8fHR8fChyPTkpLHJ9fShxdHx8KHF0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0oJHR8fCgkdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9Ml09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5Db250ZW50Q2hhbmdlPTNdPSJDb250ZW50Q2hhbmdlIn0oV3R8fChXdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuUmVhZD0xXT0iUmVhZCIsZVtlLldyaXRlPTJdPSJXcml0ZSJ9KEh0fHwoSHQ9e30pKSxmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxCdC5zeW1ib2xGaWxlKSx0LnNldCgxLEJ0LnN5bWJvbE1vZHVsZSksdC5zZXQoMixCdC5zeW1ib2xOYW1lc3BhY2UpLHQuc2V0KDMsQnQuc3ltYm9sUGFja2FnZSksdC5zZXQoNCxCdC5zeW1ib2xDbGFzcyksdC5zZXQoNSxCdC5zeW1ib2xNZXRob2QpLHQuc2V0KDYsQnQuc3ltYm9sUHJvcGVydHkpLHQuc2V0KDcsQnQuc3ltYm9sRmllbGQpLHQuc2V0KDgsQnQuc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDksQnQuc3ltYm9sRW51bSksdC5zZXQoMTAsQnQuc3ltYm9sSW50ZXJmYWNlKSx0LnNldCgxMSxCdC5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMTIsQnQuc3ltYm9sVmFyaWFibGUpLHQuc2V0KDEzLEJ0LnN5bWJvbENvbnN0YW50KSx0LnNldCgxNCxCdC5zeW1ib2xTdHJpbmcpLHQuc2V0KDE1LEJ0LnN5bWJvbE51bWJlciksdC5zZXQoMTYsQnQuc3ltYm9sQm9vbGVhbiksdC5zZXQoMTcsQnQuc3ltYm9sQXJyYXkpLHQuc2V0KDE4LEJ0LnN5bWJvbE9iamVjdCksdC5zZXQoMTksQnQuc3ltYm9sS2V5KSx0LnNldCgyMCxCdC5zeW1ib2xOdWxsKSx0LnNldCgyMSxCdC5zeW1ib2xFbnVtTWVtYmVyKSx0LnNldCgyMixCdC5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDIzLEJ0LnN5bWJvbEV2ZW50KSx0LnNldCgyNCxCdC5zeW1ib2xPcGVyYXRvciksdC5zZXQoMjUsQnQuc3ltYm9sVHlwZVBhcmFtZXRlciksZS50b0ljb249ZnVuY3Rpb24oZSl7bGV0IG49dC5nZXQoZSk7cmV0dXJuIG58fChjb25zb2xlLmluZm8oIk5vIGNvZGljb24gZm91bmQgZm9yIFN5bWJvbEtpbmQgIitlKSxuPUJ0LnN5bWJvbFByb3BlcnR5KSxufX0oenR8fCh6dD17fSkpLGZ1bmN0aW9uKGUpe2UuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8Im9iamVjdCIhPXR5cGVvZiBlKSYmKCJzdHJpbmciPT10eXBlb2YgZS5pZCYmInN0cmluZyI9PXR5cGVvZiBlLnRpdGxlKX19KEd0fHwoR3Q9e30pKSxmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0oSnR8fChKdD17fSkpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwLHRoaXMuX29uRGlkQ2hhbmdlPW5ldyBCLHRoaXMub25EaWRDaGFuZ2U9dGhpcy5fb25EaWRDaGFuZ2UuZXZlbnQsdGhpcy5fY29sb3JNYXA9bnVsbH1maXJlKGUpe3RoaXMuX29uRGlkQ2hhbmdlLmZpcmUoe2NoYW5nZWRMYW5ndWFnZXM6ZSxjaGFuZ2VkQ29sb3JNYXA6ITF9KX1yZWdpc3RlcihlLHQpe3JldHVybiB0aGlzLl9tYXAuc2V0KGUsdCksdGhpcy5maXJlKFtlXSksdSgoKCk9Pnt0aGlzLl9tYXAuZ2V0KGUpPT09dCYmKHRoaXMuX21hcC5kZWxldGUoZSksdGhpcy5maXJlKFtlXSkpfSkpfXJlZ2lzdGVyRmFjdG9yeShlLHQpe3ZhciBuO251bGw9PT0obj10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpKXx8dm9pZCAwPT09bnx8bi5kaXNwb3NlKCk7Y29uc3Qgcj1uZXcgS24odGhpcyxlLHQpO3JldHVybiB0aGlzLl9mYWN0b3JpZXMuc2V0KGUsciksdSgoKCk9Pntjb25zdCB0PXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSk7dCYmdD09PXImJih0aGlzLl9mYWN0b3JpZXMuZGVsZXRlKGUpLHQuZGlzcG9zZSgpKX0pKX1nZXRPckNyZWF0ZShlKXtyZXR1cm4gRG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXRoaXMuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3Qgbj10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3JldHVybiFufHxuLmlzUmVzb2x2ZWQ/bnVsbDooeWllbGQgbi5yZXNvbHZlKCksdGhpcy5nZXQoZSkpfSkpfWdldChlKXtyZXR1cm4gdGhpcy5fbWFwLmdldChlKXx8bnVsbH1pc1Jlc29sdmVkKGUpe2lmKHRoaXMuZ2V0KGUpKXJldHVybiEwO2NvbnN0IHQ9dGhpcy5fZmFjdG9yaWVzLmdldChlKTtyZXR1cm4hKHQmJiF0LmlzUmVzb2x2ZWQpfXNldENvbG9yTWFwKGUpe3RoaXMuX2NvbG9yTWFwPWUsdGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczpBcnJheS5mcm9tKHRoaXMuX21hcC5rZXlzKCkpLGNoYW5nZWRDb2xvck1hcDohMH0pfWdldENvbG9yTWFwKCl7cmV0dXJuIHRoaXMuX2NvbG9yTWFwfWdldERlZmF1bHRCYWNrZ3JvdW5kKCl7cmV0dXJuIHRoaXMuX2NvbG9yTWFwJiZ0aGlzLl9jb2xvck1hcC5sZW5ndGg+Mj90aGlzLl9jb2xvck1hcFsyXTpudWxsfX0sZnVuY3Rpb24oZSl7ZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5EaXNhYmxlZD0xXT0iRGlzYWJsZWQiLGVbZS5FbmFibGVkPTJdPSJFbmFibGVkIn0oWHR8fChYdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLkF1dG89Ml09IkF1dG8ifShadHx8KFp0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLktlZXBXaGl0ZXNwYWNlPTFdPSJLZWVwV2hpdGVzcGFjZSIsZVtlLkluc2VydEFzU25pcHBldD00XT0iSW5zZXJ0QXNTbmlwcGV0In0oWXR8fChZdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5NZXRob2Q9MF09Ik1ldGhvZCIsZVtlLkZ1bmN0aW9uPTFdPSJGdW5jdGlvbiIsZVtlLkNvbnN0cnVjdG9yPTJdPSJDb25zdHJ1Y3RvciIsZVtlLkZpZWxkPTNdPSJGaWVsZCIsZVtlLlZhcmlhYmxlPTRdPSJWYXJpYWJsZSIsZVtlLkNsYXNzPTVdPSJDbGFzcyIsZVtlLlN0cnVjdD02XT0iU3RydWN0IixlW2UuSW50ZXJmYWNlPTddPSJJbnRlcmZhY2UiLGVbZS5Nb2R1bGU9OF09Ik1vZHVsZSIsZVtlLlByb3BlcnR5PTldPSJQcm9wZXJ0eSIsZVtlLkV2ZW50PTEwXT0iRXZlbnQiLGVbZS5PcGVyYXRvcj0xMV09Ik9wZXJhdG9yIixlW2UuVW5pdD0xMl09IlVuaXQiLGVbZS5WYWx1ZT0xM109IlZhbHVlIixlW2UuQ29uc3RhbnQ9MTRdPSJDb25zdGFudCIsZVtlLkVudW09MTVdPSJFbnVtIixlW2UuRW51bU1lbWJlcj0xNl09IkVudW1NZW1iZXIiLGVbZS5LZXl3b3JkPTE3XT0iS2V5d29yZCIsZVtlLlRleHQ9MThdPSJUZXh0IixlW2UuQ29sb3I9MTldPSJDb2xvciIsZVtlLkZpbGU9MjBdPSJGaWxlIixlW2UuUmVmZXJlbmNlPTIxXT0iUmVmZXJlbmNlIixlW2UuQ3VzdG9tY29sb3I9MjJdPSJDdXN0b21jb2xvciIsZVtlLkZvbGRlcj0yM109IkZvbGRlciIsZVtlLlR5cGVQYXJhbWV0ZXI9MjRdPSJUeXBlUGFyYW1ldGVyIixlW2UuVXNlcj0yNV09IlVzZXIiLGVbZS5Jc3N1ZT0yNl09Iklzc3VlIixlW2UuU25pcHBldD0yN109IlNuaXBwZXQifShRdHx8KFF0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRlcHJlY2F0ZWQ9MV09IkRlcHJlY2F0ZWQifShlbnx8KGVuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0xXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLlRyaWdnZXJGb3JJbmNvbXBsZXRlQ29tcGxldGlvbnM9Ml09IlRyaWdnZXJGb3JJbmNvbXBsZXRlQ29tcGxldGlvbnMifSh0bnx8KHRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkVYQUNUPTBdPSJFWEFDVCIsZVtlLkFCT1ZFPTFdPSJBQk9WRSIsZVtlLkJFTE9XPTJdPSJCRUxPVyJ9KG5ufHwobm49e30pKSxmdW5jdGlvbihlKXtlW2UuTm90U2V0PTBdPSJOb3RTZXQiLGVbZS5Db250ZW50Rmx1c2g9MV09IkNvbnRlbnRGbHVzaCIsZVtlLlJlY292ZXJGcm9tTWFya2Vycz0yXT0iUmVjb3ZlckZyb21NYXJrZXJzIixlW2UuRXhwbGljaXQ9M109IkV4cGxpY2l0IixlW2UuUGFzdGU9NF09IlBhc3RlIixlW2UuVW5kbz01XT0iVW5kbyIsZVtlLlJlZG89Nl09IlJlZG8ifShybnx8KHJuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxGPTFdPSJMRiIsZVtlLkNSTEY9Ml09IkNSTEYifShvbnx8KG9uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5SZWFkPTFdPSJSZWFkIixlW2UuV3JpdGU9Ml09IldyaXRlIn0oYW58fChhbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuS2VlcD0xXT0iS2VlcCIsZVtlLkJyYWNrZXRzPTJdPSJCcmFja2V0cyIsZVtlLkFkdmFuY2VkPTNdPSJBZHZhbmNlZCIsZVtlLkZ1bGw9NF09IkZ1bGwifShzbnx8KHNuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3Rlcj0wXT0iYWNjZXB0U3VnZ2VzdGlvbk9uQ29tbWl0Q2hhcmFjdGVyIixlW2UuYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXI9MV09ImFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyIixlW2UuYWNjZXNzaWJpbGl0eVN1cHBvcnQ9Ml09ImFjY2Vzc2liaWxpdHlTdXBwb3J0IixlW2UuYWNjZXNzaWJpbGl0eVBhZ2VTaXplPTNdPSJhY2Nlc3NpYmlsaXR5UGFnZVNpemUiLGVbZS5hcmlhTGFiZWw9NF09ImFyaWFMYWJlbCIsZVtlLmF1dG9DbG9zaW5nQnJhY2tldHM9NV09ImF1dG9DbG9zaW5nQnJhY2tldHMiLGVbZS5hdXRvQ2xvc2luZ0RlbGV0ZT02XT0iYXV0b0Nsb3NpbmdEZWxldGUiLGVbZS5hdXRvQ2xvc2luZ092ZXJ0eXBlPTddPSJhdXRvQ2xvc2luZ092ZXJ0eXBlIixlW2UuYXV0b0Nsb3NpbmdRdW90ZXM9OF09ImF1dG9DbG9zaW5nUXVvdGVzIixlW2UuYXV0b0luZGVudD05XT0iYXV0b0luZGVudCIsZVtlLmF1dG9tYXRpY0xheW91dD0xMF09ImF1dG9tYXRpY0xheW91dCIsZVtlLmF1dG9TdXJyb3VuZD0xMV09ImF1dG9TdXJyb3VuZCIsZVtlLmJyYWNrZXRQYWlyQ29sb3JpemF0aW9uPTEyXT0iYnJhY2tldFBhaXJDb2xvcml6YXRpb24iLGVbZS5ndWlkZXM9MTNdPSJndWlkZXMiLGVbZS5jb2RlTGVucz0xNF09ImNvZGVMZW5zIixlW2UuY29kZUxlbnNGb250RmFtaWx5PTE1XT0iY29kZUxlbnNGb250RmFtaWx5IixlW2UuY29kZUxlbnNGb250U2l6ZT0xNl09ImNvZGVMZW5zRm9udFNpemUiLGVbZS5jb2xvckRlY29yYXRvcnM9MTddPSJjb2xvckRlY29yYXRvcnMiLGVbZS5jb2x1bW5TZWxlY3Rpb249MThdPSJjb2x1bW5TZWxlY3Rpb24iLGVbZS5jb21tZW50cz0xOV09ImNvbW1lbnRzIixlW2UuY29udGV4dG1lbnU9MjBdPSJjb250ZXh0bWVudSIsZVtlLmNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nPTIxXT0iY29weVdpdGhTeW50YXhIaWdobGlnaHRpbmciLGVbZS5jdXJzb3JCbGlua2luZz0yMl09ImN1cnNvckJsaW5raW5nIixlW2UuY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb249MjNdPSJjdXJzb3JTbW9vdGhDYXJldEFuaW1hdGlvbiIsZVtlLmN1cnNvclN0eWxlPTI0XT0iY3Vyc29yU3R5bGUiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzPTI1XT0iY3Vyc29yU3Vycm91bmRpbmdMaW5lcyIsZVtlLmN1cnNvclN1cnJvdW5kaW5nTGluZXNTdHlsZT0yNl09ImN1cnNvclN1cnJvdW5kaW5nTGluZXNTdHlsZSIsZVtlLmN1cnNvcldpZHRoPTI3XT0iY3Vyc29yV2lkdGgiLGVbZS5kaXNhYmxlTGF5ZXJIaW50aW5nPTI4XT0iZGlzYWJsZUxheWVySGludGluZyIsZVtlLmRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zPTI5XT0iZGlzYWJsZU1vbm9zcGFjZU9wdGltaXphdGlvbnMiLGVbZS5kb21SZWFkT25seT0zMF09ImRvbVJlYWRPbmx5IixlW2UuZHJhZ0FuZERyb3A9MzFdPSJkcmFnQW5kRHJvcCIsZVtlLmRyb3BJbnRvRWRpdG9yPTMyXT0iZHJvcEludG9FZGl0b3IiLGVbZS5lbXB0eVNlbGVjdGlvbkNsaXBib2FyZD0zM109ImVtcHR5U2VsZWN0aW9uQ2xpcGJvYXJkIixlW2UuZXhwZXJpbWVudGFsPTM0XT0iZXhwZXJpbWVudGFsIixlW2UuZXh0cmFFZGl0b3JDbGFzc05hbWU9MzVdPSJleHRyYUVkaXRvckNsYXNzTmFtZSIsZVtlLmZhc3RTY3JvbGxTZW5zaXRpdml0eT0zNl09ImZhc3RTY3JvbGxTZW5zaXRpdml0eSIsZVtlLmZpbmQ9MzddPSJmaW5kIixlW2UuZml4ZWRPdmVyZmxvd1dpZGdldHM9MzhdPSJmaXhlZE92ZXJmbG93V2lkZ2V0cyIsZVtlLmZvbGRpbmc9MzldPSJmb2xkaW5nIixlW2UuZm9sZGluZ1N0cmF0ZWd5PTQwXT0iZm9sZGluZ1N0cmF0ZWd5IixlW2UuZm9sZGluZ0hpZ2hsaWdodD00MV09ImZvbGRpbmdIaWdobGlnaHQiLGVbZS5mb2xkaW5nSW1wb3J0c0J5RGVmYXVsdD00Ml09ImZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0IixlW2UuZm9sZGluZ01heGltdW1SZWdpb25zPTQzXT0iZm9sZGluZ01heGltdW1SZWdpb25zIixlW2UudW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lPTQ0XT0idW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lIixlW2UuZm9udEZhbWlseT00NV09ImZvbnRGYW1pbHkiLGVbZS5mb250SW5mbz00Nl09ImZvbnRJbmZvIixlW2UuZm9udExpZ2F0dXJlcz00N109ImZvbnRMaWdhdHVyZXMiLGVbZS5mb250U2l6ZT00OF09ImZvbnRTaXplIixlW2UuZm9udFdlaWdodD00OV09ImZvbnRXZWlnaHQiLGVbZS5mb3JtYXRPblBhc3RlPTUwXT0iZm9ybWF0T25QYXN0ZSIsZVtlLmZvcm1hdE9uVHlwZT01MV09ImZvcm1hdE9uVHlwZSIsZVtlLmdseXBoTWFyZ2luPTUyXT0iZ2x5cGhNYXJnaW4iLGVbZS5nb3RvTG9jYXRpb249NTNdPSJnb3RvTG9jYXRpb24iLGVbZS5oaWRlQ3Vyc29ySW5PdmVydmlld1J1bGVyPTU0XT0iaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlciIsZVtlLmhvdmVyPTU1XT0iaG92ZXIiLGVbZS5pbkRpZmZFZGl0b3I9NTZdPSJpbkRpZmZFZGl0b3IiLGVbZS5pbmxpbmVTdWdnZXN0PTU3XT0iaW5saW5lU3VnZ2VzdCIsZVtlLmxldHRlclNwYWNpbmc9NThdPSJsZXR0ZXJTcGFjaW5nIixlW2UubGlnaHRidWxiPTU5XT0ibGlnaHRidWxiIixlW2UubGluZURlY29yYXRpb25zV2lkdGg9NjBdPSJsaW5lRGVjb3JhdGlvbnNXaWR0aCIsZVtlLmxpbmVIZWlnaHQ9NjFdPSJsaW5lSGVpZ2h0IixlW2UubGluZU51bWJlcnM9NjJdPSJsaW5lTnVtYmVycyIsZVtlLmxpbmVOdW1iZXJzTWluQ2hhcnM9NjNdPSJsaW5lTnVtYmVyc01pbkNoYXJzIixlW2UubGlua2VkRWRpdGluZz02NF09ImxpbmtlZEVkaXRpbmciLGVbZS5saW5rcz02NV09ImxpbmtzIixlW2UubWF0Y2hCcmFja2V0cz02Nl09Im1hdGNoQnJhY2tldHMiLGVbZS5taW5pbWFwPTY3XT0ibWluaW1hcCIsZVtlLm1vdXNlU3R5bGU9NjhdPSJtb3VzZVN0eWxlIixlW2UubW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5PTY5XT0ibW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5IixlW2UubW91c2VXaGVlbFpvb209NzBdPSJtb3VzZVdoZWVsWm9vbSIsZVtlLm11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZz03MV09Im11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZyIsZVtlLm11bHRpQ3Vyc29yTW9kaWZpZXI9NzJdPSJtdWx0aUN1cnNvck1vZGlmaWVyIixlW2UubXVsdGlDdXJzb3JQYXN0ZT03M109Im11bHRpQ3Vyc29yUGFzdGUiLGVbZS5vY2N1cnJlbmNlc0hpZ2hsaWdodD03NF09Im9jY3VycmVuY2VzSGlnaGxpZ2h0IixlW2Uub3ZlcnZpZXdSdWxlckJvcmRlcj03NV09Im92ZXJ2aWV3UnVsZXJCb3JkZXIiLGVbZS5vdmVydmlld1J1bGVyTGFuZXM9NzZdPSJvdmVydmlld1J1bGVyTGFuZXMiLGVbZS5wYWRkaW5nPTc3XT0icGFkZGluZyIsZVtlLnBhcmFtZXRlckhpbnRzPTc4XT0icGFyYW1ldGVySGludHMiLGVbZS5wZWVrV2lkZ2V0RGVmYXVsdEZvY3VzPTc5XT0icGVla1dpZGdldERlZmF1bHRGb2N1cyIsZVtlLmRlZmluaXRpb25MaW5rT3BlbnNJblBlZWs9ODBdPSJkZWZpbml0aW9uTGlua09wZW5zSW5QZWVrIixlW2UucXVpY2tTdWdnZXN0aW9ucz04MV09InF1aWNrU3VnZ2VzdGlvbnMiLGVbZS5xdWlja1N1Z2dlc3Rpb25zRGVsYXk9ODJdPSJxdWlja1N1Z2dlc3Rpb25zRGVsYXkiLGVbZS5yZWFkT25seT04M109InJlYWRPbmx5IixlW2UucmVuYW1lT25UeXBlPTg0XT0icmVuYW1lT25UeXBlIixlW2UucmVuZGVyQ29udHJvbENoYXJhY3RlcnM9ODVdPSJyZW5kZXJDb250cm9sQ2hhcmFjdGVycyIsZVtlLnJlbmRlckZpbmFsTmV3bGluZT04Nl09InJlbmRlckZpbmFsTmV3bGluZSIsZVtlLnJlbmRlckxpbmVIaWdobGlnaHQ9ODddPSJyZW5kZXJMaW5lSGlnaGxpZ2h0IixlW2UucmVuZGVyTGluZUhpZ2hsaWdodE9ubHlXaGVuRm9jdXM9ODhdPSJyZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cyIsZVtlLnJlbmRlclZhbGlkYXRpb25EZWNvcmF0aW9ucz04OV09InJlbmRlclZhbGlkYXRpb25EZWNvcmF0aW9ucyIsZVtlLnJlbmRlcldoaXRlc3BhY2U9OTBdPSJyZW5kZXJXaGl0ZXNwYWNlIixlW2UucmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZz05MV09InJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmciLGVbZS5yb3VuZGVkU2VsZWN0aW9uPTkyXT0icm91bmRlZFNlbGVjdGlvbiIsZVtlLnJ1bGVycz05M109InJ1bGVycyIsZVtlLnNjcm9sbGJhcj05NF09InNjcm9sbGJhciIsZVtlLnNjcm9sbEJleW9uZExhc3RDb2x1bW49OTVdPSJzY3JvbGxCZXlvbmRMYXN0Q29sdW1uIixlW2Uuc2Nyb2xsQmV5b25kTGFzdExpbmU9OTZdPSJzY3JvbGxCZXlvbmRMYXN0TGluZSIsZVtlLnNjcm9sbFByZWRvbWluYW50QXhpcz05N109InNjcm9sbFByZWRvbWluYW50QXhpcyIsZVtlLnNlbGVjdGlvbkNsaXBib2FyZD05OF09InNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLnNlbGVjdGlvbkhpZ2hsaWdodD05OV09InNlbGVjdGlvbkhpZ2hsaWdodCIsZVtlLnNlbGVjdE9uTGluZU51bWJlcnM9MTAwXT0ic2VsZWN0T25MaW5lTnVtYmVycyIsZVtlLnNob3dGb2xkaW5nQ29udHJvbHM9MTAxXT0ic2hvd0ZvbGRpbmdDb250cm9scyIsZVtlLnNob3dVbnVzZWQ9MTAyXT0ic2hvd1VudXNlZCIsZVtlLnNuaXBwZXRTdWdnZXN0aW9ucz0xMDNdPSJzbmlwcGV0U3VnZ2VzdGlvbnMiLGVbZS5zbWFydFNlbGVjdD0xMDRdPSJzbWFydFNlbGVjdCIsZVtlLnNtb290aFNjcm9sbGluZz0xMDVdPSJzbW9vdGhTY3JvbGxpbmciLGVbZS5zdGlja3lUYWJTdG9wcz0xMDZdPSJzdGlja3lUYWJTdG9wcyIsZVtlLnN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXI9MTA3XT0ic3RvcFJlbmRlcmluZ0xpbmVBZnRlciIsZVtlLnN1Z2dlc3Q9MTA4XT0ic3VnZ2VzdCIsZVtlLnN1Z2dlc3RGb250U2l6ZT0xMDldPSJzdWdnZXN0Rm9udFNpemUiLGVbZS5zdWdnZXN0TGluZUhlaWdodD0xMTBdPSJzdWdnZXN0TGluZUhlaWdodCIsZVtlLnN1Z2dlc3RPblRyaWdnZXJDaGFyYWN0ZXJzPTExMV09InN1Z2dlc3RPblRyaWdnZXJDaGFyYWN0ZXJzIixlW2Uuc3VnZ2VzdFNlbGVjdGlvbj0xMTJdPSJzdWdnZXN0U2VsZWN0aW9uIixlW2UudGFiQ29tcGxldGlvbj0xMTNdPSJ0YWJDb21wbGV0aW9uIixlW2UudGFiSW5kZXg9MTE0XT0idGFiSW5kZXgiLGVbZS51bmljb2RlSGlnaGxpZ2h0aW5nPTExNV09InVuaWNvZGVIaWdobGlnaHRpbmciLGVbZS51bnVzdWFsTGluZVRlcm1pbmF0b3JzPTExNl09InVudXN1YWxMaW5lVGVybWluYXRvcnMiLGVbZS51c2VTaGFkb3dET009MTE3XT0idXNlU2hhZG93RE9NIixlW2UudXNlVGFiU3RvcHM9MTE4XT0idXNlVGFiU3RvcHMiLGVbZS53b3JkU2VwYXJhdG9ycz0xMTldPSJ3b3JkU2VwYXJhdG9ycyIsZVtlLndvcmRXcmFwPTEyMF09IndvcmRXcmFwIixlW2Uud29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycz0xMjFdPSJ3b3JkV3JhcEJyZWFrQWZ0ZXJDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBCcmVha0JlZm9yZUNoYXJhY3RlcnM9MTIyXT0id29yZFdyYXBCcmVha0JlZm9yZUNoYXJhY3RlcnMiLGVbZS53b3JkV3JhcENvbHVtbj0xMjNdPSJ3b3JkV3JhcENvbHVtbiIsZVtlLndvcmRXcmFwT3ZlcnJpZGUxPTEyNF09IndvcmRXcmFwT3ZlcnJpZGUxIixlW2Uud29yZFdyYXBPdmVycmlkZTI9MTI1XT0id29yZFdyYXBPdmVycmlkZTIiLGVbZS53cmFwcGluZ0luZGVudD0xMjZdPSJ3cmFwcGluZ0luZGVudCIsZVtlLndyYXBwaW5nU3RyYXRlZ3k9MTI3XT0id3JhcHBpbmdTdHJhdGVneSIsZVtlLnNob3dEZXByZWNhdGVkPTEyOF09InNob3dEZXByZWNhdGVkIixlW2UuaW5sYXlIaW50cz0xMjldPSJpbmxheUhpbnRzIixlW2UuZWRpdG9yQ2xhc3NOYW1lPTEzMF09ImVkaXRvckNsYXNzTmFtZSIsZVtlLnBpeGVsUmF0aW89MTMxXT0icGl4ZWxSYXRpbyIsZVtlLnRhYkZvY3VzTW9kZT0xMzJdPSJ0YWJGb2N1c01vZGUiLGVbZS5sYXlvdXRJbmZvPTEzM109ImxheW91dEluZm8iLGVbZS53cmFwcGluZ0luZm89MTM0XT0id3JhcHBpbmdJbmZvIn0oY258fChjbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UZXh0RGVmaW5lZD0wXT0iVGV4dERlZmluZWQiLGVbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0obG58fChsbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MRj0wXT0iTEYiLGVbZS5DUkxGPTFdPSJDUkxGIn0odW58fCh1bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuSW5kZW50PTFdPSJJbmRlbnQiLGVbZS5JbmRlbnRPdXRkZW50PTJdPSJJbmRlbnRPdXRkZW50IixlW2UuT3V0ZGVudD0zXT0iT3V0ZGVudCJ9KGhufHwoaG49e30pKSxmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0oZm58fChmbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifShkbnx8KGRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0obW58fChtbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5EZXBlbmRzT25LYkxheW91dD0tMV09IkRlcGVuZHNPbktiTGF5b3V0IixlW2UuVW5rbm93bj0wXT0iVW5rbm93biIsZVtlLkJhY2tzcGFjZT0xXT0iQmFja3NwYWNlIixlW2UuVGFiPTJdPSJUYWIiLGVbZS5FbnRlcj0zXT0iRW50ZXIiLGVbZS5TaGlmdD00XT0iU2hpZnQiLGVbZS5DdHJsPTVdPSJDdHJsIixlW2UuQWx0PTZdPSJBbHQiLGVbZS5QYXVzZUJyZWFrPTddPSJQYXVzZUJyZWFrIixlW2UuQ2Fwc0xvY2s9OF09IkNhcHNMb2NrIixlW2UuRXNjYXBlPTldPSJFc2NhcGUiLGVbZS5TcGFjZT0xMF09IlNwYWNlIixlW2UuUGFnZVVwPTExXT0iUGFnZVVwIixlW2UuUGFnZURvd249MTJdPSJQYWdlRG93biIsZVtlLkVuZD0xM109IkVuZCIsZVtlLkhvbWU9MTRdPSJIb21lIixlW2UuTGVmdEFycm93PTE1XT0iTGVmdEFycm93IixlW2UuVXBBcnJvdz0xNl09IlVwQXJyb3ciLGVbZS5SaWdodEFycm93PTE3XT0iUmlnaHRBcnJvdyIsZVtlLkRvd25BcnJvdz0xOF09IkRvd25BcnJvdyIsZVtlLkluc2VydD0xOV09Ikluc2VydCIsZVtlLkRlbGV0ZT0yMF09IkRlbGV0ZSIsZVtlLkRpZ2l0MD0yMV09IkRpZ2l0MCIsZVtlLkRpZ2l0MT0yMl09IkRpZ2l0MSIsZVtlLkRpZ2l0Mj0yM109IkRpZ2l0MiIsZVtlLkRpZ2l0Mz0yNF09IkRpZ2l0MyIsZVtlLkRpZ2l0ND0yNV09IkRpZ2l0NCIsZVtlLkRpZ2l0NT0yNl09IkRpZ2l0NSIsZVtlLkRpZ2l0Nj0yN109IkRpZ2l0NiIsZVtlLkRpZ2l0Nz0yOF09IkRpZ2l0NyIsZVtlLkRpZ2l0OD0yOV09IkRpZ2l0OCIsZVtlLkRpZ2l0OT0zMF09IkRpZ2l0OSIsZVtlLktleUE9MzFdPSJLZXlBIixlW2UuS2V5Qj0zMl09IktleUIiLGVbZS5LZXlDPTMzXT0iS2V5QyIsZVtlLktleUQ9MzRdPSJLZXlEIixlW2UuS2V5RT0zNV09IktleUUiLGVbZS5LZXlGPTM2XT0iS2V5RiIsZVtlLktleUc9MzddPSJLZXlHIixlW2UuS2V5SD0zOF09IktleUgiLGVbZS5LZXlJPTM5XT0iS2V5SSIsZVtlLktleUo9NDBdPSJLZXlKIixlW2UuS2V5Sz00MV09IktleUsiLGVbZS5LZXlMPTQyXT0iS2V5TCIsZVtlLktleU09NDNdPSJLZXlNIixlW2UuS2V5Tj00NF09IktleU4iLGVbZS5LZXlPPTQ1XT0iS2V5TyIsZVtlLktleVA9NDZdPSJLZXlQIixlW2UuS2V5UT00N109IktleVEiLGVbZS5LZXlSPTQ4XT0iS2V5UiIsZVtlLktleVM9NDldPSJLZXlTIixlW2UuS2V5VD01MF09IktleVQiLGVbZS5LZXlVPTUxXT0iS2V5VSIsZVtlLktleVY9NTJdPSJLZXlWIixlW2UuS2V5Vz01M109IktleVciLGVbZS5LZXlYPTU0XT0iS2V5WCIsZVtlLktleVk9NTVdPSJLZXlZIixlW2UuS2V5Wj01Nl09IktleVoiLGVbZS5NZXRhPTU3XT0iTWV0YSIsZVtlLkNvbnRleHRNZW51PTU4XT0iQ29udGV4dE1lbnUiLGVbZS5GMT01OV09IkYxIixlW2UuRjI9NjBdPSJGMiIsZVtlLkYzPTYxXT0iRjMiLGVbZS5GND02Ml09IkY0IixlW2UuRjU9NjNdPSJGNSIsZVtlLkY2PTY0XT0iRjYiLGVbZS5GNz02NV09IkY3IixlW2UuRjg9NjZdPSJGOCIsZVtlLkY5PTY3XT0iRjkiLGVbZS5GMTA9NjhdPSJGMTAiLGVbZS5GMTE9NjldPSJGMTEiLGVbZS5GMTI9NzBdPSJGMTIiLGVbZS5GMTM9NzFdPSJGMTMiLGVbZS5GMTQ9NzJdPSJGMTQiLGVbZS5GMTU9NzNdPSJGMTUiLGVbZS5GMTY9NzRdPSJGMTYiLGVbZS5GMTc9NzVdPSJGMTciLGVbZS5GMTg9NzZdPSJGMTgiLGVbZS5GMTk9NzddPSJGMTkiLGVbZS5OdW1Mb2NrPTc4XT0iTnVtTG9jayIsZVtlLlNjcm9sbExvY2s9NzldPSJTY3JvbGxMb2NrIixlW2UuU2VtaWNvbG9uPTgwXT0iU2VtaWNvbG9uIixlW2UuRXF1YWw9ODFdPSJFcXVhbCIsZVtlLkNvbW1hPTgyXT0iQ29tbWEiLGVbZS5NaW51cz04M109Ik1pbnVzIixlW2UuUGVyaW9kPTg0XT0iUGVyaW9kIixlW2UuU2xhc2g9ODVdPSJTbGFzaCIsZVtlLkJhY2txdW90ZT04Nl09IkJhY2txdW90ZSIsZVtlLkJyYWNrZXRMZWZ0PTg3XT0iQnJhY2tldExlZnQiLGVbZS5CYWNrc2xhc2g9ODhdPSJCYWNrc2xhc2giLGVbZS5CcmFja2V0UmlnaHQ9ODldPSJCcmFja2V0UmlnaHQiLGVbZS5RdW90ZT05MF09IlF1b3RlIixlW2UuT0VNXzg9OTFdPSJPRU1fOCIsZVtlLkludGxCYWNrc2xhc2g9OTJdPSJJbnRsQmFja3NsYXNoIixlW2UuTnVtcGFkMD05M109Ik51bXBhZDAiLGVbZS5OdW1wYWQxPTk0XT0iTnVtcGFkMSIsZVtlLk51bXBhZDI9OTVdPSJOdW1wYWQyIixlW2UuTnVtcGFkMz05Nl09Ik51bXBhZDMiLGVbZS5OdW1wYWQ0PTk3XT0iTnVtcGFkNCIsZVtlLk51bXBhZDU9OThdPSJOdW1wYWQ1IixlW2UuTnVtcGFkNj05OV09Ik51bXBhZDYiLGVbZS5OdW1wYWQ3PTEwMF09Ik51bXBhZDciLGVbZS5OdW1wYWQ4PTEwMV09Ik51bXBhZDgiLGVbZS5OdW1wYWQ5PTEwMl09Ik51bXBhZDkiLGVbZS5OdW1wYWRNdWx0aXBseT0xMDNdPSJOdW1wYWRNdWx0aXBseSIsZVtlLk51bXBhZEFkZD0xMDRdPSJOdW1wYWRBZGQiLGVbZS5OVU1QQURfU0VQQVJBVE9SPTEwNV09Ik5VTVBBRF9TRVBBUkFUT1IiLGVbZS5OdW1wYWRTdWJ0cmFjdD0xMDZdPSJOdW1wYWRTdWJ0cmFjdCIsZVtlLk51bXBhZERlY2ltYWw9MTA3XT0iTnVtcGFkRGVjaW1hbCIsZVtlLk51bXBhZERpdmlkZT0xMDhdPSJOdW1wYWREaXZpZGUiLGVbZS5LRVlfSU5fQ09NUE9TSVRJT049MTA5XT0iS0VZX0lOX0NPTVBPU0lUSU9OIixlW2UuQUJOVF9DMT0xMTBdPSJBQk5UX0MxIixlW2UuQUJOVF9DMj0xMTFdPSJBQk5UX0MyIixlW2UuQXVkaW9Wb2x1bWVNdXRlPTExMl09IkF1ZGlvVm9sdW1lTXV0ZSIsZVtlLkF1ZGlvVm9sdW1lVXA9MTEzXT0iQXVkaW9Wb2x1bWVVcCIsZVtlLkF1ZGlvVm9sdW1lRG93bj0xMTRdPSJBdWRpb1ZvbHVtZURvd24iLGVbZS5Ccm93c2VyU2VhcmNoPTExNV09IkJyb3dzZXJTZWFyY2giLGVbZS5Ccm93c2VySG9tZT0xMTZdPSJCcm93c2VySG9tZSIsZVtlLkJyb3dzZXJCYWNrPTExN109IkJyb3dzZXJCYWNrIixlW2UuQnJvd3NlckZvcndhcmQ9MTE4XT0iQnJvd3NlckZvcndhcmQiLGVbZS5NZWRpYVRyYWNrTmV4dD0xMTldPSJNZWRpYVRyYWNrTmV4dCIsZVtlLk1lZGlhVHJhY2tQcmV2aW91cz0xMjBdPSJNZWRpYVRyYWNrUHJldmlvdXMiLGVbZS5NZWRpYVN0b3A9MTIxXT0iTWVkaWFTdG9wIixlW2UuTWVkaWFQbGF5UGF1c2U9MTIyXT0iTWVkaWFQbGF5UGF1c2UiLGVbZS5MYXVuY2hNZWRpYVBsYXllcj0xMjNdPSJMYXVuY2hNZWRpYVBsYXllciIsZVtlLkxhdW5jaE1haWw9MTI0XT0iTGF1bmNoTWFpbCIsZVtlLkxhdW5jaEFwcDI9MTI1XT0iTGF1bmNoQXBwMiIsZVtlLkNsZWFyPTEyNl09IkNsZWFyIixlW2UuTUFYX1ZBTFVFPTEyN109Ik1BWF9WQUxVRSJ9KGdufHwoZ249e30pKSxmdW5jdGlvbihlKXtlW2UuSGludD0xXT0iSGludCIsZVtlLkluZm89Ml09IkluZm8iLGVbZS5XYXJuaW5nPTRdPSJXYXJuaW5nIixlW2UuRXJyb3I9OF09IkVycm9yIn0ocG58fChwbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Vbm5lY2Vzc2FyeT0xXT0iVW5uZWNlc3NhcnkiLGVbZS5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIn0oYm58fChibj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkd1dHRlcj0yXT0iR3V0dGVyIn0odm58fCh2bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOPTBdPSJVTktOT1dOIixlW2UuVEVYVEFSRUE9MV09IlRFWFRBUkVBIixlW2UuR1VUVEVSX0dMWVBIX01BUkdJTj0yXT0iR1VUVEVSX0dMWVBIX01BUkdJTiIsZVtlLkdVVFRFUl9MSU5FX05VTUJFUlM9M109IkdVVFRFUl9MSU5FX05VTUJFUlMiLGVbZS5HVVRURVJfTElORV9ERUNPUkFUSU9OUz00XT0iR1VUVEVSX0xJTkVfREVDT1JBVElPTlMiLGVbZS5HVVRURVJfVklFV19aT05FPTVdPSJHVVRURVJfVklFV19aT05FIixlW2UuQ09OVEVOVF9URVhUPTZdPSJDT05URU5UX1RFWFQiLGVbZS5DT05URU5UX0VNUFRZPTddPSJDT05URU5UX0VNUFRZIixlW2UuQ09OVEVOVF9WSUVXX1pPTkU9OF09IkNPTlRFTlRfVklFV19aT05FIixlW2UuQ09OVEVOVF9XSURHRVQ9OV09IkNPTlRFTlRfV0lER0VUIixlW2UuT1ZFUlZJRVdfUlVMRVI9MTBdPSJPVkVSVklFV19SVUxFUiIsZVtlLlNDUk9MTEJBUj0xMV09IlNDUk9MTEJBUiIsZVtlLk9WRVJMQVlfV0lER0VUPTEyXT0iT1ZFUkxBWV9XSURHRVQiLGVbZS5PVVRTSURFX0VESVRPUj0xM109Ik9VVFNJREVfRURJVE9SIn0oeW58fCh5bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UT1BfUklHSFRfQ09STkVSPTBdPSJUT1BfUklHSFRfQ09STkVSIixlW2UuQk9UVE9NX1JJR0hUX0NPUk5FUj0xXT0iQk9UVE9NX1JJR0hUX0NPUk5FUiIsZVtlLlRPUF9DRU5URVI9Ml09IlRPUF9DRU5URVIifShDbnx8KENuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTRdPSJSaWdodCIsZVtlLkZ1bGw9N109IkZ1bGwifSh3bnx8KHduPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MF09IkxlZnQiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5Ob25lPTJdPSJOb25lIixlW2UuTGVmdE9mSW5qZWN0ZWRUZXh0PTNdPSJMZWZ0T2ZJbmplY3RlZFRleHQiLGVbZS5SaWdodE9mSW5qZWN0ZWRUZXh0PTRdPSJSaWdodE9mSW5qZWN0ZWRUZXh0In0oX258fChfbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5PZmY9MF09Ik9mZiIsZVtlLk9uPTFdPSJPbiIsZVtlLlJlbGF0aXZlPTJdPSJSZWxhdGl2ZSIsZVtlLkludGVydmFsPTNdPSJJbnRlcnZhbCIsZVtlLkN1c3RvbT00XT0iQ3VzdG9tIn0oU258fChTbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuVGV4dD0xXT0iVGV4dCIsZVtlLkJsb2Nrcz0yXT0iQmxvY2tzIn0oQW58fChBbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5TbW9vdGg9MF09IlNtb290aCIsZVtlLkltbWVkaWF0ZT0xXT0iSW1tZWRpYXRlIn0oRW58fChFbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BdXRvPTFdPSJBdXRvIixlW2UuSGlkZGVuPTJdPSJIaWRkZW4iLGVbZS5WaXNpYmxlPTNdPSJWaXNpYmxlIn0oeG58fCh4bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MVFI9MF09IkxUUiIsZVtlLlJUTD0xXT0iUlRMIn0oTm58fChObj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9Ml09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5Db250ZW50Q2hhbmdlPTNdPSJDb250ZW50Q2hhbmdlIn0oa258fChrbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5GaWxlPTBdPSJGaWxlIixlW2UuTW9kdWxlPTFdPSJNb2R1bGUiLGVbZS5OYW1lc3BhY2U9Ml09Ik5hbWVzcGFjZSIsZVtlLlBhY2thZ2U9M109IlBhY2thZ2UiLGVbZS5DbGFzcz00XT0iQ2xhc3MiLGVbZS5NZXRob2Q9NV09Ik1ldGhvZCIsZVtlLlByb3BlcnR5PTZdPSJQcm9wZXJ0eSIsZVtlLkZpZWxkPTddPSJGaWVsZCIsZVtlLkNvbnN0cnVjdG9yPThdPSJDb25zdHJ1Y3RvciIsZVtlLkVudW09OV09IkVudW0iLGVbZS5JbnRlcmZhY2U9MTBdPSJJbnRlcmZhY2UiLGVbZS5GdW5jdGlvbj0xMV09IkZ1bmN0aW9uIixlW2UuVmFyaWFibGU9MTJdPSJWYXJpYWJsZSIsZVtlLkNvbnN0YW50PTEzXT0iQ29uc3RhbnQiLGVbZS5TdHJpbmc9MTRdPSJTdHJpbmciLGVbZS5OdW1iZXI9MTVdPSJOdW1iZXIiLGVbZS5Cb29sZWFuPTE2XT0iQm9vbGVhbiIsZVtlLkFycmF5PTE3XT0iQXJyYXkiLGVbZS5PYmplY3Q9MThdPSJPYmplY3QiLGVbZS5LZXk9MTldPSJLZXkiLGVbZS5OdWxsPTIwXT0iTnVsbCIsZVtlLkVudW1NZW1iZXI9MjFdPSJFbnVtTWVtYmVyIixlW2UuU3RydWN0PTIyXT0iU3RydWN0IixlW2UuRXZlbnQ9MjNdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTI0XT0iT3BlcmF0b3IiLGVbZS5UeXBlUGFyYW1ldGVyPTI1XT0iVHlwZVBhcmFtZXRlciJ9KExufHwoTG49e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KFRufHwoVG49e30pKSxmdW5jdGlvbihlKXtlW2UuSGlkZGVuPTBdPSJIaWRkZW4iLGVbZS5CbGluaz0xXT0iQmxpbmsiLGVbZS5TbW9vdGg9Ml09IlNtb290aCIsZVtlLlBoYXNlPTNdPSJQaGFzZSIsZVtlLkV4cGFuZD00XT0iRXhwYW5kIixlW2UuU29saWQ9NV09IlNvbGlkIn0oT258fChPbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MaW5lPTFdPSJMaW5lIixlW2UuQmxvY2s9Ml09IkJsb2NrIixlW2UuVW5kZXJsaW5lPTNdPSJVbmRlcmxpbmUiLGVbZS5MaW5lVGhpbj00XT0iTGluZVRoaW4iLGVbZS5CbG9ja091dGxpbmU9NV09IkJsb2NrT3V0bGluZSIsZVtlLlVuZGVybGluZVRoaW49Nl09IlVuZGVybGluZVRoaW4ifShJbnx8KEluPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXM9MF09IkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5OZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXM9MV09Ik5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmU9Ml09Ikdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmUiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXI9M109Ikdyb3dzT25seVdoZW5UeXBpbmdBZnRlciJ9KE1ufHwoTW49e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlNhbWU9MV09IlNhbWUiLGVbZS5JbmRlbnQ9Ml09IkluZGVudCIsZVtlLkRlZXBJbmRlbnQ9M109IkRlZXBJbmRlbnQifShQbnx8KFBuPXt9KSk7Y2xhc3MgVW57c3RhdGljIGNob3JkKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuKGV8KDY1NTM1JnQpPDwxNj4+PjApPj4+MH0oZSx0KX19ZnVuY3Rpb24gQm4oZSx0LG4scixpKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scixpKXtpZigwPT09cilyZXR1cm4hMDtjb25zdCBvPXQuY2hhckNvZGVBdChyLTEpO2lmKDAhPT1lLmdldChvKSlyZXR1cm4hMDtpZigxMz09PW98fDEwPT09bylyZXR1cm4hMDtpZihpPjApe2NvbnN0IG49dC5jaGFyQ29kZUF0KHIpO2lmKDAhPT1lLmdldChuKSlyZXR1cm4hMH1yZXR1cm4hMX0oZSx0LDAscixpKSYmZnVuY3Rpb24oZSx0LG4scixpKXtpZihyK2k9PT1uKXJldHVybiEwO2NvbnN0IG89dC5jaGFyQ29kZUF0KHIraSk7aWYoMCE9PWUuZ2V0KG8pKXJldHVybiEwO2lmKDEzPT09b3x8MTA9PT1vKXJldHVybiEwO2lmKGk+MCl7Y29uc3Qgbj10LmNoYXJDb2RlQXQocitpLTEpO2lmKDAhPT1lLmdldChuKSlyZXR1cm4hMH1yZXR1cm4hMX0oZSx0LG4scixpKX1Vbi5DdHJsQ21kPTIwNDgsVW4uU2hpZnQ9MTAyNCxVbi5BbHQ9NTEyLFVuLldpbkN0cmw9MjU2LGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0oUm58fChSbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkd1dHRlcj0yXT0iR3V0dGVyIn0oVm58fChWbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Cb3RoPTBdPSJCb3RoIixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTGVmdD0yXT0iTGVmdCIsZVtlLk5vbmU9M109Ik5vbmUifShGbnx8KEZuPXt9KSk7Y2xhc3MgcW57Y29uc3RydWN0b3IoZSx0KXt0aGlzLl93b3JkU2VwYXJhdG9ycz1lLHRoaXMuX3NlYXJjaFJlZ2V4PXQsdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1yZXNldChlKXt0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXg9ZSx0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfW5leHQoZSl7Y29uc3QgdD1lLmxlbmd0aDtsZXQgbjtkb3tpZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4K3RoaXMuX3ByZXZNYXRjaExlbmd0aD09PXQpcmV0dXJuIG51bGw7aWYobj10aGlzLl9zZWFyY2hSZWdleC5leGVjKGUpLCFuKXJldHVybiBudWxsO2NvbnN0IHI9bi5pbmRleCxpPW5bMF0ubGVuZ3RoO2lmKHI9PT10aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4JiZpPT09dGhpcy5fcHJldk1hdGNoTGVuZ3RoKXtpZigwPT09aSl7WihlLHQsdGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4KT42NTUzNT90aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTI6dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0xO2NvbnRpbnVlfXJldHVybiBudWxsfWlmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9cix0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9aSwhdGhpcy5fd29yZFNlcGFyYXRvcnN8fEJuKHRoaXMuX3dvcmRTZXBhcmF0b3JzLGUsdCxyLGkpKXJldHVybiBufXdoaWxlKG4pO3JldHVybiBudWxsfX1jbGFzcyAkbntzdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKGUsdCxuKXtjb25zdCByPW4/bi5zdGFydExpbmVOdW1iZXI6MSxpPW4/bi5lbmRMaW5lTnVtYmVyOmUuZ2V0TGluZUNvdW50KCksbz1uZXcgV24odCksYT1vLmdldENhbmRpZGF0ZUNvZGVQb2ludHMoKTtsZXQgczt2YXIgYyxsO3M9ImFsbE5vbkJhc2ljQXNjaWkiPT09YT9uZXcgUmVnRXhwKCJbXlxcdFxcblxcclxceDIwLVxceDdFXSIsImciKTpuZXcgUmVnRXhwKCIiKyhjPUFycmF5LmZyb20oYSksYFske2w9Yy5tYXAoKGU9PlN0cmluZy5mcm9tQ29kZVBvaW50KGUpKSkuam9pbigiIiksbC5yZXBsYWNlKC9bXFxce1x9XCpcK1w/XHxcXlwkXC5cW1xdXChcKV0vZywiXFwkJiIpfV1gKSwiZyIpO2NvbnN0IHU9bmV3IHFuKG51bGwscyksaD1bXTtsZXQgZixkPSExLG09MCxnPTAscD0wO2U6Zm9yKGxldCB0PXIsbj1pO3Q8PW47dCsrKXtjb25zdCBuPWUuZ2V0TGluZUNvbnRlbnQodCkscj1uLmxlbmd0aDt1LnJlc2V0KDApO2Rve2lmKGY9dS5uZXh0KG4pLGYpe2xldCBlPWYuaW5kZXgsaT1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGU+MCl7WChuLmNoYXJDb2RlQXQoZS0xKSkmJmUtLX1pZihpKzE8cil7WChuLmNoYXJDb2RlQXQoaS0xKSkmJmkrK31jb25zdCBhPW4uc3Vic3RyaW5nKGUsaSkscz15dChlKzEsYnQsbiwwKSxjPW8uc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShhLHM/cy53b3JkOm51bGwpO2lmKDAhPT1jKXszPT09Yz9tKys6Mj09PWM/ZysrOjE9PT1jP3ArKzp6KCk7Y29uc3Qgbj0xZTM7aWYoaC5sZW5ndGg+PW4pe2Q9ITA7YnJlYWsgZX1oLnB1c2gobmV3IHR0KHQsZSsxLHQsaSsxKSl9fX13aGlsZShmKX1yZXR1cm57cmFuZ2VzOmgsaGFzTW9yZTpkLGFtYmlndW91c0NoYXJhY3RlckNvdW50Om0saW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6Zyxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6cH19c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0UmVhc29uKGUsdCl7Y29uc3Qgbj1uZXcgV24odCk7c3dpdGNoKG4uc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShlLG51bGwpKXtjYXNlIDA6cmV0dXJuIG51bGw7Y2FzZSAyOnJldHVybntraW5kOjF9O2Nhc2UgMzp7Y29uc3Qgcj1lLmNvZGVQb2ludEF0KDApLGk9bi5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldFByaW1hcnlDb25mdXNhYmxlKHIpLG89US5nZXRMb2NhbGVzKCkuZmlsdGVyKChlPT4hUS5nZXRJbnN0YW5jZShuZXcgU2V0KFsuLi50LmFsbG93ZWRMb2NhbGVzLGVdKSkuaXNBbWJpZ3VvdXMocikpKTtyZXR1cm57a2luZDowLGNvbmZ1c2FibGVXaXRoOlN0cmluZy5mcm9tQ29kZVBvaW50KGkpLG5vdEFtYmlndW91c0luTG9jYWxlczpvfX1jYXNlIDE6cmV0dXJue2tpbmQ6Mn19fX1jbGFzcyBXbntjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLmFsbG93ZWRDb2RlUG9pbnRzPW5ldyBTZXQoZS5hbGxvd2VkQ29kZVBvaW50cyksdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzPVEuZ2V0SW5zdGFuY2UobmV3IFNldChlLmFsbG93ZWRMb2NhbGVzKSl9Z2V0Q2FuZGlkYXRlQ29kZVBvaW50cygpe2lmKHRoaXMub3B0aW9ucy5ub25CYXNpY0FTQ0lJKXJldHVybiJhbGxOb25CYXNpY0FzY2lpIjtjb25zdCBlPW5ldyBTZXQ7aWYodGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMpZm9yKGNvbnN0IHQgb2YgZWUuY29kZVBvaW50cylIbihTdHJpbmcuZnJvbUNvZGVQb2ludCh0KSl8fGUuYWRkKHQpO2lmKHRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzKWZvcihjb25zdCB0IG9mIHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpKWUuYWRkKHQpO2Zvcihjb25zdCB0IG9mIHRoaXMuYWxsb3dlZENvZGVQb2ludHMpZS5kZWxldGUodCk7cmV0dXJuIGV9c2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShlLHQpe2NvbnN0IG49ZS5jb2RlUG9pbnRBdCgwKTtpZih0aGlzLmFsbG93ZWRDb2RlUG9pbnRzLmhhcyhuKSlyZXR1cm4gMDtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4gMTtsZXQgcj0hMSxpPSExO2lmKHQpZm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1lLmNvZGVQb2ludEF0KDApLG49KG89ZSxZLnRlc3QobykpO3I9cnx8bixufHx0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXModCl8fGVlLmlzSW52aXNpYmxlQ2hhcmFjdGVyKHQpfHwoaT0hMCl9dmFyIG87cmV0dXJuIXImJmk/MDp0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycyYmIUhuKGUpJiZlZS5pc0ludmlzaWJsZUNoYXJhY3RlcihuKT8yOnRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzJiZ0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXMobik/MzowfX1mdW5jdGlvbiBIbihlKXtyZXR1cm4iICI9PT1lfHwiXG4iPT09ZXx8Ilx0Ij09PWV9dmFyIHpuPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjbGFzcyBHbiBleHRlbmRzIHB0e2dldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBlb2woKXtyZXR1cm4gdGhpcy5fZW9sfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpfWdldExpbmVzQ29udGVudCgpe3JldHVybiB0aGlzLl9saW5lcy5zbGljZSgwKX1nZXRMaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5fbGluZXMubGVuZ3RofWdldExpbmVDb250ZW50KGUpe3JldHVybiB0aGlzLl9saW5lc1tlLTFdfWdldFdvcmRBdFBvc2l0aW9uKGUsdCl7Y29uc3Qgbj15dChlLmNvbHVtbixmdW5jdGlvbihlKXtsZXQgdD1idDtpZihlJiZlIGluc3RhbmNlb2YgUmVnRXhwKWlmKGUuZ2xvYmFsKXQ9ZTtlbHNle2xldCBuPSJnIjtlLmlnbm9yZUNhc2UmJihuKz0iaSIpLGUubXVsdGlsaW5lJiYobis9Im0iKSxlLnVuaWNvZGUmJihuKz0idSIpLHQ9bmV3IFJlZ0V4cChlLnNvdXJjZSxuKX1yZXR1cm4gdC5sYXN0SW5kZXg9MCx0fSh0KSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0sMCk7cmV0dXJuIG4/bmV3IHR0KGUubGluZU51bWJlcixuLnN0YXJ0Q29sdW1uLGUubGluZU51bWJlcixuLmVuZENvbHVtbik6bnVsbH13b3JkcyhlKXtjb25zdCB0PXRoaXMuX2xpbmVzLG49dGhpcy5fd29yZGVuaXplLmJpbmQodGhpcyk7bGV0IHI9MCxpPSIiLG89MCxhPVtdO3JldHVybnsqW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IoOzspaWYobzxhLmxlbmd0aCl7Y29uc3QgZT1pLnN1YnN0cmluZyhhW29dLnN0YXJ0LGFbb10uZW5kKTtvKz0xLHlpZWxkIGV9ZWxzZXtpZighKHI8dC5sZW5ndGgpKWJyZWFrO2k9dFtyXSxhPW4oaSxlKSxvPTAscis9MX19fX1nZXRMaW5lV29yZHMoZSx0KXtjb25zdCBuPXRoaXMuX2xpbmVzW2UtMV0scj10aGlzLl93b3JkZW5pemUobix0KSxpPVtdO2Zvcihjb25zdCBlIG9mIHIpaS5wdXNoKHt3b3JkOm4uc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQpLHN0YXJ0Q29sdW1uOmUuc3RhcnQrMSxlbmRDb2x1bW46ZS5lbmQrMX0pO3JldHVybiBpfV93b3JkZW5pemUoZSx0KXtjb25zdCBuPVtdO2xldCByO2Zvcih0Lmxhc3RJbmRleD0wOyhyPXQuZXhlYyhlKSkmJjAhPT1yWzBdLmxlbmd0aDspbi5wdXNoKHtzdGFydDpyLmluZGV4LGVuZDpyLmluZGV4K3JbMF0ubGVuZ3RofSk7cmV0dXJuIG59Z2V0VmFsdWVJblJhbmdlKGUpe2lmKChlPXRoaXMuX3ZhbGlkYXRlUmFuZ2UoZSkpLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlcilyZXR1cm4gdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuc3RhcnRDb2x1bW4tMSxlLmVuZENvbHVtbi0xKTtjb25zdCB0PXRoaXMuX2VvbCxuPWUuc3RhcnRMaW5lTnVtYmVyLTEscj1lLmVuZExpbmVOdW1iZXItMSxpPVtdO2kucHVzaCh0aGlzLl9saW5lc1tuXS5zdWJzdHJpbmcoZS5zdGFydENvbHVtbi0xKSk7Zm9yKGxldCBlPW4rMTtlPHI7ZSsrKWkucHVzaCh0aGlzLl9saW5lc1tlXSk7cmV0dXJuIGkucHVzaCh0aGlzLl9saW5lc1tyXS5zdWJzdHJpbmcoMCxlLmVuZENvbHVtbi0xKSksaS5qb2luKHQpfW9mZnNldEF0KGUpe3JldHVybiBlPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oZSksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpLHRoaXMuX2xpbmVTdGFydHMuZ2V0UHJlZml4U3VtKGUubGluZU51bWJlci0yKSsoZS5jb2x1bW4tMSl9cG9zaXRpb25BdChlKXtlPU1hdGguZmxvb3IoZSksZT1NYXRoLm1heCgwLGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKTtjb25zdCB0PXRoaXMuX2xpbmVTdGFydHMuZ2V0SW5kZXhPZihlKSxuPXRoaXMuX2xpbmVzW3QuaW5kZXhdLmxlbmd0aDtyZXR1cm57bGluZU51bWJlcjoxK3QuaW5kZXgsY29sdW1uOjErTWF0aC5taW4odC5yZW1haW5kZXIsbil9fV92YWxpZGF0ZVJhbmdlKGUpe2NvbnN0IHQ9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjplLnN0YXJ0TGluZU51bWJlcixjb2x1bW46ZS5zdGFydENvbHVtbn0pLG49dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjplLmVuZExpbmVOdW1iZXIsY29sdW1uOmUuZW5kQ29sdW1ufSk7cmV0dXJuIHQubGluZU51bWJlciE9PWUuc3RhcnRMaW5lTnVtYmVyfHx0LmNvbHVtbiE9PWUuc3RhcnRDb2x1bW58fG4ubGluZU51bWJlciE9PWUuZW5kTGluZU51bWJlcnx8bi5jb2x1bW4hPT1lLmVuZENvbHVtbj97c3RhcnRMaW5lTnVtYmVyOnQubGluZU51bWJlcixzdGFydENvbHVtbjp0LmNvbHVtbixlbmRMaW5lTnVtYmVyOm4ubGluZU51bWJlcixlbmRDb2x1bW46bi5jb2x1bW59OmV9X3ZhbGlkYXRlUG9zaXRpb24oZSl7aWYoIWV0LmlzSVBvc2l0aW9uKGUpKXRocm93IG5ldyBFcnJvcigiYmFkIHBvc2l0aW9uIik7bGV0e2xpbmVOdW1iZXI6dCxjb2x1bW46bn09ZSxyPSExO2lmKHQ8MSl0PTEsbj0xLHI9ITA7ZWxzZSBpZih0PnRoaXMuX2xpbmVzLmxlbmd0aCl0PXRoaXMuX2xpbmVzLmxlbmd0aCxuPXRoaXMuX2xpbmVzW3QtMV0ubGVuZ3RoKzEscj0hMDtlbHNle2NvbnN0IGU9dGhpcy5fbGluZXNbdC0xXS5sZW5ndGgrMTtuPDE/KG49MSxyPSEwKTpuPmUmJihuPWUscj0hMCl9cmV0dXJuIHI/e2xpbmVOdW1iZXI6dCxjb2x1bW46bn06ZX19Y2xhc3MgSm57Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9ob3N0PWUsdGhpcy5fbW9kZWxzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnk9dCx0aGlzLl9mb3JlaWduTW9kdWxlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpfV9nZXRNb2RlbChlKXtyZXR1cm4gdGhpcy5fbW9kZWxzW2VdfV9nZXRNb2RlbHMoKXtjb25zdCBlPVtdO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tb2RlbHMpLmZvckVhY2goKHQ9PmUucHVzaCh0aGlzLl9tb2RlbHNbdF0pKSksZX1hY2NlcHROZXdNb2RlbChlKXt0aGlzLl9tb2RlbHNbZS51cmxdPW5ldyBHbihxZS5wYXJzZShlLnVybCksZS5saW5lcyxlLkVPTCxlLnZlcnNpb25JZCl9YWNjZXB0TW9kZWxDaGFuZ2VkKGUsdCl7aWYoIXRoaXMuX21vZGVsc1tlXSlyZXR1cm47dGhpcy5fbW9kZWxzW2VdLm9uRXZlbnRzKHQpfWFjY2VwdFJlbW92ZWRNb2RlbChlKXt0aGlzLl9tb2RlbHNbZV0mJmRlbGV0ZSB0aGlzLl9tb2RlbHNbZV19Y29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKGUsdCxuKXtyZXR1cm4gem4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPXRoaXMuX2dldE1vZGVsKGUpO3JldHVybiByPyRuLmNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhyLHQsbik6e3JhbmdlczpbXSxoYXNNb3JlOiExLGFtYmlndW91c0NoYXJhY3RlckNvdW50OjAsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6MCxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6MH19KSl9Y29tcHV0ZURpZmYoZSx0LG4scil7cmV0dXJuIHpuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT10aGlzLl9nZXRNb2RlbChlKSxvPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBpJiZvP0puLmNvbXB1dGVEaWZmKGksbyxuLHIpOm51bGx9KSl9c3RhdGljIGNvbXB1dGVEaWZmKGUsdCxuLHIpe2NvbnN0IGk9ZS5nZXRMaW5lc0NvbnRlbnQoKSxvPXQuZ2V0TGluZXNDb250ZW50KCksYT1uZXcgc3QoaSxvLHtzaG91bGRDb21wdXRlQ2hhckNoYW5nZXM6ITAsc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlczohMCxzaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZTpuLHNob3VsZE1ha2VQcmV0dHlEaWZmOiEwLG1heENvbXB1dGF0aW9uVGltZTpyfSkuY29tcHV0ZURpZmYoKSxzPSEoYS5jaGFuZ2VzLmxlbmd0aD4wKSYmdGhpcy5fbW9kZWxzQXJlSWRlbnRpY2FsKGUsdCk7cmV0dXJue3F1aXRFYXJseTphLnF1aXRFYXJseSxpZGVudGljYWw6cyxjaGFuZ2VzOmEuY2hhbmdlc319c3RhdGljIF9tb2RlbHNBcmVJZGVudGljYWwoZSx0KXtjb25zdCBuPWUuZ2V0TGluZUNvdW50KCk7aWYobiE9PXQuZ2V0TGluZUNvdW50KCkpcmV0dXJuITE7Zm9yKGxldCByPTE7cjw9bjtyKyspe2lmKGUuZ2V0TGluZUNvbnRlbnQocikhPT10LmdldExpbmVDb250ZW50KHIpKXJldHVybiExfXJldHVybiEwfWNvbXB1dGVNb3JlTWluaW1hbEVkaXRzKGUsdCl7cmV0dXJuIHpuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj10aGlzLl9nZXRNb2RlbChlKTtpZighbilyZXR1cm4gdDtjb25zdCByPVtdO2xldCBpO3Q9dC5zbGljZSgwKS5zb3J0KCgoZSx0KT0+e2lmKGUucmFuZ2UmJnQucmFuZ2UpcmV0dXJuIHR0LmNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLnJhbmdlLHQucmFuZ2UpO3JldHVybihlLnJhbmdlPzA6MSktKHQucmFuZ2U/MDoxKX0pKTtmb3IobGV0e3JhbmdlOmUsdGV4dDpvLGVvbDphfW9mIHQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmKGk9YSksdHQuaXNFbXB0eShlKSYmIW8pY29udGludWU7Y29uc3QgdD1uLmdldFZhbHVlSW5SYW5nZShlKTtpZihvPW8ucmVwbGFjZSgvXHJcbnxcbnxcci9nLG4uZW9sKSx0PT09byljb250aW51ZTtpZihNYXRoLm1heChvLmxlbmd0aCx0Lmxlbmd0aCk+Sm4uX2RpZmZMaW1pdCl7ci5wdXNoKHtyYW5nZTplLHRleHQ6b30pO2NvbnRpbnVlfWNvbnN0IHM9bWUodCxvLCExKSxjPW4ub2Zmc2V0QXQodHQubGlmdChlKS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBlIG9mIHMpe2NvbnN0IHQ9bi5wb3NpdGlvbkF0KGMrZS5vcmlnaW5hbFN0YXJ0KSxpPW4ucG9zaXRpb25BdChjK2Uub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoKSxhPXt0ZXh0Om8uc3Vic3RyKGUubW9kaWZpZWRTdGFydCxlLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnQubGluZU51bWJlcixzdGFydENvbHVtbjp0LmNvbHVtbixlbmRMaW5lTnVtYmVyOmkubGluZU51bWJlcixlbmRDb2x1bW46aS5jb2x1bW59fTtuLmdldFZhbHVlSW5SYW5nZShhLnJhbmdlKSE9PWEudGV4dCYmci5wdXNoKGEpfX1yZXR1cm4ibnVtYmVyIj09dHlwZW9mIGkmJnIucHVzaCh7ZW9sOmksdGV4dDoiIixyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOjAsc3RhcnRDb2x1bW46MCxlbmRMaW5lTnVtYmVyOjAsZW5kQ29sdW1uOjB9fSkscn0pKX1jb21wdXRlTGlua3MoZSl7cmV0dXJuIHpuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD10aGlzLl9nZXRNb2RlbChlKTtyZXR1cm4gdD9mdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0TGluZUNvdW50JiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRMaW5lQ29udGVudD94dC5jb21wdXRlTGlua3MoZSk6W119KHQpOm51bGx9KSl9dGV4dHVhbFN1Z2dlc3QoZSx0LG4scil7cmV0dXJuIHpuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT1uZXcgVighMCksbz1uZXcgUmVnRXhwKG4sciksYT1uZXcgU2V0O2U6Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3QgZT10aGlzLl9nZXRNb2RlbChuKTtpZihlKWZvcihjb25zdCBuIG9mIGUud29yZHMobykpaWYobiE9PXQmJmlzTmFOKE51bWJlcihuKSkmJihhLmFkZChuKSxhLnNpemU+Sm4uX3N1Z2dlc3Rpb25zTGltaXQpKWJyZWFrIGV9cmV0dXJue3dvcmRzOkFycmF5LmZyb20oYSksZHVyYXRpb246aS5lbGFwc2VkKCl9fSkpfWNvbXB1dGVXb3JkUmFuZ2VzKGUsdCxuLHIpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwoZSk7aWYoIWkpcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7Y29uc3Qgbz1uZXcgUmVnRXhwKG4sciksYT1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgZT10LnN0YXJ0TGluZU51bWJlcjtlPHQuZW5kTGluZU51bWJlcjtlKyspe2NvbnN0IHQ9aS5nZXRMaW5lV29yZHMoZSxvKTtmb3IoY29uc3QgbiBvZiB0KXtpZighaXNOYU4oTnVtYmVyKG4ud29yZCkpKWNvbnRpbnVlO2xldCB0PWFbbi53b3JkXTt0fHwodD1bXSxhW24ud29yZF09dCksdC5wdXNoKHtzdGFydExpbmVOdW1iZXI6ZSxzdGFydENvbHVtbjpuLnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6ZSxlbmRDb2x1bW46bi5lbmRDb2x1bW59KX19cmV0dXJuIGF9KSl9bmF2aWdhdGVWYWx1ZVNldChlLHQsbixyLGkpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG89dGhpcy5fZ2V0TW9kZWwoZSk7aWYoIW8pcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgUmVnRXhwKHIsaSk7dC5zdGFydENvbHVtbj09PXQuZW5kQ29sdW1uJiYodD17c3RhcnRMaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLHN0YXJ0Q29sdW1uOnQuc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjp0LmVuZExpbmVOdW1iZXIsZW5kQ29sdW1uOnQuZW5kQ29sdW1uKzF9KTtjb25zdCBzPW8uZ2V0VmFsdWVJblJhbmdlKHQpLGM9by5nZXRXb3JkQXRQb3NpdGlvbih7bGluZU51bWJlcjp0LnN0YXJ0TGluZU51bWJlcixjb2x1bW46dC5zdGFydENvbHVtbn0sYSk7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgbD1vLmdldFZhbHVlSW5SYW5nZShjKTtyZXR1cm4gTnQuSU5TVEFOQ0UubmF2aWdhdGVWYWx1ZVNldCh0LHMsYyxsLG4pfSkpfWxvYWRGb3JlaWduTW9kdWxlKGUsdCxuKXtjb25zdCByPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1lPT5mdW5jdGlvbigpe2NvbnN0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0KGUsbil9LHI9e307Zm9yKGNvbnN0IHQgb2YgZSlyW3RdPW4odCk7cmV0dXJuIHJ9KG4sKChlLHQpPT50aGlzLl9ob3N0LmZocihlLHQpKSksaT17aG9zdDpyLGdldE1pcnJvck1vZGVsczooKT0+dGhpcy5fZ2V0TW9kZWxzKCl9O3JldHVybiB0aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeT8odGhpcy5fZm9yZWlnbk1vZHVsZT10aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeShpLHQpLFByb21pc2UucmVzb2x2ZShIKHRoaXMuX2ZvcmVpZ25Nb2R1bGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmV4cGVjdGVkIHVzYWdlIikpfWZtcihlLHQpe2lmKCF0aGlzLl9mb3JlaWduTW9kdWxlfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZm9yZWlnbk1vZHVsZVtlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fZm9yZWlnbk1vZHVsZVtlXS5hcHBseSh0aGlzLl9mb3JlaWduTW9kdWxlLHQpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fX1Kbi5fZGlmZkxpbWl0PTFlNSxKbi5fc3VnZ2VzdGlvbnNMaW1pdD0xZTQsImZ1bmN0aW9uIj09dHlwZW9mIGltcG9ydFNjcmlwdHMmJihOLm1vbmFjbz17ZWRpdG9yOnZvaWQgMCxsYW5ndWFnZXM6dm9pZCAwLENhbmNlbGxhdGlvblRva2VuU291cmNlOk90LEVtaXR0ZXI6QixLZXlDb2RlOmduLEtleU1vZDpVbixQb3NpdGlvbjpldCxSYW5nZTp0dCxTZWxlY3Rpb246VXQsU2VsZWN0aW9uRGlyZWN0aW9uOk5uLE1hcmtlclNldmVyaXR5OnBuLE1hcmtlclRhZzpibixVcmk6cWUsVG9rZW46am59KTtsZXQgWG49ITE7ZnVuY3Rpb24gWm4oZSl7aWYoWG4pcmV0dXJuO1huPSEwO2NvbnN0IHQ9bmV3IGxlKChlPT57c2VsZi5wb3N0TWVzc2FnZShlKX0pLCh0PT5uZXcgSm4odCxlKSkpO3NlbGYub25tZXNzYWdlPWU9Pnt0Lm9ubWVzc2FnZShlLmRhdGEpfX0KLyohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgICogVmVyc2lvbjogMC4zNC4wKGYxYWQ5NTFmMjZhZmIzYmE2NDMyN2I3MGMzMDU2Y2FiYzM4NTE0OTIpCiAgICAgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvbW9uYWNvLWVkaXRvci9ibG9iL21haW4vTElDRU5TRS50eHQKICAgICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpmdW5jdGlvbiBZbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgbj1lLmxlbmd0aCxyPTAsaT0iIixvPTAsYT0xNixzPTAsYz0wLGw9MCx1PTAsaD0wO2Z1bmN0aW9uIGYodCxuKXtmb3IodmFyIGk9MCxvPTA7aTx0fHwhbjspe3ZhciBhPWUuY2hhckNvZGVBdChyKTtpZihhPj00OCYmYTw9NTcpbz0xNipvK2EtNDg7ZWxzZSBpZihhPj02NSYmYTw9NzApbz0xNipvK2EtNjUrMTA7ZWxzZXtpZighKGE+PTk3JiZhPD0xMDIpKWJyZWFrO289MTYqbythLTk3KzEwfXIrKyxpKyt9cmV0dXJuIGk8dCYmKG89LTEpLG99ZnVuY3Rpb24gZCgpe2lmKGk9IiIsaD0wLG89cixjPXMsdT1sLHI+PW4pcmV0dXJuIG89bixhPTE3O3ZhciB0PWUuY2hhckNvZGVBdChyKTtpZihRbih0KSl7ZG97cisrLGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCksdD1lLmNoYXJDb2RlQXQocil9d2hpbGUoUW4odCkpO3JldHVybiBhPTE1fWlmKGVyKHQpKXJldHVybiByKyssaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSwxMz09PXQmJjEwPT09ZS5jaGFyQ29kZUF0KHIpJiYocisrLGkrPSJcbiIpLHMrKyxsPXIsYT0xNDtzd2l0Y2godCl7Y2FzZSAxMjM6cmV0dXJuIHIrKyxhPTE7Y2FzZSAxMjU6cmV0dXJuIHIrKyxhPTI7Y2FzZSA5MTpyZXR1cm4gcisrLGE9MztjYXNlIDkzOnJldHVybiByKyssYT00O2Nhc2UgNTg6cmV0dXJuIHIrKyxhPTY7Y2FzZSA0NDpyZXR1cm4gcisrLGE9NTtjYXNlIDM0OnJldHVybiByKyssaT1mdW5jdGlvbigpe2Zvcih2YXIgdD0iIixpPXI7Oyl7aWYocj49bil7dCs9ZS5zdWJzdHJpbmcoaSxyKSxoPTI7YnJlYWt9dmFyIG89ZS5jaGFyQ29kZUF0KHIpO2lmKDM0PT09byl7dCs9ZS5zdWJzdHJpbmcoaSxyKSxyKys7YnJlYWt9aWYoOTIhPT1vKXtpZihvPj0wJiZvPD0zMSl7aWYoZXIobykpe3QrPWUuc3Vic3RyaW5nKGksciksaD0yO2JyZWFrfWg9Nn1yKyt9ZWxzZXtpZih0Kz1lLnN1YnN0cmluZyhpLHIpLCsrcj49bil7aD0yO2JyZWFrfXN3aXRjaChlLmNoYXJDb2RlQXQocisrKSl7Y2FzZSAzNDp0Kz0nIic7YnJlYWs7Y2FzZSA5Mjp0Kz0iXFwiO2JyZWFrO2Nhc2UgNDc6dCs9Ii8iO2JyZWFrO2Nhc2UgOTg6dCs9IlxiIjticmVhaztjYXNlIDEwMjp0Kz0iXGYiO2JyZWFrO2Nhc2UgMTEwOnQrPSJcbiI7YnJlYWs7Y2FzZSAxMTQ6dCs9IlxyIjticmVhaztjYXNlIDExNjp0Kz0iXHQiO2JyZWFrO2Nhc2UgMTE3OnZhciBhPWYoNCwhMCk7YT49MD90Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpOmg9NDticmVhaztkZWZhdWx0Omg9NX1pPXJ9fXJldHVybiB0fSgpLGE9MTA7Y2FzZSA0Nzp2YXIgZD1yLTE7aWYoNDc9PT1lLmNoYXJDb2RlQXQocisxKSl7Zm9yKHIrPTI7cjxuJiYhZXIoZS5jaGFyQ29kZUF0KHIpKTspcisrO3JldHVybiBpPWUuc3Vic3RyaW5nKGQsciksYT0xMn1pZig0Mj09PWUuY2hhckNvZGVBdChyKzEpKXtyKz0yO2Zvcih2YXIgZz1uLTEscD0hMTtyPGc7KXt2YXIgYj1lLmNoYXJDb2RlQXQocik7aWYoNDI9PT1iJiY0Nz09PWUuY2hhckNvZGVBdChyKzEpKXtyKz0yLHA9ITA7YnJlYWt9cisrLGVyKGIpJiYoMTM9PT1iJiYxMD09PWUuY2hhckNvZGVBdChyKSYmcisrLHMrKyxsPXIpfXJldHVybiBwfHwocisrLGg9MSksaT1lLnN1YnN0cmluZyhkLHIpLGE9MTN9cmV0dXJuIGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCkscisrLGE9MTY7Y2FzZSA0NTppZihpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLCsrcj09PW58fCF0cihlLmNoYXJDb2RlQXQocikpKXJldHVybiBhPTE2O2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6cmV0dXJuIGkrPWZ1bmN0aW9uKCl7dmFyIHQ9cjtpZig0OD09PWUuY2hhckNvZGVBdChyKSlyKys7ZWxzZSBmb3IocisrO3I8ZS5sZW5ndGgmJnRyKGUuY2hhckNvZGVBdChyKSk7KXIrKztpZihyPGUubGVuZ3RoJiY0Nj09PWUuY2hhckNvZGVBdChyKSl7aWYoISgrK3I8ZS5sZW5ndGgmJnRyKGUuY2hhckNvZGVBdChyKSkpKXJldHVybiBoPTMsZS5zdWJzdHJpbmcodCxyKTtmb3IocisrO3I8ZS5sZW5ndGgmJnRyKGUuY2hhckNvZGVBdChyKSk7KXIrK312YXIgbj1yO2lmKHI8ZS5sZW5ndGgmJig2OT09PWUuY2hhckNvZGVBdChyKXx8MTAxPT09ZS5jaGFyQ29kZUF0KHIpKSlpZigoKytyPGUubGVuZ3RoJiY0Mz09PWUuY2hhckNvZGVBdChyKXx8NDU9PT1lLmNoYXJDb2RlQXQocikpJiZyKysscjxlLmxlbmd0aCYmdHIoZS5jaGFyQ29kZUF0KHIpKSl7Zm9yKHIrKztyPGUubGVuZ3RoJiZ0cihlLmNoYXJDb2RlQXQocikpOylyKys7bj1yfWVsc2UgaD0zO3JldHVybiBlLnN1YnN0cmluZyh0LG4pfSgpLGE9MTE7ZGVmYXVsdDpmb3IoO3I8biYmbSh0KTspcisrLHQ9ZS5jaGFyQ29kZUF0KHIpO2lmKG8hPT1yKXtzd2l0Y2goaT1lLnN1YnN0cmluZyhvLHIpKXtjYXNlInRydWUiOnJldHVybiBhPTg7Y2FzZSJmYWxzZSI6cmV0dXJuIGE9OTtjYXNlIm51bGwiOnJldHVybiBhPTd9cmV0dXJuIGE9MTZ9cmV0dXJuIGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCkscisrLGE9MTZ9fWZ1bmN0aW9uIG0oZSl7aWYoUW4oZSl8fGVyKGUpKXJldHVybiExO3N3aXRjaChlKXtjYXNlIDEyNTpjYXNlIDkzOmNhc2UgMTIzOmNhc2UgOTE6Y2FzZSAzNDpjYXNlIDU4OmNhc2UgNDQ6Y2FzZSA0NzpyZXR1cm4hMX1yZXR1cm4hMH1yZXR1cm57c2V0UG9zaXRpb246ZnVuY3Rpb24oZSl7cj1lLGk9IiIsbz0wLGE9MTYsaD0wfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiByfSxzY2FuOnQ/ZnVuY3Rpb24oKXt2YXIgZTtkb3tlPWQoKX13aGlsZShlPj0xMiYmZTw9MTUpO3JldHVybiBlfTpkLGdldFRva2VuOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGdldFRva2VuVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZ2V0VG9rZW5PZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb30sZ2V0VG9rZW5MZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gci1vfSxnZXRUb2tlblN0YXJ0TGluZTpmdW5jdGlvbigpe3JldHVybiBjfSxnZXRUb2tlblN0YXJ0Q2hhcmFjdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG8tdX0sZ2V0VG9rZW5FcnJvcjpmdW5jdGlvbigpe3JldHVybiBofX19ZnVuY3Rpb24gUW4oZSl7cmV0dXJuIDMyPT09ZXx8OT09PWV8fDExPT09ZXx8MTI9PT1lfHwxNjA9PT1lfHw1NzYwPT09ZXx8ZT49ODE5MiYmZTw9ODIwM3x8ODIzOT09PWV8fDgyODc9PT1lfHwxMjI4OD09PWV8fDY1Mjc5PT09ZX1mdW5jdGlvbiBlcihlKXtyZXR1cm4gMTA9PT1lfHwxMz09PWV8fDgyMzI9PT1lfHw4MjMzPT09ZX1mdW5jdGlvbiB0cihlKXtyZXR1cm4gZT49NDgmJmU8PTU3fWZ1bmN0aW9uIG5yKGUsdCxuKXt2YXIgcixpLG8sYSxzO2lmKHQpe2ZvcihhPXQub2Zmc2V0LHM9YSt0Lmxlbmd0aCxvPWE7bz4wJiYhaXIoZSxvLTEpOylvLS07Zm9yKHZhciBjPXM7YzxlLmxlbmd0aCYmIWlyKGUsYyk7KWMrKztpPWUuc3Vic3RyaW5nKG8sYykscj1mdW5jdGlvbihlLHQpe3ZhciBuPTAscj0wLGk9dC50YWJTaXplfHw0O2Zvcig7bjxlLmxlbmd0aDspe3ZhciBvPWUuY2hhckF0KG4pO2lmKCIgIj09PW8pcisrO2Vsc2V7aWYoIlx0IiE9PW8pYnJlYWs7cis9aX1uKyt9cmV0dXJuIE1hdGguZmxvb3Ioci9pKX0oaSxuKX1lbHNlIGk9ZSxyPTAsbz0wLGE9MCxzPWUubGVuZ3RoO3ZhciBsLHU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dC5jaGFyQXQobik7aWYoIlxyIj09PXIpcmV0dXJuIG4rMTx0Lmxlbmd0aCYmIlxuIj09PXQuY2hhckF0KG4rMSk/IlxyXG4iOiJcciI7aWYoIlxuIj09PXIpcmV0dXJuIlxuIn1yZXR1cm4gZSYmZS5lb2x8fCJcbiJ9KG4sZSksaD0hMSxmPTA7bD1uLmluc2VydFNwYWNlcz9ycigiICIsbi50YWJTaXplfHw0KToiXHQiO3ZhciBkPVluKGksITEpLG09ITE7ZnVuY3Rpb24gZygpe3JldHVybiB1K3JyKGwscitmKX1mdW5jdGlvbiBwKCl7dmFyIGU9ZC5zY2FuKCk7Zm9yKGg9ITE7MTU9PT1lfHwxND09PWU7KWg9aHx8MTQ9PT1lLGU9ZC5zY2FuKCk7cmV0dXJuIG09MTY9PT1lfHwwIT09ZC5nZXRUb2tlbkVycm9yKCksZX12YXIgYj1bXTtmdW5jdGlvbiB2KG4scixpKXttfHx0JiYhKHI8cyYmaT5hKXx8ZS5zdWJzdHJpbmcocixpKT09PW58fGIucHVzaCh7b2Zmc2V0OnIsbGVuZ3RoOmktcixjb250ZW50Om59KX12YXIgeT1wKCk7aWYoMTchPT15KXt2YXIgQz1kLmdldFRva2VuT2Zmc2V0KCkrbzt2KHJyKGwsciksbyxDKX1mb3IoOzE3IT09eTspe2Zvcih2YXIgdz1kLmdldFRva2VuT2Zmc2V0KCkrZC5nZXRUb2tlbkxlbmd0aCgpK28sXz1wKCksUz0iIixBPSExOyFoJiYoMTI9PT1ffHwxMz09PV8pOyl7digiICIsdyxkLmdldFRva2VuT2Zmc2V0KCkrbyksdz1kLmdldFRva2VuT2Zmc2V0KCkrZC5nZXRUb2tlbkxlbmd0aCgpK28sUz0oQT0xMj09PV8pP2coKToiIixfPXAoKX1pZigyPT09XykxIT09eSYmKGYtLSxTPWcoKSk7ZWxzZSBpZig0PT09XykzIT09eSYmKGYtLSxTPWcoKSk7ZWxzZXtzd2l0Y2goeSl7Y2FzZSAzOmNhc2UgMTpmKyssUz1nKCk7YnJlYWs7Y2FzZSA1OmNhc2UgMTI6Uz1nKCk7YnJlYWs7Y2FzZSAxMzpoP1M9ZygpOkF8fChTPSIgIik7YnJlYWs7Y2FzZSA2OkF8fChTPSIgIik7YnJlYWs7Y2FzZSAxMDppZig2PT09Xyl7QXx8KFM9IiIpO2JyZWFrfWNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTE6Y2FzZSAyOmNhc2UgNDoxMj09PV98fDEzPT09Xz9BfHwoUz0iICIpOjUhPT1fJiYxNyE9PV8mJihtPSEwKTticmVhaztjYXNlIDE2Om09ITB9IWh8fDEyIT09XyYmMTMhPT1ffHwoUz1nKCkpfTE3PT09XyYmKFM9bi5pbnNlcnRGaW5hbE5ld2xpbmU/dToiIiksdihTLHcsZC5nZXRUb2tlbk9mZnNldCgpK28pLHk9X31yZXR1cm4gYn1mdW5jdGlvbiBycihlLHQpe2Zvcih2YXIgbj0iIixyPTA7cjx0O3IrKyluKz1lO3JldHVybiBufWZ1bmN0aW9uIGlyKGUsdCl7cmV0dXJuLTEhPT0iXHJcbiIuaW5kZXhPZihlLmNoYXJBdCh0KSl9dmFyIG9yO3NlbGYub25tZXNzYWdlPWU9PntYbnx8Wm4obnVsbCl9LChvcnx8KG9yPXt9KSkuREVGQVVMVD17YWxsb3dUcmFpbGluZ0NvbW1hOiExfTt2YXIgYXIsc3IsY3IsbHIsdXIsaHIsZnIsZHIsbXIsZ3IscHIsYnIsdnIseXIsQ3Isd3IsX3IsU3IsQXIsRXIseHIsTnIsa3IsTHIsVHIsT3IsSXIsTXIsUHIsUnIsVnIsRnIsRHIsS3IsanIsVXIsQnIscXIsJHIsV3IsSHIsenIsR3IsSnIsWHIsWnIsWXIsUXIsZWksdGk9WW4sbmk9ZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1uJiYobj1vci5ERUZBVUxUKTt2YXIgcj1udWxsLGk9W10sbz1bXTtmdW5jdGlvbiBhKGUpe0FycmF5LmlzQXJyYXkoaSk/aS5wdXNoKGUpOm51bGwhPT1yJiYoaVtyXT1lKX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PW4mJihuPW9yLkRFRkFVTFQpO3ZhciByPVluKGUsITEpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGU/ZnVuY3Rpb24oKXtyZXR1cm4gZShyLmdldFRva2VuT2Zmc2V0KCksci5nZXRUb2tlbkxlbmd0aCgpLHIuZ2V0VG9rZW5TdGFydExpbmUoKSxyLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGU/ZnVuY3Rpb24odCl7cmV0dXJuIGUodCxyLmdldFRva2VuT2Zmc2V0KCksci5nZXRUb2tlbkxlbmd0aCgpLHIuZ2V0VG9rZW5TdGFydExpbmUoKSxyLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9fXZhciBhPWkodC5vbk9iamVjdEJlZ2luKSxzPW8odC5vbk9iamVjdFByb3BlcnR5KSxjPWkodC5vbk9iamVjdEVuZCksbD1pKHQub25BcnJheUJlZ2luKSx1PWkodC5vbkFycmF5RW5kKSxoPW8odC5vbkxpdGVyYWxWYWx1ZSksZj1vKHQub25TZXBhcmF0b3IpLGQ9aSh0Lm9uQ29tbWVudCksbT1vKHQub25FcnJvciksZz1uJiZuLmRpc2FsbG93Q29tbWVudHMscD1uJiZuLmFsbG93VHJhaWxpbmdDb21tYTtmdW5jdGlvbiBiKCl7Zm9yKDs7KXt2YXIgZT1yLnNjYW4oKTtzd2l0Y2goci5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDp2KDE0KTticmVhaztjYXNlIDU6digxNSk7YnJlYWs7Y2FzZSAzOnYoMTMpO2JyZWFrO2Nhc2UgMTpnfHx2KDExKTticmVhaztjYXNlIDI6digxMik7YnJlYWs7Y2FzZSA2OnYoMTYpfXN3aXRjaChlKXtjYXNlIDEyOmNhc2UgMTM6Zz92KDEwKTpkKCk7YnJlYWs7Y2FzZSAxNjp2KDEpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNDpicmVhaztkZWZhdWx0OnJldHVybiBlfX19ZnVuY3Rpb24gdihlLHQsbil7aWYodm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPVtdKSxtKGUpLHQubGVuZ3RoK24ubGVuZ3RoPjApZm9yKHZhciBpPXIuZ2V0VG9rZW4oKTsxNyE9PWk7KXtpZigtMSE9PXQuaW5kZXhPZihpKSl7YigpO2JyZWFrfWlmKC0xIT09bi5pbmRleE9mKGkpKWJyZWFrO2k9YigpfX1mdW5jdGlvbiB5KGUpe3ZhciB0PXIuZ2V0VG9rZW5WYWx1ZSgpO3JldHVybiBlP2godCk6cyh0KSxiKCksITB9ZnVuY3Rpb24gQygpe3N3aXRjaChyLmdldFRva2VuKCkpe2Nhc2UgMTE6dmFyIGU9ci5nZXRUb2tlblZhbHVlKCksdD1OdW1iZXIoZSk7aXNOYU4odCkmJih2KDIpLHQ9MCksaCh0KTticmVhaztjYXNlIDc6aChudWxsKTticmVhaztjYXNlIDg6aCghMCk7YnJlYWs7Y2FzZSA5OmgoITEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuITF9cmV0dXJuIGIoKSwhMH1mdW5jdGlvbiB3KCl7cmV0dXJuIDEwIT09ci5nZXRUb2tlbigpPyh2KDMsW10sWzIsNV0pLCExKTooeSghMSksNj09PXIuZ2V0VG9rZW4oKT8oZigiOiIpLGIoKSxBKCl8fHYoNCxbXSxbMiw1XSkpOnYoNSxbXSxbMiw1XSksITApfWZ1bmN0aW9uIF8oKXthKCksYigpO2Zvcih2YXIgZT0hMTsyIT09ci5nZXRUb2tlbigpJiYxNyE9PXIuZ2V0VG9rZW4oKTspe2lmKDU9PT1yLmdldFRva2VuKCkpe2lmKGV8fHYoNCxbXSxbXSksZigiLCIpLGIoKSwyPT09ci5nZXRUb2tlbigpJiZwKWJyZWFrfWVsc2UgZSYmdig2LFtdLFtdKTt3KCl8fHYoNCxbXSxbMiw1XSksZT0hMH1yZXR1cm4gYygpLDIhPT1yLmdldFRva2VuKCk/dig3LFsyXSxbXSk6YigpLCEwfWZ1bmN0aW9uIFMoKXtsKCksYigpO2Zvcih2YXIgZT0hMTs0IT09ci5nZXRUb2tlbigpJiYxNyE9PXIuZ2V0VG9rZW4oKTspe2lmKDU9PT1yLmdldFRva2VuKCkpe2lmKGV8fHYoNCxbXSxbXSksZigiLCIpLGIoKSw0PT09ci5nZXRUb2tlbigpJiZwKWJyZWFrfWVsc2UgZSYmdig2LFtdLFtdKTtBKCl8fHYoNCxbXSxbNCw1XSksZT0hMH1yZXR1cm4gdSgpLDQhPT1yLmdldFRva2VuKCk/dig4LFs0XSxbXSk6YigpLCEwfWZ1bmN0aW9uIEEoKXtzd2l0Y2goci5nZXRUb2tlbigpKXtjYXNlIDM6cmV0dXJuIFMoKTtjYXNlIDE6cmV0dXJuIF8oKTtjYXNlIDEwOnJldHVybiB5KCEwKTtkZWZhdWx0OnJldHVybiBDKCl9fWlmKGIoKSwxNz09PXIuZ2V0VG9rZW4oKSlyZXR1cm4hIW4uYWxsb3dFbXB0eUNvbnRlbnR8fCh2KDQsW10sW10pLCExKTtpZighQSgpKXJldHVybiB2KDQsW10sW10pLCExOzE3IT09ci5nZXRUb2tlbigpJiZ2KDksW10sW10pfShlLHtvbk9iamVjdEJlZ2luOmZ1bmN0aW9uKCl7dmFyIGU9e307YShlKSxvLnB1c2goaSksaT1lLHI9bnVsbH0sb25PYmplY3RQcm9wZXJ0eTpmdW5jdGlvbihlKXtyPWV9LG9uT2JqZWN0RW5kOmZ1bmN0aW9uKCl7aT1vLnBvcCgpfSxvbkFycmF5QmVnaW46ZnVuY3Rpb24oKXt2YXIgZT1bXTthKGUpLG8ucHVzaChpKSxpPWUscj1udWxsfSxvbkFycmF5RW5kOmZ1bmN0aW9uKCl7aT1vLnBvcCgpfSxvbkxpdGVyYWxWYWx1ZTphLG9uRXJyb3I6ZnVuY3Rpb24oZSxuLHIpe3QucHVzaCh7ZXJyb3I6ZSxvZmZzZXQ6bixsZW5ndGg6cn0pfX0sbiksaVswXX0scmk9ZnVuY3Rpb24gZSh0LG4scil7aWYodm9pZCAwPT09ciYmKHI9ITEpLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49ITEpLHQ+PWUub2Zmc2V0JiZ0PGUub2Zmc2V0K2UubGVuZ3RofHxuJiZ0PT09ZS5vZmZzZXQrZS5sZW5ndGh9KHQsbixyKSl7dmFyIGk9dC5jaGlsZHJlbjtpZihBcnJheS5pc0FycmF5KGkpKWZvcih2YXIgbz0wO288aS5sZW5ndGgmJmlbb10ub2Zmc2V0PD1uO28rKyl7dmFyIGE9ZShpW29dLG4scik7aWYoYSlyZXR1cm4gYX1yZXR1cm4gdH19LGlpPWZ1bmN0aW9uIGUodCl7aWYoIXQucGFyZW50fHwhdC5wYXJlbnQuY2hpbGRyZW4pcmV0dXJuW107dmFyIG49ZSh0LnBhcmVudCk7aWYoInByb3BlcnR5Ij09PXQucGFyZW50LnR5cGUpe3ZhciByPXQucGFyZW50LmNoaWxkcmVuWzBdLnZhbHVlO24ucHVzaChyKX1lbHNlIGlmKCJhcnJheSI9PT10LnBhcmVudC50eXBlKXt2YXIgaT10LnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHQpOy0xIT09aSYmbi5wdXNoKGkpfXJldHVybiBufSxvaT1mdW5jdGlvbiBlKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiB0LmNoaWxkcmVuLm1hcChlKTtjYXNlIm9iamVjdCI6Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj0wLGk9dC5jaGlsZHJlbjtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXSxhPW8uY2hpbGRyZW5bMV07YSYmKG5bby5jaGlsZHJlblswXS52YWx1ZV09ZShhKSl9cmV0dXJuIG47Y2FzZSJudWxsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIHQudmFsdWU7ZGVmYXVsdDpyZXR1cm59fTtmdW5jdGlvbiBhaShlLHQpe2lmKGU9PT10KXJldHVybiEwO2lmKG51bGw9PWV8fG51bGw9PXQpcmV0dXJuITE7aWYodHlwZW9mIGUhPXR5cGVvZiB0KXJldHVybiExO2lmKCJvYmplY3QiIT10eXBlb2YgZSlyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KGUpIT09QXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgbixyO2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZighYWkoZVtuXSx0W25dKSlyZXR1cm4hMX1lbHNle3ZhciBpPVtdO2ZvcihyIGluIGUpaS5wdXNoKHIpO2kuc29ydCgpO3ZhciBvPVtdO2ZvcihyIGluIHQpby5wdXNoKHIpO2lmKG8uc29ydCgpLCFhaShpLG8pKXJldHVybiExO2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspaWYoIWFpKGVbaVtuXV0sdFtpW25dXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gc2koZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfWZ1bmN0aW9uIGNpKGUpe3JldHVybiB2b2lkIDAhPT1lfWZ1bmN0aW9uIGxpKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGV9ZnVuY3Rpb24gdWkoZSx0KXt2YXIgbj1lLmxlbmd0aC10Lmxlbmd0aDtyZXR1cm4gbj4wP2UubGFzdEluZGV4T2YodCk9PT1uOjA9PT1uJiZlPT09dH1mdW5jdGlvbiBoaShlKXt2YXIgdD0iIjsoZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZihlW25dIT09dFtuXSlyZXR1cm4hMTtyZXR1cm4hMH0pKGUsIig/aSkiKSYmKGU9ZS5zdWJzdHJpbmcoNCksdD0iaSIpO3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChlLHQrInUiKX1jYXRjaChuKXt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoZSx0KX1jYXRjaChlKXtyZXR1cm59fX0oc3I9YXJ8fChhcj17fSkpLk1JTl9WQUxVRT0tMjE0NzQ4MzY0OCxzci5NQVhfVkFMVUU9MjE0NzQ4MzY0NywobHI9Y3J8fChjcj17fSkpLk1JTl9WQUxVRT0wLGxyLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3LChocj11cnx8KHVyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT1OdW1iZXIuTUFYX1ZBTFVFJiYoZT1jci5NQVhfVkFMVUUpLHQ9PT1OdW1iZXIuTUFYX1ZBTFVFJiYodD1jci5NQVhfVkFMVUUpLHtsaW5lOmUsY2hhcmFjdGVyOnR9fSxoci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5vYmplY3RMaXRlcmFsKHQpJiZoby51aW50ZWdlcih0LmxpbmUpJiZoby51aW50ZWdlcih0LmNoYXJhY3Rlcil9LChkcj1mcnx8KGZyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGhvLnVpbnRlZ2VyKGUpJiZoby51aW50ZWdlcih0KSYmaG8udWludGVnZXIobikmJmhvLnVpbnRlZ2VyKHIpKXJldHVybntzdGFydDp1ci5jcmVhdGUoZSx0KSxlbmQ6dXIuY3JlYXRlKG4scil9O2lmKHVyLmlzKGUpJiZ1ci5pcyh0KSlyZXR1cm57c3RhcnQ6ZSxlbmQ6dH07dGhyb3cgbmV3IEVycm9yKCJSYW5nZSNjcmVhdGUgY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHNbIitlKyIsICIrdCsiLCAiK24rIiwgIityKyJdIil9LGRyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLm9iamVjdExpdGVyYWwodCkmJnVyLmlzKHQuc3RhcnQpJiZ1ci5pcyh0LmVuZCl9LChncj1tcnx8KG1yPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3VyaTplLHJhbmdlOnR9fSxnci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZmci5pcyh0LnJhbmdlKSYmKGhvLnN0cmluZyh0LnVyaSl8fGhvLnVuZGVmaW5lZCh0LnVyaSkpfSwoYnI9cHJ8fChwcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm57dGFyZ2V0VXJpOmUsdGFyZ2V0UmFuZ2U6dCx0YXJnZXRTZWxlY3Rpb25SYW5nZTpuLG9yaWdpblNlbGVjdGlvblJhbmdlOnJ9fSxici5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZmci5pcyh0LnRhcmdldFJhbmdlKSYmaG8uc3RyaW5nKHQudGFyZ2V0VXJpKSYmKGZyLmlzKHQudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpfHxoby51bmRlZmluZWQodC50YXJnZXRTZWxlY3Rpb25SYW5nZSkpJiYoZnIuaXModC5vcmlnaW5TZWxlY3Rpb25SYW5nZSl8fGhvLnVuZGVmaW5lZCh0Lm9yaWdpblNlbGVjdGlvblJhbmdlKSl9LCh5cj12cnx8KHZyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybntyZWQ6ZSxncmVlbjp0LGJsdWU6bixhbHBoYTpyfX0seXIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8ubnVtYmVyUmFuZ2UodC5yZWQsMCwxKSYmaG8ubnVtYmVyUmFuZ2UodC5ncmVlbiwwLDEpJiZoby5udW1iZXJSYW5nZSh0LmJsdWUsMCwxKSYmaG8ubnVtYmVyUmFuZ2UodC5hbHBoYSwwLDEpfSwod3I9Q3J8fChDcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTplLGNvbG9yOnR9fSx3ci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBmci5pcyh0LnJhbmdlKSYmdnIuaXModC5jb2xvcil9LChTcj1fcnx8KF9yPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57bGFiZWw6ZSx0ZXh0RWRpdDp0LGFkZGl0aW9uYWxUZXh0RWRpdHM6bn19LFNyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLnN0cmluZyh0LmxhYmVsKSYmKGhvLnVuZGVmaW5lZCh0LnRleHRFZGl0KXx8S3IuaXModCkpJiYoaG8udW5kZWZpbmVkKHQuYWRkaXRpb25hbFRleHRFZGl0cyl8fGhvLnR5cGVkQXJyYXkodC5hZGRpdGlvbmFsVGV4dEVkaXRzLEtyLmlzKSl9LChFcj1Bcnx8KEFyPXt9KSkuQ29tbWVudD0iY29tbWVudCIsRXIuSW1wb3J0cz0iaW1wb3J0cyIsRXIuUmVnaW9uPSJyZWdpb24iLChOcj14cnx8KHhyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89e3N0YXJ0TGluZTplLGVuZExpbmU6dH07cmV0dXJuIGhvLmRlZmluZWQobikmJihvLnN0YXJ0Q2hhcmFjdGVyPW4pLGhvLmRlZmluZWQocikmJihvLmVuZENoYXJhY3Rlcj1yKSxoby5kZWZpbmVkKGkpJiYoby5raW5kPWkpLG99LE5yLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLnVpbnRlZ2VyKHQuc3RhcnRMaW5lKSYmaG8udWludGVnZXIodC5zdGFydExpbmUpJiYoaG8udW5kZWZpbmVkKHQuc3RhcnRDaGFyYWN0ZXIpfHxoby51aW50ZWdlcih0LnN0YXJ0Q2hhcmFjdGVyKSkmJihoby51bmRlZmluZWQodC5lbmRDaGFyYWN0ZXIpfHxoby51aW50ZWdlcih0LmVuZENoYXJhY3RlcikpJiYoaG8udW5kZWZpbmVkKHQua2luZCl8fGhvLnN0cmluZyh0LmtpbmQpKX0sKExyPWtyfHwoa3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57bG9jYXRpb246ZSxtZXNzYWdlOnR9fSxMci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZtci5pcyh0LmxvY2F0aW9uKSYmaG8uc3RyaW5nKHQubWVzc2FnZSl9LChPcj1Ucnx8KFRyPXt9KSkuRXJyb3I9MSxPci5XYXJuaW5nPTIsT3IuSW5mb3JtYXRpb249MyxPci5IaW50PTQsKE1yPUlyfHwoSXI9e30pKS5Vbm5lY2Vzc2FyeT0xLE1yLkRlcHJlY2F0ZWQ9MiwoUHJ8fChQcj17fSkpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIG51bGwhPXQmJmhvLnN0cmluZyh0LmhyZWYpfSwoVnI9UnJ8fChScj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9e3JhbmdlOmUsbWVzc2FnZTp0fTtyZXR1cm4gaG8uZGVmaW5lZChuKSYmKGEuc2V2ZXJpdHk9biksaG8uZGVmaW5lZChyKSYmKGEuY29kZT1yKSxoby5kZWZpbmVkKGkpJiYoYS5zb3VyY2U9aSksaG8uZGVmaW5lZChvKSYmKGEucmVsYXRlZEluZm9ybWF0aW9uPW8pLGF9LFZyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZTtyZXR1cm4gaG8uZGVmaW5lZChuKSYmZnIuaXMobi5yYW5nZSkmJmhvLnN0cmluZyhuLm1lc3NhZ2UpJiYoaG8ubnVtYmVyKG4uc2V2ZXJpdHkpfHxoby51bmRlZmluZWQobi5zZXZlcml0eSkpJiYoaG8uaW50ZWdlcihuLmNvZGUpfHxoby5zdHJpbmcobi5jb2RlKXx8aG8udW5kZWZpbmVkKG4uY29kZSkpJiYoaG8udW5kZWZpbmVkKG4uY29kZURlc2NyaXB0aW9uKXx8aG8uc3RyaW5nKG51bGw9PT0odD1uLmNvZGVEZXNjcmlwdGlvbil8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaHJlZikpJiYoaG8uc3RyaW5nKG4uc291cmNlKXx8aG8udW5kZWZpbmVkKG4uc291cmNlKSkmJihoby51bmRlZmluZWQobi5yZWxhdGVkSW5mb3JtYXRpb24pfHxoby50eXBlZEFycmF5KG4ucmVsYXRlZEluZm9ybWF0aW9uLGtyLmlzKSl9LChEcj1Gcnx8KEZyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bci0yXT1hcmd1bWVudHNbcl07dmFyIGk9e3RpdGxlOmUsY29tbWFuZDp0fTtyZXR1cm4gaG8uZGVmaW5lZChuKSYmbi5sZW5ndGg+MCYmKGkuYXJndW1lbnRzPW4pLGl9LERyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnN0cmluZyh0LnRpdGxlKSYmaG8uc3RyaW5nKHQuY29tbWFuZCl9LChqcj1Lcnx8KEtyPXt9KSkucmVwbGFjZT1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTplLG5ld1RleHQ6dH19LGpyLmluc2VydD1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTp7c3RhcnQ6ZSxlbmQ6ZX0sbmV3VGV4dDp0fX0sanIuZGVsPWZ1bmN0aW9uKGUpe3JldHVybntyYW5nZTplLG5ld1RleHQ6IiJ9fSxqci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5vYmplY3RMaXRlcmFsKHQpJiZoby5zdHJpbmcodC5uZXdUZXh0KSYmZnIuaXModC5yYW5nZSl9LChCcj1Vcnx8KFVyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17bGFiZWw6ZX07cmV0dXJuIHZvaWQgMCE9PXQmJihyLm5lZWRzQ29uZmlybWF0aW9uPXQpLHZvaWQgMCE9PW4mJihyLmRlc2NyaXB0aW9uPW4pLHJ9LEJyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHZvaWQgMCE9PXQmJmhvLm9iamVjdExpdGVyYWwodCkmJmhvLnN0cmluZyh0LmxhYmVsKSYmKGhvLmJvb2xlYW4odC5uZWVkc0NvbmZpcm1hdGlvbil8fHZvaWQgMD09PXQubmVlZHNDb25maXJtYXRpb24pJiYoaG8uc3RyaW5nKHQuZGVzY3JpcHRpb24pfHx2b2lkIDA9PT10LmRlc2NyaXB0aW9uKX0sKHFyfHwocXI9e30pKS5pcz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LChXcj0kcnx8KCRyPXt9KSkucmVwbGFjZT1mdW5jdGlvbihlLHQsbil7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDp0LGFubm90YXRpb25JZDpufX0sV3IuaW5zZXJ0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmUsZW5kOmV9LG5ld1RleHQ6dCxhbm5vdGF0aW9uSWQ6bn19LFdyLmRlbD1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTplLG5ld1RleHQ6IiIsYW5ub3RhdGlvbklkOnR9fSxXci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBLci5pcyh0KSYmKFVyLmlzKHQuYW5ub3RhdGlvbklkKXx8cXIuaXModC5hbm5vdGF0aW9uSWQpKX0sKHpyPUhyfHwoSHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dGV4dERvY3VtZW50OmUsZWRpdHM6dH19LHpyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJnBpLmlzKHQudGV4dERvY3VtZW50KSYmQXJyYXkuaXNBcnJheSh0LmVkaXRzKX0sKEpyPUdyfHwoR3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtraW5kOiJjcmVhdGUiLHVyaTplfTtyZXR1cm4gdm9pZCAwPT09dHx8dm9pZCAwPT09dC5vdmVyd3JpdGUmJnZvaWQgMD09PXQuaWdub3JlSWZFeGlzdHN8fChyLm9wdGlvbnM9dCksdm9pZCAwIT09biYmKHIuYW5ub3RhdGlvbklkPW4pLHJ9LEpyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJiJjcmVhdGUiPT09dC5raW5kJiZoby5zdHJpbmcodC51cmkpJiYodm9pZCAwPT09dC5vcHRpb25zfHwodm9pZCAwPT09dC5vcHRpb25zLm92ZXJ3cml0ZXx8aG8uYm9vbGVhbih0Lm9wdGlvbnMub3ZlcndyaXRlKSkmJih2b2lkIDA9PT10Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHN8fGhvLmJvb2xlYW4odC5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYodm9pZCAwPT09dC5hbm5vdGF0aW9uSWR8fHFyLmlzKHQuYW5ub3RhdGlvbklkKSl9LChacj1Ycnx8KFhyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXtraW5kOiJyZW5hbWUiLG9sZFVyaTplLG5ld1VyaTp0fTtyZXR1cm4gdm9pZCAwPT09bnx8dm9pZCAwPT09bi5vdmVyd3JpdGUmJnZvaWQgMD09PW4uaWdub3JlSWZFeGlzdHN8fChpLm9wdGlvbnM9biksdm9pZCAwIT09ciYmKGkuYW5ub3RhdGlvbklkPXIpLGl9LFpyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJiJyZW5hbWUiPT09dC5raW5kJiZoby5zdHJpbmcodC5vbGRVcmkpJiZoby5zdHJpbmcodC5uZXdVcmkpJiYodm9pZCAwPT09dC5vcHRpb25zfHwodm9pZCAwPT09dC5vcHRpb25zLm92ZXJ3cml0ZXx8aG8uYm9vbGVhbih0Lm9wdGlvbnMub3ZlcndyaXRlKSkmJih2b2lkIDA9PT10Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHN8fGhvLmJvb2xlYW4odC5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYodm9pZCAwPT09dC5hbm5vdGF0aW9uSWR8fHFyLmlzKHQuYW5ub3RhdGlvbklkKSl9LChRcj1Zcnx8KFlyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17a2luZDoiZGVsZXRlIix1cmk6ZX07cmV0dXJuIHZvaWQgMD09PXR8fHZvaWQgMD09PXQucmVjdXJzaXZlJiZ2b2lkIDA9PT10Lmlnbm9yZUlmTm90RXhpc3RzfHwoci5vcHRpb25zPXQpLHZvaWQgMCE9PW4mJihyLmFubm90YXRpb25JZD1uKSxyfSxRci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYiZGVsZXRlIj09PXQua2luZCYmaG8uc3RyaW5nKHQudXJpKSYmKHZvaWQgMD09PXQub3B0aW9uc3x8KHZvaWQgMD09PXQub3B0aW9ucy5yZWN1cnNpdmV8fGhvLmJvb2xlYW4odC5vcHRpb25zLnJlY3Vyc2l2ZSkpJiYodm9pZCAwPT09dC5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzfHxoby5ib29sZWFuKHQub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cykpKSYmKHZvaWQgMD09PXQuYW5ub3RhdGlvbklkfHxxci5pcyh0LmFubm90YXRpb25JZCkpfSwoZWl8fChlaT17fSkpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJih2b2lkIDAhPT10LmNoYW5nZXN8fHZvaWQgMCE9PXQuZG9jdW1lbnRDaGFuZ2VzKSYmKHZvaWQgMD09PXQuZG9jdW1lbnRDaGFuZ2VzfHx0LmRvY3VtZW50Q2hhbmdlcy5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGhvLnN0cmluZyhlLmtpbmQpP0dyLmlzKGUpfHxYci5pcyhlKXx8WXIuaXMoZSk6SHIuaXMoZSl9KSkpfTt2YXIgZmksZGksbWksZ2kscGksYmksdmkseWksQ2ksd2ksX2ksU2ksQWksRWkseGksTmksa2ksTGksVGksT2ksSWksTWksUGksUmksVmksRmksRGksS2ksamksVWksQmkscWksJGksV2ksSGksemksR2ksSmksWGksWmksWWksUWksZW8sdG8sbm8scm8saW8sb28sYW8sc28sY28sbG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5lZGl0cz1lLHRoaXMuY2hhbmdlQW5ub3RhdGlvbnM9dH1yZXR1cm4gZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKHZvaWQgMD09PW4/cj1Lci5pbnNlcnQoZSx0KTpxci5pcyhuKT8oaT1uLHI9JHIuaW5zZXJ0KGUsdCxuKSk6KHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucyksaT10aGlzLmNoYW5nZUFubm90YXRpb25zLm1hbmFnZShuKSxyPSRyLmluc2VydChlLHQsaSkpLHRoaXMuZWRpdHMucHVzaChyKSx2b2lkIDAhPT1pKXJldHVybiBpfSxlLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKHZvaWQgMD09PW4/cj1Lci5yZXBsYWNlKGUsdCk6cXIuaXMobik/KGk9bixyPSRyLnJlcGxhY2UoZSx0LG4pKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxpPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKG4pLHI9JHIucmVwbGFjZShlLHQsaSkpLHRoaXMuZWRpdHMucHVzaChyKSx2b2lkIDAhPT1pKXJldHVybiBpfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyO2lmKHZvaWQgMD09PXQ/bj1Lci5kZWwoZSk6cXIuaXModCk/KHI9dCxuPSRyLmRlbChlLHQpKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxyPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHQpLG49JHIuZGVsKGUscikpLHRoaXMuZWRpdHMucHVzaChuKSx2b2lkIDAhPT1yKXJldHVybiByfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5lZGl0cy5wdXNoKGUpfSxlLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0c30sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmVkaXRzLnNwbGljZSgwLHRoaXMuZWRpdHMubGVuZ3RoKX0sZS5wcm90b3R5cGUuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoIlRleHQgZWRpdCBjaGFuZ2UgaXMgbm90IGNvbmZpZ3VyZWQgdG8gbWFuYWdlIGNoYW5nZSBhbm5vdGF0aW9ucy4iKX0sZX0oKSx1bz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5fYW5ub3RhdGlvbnM9dm9pZCAwPT09ZT9PYmplY3QuY3JlYXRlKG51bGwpOmUsdGhpcy5fY291bnRlcj0wLHRoaXMuX3NpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25zfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5tYW5hZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZihxci5pcyhlKT9uPWU6KG49dGhpcy5uZXh0SWQoKSx0PWUpLHZvaWQgMCE9PXRoaXMuX2Fubm90YXRpb25zW25dKXRocm93IG5ldyBFcnJvcigiSWQgIituKyIgaXMgYWxyZWFkeSBpbiB1c2UuIik7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIk5vIGFubm90YXRpb24gcHJvdmlkZWQgZm9yIGlkICIrbik7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25zW25dPXQsdGhpcy5fc2l6ZSsrLG59LGUucHJvdG90eXBlLm5leHRJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb3VudGVyKyssdGhpcy5fY291bnRlci50b1N0cmluZygpfSxlfSgpOyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9dGhpczt0aGlzLl90ZXh0RWRpdENoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx2b2lkIDAhPT1lPyh0aGlzLl93b3Jrc3BhY2VFZGl0PWUsZS5kb2N1bWVudENoYW5nZXM/KHRoaXMuX2NoYW5nZUFubm90YXRpb25zPW5ldyB1byhlLmNoYW5nZUFubm90YXRpb25zKSxlLmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpLGUuZG9jdW1lbnRDaGFuZ2VzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKEhyLmlzKGUpKXt2YXIgbj1uZXcgbG8oZS5lZGl0cyx0Ll9jaGFuZ2VBbm5vdGF0aW9ucyk7dC5fdGV4dEVkaXRDaGFuZ2VzW2UudGV4dERvY3VtZW50LnVyaV09bn19KSkpOmUuY2hhbmdlcyYmT2JqZWN0LmtleXMoZS5jaGFuZ2VzKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1uZXcgbG8oZS5jaGFuZ2VzW25dKTt0Ll90ZXh0RWRpdENoYW5nZXNbbl09cn0pKSk6dGhpcy5fd29ya3NwYWNlRWRpdD17fX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImVkaXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwIT09dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMmJigwPT09dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuc2l6ZT90aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXZvaWQgMDp0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpKSx0aGlzLl93b3Jrc3BhY2VFZGl0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldFRleHRFZGl0Q2hhbmdlPWZ1bmN0aW9uKGUpe2lmKHBpLmlzKGUpKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciB0PXt1cmk6ZS51cmksdmVyc2lvbjplLnZlcnNpb259O2lmKCEocj10aGlzLl90ZXh0RWRpdENoYW5nZXNbdC51cmldKSl7dmFyIG49e3RleHREb2N1bWVudDp0LGVkaXRzOmk9W119O3RoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2gobikscj1uZXcgbG8oaSx0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyksdGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3QudXJpXT1yfXJldHVybiByfWlmKHRoaXMuaW5pdENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3Igbm9ybWFsIHRleHQgZWRpdCBjaGFuZ2VzLiIpO3ZhciByO2lmKCEocj10aGlzLl90ZXh0RWRpdENoYW5nZXNbZV0pKXt2YXIgaT1bXTt0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXNbZV09aSxyPW5ldyBsbyhpKSx0aGlzLl90ZXh0RWRpdENoYW5nZXNbZV09cn1yZXR1cm4gcn0sZS5wcm90b3R5cGUuaW5pdERvY3VtZW50Q2hhbmdlcz1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzJiZ2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMmJih0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucz1uZXcgdW8sdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9W10sdGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSl9LGUucHJvdG90eXBlLmluaXRDaGFuZ2VzPWZ1bmN0aW9uKCl7dm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMmJnZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyYmKHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcz1PYmplY3QuY3JlYXRlKG51bGwpKX0sZS5wcm90b3R5cGUuY3JlYXRlRmlsZT1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgcixpLG87aWYoVXIuaXModCl8fHFyLmlzKHQpP3I9dDpuPXQsdm9pZCAwPT09cj9pPUdyLmNyZWF0ZShlLG4pOihvPXFyLmlzKHIpP3I6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHIpLGk9R3IuY3JlYXRlKGUsbixvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChpKSx2b2lkIDAhPT1vKXJldHVybiBvfSxlLnByb3RvdHlwZS5yZW5hbWVGaWxlPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIGksbyxhO2lmKFVyLmlzKG4pfHxxci5pcyhuKT9pPW46cj1uLHZvaWQgMD09PWk/bz1Yci5jcmVhdGUoZSx0LHIpOihhPXFyLmlzKGkpP2k6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGkpLG89WHIuY3JlYXRlKGUsdCxyLGEpKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKG8pLHZvaWQgMCE9PWEpcmV0dXJuIGF9LGUucHJvdG90eXBlLmRlbGV0ZUZpbGU9ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHIsaSxvO2lmKFVyLmlzKHQpfHxxci5pcyh0KT9yPXQ6bj10LHZvaWQgMD09PXI/aT1Zci5jcmVhdGUoZSxuKToobz1xci5pcyhyKT9yOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShyKSxpPVlyLmNyZWF0ZShlLG4sbykpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2goaSksdm9pZCAwIT09bylyZXR1cm4gb319KCksKGRpPWZpfHwoZmk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJue3VyaTplfX0sZGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmaG8uc3RyaW5nKHQudXJpKX0sKGdpPW1pfHwobWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dXJpOmUsdmVyc2lvbjp0fX0sZ2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmaG8uc3RyaW5nKHQudXJpKSYmaG8uaW50ZWdlcih0LnZlcnNpb24pfSwoYmk9cGl8fChwaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSx2ZXJzaW9uOnR9fSxiaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZoby5zdHJpbmcodC51cmkpJiYobnVsbD09PXQudmVyc2lvbnx8aG8uaW50ZWdlcih0LnZlcnNpb24pKX0sKHlpPXZpfHwodmk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJue3VyaTplLGxhbmd1YWdlSWQ6dCx2ZXJzaW9uOm4sdGV4dDpyfX0seWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmaG8uc3RyaW5nKHQudXJpKSYmaG8uc3RyaW5nKHQubGFuZ3VhZ2VJZCkmJmhvLmludGVnZXIodC52ZXJzaW9uKSYmaG8uc3RyaW5nKHQudGV4dCl9LCh3aT1DaXx8KENpPXt9KSkuUGxhaW5UZXh0PSJwbGFpbnRleHQiLHdpLk1hcmtkb3duPSJtYXJrZG93biIsZnVuY3Rpb24oZSl7ZS5pcz1mdW5jdGlvbih0KXt2YXIgbj10O3JldHVybiBuPT09ZS5QbGFpblRleHR8fG49PT1lLk1hcmtkb3dufX0oQ2l8fChDaT17fSkpLChfaXx8KF9pPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8ub2JqZWN0TGl0ZXJhbChlKSYmQ2kuaXModC5raW5kKSYmaG8uc3RyaW5nKHQudmFsdWUpfSwoQWk9U2l8fChTaT17fSkpLlRleHQ9MSxBaS5NZXRob2Q9MixBaS5GdW5jdGlvbj0zLEFpLkNvbnN0cnVjdG9yPTQsQWkuRmllbGQ9NSxBaS5WYXJpYWJsZT02LEFpLkNsYXNzPTcsQWkuSW50ZXJmYWNlPTgsQWkuTW9kdWxlPTksQWkuUHJvcGVydHk9MTAsQWkuVW5pdD0xMSxBaS5WYWx1ZT0xMixBaS5FbnVtPTEzLEFpLktleXdvcmQ9MTQsQWkuU25pcHBldD0xNSxBaS5Db2xvcj0xNixBaS5GaWxlPTE3LEFpLlJlZmVyZW5jZT0xOCxBaS5Gb2xkZXI9MTksQWkuRW51bU1lbWJlcj0yMCxBaS5Db25zdGFudD0yMSxBaS5TdHJ1Y3Q9MjIsQWkuRXZlbnQ9MjMsQWkuT3BlcmF0b3I9MjQsQWkuVHlwZVBhcmFtZXRlcj0yNSwoeGk9RWl8fChFaT17fSkpLlBsYWluVGV4dD0xLHhpLlNuaXBwZXQ9MiwoTml8fChOaT17fSkpLkRlcHJlY2F0ZWQ9MSwoTGk9a2l8fChraT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJue25ld1RleHQ6ZSxpbnNlcnQ6dCxyZXBsYWNlOm59fSxMaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiZoby5zdHJpbmcodC5uZXdUZXh0KSYmZnIuaXModC5pbnNlcnQpJiZmci5pcyh0LnJlcGxhY2UpfSwoT2k9VGl8fChUaT17fSkpLmFzSXM9MSxPaS5hZGp1c3RJbmRlbnRhdGlvbj0yLChJaXx8KElpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybntsYWJlbDplfX0sKE1pfHwoTWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57aXRlbXM6ZXx8W10saXNJbmNvbXBsZXRlOiEhdH19LChSaT1QaXx8KFBpPXt9KSkuZnJvbVBsYWluVGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9LFJpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLnN0cmluZyh0KXx8aG8ub2JqZWN0TGl0ZXJhbCh0KSYmaG8uc3RyaW5nKHQubGFuZ3VhZ2UpJiZoby5zdHJpbmcodC52YWx1ZSl9LChWaXx8KFZpPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4hIXQmJmhvLm9iamVjdExpdGVyYWwodCkmJihfaS5pcyh0LmNvbnRlbnRzKXx8UGkuaXModC5jb250ZW50cyl8fGhvLnR5cGVkQXJyYXkodC5jb250ZW50cyxQaS5pcykpJiYodm9pZCAwPT09ZS5yYW5nZXx8ZnIuaXMoZS5yYW5nZSkpfSwoRml8fChGaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0P3tsYWJlbDplLGRvY3VtZW50YXRpb246dH06e2xhYmVsOmV9fSwoRGl8fChEaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxyPTI7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyluW3ItMl09YXJndW1lbnRzW3JdO3ZhciBpPXtsYWJlbDplfTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmKGkuZG9jdW1lbnRhdGlvbj10KSxoby5kZWZpbmVkKG4pP2kucGFyYW1ldGVycz1uOmkucGFyYW1ldGVycz1bXSxpfSwoamk9S2l8fChLaT17fSkpLlRleHQ9MSxqaS5SZWFkPTIsamkuV3JpdGU9MywoVWl8fChVaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXtyYW5nZTplfTtyZXR1cm4gaG8ubnVtYmVyKHQpJiYobi5raW5kPXQpLG59LChxaT1CaXx8KEJpPXt9KSkuRmlsZT0xLHFpLk1vZHVsZT0yLHFpLk5hbWVzcGFjZT0zLHFpLlBhY2thZ2U9NCxxaS5DbGFzcz01LHFpLk1ldGhvZD02LHFpLlByb3BlcnR5PTcscWkuRmllbGQ9OCxxaS5Db25zdHJ1Y3Rvcj05LHFpLkVudW09MTAscWkuSW50ZXJmYWNlPTExLHFpLkZ1bmN0aW9uPTEyLHFpLlZhcmlhYmxlPTEzLHFpLkNvbnN0YW50PTE0LHFpLlN0cmluZz0xNSxxaS5OdW1iZXI9MTYscWkuQm9vbGVhbj0xNyxxaS5BcnJheT0xOCxxaS5PYmplY3Q9MTkscWkuS2V5PTIwLHFpLk51bGw9MjEscWkuRW51bU1lbWJlcj0yMixxaS5TdHJ1Y3Q9MjMscWkuRXZlbnQ9MjQscWkuT3BlcmF0b3I9MjUscWkuVHlwZVBhcmFtZXRlcj0yNiwoJGl8fCgkaT17fSkpLkRlcHJlY2F0ZWQ9MSwoV2l8fChXaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPXtuYW1lOmUsa2luZDp0LGxvY2F0aW9uOnt1cmk6cixyYW5nZTpufX07cmV0dXJuIGkmJihvLmNvbnRhaW5lck5hbWU9aSksb30sKHppPUhpfHwoSGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPXtuYW1lOmUsZGV0YWlsOnQsa2luZDpuLHJhbmdlOnIsc2VsZWN0aW9uUmFuZ2U6aX07cmV0dXJuIHZvaWQgMCE9PW8mJihhLmNoaWxkcmVuPW8pLGF9LHppLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJmhvLnN0cmluZyh0Lm5hbWUpJiZoby5udW1iZXIodC5raW5kKSYmZnIuaXModC5yYW5nZSkmJmZyLmlzKHQuc2VsZWN0aW9uUmFuZ2UpJiYodm9pZCAwPT09dC5kZXRhaWx8fGhvLnN0cmluZyh0LmRldGFpbCkpJiYodm9pZCAwPT09dC5kZXByZWNhdGVkfHxoby5ib29sZWFuKHQuZGVwcmVjYXRlZCkpJiYodm9pZCAwPT09dC5jaGlsZHJlbnx8QXJyYXkuaXNBcnJheSh0LmNoaWxkcmVuKSkmJih2b2lkIDA9PT10LnRhZ3N8fEFycmF5LmlzQXJyYXkodC50YWdzKSl9LChKaT1HaXx8KEdpPXt9KSkuRW1wdHk9IiIsSmkuUXVpY2tGaXg9InF1aWNrZml4IixKaS5SZWZhY3Rvcj0icmVmYWN0b3IiLEppLlJlZmFjdG9yRXh0cmFjdD0icmVmYWN0b3IuZXh0cmFjdCIsSmkuUmVmYWN0b3JJbmxpbmU9InJlZmFjdG9yLmlubGluZSIsSmkuUmVmYWN0b3JSZXdyaXRlPSJyZWZhY3Rvci5yZXdyaXRlIixKaS5Tb3VyY2U9InNvdXJjZSIsSmkuU291cmNlT3JnYW5pemVJbXBvcnRzPSJzb3VyY2Uub3JnYW5pemVJbXBvcnRzIixKaS5Tb3VyY2VGaXhBbGw9InNvdXJjZS5maXhBbGwiLChaaT1YaXx8KFhpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e2RpYWdub3N0aWNzOmV9O3JldHVybiBudWxsIT10JiYobi5vbmx5PXQpLG59LFppLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnR5cGVkQXJyYXkodC5kaWFnbm9zdGljcyxSci5pcykmJih2b2lkIDA9PT10Lm9ubHl8fGhvLnR5cGVkQXJyYXkodC5vbmx5LGhvLnN0cmluZykpfSwoUWk9WWl8fChZaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e3RpdGxlOmV9LGk9ITA7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0PyhpPSExLHIua2luZD10KTpGci5pcyh0KT9yLmNvbW1hbmQ9dDpyLmVkaXQ9dCxpJiZ2b2lkIDAhPT1uJiYoci5raW5kPW4pLHJ9LFFpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJmhvLnN0cmluZyh0LnRpdGxlKSYmKHZvaWQgMD09PXQuZGlhZ25vc3RpY3N8fGhvLnR5cGVkQXJyYXkodC5kaWFnbm9zdGljcyxSci5pcykpJiYodm9pZCAwPT09dC5raW5kfHxoby5zdHJpbmcodC5raW5kKSkmJih2b2lkIDAhPT10LmVkaXR8fHZvaWQgMCE9PXQuY29tbWFuZCkmJih2b2lkIDA9PT10LmNvbW1hbmR8fEZyLmlzKHQuY29tbWFuZCkpJiYodm9pZCAwPT09dC5pc1ByZWZlcnJlZHx8aG8uYm9vbGVhbih0LmlzUHJlZmVycmVkKSkmJih2b2lkIDA9PT10LmVkaXR8fGVpLmlzKHQuZWRpdCkpfSwodG89ZW98fChlbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXtyYW5nZTplfTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmKG4uZGF0YT10KSxufSx0by5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZmci5pcyh0LnJhbmdlKSYmKGhvLnVuZGVmaW5lZCh0LmNvbW1hbmQpfHxGci5pcyh0LmNvbW1hbmQpKX0sKHJvPW5vfHwobm89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dGFiU2l6ZTplLGluc2VydFNwYWNlczp0fX0scm8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmaG8udWludGVnZXIodC50YWJTaXplKSYmaG8uYm9vbGVhbih0Lmluc2VydFNwYWNlcyl9LChvbz1pb3x8KGlvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57cmFuZ2U6ZSx0YXJnZXQ6dCxkYXRhOm59fSxvby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZmci5pcyh0LnJhbmdlKSYmKGhvLnVuZGVmaW5lZCh0LnRhcmdldCl8fGhvLnN0cmluZyh0LnRhcmdldCkpfSwoc289YW98fChhbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTplLHBhcmVudDp0fX0sc28uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdm9pZCAwIT09dCYmZnIuaXModC5yYW5nZSkmJih2b2lkIDA9PT10LnBhcmVudHx8c28uaXModC5wYXJlbnQpKX0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4pe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO3ZhciByPWUubGVuZ3RoLzJ8MCxpPWUuc2xpY2UoMCxyKSxvPWUuc2xpY2Uocik7dChpLG4pLHQobyxuKTtmb3IodmFyIGE9MCxzPTAsYz0wO2E8aS5sZW5ndGgmJnM8by5sZW5ndGg7KXt2YXIgbD1uKGlbYV0sb1tzXSk7ZVtjKytdPWw8PTA/aVthKytdOm9bcysrXX1mb3IoO2E8aS5sZW5ndGg7KWVbYysrXT1pW2ErK107Zm9yKDtzPG8ubGVuZ3RoOyllW2MrK109b1tzKytdO3JldHVybiBlfWUuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcgZ28oZSx0LG4scil9LGUuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4hIShoby5kZWZpbmVkKHQpJiZoby5zdHJpbmcodC51cmkpJiYoaG8udW5kZWZpbmVkKHQubGFuZ3VhZ2VJZCl8fGhvLnN0cmluZyh0Lmxhbmd1YWdlSWQpKSYmaG8udWludGVnZXIodC5saW5lQ291bnQpJiZoby5mdW5jKHQuZ2V0VGV4dCkmJmhvLmZ1bmModC5wb3NpdGlvbkF0KSYmaG8uZnVuYyh0Lm9mZnNldEF0KSl9LGUuYXBwbHlFZGl0cz1mdW5jdGlvbihlLG4pe2Zvcih2YXIgcj1lLmdldFRleHQoKSxpPXQobiwoZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnJhbmdlLnN0YXJ0LmxpbmUtdC5yYW5nZS5zdGFydC5saW5lO3JldHVybiAwPT09bj9lLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci10LnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpufSkpLG89ci5sZW5ndGgsYT1pLmxlbmd0aC0xO2E+PTA7YS0tKXt2YXIgcz1pW2FdLGM9ZS5vZmZzZXRBdChzLnJhbmdlLnN0YXJ0KSxsPWUub2Zmc2V0QXQocy5yYW5nZS5lbmQpO2lmKCEobDw9bykpdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7cj1yLnN1YnN0cmluZygwLGMpK3MubmV3VGV4dCtyLnN1YnN0cmluZyhsLHIubGVuZ3RoKSxvPWN9cmV0dXJuIHJ9fShjb3x8KGNvPXt9KSk7dmFyIGhvLGZvLG1vLGdvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyKXt0aGlzLl91cmk9ZSx0aGlzLl9sYW5ndWFnZUlkPXQsdGhpcy5fdmVyc2lvbj1uLHRoaXMuX2NvbnRlbnQ9cix0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidXJpIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VyaX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxhbmd1YWdlSWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VJZH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZlcnNpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxuKX1yZXR1cm4gdGhpcy5fY29udGVudH0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGVudD1lLnRleHQsdGhpcy5fdmVyc2lvbj10LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH0sZS5wcm90b3R5cGUuZ2V0TGluZU9mZnNldHM9ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT10aGlzLl9saW5lT2Zmc2V0cyl7Zm9yKHZhciBlPVtdLHQ9dGhpcy5fY29udGVudCxuPSEwLHI9MDtyPHQubGVuZ3RoO3IrKyl7biYmKGUucHVzaChyKSxuPSExKTt2YXIgaT10LmNoYXJBdChyKTtuPSJcciI9PT1pfHwiXG4iPT09aSwiXHIiPT09aSYmcisxPHQubGVuZ3RoJiYiXG4iPT09dC5jaGFyQXQocisxKSYmcisrfW4mJnQubGVuZ3RoPjAmJmUucHVzaCh0Lmxlbmd0aCksdGhpcy5fbGluZU9mZnNldHM9ZX1yZXR1cm4gdGhpcy5fbGluZU9mZnNldHN9LGUucHJvdG90eXBlLnBvc2l0aW9uQXQ9ZnVuY3Rpb24oZSl7ZT1NYXRoLm1heChNYXRoLm1pbihlLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCksbj0wLHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJuIHVyLmNyZWF0ZSgwLGUpO2Zvcig7bjxyOyl7dmFyIGk9TWF0aC5mbG9vcigobityKS8yKTt0W2ldPmU/cj1pOm49aSsxfXZhciBvPW4tMTtyZXR1cm4gdXIuY3JlYXRlKG8sZS10W29dKX0sZS5wcm90b3R5cGUub2Zmc2V0QXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKGUubGluZT49dC5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKGUubGluZTwwKXJldHVybiAwO3ZhciBuPXRbZS5saW5lXSxyPWUubGluZSsxPHQubGVuZ3RoP3RbZS5saW5lKzFdOnRoaXMuX2NvbnRlbnQubGVuZ3RoO3JldHVybiBNYXRoLm1heChNYXRoLm1pbihuK2UuY2hhcmFjdGVyLHIpLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxpbmVDb3VudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGV9KCk7Zm89aG98fChobz17fSksbW89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxmby5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lfSxmby51bmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWV9LGZvLmJvb2xlYW49ZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lfHwhMT09PWV9LGZvLnN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PW1vLmNhbGwoZSl9LGZvLm51bWJlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PW1vLmNhbGwoZSl9LGZvLm51bWJlclJhbmdlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PW1vLmNhbGwoZSkmJnQ8PWUmJmU8PW59LGZvLmludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1tby5jYWxsKGUpJiYtMjE0NzQ4MzY0ODw9ZSYmZTw9MjE0NzQ4MzY0N30sZm8udWludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1tby5jYWxsKGUpJiYwPD1lJiZlPD0yMTQ3NDgzNjQ3fSxmby5mdW5jPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1tby5jYWxsKGUpfSxmby5vYmplY3RMaXRlcmFsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfSxmby50eXBlZEFycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkodCl9O3ZhciBwbyxibyx2byx5byxDbyx3bz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLl91cmk9ZSx0aGlzLl9sYW5ndWFnZUlkPXQsdGhpcy5fdmVyc2lvbj1uLHRoaXMuX2NvbnRlbnQ9cix0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9Z2V0IHVyaSgpe3JldHVybiB0aGlzLl91cml9Z2V0IGxhbmd1YWdlSWQoKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VJZH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufWdldFRleHQoZSl7aWYoZSl7Y29uc3QgdD10aGlzLm9mZnNldEF0KGUuc3RhcnQpLG49dGhpcy5vZmZzZXRBdChlLmVuZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHQsbil9cmV0dXJuIHRoaXMuX2NvbnRlbnR9dXBkYXRlKGUsdCl7Zm9yKGxldCB0IG9mIGUpaWYod28uaXNJbmNyZW1lbnRhbCh0KSl7Y29uc3QgZT1Bbyh0LnJhbmdlKSxuPXRoaXMub2Zmc2V0QXQoZS5zdGFydCkscj10aGlzLm9mZnNldEF0KGUuZW5kKTt0aGlzLl9jb250ZW50PXRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKDAsbikrdC50ZXh0K3RoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHIsdGhpcy5fY29udGVudC5sZW5ndGgpO2NvbnN0IGk9TWF0aC5tYXgoZS5zdGFydC5saW5lLDApLG89TWF0aC5tYXgoZS5lbmQubGluZSwwKTtsZXQgYT10aGlzLl9saW5lT2Zmc2V0cztjb25zdCBzPVNvKHQudGV4dCwhMSxuKTtpZihvLWk9PT1zLmxlbmd0aClmb3IobGV0IGU9MCx0PXMubGVuZ3RoO2U8dDtlKyspYVtlK2krMV09c1tlXTtlbHNlIHMubGVuZ3RoPDFlND9hLnNwbGljZShpKzEsby1pLC4uLnMpOnRoaXMuX2xpbmVPZmZzZXRzPWE9YS5zbGljZSgwLGkrMSkuY29uY2F0KHMsYS5zbGljZShvKzEpKTtjb25zdCBjPXQudGV4dC5sZW5ndGgtKHItbik7aWYoMCE9PWMpZm9yKGxldCBlPWkrMStzLmxlbmd0aCx0PWEubGVuZ3RoO2U8dDtlKyspYVtlXT1hW2VdK2N9ZWxzZXtpZighd28uaXNGdWxsKHQpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaGFuZ2UgZXZlbnQgcmVjZWl2ZWQiKTt0aGlzLl9jb250ZW50PXQudGV4dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9dGhpcy5fdmVyc2lvbj10fWdldExpbmVPZmZzZXRzKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX2xpbmVPZmZzZXRzJiYodGhpcy5fbGluZU9mZnNldHM9U28odGhpcy5fY29udGVudCwhMCkpLHRoaXMuX2xpbmVPZmZzZXRzfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLm1heChNYXRoLm1pbihlLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTtsZXQgdD10aGlzLmdldExpbmVPZmZzZXRzKCksbj0wLHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJue2xpbmU6MCxjaGFyYWN0ZXI6ZX07Zm9yKDtuPHI7KXtsZXQgaT1NYXRoLmZsb29yKChuK3IpLzIpO3RbaV0+ZT9yPWk6bj1pKzF9bGV0IGk9bi0xO3JldHVybntsaW5lOmksY2hhcmFjdGVyOmUtdFtpXX19b2Zmc2V0QXQoZSl7bGV0IHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKGUubGluZT49dC5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKGUubGluZTwwKXJldHVybiAwO2xldCBuPXRbZS5saW5lXSxyPWUubGluZSsxPHQubGVuZ3RoP3RbZS5saW5lKzFdOnRoaXMuX2NvbnRlbnQubGVuZ3RoO3JldHVybiBNYXRoLm1heChNYXRoLm1pbihuK2UuY2hhcmFjdGVyLHIpLG4pfWdldCBsaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH1zdGF0aWMgaXNJbmNyZW1lbnRhbChlKXtsZXQgdD1lO3JldHVybiBudWxsIT10JiYic3RyaW5nIj09dHlwZW9mIHQudGV4dCYmdm9pZCAwIT09dC5yYW5nZSYmKHZvaWQgMD09PXQucmFuZ2VMZW5ndGh8fCJudW1iZXIiPT10eXBlb2YgdC5yYW5nZUxlbmd0aCl9c3RhdGljIGlzRnVsbChlKXtsZXQgdD1lO3JldHVybiBudWxsIT10JiYic3RyaW5nIj09dHlwZW9mIHQudGV4dCYmdm9pZCAwPT09dC5yYW5nZSYmdm9pZCAwPT09dC5yYW5nZUxlbmd0aH19O2Z1bmN0aW9uIF9vKGUsdCl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3Qgbj1lLmxlbmd0aC8yfDAscj1lLnNsaWNlKDAsbiksaT1lLnNsaWNlKG4pO19vKHIsdCksX28oaSx0KTtsZXQgbz0wLGE9MCxzPTA7Zm9yKDtvPHIubGVuZ3RoJiZhPGkubGVuZ3RoOyl7bGV0IG49dChyW29dLGlbYV0pO2VbcysrXT1uPD0wP3JbbysrXTppW2ErK119Zm9yKDtvPHIubGVuZ3RoOyllW3MrK109cltvKytdO2Zvcig7YTxpLmxlbmd0aDspZVtzKytdPWlbYSsrXTtyZXR1cm4gZX1mdW5jdGlvbiBTbyhlLHQsbj0wKXtjb25zdCByPXQ/W25dOltdO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgaT1lLmNoYXJDb2RlQXQodCk7MTMhPT1pJiYxMCE9PWl8fCgxMz09PWkmJnQrMTxlLmxlbmd0aCYmMTA9PT1lLmNoYXJDb2RlQXQodCsxKSYmdCsrLHIucHVzaChuK3QrMSkpfXJldHVybiByfWZ1bmN0aW9uIEFvKGUpe2NvbnN0IHQ9ZS5zdGFydCxuPWUuZW5kO3JldHVybiB0LmxpbmU+bi5saW5lfHx0LmxpbmU9PT1uLmxpbmUmJnQuY2hhcmFjdGVyPm4uY2hhcmFjdGVyP3tzdGFydDpuLGVuZDp0fTplfWZ1bmN0aW9uIEVvKGUpe2NvbnN0IHQ9QW8oZS5yYW5nZSk7cmV0dXJuIHQhPT1lLnJhbmdlP3tuZXdUZXh0OmUubmV3VGV4dCxyYW5nZTp0fTplfWZ1bmN0aW9uIHhvKGUsdCwuLi5uKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtsZXQgbjtyZXR1cm4gbj0wPT09dC5sZW5ndGg/ZTplLnJlcGxhY2UoL1x7KFxkKylcfS9nLCgoZSxuKT0+e2xldCByPW5bMF07cmV0dXJuIHZvaWQgMCE9PXRbcl0/dFtyXTplfSkpLG59KHQsbil9ZnVuY3Rpb24gTm8oZSl7cmV0dXJuIHhvfShibz1wb3x8KHBvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcgd28oZSx0LG4scil9LGJvLnVwZGF0ZT1mdW5jdGlvbihlLHQsbil7aWYoZSBpbnN0YW5jZW9mIHdvKXJldHVybiBlLnVwZGF0ZSh0LG4pLGU7dGhyb3cgbmV3IEVycm9yKCJUZXh0RG9jdW1lbnQudXBkYXRlOiBkb2N1bWVudCBtdXN0IGJlIGNyZWF0ZWQgYnkgVGV4dERvY3VtZW50LmNyZWF0ZSIpfSxiby5hcHBseUVkaXRzPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZS5nZXRUZXh0KCkscj1fbyh0Lm1hcChFbyksKChlLHQpPT57bGV0IG49ZS5yYW5nZS5zdGFydC5saW5lLXQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gMD09PW4/ZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXItdC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6bn0pKSxpPTA7Y29uc3Qgbz1bXTtmb3IoY29uc3QgdCBvZiByKXtsZXQgcj1lLm9mZnNldEF0KHQucmFuZ2Uuc3RhcnQpO2lmKHI8aSl0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTtyPmkmJm8ucHVzaChuLnN1YnN0cmluZyhpLHIpKSx0Lm5ld1RleHQubGVuZ3RoJiZvLnB1c2godC5uZXdUZXh0KSxpPWUub2Zmc2V0QXQodC5yYW5nZS5lbmQpfXJldHVybiBvLnB1c2gobi5zdWJzdHIoaSkpLG8uam9pbigiIil9LCh5bz12b3x8KHZvPXt9KSlbeW8uVW5kZWZpbmVkPTBdPSJVbmRlZmluZWQiLHlvW3lvLkVudW1WYWx1ZU1pc21hdGNoPTFdPSJFbnVtVmFsdWVNaXNtYXRjaCIseW9beW8uRGVwcmVjYXRlZD0yXT0iRGVwcmVjYXRlZCIseW9beW8uVW5leHBlY3RlZEVuZE9mQ29tbWVudD0yNTddPSJVbmV4cGVjdGVkRW5kT2ZDb21tZW50Iix5b1t5by5VbmV4cGVjdGVkRW5kT2ZTdHJpbmc9MjU4XT0iVW5leHBlY3RlZEVuZE9mU3RyaW5nIix5b1t5by5VbmV4cGVjdGVkRW5kT2ZOdW1iZXI9MjU5XT0iVW5leHBlY3RlZEVuZE9mTnVtYmVyIix5b1t5by5JbnZhbGlkVW5pY29kZT0yNjBdPSJJbnZhbGlkVW5pY29kZSIseW9beW8uSW52YWxpZEVzY2FwZUNoYXJhY3Rlcj0yNjFdPSJJbnZhbGlkRXNjYXBlQ2hhcmFjdGVyIix5b1t5by5JbnZhbGlkQ2hhcmFjdGVyPTI2Ml09IkludmFsaWRDaGFyYWN0ZXIiLHlvW3lvLlByb3BlcnR5RXhwZWN0ZWQ9NTEzXT0iUHJvcGVydHlFeHBlY3RlZCIseW9beW8uQ29tbWFFeHBlY3RlZD01MTRdPSJDb21tYUV4cGVjdGVkIix5b1t5by5Db2xvbkV4cGVjdGVkPTUxNV09IkNvbG9uRXhwZWN0ZWQiLHlvW3lvLlZhbHVlRXhwZWN0ZWQ9NTE2XT0iVmFsdWVFeHBlY3RlZCIseW9beW8uQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQ9NTE3XT0iQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQiLHlvW3lvLkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQ9NTE4XT0iQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZCIseW9beW8uVHJhaWxpbmdDb21tYT01MTldPSJUcmFpbGluZ0NvbW1hIix5b1t5by5EdXBsaWNhdGVLZXk9NTIwXT0iRHVwbGljYXRlS2V5Iix5b1t5by5Db21tZW50Tm90UGVybWl0dGVkPTUyMV09IkNvbW1lbnROb3RQZXJtaXR0ZWQiLHlvW3lvLlNjaGVtYVJlc29sdmVFcnJvcj03NjhdPSJTY2hlbWFSZXNvbHZlRXJyb3IiLChDb3x8KENvPXt9KSkuTEFURVNUPXt0ZXh0RG9jdW1lbnQ6e2NvbXBsZXRpb246e2NvbXBsZXRpb25JdGVtOntkb2N1bWVudGF0aW9uRm9ybWF0OltDaS5NYXJrZG93bixDaS5QbGFpblRleHRdLGNvbW1pdENoYXJhY3RlcnNTdXBwb3J0OiEwfX19fTt2YXIga28sTG8sVG8sT289KGtvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGtvPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcodCkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1rbyhlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX0pLElvPU5vKCksTW89eyJjb2xvci1oZXgiOntlcnJvck1lc3NhZ2U6SW8oImNvbG9ySGV4Rm9ybWF0V2FybmluZyIsIkludmFsaWQgY29sb3IgZm9ybWF0LiBVc2UgI1JHQiwgI1JHQkEsICNSUkdHQkIgb3IgI1JSR0dCQkFBLiIpLHBhdHRlcm46L14jKFswLTlBLUZhLWZdezMsNH18KFswLTlBLUZhLWZdezJ9KXszLDR9KSQvfSwiZGF0ZS10aW1lIjp7ZXJyb3JNZXNzYWdlOklvKCJkYXRlVGltZUZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGEgUkZDMzMzOSBkYXRlLXRpbWUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKVQoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pOihbMC01XVswLTldfDYwKShcLlswLTldKyk/KFp8KFwrfC0pKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKSkkL2l9LGRhdGU6e2Vycm9yTWVzc2FnZTpJbygiZGF0ZUZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGEgUkZDMzMzOSBkYXRlLiIpLHBhdHRlcm46L14oXGR7NH0pLSgwWzEtOV18MVswLTJdKS0oMFsxLTldfFsxMl1bMC05XXwzWzAxXSkkL2l9LHRpbWU6e2Vycm9yTWVzc2FnZTpJbygidGltZUZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGEgUkZDMzMzOSB0aW1lLiIpLHBhdHRlcm46L14oWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pOihbMC01XVswLTldfDYwKShcLlswLTldKyk/KFp8KFwrfC0pKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKSkkL2l9LGVtYWlsOntlcnJvck1lc3NhZ2U6SW8oImVtYWlsRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYW4gZS1tYWlsIGFkZHJlc3MuIikscGF0dGVybjovXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWjAtOS1dK1wuKStbYS16QS1aXXsyLH0pKSQvfSxob3N0bmFtZTp7ZXJyb3JNZXNzYWdlOklvKCJob3N0bmFtZUZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGEgaG9zdG5hbWUuIikscGF0dGVybjovXig/PS57MSwyNTN9XC4/JClbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8oPzpcLlthLXowLTldKD86Wy0wLTlhLXpdezAsNjF9WzAtOWEtel0pPykqXC4/JC9pfSxpcHY0OntlcnJvck1lc3NhZ2U6SW8oImlwdjRGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBJUHY0IGFkZHJlc3MuIikscGF0dGVybjovXig/Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpXC4pezN9KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkkL30saXB2Njp7ZXJyb3JNZXNzYWdlOklvKCJpcHY2Rm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYW4gSVB2NiBhZGRyZXNzLiIpLHBhdHRlcm46L14oKChbMC05YS1mXXsxLDR9Oil7N30oWzAtOWEtZl17MSw0fXw6KSl8KChbMC05YS1mXXsxLDR9Oil7Nn0oOlswLTlhLWZdezEsNH18KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs1fSgoKDpbMC05YS1mXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs0fSgoKDpbMC05YS1mXXsxLDR9KXsxLDN9KXwoKDpbMC05YS1mXXsxLDR9KT86KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7M30oKCg6WzAtOWEtZl17MSw0fSl7MSw0fSl8KCg6WzAtOWEtZl17MSw0fSl7MCwyfTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXsyfSgoKDpbMC05YS1mXXsxLDR9KXsxLDV9KXwoKDpbMC05YS1mXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezF9KCgoOlswLTlhLWZdezEsNH0pezEsNn0pfCgoOlswLTlhLWZdezEsNH0pezAsNH06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KDooKCg6WzAtOWEtZl17MSw0fSl7MSw3fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw1fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKSkkL2l9fSxQbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZvaWQgMD09PW4mJihuPTApLHRoaXMub2Zmc2V0PXQsdGhpcy5sZW5ndGg9bix0aGlzLnBhcmVudD1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4idHlwZTogIit0aGlzLnR5cGUrIiAoIit0aGlzLm9mZnNldCsiLyIrdGhpcy5sZW5ndGgrIikiKyh0aGlzLnBhcmVudD8iIHBhcmVudDogeyIrdGhpcy5wYXJlbnQudG9TdHJpbmcoKSsifSI6IiIpfSxlfSgpLFJvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9Im51bGwiLHIudmFsdWU9bnVsbCxyfXJldHVybiBPbyh0LGUpLHR9KFBvKSxWbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyKXt2YXIgaT1lLmNhbGwodGhpcyx0LHIpfHx0aGlzO3JldHVybiBpLnR5cGU9ImJvb2xlYW4iLGkudmFsdWU9bixpfXJldHVybiBPbyh0LGUpLHR9KFBvKSxGbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJhcnJheSIsci5pdGVtcz1bXSxyfXJldHVybiBPbyh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVtc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fShQbyksRG89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIudHlwZT0ibnVtYmVyIixyLmlzSW50ZWdlcj0hMCxyLnZhbHVlPU51bWJlci5OYU4scn1yZXR1cm4gT28odCxlKSx0fShQbyksS289ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4scil7dmFyIGk9ZS5jYWxsKHRoaXMsdCxuLHIpfHx0aGlzO3JldHVybiBpLnR5cGU9InN0cmluZyIsaS52YWx1ZT0iIixpfXJldHVybiBPbyh0LGUpLHR9KFBvKSxqbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyKXt2YXIgaT1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiBpLnR5cGU9InByb3BlcnR5IixpLmNvbG9uT2Zmc2V0PS0xLGkua2V5Tm9kZT1yLGl9cmV0dXJuIE9vKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlTm9kZT9bdGhpcy5rZXlOb2RlLHRoaXMudmFsdWVOb2RlXTpbdGhpcy5rZXlOb2RlXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fShQbyksVW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIudHlwZT0ib2JqZWN0IixyLnByb3BlcnRpZXM9W10scn1yZXR1cm4gT28odCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcGVydGllc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fShQbyk7ZnVuY3Rpb24gQm8oZSl7cmV0dXJuIGxpKGUpP2U/e306e25vdDp7fX06ZX0oVG89TG98fChMbz17fSkpW1RvLktleT0wXT0iS2V5IixUb1tUby5FbnVtPTFdPSJFbnVtIjt2YXIgcW89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dm9pZCAwPT09ZSYmKGU9LTEpLHRoaXMuZm9jdXNPZmZzZXQ9ZSx0aGlzLmV4Y2x1ZGU9dCx0aGlzLnNjaGVtYXM9W119cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLnNjaGVtYXMucHVzaChlKX0sZS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24oZSl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5zY2hlbWFzLGUuc2NoZW1hcyl9LGUucHJvdG90eXBlLmluY2x1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuKC0xPT09dGhpcy5mb2N1c09mZnNldHx8R28oZSx0aGlzLmZvY3VzT2Zmc2V0KSkmJmUhPT10aGlzLmV4Y2x1ZGV9LGUucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiBuZXcgZSgtMSx0aGlzLmV4Y2x1ZGUpfSxlfSgpLCRvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzY2hlbWFzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe30sZS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24oZSl7fSxlLnByb3RvdHlwZS5pbmNsdWRlPWZ1bmN0aW9uKGUpe3JldHVybiEwfSxlLnByb3RvdHlwZS5uZXdTdWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5pbnN0YW5jZT1uZXcgZSxlfSgpLFdvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMucHJvYmxlbXM9W10sdGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcz0wLHRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcz0wLHRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcz0wLHRoaXMuZW51bVZhbHVlTWF0Y2g9ITEsdGhpcy5lbnVtVmFsdWVzPXZvaWQgMH1yZXR1cm4gZS5wcm90b3R5cGUuaGFzUHJvYmxlbXM9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMucHJvYmxlbXMubGVuZ3RofSxlLnByb3RvdHlwZS5tZXJnZUFsbD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPWU7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07dGhpcy5tZXJnZShyKX19LGUucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKGUpe3RoaXMucHJvYmxlbXM9dGhpcy5wcm9ibGVtcy5jb25jYXQoZS5wcm9ibGVtcyl9LGUucHJvdG90eXBlLm1lcmdlRW51bVZhbHVlcz1mdW5jdGlvbihlKXtpZighdGhpcy5lbnVtVmFsdWVNYXRjaCYmIWUuZW51bVZhbHVlTWF0Y2gmJnRoaXMuZW51bVZhbHVlcyYmZS5lbnVtVmFsdWVzKXt0aGlzLmVudW1WYWx1ZXM9dGhpcy5lbnVtVmFsdWVzLmNvbmNhdChlLmVudW1WYWx1ZXMpO2Zvcih2YXIgdD0wLG49dGhpcy5wcm9ibGVtczt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTtyLmNvZGU9PT12by5FbnVtVmFsdWVNaXNtYXRjaCYmKHIubWVzc2FnZT1JbygiZW51bVdhcm5pbmciLCJWYWx1ZSBpcyBub3QgYWNjZXB0ZWQuIFZhbGlkIHZhbHVlczogezB9LiIsdGhpcy5lbnVtVmFsdWVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSkpLmpvaW4oIiwgIikpKX19fSxlLnByb3RvdHlwZS5tZXJnZVByb3BlcnR5TWF0Y2g9ZnVuY3Rpb24oZSl7dGhpcy5tZXJnZShlKSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzKyssKGUuZW51bVZhbHVlTWF0Y2h8fCFlLmhhc1Byb2JsZW1zKCkmJmUucHJvcGVydGllc01hdGNoZXMpJiZ0aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKyxlLmVudW1WYWx1ZU1hdGNoJiZlLmVudW1WYWx1ZXMmJjE9PT1lLmVudW1WYWx1ZXMubGVuZ3RoJiZ0aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMrK30sZS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmhhc1Byb2JsZW1zKCk7cmV0dXJuIHQhPT1lLmhhc1Byb2JsZW1zKCk/dD8tMToxOnRoaXMuZW51bVZhbHVlTWF0Y2ghPT1lLmVudW1WYWx1ZU1hdGNoP2UuZW51bVZhbHVlTWF0Y2g/LTE6MTp0aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMhPT1lLnByaW1hcnlWYWx1ZU1hdGNoZXM/dGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzLWUucHJpbWFyeVZhbHVlTWF0Y2hlczp0aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMhPT1lLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM/dGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLWUucHJvcGVydGllc1ZhbHVlTWF0Y2hlczp0aGlzLnByb3BlcnRpZXNNYXRjaGVzLWUucHJvcGVydGllc01hdGNoZXN9LGV9KCk7ZnVuY3Rpb24gSG8oZSl7cmV0dXJuIG9pKGUpfWZ1bmN0aW9uIHpvKGUpe3JldHVybiBpaShlKX1mdW5jdGlvbiBHbyhlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPSExKSx0Pj1lLm9mZnNldCYmdDxlLm9mZnNldCtlLmxlbmd0aHx8biYmdD09PWUub2Zmc2V0K2UubGVuZ3RofXZhciBKbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1uJiYobj1bXSksdGhpcy5yb290PWUsdGhpcy5zeW50YXhFcnJvcnM9dCx0aGlzLmNvbW1lbnRzPW59cmV0dXJuIGUucHJvdG90eXBlLmdldE5vZGVGcm9tT2Zmc2V0PWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9ITEpLHRoaXMucm9vdClyZXR1cm4gcmkodGhpcy5yb290LGUsdCl9LGUucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKGUpe2lmKHRoaXMucm9vdCl7dmFyIHQ9ZnVuY3Rpb24obil7dmFyIHI9ZShuKSxpPW4uY2hpbGRyZW47aWYoQXJyYXkuaXNBcnJheShpKSlmb3IodmFyIG89MDtvPGkubGVuZ3RoJiZyO28rKylyPXQoaVtvXSk7cmV0dXJuIHJ9O3QodGhpcy5yb290KX19LGUucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZih2b2lkIDA9PT1uJiYobj1Uci5XYXJuaW5nKSx0aGlzLnJvb3QmJnQpe3ZhciByPW5ldyBXbztyZXR1cm4gWG8odGhpcy5yb290LHQsciwkby5pbnN0YW5jZSksci5wcm9ibGVtcy5tYXAoKGZ1bmN0aW9uKHQpe3ZhciByLGk9ZnIuY3JlYXRlKGUucG9zaXRpb25BdCh0LmxvY2F0aW9uLm9mZnNldCksZS5wb3NpdGlvbkF0KHQubG9jYXRpb24ub2Zmc2V0K3QubG9jYXRpb24ubGVuZ3RoKSk7cmV0dXJuIFJyLmNyZWF0ZShpLHQubWVzc2FnZSxudWxsIT09KHI9dC5zZXZlcml0eSkmJnZvaWQgMCE9PXI/cjpuLHQuY29kZSl9KSl9fSxlLnByb3RvdHlwZS5nZXRNYXRjaGluZ1NjaGVtYXM9ZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PXQmJih0PS0xKTt2YXIgcj1uZXcgcW8odCxuKTtyZXR1cm4gdGhpcy5yb290JiZlJiZYbyh0aGlzLnJvb3QsZSxuZXcgV28sciksci5zY2hlbWFzfSxlfSgpO2Z1bmN0aW9uIFhvKGUsdCxuLHIpe2lmKGUmJnIuaW5jbHVkZShlKSl7dmFyIGk9ZTtzd2l0Y2goaS50eXBlKXtjYXNlIm9iamVjdCI6IWZ1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpLG89W10sYT0wLHM9ZS5wcm9wZXJ0aWVzO2E8cy5sZW5ndGg7YSsrKXtpW0s9KHA9c1thXSkua2V5Tm9kZS52YWx1ZV09cC52YWx1ZU5vZGUsby5wdXNoKEspfWlmKEFycmF5LmlzQXJyYXkodC5yZXF1aXJlZCkpZm9yKHZhciBjPTAsbD10LnJlcXVpcmVkO2M8bC5sZW5ndGg7YysrKXtpZighaVtTPWxbY11dKXt2YXIgdT1lLnBhcmVudCYmInByb3BlcnR5Ij09PWUucGFyZW50LnR5cGUmJmUucGFyZW50LmtleU5vZGUsaD11P3tvZmZzZXQ6dS5vZmZzZXQsbGVuZ3RoOnUubGVuZ3RofTp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDoxfTtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOmgsbWVzc2FnZTpJbygiTWlzc2luZ1JlcXVpcmVkUHJvcFdhcm5pbmciLCdNaXNzaW5nIHByb3BlcnR5ICJ7MH0iLicsUyl9KX19dmFyIGY9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW8uaW5kZXhPZihlKTt0Pj0wOylvLnNwbGljZSh0LDEpLHQ9by5pbmRleE9mKGUpfTtpZih0LnByb3BlcnRpZXMpZm9yKHZhciBkPTAsbT1PYmplY3Qua2V5cyh0LnByb3BlcnRpZXMpO2Q8bS5sZW5ndGg7ZCsrKXtmKFM9bVtkXSk7dmFyIGc9dC5wcm9wZXJ0aWVzW1NdO2lmKEw9aVtTXSlpZihsaShnKSlpZihnKW4ucHJvcGVydGllc01hdGNoZXMrKyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKztlbHNle3ZhciBwPUwucGFyZW50O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpwLmtleU5vZGUub2Zmc2V0LGxlbmd0aDpwLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygiRGlzYWxsb3dlZEV4dHJhUHJvcFdhcm5pbmciLCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIixTKX0pfWVsc2UgWG8oTCxnLHg9bmV3IFdvLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHgpfWlmKHQucGF0dGVyblByb3BlcnRpZXMpZm9yKHZhciBiPTAsdj1PYmplY3Qua2V5cyh0LnBhdHRlcm5Qcm9wZXJ0aWVzKTtiPHYubGVuZ3RoO2IrKylmb3IodmFyIHk9dltiXSxDPWhpKHkpLHc9MCxfPW8uc2xpY2UoMCk7dzxfLmxlbmd0aDt3Kyspe3ZhciBTPV9bd107aWYobnVsbD09Qz92b2lkIDA6Qy50ZXN0KFMpKWlmKGYoUyksTD1pW1NdKWlmKGxpKGc9dC5wYXR0ZXJuUHJvcGVydGllc1t5XSkpaWYoZyluLnByb3BlcnRpZXNNYXRjaGVzKyssbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKys7ZWxzZXtwPUwucGFyZW50O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpwLmtleU5vZGUub2Zmc2V0LGxlbmd0aDpwLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygiRGlzYWxsb3dlZEV4dHJhUHJvcFdhcm5pbmciLCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIixTKX0pfWVsc2UgWG8oTCxnLHg9bmV3IFdvLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHgpfWlmKCJvYmplY3QiPT10eXBlb2YgdC5hZGRpdGlvbmFsUHJvcGVydGllcylmb3IodmFyIEE9MCxFPW87QTxFLmxlbmd0aDtBKyspe2lmKEw9aVtTPUVbQV1dKXt2YXIgeD1uZXcgV287WG8oTCx0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzLHgsciksbi5tZXJnZVByb3BlcnR5TWF0Y2goeCl9fWVsc2UgaWYoITE9PT10LmFkZGl0aW9uYWxQcm9wZXJ0aWVzJiZvLmxlbmd0aD4wKWZvcih2YXIgTj0wLGs9bztOPGsubGVuZ3RoO04rKyl7dmFyIEw7aWYoTD1pW1M9a1tOXV0pe3A9TC5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fElvKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLFMpfSl9fXNpKHQubWF4UHJvcGVydGllcykmJmUucHJvcGVydGllcy5sZW5ndGg+dC5tYXhQcm9wZXJ0aWVzJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJNYXhQcm9wV2FybmluZyIsIk9iamVjdCBoYXMgbW9yZSBwcm9wZXJ0aWVzIHRoYW4gbGltaXQgb2YgezB9LiIsdC5tYXhQcm9wZXJ0aWVzKX0pO3NpKHQubWluUHJvcGVydGllcykmJmUucHJvcGVydGllcy5sZW5ndGg8dC5taW5Qcm9wZXJ0aWVzJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJNaW5Qcm9wV2FybmluZyIsIk9iamVjdCBoYXMgZmV3ZXIgcHJvcGVydGllcyB0aGFuIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgezB9Iix0Lm1pblByb3BlcnRpZXMpfSk7aWYodC5kZXBlbmRlbmNpZXMpZm9yKHZhciBUPTAsTz1PYmplY3Qua2V5cyh0LmRlcGVuZGVuY2llcyk7VDxPLmxlbmd0aDtUKyspe2lmKGlbSz1PW1RdXSl7dmFyIEk9dC5kZXBlbmRlbmNpZXNbS107aWYoQXJyYXkuaXNBcnJheShJKSlmb3IodmFyIE09MCxQPUk7TTxQLmxlbmd0aDtNKyspe3ZhciBSPVBbTV07aVtSXT9uLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKzpuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJSZXF1aXJlZERlcGVuZGVudFByb3BXYXJuaW5nIiwiT2JqZWN0IGlzIG1pc3NpbmcgcHJvcGVydHkgezB9IHJlcXVpcmVkIGJ5IHByb3BlcnR5IHsxfS4iLFIsSyl9KX1lbHNlIGlmKGc9Qm8oSSkpWG8oZSxnLHg9bmV3IFdvLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHgpfX12YXIgVj1Cbyh0LnByb3BlcnR5TmFtZXMpO2lmKFYpZm9yKHZhciBGPTAsRD1lLnByb3BlcnRpZXM7RjxELmxlbmd0aDtGKyspe3ZhciBLOyhLPURbRl0ua2V5Tm9kZSkmJlhvKEssVixuLCRvLmluc3RhbmNlKX19KGksdCxuLHIpO2JyZWFrO2Nhc2UiYXJyYXkiOiFmdW5jdGlvbihlLHQsbixyKXtpZihBcnJheS5pc0FycmF5KHQuaXRlbXMpKXtmb3IodmFyIGk9dC5pdGVtcyxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBhPUJvKGlbb10pLHM9bmV3IFdvOyhmPWUuaXRlbXNbb10pPyhYbyhmLGEscyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaChzKSk6ZS5pdGVtcy5sZW5ndGg+PWkubGVuZ3RoJiZuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrK31pZihlLml0ZW1zLmxlbmd0aD5pLmxlbmd0aClpZigib2JqZWN0Ij09dHlwZW9mIHQuYWRkaXRpb25hbEl0ZW1zKWZvcih2YXIgYz1pLmxlbmd0aDtjPGUuaXRlbXMubGVuZ3RoO2MrKyl7cz1uZXcgV287WG8oZS5pdGVtc1tjXSx0LmFkZGl0aW9uYWxJdGVtcyxzLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHMpfWVsc2UhMT09PXQuYWRkaXRpb25hbEl0ZW1zJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJhZGRpdGlvbmFsSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBtYW55IGl0ZW1zIGFjY29yZGluZyB0byBzY2hlbWEuIEV4cGVjdGVkIHswfSBvciBmZXdlci4iLGkubGVuZ3RoKX0pfWVsc2V7dmFyIGw9Qm8odC5pdGVtcyk7aWYobClmb3IodmFyIHU9MCxoPWUuaXRlbXM7dTxoLmxlbmd0aDt1Kyspe3ZhciBmO1hvKGY9aFt1XSxsLHM9bmV3IFdvLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHMpfX12YXIgZD1Cbyh0LmNvbnRhaW5zKTtpZihkKXtlLml0ZW1zLnNvbWUoKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBXbztyZXR1cm4gWG8oZSxkLHQsJG8uaW5zdGFuY2UpLCF0Lmhhc1Byb2JsZW1zKCl9KSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fElvKCJyZXF1aXJlZEl0ZW1NaXNzaW5nV2FybmluZyIsIkFycmF5IGRvZXMgbm90IGNvbnRhaW4gcmVxdWlyZWQgaXRlbS4iKX0pfXNpKHQubWluSXRlbXMpJiZlLml0ZW1zLmxlbmd0aDx0Lm1pbkl0ZW1zJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtaW5JdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIGZldyBpdGVtcy4gRXhwZWN0ZWQgezB9IG9yIG1vcmUuIix0Lm1pbkl0ZW1zKX0pO3NpKHQubWF4SXRlbXMpJiZlLml0ZW1zLmxlbmd0aD50Lm1heEl0ZW1zJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtYXhJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMuIEV4cGVjdGVkIHswfSBvciBmZXdlci4iLHQubWF4SXRlbXMpfSk7aWYoITA9PT10LnVuaXF1ZUl0ZW1zKXt2YXIgbT1IbyhlKTttLnNvbWUoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQhPT1tLmxhc3RJbmRleE9mKGUpfSkpJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJ1bmlxdWVJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgZHVwbGljYXRlIGl0ZW1zLiIpfSl9fShpLHQsbixyKTticmVhaztjYXNlInN0cmluZyI6IWZ1bmN0aW9uKGUsdCxuLHIpe3NpKHQubWluTGVuZ3RoKSYmZS52YWx1ZS5sZW5ndGg8dC5taW5MZW5ndGgmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6SW8oIm1pbkxlbmd0aFdhcm5pbmciLCJTdHJpbmcgaXMgc2hvcnRlciB0aGFuIHRoZSBtaW5pbXVtIGxlbmd0aCBvZiB7MH0uIix0Lm1pbkxlbmd0aCl9KTtzaSh0Lm1heExlbmd0aCkmJmUudmFsdWUubGVuZ3RoPnQubWF4TGVuZ3RoJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtYXhMZW5ndGhXYXJuaW5nIiwiU3RyaW5nIGlzIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB7MH0uIix0Lm1heExlbmd0aCl9KTtpZihvPXQucGF0dGVybiwic3RyaW5nIj09dHlwZW9mIG8pe3ZhciBpPWhpKHQucGF0dGVybik7KG51bGw9PWk/dm9pZCAwOmkudGVzdChlLnZhbHVlKSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8SW8oInBhdHRlcm5XYXJuaW5nIiwnU3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBwYXR0ZXJuIG9mICJ7MH0iLicsdC5wYXR0ZXJuKX0pfXZhciBvO2lmKHQuZm9ybWF0KXN3aXRjaCh0LmZvcm1hdCl7Y2FzZSJ1cmkiOmNhc2UidXJpLXJlZmVyZW5jZSI6dmFyIGE9dm9pZCAwO2lmKGUudmFsdWUpe3ZhciBzPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vLmV4ZWMoZS52YWx1ZSk7cz9zWzJdfHwidXJpIiE9PXQuZm9ybWF0fHwoYT1JbygidXJpU2NoZW1lTWlzc2luZyIsIlVSSSB3aXRoIGEgc2NoZW1lIGlzIGV4cGVjdGVkLiIpKTphPUlvKCJ1cmlNaXNzaW5nIiwiVVJJIGlzIGV4cGVjdGVkLiIpfWVsc2UgYT1JbygidXJpRW1wdHkiLCJVUkkgZXhwZWN0ZWQuIik7YSYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LnBhdHRlcm5FcnJvck1lc3NhZ2V8fHQuZXJyb3JNZXNzYWdlfHxJbygidXJpRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBVUkk6IHswfSIsYSl9KTticmVhaztjYXNlImNvbG9yLWhleCI6Y2FzZSJkYXRlLXRpbWUiOmNhc2UiZGF0ZSI6Y2FzZSJ0aW1lIjpjYXNlImVtYWlsIjpjYXNlImhvc3RuYW1lIjpjYXNlImlwdjQiOmNhc2UiaXB2NiI6dmFyIGM9TW9bdC5mb3JtYXRdO2UudmFsdWUmJmMucGF0dGVybi5leGVjKGUudmFsdWUpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQucGF0dGVybkVycm9yTWVzc2FnZXx8dC5lcnJvck1lc3NhZ2V8fGMuZXJyb3JNZXNzYWdlfSl9fShpLHQsbik7YnJlYWs7Y2FzZSJudW1iZXIiOiFmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1lLnZhbHVlO2Z1bmN0aW9uIG8oZSl7dmFyIHQsbj0vXigtP1xkKykoPzpcLihcZCspKT8oPzplKFstK11cZCspKT8kLy5leGVjKGUudG9TdHJpbmcoKSk7cmV0dXJuIG4mJnt2YWx1ZTpOdW1iZXIoblsxXSsoblsyXXx8IiIpKSxtdWx0aXBsaWVyOigobnVsbD09PSh0PW5bMl0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmxlbmd0aCl8fDApLShwYXJzZUludChuWzNdKXx8MCl9fWlmKHNpKHQubXVsdGlwbGVPZikpe3ZhciBhPS0xO2lmKE51bWJlci5pc0ludGVnZXIodC5tdWx0aXBsZU9mKSlhPWkldC5tdWx0aXBsZU9mO2Vsc2V7dmFyIHM9byh0Lm11bHRpcGxlT2YpLGM9byhpKTtpZihzJiZjKXt2YXIgbD1NYXRoLnBvdygxMCxNYXRoLmFicyhjLm11bHRpcGxpZXItcy5tdWx0aXBsaWVyKSk7Yy5tdWx0aXBsaWVyPHMubXVsdGlwbGllcj9jLnZhbHVlKj1sOnMudmFsdWUqPWwsYT1jLnZhbHVlJXMudmFsdWV9fTAhPT1hJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtdWx0aXBsZU9mV2FybmluZyIsIlZhbHVlIGlzIG5vdCBkaXZpc2libGUgYnkgezB9LiIsdC5tdWx0aXBsZU9mKX0pfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gc2kodCk/dDpsaSh0KSYmdD9lOnZvaWQgMH1mdW5jdGlvbiBoKGUsdCl7aWYoIWxpKHQpfHwhdClyZXR1cm4gZX12YXIgZj11KHQubWluaW11bSx0LmV4Y2x1c2l2ZU1pbmltdW0pO3NpKGYpJiZpPD1mJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJleGNsdXNpdmVNaW5pbXVtV2FybmluZyIsIlZhbHVlIGlzIGJlbG93IHRoZSBleGNsdXNpdmUgbWluaW11bSBvZiB7MH0uIixmKX0pO3ZhciBkPXUodC5tYXhpbXVtLHQuZXhjbHVzaXZlTWF4aW11bSk7c2koZCkmJmk+PWQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6SW8oImV4Y2x1c2l2ZU1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIGV4Y2x1c2l2ZSBtYXhpbXVtIG9mIHswfS4iLGQpfSk7dmFyIG09aCh0Lm1pbmltdW0sdC5leGNsdXNpdmVNaW5pbXVtKTtzaShtKSYmaTxtJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtaW5pbXVtV2FybmluZyIsIlZhbHVlIGlzIGJlbG93IHRoZSBtaW5pbXVtIG9mIHswfS4iLG0pfSk7dmFyIGc9aCh0Lm1heGltdW0sdC5leGNsdXNpdmVNYXhpbXVtKTtzaShnKSYmaT5nJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtYXhpbXVtV2FybmluZyIsIlZhbHVlIGlzIGFib3ZlIHRoZSBtYXhpbXVtIG9mIHswfS4iLGcpfSl9KGksdCxuKTticmVhaztjYXNlInByb3BlcnR5IjpyZXR1cm4gWG8oaS52YWx1ZU5vZGUsdCxuLHIpfSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGkudHlwZT09PWV8fCJpbnRlZ2VyIj09PWUmJiJudW1iZXIiPT09aS50eXBlJiZpLmlzSW50ZWdlcn1BcnJheS5pc0FycmF5KHQudHlwZSk/dC50eXBlLnNvbWUoZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fElvKCJ0eXBlQXJyYXlNaXNtYXRjaFdhcm5pbmciLCJJbmNvcnJlY3QgdHlwZS4gRXhwZWN0ZWQgb25lIG9mIHswfS4iLHQudHlwZS5qb2luKCIsICIpKX0pOnQudHlwZSYmKGUodC50eXBlKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8SW8oInR5cGVNaXNtYXRjaFdhcm5pbmciLCdJbmNvcnJlY3QgdHlwZS4gRXhwZWN0ZWQgInswfSIuJyx0LnR5cGUpfSkpO2lmKEFycmF5LmlzQXJyYXkodC5hbGxPZikpZm9yKHZhciBvPTAsYT10LmFsbE9mO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO1hvKGksQm8ocyksbixyKX12YXIgYz1Cbyh0Lm5vdCk7aWYoYyl7dmFyIGw9bmV3IFdvLHU9ci5uZXdTdWIoKTtYbyhpLGMsbCx1KSxsLmhhc1Byb2JsZW1zKCl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6SW8oIm5vdFNjaGVtYVdhcm5pbmciLCJNYXRjaGVzIGEgc2NoZW1hIHRoYXQgaXMgbm90IGFsbG93ZWQuIil9KTtmb3IodmFyIGg9MCxmPXUuc2NoZW1hcztoPGYubGVuZ3RoO2grKyl7dmFyIGQ9ZltoXTtkLmludmVydGVkPSFkLmludmVydGVkLHIuYWRkKGQpfX12YXIgbT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1bXSxhPXZvaWQgMCxzPTAsYz1lO3M8Yy5sZW5ndGg7cysrKXt2YXIgbD1CbyhjW3NdKSx1PW5ldyBXbyxoPXIubmV3U3ViKCk7aWYoWG8oaSxsLHUsaCksdS5oYXNQcm9ibGVtcygpfHxvLnB1c2gobCksYSlpZih0fHx1Lmhhc1Byb2JsZW1zKCl8fGEudmFsaWRhdGlvblJlc3VsdC5oYXNQcm9ibGVtcygpKXt2YXIgZj11LmNvbXBhcmUoYS52YWxpZGF0aW9uUmVzdWx0KTtmPjA/YT17c2NoZW1hOmwsdmFsaWRhdGlvblJlc3VsdDp1LG1hdGNoaW5nU2NoZW1hczpofTowPT09ZiYmKGEubWF0Y2hpbmdTY2hlbWFzLm1lcmdlKGgpLGEudmFsaWRhdGlvblJlc3VsdC5tZXJnZUVudW1WYWx1ZXModSkpfWVsc2UgYS5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoaCksYS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzKz11LnByb3BlcnRpZXNNYXRjaGVzLGEudmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz11LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM7ZWxzZSBhPXtzY2hlbWE6bCx2YWxpZGF0aW9uUmVzdWx0OnUsbWF0Y2hpbmdTY2hlbWFzOmh9fXJldHVybiBvLmxlbmd0aD4xJiZ0JiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOjF9LG1lc3NhZ2U6SW8oIm9uZU9mV2FybmluZyIsIk1hdGNoZXMgbXVsdGlwbGUgc2NoZW1hcyB3aGVuIG9ubHkgb25lIG11c3QgdmFsaWRhdGUuIil9KSxhJiYobi5tZXJnZShhLnZhbGlkYXRpb25SZXN1bHQpLG4ucHJvcGVydGllc01hdGNoZXMrPWEudmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzTWF0Y2hlcyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPWEudmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLHIubWVyZ2UoYS5tYXRjaGluZ1NjaGVtYXMpKSxvLmxlbmd0aH07QXJyYXkuaXNBcnJheSh0LmFueU9mKSYmbSh0LmFueU9mLCExKTtBcnJheS5pc0FycmF5KHQub25lT2YpJiZtKHQub25lT2YsITApO3ZhciBnPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBXbyxvPXIubmV3U3ViKCk7WG8oaSxCbyhlKSx0LG8pLG4ubWVyZ2UodCksbi5wcm9wZXJ0aWVzTWF0Y2hlcys9dC5wcm9wZXJ0aWVzTWF0Y2hlcyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPXQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyxyLm1lcmdlKG8pfSxwPUJvKHQuaWYpO3AmJihiPXAsdj1Cbyh0LnRoZW4pLHk9Qm8odC5lbHNlKSxDPUJvKGIpLHc9bmV3IFdvLF89ci5uZXdTdWIoKSxYbyhpLEMsdyxfKSxyLm1lcmdlKF8pLHcuaGFzUHJvYmxlbXMoKT95JiZnKHkpOnYmJmcodikpO3ZhciBiLHYseSxDLHcsXztpZihBcnJheS5pc0FycmF5KHQuZW51bSkpe2Zvcih2YXIgUz1IbyhpKSxBPSExLEU9MCx4PXQuZW51bTtFPHgubGVuZ3RoO0UrKyl7dmFyIE49eFtFXTtpZihhaShTLE4pKXtBPSEwO2JyZWFrfX1uLmVudW1WYWx1ZXM9dC5lbnVtLG4uZW51bVZhbHVlTWF0Y2g9QSxBfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxjb2RlOnZvLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fElvKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0LmVudW0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9KSkuam9pbigiLCAiKSl9KX1pZihjaSh0LmNvbnN0KSl7YWkoUz1IbyhpKSx0LmNvbnN0KT9uLmVudW1WYWx1ZU1hdGNoPSEwOihuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxjb2RlOnZvLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fElvKCJjb25zdFdhcm5pbmciLCJWYWx1ZSBtdXN0IGJlIHswfS4iLEpTT04uc3RyaW5naWZ5KHQuY29uc3QpKX0pLG4uZW51bVZhbHVlTWF0Y2g9ITEpLG4uZW51bVZhbHVlcz1bdC5jb25zdF19dC5kZXByZWNhdGlvbk1lc3NhZ2UmJmkucGFyZW50JiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5wYXJlbnQub2Zmc2V0LGxlbmd0aDppLnBhcmVudC5sZW5ndGh9LHNldmVyaXR5OlRyLldhcm5pbmcsbWVzc2FnZTp0LmRlcHJlY2F0aW9uTWVzc2FnZSxjb2RlOnZvLkRlcHJlY2F0ZWR9KX0oKSxyLmFkZCh7bm9kZTppLHNjaGVtYTp0fSl9fWZ1bmN0aW9uIFpvKGUsdCl7dmFyIG49W10scj0tMSxpPWUuZ2V0VGV4dCgpLG89dGkoaSwhMSksYT10JiZ0LmNvbGxlY3RDb21tZW50cz9bXTp2b2lkIDA7ZnVuY3Rpb24gcygpe2Zvcig7Oyl7dmFyIHQ9by5zY2FuKCk7c3dpdGNoKHUoKSx0KXtjYXNlIDEyOmNhc2UgMTM6QXJyYXkuaXNBcnJheShhKSYmYS5wdXNoKGZyLmNyZWF0ZShlLnBvc2l0aW9uQXQoby5nZXRUb2tlbk9mZnNldCgpKSxlLnBvc2l0aW9uQXQoby5nZXRUb2tlbk9mZnNldCgpK28uZ2V0VG9rZW5MZW5ndGgoKSkpKTticmVhaztjYXNlIDE1OmNhc2UgMTQ6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdH19fWZ1bmN0aW9uIGModCxpLG8sYSxzKXtpZih2b2lkIDA9PT1zJiYocz1Uci5FcnJvciksMD09PW4ubGVuZ3RofHxvIT09cil7dmFyIGM9ZnIuY3JlYXRlKGUucG9zaXRpb25BdChvKSxlLnBvc2l0aW9uQXQoYSkpO24ucHVzaChSci5jcmVhdGUoYyx0LHMsaSxlLmxhbmd1YWdlSWQpKSxyPW99fWZ1bmN0aW9uIGwoZSx0LG4scixhKXt2b2lkIDA9PT1uJiYobj12b2lkIDApLHZvaWQgMD09PXImJihyPVtdKSx2b2lkIDA9PT1hJiYoYT1bXSk7dmFyIGw9by5nZXRUb2tlbk9mZnNldCgpLHU9by5nZXRUb2tlbk9mZnNldCgpK28uZ2V0VG9rZW5MZW5ndGgoKTtpZihsPT09dSYmbD4wKXtmb3IobC0tO2w+MCYmL1xzLy50ZXN0KGkuY2hhckF0KGwpKTspbC0tO3U9bCsxfWlmKGMoZSx0LGwsdSksbiYmaChuLCExKSxyLmxlbmd0aCthLmxlbmd0aD4wKWZvcih2YXIgZj1vLmdldFRva2VuKCk7MTchPT1mOyl7aWYoLTEhPT1yLmluZGV4T2YoZikpe3MoKTticmVha31pZigtMSE9PWEuaW5kZXhPZihmKSlicmVhaztmPXMoKX1yZXR1cm4gbn1mdW5jdGlvbiB1KCl7c3dpdGNoKG8uZ2V0VG9rZW5FcnJvcigpKXtjYXNlIDQ6cmV0dXJuIGwoSW8oIkludmFsaWRVbmljb2RlIiwiSW52YWxpZCB1bmljb2RlIHNlcXVlbmNlIGluIHN0cmluZy4iKSx2by5JbnZhbGlkVW5pY29kZSksITA7Y2FzZSA1OnJldHVybiBsKElvKCJJbnZhbGlkRXNjYXBlQ2hhcmFjdGVyIiwiSW52YWxpZCBlc2NhcGUgY2hhcmFjdGVyIGluIHN0cmluZy4iKSx2by5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyKSwhMDtjYXNlIDM6cmV0dXJuIGwoSW8oIlVuZXhwZWN0ZWRFbmRPZk51bWJlciIsIlVuZXhwZWN0ZWQgZW5kIG9mIG51bWJlci4iKSx2by5VbmV4cGVjdGVkRW5kT2ZOdW1iZXIpLCEwO2Nhc2UgMTpyZXR1cm4gbChJbygiVW5leHBlY3RlZEVuZE9mQ29tbWVudCIsIlVuZXhwZWN0ZWQgZW5kIG9mIGNvbW1lbnQuIiksdm8uVW5leHBlY3RlZEVuZE9mQ29tbWVudCksITA7Y2FzZSAyOnJldHVybiBsKElvKCJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLCJVbmV4cGVjdGVkIGVuZCBvZiBzdHJpbmcuIiksdm8uVW5leHBlY3RlZEVuZE9mU3RyaW5nKSwhMDtjYXNlIDY6cmV0dXJuIGwoSW8oIkludmFsaWRDaGFyYWN0ZXIiLCJJbnZhbGlkIGNoYXJhY3RlcnMgaW4gc3RyaW5nLiBDb250cm9sIGNoYXJhY3RlcnMgbXVzdCBiZSBlc2NhcGVkLiIpLHZvLkludmFsaWRDaGFyYWN0ZXIpLCEwfXJldHVybiExfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gZS5sZW5ndGg9by5nZXRUb2tlbk9mZnNldCgpK28uZ2V0VG9rZW5MZW5ndGgoKS1lLm9mZnNldCx0JiZzKCksZX12YXIgZj1uZXcgS28odm9pZCAwLDAsMCk7ZnVuY3Rpb24gZCh0LG4pe3ZhciByPW5ldyBqbyh0LG8uZ2V0VG9rZW5PZmZzZXQoKSxmKSxpPW0ocik7aWYoIWkpe2lmKDE2IT09by5nZXRUb2tlbigpKXJldHVybjtsKElvKCJEb3VibGVRdW90ZXNFeHBlY3RlZCIsIlByb3BlcnR5IGtleXMgbXVzdCBiZSBkb3VibGVxdW90ZWQiKSx2by5VbmRlZmluZWQpO3ZhciBhPW5ldyBLbyhyLG8uZ2V0VG9rZW5PZmZzZXQoKSxvLmdldFRva2VuTGVuZ3RoKCkpO2EudmFsdWU9by5nZXRUb2tlblZhbHVlKCksaT1hLHMoKX1yLmtleU5vZGU9aTt2YXIgdT1uW2kudmFsdWVdO2lmKHU/KGMoSW8oIkR1cGxpY2F0ZUtleVdhcm5pbmciLCJEdXBsaWNhdGUgb2JqZWN0IGtleSIpLHZvLkR1cGxpY2F0ZUtleSxyLmtleU5vZGUub2Zmc2V0LHIua2V5Tm9kZS5vZmZzZXQrci5rZXlOb2RlLmxlbmd0aCxUci5XYXJuaW5nKSwib2JqZWN0Ij09dHlwZW9mIHUmJmMoSW8oIkR1cGxpY2F0ZUtleVdhcm5pbmciLCJEdXBsaWNhdGUgb2JqZWN0IGtleSIpLHZvLkR1cGxpY2F0ZUtleSx1LmtleU5vZGUub2Zmc2V0LHUua2V5Tm9kZS5vZmZzZXQrdS5rZXlOb2RlLmxlbmd0aCxUci5XYXJuaW5nKSxuW2kudmFsdWVdPSEwKTpuW2kudmFsdWVdPXIsNj09PW8uZ2V0VG9rZW4oKSlyLmNvbG9uT2Zmc2V0PW8uZ2V0VG9rZW5PZmZzZXQoKSxzKCk7ZWxzZSBpZihsKElvKCJDb2xvbkV4cGVjdGVkIiwiQ29sb24gZXhwZWN0ZWQiKSx2by5Db2xvbkV4cGVjdGVkKSwxMD09PW8uZ2V0VG9rZW4oKSYmZS5wb3NpdGlvbkF0KGkub2Zmc2V0K2kubGVuZ3RoKS5saW5lPGUucG9zaXRpb25BdChvLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUpcmV0dXJuIHIubGVuZ3RoPWkubGVuZ3RoLHI7dmFyIGg9ZyhyKTtyZXR1cm4gaD8oci52YWx1ZU5vZGU9aCxyLmxlbmd0aD1oLm9mZnNldCtoLmxlbmd0aC1yLm9mZnNldCxyKTpsKElvKCJWYWx1ZUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSx2by5WYWx1ZUV4cGVjdGVkLHIsW10sWzIsNV0pfWZ1bmN0aW9uIG0oZSl7aWYoMTA9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyBLbyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSk7cmV0dXJuIHQudmFsdWU9by5nZXRUb2tlblZhbHVlKCksaCh0LCEwKX19ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoMz09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IEZvKGUsby5nZXRUb2tlbk9mZnNldCgpKTtzKCk7Zm9yKHZhciBuPSExOzQhPT1vLmdldFRva2VuKCkmJjE3IT09by5nZXRUb2tlbigpOyl7aWYoNT09PW8uZ2V0VG9rZW4oKSl7bnx8bChJbygiVmFsdWVFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksdm8uVmFsdWVFeHBlY3RlZCk7dmFyIHI9by5nZXRUb2tlbk9mZnNldCgpO2lmKHMoKSw0PT09by5nZXRUb2tlbigpKXtuJiZjKElvKCJUcmFpbGluZ0NvbW1hIiwiVHJhaWxpbmcgY29tbWEiKSx2by5UcmFpbGluZ0NvbW1hLHIscisxKTtjb250aW51ZX19ZWxzZSBuJiZsKElvKCJFeHBlY3RlZENvbW1hIiwiRXhwZWN0ZWQgY29tbWEiKSx2by5Db21tYUV4cGVjdGVkKTt2YXIgaT1nKHQpO2k/dC5pdGVtcy5wdXNoKGkpOmwoSW8oIlByb3BlcnR5RXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLHZvLlZhbHVlRXhwZWN0ZWQsdm9pZCAwLFtdLFs0LDVdKSxuPSEwfXJldHVybiA0IT09by5nZXRUb2tlbigpP2woSW8oIkV4cGVjdGVkQ2xvc2VCcmFja2V0IiwiRXhwZWN0ZWQgY29tbWEgb3IgY2xvc2luZyBicmFja2V0Iiksdm8uQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQsdCk6aCh0LCEwKX19KGUpfHxmdW5jdGlvbihlKXtpZigxPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgVW8oZSxvLmdldFRva2VuT2Zmc2V0KCkpLG49T2JqZWN0LmNyZWF0ZShudWxsKTtzKCk7Zm9yKHZhciByPSExOzIhPT1vLmdldFRva2VuKCkmJjE3IT09by5nZXRUb2tlbigpOyl7aWYoNT09PW8uZ2V0VG9rZW4oKSl7cnx8bChJbygiUHJvcGVydHlFeHBlY3RlZCIsIlByb3BlcnR5IGV4cGVjdGVkIiksdm8uUHJvcGVydHlFeHBlY3RlZCk7dmFyIGk9by5nZXRUb2tlbk9mZnNldCgpO2lmKHMoKSwyPT09by5nZXRUb2tlbigpKXtyJiZjKElvKCJUcmFpbGluZ0NvbW1hIiwiVHJhaWxpbmcgY29tbWEiKSx2by5UcmFpbGluZ0NvbW1hLGksaSsxKTtjb250aW51ZX19ZWxzZSByJiZsKElvKCJFeHBlY3RlZENvbW1hIiwiRXhwZWN0ZWQgY29tbWEiKSx2by5Db21tYUV4cGVjdGVkKTt2YXIgYT1kKHQsbik7YT90LnByb3BlcnRpZXMucHVzaChhKTpsKElvKCJQcm9wZXJ0eUV4cGVjdGVkIiwiUHJvcGVydHkgZXhwZWN0ZWQiKSx2by5Qcm9wZXJ0eUV4cGVjdGVkLHZvaWQgMCxbXSxbMiw1XSkscj0hMH1yZXR1cm4gMiE9PW8uZ2V0VG9rZW4oKT9sKElvKCJFeHBlY3RlZENsb3NlQnJhY2UiLCJFeHBlY3RlZCBjb21tYSBvciBjbG9zaW5nIGJyYWNlIiksdm8uQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZCx0KTpoKHQsITApfX0oZSl8fG0oZSl8fGZ1bmN0aW9uKGUpe2lmKDExPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgRG8oZSxvLmdldFRva2VuT2Zmc2V0KCkpO2lmKDA9PT1vLmdldFRva2VuRXJyb3IoKSl7dmFyIG49by5nZXRUb2tlblZhbHVlKCk7dHJ5e3ZhciByPUpTT04ucGFyc2Uobik7aWYoIXNpKHIpKXJldHVybiBsKElvKCJJbnZhbGlkTnVtYmVyRm9ybWF0IiwiSW52YWxpZCBudW1iZXIgZm9ybWF0LiIpLHZvLlVuZGVmaW5lZCx0KTt0LnZhbHVlPXJ9Y2F0Y2goZSl7cmV0dXJuIGwoSW8oIkludmFsaWROdW1iZXJGb3JtYXQiLCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksdm8uVW5kZWZpbmVkLHQpfXQuaXNJbnRlZ2VyPS0xPT09bi5pbmRleE9mKCIuIil9cmV0dXJuIGgodCwhMCl9fShlKXx8ZnVuY3Rpb24oZSl7c3dpdGNoKG8uZ2V0VG9rZW4oKSl7Y2FzZSA3OnJldHVybiBoKG5ldyBSbyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSksITApO2Nhc2UgODpyZXR1cm4gaChuZXcgVm8oZSwhMCxvLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtjYXNlIDk6cmV0dXJuIGgobmV3IFZvKGUsITEsby5nZXRUb2tlbk9mZnNldCgpKSwhMCk7ZGVmYXVsdDpyZXR1cm59fShlKX12YXIgcD12b2lkIDA7cmV0dXJuIDE3IT09cygpJiYoKHA9ZyhwKSk/MTchPT1vLmdldFRva2VuKCkmJmwoSW8oIkVuZCBvZiBmaWxlIGV4cGVjdGVkIiwiRW5kIG9mIGZpbGUgZXhwZWN0ZWQuIiksdm8uVW5kZWZpbmVkKTpsKElvKCJJbnZhbGlkIHN5bWJvbCIsIkV4cGVjdGVkIGEgSlNPTiBvYmplY3QsIGFycmF5IG9yIGxpdGVyYWwuIiksdm8uVW5kZWZpbmVkKSksbmV3IEpvKHAsbixhKX1mdW5jdGlvbiBZbyhlLHQsbil7aWYobnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZSl7dmFyIHI9dCsiXHQiO2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iW10iO2Zvcih2YXIgaT0iW1xuIixvPTA7bzxlLmxlbmd0aDtvKyspaSs9citZbyhlW29dLHIsbiksbzxlLmxlbmd0aC0xJiYoaSs9IiwiKSxpKz0iXG4iO3JldHVybiBpKz10KyJdIn12YXIgYT1PYmplY3Qua2V5cyhlKTtpZigwPT09YS5sZW5ndGgpcmV0dXJuInt9Ijtmb3IoaT0ie1xuIixvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aSs9citKU09OLnN0cmluZ2lmeShzKSsiOiAiK1lvKGVbc10scixuKSxvPGEubGVuZ3RoLTEmJihpKz0iLCIpLGkrPSJcbiJ9cmV0dXJuIGkrPXQrIn0ifXJldHVybiBuKGUpfXZhciBRbz1ObygpLGVhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49UHJvbWlzZSksdm9pZCAwPT09ciYmKHI9e30pLHRoaXMuc2NoZW1hU2VydmljZT1lLHRoaXMuY29udHJpYnV0aW9ucz10LHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPW4sdGhpcy5jbGllbnRDYXBhYmlsaXRpZXM9cn1yZXR1cm4gZS5wcm90b3R5cGUuZG9SZXNvbHZlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmNvbnRyaWJ1dGlvbnMubGVuZ3RoLTE7dD49MDt0LS0pe3ZhciBuPXRoaXMuY29udHJpYnV0aW9uc1t0XS5yZXNvbHZlQ29tcGxldGlvbjtpZihuKXt2YXIgcj1uKGUpO2lmKHIpcmV0dXJuIHJ9fXJldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvci5yZXNvbHZlKGUpfSxlLnByb3RvdHlwZS5kb0NvbXBsZXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLGk9e2l0ZW1zOltdLGlzSW5jb21wbGV0ZTohMX0sbz1lLmdldFRleHQoKSxhPWUub2Zmc2V0QXQodCkscz1uLmdldE5vZGVGcm9tT2Zmc2V0KGEsITApO2lmKHRoaXMuaXNJbkNvbW1lbnQoZSxzP3Mub2Zmc2V0OjAsYSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZShpKTtpZihzJiZhPT09cy5vZmZzZXQrcy5sZW5ndGgmJmE+MCl7dmFyIGM9b1thLTFdOygib2JqZWN0Ij09PXMudHlwZSYmIn0iPT09Y3x8ImFycmF5Ij09PXMudHlwZSYmIl0iPT09YykmJihzPXMucGFyZW50KX12YXIgbCx1PXRoaXMuZ2V0Q3VycmVudFdvcmQoZSxhKTtpZighc3x8InN0cmluZyIhPT1zLnR5cGUmJiJudW1iZXIiIT09cy50eXBlJiYiYm9vbGVhbiIhPT1zLnR5cGUmJiJudWxsIiE9PXMudHlwZSl7dmFyIGg9YS11Lmxlbmd0aDtoPjAmJiciJz09PW9baC0xXSYmaC0tLGw9ZnIuY3JlYXRlKGUucG9zaXRpb25BdChoKSx0KX1lbHNlIGw9ZnIuY3JlYXRlKGUucG9zaXRpb25BdChzLm9mZnNldCksZS5wb3NpdGlvbkF0KHMub2Zmc2V0K3MubGVuZ3RoKSk7dmFyIGY9e30sZD17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGFiZWwsbj1mW3RdO2lmKG4pbi5kb2N1bWVudGF0aW9ufHwobi5kb2N1bWVudGF0aW9uPWUuZG9jdW1lbnRhdGlvbiksbi5kZXRhaWx8fChuLmRldGFpbD1lLmRldGFpbCk7ZWxzZXtpZigodD10LnJlcGxhY2UoL1tcbl0vZywi4oa1IikpLmxlbmd0aD42MCl7dmFyIHI9dC5zdWJzdHIoMCw1NykudHJpbSgpKyIuLi4iO2Zbcl18fCh0PXIpfWwmJnZvaWQgMCE9PWUuaW5zZXJ0VGV4dCYmKGUudGV4dEVkaXQ9S3IucmVwbGFjZShsLGUuaW5zZXJ0VGV4dCkpLGUubGFiZWw9dCxmW3RdPWUsaS5pdGVtcy5wdXNoKGUpfX0sc2V0QXNJbmNvbXBsZXRlOmZ1bmN0aW9uKCl7aS5pc0luY29tcGxldGU9ITB9LGVycm9yOmZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoZSl9LGxvZzpmdW5jdGlvbihlKXtjb25zb2xlLmxvZyhlKX0sZ2V0TnVtYmVyT2ZQcm9wb3NhbHM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pdGVtcy5sZW5ndGh9fTtyZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLG4pLnRoZW4oKGZ1bmN0aW9uKHQpe3ZhciBjPVtdLGg9ITAsbT0iIixnPXZvaWQgMDtpZihzJiYic3RyaW5nIj09PXMudHlwZSl7dmFyIHA9cy5wYXJlbnQ7cCYmInByb3BlcnR5Ij09PXAudHlwZSYmcC5rZXlOb2RlPT09cyYmKGg9IXAudmFsdWVOb2RlLGc9cCxtPW8uc3Vic3RyKHMub2Zmc2V0KzEscy5sZW5ndGgtMikscCYmKHM9cC5wYXJlbnQpKX1pZihzJiYib2JqZWN0Ij09PXMudHlwZSl7aWYocy5vZmZzZXQ9PT1hKXJldHVybiBpO3MucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbihlKXtnJiZnPT09ZXx8KGZbZS5rZXlOb2RlLnZhbHVlXT1JaS5jcmVhdGUoIl9fIikpfSkpO3ZhciBiPSIiO2gmJihiPXIuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihlLGUub2Zmc2V0QXQobC5lbmQpKSksdD9yLmdldFByb3BlcnR5Q29tcGxldGlvbnModCxuLHMsaCxiLGQpOnIuZ2V0U2NoZW1hTGVzc1Byb3BlcnR5Q29tcGxldGlvbnMobixzLG0sZCk7dmFyIHY9em8ocyk7ci5jb250cmlidXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQuY29sbGVjdFByb3BlcnR5Q29tcGxldGlvbnMoZS51cmksdix1LGgsIiI9PT1iLGQpO24mJmMucHVzaChuKX0pKSwhdCYmdS5sZW5ndGg+MCYmJyInIT09by5jaGFyQXQoYS11Lmxlbmd0aC0xKSYmKGQuYWRkKHtraW5kOlNpLlByb3BlcnR5LGxhYmVsOnIuZ2V0TGFiZWxGb3JWYWx1ZSh1KSxpbnNlcnRUZXh0OnIuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KHUsdm9pZCAwLCExLGIpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSksZC5zZXRBc0luY29tcGxldGUoKSl9dmFyIHk9e307cmV0dXJuIHQ/ci5nZXRWYWx1ZUNvbXBsZXRpb25zKHQsbixzLGEsZSxkLHkpOnIuZ2V0U2NoZW1hTGVzc1ZhbHVlQ29tcGxldGlvbnMobixzLGEsZSxkKSxyLmNvbnRyaWJ1dGlvbnMubGVuZ3RoPjAmJnIuZ2V0Q29udHJpYnV0ZWRWYWx1ZUNvbXBsZXRpb25zKG4scyxhLGUsZCxjKSxyLnByb21pc2VDb25zdHJ1Y3Rvci5hbGwoYykudGhlbigoZnVuY3Rpb24oKXtpZigwPT09ZC5nZXROdW1iZXJPZlByb3Bvc2FscygpKXt2YXIgdD1hOyFzfHwic3RyaW5nIiE9PXMudHlwZSYmIm51bWJlciIhPT1zLnR5cGUmJiJib29sZWFuIiE9PXMudHlwZSYmIm51bGwiIT09cy50eXBlfHwodD1zLm9mZnNldCtzLmxlbmd0aCk7dmFyIG49ci5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGUsdCk7ci5hZGRGaWxsZXJWYWx1ZUNvbXBsZXRpb25zKHksbixkKX1yZXR1cm4gaX0pKX0pKX0sZS5wcm90b3R5cGUuZ2V0UHJvcGVydHlDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9dGhpczt0LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxuLm9mZnNldCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5ub2RlPT09biYmIWUuaW52ZXJ0ZWQpe3ZhciB0PWUuc2NoZW1hLnByb3BlcnRpZXM7dCYmT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtpZigib2JqZWN0Ij09dHlwZW9mIG4mJiFuLmRlcHJlY2F0aW9uTWVzc2FnZSYmIW4uZG9Ob3RTdWdnZXN0KXt2YXIgcz17a2luZDpTaS5Qcm9wZXJ0eSxsYWJlbDplLGluc2VydFRleHQ6YS5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoZSxuLHIsaSksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGZpbHRlclRleHQ6YS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoZSksZG9jdW1lbnRhdGlvbjphLmZyb21NYXJrdXAobi5tYXJrZG93bkRlc2NyaXB0aW9uKXx8bi5kZXNjcmlwdGlvbnx8IiJ9O3ZvaWQgMCE9PW4uc3VnZ2VzdFNvcnRUZXh0JiYocy5zb3J0VGV4dD1uLnN1Z2dlc3RTb3J0VGV4dCkscy5pbnNlcnRUZXh0JiZ1aShzLmluc2VydFRleHQsIiQxIi5jb25jYXQoaSkpJiYocy5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxvLmFkZChzKX19KSk7dmFyIHM9ZS5zY2hlbWEucHJvcGVydHlOYW1lcztpZigib2JqZWN0Ij09dHlwZW9mIHMmJiFzLmRlcHJlY2F0aW9uTWVzc2FnZSYmIXMuZG9Ob3RTdWdnZXN0KXt2YXIgYz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCk7dmFyIG49e2tpbmQ6U2kuUHJvcGVydHksbGFiZWw6ZSxpbnNlcnRUZXh0OmEuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGUsdm9pZCAwLHIsaSksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGZpbHRlclRleHQ6YS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoZSksZG9jdW1lbnRhdGlvbjp0fHxhLmZyb21NYXJrdXAocy5tYXJrZG93bkRlc2NyaXB0aW9uKXx8cy5kZXNjcmlwdGlvbnx8IiJ9O3ZvaWQgMCE9PXMuc3VnZ2VzdFNvcnRUZXh0JiYobi5zb3J0VGV4dD1zLnN1Z2dlc3RTb3J0VGV4dCksbi5pbnNlcnRUZXh0JiZ1aShuLmluc2VydFRleHQsIiQxIi5jb25jYXQoaSkpJiYobi5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxvLmFkZChuKX07aWYocy5lbnVtKWZvcih2YXIgbD0wO2w8cy5lbnVtLmxlbmd0aDtsKyspe3ZhciB1PXZvaWQgMDtzLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmbDxzLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGg/dT1hLmZyb21NYXJrdXAocy5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbbF0pOnMuZW51bURlc2NyaXB0aW9ucyYmbDxzLmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYodT1zLmVudW1EZXNjcmlwdGlvbnNbbF0pLGMocy5lbnVtW2xdLHUpfXMuY29uc3QmJmMocy5jb25zdCl9fX0pKX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hTGVzc1Byb3BlcnR5Q29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGUpe2UucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmtleU5vZGUudmFsdWU7ci5hZGQoe2tpbmQ6U2kuUHJvcGVydHksbGFiZWw6dCxpbnNlcnRUZXh0OmkuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHQsIiIpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxmaWx0ZXJUZXh0OmkuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKHQpLGRvY3VtZW50YXRpb246IiJ9KX0pKX07aWYodC5wYXJlbnQpaWYoInByb3BlcnR5Ij09PXQucGFyZW50LnR5cGUpe3ZhciBhPXQucGFyZW50LmtleU5vZGUudmFsdWU7ZS52aXNpdCgoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZSE9PXQucGFyZW50JiZlLmtleU5vZGUudmFsdWU9PT1hJiZlLnZhbHVlTm9kZSYmIm9iamVjdCI9PT1lLnZhbHVlTm9kZS50eXBlJiZvKGUudmFsdWVOb2RlKSwhMH0pKX1lbHNlImFycmF5Ij09PXQucGFyZW50LnR5cGUmJnQucGFyZW50Lml0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKGUpeyJvYmplY3QiPT09ZS50eXBlJiZlIT09dCYmbyhlKX0pKTtlbHNlIm9iamVjdCI9PT10LnR5cGUmJnIuYWRkKHtraW5kOlNpLlByb3BlcnR5LGxhYmVsOiIkc2NoZW1hIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KCIkc2NoZW1hIix2b2lkIDAsITAsIiIpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOiIiLGZpbHRlclRleHQ6dGhpcy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoIiRzY2hlbWEiKX0pfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPXRoaXMsYT1uO2lmKCF0fHwic3RyaW5nIiE9PXQudHlwZSYmIm51bWJlciIhPT10LnR5cGUmJiJib29sZWFuIiE9PXQudHlwZSYmIm51bGwiIT09dC50eXBlfHwoYT10Lm9mZnNldCt0Lmxlbmd0aCx0PXQucGFyZW50KSwhdClyZXR1cm4gaS5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6IkVtcHR5IG9iamVjdCIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSwiIiksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSx2b2lkIGkuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IkVtcHR5IGFycmF5IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pO3ZhciBzPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihyLGEpLGM9ZnVuY3Rpb24oZSl7ZS5wYXJlbnQmJiFHbyhlLnBhcmVudCxuLCEwKSYmaS5hZGQoe2tpbmQ6by5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOm8uZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlKGUsciksaW5zZXJ0VGV4dDpvLmdldEluc2VydFRleHRGb3JNYXRjaGluZ05vZGUoZSxyLHMpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSksImJvb2xlYW4iPT09ZS50eXBlJiZvLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb24oIWUudmFsdWUscyxpKX07aWYoInByb3BlcnR5Ij09PXQudHlwZSYmbj4odC5jb2xvbk9mZnNldHx8MCkpe3ZhciBsPXQudmFsdWVOb2RlO2lmKGwmJihuPmwub2Zmc2V0K2wubGVuZ3RofHwib2JqZWN0Ij09PWwudHlwZXx8ImFycmF5Ij09PWwudHlwZSkpcmV0dXJuO3ZhciB1PXQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KChmdW5jdGlvbihlKXtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiZlLmtleU5vZGUudmFsdWU9PT11JiZlLnZhbHVlTm9kZSYmYyhlLnZhbHVlTm9kZSksITB9KSksIiRzY2hlbWEiPT09dSYmdC5wYXJlbnQmJiF0LnBhcmVudC5wYXJlbnQmJnRoaXMuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnMocyxpKX1pZigiYXJyYXkiPT09dC50eXBlKWlmKHQucGFyZW50JiYicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIGg9dC5wYXJlbnQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KChmdW5jdGlvbihlKXtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiZlLmtleU5vZGUudmFsdWU9PT1oJiZlLnZhbHVlTm9kZSYmImFycmF5Ij09PWUudmFsdWVOb2RlLnR5cGUmJmUudmFsdWVOb2RlLml0ZW1zLmZvckVhY2goYyksITB9KSl9ZWxzZSB0Lml0ZW1zLmZvckVhY2goYyl9LGUucHJvdG90eXBlLmdldFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9cixjPXZvaWQgMCxsPXZvaWQgMDtpZighbnx8InN0cmluZyIhPT1uLnR5cGUmJiJudW1iZXIiIT09bi50eXBlJiYiYm9vbGVhbiIhPT1uLnR5cGUmJiJudWxsIiE9PW4udHlwZXx8KHM9bi5vZmZzZXQrbi5sZW5ndGgsbD1uLG49bi5wYXJlbnQpLG4pe2lmKCJwcm9wZXJ0eSI9PT1uLnR5cGUmJnI+KG4uY29sb25PZmZzZXR8fDApKXt2YXIgdT1uLnZhbHVlTm9kZTtpZih1JiZyPnUub2Zmc2V0K3UubGVuZ3RoKXJldHVybjtjPW4ua2V5Tm9kZS52YWx1ZSxuPW4ucGFyZW50fWlmKG4mJih2b2lkIDAhPT1jfHwiYXJyYXkiPT09bi50eXBlKSl7Zm9yKHZhciBoPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihpLHMpLGY9MCxkPXQuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLG4ub2Zmc2V0LGwpO2Y8ZC5sZW5ndGg7ZisrKXt2YXIgbT1kW2ZdO2lmKG0ubm9kZT09PW4mJiFtLmludmVydGVkJiZtLnNjaGVtYSl7aWYoImFycmF5Ij09PW4udHlwZSYmbS5zY2hlbWEuaXRlbXMpaWYoQXJyYXkuaXNBcnJheShtLnNjaGVtYS5pdGVtcykpe3ZhciBnPXRoaXMuZmluZEl0ZW1BdE9mZnNldChuLGkscik7ZzxtLnNjaGVtYS5pdGVtcy5sZW5ndGgmJnRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhtLnNjaGVtYS5pdGVtc1tnXSxoLG8sYSl9ZWxzZSB0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMobS5zY2hlbWEuaXRlbXMsaCxvLGEpO2lmKHZvaWQgMCE9PWMpe3ZhciBwPSExO2lmKG0uc2NoZW1hLnByb3BlcnRpZXMpKHc9bS5zY2hlbWEucHJvcGVydGllc1tjXSkmJihwPSEwLHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyh3LGgsbyxhKSk7aWYobS5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMmJiFwKWZvcih2YXIgYj0wLHY9T2JqZWN0LmtleXMobS5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMpO2I8di5sZW5ndGg7YisrKXt2YXIgeT12W2JdLEM9aGkoeSk7aWYobnVsbD09Qz92b2lkIDA6Qy50ZXN0KGMpKXtwPSEwO3ZhciB3PW0uc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzW3ldO3RoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyh3LGgsbyxhKX19aWYobS5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMmJiFwKXt3PW0uc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO3RoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyh3LGgsbyxhKX19fX0iJHNjaGVtYSIhPT1jfHxuLnBhcmVudHx8dGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhoLG8pLGEuYm9vbGVhbiYmKHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMCxoLG8pLHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMSxoLG8pKSxhLm51bGwmJnRoaXMuYWRkTnVsbFZhbHVlQ29tcGxldGlvbihoLG8pfX1lbHNlIHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLnNjaGVtYSwiIixvLGEpfSxlLnByb3RvdHlwZS5nZXRDb250cmlidXRlZFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpLG8pe2lmKHQpe2lmKCJzdHJpbmciIT09dC50eXBlJiYibnVtYmVyIiE9PXQudHlwZSYmImJvb2xlYW4iIT09dC50eXBlJiYibnVsbCIhPT10LnR5cGV8fCh0PXQucGFyZW50KSx0JiYicHJvcGVydHkiPT09dC50eXBlJiZuPih0LmNvbG9uT2Zmc2V0fHwwKSl7dmFyIGE9dC5rZXlOb2RlLnZhbHVlLHM9dC52YWx1ZU5vZGU7aWYoKCFzfHxuPD1zLm9mZnNldCtzLmxlbmd0aCkmJnQucGFyZW50KXt2YXIgYz16byh0LnBhcmVudCk7dGhpcy5jb250cmlidXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sbGVjdFZhbHVlQ29tcGxldGlvbnMoci51cmksYyxhLGkpO3QmJm8ucHVzaCh0KX0pKX19fWVsc2UgdGhpcy5jb250cmlidXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sbGVjdERlZmF1bHRDb21wbGV0aW9ucyhyLnVyaSxpKTt0JiZvLnB1c2godCl9KSl9LGUucHJvdG90eXBlLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpczsib2JqZWN0Ij09dHlwZW9mIGUmJih0aGlzLmFkZEVudW1WYWx1ZUNvbXBsZXRpb25zKGUsdCxuKSx0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKGUsdCxuKSx0aGlzLmNvbGxlY3RUeXBlcyhlLHIpLEFycmF5LmlzQXJyYXkoZS5hbGxPZikmJmUuYWxsT2YuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQsbixyKX0pKSxBcnJheS5pc0FycmF5KGUuYW55T2YpJiZlLmFueU9mLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LG4scil9KSksQXJyYXkuaXNBcnJheShlLm9uZU9mKSYmZS5vbmVPZi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIpfSkpKX0sZS5wcm90b3R5cGUuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpczt2b2lkIDA9PT1yJiYocj0wKTt2YXIgbz0hMTtpZihjaShlLmRlZmF1bHQpKXtmb3IodmFyIGE9ZS50eXBlLHM9ZS5kZWZhdWx0LGM9cjtjPjA7Yy0tKXM9W3NdLGE9ImFycmF5IjtuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGEpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShzKSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHMsdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRldGFpbDpRbygianNvbi5zdWdnZXN0LmRlZmF1bHQiLCJEZWZhdWx0IHZhbHVlIil9KSxvPSEwfUFycmF5LmlzQXJyYXkoZS5leGFtcGxlcykmJmUuZXhhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oYSl7Zm9yKHZhciBzPWUudHlwZSxjPWEsbD1yO2w+MDtsLS0pYz1bY10scz0iYXJyYXkiO24uYWRkKHtraW5kOmkuZ2V0U3VnZ2VzdGlvbktpbmQocyksbGFiZWw6aS5nZXRMYWJlbEZvclZhbHVlKGMpLGluc2VydFRleHQ6aS5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoYyx0KSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXR9KSxvPSEwfSkpLEFycmF5LmlzQXJyYXkoZS5kZWZhdWx0U25pcHBldHMpJiZlLmRlZmF1bHRTbmlwcGV0cy5mb3JFYWNoKChmdW5jdGlvbihhKXt2YXIgcyxjLGw9ZS50eXBlLHU9YS5ib2R5LGg9YS5sYWJlbDtpZihjaSh1KSl7ZS50eXBlO2Zvcih2YXIgZj1yO2Y+MDtmLS0pdT1bdV07cz1pLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWUodSx0KSxjPWkuZ2V0RmlsdGVyVGV4dEZvclNuaXBwZXRWYWx1ZSh1KSxoPWh8fGkuZ2V0TGFiZWxGb3JTbmlwcGV0VmFsdWUodSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGEuYm9keVRleHQpcmV0dXJuO3ZhciBkPSIiLG09IiIsZz0iIjtmb3IoZj1yO2Y+MDtmLS0pZD1kK2crIltcbiIsbT1tKyJcbiIrZysiXSIsZys9Ilx0IixsPSJhcnJheSI7cz1kK2crYS5ib2R5VGV4dC5zcGxpdCgiXG4iKS5qb2luKCJcbiIrZykrbSt0LGg9aHx8cyxjPXMucmVwbGFjZSgvW1xuXS9nLCIiKX1uLmFkZCh7a2luZDppLmdldFN1Z2dlc3Rpb25LaW5kKGwpLGxhYmVsOmgsZG9jdW1lbnRhdGlvbjppLmZyb21NYXJrdXAoYS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8YS5kZXNjcmlwdGlvbixpbnNlcnRUZXh0OnMsaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGZpbHRlclRleHQ6Y30pLG89ITB9KSksIW8mJiJvYmplY3QiPT10eXBlb2YgZS5pdGVtcyYmIUFycmF5LmlzQXJyYXkoZS5pdGVtcykmJnI8NSYmdGhpcy5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucyhlLml0ZW1zLHQsbixyKzEpfSxlLnByb3RvdHlwZS5hZGRFbnVtVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbil7aWYoY2koZS5jb25zdCkmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUoZS5jb25zdCksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLmNvbnN0LHQpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOnRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRGVzY3JpcHRpb24pfHxlLmRlc2NyaXB0aW9ufSksQXJyYXkuaXNBcnJheShlLmVudW0pKWZvcih2YXIgcj0wLGk9ZS5lbnVtLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1lLmVudW1bcl0sYT10aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8ZS5kZXNjcmlwdGlvbjtlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmcjxlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJnRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpP2E9dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW3JdKTplLmVudW1EZXNjcmlwdGlvbnMmJnI8ZS5lbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmKGE9ZS5lbnVtRGVzY3JpcHRpb25zW3JdKSxuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKG8pLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUobyx0KSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjphfSl9fSxlLnByb3RvdHlwZS5jb2xsZWN0VHlwZXM9ZnVuY3Rpb24oZSx0KXtpZighQXJyYXkuaXNBcnJheShlLmVudW0pJiYhY2koZS5jb25zdCkpe3ZhciBuPWUudHlwZTtBcnJheS5pc0FycmF5KG4pP24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV09ITB9KSk6biYmKHRbbl09ITApfX0sZS5wcm90b3R5cGUuYWRkRmlsbGVyVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbil7ZS5vYmplY3QmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm9iamVjdCIpLGxhYmVsOiJ7fSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUoe30sdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRldGFpbDpRbygiZGVmYXVsdHMub2JqZWN0IiwiTmV3IG9iamVjdCIpLGRvY3VtZW50YXRpb246IiJ9KSxlLmFycmF5JiZuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJhcnJheSIpLGxhYmVsOiJbXSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUoW10sdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRldGFpbDpRbygiZGVmYXVsdHMuYXJyYXkiLCJOZXcgYXJyYXkiKSxkb2N1bWVudGF0aW9uOiIifSl9LGUucHJvdG90eXBlLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb249ZnVuY3Rpb24oZSx0LG4pe24uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImJvb2xlYW4iKSxsYWJlbDplPyJ0cnVlIjoiZmFsc2UiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGROdWxsVmFsdWVDb21wbGV0aW9uPWZ1bmN0aW9uKGUsdCl7dC5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgibnVsbCIpLGxhYmVsOiJudWxsIixpbnNlcnRUZXh0OiJudWxsIitlLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9LGUucHJvdG90eXBlLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMuc2NoZW1hU2VydmljZS5nZXRSZWdpc3RlcmVkU2NoZW1hSWRzKChmdW5jdGlvbihlKXtyZXR1cm4iaHR0cCI9PT1lfHwiaHR0cHMiPT09ZX0pKTtyLmZvckVhY2goKGZ1bmN0aW9uKHIpe3JldHVybiB0LmFkZCh7a2luZDpTaS5Nb2R1bGUsbGFiZWw6bi5nZXRMYWJlbEZvclZhbHVlKHIpLGZpbHRlclRleHQ6bi5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUociksaW5zZXJ0VGV4dDpuLmdldEluc2VydFRleHRGb3JWYWx1ZShyLGUpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9KSl9LGUucHJvdG90eXBlLmdldExhYmVsRm9yVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSxlLnByb3RvdHlwZS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSxlLnByb3RvdHlwZS5nZXRGaWx0ZXJUZXh0Rm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9cJFx7XGQrOihbXn1dKylcfXxcJFxkKy9nLCIkMSIpfSxlLnByb3RvdHlwZS5nZXRMYWJlbEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXCRce1xkKzooW159XSspXH18XCRcZCsvZywiJDEiKX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxcJFx9XS9nLCJcXCQmIil9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JWYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciBuPUpTT04uc3RyaW5naWZ5KGUsbnVsbCwiXHQiKTtyZXR1cm4ie30iPT09bj8ieyQxfSIrdDoiW10iPT09bj8iWyQxXSIrdDp0aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQobit0KX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbihlLHQpe3JldHVybiBZbyhlLCIiLChmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJiJeIj09PWVbMF0/ZS5zdWJzdHIoMSk6SlNPTi5zdHJpbmdpZnkoZSl9KSkrdH0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZT1mdW5jdGlvbihlLHQpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJvYmplY3QiOnJldHVybiBudWxsPT09ZT8iJHsxOm51bGx9Iit0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCk7Y2FzZSJzdHJpbmciOnZhciBuPUpTT04uc3RyaW5naWZ5KGUpO3JldHVybiBuPW4uc3Vic3RyKDEsbi5sZW5ndGgtMiksJyIkezE6Jysobj10aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQobikpKyd9IicrdDtjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4iJHsxOiIrSlNPTi5zdHJpbmdpZnkoZSkrIn0iK3R9cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCl9LGUucHJvdG90eXBlLmdldFN1Z2dlc3Rpb25LaW5kPWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciB0PWU7ZT10Lmxlbmd0aD4wP3RbMF06dm9pZCAwfWlmKCFlKXJldHVybiBTaS5WYWx1ZTtzd2l0Y2goZSl7Y2FzZSJzdHJpbmciOmRlZmF1bHQ6cmV0dXJuIFNpLlZhbHVlO2Nhc2Uib2JqZWN0IjpyZXR1cm4gU2kuTW9kdWxlO2Nhc2UicHJvcGVydHkiOnJldHVybiBTaS5Qcm9wZXJ0eX19LGUucHJvdG90eXBlLmdldExhYmVsVGV4dEZvck1hdGNoaW5nTm9kZT1mdW5jdGlvbihlLHQpe3N3aXRjaChlLnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiJbXSI7Y2FzZSJvYmplY3QiOnJldHVybiJ7fSI7ZGVmYXVsdDpyZXR1cm4gdC5nZXRUZXh0KCkuc3Vic3RyKGUub2Zmc2V0LGUubGVuZ3RoKX19LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JNYXRjaGluZ05vZGU9ZnVuY3Rpb24oZSx0LG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShbXSxuKTtjYXNlIm9iamVjdCI6cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHt9LG4pO2RlZmF1bHQ6dmFyIHI9dC5nZXRUZXh0KCkuc3Vic3RyKGUub2Zmc2V0LGUubGVuZ3RoKStuO3JldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQocil9fSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHk9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSwiIik7aWYoIW4pcmV0dXJuIGk7dmFyIG8sYT1pKyI6ICIscz0wO2lmKHQpe2lmKEFycmF5LmlzQXJyYXkodC5kZWZhdWx0U25pcHBldHMpKXtpZigxPT09dC5kZWZhdWx0U25pcHBldHMubGVuZ3RoKXt2YXIgYz10LmRlZmF1bHRTbmlwcGV0c1swXS5ib2R5O2NpKGMpJiYobz10aGlzLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWUoYywiIikpfXMrPXQuZGVmYXVsdFNuaXBwZXRzLmxlbmd0aH1pZih0LmVudW0mJihvfHwxIT09dC5lbnVtLmxlbmd0aHx8KG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZW51bVswXSwiIikpLHMrPXQuZW51bS5sZW5ndGgpLGNpKHQuZGVmYXVsdCkmJihvfHwobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5kZWZhdWx0LCIiKSkscysrKSxBcnJheS5pc0FycmF5KHQuZXhhbXBsZXMpJiZ0LmV4YW1wbGVzLmxlbmd0aCYmKG98fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmV4YW1wbGVzWzBdLCIiKSkscys9dC5leGFtcGxlcy5sZW5ndGgpLDA9PT1zKXt2YXIgbD1BcnJheS5pc0FycmF5KHQudHlwZSk/dC50eXBlWzBdOnQudHlwZTtzd2l0Y2gobHx8KHQucHJvcGVydGllcz9sPSJvYmplY3QiOnQuaXRlbXMmJihsPSJhcnJheSIpKSxsKXtjYXNlImJvb2xlYW4iOm89IiQxIjticmVhaztjYXNlInN0cmluZyI6bz0nIiQxIic7YnJlYWs7Y2FzZSJvYmplY3QiOm89InskMX0iO2JyZWFrO2Nhc2UiYXJyYXkiOm89IlskMV0iO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOm89IiR7MTowfSI7YnJlYWs7Y2FzZSJudWxsIjpvPSIkezE6bnVsbH0iO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGl9fX1yZXR1cm4oIW98fHM+MSkmJihvPSIkMSIpLGErbytyfSxlLnByb3RvdHlwZS5nZXRDdXJyZW50V29yZD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10LTEscj1lLmdldFRleHQoKTtuPj0wJiYtMT09PScgXHRcblxyXHYiOntbLF19Jy5pbmRleE9mKHIuY2hhckF0KG4pKTspbi0tO3JldHVybiByLnN1YnN0cmluZyhuKzEsdCl9LGUucHJvdG90eXBlLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aShlLmdldFRleHQoKSwhMCk7c3dpdGNoKG4uc2V0UG9zaXRpb24odCksbi5zY2FuKCkpe2Nhc2UgNTpjYXNlIDI6Y2FzZSA0OmNhc2UgMTc6cmV0dXJuIiI7ZGVmYXVsdDpyZXR1cm4iLCJ9fSxlLnByb3RvdHlwZS5maW5kSXRlbUF0T2Zmc2V0PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dGkodC5nZXRUZXh0KCksITApLGk9ZS5pdGVtcyxvPWkubGVuZ3RoLTE7bz49MDtvLS0pe3ZhciBhPWlbb107aWYobj5hLm9mZnNldCthLmxlbmd0aClyZXR1cm4gci5zZXRQb3NpdGlvbihhLm9mZnNldCthLmxlbmd0aCksNT09PXIuc2NhbigpJiZuPj1yLmdldFRva2VuT2Zmc2V0KCkrci5nZXRUb2tlbkxlbmd0aCgpP28rMTpvO2lmKG4+PWEub2Zmc2V0KXJldHVybiBvfXJldHVybiAwfSxlLnByb3RvdHlwZS5pc0luQ29tbWVudD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGkoZS5nZXRUZXh0KCksITEpO3Iuc2V0UG9zaXRpb24odCk7Zm9yKHZhciBpPXIuc2NhbigpOzE3IT09aSYmci5nZXRUb2tlbk9mZnNldCgpK3IuZ2V0VG9rZW5MZW5ndGgoKTxuOylpPXIuc2NhbigpO3JldHVybigxMj09PWl8fDEzPT09aSkmJnIuZ2V0VG9rZW5PZmZzZXQoKTw9bn0sZS5wcm90b3R5cGUuZnJvbU1hcmt1cD1mdW5jdGlvbihlKXtpZihlJiZ0aGlzLmRvZXNTdXBwb3J0TWFya2Rvd24oKSlyZXR1cm57a2luZDpDaS5NYXJrZG93bix2YWx1ZTplfX0sZS5wcm90b3R5cGUuZG9lc1N1cHBvcnRNYXJrZG93bj1mdW5jdGlvbigpe2lmKCFjaSh0aGlzLnN1cHBvcnRzTWFya2Rvd24pKXt2YXIgZT10aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQmJnRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudC5jb21wbGV0aW9uO3RoaXMuc3VwcG9ydHNNYXJrZG93bj1lJiZlLmNvbXBsZXRpb25JdGVtJiZBcnJheS5pc0FycmF5KGUuY29tcGxldGlvbkl0ZW0uZG9jdW1lbnRhdGlvbkZvcm1hdCkmJi0xIT09ZS5jb21wbGV0aW9uSXRlbS5kb2N1bWVudGF0aW9uRm9ybWF0LmluZGV4T2YoQ2kuTWFya2Rvd24pfXJldHVybiB0aGlzLnN1cHBvcnRzTWFya2Rvd259LGUucHJvdG90eXBlLmRvZXNTdXBwb3J0c0NvbW1pdENoYXJhY3RlcnM9ZnVuY3Rpb24oKXtpZighY2kodGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnMpKXt2YXIgZT10aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQmJnRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudC5jb21wbGV0aW9uO3RoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzPWUmJmUuY29tcGxldGlvbkl0ZW0mJiEhZS5jb21wbGV0aW9uSXRlbS5jb21taXRDaGFyYWN0ZXJzU3VwcG9ydH1yZXR1cm4gdGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnN9LGV9KCksdGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zY2hlbWFTZXJ2aWNlPWUsdGhpcy5jb250cmlidXRpb25zPXQsdGhpcy5wcm9taXNlPW58fFByb21pc2V9cmV0dXJuIGUucHJvdG90eXBlLmRvSG92ZXI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUub2Zmc2V0QXQodCksaT1uLmdldE5vZGVGcm9tT2Zmc2V0KHIpO2lmKCFpfHwoIm9iamVjdCI9PT1pLnR5cGV8fCJhcnJheSI9PT1pLnR5cGUpJiZyPmkub2Zmc2V0KzEmJnI8aS5vZmZzZXQraS5sZW5ndGgtMSlyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobnVsbCk7dmFyIG89aTtpZigic3RyaW5nIj09PWkudHlwZSl7dmFyIGE9aS5wYXJlbnQ7aWYoYSYmInByb3BlcnR5Ij09PWEudHlwZSYmYS5rZXlOb2RlPT09aSYmIShpPWEudmFsdWVOb2RlKSlyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobnVsbCl9Zm9yKHZhciBzPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQoby5vZmZzZXQpLGUucG9zaXRpb25BdChvLm9mZnNldCtvLmxlbmd0aCkpLGM9ZnVuY3Rpb24oZSl7cmV0dXJue2NvbnRlbnRzOmUscmFuZ2U6c319LGw9em8oaSksdT10aGlzLmNvbnRyaWJ1dGlvbnMubGVuZ3RoLTE7dT49MDt1LS0pe3ZhciBoPXRoaXMuY29udHJpYnV0aW9uc1t1XS5nZXRJbmZvQ29udHJpYnV0aW9uKGUudXJpLGwpO2lmKGgpcmV0dXJuIGgudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSl9KSl9cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSxuKS50aGVuKChmdW5jdGlvbihlKXtpZihlJiZpKXt2YXIgdD1uLmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxpLm9mZnNldCkscj12b2lkIDAsbz12b2lkIDAsYT12b2lkIDAscz12b2lkIDA7dC5ldmVyeSgoZnVuY3Rpb24oZSl7aWYoZS5ub2RlPT09aSYmIWUuaW52ZXJ0ZWQmJmUuc2NoZW1hJiYocj1yfHxlLnNjaGVtYS50aXRsZSxvPW98fGUuc2NoZW1hLm1hcmtkb3duRGVzY3JpcHRpb258fG5hKGUuc2NoZW1hLmRlc2NyaXB0aW9uKSxlLnNjaGVtYS5lbnVtKSl7dmFyIHQ9ZS5zY2hlbWEuZW51bS5pbmRleE9mKEhvKGkpKTtlLnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnM/YT1lLnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbdF06ZS5zY2hlbWEuZW51bURlc2NyaXB0aW9ucyYmKGE9bmEoZS5zY2hlbWEuZW51bURlc2NyaXB0aW9uc1t0XSkpLGEmJiJzdHJpbmciIT10eXBlb2Yocz1lLnNjaGVtYS5lbnVtW3RdKSYmKHM9SlNPTi5zdHJpbmdpZnkocykpfXJldHVybiEwfSkpO3ZhciBsPSIiO3JldHVybiByJiYobD1uYShyKSksbyYmKGwubGVuZ3RoPjAmJihsKz0iXG5cbiIpLGwrPW8pLGEmJihsLmxlbmd0aD4wJiYobCs9IlxuXG4iKSxsKz0iYCIuY29uY2F0KGZ1bmN0aW9uKGUpe2lmKC0xIT09ZS5pbmRleE9mKCJgIikpcmV0dXJuImBgICIrZSsiIGBgIjtyZXR1cm4gZX0ocyksImA6ICIpLmNvbmNhdChhKSksYyhbbF0pfXJldHVybiBudWxsfSkpfSxlfSgpO2Z1bmN0aW9uIG5hKGUpe2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvKFteXG5ccl0pKFxyP1xuKShbXlxuXHJdKS9nbSwiJDFcblxuJDMiKS5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9dmFyIHJhPU5vKCksaWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5qc29uU2NoZW1hU2VydmljZT1lLHRoaXMucHJvbWlzZT10LHRoaXMudmFsaWRhdGlvbkVuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmNvbmZpZ3VyZT1mdW5jdGlvbihlKXtlJiYodGhpcy52YWxpZGF0aW9uRW5hYmxlZD0hMSE9PWUudmFsaWRhdGUsdGhpcy5jb21tZW50U2V2ZXJpdHk9ZS5hbGxvd0NvbW1lbnRzP3ZvaWQgMDpUci5FcnJvcil9LGUucHJvdG90eXBlLmRvVmFsaWRhdGlvbj1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzO2lmKCF0aGlzLnZhbGlkYXRpb25FbmFibGVkKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShbXSk7dmFyIG89W10sYT17fSxzPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmFuZ2Uuc3RhcnQubGluZSsiICIrZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXIrIiAiK2UubWVzc2FnZTthW3RdfHwoYVt0XT0hMCxvLnB1c2goZSkpfSxjPWZ1bmN0aW9uKHIpe3ZhciBhPShudWxsPT1uP3ZvaWQgMDpuLnRyYWlsaW5nQ29tbWFzKT9jYShuLnRyYWlsaW5nQ29tbWFzKTpUci5FcnJvcixjPShudWxsPT1uP3ZvaWQgMDpuLmNvbW1lbnRzKT9jYShuLmNvbW1lbnRzKTppLmNvbW1lbnRTZXZlcml0eSxsPShudWxsPT1uP3ZvaWQgMDpuLnNjaGVtYVZhbGlkYXRpb24pP2NhKG4uc2NoZW1hVmFsaWRhdGlvbik6VHIuV2FybmluZyx1PShudWxsPT1uP3ZvaWQgMDpuLnNjaGVtYVJlcXVlc3QpP2NhKG4uc2NoZW1hUmVxdWVzdCk6VHIuV2FybmluZztpZihyKXtpZihyLmVycm9ycy5sZW5ndGgmJnQucm9vdCYmdSl7dmFyIGg9dC5yb290LGY9Im9iamVjdCI9PT1oLnR5cGU/aC5wcm9wZXJ0aWVzWzBdOnZvaWQgMDtpZihmJiYiJHNjaGVtYSI9PT1mLmtleU5vZGUudmFsdWUpe3ZhciBkPWYudmFsdWVOb2RlfHxmLG09ZnIuY3JlYXRlKGUucG9zaXRpb25BdChkLm9mZnNldCksZS5wb3NpdGlvbkF0KGQub2Zmc2V0K2QubGVuZ3RoKSk7cyhSci5jcmVhdGUobSxyLmVycm9yc1swXSx1LHZvLlNjaGVtYVJlc29sdmVFcnJvcikpfWVsc2V7bT1mci5jcmVhdGUoZS5wb3NpdGlvbkF0KGgub2Zmc2V0KSxlLnBvc2l0aW9uQXQoaC5vZmZzZXQrMSkpO3MoUnIuY3JlYXRlKG0sci5lcnJvcnNbMF0sdSx2by5TY2hlbWFSZXNvbHZlRXJyb3IpKX19ZWxzZSBpZihsKXt2YXIgZz10LnZhbGlkYXRlKGUsci5zY2hlbWEsbCk7ZyYmZy5mb3JFYWNoKHMpfWFhKHIuc2NoZW1hKSYmKGM9dm9pZCAwKSxzYShyLnNjaGVtYSkmJihhPXZvaWQgMCl9Zm9yKHZhciBwPTAsYj10LnN5bnRheEVycm9ycztwPGIubGVuZ3RoO3ArKyl7dmFyIHY9YltwXTtpZih2LmNvZGU9PT12by5UcmFpbGluZ0NvbW1hKXtpZigibnVtYmVyIiE9dHlwZW9mIGEpY29udGludWU7di5zZXZlcml0eT1hfXModil9aWYoIm51bWJlciI9PXR5cGVvZiBjKXt2YXIgeT1yYSgiSW52YWxpZENvbW1lbnRUb2tlbiIsIkNvbW1lbnRzIGFyZSBub3QgcGVybWl0dGVkIGluIEpTT04uIik7dC5jb21tZW50cy5mb3JFYWNoKChmdW5jdGlvbihlKXtzKFJyLmNyZWF0ZShlLHksYyx2by5Db21tZW50Tm90UGVybWl0dGVkKSl9KSl9cmV0dXJuIG99O2lmKHIpe3ZhciBsPXIuaWR8fCJzY2hlbWFzZXJ2aWNlOi8vdW50aXRsZWQvIitvYSsrO3JldHVybiB0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWEobCxbXSxyKS5nZXRSZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBjKGUpfSkpfXJldHVybiB0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBjKGUpfSkpfSxlLnByb3RvdHlwZS5nZXRMYW5ndWFnZVN0YXR1cz1mdW5jdGlvbihlLHQpe3JldHVybntzY2hlbWFzOnRoaXMuanNvblNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hVVJJc0ZvclJlc291cmNlKGUudXJpLHQpfX0sZX0oKSxvYT0wO2Z1bmN0aW9uIGFhKGUpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7aWYobGkoZS5hbGxvd0NvbW1lbnRzKSlyZXR1cm4gZS5hbGxvd0NvbW1lbnRzO2lmKGUuYWxsT2YpZm9yKHZhciB0PTAsbj1lLmFsbE9mO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1hYShuW3RdKTtpZihsaShyKSlyZXR1cm4gcn19fWZ1bmN0aW9uIHNhKGUpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7aWYobGkoZS5hbGxvd1RyYWlsaW5nQ29tbWFzKSlyZXR1cm4gZS5hbGxvd1RyYWlsaW5nQ29tbWFzO3ZhciB0PWU7aWYobGkodC5hbGxvd3NUcmFpbGluZ0NvbW1hcykpcmV0dXJuIHQuYWxsb3dzVHJhaWxpbmdDb21tYXM7aWYoZS5hbGxPZilmb3IodmFyIG49MCxyPWUuYWxsT2Y7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXNhKHJbbl0pO2lmKGxpKGkpKXJldHVybiBpfX19ZnVuY3Rpb24gY2EoZSl7c3dpdGNoKGUpe2Nhc2UiZXJyb3IiOnJldHVybiBUci5FcnJvcjtjYXNlIndhcm5pbmciOnJldHVybiBUci5XYXJuaW5nO2Nhc2UiaWdub3JlIjpyZXR1cm59fWZ1bmN0aW9uIGxhKGUpe3JldHVybiBlPDQ4PzA6ZTw9NTc/ZS00ODooZTw5NyYmKGUrPTMyKSxlPj05NyYmZTw9MTAyP2UtOTcrMTA6MCl9ZnVuY3Rpb24gdWEoZSl7aWYoIiMiPT09ZVswXSlzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgNDpyZXR1cm57cmVkOjE3KmxhKGUuY2hhckNvZGVBdCgxKSkvMjU1LGdyZWVuOjE3KmxhKGUuY2hhckNvZGVBdCgyKSkvMjU1LGJsdWU6MTcqbGEoZS5jaGFyQ29kZUF0KDMpKS8yNTUsYWxwaGE6MX07Y2FzZSA1OnJldHVybntyZWQ6MTcqbGEoZS5jaGFyQ29kZUF0KDEpKS8yNTUsZ3JlZW46MTcqbGEoZS5jaGFyQ29kZUF0KDIpKS8yNTUsYmx1ZToxNypsYShlLmNoYXJDb2RlQXQoMykpLzI1NSxhbHBoYToxNypsYShlLmNoYXJDb2RlQXQoNCkpLzI1NX07Y2FzZSA3OnJldHVybntyZWQ6KDE2KmxhKGUuY2hhckNvZGVBdCgxKSkrbGEoZS5jaGFyQ29kZUF0KDIpKSkvMjU1LGdyZWVuOigxNipsYShlLmNoYXJDb2RlQXQoMykpK2xhKGUuY2hhckNvZGVBdCg0KSkpLzI1NSxibHVlOigxNipsYShlLmNoYXJDb2RlQXQoNSkpK2xhKGUuY2hhckNvZGVBdCg2KSkpLzI1NSxhbHBoYToxfTtjYXNlIDk6cmV0dXJue3JlZDooMTYqbGEoZS5jaGFyQ29kZUF0KDEpKStsYShlLmNoYXJDb2RlQXQoMikpKS8yNTUsZ3JlZW46KDE2KmxhKGUuY2hhckNvZGVBdCgzKSkrbGEoZS5jaGFyQ29kZUF0KDQpKSkvMjU1LGJsdWU6KDE2KmxhKGUuY2hhckNvZGVBdCg1KSkrbGEoZS5jaGFyQ29kZUF0KDYpKSkvMjU1LGFscGhhOigxNipsYShlLmNoYXJDb2RlQXQoNykpK2xhKGUuY2hhckNvZGVBdCg4KSkpLzI1NX19fXZhciBoYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5zY2hlbWFTZXJ2aWNlPWV9cmV0dXJuIGUucHJvdG90eXBlLmZpbmREb2N1bWVudFN5bWJvbHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49e3Jlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUV9KTt2YXIgaT10LnJvb3Q7aWYoIWkpcmV0dXJuW107dmFyIG89bi5yZXN1bHRMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRSxhPWUudXJpO2lmKCgidnNjb2RlOi8vZGVmYXVsdHNldHRpbmdzL2tleWJpbmRpbmdzLmpzb24iPT09YXx8dWkoYS50b0xvd2VyQ2FzZSgpLCIvdXNlci9rZXliaW5kaW5ncy5qc29uIikpJiYiYXJyYXkiPT09aS50eXBlKXtmb3IodmFyIHM9W10sYz0wLGw9aS5pdGVtcztjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bFtjXTtpZigib2JqZWN0Ij09PXUudHlwZSlmb3IodmFyIGg9MCxmPXUucHJvcGVydGllcztoPGYubGVuZ3RoO2grKyl7dmFyIGQ9ZltoXTtpZigia2V5Ij09PWQua2V5Tm9kZS52YWx1ZSYmZC52YWx1ZU5vZGUpe3ZhciBtPW1yLmNyZWF0ZShlLnVyaSxmYShlLHUpKTtpZihzLnB1c2goe25hbWU6SG8oZC52YWx1ZU5vZGUpLGtpbmQ6QmkuRnVuY3Rpb24sbG9jYXRpb246bX0pLC0tbzw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGEpLHN9fX1yZXR1cm4gc31mb3IodmFyIGc9W3tub2RlOmksY29udGFpbmVyTmFtZToiIn1dLHA9MCxiPSExLHY9W10seT1mdW5jdGlvbih0LG4peyJhcnJheSI9PT10LnR5cGU/dC5pdGVtcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlJiZnLnB1c2goe25vZGU6ZSxjb250YWluZXJOYW1lOm59KX0pKToib2JqZWN0Ij09PXQudHlwZSYmdC5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXQudmFsdWVOb2RlO2lmKGkpaWYobz4wKXtvLS07dmFyIGE9bXIuY3JlYXRlKGUudXJpLGZhKGUsdCkpLHM9bj9uKyIuIit0LmtleU5vZGUudmFsdWU6dC5rZXlOb2RlLnZhbHVlO3YucHVzaCh7bmFtZTpyLmdldEtleUxhYmVsKHQpLGtpbmQ6ci5nZXRTeW1ib2xLaW5kKGkudHlwZSksbG9jYXRpb246YSxjb250YWluZXJOYW1lOm59KSxnLnB1c2goe25vZGU6aSxjb250YWluZXJOYW1lOnN9KX1lbHNlIGI9ITB9KSl9O3A8Zy5sZW5ndGg7KXt2YXIgQz1nW3ArK107eShDLm5vZGUsQy5jb250YWluZXJOYW1lKX1yZXR1cm4gYiYmbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGEpLHZ9LGUucHJvdG90eXBlLmZpbmREb2N1bWVudFN5bWJvbHMyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPXtyZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFfSk7dmFyIGk9dC5yb290O2lmKCFpKXJldHVybltdO3ZhciBvPW4ucmVzdWx0TGltaXR8fE51bWJlci5NQVhfVkFMVUUsYT1lLnVyaTtpZigoInZzY29kZTovL2RlZmF1bHRzZXR0aW5ncy9rZXliaW5kaW5ncy5qc29uIj09PWF8fHVpKGEudG9Mb3dlckNhc2UoKSwiL3VzZXIva2V5YmluZGluZ3MuanNvbiIpKSYmImFycmF5Ij09PWkudHlwZSl7Zm9yKHZhciBzPVtdLGM9MCxsPWkuaXRlbXM7YzxsLmxlbmd0aDtjKyspe3ZhciB1PWxbY107aWYoIm9iamVjdCI9PT11LnR5cGUpZm9yKHZhciBoPTAsZj11LnByb3BlcnRpZXM7aDxmLmxlbmd0aDtoKyspe3ZhciBkPWZbaF07aWYoImtleSI9PT1kLmtleU5vZGUudmFsdWUmJmQudmFsdWVOb2RlKXt2YXIgbT1mYShlLHUpLGc9ZmEoZSxkLmtleU5vZGUpO2lmKHMucHVzaCh7bmFtZTpIbyhkLnZhbHVlTm9kZSksa2luZDpCaS5GdW5jdGlvbixyYW5nZTptLHNlbGVjdGlvblJhbmdlOmd9KSwtLW88PTApcmV0dXJuIG4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChhKSxzfX19cmV0dXJuIHN9Zm9yKHZhciBwPVtdLGI9W3tub2RlOmkscmVzdWx0OnB9XSx2PTAseT0hMSxDPWZ1bmN0aW9uKHQsbil7ImFycmF5Ij09PXQudHlwZT90Lml0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7aWYodClpZihvPjApe28tLTt2YXIgYT1mYShlLHQpLHM9YSxjPXtuYW1lOlN0cmluZyhpKSxraW5kOnIuZ2V0U3ltYm9sS2luZCh0LnR5cGUpLHJhbmdlOmEsc2VsZWN0aW9uUmFuZ2U6cyxjaGlsZHJlbjpbXX07bi5wdXNoKGMpLGIucHVzaCh7cmVzdWx0OmMuY2hpbGRyZW4sbm9kZTp0fSl9ZWxzZSB5PSEwfSkpOiJvYmplY3QiPT09dC50eXBlJiZ0LnByb3BlcnRpZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9dC52YWx1ZU5vZGU7aWYoaSlpZihvPjApe28tLTt2YXIgYT1mYShlLHQpLHM9ZmEoZSx0LmtleU5vZGUpLGM9W10sbD17bmFtZTpyLmdldEtleUxhYmVsKHQpLGtpbmQ6ci5nZXRTeW1ib2xLaW5kKGkudHlwZSkscmFuZ2U6YSxzZWxlY3Rpb25SYW5nZTpzLGNoaWxkcmVuOmMsZGV0YWlsOnIuZ2V0RGV0YWlsKGkpfTtuLnB1c2gobCksYi5wdXNoKHtyZXN1bHQ6Yyxub2RlOml9KX1lbHNlIHk9ITB9KSl9O3Y8Yi5sZW5ndGg7KXt2YXIgdz1iW3YrK107Qyh3Lm5vZGUsdy5yZXN1bHQpfXJldHVybiB5JiZuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoYSkscH0sZS5wcm90b3R5cGUuZ2V0U3ltYm9sS2luZD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSJvYmplY3QiOnJldHVybiBCaS5Nb2R1bGU7Y2FzZSJzdHJpbmciOnJldHVybiBCaS5TdHJpbmc7Y2FzZSJudW1iZXIiOnJldHVybiBCaS5OdW1iZXI7Y2FzZSJhcnJheSI6cmV0dXJuIEJpLkFycmF5O2Nhc2UiYm9vbGVhbiI6cmV0dXJuIEJpLkJvb2xlYW47ZGVmYXVsdDpyZXR1cm4gQmkuVmFyaWFibGV9fSxlLnByb3RvdHlwZS5nZXRLZXlMYWJlbD1mdW5jdGlvbihlKXt2YXIgdD1lLmtleU5vZGUudmFsdWU7cmV0dXJuIHQmJih0PXQucmVwbGFjZSgvW1xuXS9nLCLihrUiKSksdCYmdC50cmltKCk/dDonIicuY29uY2F0KHQsJyInKX0sZS5wcm90b3R5cGUuZ2V0RGV0YWlsPWZ1bmN0aW9uKGUpe2lmKGUpcmV0dXJuImJvb2xlYW4iPT09ZS50eXBlfHwibnVtYmVyIj09PWUudHlwZXx8Im51bGwiPT09ZS50eXBlfHwic3RyaW5nIj09PWUudHlwZT9TdHJpbmcoZS52YWx1ZSk6ImFycmF5Ij09PWUudHlwZT9lLmNoaWxkcmVuLmxlbmd0aD92b2lkIDA6IltdIjoib2JqZWN0Ij09PWUudHlwZT9lLmNoaWxkcmVuLmxlbmd0aD92b2lkIDA6Int9Ijp2b2lkIDB9LGUucHJvdG90eXBlLmZpbmREb2N1bWVudENvbG9ycz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSx0KS50aGVuKChmdW5jdGlvbihyKXt2YXIgaT1bXTtpZihyKWZvcih2YXIgbz1uJiYibnVtYmVyIj09dHlwZW9mIG4ucmVzdWx0TGltaXQ/bi5yZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFLGE9e30scz0wLGM9dC5nZXRNYXRjaGluZ1NjaGVtYXMoci5zY2hlbWEpO3M8Yy5sZW5ndGg7cysrKXt2YXIgbD1jW3NdO2lmKCFsLmludmVydGVkJiZsLnNjaGVtYSYmKCJjb2xvciI9PT1sLnNjaGVtYS5mb3JtYXR8fCJjb2xvci1oZXgiPT09bC5zY2hlbWEuZm9ybWF0KSYmbC5ub2RlJiYic3RyaW5nIj09PWwubm9kZS50eXBlKXt2YXIgdT1TdHJpbmcobC5ub2RlLm9mZnNldCk7aWYoIWFbdV0pe3ZhciBoPXVhKEhvKGwubm9kZSkpO2lmKGgpe3ZhciBmPWZhKGUsbC5ub2RlKTtpLnB1c2goe2NvbG9yOmgscmFuZ2U6Zn0pfWlmKGFbdV09ITAsLS1vPD0wKXJldHVybiBuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoZS51cmkpLGl9fX1yZXR1cm4gaX0pKX0sZS5wcm90b3R5cGUuZ2V0Q29sb3JQcmVzZW50YXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89W10sYT1NYXRoLnJvdW5kKDI1NSpuLnJlZCkscz1NYXRoLnJvdW5kKDI1NSpuLmdyZWVuKSxjPU1hdGgucm91bmQoMjU1Km4uYmx1ZSk7ZnVuY3Rpb24gbChlKXt2YXIgdD1lLnRvU3RyaW5nKDE2KTtyZXR1cm4gMiE9PXQubGVuZ3RoPyIwIit0OnR9cmV0dXJuIGk9MT09PW4uYWxwaGE/IiMiLmNvbmNhdChsKGEpKS5jb25jYXQobChzKSkuY29uY2F0KGwoYykpOiIjIi5jb25jYXQobChhKSkuY29uY2F0KGwocykpLmNvbmNhdChsKGMpKS5jb25jYXQobChNYXRoLnJvdW5kKDI1NSpuLmFscGhhKSkpLG8ucHVzaCh7bGFiZWw6aSx0ZXh0RWRpdDpLci5yZXBsYWNlKHIsSlNPTi5zdHJpbmdpZnkoaSkpfSksb30sZX0oKTtmdW5jdGlvbiBmYShlLHQpe3JldHVybiBmci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgpKX12YXIgZGEsbWEsZ2EscGEsYmEsdmEseWE9Tm8oKSxDYT17c2NoZW1hQXNzb2NpYXRpb25zOltdLHNjaGVtYXM6eyJodHRwOi8vanNvbi1zY2hlbWEub3JnL3NjaGVtYSMiOnskcmVmOiJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMifSwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIjp7JHNjaGVtYToiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIixkZWZpbml0aW9uczp7c2NoZW1hQXJyYXk6e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLGl0ZW1zOnskcmVmOiIjIn19LHBvc2l0aXZlSW50ZWdlcjp7dHlwZToiaW50ZWdlciIsbWluaW11bTowfSxwb3NpdGl2ZUludGVnZXJEZWZhdWx0MDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9LHtkZWZhdWx0OjB9XX0sc2ltcGxlVHlwZXM6e3R5cGU6InN0cmluZyIsZW51bTpbImFycmF5IiwiYm9vbGVhbiIsImludGVnZXIiLCJudWxsIiwibnVtYmVyIiwib2JqZWN0Iiwic3RyaW5nIl19LHN0cmluZ0FycmF5Ont0eXBlOiJhcnJheSIsaXRlbXM6e3R5cGU6InN0cmluZyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9fSx0eXBlOiJvYmplY3QiLHByb3BlcnRpZXM6e2lkOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpIn0sJHNjaGVtYTp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LHRpdGxlOnt0eXBlOiJzdHJpbmcifSxkZXNjcmlwdGlvbjp7dHlwZToic3RyaW5nIn0sZGVmYXVsdDp7fSxtdWx0aXBsZU9mOnt0eXBlOiJudW1iZXIiLG1pbmltdW06MCxleGNsdXNpdmVNaW5pbXVtOiEwfSxtYXhpbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNYXhpbXVtOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtaW5pbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtYXhMZW5ndGg6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pbkxlbmd0aDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSxwYXR0ZXJuOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoicmVnZXgifSxhZGRpdGlvbmFsSXRlbXM6e2FueU9mOlt7dHlwZToiYm9vbGVhbiJ9LHskcmVmOiIjIn1dLGRlZmF1bHQ6e319LGl0ZW1zOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XSxkZWZhdWx0Ont9fSxtYXhJdGVtczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluSXRlbXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0sdW5pcXVlSXRlbXM6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1heFByb3BlcnRpZXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pblByb3BlcnRpZXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0scmVxdWlyZWQ6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX0sYWRkaXRpb25hbFByb3BlcnRpZXM6e2FueU9mOlt7dHlwZToiYm9vbGVhbiJ9LHskcmVmOiIjIn1dLGRlZmF1bHQ6e319LGRlZmluaXRpb25zOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHBhdHRlcm5Qcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0sZGVwZW5kZW5jaWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX19LGVudW06e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfSx0eXBlOnthbnlPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSx7dHlwZToiYXJyYXkiLGl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0sbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH1dfSxmb3JtYXQ6e2FueU9mOlt7dHlwZToic3RyaW5nIixlbnVtOlsiZGF0ZS10aW1lIiwidXJpIiwiZW1haWwiLCJob3N0bmFtZSIsImlwdjQiLCJpcHY2IiwicmVnZXgiXX0se3R5cGU6InN0cmluZyJ9XX0sYWxsT2Y6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XX0sYW55T2Y6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XX0sb25lT2Y6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XX0sbm90OnthbGxPZjpbeyRyZWY6IiMifV19fSxkZXBlbmRlbmNpZXM6e2V4Y2x1c2l2ZU1heGltdW06WyJtYXhpbXVtIl0sZXhjbHVzaXZlTWluaW11bTpbIm1pbmltdW0iXX0sZGVmYXVsdDp7fX0sImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI6e2RlZmluaXRpb25zOntzY2hlbWFBcnJheTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsaXRlbXM6eyRyZWY6IiMifX0sbm9uTmVnYXRpdmVJbnRlZ2VyOnt0eXBlOiJpbnRlZ2VyIixtaW5pbXVtOjB9LG5vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0se2RlZmF1bHQ6MH1dfSxzaW1wbGVUeXBlczp7ZW51bTpbImFycmF5IiwiYm9vbGVhbiIsImludGVnZXIiLCJudWxsIiwibnVtYmVyIiwib2JqZWN0Iiwic3RyaW5nIl19LHN0cmluZ0FycmF5Ont0eXBlOiJhcnJheSIsaXRlbXM6e3R5cGU6InN0cmluZyJ9LHVuaXF1ZUl0ZW1zOiEwLGRlZmF1bHQ6W119fSx0eXBlOlsib2JqZWN0IiwiYm9vbGVhbiJdLHByb3BlcnRpZXM6eyRpZDp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaS1yZWZlcmVuY2UifSwkc2NoZW1hOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpIn0sJHJlZjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaS1yZWZlcmVuY2UifSwkY29tbWVudDp7dHlwZToic3RyaW5nIn0sdGl0bGU6e3R5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0eXBlOiJzdHJpbmcifSxkZWZhdWx0OiEwLHJlYWRPbmx5Ont0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxleGFtcGxlczp7dHlwZToiYXJyYXkiLGl0ZW1zOiEwfSxtdWx0aXBsZU9mOnt0eXBlOiJudW1iZXIiLGV4Y2x1c2l2ZU1pbmltdW06MH0sbWF4aW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWF4aW11bTp7dHlwZToibnVtYmVyIn0sbWluaW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWluaW11bTp7dHlwZToibnVtYmVyIn0sbWF4TGVuZ3RoOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pbkxlbmd0aDp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MCJ9LHBhdHRlcm46e3R5cGU6InN0cmluZyIsZm9ybWF0OiJyZWdleCJ9LGFkZGl0aW9uYWxJdGVtczp7JHJlZjoiIyJ9LGl0ZW1zOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XSxkZWZhdWx0OiEwfSxtYXhJdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5JdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MCJ9LHVuaXF1ZUl0ZW1zOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxjb250YWluczp7JHJlZjoiIyJ9LG1heFByb3BlcnRpZXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluUHJvcGVydGllczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MCJ9LHJlcXVpcmVkOnskcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In0sYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZpbml0aW9uczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwYXR0ZXJuUHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LHByb3BlcnR5TmFtZXM6e2Zvcm1hdDoicmVnZXgifSxkZWZhdWx0Ont9fSxkZXBlbmRlbmNpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfX0scHJvcGVydHlOYW1lczp7JHJlZjoiIyJ9LGNvbnN0OiEwLGVudW06e3R5cGU6ImFycmF5IixpdGVtczohMCxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfSx0eXBlOnthbnlPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSx7dHlwZToiYXJyYXkiLGl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0sbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH1dfSxmb3JtYXQ6e3R5cGU6InN0cmluZyJ9LGNvbnRlbnRNZWRpYVR5cGU6e3R5cGU6InN0cmluZyJ9LGNvbnRlbnRFbmNvZGluZzp7dHlwZToic3RyaW5nIn0saWY6eyRyZWY6IiMifSx0aGVuOnskcmVmOiIjIn0sZWxzZTp7JHJlZjoiIyJ9LGFsbE9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sYW55T2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxvbmVPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LG5vdDp7JHJlZjoiIyJ9fSxkZWZhdWx0OiEwfX19LHdhPXtpZDp5YSgic2NoZW1hLmpzb24uaWQiLCJBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2NoZW1hLiIpLCRzY2hlbWE6eWEoInNjaGVtYS5qc29uLiRzY2hlbWEiLCJUaGUgc2NoZW1hIHRvIHZlcmlmeSB0aGlzIGRvY3VtZW50IGFnYWluc3QuIiksdGl0bGU6eWEoInNjaGVtYS5qc29uLnRpdGxlIiwiQSBkZXNjcmlwdGl2ZSB0aXRsZSBvZiB0aGUgZWxlbWVudC4iKSxkZXNjcmlwdGlvbjp5YSgic2NoZW1hLmpzb24uZGVzY3JpcHRpb24iLCJBIGxvbmcgZGVzY3JpcHRpb24gb2YgdGhlIGVsZW1lbnQuIFVzZWQgaW4gaG92ZXIgbWVudXMgYW5kIHN1Z2dlc3Rpb25zLiIpLGRlZmF1bHQ6eWEoInNjaGVtYS5qc29uLmRlZmF1bHQiLCJBIGRlZmF1bHQgdmFsdWUuIFVzZWQgYnkgc3VnZ2VzdGlvbnMuIiksbXVsdGlwbGVPZjp5YSgic2NoZW1hLmpzb24ubXVsdGlwbGVPZiIsIkEgbnVtYmVyIHRoYXQgc2hvdWxkIGNsZWFubHkgZGl2aWRlIHRoZSBjdXJyZW50IHZhbHVlIChpLmUuIGhhdmUgbm8gcmVtYWluZGVyKS4iKSxtYXhpbXVtOnlhKCJzY2hlbWEuanNvbi5tYXhpbXVtIiwiVGhlIG1heGltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNYXhpbXVtOnlhKCJzY2hlbWEuanNvbi5leGNsdXNpdmVNYXhpbXVtIiwiTWFrZXMgdGhlIG1heGltdW0gcHJvcGVydHkgZXhjbHVzaXZlLiIpLG1pbmltdW06eWEoInNjaGVtYS5qc29uLm1pbmltdW0iLCJUaGUgbWluaW11bSBudW1lcmljYWwgdmFsdWUsIGluY2x1c2l2ZSBieSBkZWZhdWx0LiIpLGV4Y2x1c2l2ZU1pbmltdW06eWEoInNjaGVtYS5qc29uLmV4Y2x1c2l2ZU1pbmludW0iLCJNYWtlcyB0aGUgbWluaW11bSBwcm9wZXJ0eSBleGNsdXNpdmUuIiksbWF4TGVuZ3RoOnlhKCJzY2hlbWEuanNvbi5tYXhMZW5ndGgiLCJUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBzdHJpbmcuIiksbWluTGVuZ3RoOnlhKCJzY2hlbWEuanNvbi5taW5MZW5ndGgiLCJUaGUgbWluaW11bSBsZW5ndGggb2YgYSBzdHJpbmcuIikscGF0dGVybjp5YSgic2NoZW1hLmpzb24ucGF0dGVybiIsIkEgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBzdHJpbmcgYWdhaW5zdC4gSXQgaXMgbm90IGltcGxpY2l0bHkgYW5jaG9yZWQuIiksYWRkaXRpb25hbEl0ZW1zOnlhKCJzY2hlbWEuanNvbi5hZGRpdGlvbmFsSXRlbXMiLCJGb3IgYXJyYXlzLCBvbmx5IHdoZW4gaXRlbXMgaXMgc2V0IGFzIGFuIGFycmF5LiBJZiBpdCBpcyBhIHNjaGVtYSwgdGhlbiB0aGlzIHNjaGVtYSB2YWxpZGF0ZXMgaXRlbXMgYWZ0ZXIgdGhlIG9uZXMgc3BlY2lmaWVkIGJ5IHRoZSBpdGVtcyBhcnJheS4gSWYgaXQgaXMgZmFsc2UsIHRoZW4gYWRkaXRpb25hbCBpdGVtcyB3aWxsIGNhdXNlIHZhbGlkYXRpb24gdG8gZmFpbC4iKSxpdGVtczp5YSgic2NoZW1hLmpzb24uaXRlbXMiLCJGb3IgYXJyYXlzLiBDYW4gZWl0aGVyIGJlIGEgc2NoZW1hIHRvIHZhbGlkYXRlIGV2ZXJ5IGVsZW1lbnQgYWdhaW5zdCBvciBhbiBhcnJheSBvZiBzY2hlbWFzIHRvIHZhbGlkYXRlIGVhY2ggaXRlbSBhZ2FpbnN0IGluIG9yZGVyICh0aGUgZmlyc3Qgc2NoZW1hIHdpbGwgdmFsaWRhdGUgdGhlIGZpcnN0IGVsZW1lbnQsIHRoZSBzZWNvbmQgc2NoZW1hIHdpbGwgdmFsaWRhdGUgdGhlIHNlY29uZCBlbGVtZW50LCBhbmQgc28gb24uIiksbWF4SXRlbXM6eWEoInNjaGVtYS5qc29uLm1heEl0ZW1zIiwiVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLG1pbkl0ZW1zOnlhKCJzY2hlbWEuanNvbi5taW5JdGVtcyIsIlRoZSBtaW5pbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBpbnNpZGUgYW4gYXJyYXkuIEluY2x1c2l2ZS4iKSx1bmlxdWVJdGVtczp5YSgic2NoZW1hLmpzb24udW5pcXVlSXRlbXMiLCJJZiBhbGwgb2YgdGhlIGl0ZW1zIGluIHRoZSBhcnJheSBtdXN0IGJlIHVuaXF1ZS4gRGVmYXVsdHMgdG8gZmFsc2UuIiksbWF4UHJvcGVydGllczp5YSgic2NoZW1hLmpzb24ubWF4UHJvcGVydGllcyIsIlRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLG1pblByb3BlcnRpZXM6eWEoInNjaGVtYS5qc29uLm1pblByb3BlcnRpZXMiLCJUaGUgbWluaW11bSBudW1iZXIgb2YgcHJvcGVydGllcyBhbiBvYmplY3QgY2FuIGhhdmUuIEluY2x1c2l2ZS4iKSxyZXF1aXJlZDp5YSgic2NoZW1hLmpzb24ucmVxdWlyZWQiLCJBbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgbGlzdHMgdGhlIG5hbWVzIG9mIGFsbCBwcm9wZXJ0aWVzIHJlcXVpcmVkIG9uIHRoaXMgb2JqZWN0LiIpLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnlhKCJzY2hlbWEuanNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyIsIkVpdGhlciBhIHNjaGVtYSBvciBhIGJvb2xlYW4uIElmIGEgc2NoZW1hLCB0aGVuIHVzZWQgdG8gdmFsaWRhdGUgYWxsIHByb3BlcnRpZXMgbm90IG1hdGNoZWQgYnkgJ3Byb3BlcnRpZXMnIG9yICdwYXR0ZXJuUHJvcGVydGllcycuIElmIGZhbHNlLCB0aGVuIGFueSBwcm9wZXJ0aWVzIG5vdCBtYXRjaGVkIGJ5IGVpdGhlciB3aWxsIGNhdXNlIHRoaXMgc2NoZW1hIHRvIGZhaWwuIiksZGVmaW5pdGlvbnM6eWEoInNjaGVtYS5qc29uLmRlZmluaXRpb25zIiwiTm90IHVzZWQgZm9yIHZhbGlkYXRpb24uIFBsYWNlIHN1YnNjaGVtYXMgaGVyZSB0aGF0IHlvdSB3aXNoIHRvIHJlZmVyZW5jZSBpbmxpbmUgd2l0aCAkcmVmLiIpLHByb3BlcnRpZXM6eWEoInNjaGVtYS5qc29uLnByb3BlcnRpZXMiLCJBIG1hcCBvZiBwcm9wZXJ0eSBuYW1lcyB0byBzY2hlbWFzIGZvciBlYWNoIHByb3BlcnR5LiIpLHBhdHRlcm5Qcm9wZXJ0aWVzOnlhKCJzY2hlbWEuanNvbi5wYXR0ZXJuUHJvcGVydGllcyIsIkEgbWFwIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgb24gcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgbWF0Y2hpbmcgcHJvcGVydGllcy4iKSxkZXBlbmRlbmNpZXM6eWEoInNjaGVtYS5qc29uLmRlcGVuZGVuY2llcyIsIkEgbWFwIG9mIHByb3BlcnR5IG5hbWVzIHRvIGVpdGhlciBhbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBvciBhIHNjaGVtYS4gQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgbWVhbnMgdGhlIHByb3BlcnR5IG5hbWVkIGluIHRoZSBrZXkgZGVwZW5kcyBvbiB0aGUgcHJvcGVydGllcyBpbiB0aGUgYXJyYXkgYmVpbmcgcHJlc2VudCBpbiB0aGUgb2JqZWN0IGluIG9yZGVyIHRvIGJlIHZhbGlkLiBJZiB0aGUgdmFsdWUgaXMgYSBzY2hlbWEsIHRoZW4gdGhlIHNjaGVtYSBpcyBvbmx5IGFwcGxpZWQgdG8gdGhlIG9iamVjdCBpZiB0aGUgcHJvcGVydHkgaW4gdGhlIGtleSBleGlzdHMgb24gdGhlIG9iamVjdC4iKSxlbnVtOnlhKCJzY2hlbWEuanNvbi5lbnVtIiwiVGhlIHNldCBvZiBsaXRlcmFsIHZhbHVlcyB0aGF0IGFyZSB2YWxpZC4iKSx0eXBlOnlhKCJzY2hlbWEuanNvbi50eXBlIiwiRWl0aGVyIGEgc3RyaW5nIG9mIG9uZSBvZiB0aGUgYmFzaWMgc2NoZW1hIHR5cGVzIChudW1iZXIsIGludGVnZXIsIG51bGwsIGFycmF5LCBvYmplY3QsIGJvb2xlYW4sIHN0cmluZykgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyBzcGVjaWZ5aW5nIGEgc3Vic2V0IG9mIHRob3NlIHR5cGVzLiIpLGZvcm1hdDp5YSgic2NoZW1hLmpzb24uZm9ybWF0IiwiRGVzY3JpYmVzIHRoZSBmb3JtYXQgZXhwZWN0ZWQgZm9yIHRoZSB2YWx1ZS4iKSxhbGxPZjp5YSgic2NoZW1hLmpzb24uYWxsT2YiLCJBbiBhcnJheSBvZiBzY2hlbWFzLCBhbGwgb2Ygd2hpY2ggbXVzdCBtYXRjaC4iKSxhbnlPZjp5YSgic2NoZW1hLmpzb24uYW55T2YiLCJBbiBhcnJheSBvZiBzY2hlbWFzLCB3aGVyZSBhdCBsZWFzdCBvbmUgbXVzdCBtYXRjaC4iKSxvbmVPZjp5YSgic2NoZW1hLmpzb24ub25lT2YiLCJBbiBhcnJheSBvZiBzY2hlbWFzLCBleGFjdGx5IG9uZSBvZiB3aGljaCBtdXN0IG1hdGNoLiIpLG5vdDp5YSgic2NoZW1hLmpzb24ubm90IiwiQSBzY2hlbWEgd2hpY2ggbXVzdCBub3QgbWF0Y2guIiksJGlkOnlhKCJzY2hlbWEuanNvbi4kaWQiLCJBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2NoZW1hLiIpLCRyZWY6eWEoInNjaGVtYS5qc29uLiRyZWYiLCJSZWZlcmVuY2UgYSBkZWZpbml0aW9uIGhvc3RlZCBvbiBhbnkgbG9jYXRpb24uIiksJGNvbW1lbnQ6eWEoInNjaGVtYS5qc29uLiRjb21tZW50IiwiQ29tbWVudHMgZnJvbSBzY2hlbWEgYXV0aG9ycyB0byByZWFkZXJzIG9yIG1haW50YWluZXJzIG9mIHRoZSBzY2hlbWEuIikscmVhZE9ubHk6eWEoInNjaGVtYS5qc29uLnJlYWRPbmx5IiwiSW5kaWNhdGVzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBpbnN0YW5jZSBpcyBtYW5hZ2VkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBvd25pbmcgYXV0aG9yaXR5LiIpLGV4YW1wbGVzOnlhKCJzY2hlbWEuanNvbi5leGFtcGxlcyIsIlNhbXBsZSBKU09OIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHNjaGVtYSwgZm9yIHRoZSBwdXJwb3NlIG9mIGlsbHVzdHJhdGluZyB1c2FnZS4iKSxjb250YWluczp5YSgic2NoZW1hLmpzb24uY29udGFpbnMiLCdBbiBhcnJheSBpbnN0YW5jZSBpcyB2YWxpZCBhZ2FpbnN0ICJjb250YWlucyIgaWYgYXQgbGVhc3Qgb25lIG9mIGl0cyBlbGVtZW50cyBpcyB2YWxpZCBhZ2FpbnN0IHRoZSBnaXZlbiBzY2hlbWEuJykscHJvcGVydHlOYW1lczp5YSgic2NoZW1hLmpzb24ucHJvcGVydHlOYW1lcyIsIklmIHRoZSBpbnN0YW5jZSBpcyBhbiBvYmplY3QsIHRoaXMga2V5d29yZCB2YWxpZGF0ZXMgaWYgZXZlcnkgcHJvcGVydHkgbmFtZSBpbiB0aGUgaW5zdGFuY2UgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHByb3ZpZGVkIHNjaGVtYS4iKSxjb25zdDp5YSgic2NoZW1hLmpzb24uY29uc3QiLCJBbiBpbnN0YW5jZSB2YWxpZGF0ZXMgc3VjY2Vzc2Z1bGx5IGFnYWluc3QgdGhpcyBrZXl3b3JkIGlmIGl0cyB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2YgdGhlIGtleXdvcmQuIiksY29udGVudE1lZGlhVHlwZTp5YSgic2NoZW1hLmpzb24uY29udGVudE1lZGlhVHlwZSIsIkRlc2NyaWJlcyB0aGUgbWVkaWEgdHlwZSBvZiBhIHN0cmluZyBwcm9wZXJ0eS4iKSxjb250ZW50RW5jb2Rpbmc6eWEoInNjaGVtYS5qc29uLmNvbnRlbnRFbmNvZGluZyIsIkRlc2NyaWJlcyB0aGUgY29udGVudCBlbmNvZGluZyBvZiBhIHN0cmluZyBwcm9wZXJ0eS4iKSxpZjp5YSgic2NoZW1hLmpzb24uaWYiLCdUaGUgdmFsaWRhdGlvbiBvdXRjb21lIG9mIHRoZSAiaWYiIHN1YnNjaGVtYSBjb250cm9scyB3aGljaCBvZiB0aGUgInRoZW4iIG9yICJlbHNlIiBrZXl3b3JkcyBhcmUgZXZhbHVhdGVkLicpLHRoZW46eWEoInNjaGVtYS5qc29uLnRoZW4iLCdUaGUgImlmIiBzdWJzY2hlbWEgaXMgdXNlZCBmb3IgdmFsaWRhdGlvbiB3aGVuIHRoZSAiaWYiIHN1YnNjaGVtYSBzdWNjZWVkcy4nKSxlbHNlOnlhKCJzY2hlbWEuanNvbi5lbHNlIiwnVGhlICJlbHNlIiBzdWJzY2hlbWEgaXMgdXNlZCBmb3IgdmFsaWRhdGlvbiB3aGVuIHRoZSAiaWYiIHN1YnNjaGVtYSBmYWlscy4nKX07Zm9yKGJhIGluIENhLnNjaGVtYXMpZm9yKHBhIGluKGRhPUNhLnNjaGVtYXNbYmFdKS5wcm9wZXJ0aWVzKSJib29sZWFuIj09dHlwZW9mKG1hPWRhLnByb3BlcnRpZXNbcGFdKSYmKG1hPWRhLnByb3BlcnRpZXNbcGFdPXt9KSwoZ2E9d2FbcGFdKT9tYS5kZXNjcmlwdGlvbj1nYTpjb25zb2xlLmxvZygiIi5jb25jYXQocGEsIjogbG9jYWxpemUoJ3NjaGVtYS5qc29uLiIpLmNvbmNhdChwYSwnXCcsICIiKScpKTt2YT0oKCk9Pnt2YXIgZT17NDcwOmU9PntmdW5jdGlvbiB0KGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkoZSkpfWZ1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG4scj0iIixpPTAsbz0tMSxhPTAscz0wO3M8PWUubGVuZ3RoOysrcyl7aWYoczxlLmxlbmd0aCluPWUuY2hhckNvZGVBdChzKTtlbHNle2lmKDQ3PT09bilicmVhaztuPTQ3fWlmKDQ3PT09bil7aWYobz09PXMtMXx8MT09PWEpO2Vsc2UgaWYobyE9PXMtMSYmMj09PWEpe2lmKHIubGVuZ3RoPDJ8fDIhPT1pfHw0NiE9PXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKXx8NDYhPT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMikpaWYoci5sZW5ndGg+Mil7dmFyIGM9ci5sYXN0SW5kZXhPZigiLyIpO2lmKGMhPT1yLmxlbmd0aC0xKXstMT09PWM/KHI9IiIsaT0wKTppPShyPXIuc2xpY2UoMCxjKSkubGVuZ3RoLTEtci5sYXN0SW5kZXhPZigiLyIpLG89cyxhPTA7Y29udGludWV9fWVsc2UgaWYoMj09PXIubGVuZ3RofHwxPT09ci5sZW5ndGgpe3I9IiIsaT0wLG89cyxhPTA7Y29udGludWV9dCYmKHIubGVuZ3RoPjA/cis9Ii8uLiI6cj0iLi4iLGk9Mil9ZWxzZSByLmxlbmd0aD4wP3IrPSIvIitlLnNsaWNlKG8rMSxzKTpyPWUuc2xpY2UobysxLHMpLGk9cy1vLTE7bz1zLGE9MH1lbHNlIDQ2PT09biYmLTEhPT1hPysrYTphPS0xfXJldHVybiByfXZhciByPXtyZXNvbHZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHI9IiIsaT0hMSxvPWFyZ3VtZW50cy5sZW5ndGgtMTtvPj0tMSYmIWk7by0tKXt2YXIgYTtvPj0wP2E9YXJndW1lbnRzW29dOih2b2lkIDA9PT1lJiYoZT1wcm9jZXNzLmN3ZCgpKSxhPWUpLHQoYSksMCE9PWEubGVuZ3RoJiYocj1hKyIvIityLGk9NDc9PT1hLmNoYXJDb2RlQXQoMCkpfXJldHVybiByPW4ociwhaSksaT9yLmxlbmd0aD4wPyIvIityOiIvIjpyLmxlbmd0aD4wP3I6Ii4ifSxub3JtYWxpemU6ZnVuY3Rpb24oZSl7aWYodChlKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO3ZhciByPTQ3PT09ZS5jaGFyQ29kZUF0KDApLGk9NDc9PT1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk7cmV0dXJuIDAhPT0oZT1uKGUsIXIpKS5sZW5ndGh8fHJ8fChlPSIuIiksZS5sZW5ndGg+MCYmaSYmKGUrPSIvIikscj8iLyIrZTplfSxpc0Fic29sdXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0KGUpLGUubGVuZ3RoPjAmJjQ3PT09ZS5jaGFyQ29kZUF0KDApfSxqb2luOmZ1bmN0aW9uKCl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIi4iO2Zvcih2YXIgZSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoOysrbil7dmFyIGk9YXJndW1lbnRzW25dO3QoaSksaS5sZW5ndGg+MCYmKHZvaWQgMD09PWU/ZT1pOmUrPSIvIitpKX1yZXR1cm4gdm9pZCAwPT09ZT8iLiI6ci5ub3JtYWxpemUoZSl9LHJlbGF0aXZlOmZ1bmN0aW9uKGUsbil7aWYodChlKSx0KG4pLGU9PT1uKXJldHVybiIiO2lmKChlPXIucmVzb2x2ZShlKSk9PT0obj1yLnJlc29sdmUobikpKXJldHVybiIiO2Zvcih2YXIgaT0xO2k8ZS5sZW5ndGgmJjQ3PT09ZS5jaGFyQ29kZUF0KGkpOysraSk7Zm9yKHZhciBvPWUubGVuZ3RoLGE9by1pLHM9MTtzPG4ubGVuZ3RoJiY0Nz09PW4uY2hhckNvZGVBdChzKTsrK3MpO2Zvcih2YXIgYz1uLmxlbmd0aC1zLGw9YTxjP2E6Yyx1PS0xLGg9MDtoPD1sOysraCl7aWYoaD09PWwpe2lmKGM+bCl7aWYoNDc9PT1uLmNoYXJDb2RlQXQocytoKSlyZXR1cm4gbi5zbGljZShzK2grMSk7aWYoMD09PWgpcmV0dXJuIG4uc2xpY2UocytoKX1lbHNlIGE+bCYmKDQ3PT09ZS5jaGFyQ29kZUF0KGkraCk/dT1oOjA9PT1oJiYodT0wKSk7YnJlYWt9dmFyIGY9ZS5jaGFyQ29kZUF0KGkraCk7aWYoZiE9PW4uY2hhckNvZGVBdChzK2gpKWJyZWFrOzQ3PT09ZiYmKHU9aCl9dmFyIGQ9IiI7Zm9yKGg9aSt1KzE7aDw9bzsrK2gpaCE9PW8mJjQ3IT09ZS5jaGFyQ29kZUF0KGgpfHwoMD09PWQubGVuZ3RoP2QrPSIuLiI6ZCs9Ii8uLiIpO3JldHVybiBkLmxlbmd0aD4wP2Qrbi5zbGljZShzK3UpOihzKz11LDQ3PT09bi5jaGFyQ29kZUF0KHMpJiYrK3Msbi5zbGljZShzKSl9LF9tYWtlTG9uZzpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZGlybmFtZTpmdW5jdGlvbihlKXtpZih0KGUpLDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBuPWUuY2hhckNvZGVBdCgwKSxyPTQ3PT09bixpPS0xLG89ITAsYT1lLmxlbmd0aC0xO2E+PTE7LS1hKWlmKDQ3PT09KG49ZS5jaGFyQ29kZUF0KGEpKSl7aWYoIW8pe2k9YTticmVha319ZWxzZSBvPSExO3JldHVybi0xPT09aT9yPyIvIjoiLiI6ciYmMT09PWk/Ii8vIjplLnNsaWNlKDAsaSl9LGJhc2VuYW1lOmZ1bmN0aW9uKGUsbil7aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTt0KGUpO3ZhciByLGk9MCxvPS0xLGE9ITA7aWYodm9pZCAwIT09biYmbi5sZW5ndGg+MCYmbi5sZW5ndGg8PWUubGVuZ3RoKXtpZihuLmxlbmd0aD09PWUubGVuZ3RoJiZuPT09ZSlyZXR1cm4iIjt2YXIgcz1uLmxlbmd0aC0xLGM9LTE7Zm9yKHI9ZS5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIGw9ZS5jaGFyQ29kZUF0KHIpO2lmKDQ3PT09bCl7aWYoIWEpe2k9cisxO2JyZWFrfX1lbHNlLTE9PT1jJiYoYT0hMSxjPXIrMSkscz49MCYmKGw9PT1uLmNoYXJDb2RlQXQocyk/LTE9PS0tcyYmKG89cik6KHM9LTEsbz1jKSl9cmV0dXJuIGk9PT1vP289YzotMT09PW8mJihvPWUubGVuZ3RoKSxlLnNsaWNlKGksbyl9Zm9yKHI9ZS5sZW5ndGgtMTtyPj0wOy0tcilpZig0Nz09PWUuY2hhckNvZGVBdChyKSl7aWYoIWEpe2k9cisxO2JyZWFrfX1lbHNlLTE9PT1vJiYoYT0hMSxvPXIrMSk7cmV0dXJuLTE9PT1vPyIiOmUuc2xpY2UoaSxvKX0sZXh0bmFtZTpmdW5jdGlvbihlKXt0KGUpO2Zvcih2YXIgbj0tMSxyPTAsaT0tMSxvPSEwLGE9MCxzPWUubGVuZ3RoLTE7cz49MDstLXMpe3ZhciBjPWUuY2hhckNvZGVBdChzKTtpZig0NyE9PWMpLTE9PT1pJiYobz0hMSxpPXMrMSksNDY9PT1jPy0xPT09bj9uPXM6MSE9PWEmJihhPTEpOi0xIT09biYmKGE9LTEpO2Vsc2UgaWYoIW8pe3I9cysxO2JyZWFrfX1yZXR1cm4tMT09PW58fC0xPT09aXx8MD09PWF8fDE9PT1hJiZuPT09aS0xJiZuPT09cisxPyIiOmUuc2xpY2UobixpKX0sZm9ybWF0OmZ1bmN0aW9uKGUpe2lmKG51bGw9PT1lfHwib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJwYXRoT2JqZWN0IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGUpO3JldHVybiBuPSh0PWUpLmRpcnx8dC5yb290LHI9dC5iYXNlfHwodC5uYW1lfHwiIikrKHQuZXh0fHwiIiksbj9uPT09dC5yb290P24rcjpuKyIvIityOnI7dmFyIHQsbixyfSxwYXJzZTpmdW5jdGlvbihlKXt0KGUpO3ZhciBuPXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG47dmFyIHIsaT1lLmNoYXJDb2RlQXQoMCksbz00Nz09PWk7bz8obi5yb290PSIvIixyPTEpOnI9MDtmb3IodmFyIGE9LTEscz0wLGM9LTEsbD0hMCx1PWUubGVuZ3RoLTEsaD0wO3U+PXI7LS11KWlmKDQ3IT09KGk9ZS5jaGFyQ29kZUF0KHUpKSktMT09PWMmJihsPSExLGM9dSsxKSw0Nj09PWk/LTE9PT1hP2E9dToxIT09aCYmKGg9MSk6LTEhPT1hJiYoaD0tMSk7ZWxzZSBpZighbCl7cz11KzE7YnJlYWt9cmV0dXJuLTE9PT1hfHwtMT09PWN8fDA9PT1ofHwxPT09aCYmYT09PWMtMSYmYT09PXMrMT8tMSE9PWMmJihuLmJhc2U9bi5uYW1lPTA9PT1zJiZvP2Uuc2xpY2UoMSxjKTplLnNsaWNlKHMsYykpOigwPT09cyYmbz8obi5uYW1lPWUuc2xpY2UoMSxhKSxuLmJhc2U9ZS5zbGljZSgxLGMpKToobi5uYW1lPWUuc2xpY2UocyxhKSxuLmJhc2U9ZS5zbGljZShzLGMpKSxuLmV4dD1lLnNsaWNlKGEsYykpLHM+MD9uLmRpcj1lLnNsaWNlKDAscy0xKTpvJiYobi5kaXI9Ii8iKSxufSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtyLnBvc2l4PXIsZS5leHBvcnRzPXJ9LDQ0NzooZSx0LG4pPT57dmFyIHI7aWYobi5yKHQpLG4uZCh0LHtVUkk6KCk9PmcsVXRpbHM6KCk9Pnh9KSwib2JqZWN0Ij09dHlwZW9mIHByb2Nlc3Mpcj0id2luMzIiPT09cHJvY2Vzcy5wbGF0Zm9ybTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yKXt2YXIgaT1uYXZpZ2F0b3IudXNlckFnZW50O3I9aS5pbmRleE9mKCJXaW5kb3dzIik+PTB9dmFyIG8sYSxzPShvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG89T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW8oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9KSxjPS9eXHdbXHdcZCsuLV0qJC8sbD0vXlwvLyx1PS9eXC9cLy87ZnVuY3Rpb24gaChlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJy5jb25jYXQoZS5hdXRob3JpdHksJyIsIHBhdGg6ICInKS5jb25jYXQoZS5wYXRoLCciLCBxdWVyeTogIicpLmNvbmNhdChlLnF1ZXJ5LCciLCBmcmFnbWVudDogIicpLmNvbmNhdChlLmZyYWdtZW50LCcifScpKTtpZihlLnNjaGVtZSYmIWMudGVzdChlLnNjaGVtZSkpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBTY2hlbWUgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLiIpO2lmKGUucGF0aClpZihlLmF1dGhvcml0eSl7aWYoIWwudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYodS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9dmFyIGY9IiIsZD0iLyIsbT0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/LyxnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyLGksbyl7dmFyIGEsczt2b2lkIDA9PT1vJiYobz0hMSksIm9iamVjdCI9PXR5cGVvZiBlPyh0aGlzLnNjaGVtZT1lLnNjaGVtZXx8Zix0aGlzLmF1dGhvcml0eT1lLmF1dGhvcml0eXx8Zix0aGlzLnBhdGg9ZS5wYXRofHxmLHRoaXMucXVlcnk9ZS5xdWVyeXx8Zix0aGlzLmZyYWdtZW50PWUuZnJhZ21lbnR8fGYpOih0aGlzLnNjaGVtZT0ocz1vLChhPWUpfHxzP2E6ImZpbGUiKSx0aGlzLmF1dGhvcml0eT10fHxmLHRoaXMucGF0aD1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD90WzBdIT09ZCYmKHQ9ZCt0KTp0PWR9cmV0dXJuIHR9KHRoaXMuc2NoZW1lLG58fGYpLHRoaXMucXVlcnk9cnx8Zix0aGlzLmZyYWdtZW50PWl8fGYsaCh0aGlzLG8pKX1yZXR1cm4gZS5pc1VyaT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fCEhdCYmInN0cmluZyI9PXR5cGVvZiB0LmF1dGhvcml0eSYmInN0cmluZyI9PXR5cGVvZiB0LmZyYWdtZW50JiYic3RyaW5nIj09dHlwZW9mIHQucGF0aCYmInN0cmluZyI9PXR5cGVvZiB0LnF1ZXJ5JiYic3RyaW5nIj09dHlwZW9mIHQuc2NoZW1lJiYic3RyaW5nIj09dHlwZW9mIHQuZnNQYXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgdC53aXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50b1N0cmluZ30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmc1BhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdyh0aGlzLCExKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS53aXRoPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiB0aGlzO3ZhciB0PWUuc2NoZW1lLG49ZS5hdXRob3JpdHkscj1lLnBhdGgsaT1lLnF1ZXJ5LG89ZS5mcmFnbWVudDtyZXR1cm4gdm9pZCAwPT09dD90PXRoaXMuc2NoZW1lOm51bGw9PT10JiYodD1mKSx2b2lkIDA9PT1uP249dGhpcy5hdXRob3JpdHk6bnVsbD09PW4mJihuPWYpLHZvaWQgMD09PXI/cj10aGlzLnBhdGg6bnVsbD09PXImJihyPWYpLHZvaWQgMD09PWk/aT10aGlzLnF1ZXJ5Om51bGw9PT1pJiYoaT1mKSx2b2lkIDA9PT1vP289dGhpcy5mcmFnbWVudDpudWxsPT09byYmKG89ZiksdD09PXRoaXMuc2NoZW1lJiZuPT09dGhpcy5hdXRob3JpdHkmJnI9PT10aGlzLnBhdGgmJmk9PT10aGlzLnF1ZXJ5JiZvPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBiKHQsbixyLGksbyl9LGUucGFyc2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIG49bS5leGVjKGUpO3JldHVybiBuP25ldyBiKG5bMl18fGYsRShuWzRdfHxmKSxFKG5bNV18fGYpLEUobls3XXx8ZiksRShuWzldfHxmKSx0KTpuZXcgYihmLGYsZixmLGYpfSxlLmZpbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZjtpZihyJiYoZT1lLnJlcGxhY2UoL1xcL2csZCkpLGVbMF09PT1kJiZlWzFdPT09ZCl7dmFyIG49ZS5pbmRleE9mKGQsMik7LTE9PT1uPyh0PWUuc3Vic3RyaW5nKDIpLGU9ZCk6KHQ9ZS5zdWJzdHJpbmcoMixuKSxlPWUuc3Vic3RyaW5nKG4pfHxkKX1yZXR1cm4gbmV3IGIoImZpbGUiLHQsZSxmLGYpfSxlLmZyb209ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGIoZS5zY2hlbWUsZS5hdXRob3JpdHksZS5wYXRoLGUucXVlcnksZS5mcmFnbWVudCk7cmV0dXJuIGgodCwhMCksdH0sZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxfKHRoaXMsZSl9LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLnJldml2ZT1mdW5jdGlvbih0KXtpZih0KXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4gdDt2YXIgbj1uZXcgYih0KTtyZXR1cm4gbi5fZm9ybWF0dGVkPXQuZXh0ZXJuYWwsbi5fZnNQYXRoPXQuX3NlcD09PXA/dC5mc1BhdGg6bnVsbCxufXJldHVybiB0fSxlfSgpLHA9cj8xOnZvaWQgMCxiPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuX2Zvcm1hdHRlZD1udWxsLHQuX2ZzUGF0aD1udWxsLHR9cmV0dXJuIHModCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZzUGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9dyh0aGlzLCExKSksdGhpcy5fZnNQYXRofSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksZT9fKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9Xyh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX0sdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGU9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGUuZnNQYXRoPXRoaXMuX2ZzUGF0aCxlLl9zZXA9cCksdGhpcy5fZm9ybWF0dGVkJiYoZS5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKGUucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYoZS5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYoZS5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJihlLnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJihlLmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLGV9LHR9KGcpLHY9KChhPXt9KVs1OF09IiUzQSIsYVs0N109IiUyRiIsYVs2M109IiUzRiIsYVszNV09IiUyMyIsYVs5MV09IiU1QiIsYVs5M109IiU1RCIsYVs2NF09IiU0MCIsYVszM109IiUyMSIsYVszNl09IiUyNCIsYVszOF09IiUyNiIsYVszOV09IiUyNyIsYVs0MF09IiUyOCIsYVs0MV09IiUyOSIsYVs0Ml09IiUyQSIsYVs0M109IiUyQiIsYVs0NF09IiUyQyIsYVs1OV09IiUzQiIsYVs2MV09IiUzRCIsYVszMl09IiUyMCIsYSk7ZnVuY3Rpb24geShlLHQpe2Zvcih2YXIgbj12b2lkIDAscj0tMSxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWUuY2hhckNvZGVBdChpKTtpZihvPj05NyYmbzw9MTIyfHxvPj02NSYmbzw9OTB8fG8+PTQ4JiZvPD01N3x8NDU9PT1vfHw0Nj09PW98fDk1PT09b3x8MTI2PT09b3x8dCYmNDc9PT1vKS0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLGkpKSxyPS0xKSx2b2lkIDAhPT1uJiYobis9ZS5jaGFyQXQoaSkpO2Vsc2V7dm9pZCAwPT09biYmKG49ZS5zdWJzdHIoMCxpKSk7dmFyIGE9dltvXTt2b2lkIDAhPT1hPygtMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksbis9YSk6LTE9PT1yJiYocj1pKX19cmV0dXJuLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIpKSksdm9pZCAwIT09bj9uOmV9ZnVuY3Rpb24gQyhlKXtmb3IodmFyIHQ9dm9pZCAwLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZS5jaGFyQ29kZUF0KG4pOzM1PT09cnx8NjM9PT1yPyh2b2lkIDA9PT10JiYodD1lLnN1YnN0cigwLG4pKSx0Kz12W3JdKTp2b2lkIDAhPT10JiYodCs9ZVtuXSl9cmV0dXJuIHZvaWQgMCE9PXQ/dDplfWZ1bmN0aW9uIHcoZSx0KXt2YXIgbjtyZXR1cm4gbj1lLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiYiZmlsZSI9PT1lLnNjaGVtZT8iLy8iLmNvbmNhdChlLmF1dGhvcml0eSkuY29uY2F0KGUucGF0aCk6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3Q/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aCxyJiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gXyhlLHQpe3ZhciBuPXQ/Qzp5LHI9IiIsaT1lLnNjaGVtZSxvPWUuYXV0aG9yaXR5LGE9ZS5wYXRoLHM9ZS5xdWVyeSxjPWUuZnJhZ21lbnQ7aWYoaSYmKHIrPWkscis9IjoiKSwob3x8ImZpbGUiPT09aSkmJihyKz1kLHIrPWQpLG8pe3ZhciBsPW8uaW5kZXhPZigiQCIpO2lmKC0xIT09bCl7dmFyIHU9by5zdWJzdHIoMCxsKTtvPW8uc3Vic3RyKGwrMSksLTE9PT0obD11LmluZGV4T2YoIjoiKSk/cis9bih1LCExKToocis9bih1LnN1YnN0cigwLGwpLCExKSxyKz0iOiIscis9bih1LnN1YnN0cihsKzEpLCExKSkscis9IkAifS0xPT09KGw9KG89by50b0xvd2VyQ2FzZSgpKS5pbmRleE9mKCI6IikpP3IrPW4obywhMSk6KHIrPW4oby5zdWJzdHIoMCxsKSwhMSkscis9by5zdWJzdHIobCkpfWlmKGEpe2lmKGEubGVuZ3RoPj0zJiY0Nz09PWEuY2hhckNvZGVBdCgwKSYmNTg9PT1hLmNoYXJDb2RlQXQoMikpKGg9YS5jaGFyQ29kZUF0KDEpKT49NjUmJmg8PTkwJiYoYT0iLyIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUoaCszMiksIjoiKS5jb25jYXQoYS5zdWJzdHIoMykpKTtlbHNlIGlmKGEubGVuZ3RoPj0yJiY1OD09PWEuY2hhckNvZGVBdCgxKSl7dmFyIGg7KGg9YS5jaGFyQ29kZUF0KDApKT49NjUmJmg8PTkwJiYoYT0iIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShoKzMyKSwiOiIpLmNvbmNhdChhLnN1YnN0cigyKSkpfXIrPW4oYSwhMCl9cmV0dXJuIHMmJihyKz0iPyIscis9bihzLCExKSksYyYmKHIrPSIjIixyKz10P2M6eShjLCExKSkscn1mdW5jdGlvbiBTKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHQpe3JldHVybiBlLmxlbmd0aD4zP2Uuc3Vic3RyKDAsMykrUyhlLnN1YnN0cigzKSk6ZX19dmFyIEE9LyglWzAtOUEtWmEtel1bMC05QS1aYS16XSkrL2c7ZnVuY3Rpb24gRShlKXtyZXR1cm4gZS5tYXRjaChBKT9lLnJlcGxhY2UoQSwoZnVuY3Rpb24oZSl7cmV0dXJuIFMoZSl9KSk6ZX12YXIgeCxOLGs9big0NzApLEw9ZnVuY3Rpb24oZSx0LG4pe2lmKG58fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgcixpPTAsbz10Lmxlbmd0aDtpPG87aSsrKSFyJiZpIGluIHR8fChyfHwocj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LDAsaSkpLHJbaV09dFtpXSk7cmV0dXJuIGUuY29uY2F0KHJ8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKX0sVD1rLnBvc2l4fHxrOyhOPXh8fCh4PXt9KSkuam9pblBhdGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07cmV0dXJuIGUud2l0aCh7cGF0aDpULmpvaW4uYXBwbHkoVCxMKFtlLnBhdGhdLHQsITEpKX0pfSxOLnJlc29sdmVQYXRoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciByPWUucGF0aHx8Ii8iO3JldHVybiBlLndpdGgoe3BhdGg6VC5yZXNvbHZlLmFwcGx5KFQsTChbcl0sdCwhMSkpfSl9LE4uZGlybmFtZT1mdW5jdGlvbihlKXt2YXIgdD1ULmRpcm5hbWUoZS5wYXRoKTtyZXR1cm4gMT09PXQubGVuZ3RoJiY0Nj09PXQuY2hhckNvZGVBdCgwKT9lOmUud2l0aCh7cGF0aDp0fSl9LE4uYmFzZW5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFQuYmFzZW5hbWUoZS5wYXRoKX0sTi5leHRuYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBULmV4dG5hbWUoZS5wYXRoKX19fSx0PXt9O2Z1bmN0aW9uIG4ocil7aWYodFtyXSlyZXR1cm4gdFtyXS5leHBvcnRzO3ZhciBpPXRbcl09e2V4cG9ydHM6e319O3JldHVybiBlW3JdKGksaS5leHBvcnRzLG4pLGkuZXhwb3J0c31yZXR1cm4gbi5kPShlLHQpPT57Zm9yKHZhciByIGluIHQpbi5vKHQscikmJiFuLm8oZSxyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7ZW51bWVyYWJsZTohMCxnZXQ6dFtyXX0pfSxuLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLG4ucj1lPT57InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbig0NDcpfSkoKTt2YXJ7VVJJOl9hLFV0aWxzOlNhfT12YTtmdW5jdGlvbiBBYShlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIHN0cmluZyIpO2Zvcih2YXIgbixyPVN0cmluZyhlKSxpPSIiLG89ISF0JiYhIXQuZXh0ZW5kZWQsYT0hIXQmJiEhdC5nbG9ic3RhcixzPSExLGM9dCYmInN0cmluZyI9PXR5cGVvZiB0LmZsYWdzP3QuZmxhZ3M6IiIsbD0wLHU9ci5sZW5ndGg7bDx1O2wrKylzd2l0Y2gobj1yW2xdKXtjYXNlIi8iOmNhc2UiJCI6Y2FzZSJeIjpjYXNlIisiOmNhc2UiLiI6Y2FzZSIoIjpjYXNlIikiOmNhc2UiPSI6Y2FzZSIhIjpjYXNlInwiOmkrPSJcXCIrbjticmVhaztjYXNlIj8iOmlmKG8pe2krPSIuIjticmVha31jYXNlIlsiOmNhc2UiXSI6aWYobyl7aSs9bjticmVha31jYXNlInsiOmlmKG8pe3M9ITAsaSs9IigiO2JyZWFrfWNhc2UifSI6aWYobyl7cz0hMSxpKz0iKSI7YnJlYWt9Y2FzZSIsIjppZihzKXtpKz0ifCI7YnJlYWt9aSs9IlxcIituO2JyZWFrO2Nhc2UiKiI6Zm9yKHZhciBoPXJbbC0xXSxmPTE7IioiPT09cltsKzFdOylmKyssbCsrO3ZhciBkPXJbbCsxXTtpZihhKWY+MSYmKCIvIj09PWh8fHZvaWQgMD09PWh8fCJ7Ij09PWh8fCIsIj09PWgpJiYoIi8iPT09ZHx8dm9pZCAwPT09ZHx8IiwiPT09ZHx8In0iPT09ZCk/KCIvIj09PWQ/bCsrOiIvIj09PWgmJmkuZW5kc1dpdGgoIlxcLyIpJiYoaT1pLnN1YnN0cigwLGkubGVuZ3RoLTIpKSxpKz0iKCg/OlteL10qKD86L3wkKSkqKSIpOmkrPSIoW14vXSopIjtlbHNlIGkrPSIuKiI7YnJlYWs7ZGVmYXVsdDppKz1ufXJldHVybiBjJiZ+Yy5pbmRleE9mKCJnIil8fChpPSJeIitpKyIkIiksbmV3IFJlZ0V4cChpLGMpfXZhciBFYSx4YT1ObygpLE5hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuZ2xvYldyYXBwZXJzPVtdO3RyeXtmb3IodmFyIG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0sbz0iISIhPT1pWzBdO298fChpPWkuc3Vic3RyaW5nKDEpKSxpLmxlbmd0aD4wJiYoIi8iPT09aVswXSYmKGk9aS5zdWJzdHJpbmcoMSkpLHRoaXMuZ2xvYldyYXBwZXJzLnB1c2goe3JlZ2V4cDpBYSgiKiovIitpLHtleHRlbmRlZDohMCxnbG9ic3RhcjohMH0pLGluY2x1ZGU6b30pKX10aGlzLnVyaXM9dH1jYXRjaChlKXt0aGlzLmdsb2JXcmFwcGVycy5sZW5ndGg9MCx0aGlzLnVyaXM9W119fXJldHVybiBlLnByb3RvdHlwZS5tYXRjaGVzUGF0dGVybj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ITEsbj0wLHI9dGhpcy5nbG9iV3JhcHBlcnM7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0sbz1pLnJlZ2V4cCxhPWkuaW5jbHVkZTtvLnRlc3QoZSkmJih0PWEpfXJldHVybiB0fSxlLnByb3RvdHlwZS5nZXRVUklzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXJpc30sZX0oKSxrYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuc2VydmljZT1lLHRoaXMudXJpPXQsdGhpcy5kZXBlbmRlbmNpZXM9bmV3IFNldCx0aGlzLmFuY2hvcnM9dm9pZCAwLG4mJih0aGlzLnVucmVzb2x2ZWRTY2hlbWE9dGhpcy5zZXJ2aWNlLnByb21pc2UucmVzb2x2ZShuZXcgTGEobikpKX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VW5yZXNvbHZlZFNjaGVtYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVucmVzb2x2ZWRTY2hlbWF8fCh0aGlzLnVucmVzb2x2ZWRTY2hlbWE9dGhpcy5zZXJ2aWNlLmxvYWRTY2hlbWEodGhpcy51cmkpKSx0aGlzLnVucmVzb2x2ZWRTY2hlbWF9LGUucHJvdG90eXBlLmdldFJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5yZXNvbHZlZFNjaGVtYXx8KHRoaXMucmVzb2x2ZWRTY2hlbWE9dGhpcy5nZXRVbnJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIGUuc2VydmljZS5yZXNvbHZlU2NoZW1hQ29udGVudCh0LGUpfSkpKSx0aGlzLnJlc29sdmVkU2NoZW1hfSxlLnByb3RvdHlwZS5jbGVhclNjaGVtYT1mdW5jdGlvbigpe3ZhciBlPSEhdGhpcy51bnJlc29sdmVkU2NoZW1hO3JldHVybiB0aGlzLnJlc29sdmVkU2NoZW1hPXZvaWQgMCx0aGlzLnVucmVzb2x2ZWRTY2hlbWE9dm9pZCAwLHRoaXMuZGVwZW5kZW5jaWVzLmNsZWFyKCksdGhpcy5hbmNob3JzPXZvaWQgMCxlfSxlfSgpLExhPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2NoZW1hPWUsdGhpcy5lcnJvcnM9dH0sVGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2NoZW1hPWUsdGhpcy5lcnJvcnM9dH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0U2VjdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0aGlzLnNjaGVtYSk7aWYodClyZXR1cm4gQm8odCl9LGUucHJvdG90eXBlLmdldFNlY3Rpb25SZWN1cnNpdmU9ZnVuY3Rpb24oZSx0KXtpZighdHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8MD09PWUubGVuZ3RoKXJldHVybiB0O3ZhciBuPWUuc2hpZnQoKTtpZih0LnByb3BlcnRpZXMmJih0LnByb3BlcnRpZXNbbl0sMSkpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQucHJvcGVydGllc1tuXSk7aWYodC5wYXR0ZXJuUHJvcGVydGllcylmb3IodmFyIHI9MCxpPU9iamVjdC5rZXlzKHQucGF0dGVyblByb3BlcnRpZXMpO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdLGE9aGkobyk7aWYobnVsbD09YT92b2lkIDA6YS50ZXN0KG4pKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LnBhdHRlcm5Qcm9wZXJ0aWVzW29dKX1lbHNle2lmKCJvYmplY3QiPT10eXBlb2YgdC5hZGRpdGlvbmFsUHJvcGVydGllcylyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5hZGRpdGlvbmFsUHJvcGVydGllcyk7aWYobi5tYXRjaCgiWzAtOV0rIikpaWYoQXJyYXkuaXNBcnJheSh0Lml0ZW1zKSl7dmFyIHM9cGFyc2VJbnQobiwxMCk7aWYoIWlzTmFOKHMpJiZ0Lml0ZW1zW3NdKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0Lml0ZW1zW3NdKX1lbHNlIGlmKHQuaXRlbXMpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuaXRlbXMpfX0sZX0oKSxPYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuY29udGV4dFNlcnZpY2U9dCx0aGlzLnJlcXVlc3RTZXJ2aWNlPWUsdGhpcy5wcm9taXNlQ29uc3RydWN0b3I9bnx8UHJvbWlzZSx0aGlzLmNhbGxPbkRpc3Bvc2U9W10sdGhpcy5jb250cmlidXRpb25TY2hlbWFzPXt9LHRoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zPVtdLHRoaXMuc2NoZW1hc0J5SWQ9e30sdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucz1bXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzPXt9fXJldHVybiBlLnByb3RvdHlwZS5nZXRSZWdpc3RlcmVkU2NoZW1hSWRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3ZhciBuPV9hLnBhcnNlKHQpLnNjaGVtZTtyZXR1cm4ic2NoZW1hc2VydmljZSIhPT1uJiYoIWV8fGUobikpfSkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInByb21pc2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9taXNlQ29uc3RydWN0b3J9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcig7dGhpcy5jYWxsT25EaXNwb3NlLmxlbmd0aD4wOyl0aGlzLmNhbGxPbkRpc3Bvc2UucG9wKCkoKX0sZS5wcm90b3R5cGUub25SZXNvdXJjZUNoYW5nZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwO2Zvcih2YXIgbj0hMSxyPVtlPU1hKGUpXSxpPU9iamVjdC5rZXlzKHRoaXMuc2NoZW1hc0J5SWQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2NoZW1hc0J5SWRbZV19KSk7ci5sZW5ndGg7KWZvcih2YXIgbz1yLnBvcCgpLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTtzJiYocy51cmk9PT1vfHxzLmRlcGVuZGVuY2llcy5oYXMobykpJiYocy51cmkhPT1vJiZyLnB1c2gocy51cmkpLHMuY2xlYXJTY2hlbWEoKSYmKG49ITApLGlbYV09dm9pZCAwKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuc2V0U2NoZW1hQ29udHJpYnV0aW9ucz1mdW5jdGlvbihlKXtpZihlLnNjaGVtYXMpe3ZhciB0PWUuc2NoZW1hcztmb3IodmFyIG4gaW4gdCl7dmFyIHI9TWEobik7dGhpcy5jb250cmlidXRpb25TY2hlbWFzW3JdPXRoaXMuYWRkU2NoZW1hSGFuZGxlKHIsdFtuXSl9fWlmKEFycmF5LmlzQXJyYXkoZS5zY2hlbWFBc3NvY2lhdGlvbnMpKWZvcih2YXIgaT0wLG89ZS5zY2hlbWFBc3NvY2lhdGlvbnM7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV0scz1hLnVyaXMubWFwKE1hKSxjPXRoaXMuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbihhLnBhdHRlcm4scyk7dGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnMucHVzaChjKX19LGUucHJvdG90eXBlLmFkZFNjaGVtYUhhbmRsZT1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBrYSh0aGlzLGUsdCk7cmV0dXJuIHRoaXMuc2NoZW1hc0J5SWRbZV09bixufSxlLnByb3RvdHlwZS5nZXRPckFkZFNjaGVtYUhhbmRsZT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnNjaGVtYXNCeUlkW2VdfHx0aGlzLmFkZFNjaGVtYUhhbmRsZShlLHQpfSxlLnByb3RvdHlwZS5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IE5hKGUsdCk7cmV0dXJuIHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnMucHVzaChuKSxufSxlLnByb3RvdHlwZS5yZWdpc3RlckV4dGVybmFsU2NoZW1hPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1NYShlKTtyZXR1cm4gdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkc1tyXT0hMCx0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMCx0JiZ0aGlzLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb24odCxbcl0pLG4/dGhpcy5hZGRTY2hlbWFIYW5kbGUocixuKTp0aGlzLmdldE9yQWRkU2NoZW1hSGFuZGxlKHIpfSxlLnByb3RvdHlwZS5jbGVhckV4dGVybmFsU2NoZW1hcz1mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLnNjaGVtYXNCeUlkPXt9LHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM9W10sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcz17fSx0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMCx0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXMpdGhpcy5zY2hlbWFzQnlJZFtlXT10aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbZV0sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkc1tlXT0hMDtmb3IodmFyIHQ9MCxuPXRoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO3RoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnMucHVzaChyKX19LGUucHJvdG90eXBlLmdldFJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKGUpe3ZhciB0PU1hKGUpLG49dGhpcy5zY2hlbWFzQnlJZFt0XTtyZXR1cm4gbj9uLmdldFJlc29sdmVkU2NoZW1hKCk6dGhpcy5wcm9taXNlLnJlc29sdmUodm9pZCAwKX0sZS5wcm90b3R5cGUubG9hZFNjaGVtYT1mdW5jdGlvbihlKXtpZighdGhpcy5yZXF1ZXN0U2VydmljZSl7dmFyIHQ9eGEoImpzb24uc2NoZW1hLm5vcmVxdWVzdHNlcnZpY2UiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9Jy4gTm8gc2NoZW1hIHJlcXVlc3Qgc2VydmljZSBhdmFpbGFibGUiLFBhKGUpKTtyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobmV3IExhKHt9LFt0XSkpfXJldHVybiB0aGlzLnJlcXVlc3RTZXJ2aWNlKGUpLnRoZW4oKGZ1bmN0aW9uKHQpe2lmKCF0KXt2YXIgbj14YSgianNvbi5zY2hlbWEubm9jb250ZW50IiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfSc6IE5vIGNvbnRlbnQuIixQYShlKSk7cmV0dXJuIG5ldyBMYSh7fSxbbl0pfXZhciByLGk9W107cj1uaSh0LGkpO3ZhciBvPWkubGVuZ3RoP1t4YSgianNvbi5zY2hlbWEuaW52YWxpZEZvcm1hdCIsIlVuYWJsZSB0byBwYXJzZSBjb250ZW50IGZyb20gJ3swfSc6IFBhcnNlIGVycm9yIGF0IG9mZnNldCB7MX0uIixQYShlKSxpWzBdLm9mZnNldCldOltdO3JldHVybiBuZXcgTGEocixvKX0pLChmdW5jdGlvbih0KXt2YXIgbj10LnRvU3RyaW5nKCkscj10LnRvU3RyaW5nKCkuc3BsaXQoIkVycm9yOiAiKTtyZXR1cm4gci5sZW5ndGg+MSYmKG49clsxXSksdWkobiwiLiIpJiYobj1uLnN1YnN0cigwLG4ubGVuZ3RoLTEpKSxuZXcgTGEoe30sW3hhKCJqc29uLnNjaGVtYS5ub2NvbnRlbnQiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9JzogezF9LiIsUGEoZSksbildKX0pKX0sZS5wcm90b3R5cGUucmVzb2x2ZVNjaGVtYUNvbnRlbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9ZS5lcnJvcnMuc2xpY2UoMCksaT1lLnNjaGVtYTtpZihpLiRzY2hlbWEpe3ZhciBvPU1hKGkuJHNjaGVtYSk7aWYoImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDMvc2NoZW1hIj09PW8pcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG5ldyBUYSh7fSxbeGEoImpzb24uc2NoZW1hLmRyYWZ0MDMubm90c3VwcG9ydGVkIiwiRHJhZnQtMDMgc2NoZW1hcyBhcmUgbm90IHN1cHBvcnRlZC4iKV0pKTsiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAxOS0wOS9zY2hlbWEiPT09bz9yLnB1c2goeGEoImpzb24uc2NoZW1hLmRyYWZ0MjAxOTA5Lm5vdHN1cHBvcnRlZCIsIkRyYWZ0IDIwMTktMDkgc2NoZW1hcyBhcmUgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIikpOiJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSI9PT1vJiZyLnB1c2goeGEoImpzb24uc2NoZW1hLmRyYWZ0MjAyMDEyLm5vdHN1cHBvcnRlZCIsIkRyYWZ0IDIwMjAtMTIgc2NoZW1hcyBhcmUgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIikpfXZhciBhPXRoaXMuY29udGV4dFNlcnZpY2Uscz1mdW5jdGlvbihlLHQsbixpKXt2YXIgbyxhLHMsYzt2b2lkIDA9PT1pfHwwPT09aS5sZW5ndGg/bz10OiIvIj09PWkuY2hhckF0KDApP289ZnVuY3Rpb24oZSx0KXt0PWRlY29kZVVSSUNvbXBvbmVudCh0KTt2YXIgbj1lO3JldHVybiIvIj09PXRbMF0mJih0PXQuc3Vic3RyaW5nKDEpKSx0LnNwbGl0KCIvIikuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKC9+MS9nLCIvIikucmVwbGFjZSgvfjAvZywifiIpLCEobj1uW2VdKX0pKSxufSh0LGkpOihhPXQsYz1pLChzPW4pLmFuY2hvcnN8fChzLmFuY2hvcnM9dShhKSksbz1zLmFuY2hvcnMuZ2V0KGMpKSxvP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmIWUuaGFzT3duUHJvcGVydHkobikmJiJpZCIhPT1uJiYiJGlkIiE9PW4mJihlW25dPXRbbl0pfShlLG8pOnIucHVzaCh4YSgianNvbi5zY2hlbWEuaW52YWxpZGlkIiwiJHJlZiAnezB9JyBpbiAnezF9JyBjYW4gbm90IGJlIHJlc29sdmVkLiIsaSxuLnVyaSkpfSxjPWZ1bmN0aW9uKGUsdCxpLG8pe2EmJiEvXltBLVphLXpdW0EtWmEtejAtOStcLS4rXSo6XC9cLy4qLy50ZXN0KHQpJiYodD1hLnJlc29sdmVSZWxhdGl2ZVBhdGgodCxvLnVyaSkpLHQ9TWEodCk7dmFyIGM9bi5nZXRPckFkZFNjaGVtYUhhbmRsZSh0KTtyZXR1cm4gYy5nZXRVbnJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24obil7aWYoby5kZXBlbmRlbmNpZXMuYWRkKHQpLG4uZXJyb3JzLmxlbmd0aCl7dmFyIGE9aT90KyIjIitpOnQ7ci5wdXNoKHhhKCJqc29uLnNjaGVtYS5wcm9ibGVtbG9hZGluZ3JlZiIsIlByb2JsZW1zIGxvYWRpbmcgcmVmZXJlbmNlICd7MH0nOiB7MX0iLGEsbi5lcnJvcnNbMF0pKX1yZXR1cm4gcyhlLG4uc2NoZW1hLGMsaSksbChlLG4uc2NoZW1hLGMpfSkpfSxsPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1bXTtyZXR1cm4gbi50cmF2ZXJzZU5vZGVzKGUsKGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1uZXcgU2V0O2UuJHJlZjspe3ZhciBvPWUuJHJlZixhPW8uc3BsaXQoIiMiLDIpO2lmKGRlbGV0ZSBlLiRyZWYsYVswXS5sZW5ndGg+MClyZXR1cm4gdm9pZCBpLnB1c2goYyhlLGFbMF0sYVsxXSxyKSk7aWYoIW4uaGFzKG8pKXt2YXIgbD1hWzFdO3MoZSx0LHIsbCksbi5hZGQobyl9fX0pKSxuLnByb21pc2UuYWxsKGkpfSx1PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBNYXA7cmV0dXJuIG4udHJhdmVyc2VOb2RlcyhlLChmdW5jdGlvbihlKXt2YXIgbj1lLiRpZHx8ZS5pZDtpZigic3RyaW5nIj09dHlwZW9mIG4mJiIjIj09PW4uY2hhckF0KDApKXt2YXIgaT1uLnN1YnN0cmluZygxKTt0LmhhcyhpKT9yLnB1c2goeGEoImpzb24uc2NoZW1hLmR1cGxpY2F0ZWlkIiwiRHVwbGljYXRlIGlkIGRlY2xhcmF0aW9uOiAnezB9JyIsbikpOnQuc2V0KGksZSl9fSkpLHR9O3JldHVybiBsKGksaSx0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRhKGkscil9KSl9LGUucHJvdG90eXBlLnRyYXZlcnNlTm9kZXM9ZnVuY3Rpb24oZSx0KXtpZighZXx8Im9iamVjdCIhPXR5cGVvZiBlKXJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7Zm9yKHZhciBuPW5ldyBTZXQscj1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07Im9iamVjdCI9PXR5cGVvZiBpJiZhLnB1c2goaSl9fSxpPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZigib2JqZWN0Ij09dHlwZW9mIGkpZm9yKHZhciBvIGluIGkpe3ZhciBzPW8sYz1pW3NdOyJvYmplY3QiPT10eXBlb2YgYyYmYS5wdXNoKGMpfX19LG89ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTAscz1pO288cy5sZW5ndGg7bysrKXt2YXIgYz1zW29dOyJvYmplY3QiPT10eXBlb2YgYyYmYS5wdXNoKGMpfX19LGE9W2VdLHM9YS5wb3AoKTtzOyluLmhhcyhzKXx8KG4uYWRkKHMpLHQocykscihzLml0ZW1zLHMuYWRkaXRpb25hbEl0ZW1zLHMuYWRkaXRpb25hbFByb3BlcnRpZXMscy5ub3Qscy5jb250YWlucyxzLnByb3BlcnR5TmFtZXMscy5pZixzLnRoZW4scy5lbHNlKSxpKHMuZGVmaW5pdGlvbnMscy5wcm9wZXJ0aWVzLHMucGF0dGVyblByb3BlcnRpZXMscy5kZXBlbmRlbmNpZXMpLG8ocy5hbnlPZixzLmFsbE9mLHMub25lT2Yscy5pdGVtcykpLHM9YS5wb3AoKX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hRnJvbVByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZigib2JqZWN0Ij09PShudWxsPT09KG49dC5yb290KXx8dm9pZCAwPT09bj92b2lkIDA6bi50eXBlKSlmb3IodmFyIGk9MCxvPXQucm9vdC5wcm9wZXJ0aWVzO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldO2lmKCIkc2NoZW1hIj09PWEua2V5Tm9kZS52YWx1ZSYmInN0cmluZyI9PT0obnVsbD09PShyPWEudmFsdWVOb2RlKXx8dm9pZCAwPT09cj92b2lkIDA6ci50eXBlKSl7dmFyIHM9YS52YWx1ZU5vZGUudmFsdWU7cmV0dXJuIHRoaXMuY29udGV4dFNlcnZpY2UmJiEvXlx3W1x3XGQrLi1dKjovLnRlc3QocykmJihzPXRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZVJlbGF0aXZlUGF0aChzLGUpKSxzfX19LGUucHJvdG90eXBlLmdldEFzc29jaWF0ZWRTY2hlbWFzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLG49W10scj1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIF9hLnBhcnNlKGUpLndpdGgoe2ZyYWdtZW50Om51bGwscXVlcnk6bnVsbH0pLnRvU3RyaW5nKCEwKX1jYXRjaCh0KXtyZXR1cm4gZX19KGUpLGk9MCxvPXRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV07aWYoYS5tYXRjaGVzUGF0dGVybihyKSlmb3IodmFyIHM9MCxjPWEuZ2V0VVJJcygpO3M8Yy5sZW5ndGg7cysrKXt2YXIgbD1jW3NdO3RbbF18fChuLnB1c2gobCksdFtsXT0hMCl9fXJldHVybiBufSxlLnByb3RvdHlwZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10JiZ0aGlzLmdldFNjaGVtYUZyb21Qcm9wZXJ0eShlLHQpO3JldHVybiBuP1tuXTp0aGlzLmdldEFzc29jaWF0ZWRTY2hlbWFzKGUpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGb3JSZXNvdXJjZT1mdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPXRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7aWYobil7dmFyIHI9TWEobik7cmV0dXJuIHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUocikuZ2V0UmVzb2x2ZWRTY2hlbWEoKX19aWYodGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZSYmdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvdXJjZT09PWUpcmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb2x2ZWRTY2hlbWE7dmFyIGk9dGhpcy5nZXRBc3NvY2lhdGVkU2NoZW1hcyhlKSxvPWkubGVuZ3RoPjA/dGhpcy5jcmVhdGVDb21iaW5lZFNjaGVtYShlLGkpLmdldFJlc29sdmVkU2NoZW1hKCk6dGhpcy5wcm9taXNlLnJlc29sdmUodm9pZCAwKTtyZXR1cm4gdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT17cmVzb3VyY2U6ZSxyZXNvbHZlZFNjaGVtYTpvfSxvfSxlLnByb3RvdHlwZS5jcmVhdGVDb21iaW5lZFNjaGVtYT1mdW5jdGlvbihlLHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZSh0WzBdKTt2YXIgbj0ic2NoZW1hc2VydmljZTovL2NvbWJpbmVkU2NoZW1hLyIrZW5jb2RlVVJJQ29tcG9uZW50KGUpLHI9e2FsbE9mOnQubWFwKChmdW5jdGlvbihlKXtyZXR1cm57JHJlZjplfX0pKX07cmV0dXJuIHRoaXMuYWRkU2NoZW1hSGFuZGxlKG4scil9LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQsbil7aWYobil7dmFyIHI9bi5pZHx8InNjaGVtYXNlcnZpY2U6Ly91bnRpdGxlZC9tYXRjaGluZ1NjaGVtYXMvIitJYSsrO3JldHVybiB0aGlzLmFkZFNjaGVtYUhhbmRsZShyLG4pLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmludmVydGVkfSkpfSkpfXJldHVybiB0aGlzLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlP3QuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmludmVydGVkfSkpOltdfSkpfSxlfSgpLElhPTA7ZnVuY3Rpb24gTWEoZSl7dHJ5e3JldHVybiBfYS5wYXJzZShlKS50b1N0cmluZyghMCl9Y2F0Y2godCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFBhKGUpe3RyeXt2YXIgdD1fYS5wYXJzZShlKTtpZigiZmlsZSI9PT10LnNjaGVtZSlyZXR1cm4gdC5mc1BhdGh9Y2F0Y2goZSl7fXJldHVybiBlfWZ1bmN0aW9uIFJhKGUsdCl7dmFyIG49W10scj1bXSxpPVtdLG89LTEsYT10aShlLmdldFRleHQoKSwhMSkscz1hLnNjYW4oKTtmdW5jdGlvbiBjKGUpe24ucHVzaChlKSxyLnB1c2goaS5sZW5ndGgpfWZvcig7MTchPT1zOyl7c3dpdGNoKHMpe2Nhc2UgMTpjYXNlIDM6dmFyIGw9e3N0YXJ0TGluZTpmPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsZW5kTGluZTpmLGtpbmQ6MT09PXM/Im9iamVjdCI6ImFycmF5In07aS5wdXNoKGwpO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6dmFyIHU9Mj09PXM/Im9iamVjdCI6ImFycmF5IjtpZihpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdLmtpbmQ9PT11KXtsPWkucG9wKCk7dmFyIGg9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSkubGluZTtsJiZoPmwuc3RhcnRMaW5lKzEmJm8hPT1sLnN0YXJ0TGluZSYmKGwuZW5kTGluZT1oLTEsYyhsKSxvPWwuc3RhcnRMaW5lKX1icmVhaztjYXNlIDEzOnZhciBmPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsZD1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpK2EuZ2V0VG9rZW5MZW5ndGgoKSkubGluZTsxPT09YS5nZXRUb2tlbkVycm9yKCkmJmYrMTxlLmxpbmVDb3VudD9hLnNldFBvc2l0aW9uKGUub2Zmc2V0QXQodXIuY3JlYXRlKGYrMSwwKSkpOmY8ZCYmKGMoe3N0YXJ0TGluZTpmLGVuZExpbmU6ZCxraW5kOkFyLkNvbW1lbnR9KSxvPWYpO2JyZWFrO2Nhc2UgMTI6dmFyIG09ZS5nZXRUZXh0KCkuc3Vic3RyKGEuZ2V0VG9rZW5PZmZzZXQoKSxhLmdldFRva2VuTGVuZ3RoKCkpLm1hdGNoKC9eXC9cL1xzKiMocmVnaW9uXGIpfChlbmRyZWdpb25cYikvKTtpZihtKXtoPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7aWYobVsxXSl7bD17c3RhcnRMaW5lOmgsZW5kTGluZTpoLGtpbmQ6QXIuUmVnaW9ufTtpLnB1c2gobCl9ZWxzZXtmb3IodmFyIGc9aS5sZW5ndGgtMTtnPj0wJiZpW2ddLmtpbmQhPT1Bci5SZWdpb247KWctLTtpZihnPj0wKXtsPWlbZ107aS5sZW5ndGg9ZyxoPmwuc3RhcnRMaW5lJiZvIT09bC5zdGFydExpbmUmJihsLmVuZExpbmU9aCxjKGwpLG89bC5zdGFydExpbmUpfX19fXM9YS5zY2FuKCl9dmFyIHA9dCYmdC5yYW5nZUxpbWl0O2lmKCJudW1iZXIiIT10eXBlb2YgcHx8bi5sZW5ndGg8PXApcmV0dXJuIG47dCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZChlLnVyaSk7Zm9yKHZhciBiPVtdLHY9MCx5PXI7djx5Lmxlbmd0aDt2KyspeyhBPXlbdl0pPDMwJiYoYltBXT0oYltBXXx8MCkrMSl9dmFyIEM9MCx3PTA7Zm9yKGc9MDtnPGIubGVuZ3RoO2crKyl7dmFyIF89YltnXTtpZihfKXtpZihfK0M+cCl7dz1nO2JyZWFrfUMrPV99fXZhciBTPVtdO2ZvcihnPTA7ZzxuLmxlbmd0aDtnKyspe3ZhciBBOyJudW1iZXIiPT10eXBlb2YoQT1yW2ddKSYmKEE8d3x8QT09PXcmJkMrKzxwKSYmUy5wdXNoKG5bZ10pfXJldHVybiBTfWZ1bmN0aW9uIFZhKGUsdCxuKXtmdW5jdGlvbiByKHQsbil7cmV0dXJuIGZyLmNyZWF0ZShlLnBvc2l0aW9uQXQodCksZS5wb3NpdGlvbkF0KG4pKX12YXIgaT10aShlLmdldFRleHQoKSwhMCk7ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBpLnNldFBvc2l0aW9uKGUpLGkuc2NhbigpPT09dD9pLmdldFRva2VuT2Zmc2V0KCkraS5nZXRUb2tlbkxlbmd0aCgpOi0xfXJldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7Zm9yKHZhciBpPWUub2Zmc2V0QXQodCksYT1uLmdldE5vZGVGcm9tT2Zmc2V0KGksITApLHM9W107YTspe3N3aXRjaChhLnR5cGUpe2Nhc2Uic3RyaW5nIjpjYXNlIm9iamVjdCI6Y2FzZSJhcnJheSI6dmFyIGM9YS5vZmZzZXQrMSxsPWEub2Zmc2V0K2EubGVuZ3RoLTE7YzxsJiZpPj1jJiZpPD1sJiZzLnB1c2gocihjLGwpKSxzLnB1c2gocihhLm9mZnNldCxhLm9mZnNldCthLmxlbmd0aCkpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOmNhc2UibnVsbCI6Y2FzZSJwcm9wZXJ0eSI6cy5wdXNoKHIoYS5vZmZzZXQsYS5vZmZzZXQrYS5sZW5ndGgpKX1pZigicHJvcGVydHkiPT09YS50eXBlfHxhLnBhcmVudCYmImFycmF5Ij09PWEucGFyZW50LnR5cGUpe3ZhciB1PW8oYS5vZmZzZXQrYS5sZW5ndGgsNSk7LTEhPT11JiZzLnB1c2gocihhLm9mZnNldCx1KSl9YT1hLnBhcmVudH1mb3IodmFyIGg9dm9pZCAwLGY9cy5sZW5ndGgtMTtmPj0wO2YtLSloPWFvLmNyZWF0ZShzW2ZdLGgpO3JldHVybiBofHwoaD1hby5jcmVhdGUoZnIuY3JlYXRlKHQsdCkpKSxofSkpfWZ1bmN0aW9uIEZhKGUsdCl7dmFyIG49W107cmV0dXJuIHQudmlzaXQoKGZ1bmN0aW9uKHIpe3ZhciBpO2lmKCJwcm9wZXJ0eSI9PT1yLnR5cGUmJiIkcmVmIj09PXIua2V5Tm9kZS52YWx1ZSYmInN0cmluZyI9PT0obnVsbD09PShpPXIudmFsdWVOb2RlKXx8dm9pZCAwPT09aT92b2lkIDA6aS50eXBlKSl7dmFyIG89ci52YWx1ZU5vZGUudmFsdWUsYT1mdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUpe2lmKCIjIj09PWUpcmV0dXJuW107aWYoIiMiIT09ZVswXXx8Ii8iIT09ZVsxXSlyZXR1cm4gbnVsbDtyZXR1cm4gZS5zdWJzdHJpbmcoMikuc3BsaXQoL1wvLykubWFwKGphKX0odCk7aWYoIW4pcmV0dXJuIG51bGw7cmV0dXJuIEthKG4sZS5yb290KX0odCxvKTtpZihhKXt2YXIgcz1lLnBvc2l0aW9uQXQoYS5vZmZzZXQpO24ucHVzaCh7dGFyZ2V0OiIiLmNvbmNhdChlLnVyaSwiIyIpLmNvbmNhdChzLmxpbmUrMSwiLCIpLmNvbmNhdChzLmNoYXJhY3RlcisxKSxyYW5nZTpEYShlLHIudmFsdWVOb2RlKX0pfX1yZXR1cm4hMH0pKSxQcm9taXNlLnJlc29sdmUobil9ZnVuY3Rpb24gRGEoZSx0KXtyZXR1cm4gZnIuY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCsxKSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgtMSkpfWZ1bmN0aW9uIEthKGUsdCl7aWYoIXQpcmV0dXJuIG51bGw7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O3ZhciBuPWUuc2hpZnQoKTtpZih0JiYib2JqZWN0Ij09PXQudHlwZSl7dmFyIHI9dC5wcm9wZXJ0aWVzLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleU5vZGUudmFsdWU9PT1ufSkpO3JldHVybiByP0thKGUsci52YWx1ZU5vZGUpOm51bGx9aWYodCYmImFycmF5Ij09PXQudHlwZSYmbi5tYXRjaCgvXigwfFsxLTldWzAtOV0qKSQvKSl7dmFyIGk9TnVtYmVyLnBhcnNlSW50KG4pLG89dC5pdGVtc1tpXTtyZXR1cm4gbz9LYShlLG8pOm51bGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gamEoZSl7cmV0dXJuIGUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1mdW5jdGlvbiBVYShlKXt2YXIgdD1lLnByb21pc2VDb25zdHJ1Y3Rvcnx8UHJvbWlzZSxuPW5ldyBPYShlLnNjaGVtYVJlcXVlc3RTZXJ2aWNlLGUud29ya3NwYWNlQ29udGV4dCx0KTtuLnNldFNjaGVtYUNvbnRyaWJ1dGlvbnMoQ2EpO3ZhciByPW5ldyBlYShuLGUuY29udHJpYnV0aW9ucyx0LGUuY2xpZW50Q2FwYWJpbGl0aWVzKSxpPW5ldyB0YShuLGUuY29udHJpYnV0aW9ucyx0KSxvPW5ldyBoYShuKSxhPW5ldyBpYShuLHQpO3JldHVybntjb25maWd1cmU6ZnVuY3Rpb24oZSl7bi5jbGVhckV4dGVybmFsU2NoZW1hcygpLGUuc2NoZW1hcyYmZS5zY2hlbWFzLmZvckVhY2goKGZ1bmN0aW9uKGUpe24ucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShlLnVyaSxlLmZpbGVNYXRjaCxlLnNjaGVtYSl9KSksYS5jb25maWd1cmUoZSl9LHJlc2V0U2NoZW1hOmZ1bmN0aW9uKGUpe3JldHVybiBuLm9uUmVzb3VyY2VDaGFuZ2UoZSl9LGRvVmFsaWRhdGlvbjphLmRvVmFsaWRhdGlvbi5iaW5kKGEpLGdldExhbmd1YWdlU3RhdHVzOmEuZ2V0TGFuZ3VhZ2VTdGF0dXMuYmluZChhKSxwYXJzZUpTT05Eb2N1bWVudDpmdW5jdGlvbihlKXtyZXR1cm4gWm8oZSx7Y29sbGVjdENvbW1lbnRzOiEwfSl9LG5ld0pTT05Eb2N1bWVudDpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1bXSksbmV3IEpvKGUsdCxbXSl9KGUsdCl9LGdldE1hdGNoaW5nU2NoZW1hczpuLmdldE1hdGNoaW5nU2NoZW1hcy5iaW5kKG4pLGRvUmVzb2x2ZTpyLmRvUmVzb2x2ZS5iaW5kKHIpLGRvQ29tcGxldGU6ci5kb0NvbXBsZXRlLmJpbmQociksZmluZERvY3VtZW50U3ltYm9sczpvLmZpbmREb2N1bWVudFN5bWJvbHMuYmluZChvKSxmaW5kRG9jdW1lbnRTeW1ib2xzMjpvLmZpbmREb2N1bWVudFN5bWJvbHMyLmJpbmQobyksZmluZERvY3VtZW50Q29sb3JzOm8uZmluZERvY3VtZW50Q29sb3JzLmJpbmQobyksZ2V0Q29sb3JQcmVzZW50YXRpb25zOm8uZ2V0Q29sb3JQcmVzZW50YXRpb25zLmJpbmQobyksZG9Ib3ZlcjppLmRvSG92ZXIuYmluZChpKSxnZXRGb2xkaW5nUmFuZ2VzOlJhLGdldFNlbGVjdGlvblJhbmdlczpWYSxmaW5kRGVmaW5pdGlvbjpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoW10pfSxmaW5kTGlua3M6RmEsZm9ybWF0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj12b2lkIDA7aWYodCl7dmFyIGk9ZS5vZmZzZXRBdCh0LnN0YXJ0KTtyPXtvZmZzZXQ6aSxsZW5ndGg6ZS5vZmZzZXRBdCh0LmVuZCktaX19dmFyIG89e3RhYlNpemU6bj9uLnRhYlNpemU6NCxpbnNlcnRTcGFjZXM6ITA9PT0obnVsbD09bj92b2lkIDA6bi5pbnNlcnRTcGFjZXMpLGluc2VydEZpbmFsTmV3bGluZTohMD09PShudWxsPT1uP3ZvaWQgMDpuLmluc2VydEZpbmFsTmV3bGluZSksZW9sOiJcbiJ9O3JldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIG5yKGUsdCxuKX0oZS5nZXRUZXh0KCkscixvKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBLci5yZXBsYWNlKGZyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aCkpLHQuY29udGVudCl9KSl9fX0idW5kZWZpbmVkIiE9dHlwZW9mIGZldGNoJiYoRWE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZldGNoKGUpLnRoZW4oKGU9PmUudGV4dCgpKSl9KTt2YXIgQmE9Ii8iLmNoYXJDb2RlQXQoMCkscWE9Ii4iLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gJGEoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBlKTA9PT1uLmxlbmd0aHx8MT09PW4ubGVuZ3RoJiZuLmNoYXJDb2RlQXQoMCk9PT1xYXx8KDI9PT1uLmxlbmd0aCYmbi5jaGFyQ29kZUF0KDApPT09cWEmJm4uY2hhckNvZGVBdCgxKT09PXFhP3QucG9wKCk6dC5wdXNoKG4pKTtlLmxlbmd0aD4xJiYwPT09ZVtlLmxlbmd0aC0xXS5sZW5ndGgmJnQucHVzaCgiIik7bGV0IG49dC5qb2luKCIvIik7cmV0dXJuIDA9PT1lWzBdLmxlbmd0aCYmKG49Ii8iK24pLG59c2VsZi5vbm1lc3NhZ2U9KCk9PntabigoKGUsdCk9Pm5ldyBjbGFzc3tfY3R4O19sYW5ndWFnZVNlcnZpY2U7X2xhbmd1YWdlU2V0dGluZ3M7X2xhbmd1YWdlSWQ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9jdHg9ZSx0aGlzLl9sYW5ndWFnZVNldHRpbmdzPXQubGFuZ3VhZ2VTZXR0aW5ncyx0aGlzLl9sYW5ndWFnZUlkPXQubGFuZ3VhZ2VJZCx0aGlzLl9sYW5ndWFnZVNlcnZpY2U9VWEoe3dvcmtzcGFjZUNvbnRleHQ6e3Jlc29sdmVSZWxhdGl2ZVBhdGg6KGUsdCk9PmZ1bmN0aW9uKGUsdCl7aWYoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckNvZGVBdCgwKT09PUJhfSh0KSl7Y29uc3Qgbj1fYS5wYXJzZShlKSxyPXQuc3BsaXQoIi8iKTtyZXR1cm4gbi53aXRoKHtwYXRoOiRhKHIpfSkudG9TdHJpbmcoKX1yZXR1cm4gZnVuY3Rpb24oZSwuLi50KXtjb25zdCBuPV9hLnBhcnNlKGUpLHI9bi5wYXRoLnNwbGl0KCIvIik7Zm9yKGxldCBlIG9mIHQpci5wdXNoKC4uLmUuc3BsaXQoIi8iKSk7cmV0dXJuIG4ud2l0aCh7cGF0aDokYShyKX0pLnRvU3RyaW5nKCl9KGUsdCl9KHQuc3Vic3RyKDAsdC5sYXN0SW5kZXhPZigiLyIpKzEpLGUpfSxzY2hlbWFSZXF1ZXN0U2VydmljZTp0LmVuYWJsZVNjaGVtYVJlcXVlc3Q/RWE6dm9pZCAwfSksdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmNvbmZpZ3VyZSh0aGlzLl9sYW5ndWFnZVNldHRpbmdzKX1hc3luYyBkb1ZhbGlkYXRpb24oZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKHQpe2xldCBlPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvVmFsaWRhdGlvbih0LGUsdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyl9cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSl9YXN5bmMgZG9Db21wbGV0ZShlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobik7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0NvbXBsZXRlKG4sdCxyKX1hc3luYyBkb1Jlc29sdmUoZSl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1Jlc29sdmUoZSl9YXN5bmMgZG9Ib3ZlcihlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobik7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0hvdmVyKG4sdCxyKX1hc3luYyBmb3JtYXQoZSx0LG4pe2xldCByPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZm9ybWF0KHIsdCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfWFzeW5jIHJlc2V0U2NoZW1hKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnJlc2V0U2NoZW1hKGUpKX1hc3luYyBmaW5kRG9jdW1lbnRTeW1ib2xzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCkscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50U3ltYm9scyh0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZmluZERvY3VtZW50Q29sb3JzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCkscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50Q29sb3JzKHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBnZXRDb2xvclByZXNlbnRhdGlvbnMoZSx0LG4pe2xldCByPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQociksbz10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Q29sb3JQcmVzZW50YXRpb25zKHIsaSx0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUobyl9YXN5bmMgZ2V0Rm9sZGluZ1JhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Rm9sZGluZ1JhbmdlcyhuLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZ2V0U2VsZWN0aW9uUmFuZ2VzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKSxpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRTZWxlY3Rpb25SYW5nZXMobix0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9X2dldFRleHREb2N1bWVudChlKXtsZXQgdD10aGlzLl9jdHguZ2V0TWlycm9yTW9kZWxzKCk7Zm9yKGxldCBuIG9mIHQpaWYobi51cmkudG9TdHJpbmcoKT09PWUpcmV0dXJuIHBvLmNyZWF0ZShlLHRoaXMuX2xhbmd1YWdlSWQsbi52ZXJzaW9uLG4uZ2V0VmFsdWUoKSk7cmV0dXJuIG51bGx9fShlLHQpKSl9fSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1qc29uLndvcmtlci5qcy5tYXAKCg==', null, false);
4
4
  /* eslint-enable */
5
5
 
6
6
  export { WorkerFactory as default };