@angular-architects/native-federation 20.1.7 → 21.0.0

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.
@@ -1 +1 @@
1
- export declare const fstart = "Ly8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvbm9kZS9pbml0LW5vZGUtZmVkZXJhdGlvbi50cwppbXBvcnQgeyByZWdpc3RlciB9IGZyb20gIm5vZGU6bW9kdWxlIjsKaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gIm5vZGU6dXJsIjsKaW1wb3J0ICogYXMgZnMyIGZyb20gIm5vZGU6ZnMvcHJvbWlzZXMiOwppbXBvcnQgKiBhcyBwYXRoMiBmcm9tICJub2RlOnBhdGgiOwoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvZ2xvYmFsLWNhY2hlLnRzCnZhciBuZk5hbWVzcGFjZSA9ICJfX05BVElWRV9GRURFUkFUSU9OX18iOwp2YXIgZ2xvYmFsMiA9IGdsb2JhbFRoaXM7Cmdsb2JhbDJbbmZOYW1lc3BhY2VdID8/PSB7CiAgZXh0ZXJuYWxzOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLAogIHJlbW90ZU5hbWVzVG9SZW1vdGU6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksCiAgYmFzZVVybFRvUmVtb3RlTmFtZXM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkKfTsKdmFyIGdsb2JhbENhY2hlID0gZ2xvYmFsMltuZk5hbWVzcGFjZV07CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi9tb2RlbC9leHRlcm5hbHMudHMKdmFyIGV4dGVybmFscyA9IGdsb2JhbENhY2hlLmV4dGVybmFsczsKZnVuY3Rpb24gZ2V0RXh0ZXJuYWxLZXkoc2hhcmVkKSB7CiAgcmV0dXJuIGAke3NoYXJlZC5wYWNrYWdlTmFtZX1AJHtzaGFyZWQudmVyc2lvbn1gOwp9CmZ1bmN0aW9uIGdldEV4dGVybmFsVXJsKHNoYXJlZCkgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIHJldHVybiBleHRlcm5hbHMuZ2V0KHBhY2thZ2VLZXkpOwp9CmZ1bmN0aW9uIHNldEV4dGVybmFsVXJsKHNoYXJlZCwgdXJsMikgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIGV4dGVybmFscy5zZXQocGFja2FnZUtleSwgdXJsMik7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL21vZGVsL2ltcG9ydC1tYXAudHMKZnVuY3Rpb24gbWVyZ2VJbXBvcnRNYXBzKG1hcDEsIG1hcDIpIHsKICByZXR1cm4gewogICAgaW1wb3J0czogeyAuLi5tYXAxLmltcG9ydHMsIC4uLm1hcDIuaW1wb3J0cyB9LAogICAgc2NvcGVzOiB7IC4uLm1hcDEuc2NvcGVzLCAuLi5tYXAyLnNjb3BlcyB9CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvcmVtb3Rlcy50cwp2YXIgcmVtb3RlTmFtZXNUb1JlbW90ZSA9IGdsb2JhbENhY2hlLnJlbW90ZU5hbWVzVG9SZW1vdGU7CnZhciBiYXNlVXJsVG9SZW1vdGVOYW1lcyA9IGdsb2JhbENhY2hlLmJhc2VVcmxUb1JlbW90ZU5hbWVzOwpmdW5jdGlvbiBhZGRSZW1vdGUocmVtb3RlTmFtZSwgcmVtb3RlKSB7CiAgcmVtb3RlTmFtZXNUb1JlbW90ZS5zZXQocmVtb3RlTmFtZSwgcmVtb3RlKTsKICBiYXNlVXJsVG9SZW1vdGVOYW1lcy5zZXQocmVtb3RlLmJhc2VVcmwsIHJlbW90ZU5hbWUpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi91dGlscy9wYXRoLXV0aWxzLnRzCmZ1bmN0aW9uIGdldERpcmVjdG9yeSh1cmwyKSB7CiAgY29uc3QgcGFydHMgPSB1cmwyLnNwbGl0KCIvIik7CiAgcGFydHMucG9wKCk7CiAgcmV0dXJuIHBhcnRzLmpvaW4oIi8iKTsKfQpmdW5jdGlvbiBqb2luUGF0aHMocGF0aDEsIHBhdGgyMikgewogIHdoaWxlIChwYXRoMS5lbmRzV2l0aCgiLyIpKSB7CiAgICBwYXRoMSA9IHBhdGgxLnN1YnN0cmluZygwLCBwYXRoMS5sZW5ndGggLSAxKTsKICB9CiAgaWYgKHBhdGgyMi5zdGFydHNXaXRoKCIuLyIpKSB7CiAgICBwYXRoMjIgPSBwYXRoMjIuc3Vic3RyaW5nKDIsIHBhdGgyMi5sZW5ndGgpOwogIH0KICByZXR1cm4gYCR7cGF0aDF9LyR7cGF0aDIyfWA7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL3dhdGNoLWZlZGVyYXRpb24tYnVpbGQudHMKZnVuY3Rpb24gd2F0Y2hGZWRlcmF0aW9uQnVpbGRDb21wbGV0aW9uKGVuZHBvaW50KSB7CiAgY29uc3QgZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZW5kcG9pbnQpOwogIGV2ZW50U291cmNlLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTsKICAgIGlmIChkYXRhLnR5cGUgPT09ICJmZWRlcmF0aW9uLXJlYnVpbGQtY29tcGxldGUiIC8qIENPTVBMRVRFRCAqLykgewogICAgICBjb25zb2xlLmxvZygiW0ZlZGVyYXRpb25dIFJlYnVpbGQgY29tcGxldGVkLCByZWxvYWRpbmcuLi4iKTsKICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgfQogIH07CiAgZXZlbnRTb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zb2xlLndhcm4oIltGZWRlcmF0aW9uXSBTU0UgY29ubmVjdGlvbiBlcnJvcjoiLCBldmVudCk7CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvaW5pdC1mZWRlcmF0aW9uLnRzCmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NSZW1vdGVJbmZvcyhyZW1vdGVzLCBvcHRpb25zID0geyB0aHJvd0lmUmVtb3RlTm90Rm91bmQ6IGZhbHNlIH0pIHsKICBjb25zdCBwcm9jZXNzUmVtb3RlSW5mb1Byb21pc2VzID0gT2JqZWN0LmtleXMocmVtb3RlcykubWFwKAogICAgYXN5bmMgKHJlbW90ZU5hbWUpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBsZXQgdXJsMiA9IHJlbW90ZXNbcmVtb3RlTmFtZV07CiAgICAgICAgaWYgKG9wdGlvbnMuY2FjaGVUYWcpIHsKICAgICAgICAgIGNvbnN0IGFkZEFwcGVuZCA9IHJlbW90ZXNbcmVtb3RlTmFtZV0uaW5jbHVkZXMoIj8iKSA/ICImIiA6ICI/IjsKICAgICAgICAgIHVybDIgKz0gYCR7YWRkQXBwZW5kfXQ9JHtvcHRpb25zLmNhY2hlVGFnfWA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhd2FpdCBwcm9jZXNzUmVtb3RlSW5mbyh1cmwyLCByZW1vdGVOYW1lKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnN0IGVycm9yID0gYEVycm9yIGxvYWRpbmcgcmVtb3RlIGVudHJ5IGZvciAke3JlbW90ZU5hbWV9IGZyb20gZmlsZSAke3JlbW90ZXNbcmVtb3RlTmFtZV19YDsKICAgICAgICBpZiAob3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgKTsKICBjb25zdCByZW1vdGVJbXBvcnRNYXBzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvY2Vzc1JlbW90ZUluZm9Qcm9taXNlcyk7CiAgY29uc3QgaW1wb3J0TWFwID0gcmVtb3RlSW1wb3J0TWFwcy5yZWR1Y2UoCiAgICAoYWNjLCByZW1vdGVJbXBvcnRNYXApID0+IHJlbW90ZUltcG9ydE1hcCA/IG1lcmdlSW1wb3J0TWFwcyhhY2MsIHJlbW90ZUltcG9ydE1hcCkgOiBhY2MsCiAgICB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH0KICApOwogIHJldHVybiBpbXBvcnRNYXA7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1JlbW90ZUluZm8oZmVkZXJhdGlvbkluZm9VcmwsIHJlbW90ZU5hbWUpIHsKICBjb25zdCBiYXNlVXJsID0gZ2V0RGlyZWN0b3J5KGZlZGVyYXRpb25JbmZvVXJsKTsKICBjb25zdCByZW1vdGVJbmZvID0gYXdhaXQgbG9hZEZlZGVyYXRpb25JbmZvKGZlZGVyYXRpb25JbmZvVXJsKTsKICBpZiAoIXJlbW90ZU5hbWUpIHsKICAgIHJlbW90ZU5hbWUgPSByZW1vdGVJbmZvLm5hbWU7CiAgfQogIGlmIChyZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50KSB7CiAgICB3YXRjaEZlZGVyYXRpb25CdWlsZENvbXBsZXRpb24oCiAgICAgIGJhc2VVcmwgKyByZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50CiAgICApOwogIH0KICBjb25zdCBpbXBvcnRNYXAgPSBjcmVhdGVSZW1vdGVJbXBvcnRNYXAocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCk7CiAgYWRkUmVtb3RlKHJlbW90ZU5hbWUsIHsgLi4ucmVtb3RlSW5mbywgYmFzZVVybCB9KTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZUltcG9ydE1hcChyZW1vdGVJbmZvLCByZW1vdGVOYW1lLCBiYXNlVXJsKSB7CiAgY29uc3QgaW1wb3J0cyA9IHByb2Nlc3NFeHBvc2VkKHJlbW90ZUluZm8sIHJlbW90ZU5hbWUsIGJhc2VVcmwpOwogIGNvbnN0IHNjb3BlcyA9IHByb2Nlc3NSZW1vdGVJbXBvcnRzKHJlbW90ZUluZm8sIGJhc2VVcmwpOwogIHJldHVybiB7IGltcG9ydHMsIHNjb3BlcyB9Owp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGZWRlcmF0aW9uSW5mbyh1cmwyKSB7CiAgY29uc3QgaW5mbyA9IGF3YWl0IGZldGNoKHVybDIpLnRoZW4oKHIpID0+IHIuanNvbigpKTsKICByZXR1cm4gaW5mbzsKfQpmdW5jdGlvbiBwcm9jZXNzUmVtb3RlSW1wb3J0cyhyZW1vdGVJbmZvLCBiYXNlVXJsKSB7CiAgY29uc3Qgc2NvcGVzID0ge307CiAgY29uc3Qgc2NvcGVkSW1wb3J0cyA9IHt9OwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIHJlbW90ZUluZm8uc2hhcmVkKSB7CiAgICBjb25zdCBvdXRGaWxlTmFtZSA9IGdldEV4dGVybmFsVXJsKHNoYXJlZCkgPz8gam9pblBhdGhzKGJhc2VVcmwsIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgICBzZXRFeHRlcm5hbFVybChzaGFyZWQsIG91dEZpbGVOYW1lKTsKICAgIHNjb3BlZEltcG9ydHNbc2hhcmVkLnBhY2thZ2VOYW1lXSA9IG91dEZpbGVOYW1lOwogIH0KICBzY29wZXNbYmFzZVVybCArICIvIl0gPSBzY29wZWRJbXBvcnRzOwogIHJldHVybiBzY29wZXM7Cn0KZnVuY3Rpb24gcHJvY2Vzc0V4cG9zZWQocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCkgewogIGNvbnN0IGltcG9ydHMgPSB7fTsKICBmb3IgKGNvbnN0IGV4cG9zZWQgb2YgcmVtb3RlSW5mby5leHBvc2VzKSB7CiAgICBjb25zdCBrZXkgPSBqb2luUGF0aHMocmVtb3RlTmFtZSwgZXhwb3NlZC5rZXkpOwogICAgY29uc3QgdmFsdWUgPSBqb2luUGF0aHMoYmFzZVVybCwgZXhwb3NlZC5vdXRGaWxlTmFtZSk7CiAgICBpbXBvcnRzW2tleV0gPSB2YWx1ZTsKICB9CiAgcmV0dXJuIGltcG9ydHM7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0hvc3RJbmZvKGhvc3RJbmZvLCByZWxCdW5kbGVzUGF0aCA9ICIuLyIpIHsKICBjb25zdCBpbXBvcnRzID0gaG9zdEluZm8uc2hhcmVkLnJlZHVjZSgKICAgIChhY2MsIGN1cikgPT4gKHsKICAgICAgLi4uYWNjLAogICAgICBbY3VyLnBhY2thZ2VOYW1lXTogcmVsQnVuZGxlc1BhdGggKyBjdXIub3V0RmlsZU5hbWUKICAgIH0pLAogICAge30KICApOwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIGhvc3RJbmZvLnNoYXJlZCkgewogICAgc2V0RXh0ZXJuYWxVcmwoc2hhcmVkLCByZWxCdW5kbGVzUGF0aCArIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgfQogIHJldHVybiB7IGltcG9ydHMsIHNjb3Blczoge30gfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvdXRpbHMvaW1wb3J0LW1hcC1sb2FkZXIuanMKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCB1cmwgZnJvbSAidXJsIjsKaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICJmcyI7CnZhciBJTVBPUlRfTUFQX0ZJTEVfTkFNRSA9ICJub2RlLmltcG9ydG1hcCI7CnZhciBiYXNlVVJMID0gdXJsLnBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5jd2QoKSkgKyBwYXRoLnNlcDsKZnVuY3Rpb24gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAocGFyc2VkKSB7CiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhcnNlZCkpIHsKICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSB0b3AgbGV2ZWwgbXVzdCBiZSBhbiBvYmplY3RgKTsKICB9CiAgbGV0IHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgiaW1wb3J0cyIpKSB7CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocGFyc2VkLmltcG9ydHMpKSB7CiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSAiaW1wb3J0cyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcCgKICAgICAgcGFyc2VkLmltcG9ydHMsCiAgICAgIGJhc2VVUkwKICAgICk7CiAgfQogIGxldCBzb3J0ZWRBbmROb3JtYWxpemVkU2NvcGVzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgic2NvcGVzIikpIHsKICAgIGlmICghaXNQbGFpbk9iamVjdChwYXJzZWQuc2NvcGVzKSkgewogICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBpbXBvcnQgbWFwIC0gInNjb3BlcyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRTY29wZXMgPSBzb3J0QW5kTm9ybWFsaXplU2NvcGVzKHBhcnNlZC5zY29wZXMsIGJhc2VVUkwpOwogIH0KICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKHBhcnNlZCkuZmlsdGVyKAogICAgKGtleSkgPT4ga2V5ICE9PSAiaW1wb3J0cyIgJiYga2V5ICE9PSAic2NvcGVzIgogICk7CiAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCA+IDApIHsKICAgIGNvbnNvbGUud2FybigKICAgICAgYEludmFsaWQgdG9wLWxldmVsIGtleSR7aW52YWxpZEtleXMubGVuZ3RoID4gMCA/ICJzIiA6ICIifSBpbiBpbXBvcnQgbWFwIC0gJHtpbnZhbGlkS2V5cy5qb2luKCIsICIpfWAKICAgICk7CiAgfQogIHJldHVybiB7CiAgICBpbXBvcnRzOiBzb3J0ZWRBbmROb3JtYWxpemVkSW1wb3J0cywKICAgIHNjb3Blczogc29ydGVkQW5kTm9ybWFsaXplZFNjb3BlcwogIH07Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcChtYXAsIGJhc2VVUkwyKSB7CiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9OwogIGZvciAobGV0IHNwZWNpZmllcktleSBpbiBtYXApIHsKICAgIGNvbnN0IHZhbHVlID0gbWFwW3NwZWNpZmllcktleV07CiAgICBjb25zdCBub3JtYWxpemVkU3BlY2lmaWVyS2V5ID0gbm9ybWFsaXplU3BlY2lmaWVyS2V5KHNwZWNpZmllcktleSwgYmFzZVVSTDIpOwogICAgaWYgKG5vcm1hbGl6ZWRTcGVjaWZpZXJLZXkgPT09IG51bGwpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBsZXQgYWRkcmVzc1VSTCA9IHBhcnNlVVJMTGlrZVNwZWNpZmllcih2YWx1ZSwgYmFzZVVSTDIpOwogICAgaWYgKGFkZHJlc3NVUkwgPT09IG51bGwpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9J2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKHNwZWNpZmllcktleS5lbmRzV2l0aCgiLyIpICYmICFhZGRyZXNzVVJMLmVuZHNXaXRoKCIvIikpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9JyAtIHNpbmNlIHRoZSBzcGVjaWZpZXIgZW5kcyBpbiBzbGFzaCwgc28gbXVzdCB0aGUgYWRkcmVzc2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IGFkZHJlc3NVUkw7CiAgfQogIHJldHVybiBub3JtYWxpemVkOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZVNwZWNpZmllcktleShrZXkpIHsKICBpZiAoa2V5ID09PSAiIikgewogICAgY29uc29sZS53YXJuKGBTcGVjaWZpZXIga2V5cyBpbiBpbXBvcnQgbWFwcyBtYXkgbm90IGJlIHRoZSBlbXB0eSBzdHJpbmdgKTsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4gcGFyc2VVUkxMaWtlU3BlY2lmaWVyKGtleSwgYmFzZVVSTCkgfHwga2V5Owp9CmZ1bmN0aW9uIHBhcnNlVVJMTGlrZVNwZWNpZmllcihzcGVjaWZpZXIsIGJhc2VVUkwyKSB7CiAgY29uc3QgdXNlQmFzZVVybEFzUGFyZW50ID0gc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi4vIik7CiAgdHJ5IHsKICAgIHJldHVybiBuZXcgVVJMKHNwZWNpZmllciwgdXNlQmFzZVVybEFzUGFyZW50ID8gYmFzZVVSTDIgOiB2b2lkIDApLmhyZWY7CiAgfSBjYXRjaCB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNjb3BlcyhtYXAsIGJhc2VVUkwyKSB7CiAgbGV0IG5vcm1hbGl6ZWQgPSB7fTsKICBmb3IgKGxldCBzY29wZVByZWZpeCBpbiBtYXApIHsKICAgIGNvbnN0IHBvdGVudGlhbFNwZWNpZmllck1hcCA9IG1hcFtzY29wZVByZWZpeF07CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocG90ZW50aWFsU3BlY2lmaWVyTWFwKSkgewogICAgICB0aHJvdyBUeXBlRXJyb3IoCiAgICAgICAgYFRoZSB2YWx1ZSBvZiBzY29wZSAke3Njb3BlUHJlZml4fSBtdXN0IGJlIGEgSlNPTiBvYmplY3RgCiAgICAgICk7CiAgICB9CiAgICBsZXQgc2NvcGVQcmVmaXhVUkw7CiAgICB0cnkgewogICAgICBzY29wZVByZWZpeFVSTCA9IG5ldyBVUkwoc2NvcGVQcmVmaXgsIGJhc2VVUkwyKS5ocmVmOwogICAgfSBjYXRjaCB7CiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICBgU2NvcGUgcHJlZml4IFVSTCAnJHtzY29wZVByZWZpeH0nIHdhcyBub3QgcGFyc2VhYmxlIGluIGltcG9ydCBtYXBgCiAgICAgICk7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtzY29wZVByZWZpeFVSTF0gPSBzb3J0QW5kTm9ybWFsaXplU3BlY2lmaWVyTWFwKAogICAgICBwb3RlbnRpYWxTcGVjaWZpZXJNYXAsCiAgICAgIGJhc2VVUkwyCiAgICApOwogIH0KICByZXR1cm4gbm9ybWFsaXplZDsKfQpmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikgewogIHJldHVybiBvYmogPT09IE9iamVjdChvYmopICYmICFBcnJheS5pc0FycmF5KG9iaik7Cn0KdmFyIGltcG9ydE1hcFByb21pc2UgPSBnZXRJbXBvcnRNYXBQcm9taXNlKCk7CmFzeW5jIGZ1bmN0aW9uIGdldEltcG9ydE1hcFByb21pc2UoKSB7CiAgY29uc3QgcmVsYXRpdmVQYXRoID0gcHJvY2Vzcy5lbnYuSU1QT1JUX01BUF9QQVRIIHx8IElNUE9SVF9NQVBfRklMRV9OQU1FOwogIGNvbnN0IGltcG9ydE1hcFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVsYXRpdmVQYXRoKTsKICBsZXQgc3RyOwogIHRyeSB7CiAgICBzdHIgPSBhd2FpdCBmcy5yZWFkRmlsZShpbXBvcnRNYXBQYXRoKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJldHVybiBlbXB0eU1hcCgpOwogIH0KICBsZXQganNvbjsKICB0cnkgewogICAganNvbiA9IGF3YWl0IEpTT04ucGFyc2Uoc3RyKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHRocm93IEVycm9yKAogICAgICBgSW1wb3J0IG1hcCBhdCAke2ltcG9ydE1hcFBhdGh9IGNvbnRhaW5zIGludmFsaWQganNvbjogJHtlcnIubWVzc2FnZX1gCiAgICApOwogIH0KICByZXR1cm4gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAoanNvbik7Cn0KZ2xvYmFsLm5vZGVMb2FkZXIgPSBnbG9iYWwubm9kZUxvYWRlciB8fCB7fTsKZ2xvYmFsLm5vZGVMb2FkZXIuc2V0SW1wb3J0TWFwUHJvbWlzZSA9IGZ1bmN0aW9uIHNldEltcG9ydE1hcFByb21pc2UocHJvbWlzZSkgewogIGltcG9ydE1hcFByb21pc2UgPSBwcm9taXNlLnRoZW4oKG1hcCkgPT4gewogICAgcmV0dXJuIHJlc29sdmVBbmRDb21wb3NlSW1wb3J0TWFwKG1hcCk7CiAgfSk7Cn07CmZ1bmN0aW9uIGVtcHR5TWFwKCkgewogIHJldHVybiB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH07Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2xvYWRlci1hcy1kYXRhLXVybC5qcwp2YXIgcmVzb2x2ZXIgPSAiYVcxd2IzSjBJSEJoZEdnZ1puSnZiU0FuY0dGMGFDYzdDbWx0Y0c5eWRDQjFjbXdnWm5KdmJTQW5kWEpzSnpzS2FXMXdiM0owSUhzZ2NISnZiV2x6WlhNZ1lYTWdabk1nZlNCbWNtOXRJQ2RtY3ljN0NncGxlSEJ2Y25RZ1kyOXVjM1FnU1UxUVQxSlVYMDFCVUY5R1NVeEZYMDVCVFVVZ1BTQW5ibTlrWlM1cGJYQnZjblJ0WVhBbk93b0tZMjl1YzNRZ1ltRnpaVlZTVENBOUlIVnliQzV3WVhSb1ZHOUdhV3hsVlZKTUtIQnliMk5sYzNNdVkzZGtLQ2twSUNzZ2NHRjBhQzV6WlhBN0Nnb3ZMeUJvZEhSd2N6b3ZMM2RwWTJjdVoybDBhSFZpTG1sdkwybHRjRzl5ZEMxdFlYQnpMeU51WlhjdGNtVnpiMngyWlMxaGJHZHZjbWwwYUcwS1pYaHdiM0owSUdaMWJtTjBhVzl1SUhKbGMyOXNkbVZUY0dWamFXWnBaWElvYVcxd2IzSjBUV0Z3TENCemNHVmphV1pwWlhJc0lIQmhjbVZ1ZEZWU1RDa2dld29nSUd4bGRDQmpkWEp5Wlc1MFFtRnpaVlZTVERzS0lDQnBaaUFvY0dGeVpXNTBWVkpNS1NCN0NpQWdJQ0JqYjI1emRDQnNZWE4wVTJ4aGMyaEpibVJsZUNBOUlIQmhjbVZ1ZEZWU1RDNXNZWE4wU1c1a1pYaFBaaWh3WVhSb0xuTmxjQ2s3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlIQmhjbVZ1ZEZWU1RDNXpiR2xqWlNnd0xDQnNZWE4wVTJ4aGMyaEpibVJsZUNBcklERXBPd29nSUgwZ1pXeHpaU0I3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlHSmhjMlZWVWt3N0NpQWdmUW9nSUdOdmJuTjBJRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWElnUFFvZ0lDQWdjR0Z5YzJWVlVreE1hV3RsVTNCbFkybG1hV1Z5S0hOd1pXTnBabWxsY2l3Z1kzVnljbVZ1ZEVKaGMyVlZVa3dwSUh4OElITndaV05wWm1sbGNqc0tJQ0JtYjNJZ0tHeGxkQ0J6WTI5d1pWQnlaV1pwZUNCcGJpQnBiWEJ2Y25STllYQXVjMk52Y0dWektTQjdDaUFnSUNCcFppQW9DaUFnSUNBZ0lITmpiM0JsVUhKbFptbDRJRDA5UFNCamRYSnlaVzUwUW1GelpWVlNUQ0I4ZkFvZ0lDQWdJQ0FvYzJOdmNHVlFjbVZtYVhndVpXNWtjMWRwZEdnb0p5OG5LU0FtSmlCamRYSnlaVzUwUW1GelpWVlNUQzV6ZEdGeWRITlhhWFJvS0hOamIzQmxVSEpsWm1sNEtTa0tJQ0FnSUNrZ2V3b2dJQ0FnSUNCamIyNXpkQ0J6WTI5d1pVbHRjRzl5ZEhOTllYUmphQ0E5SUhKbGMyOXNkbVZKYlhCdmNuUnpUV0YwWTJnb0NpQWdJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpd0tJQ0FnSUNBZ0lDQnBiWEJ2Y25STllYQXVjMk52Y0dWelczTmpiM0JsVUhKbFptbDRYUW9nSUNBZ0lDQXBPd29nSUNBZ0lDQnBaaUFvYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmdwSUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmc3Q2lBZ0lDQWdJSDBLSUNBZ0lIMGdaV3h6WlNCN0NpQWdJQ0FnSUdOdmJuTjBJSFJ2Y0V4bGRtVnNTVzF3YjNKMGMwMWhkR05vSUQwZ2NtVnpiMngyWlVsdGNHOXlkSE5OWVhSamFDZ0tJQ0FnSUNBZ0lDQnViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlMQW9nSUNBZ0lDQWdJR2x0Y0c5eWRFMWhjQzVwYlhCdmNuUnpDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHbG1JQ2gwYjNCTVpYWmxiRWx0Y0c5eWRITk5ZWFJqYUNrZ2V3b2dJQ0FnSUNBZ0lISmxkSFZ5YmlCMGIzQk1aWFpsYkVsdGNHOXlkSE5OWVhSamFEc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJSEpsYzI5c2RtVkpiWEJ2Y25SelRXRjBZMmdvYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2l3Z2FXMXdiM0owVFdGd0xtbHRjRzl5ZEhNcE93cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOeVpYTnZiSFpsTFdGdUxXbHRjRzl5ZEhNdGJXRjBZMmdLWm5WdVkzUnBiMjRnY21WemIyeDJaVWx0Y0c5eWRITk5ZWFJqYUNodWIzSnRZV3hwZW1Wa1UzQmxZMmxtYVdWeUxDQnpjR1ZqYVdacFpYSk5ZWEFwSUhzS0lDQm1iM0lnS0d4bGRDQnpjR1ZqYVdacFpYSkxaWGtnYVc0Z2MzQmxZMmxtYVdWeVRXRndLU0I3Q2lBZ0lDQmpiMjV6ZENCeVpYTnZiSFYwYVc5dVVtVnpkV3gwSUQwZ2MzQmxZMmxtYVdWeVRXRndXM053WldOcFptbGxja3RsZVYwN0Nnb2dJQ0FnYVdZZ0tITndaV05wWm1sbGNrdGxlU0E5UFQwZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpa2dld29nSUNBZ0lDQnBaaUFvY21WemIyeDFkR2x2YmxKbGMzVnNkQ0E5UFQwZ2JuVnNiQ2tnZXdvZ0lDQWdJQ0FnSUhSb2NtOTNJRlI1Y0dWRmNuSnZjaWdLSUNBZ0lDQWdJQ0FnSUdCVWFHVWdhVzF3YjNKMElHMWhjQ0J5WlhOdmJIVjBhVzl1SUc5bUlDUjdjM0JsWTJsbWFXVnlTMlY1ZlNCbVlXbHNaV1FnWkhWbElIUnZJR0VnYm5Wc2JDQmxiblJ5ZVdBS0lDQWdJQ0FnSUNBcE93b2dJQ0FnSUNCOUNpQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIVjBhVzl1VW1WemRXeDBPd29nSUNBZ2ZTQmxiSE5sSUdsbUlDZ0tJQ0FnSUNBZ2MzQmxZMmxtYVdWeVMyVjVMbVZ1WkhOWGFYUm9LQ2N2SnlrZ0ppWUtJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpNXpkR0Z5ZEhOWGFYUm9LSE53WldOcFptbGxja3RsZVNrS0lDQWdJQ2tnZXdvZ0lDQWdJQ0JwWmlBb2NtVnpiMngxZEdsdmJsSmxjM1ZzZENBOVBUMGdiblZzYkNrZ2V3b2dJQ0FnSUNBZ0lIUm9jbTkzSUZSNWNHVkZjbkp2Y2lnS0lDQWdJQ0FnSUNBZ0lHQlVhR1VnYVcxd2IzSjBJRzFoY0NCeVpYTnZiSFYwYVc5dUlHOW1JQ1I3YzNCbFkybG1hV1Z5UzJWNWZTQm1ZV2xzWldRZ1pIVmxJSFJ2SUdFZ2JuVnNiQ0JsYm5SeWVXQUtJQ0FnSUNBZ0lDQXBPd29nSUNBZ0lDQjlDaUFnSUNBZ0lHTnZibk4wSUdGbWRHVnlVSEpsWm1sNElEMGdibTl5YldGc2FYcGxaRk53WldOcFptbGxjaTV6YkdsalpTaHpjR1ZqYVdacFpYSkxaWGt1YkdWdVozUm9LVHNLSUNBZ0lDQWdkSEo1SUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGVlNUQ2hoWm5SbGNsQnlaV1pwZUN3Z2NtVnpiMngxZEdsdmJsSmxjM1ZzZENrdWFISmxaanNLSUNBZ0lDQWdmU0JqWVhSamFDQjdDaUFnSUNBZ0lDQWdkR2h5YjNjZ1ZIbHdaVVZ5Y205eUtBb2dJQ0FnSUNBZ0lDQWdZRlJvWlNCcGJYQnZjblFnYldGd0lISmxjMjlzZFhScGIyNGdiMllnSkh0emNHVmphV1pwWlhKTFpYbDlJR1poYVd4bFpDQmtkV1VnZEc4Z1ZWSk1JSEJoY25ObElHWmhhV3gxY21WZ0NpQWdJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJRzUxYkd3N0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNCaGNuTnBibWNLWlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVkJibVJEYjIxd2IzTmxTVzF3YjNKMFRXRndLSEJoY25ObFpDa2dld29nSUM4dklGTjBaWEFnTWdvZ0lHbG1JQ2doYVhOUWJHRnBiazlpYW1WamRDaHdZWEp6WldRcEtTQjdDaUFnSUNCMGFISnZkeUJGY25KdmNpaGdTVzUyWVd4cFpDQnBiWEJ2Y25RZ2JXRndJQzBnZEc5d0lHeGxkbVZzSUcxMWMzUWdZbVVnWVc0Z2IySnFaV04wWUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURNS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkVsdGNHOXlkSE1nUFNCN2ZUc0tDaUFnTHk4Z1UzUmxjQ0EwQ2lBZ2FXWWdLSEJoY25ObFpDNW9ZWE5QZDI1UWNtOXdaWEowZVNnbmFXMXdiM0owY3ljcEtTQjdDaUFnSUNBdkx5QlRkR1Z3SURRdU1Rb2dJQ0FnYVdZZ0tDRnBjMUJzWVdsdVQySnFaV04wS0hCaGNuTmxaQzVwYlhCdmNuUnpLU2tnZXdvZ0lDQWdJQ0IwYUhKdmR5QkZjbkp2Y2loZ1NXNTJZV3hwWkNCcGJYQnZjblFnYldGd0lDMGdJbWx0Y0c5eWRITWlJSEJ5YjNCbGNuUjVJRzExYzNRZ1ltVWdZVzRnYjJKcVpXTjBZQ2s3Q2lBZ0lDQjlDZ29nSUNBZ0x5OGdVM1JsY0NBMExqSUtJQ0FnSUhOdmNuUmxaRUZ1WkU1dmNtMWhiR2w2WldSSmJYQnZjblJ6SUQwZ2MyOXlkRUZ1WkU1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2sxaGNDZ0tJQ0FnSUNBZ2NHRnljMlZrTG1sdGNHOXlkSE1zQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURVS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkZOamIzQmxjeUE5SUh0OU93b0tJQ0F2THlCVGRHVndJRFlLSUNCcFppQW9jR0Z5YzJWa0xtaGhjMDkzYmxCeWIzQmxjblI1S0NkelkyOXdaWE1uS1NrZ2V3b2dJQ0FnTHk4Z1UzUmxjQ0EyTGpFS0lDQWdJR2xtSUNnaGFYTlFiR0ZwYms5aWFtVmpkQ2h3WVhKelpXUXVjMk52Y0dWektTa2dld29nSUNBZ0lDQjBhSEp2ZHlCRmNuSnZjaWhnU1c1MllXeHBaQ0JwYlhCdmNuUWdiV0Z3SUMwZ0luTmpiM0JsY3lJZ2NISnZjR1Z5ZEhrZ2JYVnpkQ0JpWlNCaGJpQnZZbXBsWTNSZ0tUc0tJQ0FnSUgwS0NpQWdJQ0F2THlCVGRHVndJRFl1TWdvZ0lDQWdjMjl5ZEdWa1FXNWtUbTl5YldGc2FYcGxaRk5qYjNCbGN5QTlJSE52Y25SQmJtUk9iM0p0WVd4cGVtVlRZMjl3WlhNb2NHRnljMlZrTG5OamIzQmxjeXdnWW1GelpWVlNUQ2s3Q2lBZ2ZRb0tJQ0F2THlCVGRHVndJRGNLSUNCamIyNXpkQ0JwYm5aaGJHbGtTMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLSEJoY25ObFpDa3VabWxzZEdWeUtBb2dJQ0FnS0d0bGVTa2dQVDRnYTJWNUlDRTlQU0FuYVcxd2IzSjBjeWNnSmlZZ2EyVjVJQ0U5UFNBbmMyTnZjR1Z6SndvZ0lDazdDaUFnYVdZZ0tHbHVkbUZzYVdSTFpYbHpMbXhsYm1kMGFDQStJREFwSUhzS0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnWUVsdWRtRnNhV1FnZEc5d0xXeGxkbVZzSUd0bGVTUjdDaUFnSUNBZ0lDQWdhVzUyWVd4cFpFdGxlWE11YkdWdVozUm9JRDRnTUNBL0lDZHpKeUE2SUNjbkNpQWdJQ0FnSUgwZ2FXNGdhVzF3YjNKMElHMWhjQ0F0SUNSN2FXNTJZV3hwWkV0bGVYTXVhbTlwYmlnbkxDQW5LWDFnQ2lBZ0lDQXBPd29nSUgwS0NpQWdMeThnVTNSbGNDQTRDaUFnY21WMGRYSnVJSHNLSUNBZ0lHbHRjRzl5ZEhNNklITnZjblJsWkVGdVpFNXZjbTFoYkdsNlpXUkpiWEJ2Y25SekxBb2dJQ0FnYzJOdmNHVnpPaUJ6YjNKMFpXUkJibVJPYjNKdFlXeHBlbVZrVTJOdmNHVnpMQW9nSUgwN0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNOdmNuUXRZVzVrTFc1dmNtMWhiR2w2WlMxaExYTndaV05wWm1sbGNpMXRZWEFLWm5WdVkzUnBiMjRnYzI5eWRFRnVaRTV2Y20xaGJHbDZaVk53WldOcFptbGxjazFoY0NodFlYQXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrSUQwZ2UzMDdDZ29nSUdadmNpQW9iR1YwSUhOd1pXTnBabWxsY2t0bGVTQnBiaUJ0WVhBcElIc0tJQ0FnSUdOdmJuTjBJSFpoYkhWbElEMGdiV0Z3VzNOd1pXTnBabWxsY2t0bGVWMDdDZ29nSUNBZ1kyOXVjM1FnYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2t0bGVTQTlJRzV2Y20xaGJHbDZaVk53WldOcFptbGxja3RsZVNoemNHVmphV1pwWlhKTFpYa3NJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWEpMWlhrZ1BUMDlJRzUxYkd3cElIc0tJQ0FnSUNBZ1kyOXVkR2x1ZFdVN0NpQWdJQ0I5Q2dvZ0lDQWdiR1YwSUdGa1pISmxjM05WVWt3Z1BTQndZWEp6WlZWU1RFeHBhMlZUY0dWamFXWnBaWElvZG1Gc2RXVXNJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLR0ZrWkhKbGMzTlZVa3dnUFQwOUlHNTFiR3dwSUhzS0lDQWdJQ0FnWTI5dWMyOXNaUzUzWVhKdUtBb2dJQ0FnSUNBZ0lHQkpiblpoYkdsa0lGVlNUQ0JoWkdSeVpYTnpJR1p2Y2lCcGJYQnZjblFnYldGd0lITndaV05wWm1sbGNpQW5KSHR6Y0dWamFXWnBaWEpMWlhsOUoyQUtJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGdHViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlTMlY1WFNBOUlHNTFiR3c3Q2lBZ0lDQWdJR052Ym5ScGJuVmxPd29nSUNBZ2ZRb0tJQ0FnSUdsbUlDaHpjR1ZqYVdacFpYSkxaWGt1Wlc1a2MxZHBkR2dvSnk4bktTQW1KaUFoWVdSa2NtVnpjMVZTVEM1bGJtUnpWMmwwYUNnbkx5Y3BLU0I3Q2lBZ0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnSUNCZ1NXNTJZV3hwWkNCVlVrd2dZV1JrY21WemN5Qm1iM0lnYVcxd2IzSjBJRzFoY0NCemNHVmphV1pwWlhJZ0p5UjdjM0JsWTJsbWFXVnlTMlY1ZlNjZ0xTQnphVzVqWlNCMGFHVWdjM0JsWTJsbWFXVnlJR1Z1WkhNZ2FXNGdjMnhoYzJnc0lITnZJRzExYzNRZ2RHaGxJR0ZrWkhKbGMzTmdDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHNXZjbTFoYkdsNlpXUmJibTl5YldGc2FYcGxaRk53WldOcFptbGxja3RsZVYwZ1BTQnVkV3hzT3dvZ0lDQWdJQ0JqYjI1MGFXNTFaVHNLSUNBZ0lIMEtDaUFnSUNCdWIzSnRZV3hwZW1Wa1cyNXZjbTFoYkdsNlpXUlRjR1ZqYVdacFpYSkxaWGxkSUQwZ1lXUmtjbVZ6YzFWU1REc0tJQ0I5Q2dvZ0lISmxkSFZ5YmlCdWIzSnRZV3hwZW1Wa093cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOdWIzSnRZV3hwZW1VdFlTMXpjR1ZqYVdacFpYSXRhMlY1Q21aMWJtTjBhVzl1SUc1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2t0bGVTaHJaWGtwSUhzS0lDQnBaaUFvYTJWNUlEMDlQU0FuSnlrZ2V3b2dJQ0FnWTI5dWMyOXNaUzUzWVhKdUtHQlRjR1ZqYVdacFpYSWdhMlY1Y3lCcGJpQnBiWEJ2Y25RZ2JXRndjeUJ0WVhrZ2JtOTBJR0psSUhSb1pTQmxiWEIwZVNCemRISnBibWRnS1RzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtDaUFnY21WMGRYSnVJSEJoY25ObFZWSk1UR2xyWlZOd1pXTnBabWxsY2loclpYa3NJR0poYzJWVlVrd3BJSHg4SUd0bGVUc0tmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amNHRnljMlV0WVMxMWNtd3RiR2xyWlMxcGJYQnZjblF0YzNCbFkybG1hV1Z5Q21aMWJtTjBhVzl1SUhCaGNuTmxWVkpNVEdsclpWTndaV05wWm1sbGNpaHpjR1ZqYVdacFpYSXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0IxYzJWQ1lYTmxWWEpzUVhOUVlYSmxiblFnUFFvZ0lDQWdjM0JsWTJsbWFXVnlMbk4wWVhKMGMxZHBkR2dvSnk4bktTQjhmQW9nSUNBZ2MzQmxZMmxtYVdWeUxuTjBZWEowYzFkcGRHZ29KeTR2SnlrZ2ZId0tJQ0FnSUhOd1pXTnBabWxsY2k1emRHRnlkSE5YYVhSb0tDY3VMaThuS1RzS0NpQWdkSEo1SUhzS0lDQWdJSEpsZEhWeWJpQnVaWGNnVlZKTUtITndaV05wWm1sbGNpd2dkWE5sUW1GelpWVnliRUZ6VUdGeVpXNTBJRDhnWW1GelpWVlNUQ0E2SUhWdVpHVm1hVzVsWkNrdWFISmxaanNLSUNCOUlHTmhkR05vSUhzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amMyOXlkQzFoYm1RdGJtOXliV0ZzYVhwbExYTmpiM0JsY3dwbWRXNWpkR2x2YmlCemIzSjBRVzVrVG05eWJXRnNhWHBsVTJOdmNHVnpLRzFoY0N3Z1ltRnpaVlZTVENrZ2V3b2dJR3hsZENCdWIzSnRZV3hwZW1Wa0lEMGdlMzA3Q2dvZ0lHWnZjaUFvYkdWMElITmpiM0JsVUhKbFptbDRJR2x1SUcxaGNDa2dld29nSUNBZ1kyOXVjM1FnY0c5MFpXNTBhV0ZzVTNCbFkybG1hV1Z5VFdGd0lEMGdiV0Z3VzNOamIzQmxVSEpsWm1sNFhUc0tJQ0FnSUdsbUlDZ2hhWE5RYkdGcGJrOWlhbVZqZENod2IzUmxiblJwWVd4VGNHVmphV1pwWlhKTllYQXBLU0I3Q2lBZ0lDQWdJSFJvY205M0lGUjVjR1ZGY25KdmNpZ0tJQ0FnSUNBZ0lDQmdWR2hsSUhaaGJIVmxJRzltSUhOamIzQmxJQ1I3YzJOdmNHVlFjbVZtYVhoOUlHMTFjM1FnWW1VZ1lTQktVMDlPSUc5aWFtVmpkR0FLSUNBZ0lDQWdLVHNLSUNBZ0lIMEtDaUFnSUNCc1pYUWdjMk52Y0dWUWNtVm1hWGhWVWt3N0NpQWdJQ0IwY25rZ2V3b2dJQ0FnSUNCelkyOXdaVkJ5WldacGVGVlNUQ0E5SUc1bGR5QlZVa3dvYzJOdmNHVlFjbVZtYVhnc0lHSmhjMlZWVWt3cExtaHlaV1k3Q2lBZ0lDQjlJR05oZEdOb0lIc0tJQ0FnSUNBZ1kyOXVjMjlzWlM1M1lYSnVLQW9nSUNBZ0lDQWdJR0JUWTI5d1pTQndjbVZtYVhnZ1ZWSk1JQ2NrZTNOamIzQmxVSEpsWm1sNGZTY2dkMkZ6SUc1dmRDQndZWEp6WldGaWJHVWdhVzRnYVcxd2IzSjBJRzFoY0dBS0lDQWdJQ0FnS1RzS0lDQWdJQ0FnWTI5dWRHbHVkV1U3Q2lBZ0lDQjlDZ29nSUNBZ2JtOXliV0ZzYVhwbFpGdHpZMjl3WlZCeVpXWnBlRlZTVEYwZ1BTQnpiM0owUVc1a1RtOXliV0ZzYVhwbFUzQmxZMmxtYVdWeVRXRndLQW9nSUNBZ0lDQndiM1JsYm5ScFlXeFRjR1ZqYVdacFpYSk5ZWEFzQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNCeVpYUjFjbTRnYm05eWJXRnNhWHBsWkRzS2ZRb0tablZ1WTNScGIyNGdhWE5RYkdGcGJrOWlhbVZqZENodlltb3BJSHNLSUNCeVpYUjFjbTRnYjJKcUlEMDlQU0JQWW1wbFkzUW9iMkpxS1NBbUppQWhRWEp5WVhrdWFYTkJjbkpoZVNodlltb3BPd3A5Q2dvdkx5QXRMUzBLQ214bGRDQnBiWEJ2Y25STllYQlFjbTl0YVhObElEMGdaMlYwU1cxd2IzSjBUV0Z3VUhKdmJXbHpaU2dwT3dvS1pYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVW9jM0JsWTJsbWFXVnlMQ0JqYjI1MFpYaDBMQ0JrWldaaGRXeDBVbVZ6YjJ4MlpTa2dld29nSUdOdmJuTjBJSHNnY0dGeVpXNTBWVkpNSUQwZ2JuVnNiQ0I5SUQwZ1kyOXVkR1Y0ZERzS0lDQmpiMjV6ZENCcGJYQnZjblJOWVhBZ1BTQmhkMkZwZENCcGJYQnZjblJOWVhCUWNtOXRhWE5sT3dvZ0lHTnZibk4wSUdsdGNHOXlkRTFoY0ZWeWJDQTlJSEpsYzI5c2RtVlRjR1ZqYVdacFpYSW9hVzF3YjNKMFRXRndMQ0J6Y0dWamFXWnBaWElzSUhCaGNtVnVkRlZTVENrN0Nnb2dJSEpsZEhWeWJpQmtaV1poZFd4MFVtVnpiMngyWlNocGJYQnZjblJOWVhCVmNtd2dQejhnYzNCbFkybG1hV1Z5TENCamIyNTBaWGgwTENCa1pXWmhkV3gwVW1WemIyeDJaU2s3Q24wS0NtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJzYjJGa0tIVnliQ3dnWTI5dWRHVjRkQ3dnWkdWbVlYVnNkRXh2WVdRcElIc0tJQ0JwWmlBb2RYSnNMbk4wWVhKMGMxZHBkR2dvSjJoMGRIQTZMeThuS1NCOGZDQjFjbXd1YzNSaGNuUnpWMmwwYUNnbmFIUjBjSE02THk4bktTa2dld29nSUNBZ1kyOXVjM1FnY21WeklEMGdZWGRoYVhRZ1ptVjBZMmdvZFhKc0tUc0tJQ0FnSUdsbUlDZ2hjbVZ6TG05cktTQjdDaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1JtRnBiR1ZrSUhSdklHWmxkR05vSUcxdlpIVnNaU0JtY205dElDUjdkWEpzZldBcE93b2dJQ0FnZlFvZ0lDQWdZMjl1YzNRZ2MyOTFjbU5sSUQwZ1lYZGhhWFFnY21WekxuUmxlSFFvS1RzS0lDQWdJSEpsZEhWeWJpQjdDaUFnSUNBZ0lITm9iM0owUTJseVkzVnBkRG9nZEhKMVpTd0tJQ0FnSUNBZ1ptOXliV0YwT2lBbmJXOWtkV3hsSnl3Z0NpQWdJQ0FnSUhOdmRYSmpaU3dLSUNBZ0lIMDdDaUFnZlFvS0lDQnBaaUFvSVhWeWJDNXpkR0Z5ZEhOWGFYUm9LQ2R1YjJSbE9pY3BLU0I3Q2lBZ0lDQmpiMjUwWlhoMExtWnZjbTFoZENBOUlDZHRiMlIxYkdVbk93b2dJSDBLSUNBS0lDQnlaWFIxY200Z1pHVm1ZWFZzZEV4dllXUW9kWEpzTENCamIyNTBaWGgwTENCa1pXWmhkV3gwVEc5aFpDazdDbjBLQ21GemVXNWpJR1oxYm1OMGFXOXVJR2RsZEVsdGNHOXlkRTFoY0ZCeWIyMXBjMlVvS1NCN0NpQWdZMjl1YzNRZ2NtVnNZWFJwZG1WUVlYUm9JRDBnY0hKdlkyVnpjeTVsYm5ZdVNVMVFUMUpVWDAxQlVGOVFRVlJJSUh4OElFbE5VRTlTVkY5TlFWQmZSa2xNUlY5T1FVMUZPd29nSUdOdmJuTjBJR2x0Y0c5eWRFMWhjRkJoZEdnZ1BTQndZWFJvTG5KbGMyOXNkbVVvY0hKdlkyVnpjeTVqZDJRb0tTd2djbVZzWVhScGRtVlFZWFJvS1RzS0NpQWdiR1YwSUhOMGNqc0tJQ0IwY25rZ2V3b2dJQ0FnYzNSeUlEMGdZWGRoYVhRZ1puTXVjbVZoWkVacGJHVW9hVzF3YjNKMFRXRndVR0YwYUNrN0NpQWdmU0JqWVhSamFDQW9aWEp5S1NCN0NpQWdJQ0J5WlhSMWNtNGdaVzF3ZEhsTllYQW9LVHNLSUNCOUNnb2dJR3hsZENCcWMyOXVPd29nSUhSeWVTQjdDaUFnSUNCcWMyOXVJRDBnWVhkaGFYUWdTbE5QVGk1d1lYSnpaU2h6ZEhJcE93b2dJSDBnWTJGMFkyZ2dLR1Z5Y2lrZ2V3b2dJQ0FnZEdoeWIzY2dSWEp5YjNJb0NpQWdJQ0FnSUdCSmJYQnZjblFnYldGd0lHRjBJQ1I3YVcxd2IzSjBUV0Z3VUdGMGFIMGdZMjl1ZEdGcGJuTWdhVzUyWVd4cFpDQnFjMjl1T2lBa2UyVnljaTV0WlhOellXZGxmV0FLSUNBZ0lDazdDaUFnZlFvS0lDQnlaWFIxY200Z2NtVnpiMngyWlVGdVpFTnZiWEJ2YzJWSmJYQnZjblJOWVhBb2FuTnZiaWs3Q24wS0NtZHNiMkpoYkM1dWIyUmxURzloWkdWeUlEMGdaMnh2WW1Gc0xtNXZaR1ZNYjJGa1pYSWdmSHdnZTMwN0NncG5iRzlpWVd3dWJtOWtaVXh2WVdSbGNpNXpaWFJKYlhCdmNuUk5ZWEJRY205dGFYTmxJRDBnWm5WdVkzUnBiMjRnYzJWMFNXMXdiM0owVFdGd1VISnZiV2x6WlNod2NtOXRhWE5sS1NCN0NpQWdhVzF3YjNKMFRXRndVSEp2YldselpTQTlJSEJ5YjIxcGMyVXVkR2hsYmlnb2JXRndLU0E5UGlCN0NpQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpVRnVaRU52YlhCdmMyVkpiWEJ2Y25STllYQW9iV0Z3S1RzS0lDQjlLVHNLZlRzS0NtWjFibU4wYVc5dUlHVnRjSFI1VFdGd0tDa2dld29nSUhKbGRIVnliaUI3SUdsdGNHOXlkSE02SUh0OUxDQnpZMjl3WlhNNklIdDlJSDA3Q24wSyI7CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi9ub2RlL2luaXQtbm9kZS1mZWRlcmF0aW9uLnRzCnZhciBkZWZhdWx0T3B0aW9ucyA9IHsKICByZW1vdGVzT3JNYW5pZmVzdFVybDoge30sCiAgcmVsQnVuZGxlUGF0aDogIi4uL2Jyb3dzZXIiLAogIHRocm93SWZSZW1vdGVOb3RGb3VuZDogZmFsc2UKfTsKYXN5bmMgZnVuY3Rpb24gaW5pdE5vZGVGZWRlcmF0aW9uKG9wdGlvbnMpIHsKICBjb25zdCBtZXJnZWRPcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9OwogIGNvbnN0IGltcG9ydE1hcCA9IGF3YWl0IGNyZWF0ZU5vZGVJbXBvcnRNYXAobWVyZ2VkT3B0aW9ucyk7CiAgYXdhaXQgd3JpdGVJbXBvcnRNYXAoaW1wb3J0TWFwKTsKICBhd2FpdCB3cml0ZVJlc29sdmVyKCk7CiAgcmVnaXN0ZXIocGF0aFRvRmlsZVVSTCgiLi9mZWRlcmF0aW9uLXJlc29sdmVyLm1qcyIpLmhyZWYpOwp9CmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU5vZGVJbXBvcnRNYXAob3B0aW9ucykgewogIGNvbnN0IHsgcmVtb3Rlc09yTWFuaWZlc3RVcmwsIHJlbEJ1bmRsZVBhdGggfSA9IG9wdGlvbnM7CiAgY29uc3QgcmVtb3RlcyA9IHR5cGVvZiByZW1vdGVzT3JNYW5pZmVzdFVybCA9PT0gIm9iamVjdCIgPyByZW1vdGVzT3JNYW5pZmVzdFVybCA6IGF3YWl0IGxvYWRGc01hbmlmZXN0KHJlbW90ZXNPck1hbmlmZXN0VXJsKTsKICBjb25zdCBob3N0SW5mbyA9IGF3YWl0IGxvYWRGc0ZlZGVyYXRpb25JbmZvKHJlbEJ1bmRsZVBhdGgpOwogIGNvbnN0IGhvc3RJbXBvcnRNYXAgPSBhd2FpdCBwcm9jZXNzSG9zdEluZm8oaG9zdEluZm8sICIuLyIgKyByZWxCdW5kbGVQYXRoKTsKICBjb25zdCByZW1vdGVzSW1wb3J0TWFwID0gYXdhaXQgcHJvY2Vzc1JlbW90ZUluZm9zKHJlbW90ZXMsIHsKICAgIHRocm93SWZSZW1vdGVOb3RGb3VuZDogb3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQsCiAgICBjYWNoZVRhZzogb3B0aW9ucy5jYWNoZVRhZwogIH0pOwogIGNvbnN0IGltcG9ydE1hcCA9IG1lcmdlSW1wb3J0TWFwcyhob3N0SW1wb3J0TWFwLCByZW1vdGVzSW1wb3J0TWFwKTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGc01hbmlmZXN0KG1hbmlmZXN0VXJsKSB7CiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzMi5yZWFkRmlsZShtYW5pZmVzdFVybCwgInV0Zi04Iik7CiAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKGNvbnRlbnQpOwogIHJldHVybiBtYW5pZmVzdDsKfQphc3luYyBmdW5jdGlvbiBsb2FkRnNGZWRlcmF0aW9uSW5mbyhyZWxCdW5kbGVQYXRoKSB7CiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aDIuam9pbihyZWxCdW5kbGVQYXRoLCAicmVtb3RlRW50cnkuanNvbiIpOwogIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmczIucmVhZEZpbGUobWFuaWZlc3RQYXRoLCAidXRmLTgiKTsKICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoY29udGVudCk7CiAgcmV0dXJuIG1hbmlmZXN0Owp9CmFzeW5jIGZ1bmN0aW9uIHdyaXRlSW1wb3J0TWFwKG1hcCkgewogIGF3YWl0IGZzMi53cml0ZUZpbGUoCiAgICBJTVBPUlRfTUFQX0ZJTEVfTkFNRSwKICAgIEpTT04uc3RyaW5naWZ5KG1hcCwgbnVsbCwgMiksCiAgICAidXRmLTgiCiAgKTsKfQphc3luYyBmdW5jdGlvbiB3cml0ZVJlc29sdmVyKCkgewogIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHJlc29sdmVyLCAiYmFzZTY0Iik7CiAgYXdhaXQgZnMyLndyaXRlRmlsZSgiZmVkZXJhdGlvbi1yZXNvbHZlci5tanMiLCBidWZmZXIsICJ1dGYtOCIpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi91dGlscy9mc3RhcnQtYXJncy1wYXJzZXIudHMKaW1wb3J0ICogYXMgZnMzIGZyb20gIm5vZGU6ZnMiOwp2YXIgZGVmYXVsdEFyZ3MgPSB7CiAgZW50cnk6ICIuL3NlcnZlci5tanMiLAogIHJlbW90ZXNPck1hbmlmZXN0VXJsOiAiLi4vYnJvd3Nlci9mZWRlcmF0aW9uLm1hbmlmZXN0Lmpzb24iLAogIHJlbEJ1bmRsZVBhdGg6ICIuLi9icm93c2VyLyIKfTsKZnVuY3Rpb24gcGFyc2VGU3RhcnRBcmdzKCkgewogIGNvbnN0IGFyZ3MyID0gewogICAgZW50cnk6ICIiLAogICAgcmVtb3Rlc09yTWFuaWZlc3RVcmw6ICIiLAogICAgcmVsQnVuZGxlUGF0aDogIiIKICB9OwogIGxldCBrZXkgPSAiIjsKICBmb3IgKGxldCBpID0gMjsgaSA8IHByb2Nlc3MuYXJndi5sZW5ndGg7IGkrKykgewogICAgY29uc3QgY2FuZCA9IHByb2Nlc3MuYXJndltpXTsKICAgIGlmIChjYW5kLnN0YXJ0c1dpdGgoIi0tIikpIHsKICAgICAgY29uc3QgY2FuZEtleSA9IGNhbmQuc3Vic3RyaW5nKDIpOwogICAgICBpZiAoZGVmYXVsdEFyZ3NbY2FuZEtleV0pIHsKICAgICAgICBrZXkgPSBjYW5kS2V5OwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUuZXJyb3IoYHN3aXRjaCAke2NhbmR9IG5vdCBzdXBwb3J0ZWQhYCk7CiAgICAgICAgZXhpdFdpdGhVc2FnZShkZWZhdWx0QXJncyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoa2V5KSB7CiAgICAgIGFyZ3MyW2tleV0gPSBjYW5kOwogICAgICBrZXkgPSAiIjsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoYHVucmVsYWRlZCB2YWx1ZSAke2NhbmR9IWApOwogICAgICBleGl0V2l0aFVzYWdlKGRlZmF1bHRBcmdzKTsKICAgIH0KICB9CiAgYXBwbHlEZWZhdWx0QXJncyhhcmdzMik7CiAgcmV0dXJuIGFyZ3MyOwp9CmZ1bmN0aW9uIGFwcGx5RGVmYXVsdEFyZ3MoYXJnczIpIHsKICBpZiAoYXJnczIucmVsQnVuZGxlUGF0aCAmJiAhYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwpIHsKICAgIGNvbnN0IGNhbmQgPSBkZWZhdWx0QXJncy5yZWxCdW5kbGVQYXRoICsgImZlZGVyYXRpb24ubWFuaWZlc3QuanNvbiI7CiAgICBpZiAoZnMzLmV4aXN0c1N5bmMoY2FuZCkpIHsKICAgICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBjYW5kOwogICAgfQogIH0KICBhcmdzMi5lbnRyeSA9IGFyZ3MyLmVudHJ5IHx8IGRlZmF1bHRBcmdzLmVudHJ5OwogIGFyZ3MyLnJlbEJ1bmRsZVBhdGggPSBhcmdzMi5yZWxCdW5kbGVQYXRoIHx8IGRlZmF1bHRBcmdzLnJlbEJ1bmRsZVBhdGg7CiAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCB8fCBkZWZhdWx0QXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybDsKICBpZiAoIWZzMy5leGlzdHNTeW5jKGFyZ3MyLnJlbW90ZXNPck1hbmlmZXN0VXJsKSkgewogICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSB2b2lkIDA7CiAgfQp9CmZ1bmN0aW9uIGV4aXRXaXRoVXNhZ2UoZGVmYXVsdEFyZ3MyKSB7CiAgbGV0IGFyZ3MyID0gIiI7CiAgZm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdEFyZ3MyKSB7CiAgICBhcmdzMiArPSBgWy0tJHtrZXl9ICR7ZGVmYXVsdEFyZ3MyW2tleV19XSBgOwogIH0KICBjb25zb2xlLmxvZygidXNhZ2U6IG5mc3RhcnQgIiArIGFyZ3MyKTsKICBwcm9jZXNzLmV4aXQoMSk7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2ZzdGFydC50cwp2YXIgYXJncyA9IHBhcnNlRlN0YXJ0QXJncygpOwooYXN5bmMgKCkgPT4gewogIGF3YWl0IGluaXROb2RlRmVkZXJhdGlvbih7CiAgICAuLi5hcmdzLnJlbW90ZXNPck1hbmlmZXN0VXJsID8geyByZW1vdGVzT3JNYW5pZmVzdFVybDogYXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybCB9IDoge30sCiAgICByZWxCdW5kbGVQYXRoOiBhcmdzLnJlbEJ1bmRsZVBhdGgKICB9KTsKICBhd2FpdCBpbXBvcnQoYXJncy5lbnRyeSk7Cn0pKCk7Cg==";
1
+ export declare const fstart = "Ly8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvbm9kZS9pbml0LW5vZGUtZmVkZXJhdGlvbi50cwppbXBvcnQgeyByZWdpc3RlciB9IGZyb20gIm5vZGU6bW9kdWxlIjsKaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gIm5vZGU6dXJsIjsKaW1wb3J0ICogYXMgZnMyIGZyb20gIm5vZGU6ZnMvcHJvbWlzZXMiOwppbXBvcnQgKiBhcyBwYXRoMiBmcm9tICJub2RlOnBhdGgiOwoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvZ2xvYmFsLWNhY2hlLnRzCnZhciBuZk5hbWVzcGFjZSA9ICJfX05BVElWRV9GRURFUkFUSU9OX18iOwp2YXIgZ2xvYmFsMiA9IGdsb2JhbFRoaXM7Cmdsb2JhbDJbbmZOYW1lc3BhY2VdID8/PSB7CiAgZXh0ZXJuYWxzOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLAogIHJlbW90ZU5hbWVzVG9SZW1vdGU6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksCiAgYmFzZVVybFRvUmVtb3RlTmFtZXM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkKfTsKdmFyIGdsb2JhbENhY2hlID0gZ2xvYmFsMltuZk5hbWVzcGFjZV07CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi9tb2RlbC9leHRlcm5hbHMudHMKdmFyIGV4dGVybmFscyA9IGdsb2JhbENhY2hlLmV4dGVybmFsczsKZnVuY3Rpb24gZ2V0RXh0ZXJuYWxLZXkoc2hhcmVkKSB7CiAgcmV0dXJuIGAke3NoYXJlZC5wYWNrYWdlTmFtZX1AJHtzaGFyZWQudmVyc2lvbn1gOwp9CmZ1bmN0aW9uIGdldEV4dGVybmFsVXJsKHNoYXJlZCkgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIHJldHVybiBleHRlcm5hbHMuZ2V0KHBhY2thZ2VLZXkpOwp9CmZ1bmN0aW9uIHNldEV4dGVybmFsVXJsKHNoYXJlZCwgdXJsMikgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIGV4dGVybmFscy5zZXQocGFja2FnZUtleSwgdXJsMik7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL21vZGVsL2ltcG9ydC1tYXAudHMKZnVuY3Rpb24gbWVyZ2VJbXBvcnRNYXBzKG1hcDEsIG1hcDIpIHsKICByZXR1cm4gewogICAgaW1wb3J0czogeyAuLi5tYXAxLmltcG9ydHMsIC4uLm1hcDIuaW1wb3J0cyB9LAogICAgc2NvcGVzOiB7IC4uLm1hcDEuc2NvcGVzLCAuLi5tYXAyLnNjb3BlcyB9CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvcmVtb3Rlcy50cwp2YXIgcmVtb3RlTmFtZXNUb1JlbW90ZSA9IGdsb2JhbENhY2hlLnJlbW90ZU5hbWVzVG9SZW1vdGU7CnZhciBiYXNlVXJsVG9SZW1vdGVOYW1lcyA9IGdsb2JhbENhY2hlLmJhc2VVcmxUb1JlbW90ZU5hbWVzOwpmdW5jdGlvbiBhZGRSZW1vdGUocmVtb3RlTmFtZSwgcmVtb3RlKSB7CiAgcmVtb3RlTmFtZXNUb1JlbW90ZS5zZXQocmVtb3RlTmFtZSwgcmVtb3RlKTsKICBiYXNlVXJsVG9SZW1vdGVOYW1lcy5zZXQocmVtb3RlLmJhc2VVcmwsIHJlbW90ZU5hbWUpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi91dGlscy9wYXRoLXV0aWxzLnRzCmZ1bmN0aW9uIGdldERpcmVjdG9yeSh1cmwyKSB7CiAgY29uc3QgcGFydHMgPSB1cmwyLnNwbGl0KCIvIik7CiAgcGFydHMucG9wKCk7CiAgcmV0dXJuIHBhcnRzLmpvaW4oIi8iKTsKfQpmdW5jdGlvbiBqb2luUGF0aHMocGF0aDEsIHBhdGgyMikgewogIHdoaWxlIChwYXRoMS5lbmRzV2l0aCgiLyIpKSB7CiAgICBwYXRoMSA9IHBhdGgxLnN1YnN0cmluZygwLCBwYXRoMS5sZW5ndGggLSAxKTsKICB9CiAgaWYgKHBhdGgyMi5zdGFydHNXaXRoKCIuLyIpKSB7CiAgICBwYXRoMjIgPSBwYXRoMjIuc3Vic3RyaW5nKDIsIHBhdGgyMi5sZW5ndGgpOwogIH0KICByZXR1cm4gYCR7cGF0aDF9LyR7cGF0aDIyfWA7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL3dhdGNoLWZlZGVyYXRpb24tYnVpbGQudHMKZnVuY3Rpb24gd2F0Y2hGZWRlcmF0aW9uQnVpbGRDb21wbGV0aW9uKGVuZHBvaW50KSB7CiAgY29uc3QgZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZW5kcG9pbnQpOwogIGV2ZW50U291cmNlLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTsKICAgIGlmIChkYXRhLnR5cGUgPT09ICJmZWRlcmF0aW9uLXJlYnVpbGQtY29tcGxldGUiIC8qIENPTVBMRVRFRCAqLykgewogICAgICBjb25zb2xlLmxvZygiW0ZlZGVyYXRpb25dIFJlYnVpbGQgY29tcGxldGVkLCByZWxvYWRpbmcuLi4iKTsKICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgfQogIH07CiAgZXZlbnRTb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zb2xlLndhcm4oIltGZWRlcmF0aW9uXSBTU0UgY29ubmVjdGlvbiBlcnJvcjoiLCBldmVudCk7CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvaW5pdC1mZWRlcmF0aW9uLnRzCmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NSZW1vdGVJbmZvcyhyZW1vdGVzLCBvcHRpb25zID0geyB0aHJvd0lmUmVtb3RlTm90Rm91bmQ6IGZhbHNlIH0pIHsKICBjb25zdCBwcm9jZXNzUmVtb3RlSW5mb1Byb21pc2VzID0gT2JqZWN0LmtleXMocmVtb3RlcykubWFwKAogICAgYXN5bmMgKHJlbW90ZU5hbWUpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBsZXQgdXJsMiA9IHJlbW90ZXNbcmVtb3RlTmFtZV07CiAgICAgICAgaWYgKG9wdGlvbnMuY2FjaGVUYWcpIHsKICAgICAgICAgIGNvbnN0IGFkZEFwcGVuZCA9IHJlbW90ZXNbcmVtb3RlTmFtZV0uaW5jbHVkZXMoIj8iKSA/ICImIiA6ICI/IjsKICAgICAgICAgIHVybDIgKz0gYCR7YWRkQXBwZW5kfXQ9JHtvcHRpb25zLmNhY2hlVGFnfWA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhd2FpdCBwcm9jZXNzUmVtb3RlSW5mbyh1cmwyLCByZW1vdGVOYW1lKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnN0IGVycm9yID0gYEVycm9yIGxvYWRpbmcgcmVtb3RlIGVudHJ5IGZvciAke3JlbW90ZU5hbWV9IGZyb20gZmlsZSAke3JlbW90ZXNbcmVtb3RlTmFtZV19YDsKICAgICAgICBpZiAob3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgKTsKICBjb25zdCByZW1vdGVJbXBvcnRNYXBzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvY2Vzc1JlbW90ZUluZm9Qcm9taXNlcyk7CiAgY29uc3QgaW1wb3J0TWFwID0gcmVtb3RlSW1wb3J0TWFwcy5yZWR1Y2UoCiAgICAoYWNjLCByZW1vdGVJbXBvcnRNYXApID0+IHJlbW90ZUltcG9ydE1hcCA/IG1lcmdlSW1wb3J0TWFwcyhhY2MsIHJlbW90ZUltcG9ydE1hcCkgOiBhY2MsCiAgICB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH0KICApOwogIHJldHVybiBpbXBvcnRNYXA7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1JlbW90ZUluZm8oZmVkZXJhdGlvbkluZm9VcmwsIHJlbW90ZU5hbWUpIHsKICBjb25zdCBiYXNlVXJsID0gZ2V0RGlyZWN0b3J5KGZlZGVyYXRpb25JbmZvVXJsKTsKICBjb25zdCByZW1vdGVJbmZvID0gYXdhaXQgbG9hZEZlZGVyYXRpb25JbmZvKGZlZGVyYXRpb25JbmZvVXJsKTsKICBpZiAoIXJlbW90ZU5hbWUpIHsKICAgIHJlbW90ZU5hbWUgPSByZW1vdGVJbmZvLm5hbWU7CiAgfQogIGlmIChyZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50KSB7CiAgICB3YXRjaEZlZGVyYXRpb25CdWlsZENvbXBsZXRpb24oCiAgICAgIGJhc2VVcmwgKyByZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50CiAgICApOwogIH0KICBjb25zdCBpbXBvcnRNYXAgPSBjcmVhdGVSZW1vdGVJbXBvcnRNYXAocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCk7CiAgYWRkUmVtb3RlKHJlbW90ZU5hbWUsIHsgLi4ucmVtb3RlSW5mbywgYmFzZVVybCB9KTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZUltcG9ydE1hcChyZW1vdGVJbmZvLCByZW1vdGVOYW1lLCBiYXNlVXJsKSB7CiAgY29uc3QgaW1wb3J0cyA9IHByb2Nlc3NFeHBvc2VkKHJlbW90ZUluZm8sIHJlbW90ZU5hbWUsIGJhc2VVcmwpOwogIGNvbnN0IHNjb3BlcyA9IHByb2Nlc3NSZW1vdGVJbXBvcnRzKHJlbW90ZUluZm8sIGJhc2VVcmwpOwogIHJldHVybiB7IGltcG9ydHMsIHNjb3BlcyB9Owp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGZWRlcmF0aW9uSW5mbyh1cmwyKSB7CiAgY29uc3QgaW5mbyA9IGF3YWl0IGZldGNoKHVybDIpLnRoZW4oKHIpID0+IHIuanNvbigpKTsKICByZXR1cm4gaW5mbzsKfQpmdW5jdGlvbiBwcm9jZXNzUmVtb3RlSW1wb3J0cyhyZW1vdGVJbmZvLCBiYXNlVXJsKSB7CiAgY29uc3Qgc2NvcGVzID0ge307CiAgY29uc3Qgc2NvcGVkSW1wb3J0cyA9IHt9OwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIHJlbW90ZUluZm8uc2hhcmVkKSB7CiAgICBjb25zdCBvdXRGaWxlTmFtZSA9IGdldEV4dGVybmFsVXJsKHNoYXJlZCkgPz8gam9pblBhdGhzKGJhc2VVcmwsIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgICBzZXRFeHRlcm5hbFVybChzaGFyZWQsIG91dEZpbGVOYW1lKTsKICAgIHNjb3BlZEltcG9ydHNbc2hhcmVkLnBhY2thZ2VOYW1lXSA9IG91dEZpbGVOYW1lOwogIH0KICBzY29wZXNbYmFzZVVybCArICIvIl0gPSBzY29wZWRJbXBvcnRzOwogIHJldHVybiBzY29wZXM7Cn0KZnVuY3Rpb24gcHJvY2Vzc0V4cG9zZWQocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCkgewogIGNvbnN0IGltcG9ydHMgPSB7fTsKICBmb3IgKGNvbnN0IGV4cG9zZWQgb2YgcmVtb3RlSW5mby5leHBvc2VzKSB7CiAgICBjb25zdCBrZXkgPSBqb2luUGF0aHMocmVtb3RlTmFtZSwgZXhwb3NlZC5rZXkpOwogICAgY29uc3QgdmFsdWUgPSBqb2luUGF0aHMoYmFzZVVybCwgZXhwb3NlZC5vdXRGaWxlTmFtZSk7CiAgICBpbXBvcnRzW2tleV0gPSB2YWx1ZTsKICB9CiAgcmV0dXJuIGltcG9ydHM7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0hvc3RJbmZvKGhvc3RJbmZvLCByZWxCdW5kbGVzUGF0aCA9ICIuLyIpIHsKICBjb25zdCBpbXBvcnRzID0gaG9zdEluZm8uc2hhcmVkLnJlZHVjZSgKICAgIChhY2MsIGN1cikgPT4gKHsKICAgICAgLi4uYWNjLAogICAgICBbY3VyLnBhY2thZ2VOYW1lXTogcmVsQnVuZGxlc1BhdGggKyBjdXIub3V0RmlsZU5hbWUKICAgIH0pLAogICAge30KICApOwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIGhvc3RJbmZvLnNoYXJlZCkgewogICAgc2V0RXh0ZXJuYWxVcmwoc2hhcmVkLCByZWxCdW5kbGVzUGF0aCArIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgfQogIHJldHVybiB7IGltcG9ydHMsIHNjb3Blczoge30gfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvdXRpbHMvaW1wb3J0LW1hcC1sb2FkZXIuanMKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCB1cmwgZnJvbSAidXJsIjsKaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICJmcyI7CnZhciBJTVBPUlRfTUFQX0ZJTEVfTkFNRSA9ICJub2RlLmltcG9ydG1hcCI7CnZhciBiYXNlVVJMID0gdXJsLnBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5jd2QoKSkgKyBwYXRoLnNlcDsKZnVuY3Rpb24gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAocGFyc2VkKSB7CiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhcnNlZCkpIHsKICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSB0b3AgbGV2ZWwgbXVzdCBiZSBhbiBvYmplY3RgKTsKICB9CiAgbGV0IHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0ge307CiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJzZWQsICJpbXBvcnRzIikpIHsKICAgIGlmICghaXNQbGFpbk9iamVjdChwYXJzZWQuaW1wb3J0cykpIHsKICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgaW1wb3J0IG1hcCAtICJpbXBvcnRzIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIG9iamVjdGApOwogICAgfQogICAgc29ydGVkQW5kTm9ybWFsaXplZEltcG9ydHMgPSBzb3J0QW5kTm9ybWFsaXplU3BlY2lmaWVyTWFwKAogICAgICBwYXJzZWQuaW1wb3J0cywKICAgICAgYmFzZVVSTAogICAgKTsKICB9CiAgbGV0IHNvcnRlZEFuZE5vcm1hbGl6ZWRTY29wZXMgPSB7fTsKICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcnNlZCwgInNjb3BlcyIpKSB7CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocGFyc2VkLnNjb3BlcykpIHsKICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgaW1wb3J0IG1hcCAtICJzY29wZXMiIHByb3BlcnR5IG11c3QgYmUgYW4gb2JqZWN0YCk7CiAgICB9CiAgICBzb3J0ZWRBbmROb3JtYWxpemVkU2NvcGVzID0gc29ydEFuZE5vcm1hbGl6ZVNjb3BlcyhwYXJzZWQuc2NvcGVzLCBiYXNlVVJMKTsKICB9CiAgY29uc3QgaW52YWxpZEtleXMgPSBPYmplY3Qua2V5cyhwYXJzZWQpLmZpbHRlcigKICAgIChrZXkpID0+IGtleSAhPT0gImltcG9ydHMiICYmIGtleSAhPT0gInNjb3BlcyIKICApOwogIGlmIChpbnZhbGlkS2V5cy5sZW5ndGggPiAwKSB7CiAgICBjb25zb2xlLndhcm4oCiAgICAgIGBJbnZhbGlkIHRvcC1sZXZlbCBrZXkke2ludmFsaWRLZXlzLmxlbmd0aCA+IDAgPyAicyIgOiAiIn0gaW4gaW1wb3J0IG1hcCAtICR7aW52YWxpZEtleXMuam9pbigiLCAiKX1gCiAgICApOwogIH0KICByZXR1cm4gewogICAgaW1wb3J0czogc29ydGVkQW5kTm9ybWFsaXplZEltcG9ydHMsCiAgICBzY29wZXM6IHNvcnRlZEFuZE5vcm1hbGl6ZWRTY29wZXMKICB9Owp9CmZ1bmN0aW9uIHNvcnRBbmROb3JtYWxpemVTcGVjaWZpZXJNYXAobWFwLCBiYXNlVVJMMikgewogIGNvbnN0IG5vcm1hbGl6ZWQgPSB7fTsKICBmb3IgKGxldCBzcGVjaWZpZXJLZXkgaW4gbWFwKSB7CiAgICBjb25zdCB2YWx1ZSA9IG1hcFtzcGVjaWZpZXJLZXldOwogICAgY29uc3Qgbm9ybWFsaXplZFNwZWNpZmllcktleSA9IG5vcm1hbGl6ZVNwZWNpZmllcktleShzcGVjaWZpZXJLZXksIGJhc2VVUkwyKTsKICAgIGlmIChub3JtYWxpemVkU3BlY2lmaWVyS2V5ID09PSBudWxsKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbGV0IGFkZHJlc3NVUkwgPSBwYXJzZVVSTExpa2VTcGVjaWZpZXIodmFsdWUsIGJhc2VVUkwyKTsKICAgIGlmIChhZGRyZXNzVVJMID09PSBudWxsKSB7CiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICBgSW52YWxpZCBVUkwgYWRkcmVzcyBmb3IgaW1wb3J0IG1hcCBzcGVjaWZpZXIgJyR7c3BlY2lmaWVyS2V5fSdgCiAgICAgICk7CiAgICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplZFNwZWNpZmllcktleV0gPSBudWxsOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmIChzcGVjaWZpZXJLZXkuZW5kc1dpdGgoIi8iKSAmJiAhYWRkcmVzc1VSTC5lbmRzV2l0aCgiLyIpKSB7CiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICBgSW52YWxpZCBVUkwgYWRkcmVzcyBmb3IgaW1wb3J0IG1hcCBzcGVjaWZpZXIgJyR7c3BlY2lmaWVyS2V5fScgLSBzaW5jZSB0aGUgc3BlY2lmaWVyIGVuZHMgaW4gc2xhc2gsIHNvIG11c3QgdGhlIGFkZHJlc3NgCiAgICAgICk7CiAgICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplZFNwZWNpZmllcktleV0gPSBudWxsOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplZFNwZWNpZmllcktleV0gPSBhZGRyZXNzVVJMOwogIH0KICByZXR1cm4gbm9ybWFsaXplZDsKfQpmdW5jdGlvbiBub3JtYWxpemVTcGVjaWZpZXJLZXkoa2V5KSB7CiAgaWYgKGtleSA9PT0gIiIpIHsKICAgIGNvbnNvbGUud2FybihgU3BlY2lmaWVyIGtleXMgaW4gaW1wb3J0IG1hcHMgbWF5IG5vdCBiZSB0aGUgZW1wdHkgc3RyaW5nYCk7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIHBhcnNlVVJMTGlrZVNwZWNpZmllcihrZXksIGJhc2VVUkwpIHx8IGtleTsKfQpmdW5jdGlvbiBwYXJzZVVSTExpa2VTcGVjaWZpZXIoc3BlY2lmaWVyLCBiYXNlVVJMMikgewogIGNvbnN0IHVzZUJhc2VVcmxBc1BhcmVudCA9IHNwZWNpZmllci5zdGFydHNXaXRoKCIvIikgfHwgc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi4vIikgfHwgc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi4uLyIpOwogIHRyeSB7CiAgICByZXR1cm4gbmV3IFVSTChzcGVjaWZpZXIsIHVzZUJhc2VVcmxBc1BhcmVudCA/IGJhc2VVUkwyIDogdm9pZCAwKS5ocmVmOwogIH0gY2F0Y2ggewogICAgcmV0dXJuIG51bGw7CiAgfQp9CmZ1bmN0aW9uIHNvcnRBbmROb3JtYWxpemVTY29wZXMobWFwLCBiYXNlVVJMMikgewogIGxldCBub3JtYWxpemVkID0ge307CiAgZm9yIChsZXQgc2NvcGVQcmVmaXggaW4gbWFwKSB7CiAgICBjb25zdCBwb3RlbnRpYWxTcGVjaWZpZXJNYXAgPSBtYXBbc2NvcGVQcmVmaXhdOwogICAgaWYgKCFpc1BsYWluT2JqZWN0KHBvdGVudGlhbFNwZWNpZmllck1hcCkpIHsKICAgICAgdGhyb3cgVHlwZUVycm9yKAogICAgICAgIGBUaGUgdmFsdWUgb2Ygc2NvcGUgJHtzY29wZVByZWZpeH0gbXVzdCBiZSBhIEpTT04gb2JqZWN0YAogICAgICApOwogICAgfQogICAgbGV0IHNjb3BlUHJlZml4VVJMOwogICAgdHJ5IHsKICAgICAgc2NvcGVQcmVmaXhVUkwgPSBuZXcgVVJMKHNjb3BlUHJlZml4LCBiYXNlVVJMMikuaHJlZjsKICAgIH0gY2F0Y2ggewogICAgICBjb25zb2xlLndhcm4oCiAgICAgICAgYFNjb3BlIHByZWZpeCBVUkwgJyR7c2NvcGVQcmVmaXh9JyB3YXMgbm90IHBhcnNlYWJsZSBpbiBpbXBvcnQgbWFwYAogICAgICApOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIG5vcm1hbGl6ZWRbc2NvcGVQcmVmaXhVUkxdID0gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcCgKICAgICAgcG90ZW50aWFsU3BlY2lmaWVyTWFwLAogICAgICBiYXNlVVJMMgogICAgKTsKICB9CiAgcmV0dXJuIG5vcm1hbGl6ZWQ7Cn0KZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHsKICByZXR1cm4gb2JqID09PSBPYmplY3Qob2JqKSAmJiAhQXJyYXkuaXNBcnJheShvYmopOwp9CnZhciBpbXBvcnRNYXBQcm9taXNlID0gZ2V0SW1wb3J0TWFwUHJvbWlzZSgpOwphc3luYyBmdW5jdGlvbiBnZXRJbXBvcnRNYXBQcm9taXNlKCkgewogIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHByb2Nlc3MuZW52LklNUE9SVF9NQVBfUEFUSCB8fCBJTVBPUlRfTUFQX0ZJTEVfTkFNRTsKICBjb25zdCBpbXBvcnRNYXBQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlbGF0aXZlUGF0aCk7CiAgbGV0IHN0cjsKICB0cnkgewogICAgc3RyID0gYXdhaXQgZnMucmVhZEZpbGUoaW1wb3J0TWFwUGF0aCk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXR1cm4gZW1wdHlNYXAoKTsKICB9CiAgbGV0IGpzb247CiAgdHJ5IHsKICAgIGpzb24gPSBhd2FpdCBKU09OLnBhcnNlKHN0cik7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICB0aHJvdyBFcnJvcigKICAgICAgYEltcG9ydCBtYXAgYXQgJHtpbXBvcnRNYXBQYXRofSBjb250YWlucyBpbnZhbGlkIGpzb246ICR7ZXJyLm1lc3NhZ2V9YAogICAgKTsKICB9CiAgcmV0dXJuIHJlc29sdmVBbmRDb21wb3NlSW1wb3J0TWFwKGpzb24pOwp9Cmdsb2JhbC5ub2RlTG9hZGVyID0gZ2xvYmFsLm5vZGVMb2FkZXIgfHwge307Cmdsb2JhbC5ub2RlTG9hZGVyLnNldEltcG9ydE1hcFByb21pc2UgPSBmdW5jdGlvbiBzZXRJbXBvcnRNYXBQcm9taXNlKHByb21pc2UpIHsKICBpbXBvcnRNYXBQcm9taXNlID0gcHJvbWlzZS50aGVuKChtYXApID0+IHsKICAgIHJldHVybiByZXNvbHZlQW5kQ29tcG9zZUltcG9ydE1hcChtYXApOwogIH0pOwp9OwpmdW5jdGlvbiBlbXB0eU1hcCgpIHsKICByZXR1cm4geyBpbXBvcnRzOiB7fSwgc2NvcGVzOiB7fSB9Owp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi91dGlscy9sb2FkZXItYXMtZGF0YS11cmwuanMKdmFyIHJlc29sdmVyID0gImFXMXdiM0owSUhCaGRHZ2dabkp2YlNBbmNHRjBhQ2M3Q21sdGNHOXlkQ0IxY213Z1puSnZiU0FuZFhKc0p6c0thVzF3YjNKMElIc2djSEp2YldselpYTWdZWE1nWm5NZ2ZTQm1jbTl0SUNkbWN5YzdDZ3BsZUhCdmNuUWdZMjl1YzNRZ1NVMVFUMUpVWDAxQlVGOUdTVXhGWDA1QlRVVWdQU0FuYm05a1pTNXBiWEJ2Y25SdFlYQW5Pd29LWTI5dWMzUWdZbUZ6WlZWU1RDQTlJSFZ5YkM1d1lYUm9WRzlHYVd4bFZWSk1LSEJ5YjJObGMzTXVZM2RrS0NrcElDc2djR0YwYUM1elpYQTdDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOdVpYY3RjbVZ6YjJ4MlpTMWhiR2R2Y21sMGFHMEtaWGh3YjNKMElHWjFibU4wYVc5dUlISmxjMjlzZG1WVGNHVmphV1pwWlhJb2FXMXdiM0owVFdGd0xDQnpjR1ZqYVdacFpYSXNJSEJoY21WdWRGVlNUQ2tnZXdvZ0lHeGxkQ0JqZFhKeVpXNTBRbUZ6WlZWU1REc0tJQ0JwWmlBb2NHRnlaVzUwVlZKTUtTQjdDaUFnSUNCamIyNXpkQ0JzWVhOMFUyeGhjMmhKYm1SbGVDQTlJSEJoY21WdWRGVlNUQzVzWVhOMFNXNWtaWGhQWmlod1lYUm9Mbk5sY0NrN0NpQWdJQ0JqZFhKeVpXNTBRbUZ6WlZWU1RDQTlJSEJoY21WdWRGVlNUQzV6YkdsalpTZ3dMQ0JzWVhOMFUyeGhjMmhKYm1SbGVDQXJJREVwT3dvZ0lIMGdaV3h6WlNCN0NpQWdJQ0JqZFhKeVpXNTBRbUZ6WlZWU1RDQTlJR0poYzJWVlVrdzdDaUFnZlFvZ0lHTnZibk4wSUc1dmNtMWhiR2w2WldSVGNHVmphV1pwWlhJZ1BRb2dJQ0FnY0dGeWMyVlZVa3hNYVd0bFUzQmxZMmxtYVdWeUtITndaV05wWm1sbGNpd2dZM1Z5Y21WdWRFSmhjMlZWVWt3cElIeDhJSE53WldOcFptbGxjanNLSUNCbWIzSWdLR3hsZENCelkyOXdaVkJ5WldacGVDQnBiaUJwYlhCdmNuUk5ZWEF1YzJOdmNHVnpLU0I3Q2lBZ0lDQnBaaUFvQ2lBZ0lDQWdJSE5qYjNCbFVISmxabWw0SUQwOVBTQmpkWEp5Wlc1MFFtRnpaVlZTVENCOGZBb2dJQ0FnSUNBb2MyTnZjR1ZRY21WbWFYZ3VaVzVrYzFkcGRHZ29KeThuS1NBbUppQmpkWEp5Wlc1MFFtRnpaVlZTVEM1emRHRnlkSE5YYVhSb0tITmpiM0JsVUhKbFptbDRLU2tLSUNBZ0lDa2dld29nSUNBZ0lDQmpiMjV6ZENCelkyOXdaVWx0Y0c5eWRITk5ZWFJqYUNBOUlISmxjMjlzZG1WSmJYQnZjblJ6VFdGMFkyZ29DaUFnSUNBZ0lDQWdibTl5YldGc2FYcGxaRk53WldOcFptbGxjaXdLSUNBZ0lDQWdJQ0JwYlhCdmNuUk5ZWEF1YzJOdmNHVnpXM05qYjNCbFVISmxabWw0WFN3S0lDQWdJQ0FnS1RzS0lDQWdJQ0FnYVdZZ0tITmpiM0JsU1cxd2IzSjBjMDFoZEdOb0tTQjdDaUFnSUNBZ0lDQWdjbVYwZFhKdUlITmpiM0JsU1cxd2IzSjBjMDFoZEdOb093b2dJQ0FnSUNCOUNpQWdJQ0I5SUdWc2MyVWdld29nSUNBZ0lDQmpiMjV6ZENCMGIzQk1aWFpsYkVsdGNHOXlkSE5OWVhSamFDQTlJSEpsYzI5c2RtVkpiWEJ2Y25SelRXRjBZMmdvQ2lBZ0lDQWdJQ0FnYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2l3S0lDQWdJQ0FnSUNCcGJYQnZjblJOWVhBdWFXMXdiM0owY3l3S0lDQWdJQ0FnS1RzS0lDQWdJQ0FnYVdZZ0tIUnZjRXhsZG1Wc1NXMXdiM0owYzAxaGRHTm9LU0I3Q2lBZ0lDQWdJQ0FnY21WMGRYSnVJSFJ2Y0V4bGRtVnNTVzF3YjNKMGMwMWhkR05vT3dvZ0lDQWdJQ0I5Q2lBZ0lDQjlDaUFnZlFvS0lDQnlaWFIxY200Z2NtVnpiMngyWlVsdGNHOXlkSE5OWVhSamFDaHViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlMQ0JwYlhCdmNuUk5ZWEF1YVcxd2IzSjBjeWs3Q24wS0NpOHZJR2gwZEhCek9pOHZkMmxqWnk1bmFYUm9kV0l1YVc4dmFXMXdiM0owTFcxaGNITXZJM0psYzI5c2RtVXRZVzR0YVcxd2IzSjBjeTF0WVhSamFBcG1kVzVqZEdsdmJpQnlaWE52YkhabFNXMXdiM0owYzAxaGRHTm9LRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWElzSUhOd1pXTnBabWxsY2sxaGNDa2dld29nSUdadmNpQW9iR1YwSUhOd1pXTnBabWxsY2t0bGVTQnBiaUJ6Y0dWamFXWnBaWEpOWVhBcElIc0tJQ0FnSUdOdmJuTjBJSEpsYzI5c2RYUnBiMjVTWlhOMWJIUWdQU0J6Y0dWamFXWnBaWEpOWVhCYmMzQmxZMmxtYVdWeVMyVjVYVHNLQ2lBZ0lDQnBaaUFvYzNCbFkybG1hV1Z5UzJWNUlEMDlQU0J1YjNKdFlXeHBlbVZrVTNCbFkybG1hV1Z5S1NCN0NpQWdJQ0FnSUdsbUlDaHlaWE52YkhWMGFXOXVVbVZ6ZFd4MElEMDlQU0J1ZFd4c0tTQjdDaUFnSUNBZ0lDQWdkR2h5YjNjZ1ZIbHdaVVZ5Y205eUtBb2dJQ0FnSUNBZ0lDQWdZRlJvWlNCcGJYQnZjblFnYldGd0lISmxjMjlzZFhScGIyNGdiMllnSkh0emNHVmphV1pwWlhKTFpYbDlJR1poYVd4bFpDQmtkV1VnZEc4Z1lTQnVkV3hzSUdWdWRISjVZQ3dLSUNBZ0lDQWdJQ0FwT3dvZ0lDQWdJQ0I5Q2lBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhWMGFXOXVVbVZ6ZFd4ME93b2dJQ0FnZlNCbGJITmxJR2xtSUNnS0lDQWdJQ0FnYzNCbFkybG1hV1Z5UzJWNUxtVnVaSE5YYVhSb0tDY3ZKeWtnSmlZS0lDQWdJQ0FnYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2k1emRHRnlkSE5YYVhSb0tITndaV05wWm1sbGNrdGxlU2tLSUNBZ0lDa2dld29nSUNBZ0lDQnBaaUFvY21WemIyeDFkR2x2YmxKbGMzVnNkQ0E5UFQwZ2JuVnNiQ2tnZXdvZ0lDQWdJQ0FnSUhSb2NtOTNJRlI1Y0dWRmNuSnZjaWdLSUNBZ0lDQWdJQ0FnSUdCVWFHVWdhVzF3YjNKMElHMWhjQ0J5WlhOdmJIVjBhVzl1SUc5bUlDUjdjM0JsWTJsbWFXVnlTMlY1ZlNCbVlXbHNaV1FnWkhWbElIUnZJR0VnYm5Wc2JDQmxiblJ5ZVdBc0NpQWdJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2ZRb2dJQ0FnSUNCamIyNXpkQ0JoWm5SbGNsQnlaV1pwZUNBOUlHNXZjbTFoYkdsNlpXUlRjR1ZqYVdacFpYSXVjMnhwWTJVb2MzQmxZMmxtYVdWeVMyVjVMbXhsYm1kMGFDazdDaUFnSUNBZ0lIUnllU0I3Q2lBZ0lDQWdJQ0FnY21WMGRYSnVJRzVsZHlCVlVrd29ZV1owWlhKUWNtVm1hWGdzSUhKbGMyOXNkWFJwYjI1U1pYTjFiSFFwTG1oeVpXWTdDaUFnSUNBZ0lIMGdZMkYwWTJnZ2V3b2dJQ0FnSUNBZ0lIUm9jbTkzSUZSNWNHVkZjbkp2Y2lnS0lDQWdJQ0FnSUNBZ0lHQlVhR1VnYVcxd2IzSjBJRzFoY0NCeVpYTnZiSFYwYVc5dUlHOW1JQ1I3YzNCbFkybG1hV1Z5UzJWNWZTQm1ZV2xzWldRZ1pIVmxJSFJ2SUZWU1RDQndZWEp6WlNCbVlXbHNkWEpsWUN3S0lDQWdJQ0FnSUNBcE93b2dJQ0FnSUNCOUNpQWdJQ0I5Q2lBZ2ZRb0tJQ0J5WlhSMWNtNGdiblZzYkRzS2ZRb0tMeThnYUhSMGNITTZMeTkzYVdObkxtZHBkR2gxWWk1cGJ5OXBiWEJ2Y25RdGJXRndjeThqY0dGeWMybHVad3BsZUhCdmNuUWdablZ1WTNScGIyNGdjbVZ6YjJ4MlpVRnVaRU52YlhCdmMyVkpiWEJ2Y25STllYQW9jR0Z5YzJWa0tTQjdDaUFnTHk4Z1UzUmxjQ0F5Q2lBZ2FXWWdLQ0ZwYzFCc1lXbHVUMkpxWldOMEtIQmhjbk5sWkNrcElIc0tJQ0FnSUhSb2NtOTNJRVZ5Y205eUtHQkpiblpoYkdsa0lHbHRjRzl5ZENCdFlYQWdMU0IwYjNBZ2JHVjJaV3dnYlhWemRDQmlaU0JoYmlCdlltcGxZM1JnS1RzS0lDQjlDZ29nSUM4dklGTjBaWEFnTXdvZ0lHeGxkQ0J6YjNKMFpXUkJibVJPYjNKdFlXeHBlbVZrU1cxd2IzSjBjeUE5SUh0OU93b0tJQ0F2THlCVGRHVndJRFFLSUNCcFppQW9UMkpxWldOMExuQnliM1J2ZEhsd1pTNW9ZWE5QZDI1UWNtOXdaWEowZVM1allXeHNLSEJoY25ObFpDd2dKMmx0Y0c5eWRITW5LU2tnZXdvZ0lDQWdMeThnVTNSbGNDQTBMakVLSUNBZ0lHbG1JQ2doYVhOUWJHRnBiazlpYW1WamRDaHdZWEp6WldRdWFXMXdiM0owY3lrcElIc0tJQ0FnSUNBZ2RHaHliM2NnUlhKeWIzSW9ZRWx1ZG1Gc2FXUWdhVzF3YjNKMElHMWhjQ0F0SUNKcGJYQnZjblJ6SWlCd2NtOXdaWEowZVNCdGRYTjBJR0psSUdGdUlHOWlhbVZqZEdBcE93b2dJQ0FnZlFvS0lDQWdJQzh2SUZOMFpYQWdOQzR5Q2lBZ0lDQnpiM0owWldSQmJtUk9iM0p0WVd4cGVtVmtTVzF3YjNKMGN5QTlJSE52Y25SQmJtUk9iM0p0WVd4cGVtVlRjR1ZqYVdacFpYSk5ZWEFvQ2lBZ0lDQWdJSEJoY25ObFpDNXBiWEJ2Y25SekxBb2dJQ0FnSUNCaVlYTmxWVkpNTEFvZ0lDQWdLVHNLSUNCOUNnb2dJQzh2SUZOMFpYQWdOUW9nSUd4bGRDQnpiM0owWldSQmJtUk9iM0p0WVd4cGVtVmtVMk52Y0dWeklEMGdlMzA3Q2dvZ0lDOHZJRk4wWlhBZ05nb2dJR2xtSUNoUFltcGxZM1F1Y0hKdmRHOTBlWEJsTG1oaGMwOTNibEJ5YjNCbGNuUjVMbU5oYkd3b2NHRnljMlZrTENBbmMyTnZjR1Z6SnlrcElIc0tJQ0FnSUM4dklGTjBaWEFnTmk0eENpQWdJQ0JwWmlBb0lXbHpVR3hoYVc1UFltcGxZM1FvY0dGeWMyVmtMbk5qYjNCbGN5a3BJSHNLSUNBZ0lDQWdkR2h5YjNjZ1JYSnliM0lvWUVsdWRtRnNhV1FnYVcxd2IzSjBJRzFoY0NBdElDSnpZMjl3WlhNaUlIQnliM0JsY25SNUlHMTFjM1FnWW1VZ1lXNGdiMkpxWldOMFlDazdDaUFnSUNCOUNnb2dJQ0FnTHk4Z1UzUmxjQ0EyTGpJS0lDQWdJSE52Y25SbFpFRnVaRTV2Y20xaGJHbDZaV1JUWTI5d1pYTWdQU0J6YjNKMFFXNWtUbTl5YldGc2FYcGxVMk52Y0dWektIQmhjbk5sWkM1elkyOXdaWE1zSUdKaGMyVlZVa3dwT3dvZ0lIMEtDaUFnTHk4Z1UzUmxjQ0EzQ2lBZ1kyOXVjM1FnYVc1MllXeHBaRXRsZVhNZ1BTQlBZbXBsWTNRdWEyVjVjeWh3WVhKelpXUXBMbVpwYkhSbGNpZ0tJQ0FnSUNoclpYa3BJRDArSUd0bGVTQWhQVDBnSjJsdGNHOXlkSE1uSUNZbUlHdGxlU0FoUFQwZ0ozTmpiM0JsY3ljc0NpQWdLVHNLSUNCcFppQW9hVzUyWVd4cFpFdGxlWE11YkdWdVozUm9JRDRnTUNrZ2V3b2dJQ0FnWTI5dWMyOXNaUzUzWVhKdUtBb2dJQ0FnSUNCZ1NXNTJZV3hwWkNCMGIzQXRiR1YyWld3Z2EyVjVKSHNLSUNBZ0lDQWdJQ0JwYm5aaGJHbGtTMlY1Y3k1c1pXNW5kR2dnUGlBd0lEOGdKM01uSURvZ0p5Y0tJQ0FnSUNBZ2ZTQnBiaUJwYlhCdmNuUWdiV0Z3SUMwZ0pIdHBiblpoYkdsa1MyVjVjeTVxYjJsdUtDY3NJQ2NwZldBc0NpQWdJQ0FwT3dvZ0lIMEtDaUFnTHk4Z1UzUmxjQ0E0Q2lBZ2NtVjBkWEp1SUhzS0lDQWdJR2x0Y0c5eWRITTZJSE52Y25SbFpFRnVaRTV2Y20xaGJHbDZaV1JKYlhCdmNuUnpMQW9nSUNBZ2MyTnZjR1Z6T2lCemIzSjBaV1JCYm1ST2IzSnRZV3hwZW1Wa1UyTnZjR1Z6TEFvZ0lIMDdDbjBLQ2k4dklHaDBkSEJ6T2k4dmQybGpaeTVuYVhSb2RXSXVhVzh2YVcxd2IzSjBMVzFoY0hNdkkzTnZjblF0WVc1a0xXNXZjbTFoYkdsNlpTMWhMWE53WldOcFptbGxjaTF0WVhBS1puVnVZM1JwYjI0Z2MyOXlkRUZ1WkU1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2sxaGNDaHRZWEFzSUdKaGMyVlZVa3dwSUhzS0lDQmpiMjV6ZENCdWIzSnRZV3hwZW1Wa0lEMGdlMzA3Q2dvZ0lHWnZjaUFvYkdWMElITndaV05wWm1sbGNrdGxlU0JwYmlCdFlYQXBJSHNLSUNBZ0lHTnZibk4wSUhaaGJIVmxJRDBnYldGd1czTndaV05wWm1sbGNrdGxlVjA3Q2dvZ0lDQWdZMjl1YzNRZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNrdGxlU0E5SUc1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2t0bGVTaHpjR1ZqYVdacFpYSkxaWGtzSUdKaGMyVlZVa3dwT3dvZ0lDQWdhV1lnS0c1dmNtMWhiR2w2WldSVGNHVmphV1pwWlhKTFpYa2dQVDA5SUc1MWJHd3BJSHNLSUNBZ0lDQWdZMjl1ZEdsdWRXVTdDaUFnSUNCOUNnb2dJQ0FnYkdWMElHRmtaSEpsYzNOVlVrd2dQU0J3WVhKelpWVlNURXhwYTJWVGNHVmphV1pwWlhJb2RtRnNkV1VzSUdKaGMyVlZVa3dwT3dvZ0lDQWdhV1lnS0dGa1pISmxjM05WVWt3Z1BUMDlJRzUxYkd3cElIc0tJQ0FnSUNBZ1kyOXVjMjlzWlM1M1lYSnVLQW9nSUNBZ0lDQWdJR0JKYm5aaGJHbGtJRlZTVENCaFpHUnlaWE56SUdadmNpQnBiWEJ2Y25RZ2JXRndJSE53WldOcFptbGxjaUFuSkh0emNHVmphV1pwWlhKTFpYbDlKMkFzQ2lBZ0lDQWdJQ2s3Q2lBZ0lDQWdJRzV2Y20xaGJHbDZaV1JiYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2t0bGVWMGdQU0J1ZFd4c093b2dJQ0FnSUNCamIyNTBhVzUxWlRzS0lDQWdJSDBLQ2lBZ0lDQnBaaUFvYzNCbFkybG1hV1Z5UzJWNUxtVnVaSE5YYVhSb0tDY3ZKeWtnSmlZZ0lXRmtaSEpsYzNOVlVrd3VaVzVrYzFkcGRHZ29KeThuS1NrZ2V3b2dJQ0FnSUNCamIyNXpiMnhsTG5kaGNtNG9DaUFnSUNBZ0lDQWdZRWx1ZG1Gc2FXUWdWVkpNSUdGa1pISmxjM01nWm05eUlHbHRjRzl5ZENCdFlYQWdjM0JsWTJsbWFXVnlJQ2NrZTNOd1pXTnBabWxsY2t0bGVYMG5JQzBnYzJsdVkyVWdkR2hsSUhOd1pXTnBabWxsY2lCbGJtUnpJR2x1SUhOc1lYTm9MQ0J6YnlCdGRYTjBJSFJvWlNCaFpHUnlaWE56WUN3S0lDQWdJQ0FnS1RzS0lDQWdJQ0FnYm05eWJXRnNhWHBsWkZ0dWIzSnRZV3hwZW1Wa1UzQmxZMmxtYVdWeVMyVjVYU0E5SUc1MWJHdzdDaUFnSUNBZ0lHTnZiblJwYm5WbE93b2dJQ0FnZlFvS0lDQWdJRzV2Y20xaGJHbDZaV1JiYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2t0bGVWMGdQU0JoWkdSeVpYTnpWVkpNT3dvZ0lIMEtDaUFnY21WMGRYSnVJRzV2Y20xaGJHbDZaV1E3Q24wS0NpOHZJR2gwZEhCek9pOHZkMmxqWnk1bmFYUm9kV0l1YVc4dmFXMXdiM0owTFcxaGNITXZJMjV2Y20xaGJHbDZaUzFoTFhOd1pXTnBabWxsY2kxclpYa0tablZ1WTNScGIyNGdibTl5YldGc2FYcGxVM0JsWTJsbWFXVnlTMlY1S0d0bGVTa2dld29nSUdsbUlDaHJaWGtnUFQwOUlDY25LU0I3Q2lBZ0lDQmpiMjV6YjJ4bExuZGhjbTRvWUZOd1pXTnBabWxsY2lCclpYbHpJR2x1SUdsdGNHOXlkQ0J0WVhCeklHMWhlU0J1YjNRZ1ltVWdkR2hsSUdWdGNIUjVJSE4wY21sdVoyQXBPd29nSUNBZ2NtVjBkWEp1SUc1MWJHdzdDaUFnZlFvS0lDQnlaWFIxY200Z2NHRnljMlZWVWt4TWFXdGxVM0JsWTJsbWFXVnlLR3RsZVN3Z1ltRnpaVlZTVENrZ2ZId2dhMlY1T3dwOUNnb3ZMeUJvZEhSd2N6b3ZMM2RwWTJjdVoybDBhSFZpTG1sdkwybHRjRzl5ZEMxdFlYQnpMeU53WVhKelpTMWhMWFZ5YkMxc2FXdGxMV2x0Y0c5eWRDMXpjR1ZqYVdacFpYSUtablZ1WTNScGIyNGdjR0Z5YzJWVlVreE1hV3RsVTNCbFkybG1hV1Z5S0hOd1pXTnBabWxsY2l3Z1ltRnpaVlZTVENrZ2V3b2dJR052Ym5OMElIVnpaVUpoYzJWVmNteEJjMUJoY21WdWRDQTlDaUFnSUNCemNHVmphV1pwWlhJdWMzUmhjblJ6VjJsMGFDZ25MeWNwSUh4OENpQWdJQ0J6Y0dWamFXWnBaWEl1YzNSaGNuUnpWMmwwYUNnbkxpOG5LU0I4ZkFvZ0lDQWdjM0JsWTJsbWFXVnlMbk4wWVhKMGMxZHBkR2dvSnk0dUx5Y3BPd29LSUNCMGNua2dld29nSUNBZ2NtVjBkWEp1SUc1bGR5QlZVa3dvYzNCbFkybG1hV1Z5TENCMWMyVkNZWE5sVlhKc1FYTlFZWEpsYm5RZ1B5QmlZWE5sVlZKTUlEb2dkVzVrWldacGJtVmtLUzVvY21WbU93b2dJSDBnWTJGMFkyZ2dld29nSUNBZ2NtVjBkWEp1SUc1MWJHdzdDaUFnZlFwOUNnb3ZMeUJvZEhSd2N6b3ZMM2RwWTJjdVoybDBhSFZpTG1sdkwybHRjRzl5ZEMxdFlYQnpMeU56YjNKMExXRnVaQzF1YjNKdFlXeHBlbVV0YzJOdmNHVnpDbVoxYm1OMGFXOXVJSE52Y25SQmJtUk9iM0p0WVd4cGVtVlRZMjl3WlhNb2JXRndMQ0JpWVhObFZWSk1LU0I3Q2lBZ2JHVjBJRzV2Y20xaGJHbDZaV1FnUFNCN2ZUc0tDaUFnWm05eUlDaHNaWFFnYzJOdmNHVlFjbVZtYVhnZ2FXNGdiV0Z3S1NCN0NpQWdJQ0JqYjI1emRDQndiM1JsYm5ScFlXeFRjR1ZqYVdacFpYSk5ZWEFnUFNCdFlYQmJjMk52Y0dWUWNtVm1hWGhkT3dvZ0lDQWdhV1lnS0NGcGMxQnNZV2x1VDJKcVpXTjBLSEJ2ZEdWdWRHbGhiRk53WldOcFptbGxjazFoY0NrcElIc0tJQ0FnSUNBZ2RHaHliM2NnVkhsd1pVVnljbTl5S0FvZ0lDQWdJQ0FnSUdCVWFHVWdkbUZzZFdVZ2IyWWdjMk52Y0dVZ0pIdHpZMjl3WlZCeVpXWnBlSDBnYlhWemRDQmlaU0JoSUVwVFQwNGdiMkpxWldOMFlDd0tJQ0FnSUNBZ0tUc0tJQ0FnSUgwS0NpQWdJQ0JzWlhRZ2MyTnZjR1ZRY21WbWFYaFZVa3c3Q2lBZ0lDQjBjbmtnZXdvZ0lDQWdJQ0J6WTI5d1pWQnlaV1pwZUZWU1RDQTlJRzVsZHlCVlVrd29jMk52Y0dWUWNtVm1hWGdzSUdKaGMyVlZVa3dwTG1oeVpXWTdDaUFnSUNCOUlHTmhkR05vSUhzS0lDQWdJQ0FnWTI5dWMyOXNaUzUzWVhKdUtBb2dJQ0FnSUNBZ0lHQlRZMjl3WlNCd2NtVm1hWGdnVlZKTUlDY2tlM05qYjNCbFVISmxabWw0ZlNjZ2QyRnpJRzV2ZENCd1lYSnpaV0ZpYkdVZ2FXNGdhVzF3YjNKMElHMWhjR0FzQ2lBZ0lDQWdJQ2s3Q2lBZ0lDQWdJR052Ym5ScGJuVmxPd29nSUNBZ2ZRb0tJQ0FnSUc1dmNtMWhiR2w2WldSYmMyTnZjR1ZRY21WbWFYaFZVa3hkSUQwZ2MyOXlkRUZ1WkU1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2sxaGNDZ0tJQ0FnSUNBZ2NHOTBaVzUwYVdGc1UzQmxZMmxtYVdWeVRXRndMQW9nSUNBZ0lDQmlZWE5sVlZKTUxBb2dJQ0FnS1RzS0lDQjlDZ29nSUhKbGRIVnliaUJ1YjNKdFlXeHBlbVZrT3dwOUNncG1kVzVqZEdsdmJpQnBjMUJzWVdsdVQySnFaV04wS0c5aWFpa2dld29nSUhKbGRIVnliaUJ2WW1vZ1BUMDlJRTlpYW1WamRDaHZZbW9wSUNZbUlDRkJjbkpoZVM1cGMwRnljbUY1S0c5aWFpazdDbjBLQ2k4dklDMHRMUW9LYkdWMElHbHRjRzl5ZEUxaGNGQnliMjFwYzJVZ1BTQm5aWFJKYlhCdmNuUk5ZWEJRY205dGFYTmxLQ2s3Q2dwbGVIQnZjblFnWVhONWJtTWdablZ1WTNScGIyNGdjbVZ6YjJ4MlpTaHpjR1ZqYVdacFpYSXNJR052Ym5SbGVIUXNJR1JsWm1GMWJIUlNaWE52YkhabEtTQjdDaUFnWTI5dWMzUWdleUJ3WVhKbGJuUlZVa3dnUFNCdWRXeHNJSDBnUFNCamIyNTBaWGgwT3dvZ0lHTnZibk4wSUdsdGNHOXlkRTFoY0NBOUlHRjNZV2wwSUdsdGNHOXlkRTFoY0ZCeWIyMXBjMlU3Q2lBZ1kyOXVjM1FnYVcxd2IzSjBUV0Z3VlhKc0lEMGdjbVZ6YjJ4MlpWTndaV05wWm1sbGNpaHBiWEJ2Y25STllYQXNJSE53WldOcFptbGxjaXdnY0dGeVpXNTBWVkpNS1RzS0NpQWdjbVYwZFhKdUlHUmxabUYxYkhSU1pYTnZiSFpsS0dsdGNHOXlkRTFoY0ZWeWJDQS9QeUJ6Y0dWamFXWnBaWElzSUdOdmJuUmxlSFFzSUdSbFptRjFiSFJTWlhOdmJIWmxLVHNLZlFvS1pYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJR3h2WVdRb2RYSnNMQ0JqYjI1MFpYaDBMQ0JrWldaaGRXeDBURzloWkNrZ2V3b2dJR2xtSUNoMWNtd3VjM1JoY25SelYybDBhQ2duYUhSMGNEb3ZMeWNwSUh4OElIVnliQzV6ZEdGeWRITlhhWFJvS0Nkb2RIUndjem92THljcEtTQjdDaUFnSUNCamIyNXpkQ0J5WlhNZ1BTQmhkMkZwZENCbVpYUmphQ2gxY213cE93b2dJQ0FnYVdZZ0tDRnlaWE11YjJzcElIc0tJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCR1lXbHNaV1FnZEc4Z1ptVjBZMmdnYlc5a2RXeGxJR1p5YjIwZ0pIdDFjbXg5WUNrN0NpQWdJQ0I5Q2lBZ0lDQmpiMjV6ZENCemIzVnlZMlVnUFNCaGQyRnBkQ0J5WlhNdWRHVjRkQ2dwT3dvZ0lDQWdjbVYwZFhKdUlIc0tJQ0FnSUNBZ2MyaHZjblJEYVhKamRXbDBPaUIwY25WbExBb2dJQ0FnSUNCbWIzSnRZWFE2SUNkdGIyUjFiR1VuTEFvZ0lDQWdJQ0J6YjNWeVkyVXNDaUFnSUNCOU93b2dJSDBLQ2lBZ2FXWWdLQ0YxY213dWMzUmhjblJ6VjJsMGFDZ25ibTlrWlRvbktTa2dld29nSUNBZ1kyOXVkR1Y0ZEM1bWIzSnRZWFFnUFNBbmJXOWtkV3hsSnpzS0lDQjlDZ29nSUhKbGRIVnliaUJrWldaaGRXeDBURzloWkNoMWNtd3NJR052Ym5SbGVIUXNJR1JsWm1GMWJIUk1iMkZrS1RzS2ZRb0tZWE41Ym1NZ1puVnVZM1JwYjI0Z1oyVjBTVzF3YjNKMFRXRndVSEp2YldselpTZ3BJSHNLSUNCamIyNXpkQ0J5Wld4aGRHbDJaVkJoZEdnZ1BTQndjbTlqWlhOekxtVnVkaTVKVFZCUFVsUmZUVUZRWDFCQlZFZ2dmSHdnU1UxUVQxSlVYMDFCVUY5R1NVeEZYMDVCVFVVN0NpQWdZMjl1YzNRZ2FXMXdiM0owVFdGd1VHRjBhQ0E5SUhCaGRHZ3VjbVZ6YjJ4MlpTaHdjbTlqWlhOekxtTjNaQ2dwTENCeVpXeGhkR2wyWlZCaGRHZ3BPd29LSUNCc1pYUWdjM1J5T3dvZ0lIUnllU0I3Q2lBZ0lDQnpkSElnUFNCaGQyRnBkQ0JtY3k1eVpXRmtSbWxzWlNocGJYQnZjblJOWVhCUVlYUm9LVHNLSUNCOUlHTmhkR05vSUNobGNuSXBJSHNLSUNBZ0lISmxkSFZ5YmlCbGJYQjBlVTFoY0NncE93b2dJSDBLQ2lBZ2JHVjBJR3B6YjI0N0NpQWdkSEo1SUhzS0lDQWdJR3B6YjI0Z1BTQmhkMkZwZENCS1UwOU9MbkJoY25ObEtITjBjaWs3Q2lBZ2ZTQmpZWFJqYUNBb1pYSnlLU0I3Q2lBZ0lDQjBhSEp2ZHlCRmNuSnZjaWdLSUNBZ0lDQWdZRWx0Y0c5eWRDQnRZWEFnWVhRZ0pIdHBiWEJ2Y25STllYQlFZWFJvZlNCamIyNTBZV2x1Y3lCcGJuWmhiR2xrSUdwemIyNDZJQ1I3WlhKeUxtMWxjM05oWjJWOVlDd0tJQ0FnSUNrN0NpQWdmUW9LSUNCeVpYUjFjbTRnY21WemIyeDJaVUZ1WkVOdmJYQnZjMlZKYlhCdmNuUk5ZWEFvYW5OdmJpazdDbjBLQ21kc2IySmhiQzV1YjJSbFRHOWhaR1Z5SUQwZ1oyeHZZbUZzTG01dlpHVk1iMkZrWlhJZ2ZId2dlMzA3Q2dwbmJHOWlZV3d1Ym05a1pVeHZZV1JsY2k1elpYUkpiWEJ2Y25STllYQlFjbTl0YVhObElEMGdablZ1WTNScGIyNGdjMlYwU1cxd2IzSjBUV0Z3VUhKdmJXbHpaU2h3Y205dGFYTmxLU0I3Q2lBZ2FXMXdiM0owVFdGd1VISnZiV2x6WlNBOUlIQnliMjFwYzJVdWRHaGxiaWdvYldGd0tTQTlQaUI3Q2lBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlVGdVpFTnZiWEJ2YzJWSmJYQnZjblJOWVhBb2JXRndLVHNLSUNCOUtUc0tmVHNLQ21aMWJtTjBhVzl1SUdWdGNIUjVUV0Z3S0NrZ2V3b2dJSEpsZEhWeWJpQjdJR2x0Y0c5eWRITTZJSHQ5TENCelkyOXdaWE02SUh0OUlIMDdDbjBLIjsKCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL25vZGUvaW5pdC1ub2RlLWZlZGVyYXRpb24udHMKdmFyIGRlZmF1bHRPcHRpb25zID0gewogIHJlbW90ZXNPck1hbmlmZXN0VXJsOiB7fSwKICByZWxCdW5kbGVQYXRoOiAiLi4vYnJvd3NlciIsCiAgdGhyb3dJZlJlbW90ZU5vdEZvdW5kOiBmYWxzZQp9Owphc3luYyBmdW5jdGlvbiBpbml0Tm9kZUZlZGVyYXRpb24ob3B0aW9ucykgewogIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH07CiAgY29uc3QgaW1wb3J0TWFwID0gYXdhaXQgY3JlYXRlTm9kZUltcG9ydE1hcChtZXJnZWRPcHRpb25zKTsKICBhd2FpdCB3cml0ZUltcG9ydE1hcChpbXBvcnRNYXApOwogIGF3YWl0IHdyaXRlUmVzb2x2ZXIoKTsKICByZWdpc3RlcihwYXRoVG9GaWxlVVJMKCIuL2ZlZGVyYXRpb24tcmVzb2x2ZXIubWpzIikuaHJlZik7Cn0KYXN5bmMgZnVuY3Rpb24gY3JlYXRlTm9kZUltcG9ydE1hcChvcHRpb25zKSB7CiAgY29uc3QgeyByZW1vdGVzT3JNYW5pZmVzdFVybCwgcmVsQnVuZGxlUGF0aCB9ID0gb3B0aW9uczsKICBjb25zdCByZW1vdGVzID0gdHlwZW9mIHJlbW90ZXNPck1hbmlmZXN0VXJsID09PSAib2JqZWN0IiA/IHJlbW90ZXNPck1hbmlmZXN0VXJsIDogYXdhaXQgbG9hZEZzTWFuaWZlc3QocmVtb3Rlc09yTWFuaWZlc3RVcmwpOwogIGNvbnN0IGhvc3RJbmZvID0gYXdhaXQgbG9hZEZzRmVkZXJhdGlvbkluZm8ocmVsQnVuZGxlUGF0aCk7CiAgY29uc3QgaG9zdEltcG9ydE1hcCA9IGF3YWl0IHByb2Nlc3NIb3N0SW5mbyhob3N0SW5mbywgIi4vIiArIHJlbEJ1bmRsZVBhdGgpOwogIGNvbnN0IHJlbW90ZXNJbXBvcnRNYXAgPSBhd2FpdCBwcm9jZXNzUmVtb3RlSW5mb3MocmVtb3RlcywgewogICAgdGhyb3dJZlJlbW90ZU5vdEZvdW5kOiBvcHRpb25zLnRocm93SWZSZW1vdGVOb3RGb3VuZCwKICAgIGNhY2hlVGFnOiBvcHRpb25zLmNhY2hlVGFnCiAgfSk7CiAgY29uc3QgaW1wb3J0TWFwID0gbWVyZ2VJbXBvcnRNYXBzKGhvc3RJbXBvcnRNYXAsIHJlbW90ZXNJbXBvcnRNYXApOwogIHJldHVybiBpbXBvcnRNYXA7Cn0KYXN5bmMgZnVuY3Rpb24gbG9hZEZzTWFuaWZlc3QobWFuaWZlc3RVcmwpIHsKICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMyLnJlYWRGaWxlKG1hbmlmZXN0VXJsLCAidXRmLTgiKTsKICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoY29udGVudCk7CiAgcmV0dXJuIG1hbmlmZXN0Owp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGc0ZlZGVyYXRpb25JbmZvKHJlbEJ1bmRsZVBhdGgpIHsKICBjb25zdCBtYW5pZmVzdFBhdGggPSBwYXRoMi5qb2luKHJlbEJ1bmRsZVBhdGgsICJyZW1vdGVFbnRyeS5qc29uIik7CiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzMi5yZWFkRmlsZShtYW5pZmVzdFBhdGgsICJ1dGYtOCIpOwogIGNvbnN0IG1hbmlmZXN0ID0gSlNPTi5wYXJzZShjb250ZW50KTsKICByZXR1cm4gbWFuaWZlc3Q7Cn0KYXN5bmMgZnVuY3Rpb24gd3JpdGVJbXBvcnRNYXAobWFwKSB7CiAgYXdhaXQgZnMyLndyaXRlRmlsZSgKICAgIElNUE9SVF9NQVBfRklMRV9OQU1FLAogICAgSlNPTi5zdHJpbmdpZnkobWFwLCBudWxsLCAyKSwKICAgICJ1dGYtOCIKICApOwp9CmFzeW5jIGZ1bmN0aW9uIHdyaXRlUmVzb2x2ZXIoKSB7CiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20ocmVzb2x2ZXIsICJiYXNlNjQiKTsKICBhd2FpdCBmczIud3JpdGVGaWxlKCJmZWRlcmF0aW9uLXJlc29sdmVyLm1qcyIsIGJ1ZmZlciwgInV0Zi04Iik7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2ZzdGFydC1hcmdzLXBhcnNlci50cwppbXBvcnQgKiBhcyBmczMgZnJvbSAibm9kZTpmcyI7CnZhciBkZWZhdWx0QXJncyA9IHsKICBlbnRyeTogIi4vc2VydmVyLm1qcyIsCiAgcmVtb3Rlc09yTWFuaWZlc3RVcmw6ICIuLi9icm93c2VyL2ZlZGVyYXRpb24ubWFuaWZlc3QuanNvbiIsCiAgcmVsQnVuZGxlUGF0aDogIi4uL2Jyb3dzZXIvIgp9OwpmdW5jdGlvbiBwYXJzZUZTdGFydEFyZ3MoKSB7CiAgY29uc3QgYXJnczIgPSB7CiAgICBlbnRyeTogIiIsCiAgICByZW1vdGVzT3JNYW5pZmVzdFVybDogIiIsCiAgICByZWxCdW5kbGVQYXRoOiAiIgogIH07CiAgbGV0IGtleSA9ICIiOwogIGZvciAobGV0IGkgPSAyOyBpIDwgcHJvY2Vzcy5hcmd2Lmxlbmd0aDsgaSsrKSB7CiAgICBjb25zdCBjYW5kID0gcHJvY2Vzcy5hcmd2W2ldOwogICAgaWYgKGNhbmQuc3RhcnRzV2l0aCgiLS0iKSkgewogICAgICBjb25zdCBjYW5kS2V5ID0gY2FuZC5zdWJzdHJpbmcoMik7CiAgICAgIGlmIChkZWZhdWx0QXJnc1tjYW5kS2V5XSkgewogICAgICAgIGtleSA9IGNhbmRLZXk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc29sZS5lcnJvcihgc3dpdGNoICR7Y2FuZH0gbm90IHN1cHBvcnRlZCFgKTsKICAgICAgICBleGl0V2l0aFVzYWdlKGRlZmF1bHRBcmdzKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChrZXkpIHsKICAgICAgYXJnczJba2V5XSA9IGNhbmQ7CiAgICAgIGtleSA9ICIiOwogICAgfSBlbHNlIHsKICAgICAgY29uc29sZS5lcnJvcihgdW5yZWxhZGVkIHZhbHVlICR7Y2FuZH0hYCk7CiAgICAgIGV4aXRXaXRoVXNhZ2UoZGVmYXVsdEFyZ3MpOwogICAgfQogIH0KICBhcHBseURlZmF1bHRBcmdzKGFyZ3MyKTsKICByZXR1cm4gYXJnczI7Cn0KZnVuY3Rpb24gYXBwbHlEZWZhdWx0QXJncyhhcmdzMikgewogIGlmIChhcmdzMi5yZWxCdW5kbGVQYXRoICYmICFhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCkgewogICAgY29uc3QgY2FuZCA9IGRlZmF1bHRBcmdzLnJlbEJ1bmRsZVBhdGggKyAiZmVkZXJhdGlvbi5tYW5pZmVzdC5qc29uIjsKICAgIGlmIChmczMuZXhpc3RzU3luYyhjYW5kKSkgewogICAgICBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCA9IGNhbmQ7CiAgICB9CiAgfQogIGFyZ3MyLmVudHJ5ID0gYXJnczIuZW50cnkgfHwgZGVmYXVsdEFyZ3MuZW50cnk7CiAgYXJnczIucmVsQnVuZGxlUGF0aCA9IGFyZ3MyLnJlbEJ1bmRsZVBhdGggfHwgZGVmYXVsdEFyZ3MucmVsQnVuZGxlUGF0aDsKICBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCA9IGFyZ3MyLnJlbW90ZXNPck1hbmlmZXN0VXJsIHx8IGRlZmF1bHRBcmdzLnJlbW90ZXNPck1hbmlmZXN0VXJsOwogIGlmICghZnMzLmV4aXN0c1N5bmMoYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwpKSB7CiAgICBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCA9IHZvaWQgMDsKICB9Cn0KZnVuY3Rpb24gZXhpdFdpdGhVc2FnZShkZWZhdWx0QXJnczIpIHsKICBsZXQgYXJnczIgPSAiIjsKICBmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0QXJnczIpIHsKICAgIGFyZ3MyICs9IGBbLS0ke2tleX0gJHtkZWZhdWx0QXJnczJba2V5XX1dIGA7CiAgfQogIGNvbnNvbGUubG9nKCJ1c2FnZTogbmZzdGFydCAiICsgYXJnczIpOwogIHByb2Nlc3MuZXhpdCgxKTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvdXRpbHMvZnN0YXJ0LnRzCnZhciBhcmdzID0gcGFyc2VGU3RhcnRBcmdzKCk7Cihhc3luYyAoKSA9PiB7CiAgYXdhaXQgaW5pdE5vZGVGZWRlcmF0aW9uKHsKICAgIC4uLmFyZ3MucmVtb3Rlc09yTWFuaWZlc3RVcmwgPyB7IHJlbW90ZXNPck1hbmlmZXN0VXJsOiBhcmdzLnJlbW90ZXNPck1hbmlmZXN0VXJsIH0gOiB7fSwKICAgIHJlbEJ1bmRsZVBhdGg6IGFyZ3MucmVsQnVuZGxlUGF0aAogIH0pOwogIGF3YWl0IGltcG9ydChhcmdzLmVudHJ5KTsKfSkoKTsK";
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.fstart = void 0;
4
- exports.fstart = "Ly8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvbm9kZS9pbml0LW5vZGUtZmVkZXJhdGlvbi50cwppbXBvcnQgeyByZWdpc3RlciB9IGZyb20gIm5vZGU6bW9kdWxlIjsKaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gIm5vZGU6dXJsIjsKaW1wb3J0ICogYXMgZnMyIGZyb20gIm5vZGU6ZnMvcHJvbWlzZXMiOwppbXBvcnQgKiBhcyBwYXRoMiBmcm9tICJub2RlOnBhdGgiOwoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvZ2xvYmFsLWNhY2hlLnRzCnZhciBuZk5hbWVzcGFjZSA9ICJfX05BVElWRV9GRURFUkFUSU9OX18iOwp2YXIgZ2xvYmFsMiA9IGdsb2JhbFRoaXM7Cmdsb2JhbDJbbmZOYW1lc3BhY2VdID8/PSB7CiAgZXh0ZXJuYWxzOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLAogIHJlbW90ZU5hbWVzVG9SZW1vdGU6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksCiAgYmFzZVVybFRvUmVtb3RlTmFtZXM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkKfTsKdmFyIGdsb2JhbENhY2hlID0gZ2xvYmFsMltuZk5hbWVzcGFjZV07CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi9tb2RlbC9leHRlcm5hbHMudHMKdmFyIGV4dGVybmFscyA9IGdsb2JhbENhY2hlLmV4dGVybmFsczsKZnVuY3Rpb24gZ2V0RXh0ZXJuYWxLZXkoc2hhcmVkKSB7CiAgcmV0dXJuIGAke3NoYXJlZC5wYWNrYWdlTmFtZX1AJHtzaGFyZWQudmVyc2lvbn1gOwp9CmZ1bmN0aW9uIGdldEV4dGVybmFsVXJsKHNoYXJlZCkgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIHJldHVybiBleHRlcm5hbHMuZ2V0KHBhY2thZ2VLZXkpOwp9CmZ1bmN0aW9uIHNldEV4dGVybmFsVXJsKHNoYXJlZCwgdXJsMikgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIGV4dGVybmFscy5zZXQocGFja2FnZUtleSwgdXJsMik7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL21vZGVsL2ltcG9ydC1tYXAudHMKZnVuY3Rpb24gbWVyZ2VJbXBvcnRNYXBzKG1hcDEsIG1hcDIpIHsKICByZXR1cm4gewogICAgaW1wb3J0czogeyAuLi5tYXAxLmltcG9ydHMsIC4uLm1hcDIuaW1wb3J0cyB9LAogICAgc2NvcGVzOiB7IC4uLm1hcDEuc2NvcGVzLCAuLi5tYXAyLnNjb3BlcyB9CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvcmVtb3Rlcy50cwp2YXIgcmVtb3RlTmFtZXNUb1JlbW90ZSA9IGdsb2JhbENhY2hlLnJlbW90ZU5hbWVzVG9SZW1vdGU7CnZhciBiYXNlVXJsVG9SZW1vdGVOYW1lcyA9IGdsb2JhbENhY2hlLmJhc2VVcmxUb1JlbW90ZU5hbWVzOwpmdW5jdGlvbiBhZGRSZW1vdGUocmVtb3RlTmFtZSwgcmVtb3RlKSB7CiAgcmVtb3RlTmFtZXNUb1JlbW90ZS5zZXQocmVtb3RlTmFtZSwgcmVtb3RlKTsKICBiYXNlVXJsVG9SZW1vdGVOYW1lcy5zZXQocmVtb3RlLmJhc2VVcmwsIHJlbW90ZU5hbWUpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi91dGlscy9wYXRoLXV0aWxzLnRzCmZ1bmN0aW9uIGdldERpcmVjdG9yeSh1cmwyKSB7CiAgY29uc3QgcGFydHMgPSB1cmwyLnNwbGl0KCIvIik7CiAgcGFydHMucG9wKCk7CiAgcmV0dXJuIHBhcnRzLmpvaW4oIi8iKTsKfQpmdW5jdGlvbiBqb2luUGF0aHMocGF0aDEsIHBhdGgyMikgewogIHdoaWxlIChwYXRoMS5lbmRzV2l0aCgiLyIpKSB7CiAgICBwYXRoMSA9IHBhdGgxLnN1YnN0cmluZygwLCBwYXRoMS5sZW5ndGggLSAxKTsKICB9CiAgaWYgKHBhdGgyMi5zdGFydHNXaXRoKCIuLyIpKSB7CiAgICBwYXRoMjIgPSBwYXRoMjIuc3Vic3RyaW5nKDIsIHBhdGgyMi5sZW5ndGgpOwogIH0KICByZXR1cm4gYCR7cGF0aDF9LyR7cGF0aDIyfWA7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL3dhdGNoLWZlZGVyYXRpb24tYnVpbGQudHMKZnVuY3Rpb24gd2F0Y2hGZWRlcmF0aW9uQnVpbGRDb21wbGV0aW9uKGVuZHBvaW50KSB7CiAgY29uc3QgZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZW5kcG9pbnQpOwogIGV2ZW50U291cmNlLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTsKICAgIGlmIChkYXRhLnR5cGUgPT09ICJmZWRlcmF0aW9uLXJlYnVpbGQtY29tcGxldGUiIC8qIENPTVBMRVRFRCAqLykgewogICAgICBjb25zb2xlLmxvZygiW0ZlZGVyYXRpb25dIFJlYnVpbGQgY29tcGxldGVkLCByZWxvYWRpbmcuLi4iKTsKICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgfQogIH07CiAgZXZlbnRTb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zb2xlLndhcm4oIltGZWRlcmF0aW9uXSBTU0UgY29ubmVjdGlvbiBlcnJvcjoiLCBldmVudCk7CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvaW5pdC1mZWRlcmF0aW9uLnRzCmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NSZW1vdGVJbmZvcyhyZW1vdGVzLCBvcHRpb25zID0geyB0aHJvd0lmUmVtb3RlTm90Rm91bmQ6IGZhbHNlIH0pIHsKICBjb25zdCBwcm9jZXNzUmVtb3RlSW5mb1Byb21pc2VzID0gT2JqZWN0LmtleXMocmVtb3RlcykubWFwKAogICAgYXN5bmMgKHJlbW90ZU5hbWUpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBsZXQgdXJsMiA9IHJlbW90ZXNbcmVtb3RlTmFtZV07CiAgICAgICAgaWYgKG9wdGlvbnMuY2FjaGVUYWcpIHsKICAgICAgICAgIGNvbnN0IGFkZEFwcGVuZCA9IHJlbW90ZXNbcmVtb3RlTmFtZV0uaW5jbHVkZXMoIj8iKSA/ICImIiA6ICI/IjsKICAgICAgICAgIHVybDIgKz0gYCR7YWRkQXBwZW5kfXQ9JHtvcHRpb25zLmNhY2hlVGFnfWA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhd2FpdCBwcm9jZXNzUmVtb3RlSW5mbyh1cmwyLCByZW1vdGVOYW1lKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnN0IGVycm9yID0gYEVycm9yIGxvYWRpbmcgcmVtb3RlIGVudHJ5IGZvciAke3JlbW90ZU5hbWV9IGZyb20gZmlsZSAke3JlbW90ZXNbcmVtb3RlTmFtZV19YDsKICAgICAgICBpZiAob3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgKTsKICBjb25zdCByZW1vdGVJbXBvcnRNYXBzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvY2Vzc1JlbW90ZUluZm9Qcm9taXNlcyk7CiAgY29uc3QgaW1wb3J0TWFwID0gcmVtb3RlSW1wb3J0TWFwcy5yZWR1Y2UoCiAgICAoYWNjLCByZW1vdGVJbXBvcnRNYXApID0+IHJlbW90ZUltcG9ydE1hcCA/IG1lcmdlSW1wb3J0TWFwcyhhY2MsIHJlbW90ZUltcG9ydE1hcCkgOiBhY2MsCiAgICB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH0KICApOwogIHJldHVybiBpbXBvcnRNYXA7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1JlbW90ZUluZm8oZmVkZXJhdGlvbkluZm9VcmwsIHJlbW90ZU5hbWUpIHsKICBjb25zdCBiYXNlVXJsID0gZ2V0RGlyZWN0b3J5KGZlZGVyYXRpb25JbmZvVXJsKTsKICBjb25zdCByZW1vdGVJbmZvID0gYXdhaXQgbG9hZEZlZGVyYXRpb25JbmZvKGZlZGVyYXRpb25JbmZvVXJsKTsKICBpZiAoIXJlbW90ZU5hbWUpIHsKICAgIHJlbW90ZU5hbWUgPSByZW1vdGVJbmZvLm5hbWU7CiAgfQogIGlmIChyZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50KSB7CiAgICB3YXRjaEZlZGVyYXRpb25CdWlsZENvbXBsZXRpb24oCiAgICAgIGJhc2VVcmwgKyByZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50CiAgICApOwogIH0KICBjb25zdCBpbXBvcnRNYXAgPSBjcmVhdGVSZW1vdGVJbXBvcnRNYXAocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCk7CiAgYWRkUmVtb3RlKHJlbW90ZU5hbWUsIHsgLi4ucmVtb3RlSW5mbywgYmFzZVVybCB9KTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZUltcG9ydE1hcChyZW1vdGVJbmZvLCByZW1vdGVOYW1lLCBiYXNlVXJsKSB7CiAgY29uc3QgaW1wb3J0cyA9IHByb2Nlc3NFeHBvc2VkKHJlbW90ZUluZm8sIHJlbW90ZU5hbWUsIGJhc2VVcmwpOwogIGNvbnN0IHNjb3BlcyA9IHByb2Nlc3NSZW1vdGVJbXBvcnRzKHJlbW90ZUluZm8sIGJhc2VVcmwpOwogIHJldHVybiB7IGltcG9ydHMsIHNjb3BlcyB9Owp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGZWRlcmF0aW9uSW5mbyh1cmwyKSB7CiAgY29uc3QgaW5mbyA9IGF3YWl0IGZldGNoKHVybDIpLnRoZW4oKHIpID0+IHIuanNvbigpKTsKICByZXR1cm4gaW5mbzsKfQpmdW5jdGlvbiBwcm9jZXNzUmVtb3RlSW1wb3J0cyhyZW1vdGVJbmZvLCBiYXNlVXJsKSB7CiAgY29uc3Qgc2NvcGVzID0ge307CiAgY29uc3Qgc2NvcGVkSW1wb3J0cyA9IHt9OwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIHJlbW90ZUluZm8uc2hhcmVkKSB7CiAgICBjb25zdCBvdXRGaWxlTmFtZSA9IGdldEV4dGVybmFsVXJsKHNoYXJlZCkgPz8gam9pblBhdGhzKGJhc2VVcmwsIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgICBzZXRFeHRlcm5hbFVybChzaGFyZWQsIG91dEZpbGVOYW1lKTsKICAgIHNjb3BlZEltcG9ydHNbc2hhcmVkLnBhY2thZ2VOYW1lXSA9IG91dEZpbGVOYW1lOwogIH0KICBzY29wZXNbYmFzZVVybCArICIvIl0gPSBzY29wZWRJbXBvcnRzOwogIHJldHVybiBzY29wZXM7Cn0KZnVuY3Rpb24gcHJvY2Vzc0V4cG9zZWQocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCkgewogIGNvbnN0IGltcG9ydHMgPSB7fTsKICBmb3IgKGNvbnN0IGV4cG9zZWQgb2YgcmVtb3RlSW5mby5leHBvc2VzKSB7CiAgICBjb25zdCBrZXkgPSBqb2luUGF0aHMocmVtb3RlTmFtZSwgZXhwb3NlZC5rZXkpOwogICAgY29uc3QgdmFsdWUgPSBqb2luUGF0aHMoYmFzZVVybCwgZXhwb3NlZC5vdXRGaWxlTmFtZSk7CiAgICBpbXBvcnRzW2tleV0gPSB2YWx1ZTsKICB9CiAgcmV0dXJuIGltcG9ydHM7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0hvc3RJbmZvKGhvc3RJbmZvLCByZWxCdW5kbGVzUGF0aCA9ICIuLyIpIHsKICBjb25zdCBpbXBvcnRzID0gaG9zdEluZm8uc2hhcmVkLnJlZHVjZSgKICAgIChhY2MsIGN1cikgPT4gKHsKICAgICAgLi4uYWNjLAogICAgICBbY3VyLnBhY2thZ2VOYW1lXTogcmVsQnVuZGxlc1BhdGggKyBjdXIub3V0RmlsZU5hbWUKICAgIH0pLAogICAge30KICApOwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIGhvc3RJbmZvLnNoYXJlZCkgewogICAgc2V0RXh0ZXJuYWxVcmwoc2hhcmVkLCByZWxCdW5kbGVzUGF0aCArIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgfQogIHJldHVybiB7IGltcG9ydHMsIHNjb3Blczoge30gfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvdXRpbHMvaW1wb3J0LW1hcC1sb2FkZXIuanMKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCB1cmwgZnJvbSAidXJsIjsKaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICJmcyI7CnZhciBJTVBPUlRfTUFQX0ZJTEVfTkFNRSA9ICJub2RlLmltcG9ydG1hcCI7CnZhciBiYXNlVVJMID0gdXJsLnBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5jd2QoKSkgKyBwYXRoLnNlcDsKZnVuY3Rpb24gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAocGFyc2VkKSB7CiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhcnNlZCkpIHsKICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSB0b3AgbGV2ZWwgbXVzdCBiZSBhbiBvYmplY3RgKTsKICB9CiAgbGV0IHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgiaW1wb3J0cyIpKSB7CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocGFyc2VkLmltcG9ydHMpKSB7CiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSAiaW1wb3J0cyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcCgKICAgICAgcGFyc2VkLmltcG9ydHMsCiAgICAgIGJhc2VVUkwKICAgICk7CiAgfQogIGxldCBzb3J0ZWRBbmROb3JtYWxpemVkU2NvcGVzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgic2NvcGVzIikpIHsKICAgIGlmICghaXNQbGFpbk9iamVjdChwYXJzZWQuc2NvcGVzKSkgewogICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBpbXBvcnQgbWFwIC0gInNjb3BlcyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRTY29wZXMgPSBzb3J0QW5kTm9ybWFsaXplU2NvcGVzKHBhcnNlZC5zY29wZXMsIGJhc2VVUkwpOwogIH0KICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKHBhcnNlZCkuZmlsdGVyKAogICAgKGtleSkgPT4ga2V5ICE9PSAiaW1wb3J0cyIgJiYga2V5ICE9PSAic2NvcGVzIgogICk7CiAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCA+IDApIHsKICAgIGNvbnNvbGUud2FybigKICAgICAgYEludmFsaWQgdG9wLWxldmVsIGtleSR7aW52YWxpZEtleXMubGVuZ3RoID4gMCA/ICJzIiA6ICIifSBpbiBpbXBvcnQgbWFwIC0gJHtpbnZhbGlkS2V5cy5qb2luKCIsICIpfWAKICAgICk7CiAgfQogIHJldHVybiB7CiAgICBpbXBvcnRzOiBzb3J0ZWRBbmROb3JtYWxpemVkSW1wb3J0cywKICAgIHNjb3Blczogc29ydGVkQW5kTm9ybWFsaXplZFNjb3BlcwogIH07Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcChtYXAsIGJhc2VVUkwyKSB7CiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9OwogIGZvciAobGV0IHNwZWNpZmllcktleSBpbiBtYXApIHsKICAgIGNvbnN0IHZhbHVlID0gbWFwW3NwZWNpZmllcktleV07CiAgICBjb25zdCBub3JtYWxpemVkU3BlY2lmaWVyS2V5ID0gbm9ybWFsaXplU3BlY2lmaWVyS2V5KHNwZWNpZmllcktleSwgYmFzZVVSTDIpOwogICAgaWYgKG5vcm1hbGl6ZWRTcGVjaWZpZXJLZXkgPT09IG51bGwpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBsZXQgYWRkcmVzc1VSTCA9IHBhcnNlVVJMTGlrZVNwZWNpZmllcih2YWx1ZSwgYmFzZVVSTDIpOwogICAgaWYgKGFkZHJlc3NVUkwgPT09IG51bGwpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9J2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKHNwZWNpZmllcktleS5lbmRzV2l0aCgiLyIpICYmICFhZGRyZXNzVVJMLmVuZHNXaXRoKCIvIikpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9JyAtIHNpbmNlIHRoZSBzcGVjaWZpZXIgZW5kcyBpbiBzbGFzaCwgc28gbXVzdCB0aGUgYWRkcmVzc2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IGFkZHJlc3NVUkw7CiAgfQogIHJldHVybiBub3JtYWxpemVkOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZVNwZWNpZmllcktleShrZXkpIHsKICBpZiAoa2V5ID09PSAiIikgewogICAgY29uc29sZS53YXJuKGBTcGVjaWZpZXIga2V5cyBpbiBpbXBvcnQgbWFwcyBtYXkgbm90IGJlIHRoZSBlbXB0eSBzdHJpbmdgKTsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4gcGFyc2VVUkxMaWtlU3BlY2lmaWVyKGtleSwgYmFzZVVSTCkgfHwga2V5Owp9CmZ1bmN0aW9uIHBhcnNlVVJMTGlrZVNwZWNpZmllcihzcGVjaWZpZXIsIGJhc2VVUkwyKSB7CiAgY29uc3QgdXNlQmFzZVVybEFzUGFyZW50ID0gc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi4vIik7CiAgdHJ5IHsKICAgIHJldHVybiBuZXcgVVJMKHNwZWNpZmllciwgdXNlQmFzZVVybEFzUGFyZW50ID8gYmFzZVVSTDIgOiB2b2lkIDApLmhyZWY7CiAgfSBjYXRjaCB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNjb3BlcyhtYXAsIGJhc2VVUkwyKSB7CiAgbGV0IG5vcm1hbGl6ZWQgPSB7fTsKICBmb3IgKGxldCBzY29wZVByZWZpeCBpbiBtYXApIHsKICAgIGNvbnN0IHBvdGVudGlhbFNwZWNpZmllck1hcCA9IG1hcFtzY29wZVByZWZpeF07CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocG90ZW50aWFsU3BlY2lmaWVyTWFwKSkgewogICAgICB0aHJvdyBUeXBlRXJyb3IoCiAgICAgICAgYFRoZSB2YWx1ZSBvZiBzY29wZSAke3Njb3BlUHJlZml4fSBtdXN0IGJlIGEgSlNPTiBvYmplY3RgCiAgICAgICk7CiAgICB9CiAgICBsZXQgc2NvcGVQcmVmaXhVUkw7CiAgICB0cnkgewogICAgICBzY29wZVByZWZpeFVSTCA9IG5ldyBVUkwoc2NvcGVQcmVmaXgsIGJhc2VVUkwyKS5ocmVmOwogICAgfSBjYXRjaCB7CiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICBgU2NvcGUgcHJlZml4IFVSTCAnJHtzY29wZVByZWZpeH0nIHdhcyBub3QgcGFyc2VhYmxlIGluIGltcG9ydCBtYXBgCiAgICAgICk7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtzY29wZVByZWZpeFVSTF0gPSBzb3J0QW5kTm9ybWFsaXplU3BlY2lmaWVyTWFwKAogICAgICBwb3RlbnRpYWxTcGVjaWZpZXJNYXAsCiAgICAgIGJhc2VVUkwyCiAgICApOwogIH0KICByZXR1cm4gbm9ybWFsaXplZDsKfQpmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikgewogIHJldHVybiBvYmogPT09IE9iamVjdChvYmopICYmICFBcnJheS5pc0FycmF5KG9iaik7Cn0KdmFyIGltcG9ydE1hcFByb21pc2UgPSBnZXRJbXBvcnRNYXBQcm9taXNlKCk7CmFzeW5jIGZ1bmN0aW9uIGdldEltcG9ydE1hcFByb21pc2UoKSB7CiAgY29uc3QgcmVsYXRpdmVQYXRoID0gcHJvY2Vzcy5lbnYuSU1QT1JUX01BUF9QQVRIIHx8IElNUE9SVF9NQVBfRklMRV9OQU1FOwogIGNvbnN0IGltcG9ydE1hcFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVsYXRpdmVQYXRoKTsKICBsZXQgc3RyOwogIHRyeSB7CiAgICBzdHIgPSBhd2FpdCBmcy5yZWFkRmlsZShpbXBvcnRNYXBQYXRoKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJldHVybiBlbXB0eU1hcCgpOwogIH0KICBsZXQganNvbjsKICB0cnkgewogICAganNvbiA9IGF3YWl0IEpTT04ucGFyc2Uoc3RyKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHRocm93IEVycm9yKAogICAgICBgSW1wb3J0IG1hcCBhdCAke2ltcG9ydE1hcFBhdGh9IGNvbnRhaW5zIGludmFsaWQganNvbjogJHtlcnIubWVzc2FnZX1gCiAgICApOwogIH0KICByZXR1cm4gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAoanNvbik7Cn0KZ2xvYmFsLm5vZGVMb2FkZXIgPSBnbG9iYWwubm9kZUxvYWRlciB8fCB7fTsKZ2xvYmFsLm5vZGVMb2FkZXIuc2V0SW1wb3J0TWFwUHJvbWlzZSA9IGZ1bmN0aW9uIHNldEltcG9ydE1hcFByb21pc2UocHJvbWlzZSkgewogIGltcG9ydE1hcFByb21pc2UgPSBwcm9taXNlLnRoZW4oKG1hcCkgPT4gewogICAgcmV0dXJuIHJlc29sdmVBbmRDb21wb3NlSW1wb3J0TWFwKG1hcCk7CiAgfSk7Cn07CmZ1bmN0aW9uIGVtcHR5TWFwKCkgewogIHJldHVybiB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH07Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2xvYWRlci1hcy1kYXRhLXVybC5qcwp2YXIgcmVzb2x2ZXIgPSAiYVcxd2IzSjBJSEJoZEdnZ1puSnZiU0FuY0dGMGFDYzdDbWx0Y0c5eWRDQjFjbXdnWm5KdmJTQW5kWEpzSnpzS2FXMXdiM0owSUhzZ2NISnZiV2x6WlhNZ1lYTWdabk1nZlNCbWNtOXRJQ2RtY3ljN0NncGxlSEJ2Y25RZ1kyOXVjM1FnU1UxUVQxSlVYMDFCVUY5R1NVeEZYMDVCVFVVZ1BTQW5ibTlrWlM1cGJYQnZjblJ0WVhBbk93b0tZMjl1YzNRZ1ltRnpaVlZTVENBOUlIVnliQzV3WVhSb1ZHOUdhV3hsVlZKTUtIQnliMk5sYzNNdVkzZGtLQ2twSUNzZ2NHRjBhQzV6WlhBN0Nnb3ZMeUJvZEhSd2N6b3ZMM2RwWTJjdVoybDBhSFZpTG1sdkwybHRjRzl5ZEMxdFlYQnpMeU51WlhjdGNtVnpiMngyWlMxaGJHZHZjbWwwYUcwS1pYaHdiM0owSUdaMWJtTjBhVzl1SUhKbGMyOXNkbVZUY0dWamFXWnBaWElvYVcxd2IzSjBUV0Z3TENCemNHVmphV1pwWlhJc0lIQmhjbVZ1ZEZWU1RDa2dld29nSUd4bGRDQmpkWEp5Wlc1MFFtRnpaVlZTVERzS0lDQnBaaUFvY0dGeVpXNTBWVkpNS1NCN0NpQWdJQ0JqYjI1emRDQnNZWE4wVTJ4aGMyaEpibVJsZUNBOUlIQmhjbVZ1ZEZWU1RDNXNZWE4wU1c1a1pYaFBaaWh3WVhSb0xuTmxjQ2s3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlIQmhjbVZ1ZEZWU1RDNXpiR2xqWlNnd0xDQnNZWE4wVTJ4aGMyaEpibVJsZUNBcklERXBPd29nSUgwZ1pXeHpaU0I3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlHSmhjMlZWVWt3N0NpQWdmUW9nSUdOdmJuTjBJRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWElnUFFvZ0lDQWdjR0Z5YzJWVlVreE1hV3RsVTNCbFkybG1hV1Z5S0hOd1pXTnBabWxsY2l3Z1kzVnljbVZ1ZEVKaGMyVlZVa3dwSUh4OElITndaV05wWm1sbGNqc0tJQ0JtYjNJZ0tHeGxkQ0J6WTI5d1pWQnlaV1pwZUNCcGJpQnBiWEJ2Y25STllYQXVjMk52Y0dWektTQjdDaUFnSUNCcFppQW9DaUFnSUNBZ0lITmpiM0JsVUhKbFptbDRJRDA5UFNCamRYSnlaVzUwUW1GelpWVlNUQ0I4ZkFvZ0lDQWdJQ0FvYzJOdmNHVlFjbVZtYVhndVpXNWtjMWRwZEdnb0p5OG5LU0FtSmlCamRYSnlaVzUwUW1GelpWVlNUQzV6ZEdGeWRITlhhWFJvS0hOamIzQmxVSEpsWm1sNEtTa0tJQ0FnSUNrZ2V3b2dJQ0FnSUNCamIyNXpkQ0J6WTI5d1pVbHRjRzl5ZEhOTllYUmphQ0E5SUhKbGMyOXNkbVZKYlhCdmNuUnpUV0YwWTJnb0NpQWdJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpd0tJQ0FnSUNBZ0lDQnBiWEJ2Y25STllYQXVjMk52Y0dWelczTmpiM0JsVUhKbFptbDRYUW9nSUNBZ0lDQXBPd29nSUNBZ0lDQnBaaUFvYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmdwSUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmc3Q2lBZ0lDQWdJSDBLSUNBZ0lIMGdaV3h6WlNCN0NpQWdJQ0FnSUdOdmJuTjBJSFJ2Y0V4bGRtVnNTVzF3YjNKMGMwMWhkR05vSUQwZ2NtVnpiMngyWlVsdGNHOXlkSE5OWVhSamFDZ0tJQ0FnSUNBZ0lDQnViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlMQW9nSUNBZ0lDQWdJR2x0Y0c5eWRFMWhjQzVwYlhCdmNuUnpDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHbG1JQ2gwYjNCTVpYWmxiRWx0Y0c5eWRITk5ZWFJqYUNrZ2V3b2dJQ0FnSUNBZ0lISmxkSFZ5YmlCMGIzQk1aWFpsYkVsdGNHOXlkSE5OWVhSamFEc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJSEpsYzI5c2RtVkpiWEJ2Y25SelRXRjBZMmdvYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2l3Z2FXMXdiM0owVFdGd0xtbHRjRzl5ZEhNcE93cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOeVpYTnZiSFpsTFdGdUxXbHRjRzl5ZEhNdGJXRjBZMmdLWm5WdVkzUnBiMjRnY21WemIyeDJaVWx0Y0c5eWRITk5ZWFJqYUNodWIzSnRZV3hwZW1Wa1UzQmxZMmxtYVdWeUxDQnpjR1ZqYVdacFpYSk5ZWEFwSUhzS0lDQm1iM0lnS0d4bGRDQnpjR1ZqYVdacFpYSkxaWGtnYVc0Z2MzQmxZMmxtYVdWeVRXRndLU0I3Q2lBZ0lDQmpiMjV6ZENCeVpYTnZiSFYwYVc5dVVtVnpkV3gwSUQwZ2MzQmxZMmxtYVdWeVRXRndXM053WldOcFptbGxja3RsZVYwN0Nnb2dJQ0FnYVdZZ0tITndaV05wWm1sbGNrdGxlU0E5UFQwZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpa2dld29nSUNBZ0lDQnBaaUFvY21WemIyeDFkR2x2YmxKbGMzVnNkQ0E5UFQwZ2JuVnNiQ2tnZXdvZ0lDQWdJQ0FnSUhSb2NtOTNJRlI1Y0dWRmNuSnZjaWdLSUNBZ0lDQWdJQ0FnSUdCVWFHVWdhVzF3YjNKMElHMWhjQ0J5WlhOdmJIVjBhVzl1SUc5bUlDUjdjM0JsWTJsbWFXVnlTMlY1ZlNCbVlXbHNaV1FnWkhWbElIUnZJR0VnYm5Wc2JDQmxiblJ5ZVdBS0lDQWdJQ0FnSUNBcE93b2dJQ0FnSUNCOUNpQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIVjBhVzl1VW1WemRXeDBPd29nSUNBZ2ZTQmxiSE5sSUdsbUlDZ0tJQ0FnSUNBZ2MzQmxZMmxtYVdWeVMyVjVMbVZ1WkhOWGFYUm9LQ2N2SnlrZ0ppWUtJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpNXpkR0Z5ZEhOWGFYUm9LSE53WldOcFptbGxja3RsZVNrS0lDQWdJQ2tnZXdvZ0lDQWdJQ0JwWmlBb2NtVnpiMngxZEdsdmJsSmxjM1ZzZENBOVBUMGdiblZzYkNrZ2V3b2dJQ0FnSUNBZ0lIUm9jbTkzSUZSNWNHVkZjbkp2Y2lnS0lDQWdJQ0FnSUNBZ0lHQlVhR1VnYVcxd2IzSjBJRzFoY0NCeVpYTnZiSFYwYVc5dUlHOW1JQ1I3YzNCbFkybG1hV1Z5UzJWNWZTQm1ZV2xzWldRZ1pIVmxJSFJ2SUdFZ2JuVnNiQ0JsYm5SeWVXQUtJQ0FnSUNBZ0lDQXBPd29nSUNBZ0lDQjlDaUFnSUNBZ0lHTnZibk4wSUdGbWRHVnlVSEpsWm1sNElEMGdibTl5YldGc2FYcGxaRk53WldOcFptbGxjaTV6YkdsalpTaHpjR1ZqYVdacFpYSkxaWGt1YkdWdVozUm9LVHNLSUNBZ0lDQWdkSEo1SUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGVlNUQ2hoWm5SbGNsQnlaV1pwZUN3Z2NtVnpiMngxZEdsdmJsSmxjM1ZzZENrdWFISmxaanNLSUNBZ0lDQWdmU0JqWVhSamFDQjdDaUFnSUNBZ0lDQWdkR2h5YjNjZ1ZIbHdaVVZ5Y205eUtBb2dJQ0FnSUNBZ0lDQWdZRlJvWlNCcGJYQnZjblFnYldGd0lISmxjMjlzZFhScGIyNGdiMllnSkh0emNHVmphV1pwWlhKTFpYbDlJR1poYVd4bFpDQmtkV1VnZEc4Z1ZWSk1JSEJoY25ObElHWmhhV3gxY21WZ0NpQWdJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJRzUxYkd3N0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNCaGNuTnBibWNLWlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVkJibVJEYjIxd2IzTmxTVzF3YjNKMFRXRndLSEJoY25ObFpDa2dld29nSUM4dklGTjBaWEFnTWdvZ0lHbG1JQ2doYVhOUWJHRnBiazlpYW1WamRDaHdZWEp6WldRcEtTQjdDaUFnSUNCMGFISnZkeUJGY25KdmNpaGdTVzUyWVd4cFpDQnBiWEJ2Y25RZ2JXRndJQzBnZEc5d0lHeGxkbVZzSUcxMWMzUWdZbVVnWVc0Z2IySnFaV04wWUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURNS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkVsdGNHOXlkSE1nUFNCN2ZUc0tDaUFnTHk4Z1UzUmxjQ0EwQ2lBZ2FXWWdLSEJoY25ObFpDNW9ZWE5QZDI1UWNtOXdaWEowZVNnbmFXMXdiM0owY3ljcEtTQjdDaUFnSUNBdkx5QlRkR1Z3SURRdU1Rb2dJQ0FnYVdZZ0tDRnBjMUJzWVdsdVQySnFaV04wS0hCaGNuTmxaQzVwYlhCdmNuUnpLU2tnZXdvZ0lDQWdJQ0IwYUhKdmR5QkZjbkp2Y2loZ1NXNTJZV3hwWkNCcGJYQnZjblFnYldGd0lDMGdJbWx0Y0c5eWRITWlJSEJ5YjNCbGNuUjVJRzExYzNRZ1ltVWdZVzRnYjJKcVpXTjBZQ2s3Q2lBZ0lDQjlDZ29nSUNBZ0x5OGdVM1JsY0NBMExqSUtJQ0FnSUhOdmNuUmxaRUZ1WkU1dmNtMWhiR2w2WldSSmJYQnZjblJ6SUQwZ2MyOXlkRUZ1WkU1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2sxaGNDZ0tJQ0FnSUNBZ2NHRnljMlZrTG1sdGNHOXlkSE1zQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURVS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkZOamIzQmxjeUE5SUh0OU93b0tJQ0F2THlCVGRHVndJRFlLSUNCcFppQW9jR0Z5YzJWa0xtaGhjMDkzYmxCeWIzQmxjblI1S0NkelkyOXdaWE1uS1NrZ2V3b2dJQ0FnTHk4Z1UzUmxjQ0EyTGpFS0lDQWdJR2xtSUNnaGFYTlFiR0ZwYms5aWFtVmpkQ2h3WVhKelpXUXVjMk52Y0dWektTa2dld29nSUNBZ0lDQjBhSEp2ZHlCRmNuSnZjaWhnU1c1MllXeHBaQ0JwYlhCdmNuUWdiV0Z3SUMwZ0luTmpiM0JsY3lJZ2NISnZjR1Z5ZEhrZ2JYVnpkQ0JpWlNCaGJpQnZZbXBsWTNSZ0tUc0tJQ0FnSUgwS0NpQWdJQ0F2THlCVGRHVndJRFl1TWdvZ0lDQWdjMjl5ZEdWa1FXNWtUbTl5YldGc2FYcGxaRk5qYjNCbGN5QTlJSE52Y25SQmJtUk9iM0p0WVd4cGVtVlRZMjl3WlhNb2NHRnljMlZrTG5OamIzQmxjeXdnWW1GelpWVlNUQ2s3Q2lBZ2ZRb0tJQ0F2THlCVGRHVndJRGNLSUNCamIyNXpkQ0JwYm5aaGJHbGtTMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLSEJoY25ObFpDa3VabWxzZEdWeUtBb2dJQ0FnS0d0bGVTa2dQVDRnYTJWNUlDRTlQU0FuYVcxd2IzSjBjeWNnSmlZZ2EyVjVJQ0U5UFNBbmMyTnZjR1Z6SndvZ0lDazdDaUFnYVdZZ0tHbHVkbUZzYVdSTFpYbHpMbXhsYm1kMGFDQStJREFwSUhzS0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnWUVsdWRtRnNhV1FnZEc5d0xXeGxkbVZzSUd0bGVTUjdDaUFnSUNBZ0lDQWdhVzUyWVd4cFpFdGxlWE11YkdWdVozUm9JRDRnTUNBL0lDZHpKeUE2SUNjbkNpQWdJQ0FnSUgwZ2FXNGdhVzF3YjNKMElHMWhjQ0F0SUNSN2FXNTJZV3hwWkV0bGVYTXVhbTlwYmlnbkxDQW5LWDFnQ2lBZ0lDQXBPd29nSUgwS0NpQWdMeThnVTNSbGNDQTRDaUFnY21WMGRYSnVJSHNLSUNBZ0lHbHRjRzl5ZEhNNklITnZjblJsWkVGdVpFNXZjbTFoYkdsNlpXUkpiWEJ2Y25SekxBb2dJQ0FnYzJOdmNHVnpPaUJ6YjNKMFpXUkJibVJPYjNKdFlXeHBlbVZrVTJOdmNHVnpMQW9nSUgwN0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNOdmNuUXRZVzVrTFc1dmNtMWhiR2w2WlMxaExYTndaV05wWm1sbGNpMXRZWEFLWm5WdVkzUnBiMjRnYzI5eWRFRnVaRTV2Y20xaGJHbDZaVk53WldOcFptbGxjazFoY0NodFlYQXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrSUQwZ2UzMDdDZ29nSUdadmNpQW9iR1YwSUhOd1pXTnBabWxsY2t0bGVTQnBiaUJ0WVhBcElIc0tJQ0FnSUdOdmJuTjBJSFpoYkhWbElEMGdiV0Z3VzNOd1pXTnBabWxsY2t0bGVWMDdDZ29nSUNBZ1kyOXVjM1FnYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2t0bGVTQTlJRzV2Y20xaGJHbDZaVk53WldOcFptbGxja3RsZVNoemNHVmphV1pwWlhKTFpYa3NJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWEpMWlhrZ1BUMDlJRzUxYkd3cElIc0tJQ0FnSUNBZ1kyOXVkR2x1ZFdVN0NpQWdJQ0I5Q2dvZ0lDQWdiR1YwSUdGa1pISmxjM05WVWt3Z1BTQndZWEp6WlZWU1RFeHBhMlZUY0dWamFXWnBaWElvZG1Gc2RXVXNJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLR0ZrWkhKbGMzTlZVa3dnUFQwOUlHNTFiR3dwSUhzS0lDQWdJQ0FnWTI5dWMyOXNaUzUzWVhKdUtBb2dJQ0FnSUNBZ0lHQkpiblpoYkdsa0lGVlNUQ0JoWkdSeVpYTnpJR1p2Y2lCcGJYQnZjblFnYldGd0lITndaV05wWm1sbGNpQW5KSHR6Y0dWamFXWnBaWEpMWlhsOUoyQUtJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGdHViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlTMlY1WFNBOUlHNTFiR3c3Q2lBZ0lDQWdJR052Ym5ScGJuVmxPd29nSUNBZ2ZRb0tJQ0FnSUdsbUlDaHpjR1ZqYVdacFpYSkxaWGt1Wlc1a2MxZHBkR2dvSnk4bktTQW1KaUFoWVdSa2NtVnpjMVZTVEM1bGJtUnpWMmwwYUNnbkx5Y3BLU0I3Q2lBZ0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnSUNCZ1NXNTJZV3hwWkNCVlVrd2dZV1JrY21WemN5Qm1iM0lnYVcxd2IzSjBJRzFoY0NCemNHVmphV1pwWlhJZ0p5UjdjM0JsWTJsbWFXVnlTMlY1ZlNjZ0xTQnphVzVqWlNCMGFHVWdjM0JsWTJsbWFXVnlJR1Z1WkhNZ2FXNGdjMnhoYzJnc0lITnZJRzExYzNRZ2RHaGxJR0ZrWkhKbGMzTmdDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHNXZjbTFoYkdsNlpXUmJibTl5YldGc2FYcGxaRk53WldOcFptbGxja3RsZVYwZ1BTQnVkV3hzT3dvZ0lDQWdJQ0JqYjI1MGFXNTFaVHNLSUNBZ0lIMEtDaUFnSUNCdWIzSnRZV3hwZW1Wa1cyNXZjbTFoYkdsNlpXUlRjR1ZqYVdacFpYSkxaWGxkSUQwZ1lXUmtjbVZ6YzFWU1REc0tJQ0I5Q2dvZ0lISmxkSFZ5YmlCdWIzSnRZV3hwZW1Wa093cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOdWIzSnRZV3hwZW1VdFlTMXpjR1ZqYVdacFpYSXRhMlY1Q21aMWJtTjBhVzl1SUc1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2t0bGVTaHJaWGtwSUhzS0lDQnBaaUFvYTJWNUlEMDlQU0FuSnlrZ2V3b2dJQ0FnWTI5dWMyOXNaUzUzWVhKdUtHQlRjR1ZqYVdacFpYSWdhMlY1Y3lCcGJpQnBiWEJ2Y25RZ2JXRndjeUJ0WVhrZ2JtOTBJR0psSUhSb1pTQmxiWEIwZVNCemRISnBibWRnS1RzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtDaUFnY21WMGRYSnVJSEJoY25ObFZWSk1UR2xyWlZOd1pXTnBabWxsY2loclpYa3NJR0poYzJWVlVrd3BJSHg4SUd0bGVUc0tmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amNHRnljMlV0WVMxMWNtd3RiR2xyWlMxcGJYQnZjblF0YzNCbFkybG1hV1Z5Q21aMWJtTjBhVzl1SUhCaGNuTmxWVkpNVEdsclpWTndaV05wWm1sbGNpaHpjR1ZqYVdacFpYSXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0IxYzJWQ1lYTmxWWEpzUVhOUVlYSmxiblFnUFFvZ0lDQWdjM0JsWTJsbWFXVnlMbk4wWVhKMGMxZHBkR2dvSnk4bktTQjhmQW9nSUNBZ2MzQmxZMmxtYVdWeUxuTjBZWEowYzFkcGRHZ29KeTR2SnlrZ2ZId0tJQ0FnSUhOd1pXTnBabWxsY2k1emRHRnlkSE5YYVhSb0tDY3VMaThuS1RzS0NpQWdkSEo1SUhzS0lDQWdJSEpsZEhWeWJpQnVaWGNnVlZKTUtITndaV05wWm1sbGNpd2dkWE5sUW1GelpWVnliRUZ6VUdGeVpXNTBJRDhnWW1GelpWVlNUQ0E2SUhWdVpHVm1hVzVsWkNrdWFISmxaanNLSUNCOUlHTmhkR05vSUhzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amMyOXlkQzFoYm1RdGJtOXliV0ZzYVhwbExYTmpiM0JsY3dwbWRXNWpkR2x2YmlCemIzSjBRVzVrVG05eWJXRnNhWHBsVTJOdmNHVnpLRzFoY0N3Z1ltRnpaVlZTVENrZ2V3b2dJR3hsZENCdWIzSnRZV3hwZW1Wa0lEMGdlMzA3Q2dvZ0lHWnZjaUFvYkdWMElITmpiM0JsVUhKbFptbDRJR2x1SUcxaGNDa2dld29nSUNBZ1kyOXVjM1FnY0c5MFpXNTBhV0ZzVTNCbFkybG1hV1Z5VFdGd0lEMGdiV0Z3VzNOamIzQmxVSEpsWm1sNFhUc0tJQ0FnSUdsbUlDZ2hhWE5RYkdGcGJrOWlhbVZqZENod2IzUmxiblJwWVd4VGNHVmphV1pwWlhKTllYQXBLU0I3Q2lBZ0lDQWdJSFJvY205M0lGUjVjR1ZGY25KdmNpZ0tJQ0FnSUNBZ0lDQmdWR2hsSUhaaGJIVmxJRzltSUhOamIzQmxJQ1I3YzJOdmNHVlFjbVZtYVhoOUlHMTFjM1FnWW1VZ1lTQktVMDlPSUc5aWFtVmpkR0FLSUNBZ0lDQWdLVHNLSUNBZ0lIMEtDaUFnSUNCc1pYUWdjMk52Y0dWUWNtVm1hWGhWVWt3N0NpQWdJQ0IwY25rZ2V3b2dJQ0FnSUNCelkyOXdaVkJ5WldacGVGVlNUQ0E5SUc1bGR5QlZVa3dvYzJOdmNHVlFjbVZtYVhnc0lHSmhjMlZWVWt3cExtaHlaV1k3Q2lBZ0lDQjlJR05oZEdOb0lIc0tJQ0FnSUNBZ1kyOXVjMjlzWlM1M1lYSnVLQW9nSUNBZ0lDQWdJR0JUWTI5d1pTQndjbVZtYVhnZ1ZWSk1JQ2NrZTNOamIzQmxVSEpsWm1sNGZTY2dkMkZ6SUc1dmRDQndZWEp6WldGaWJHVWdhVzRnYVcxd2IzSjBJRzFoY0dBS0lDQWdJQ0FnS1RzS0lDQWdJQ0FnWTI5dWRHbHVkV1U3Q2lBZ0lDQjlDZ29nSUNBZ2JtOXliV0ZzYVhwbFpGdHpZMjl3WlZCeVpXWnBlRlZTVEYwZ1BTQnpiM0owUVc1a1RtOXliV0ZzYVhwbFUzQmxZMmxtYVdWeVRXRndLQW9nSUNBZ0lDQndiM1JsYm5ScFlXeFRjR1ZqYVdacFpYSk5ZWEFzQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNCeVpYUjFjbTRnYm05eWJXRnNhWHBsWkRzS2ZRb0tablZ1WTNScGIyNGdhWE5RYkdGcGJrOWlhbVZqZENodlltb3BJSHNLSUNCeVpYUjFjbTRnYjJKcUlEMDlQU0JQWW1wbFkzUW9iMkpxS1NBbUppQWhRWEp5WVhrdWFYTkJjbkpoZVNodlltb3BPd3A5Q2dvdkx5QXRMUzBLQ214bGRDQnBiWEJ2Y25STllYQlFjbTl0YVhObElEMGdaMlYwU1cxd2IzSjBUV0Z3VUhKdmJXbHpaU2dwT3dvS1pYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVW9jM0JsWTJsbWFXVnlMQ0JqYjI1MFpYaDBMQ0JrWldaaGRXeDBVbVZ6YjJ4MlpTa2dld29nSUdOdmJuTjBJSHNnY0dGeVpXNTBWVkpNSUQwZ2JuVnNiQ0I5SUQwZ1kyOXVkR1Y0ZERzS0lDQmpiMjV6ZENCcGJYQnZjblJOWVhBZ1BTQmhkMkZwZENCcGJYQnZjblJOWVhCUWNtOXRhWE5sT3dvZ0lHTnZibk4wSUdsdGNHOXlkRTFoY0ZWeWJDQTlJSEpsYzI5c2RtVlRjR1ZqYVdacFpYSW9hVzF3YjNKMFRXRndMQ0J6Y0dWamFXWnBaWElzSUhCaGNtVnVkRlZTVENrN0Nnb2dJSEpsZEhWeWJpQmtaV1poZFd4MFVtVnpiMngyWlNocGJYQnZjblJOWVhCVmNtd2dQejhnYzNCbFkybG1hV1Z5TENCamIyNTBaWGgwTENCa1pXWmhkV3gwVW1WemIyeDJaU2s3Q24wS0NtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJzYjJGa0tIVnliQ3dnWTI5dWRHVjRkQ3dnWkdWbVlYVnNkRXh2WVdRcElIc0tJQ0JwWmlBb2RYSnNMbk4wWVhKMGMxZHBkR2dvSjJoMGRIQTZMeThuS1NCOGZDQjFjbXd1YzNSaGNuUnpWMmwwYUNnbmFIUjBjSE02THk4bktTa2dld29nSUNBZ1kyOXVjM1FnY21WeklEMGdZWGRoYVhRZ1ptVjBZMmdvZFhKc0tUc0tJQ0FnSUdsbUlDZ2hjbVZ6TG05cktTQjdDaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1JtRnBiR1ZrSUhSdklHWmxkR05vSUcxdlpIVnNaU0JtY205dElDUjdkWEpzZldBcE93b2dJQ0FnZlFvZ0lDQWdZMjl1YzNRZ2MyOTFjbU5sSUQwZ1lYZGhhWFFnY21WekxuUmxlSFFvS1RzS0lDQWdJSEpsZEhWeWJpQjdDaUFnSUNBZ0lITm9iM0owUTJseVkzVnBkRG9nZEhKMVpTd0tJQ0FnSUNBZ1ptOXliV0YwT2lBbmJXOWtkV3hsSnl3Z0NpQWdJQ0FnSUhOdmRYSmpaU3dLSUNBZ0lIMDdDaUFnZlFvS0lDQnBaaUFvSVhWeWJDNXpkR0Z5ZEhOWGFYUm9LQ2R1YjJSbE9pY3BLU0I3Q2lBZ0lDQmpiMjUwWlhoMExtWnZjbTFoZENBOUlDZHRiMlIxYkdVbk93b2dJSDBLSUNBS0lDQnlaWFIxY200Z1pHVm1ZWFZzZEV4dllXUW9kWEpzTENCamIyNTBaWGgwTENCa1pXWmhkV3gwVEc5aFpDazdDbjBLQ21GemVXNWpJR1oxYm1OMGFXOXVJR2RsZEVsdGNHOXlkRTFoY0ZCeWIyMXBjMlVvS1NCN0NpQWdZMjl1YzNRZ2NtVnNZWFJwZG1WUVlYUm9JRDBnY0hKdlkyVnpjeTVsYm5ZdVNVMVFUMUpVWDAxQlVGOVFRVlJJSUh4OElFbE5VRTlTVkY5TlFWQmZSa2xNUlY5T1FVMUZPd29nSUdOdmJuTjBJR2x0Y0c5eWRFMWhjRkJoZEdnZ1BTQndZWFJvTG5KbGMyOXNkbVVvY0hKdlkyVnpjeTVqZDJRb0tTd2djbVZzWVhScGRtVlFZWFJvS1RzS0NpQWdiR1YwSUhOMGNqc0tJQ0IwY25rZ2V3b2dJQ0FnYzNSeUlEMGdZWGRoYVhRZ1puTXVjbVZoWkVacGJHVW9hVzF3YjNKMFRXRndVR0YwYUNrN0NpQWdmU0JqWVhSamFDQW9aWEp5S1NCN0NpQWdJQ0J5WlhSMWNtNGdaVzF3ZEhsTllYQW9LVHNLSUNCOUNnb2dJR3hsZENCcWMyOXVPd29nSUhSeWVTQjdDaUFnSUNCcWMyOXVJRDBnWVhkaGFYUWdTbE5QVGk1d1lYSnpaU2h6ZEhJcE93b2dJSDBnWTJGMFkyZ2dLR1Z5Y2lrZ2V3b2dJQ0FnZEdoeWIzY2dSWEp5YjNJb0NpQWdJQ0FnSUdCSmJYQnZjblFnYldGd0lHRjBJQ1I3YVcxd2IzSjBUV0Z3VUdGMGFIMGdZMjl1ZEdGcGJuTWdhVzUyWVd4cFpDQnFjMjl1T2lBa2UyVnljaTV0WlhOellXZGxmV0FLSUNBZ0lDazdDaUFnZlFvS0lDQnlaWFIxY200Z2NtVnpiMngyWlVGdVpFTnZiWEJ2YzJWSmJYQnZjblJOWVhBb2FuTnZiaWs3Q24wS0NtZHNiMkpoYkM1dWIyUmxURzloWkdWeUlEMGdaMnh2WW1Gc0xtNXZaR1ZNYjJGa1pYSWdmSHdnZTMwN0NncG5iRzlpWVd3dWJtOWtaVXh2WVdSbGNpNXpaWFJKYlhCdmNuUk5ZWEJRY205dGFYTmxJRDBnWm5WdVkzUnBiMjRnYzJWMFNXMXdiM0owVFdGd1VISnZiV2x6WlNod2NtOXRhWE5sS1NCN0NpQWdhVzF3YjNKMFRXRndVSEp2YldselpTQTlJSEJ5YjIxcGMyVXVkR2hsYmlnb2JXRndLU0E5UGlCN0NpQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpVRnVaRU52YlhCdmMyVkpiWEJ2Y25STllYQW9iV0Z3S1RzS0lDQjlLVHNLZlRzS0NtWjFibU4wYVc5dUlHVnRjSFI1VFdGd0tDa2dld29nSUhKbGRIVnliaUI3SUdsdGNHOXlkSE02SUh0OUxDQnpZMjl3WlhNNklIdDlJSDA3Q24wSyI7CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi9ub2RlL2luaXQtbm9kZS1mZWRlcmF0aW9uLnRzCnZhciBkZWZhdWx0T3B0aW9ucyA9IHsKICByZW1vdGVzT3JNYW5pZmVzdFVybDoge30sCiAgcmVsQnVuZGxlUGF0aDogIi4uL2Jyb3dzZXIiLAogIHRocm93SWZSZW1vdGVOb3RGb3VuZDogZmFsc2UKfTsKYXN5bmMgZnVuY3Rpb24gaW5pdE5vZGVGZWRlcmF0aW9uKG9wdGlvbnMpIHsKICBjb25zdCBtZXJnZWRPcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9OwogIGNvbnN0IGltcG9ydE1hcCA9IGF3YWl0IGNyZWF0ZU5vZGVJbXBvcnRNYXAobWVyZ2VkT3B0aW9ucyk7CiAgYXdhaXQgd3JpdGVJbXBvcnRNYXAoaW1wb3J0TWFwKTsKICBhd2FpdCB3cml0ZVJlc29sdmVyKCk7CiAgcmVnaXN0ZXIocGF0aFRvRmlsZVVSTCgiLi9mZWRlcmF0aW9uLXJlc29sdmVyLm1qcyIpLmhyZWYpOwp9CmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU5vZGVJbXBvcnRNYXAob3B0aW9ucykgewogIGNvbnN0IHsgcmVtb3Rlc09yTWFuaWZlc3RVcmwsIHJlbEJ1bmRsZVBhdGggfSA9IG9wdGlvbnM7CiAgY29uc3QgcmVtb3RlcyA9IHR5cGVvZiByZW1vdGVzT3JNYW5pZmVzdFVybCA9PT0gIm9iamVjdCIgPyByZW1vdGVzT3JNYW5pZmVzdFVybCA6IGF3YWl0IGxvYWRGc01hbmlmZXN0KHJlbW90ZXNPck1hbmlmZXN0VXJsKTsKICBjb25zdCBob3N0SW5mbyA9IGF3YWl0IGxvYWRGc0ZlZGVyYXRpb25JbmZvKHJlbEJ1bmRsZVBhdGgpOwogIGNvbnN0IGhvc3RJbXBvcnRNYXAgPSBhd2FpdCBwcm9jZXNzSG9zdEluZm8oaG9zdEluZm8sICIuLyIgKyByZWxCdW5kbGVQYXRoKTsKICBjb25zdCByZW1vdGVzSW1wb3J0TWFwID0gYXdhaXQgcHJvY2Vzc1JlbW90ZUluZm9zKHJlbW90ZXMsIHsKICAgIHRocm93SWZSZW1vdGVOb3RGb3VuZDogb3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQsCiAgICBjYWNoZVRhZzogb3B0aW9ucy5jYWNoZVRhZwogIH0pOwogIGNvbnN0IGltcG9ydE1hcCA9IG1lcmdlSW1wb3J0TWFwcyhob3N0SW1wb3J0TWFwLCByZW1vdGVzSW1wb3J0TWFwKTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGc01hbmlmZXN0KG1hbmlmZXN0VXJsKSB7CiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzMi5yZWFkRmlsZShtYW5pZmVzdFVybCwgInV0Zi04Iik7CiAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKGNvbnRlbnQpOwogIHJldHVybiBtYW5pZmVzdDsKfQphc3luYyBmdW5jdGlvbiBsb2FkRnNGZWRlcmF0aW9uSW5mbyhyZWxCdW5kbGVQYXRoKSB7CiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aDIuam9pbihyZWxCdW5kbGVQYXRoLCAicmVtb3RlRW50cnkuanNvbiIpOwogIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmczIucmVhZEZpbGUobWFuaWZlc3RQYXRoLCAidXRmLTgiKTsKICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoY29udGVudCk7CiAgcmV0dXJuIG1hbmlmZXN0Owp9CmFzeW5jIGZ1bmN0aW9uIHdyaXRlSW1wb3J0TWFwKG1hcCkgewogIGF3YWl0IGZzMi53cml0ZUZpbGUoCiAgICBJTVBPUlRfTUFQX0ZJTEVfTkFNRSwKICAgIEpTT04uc3RyaW5naWZ5KG1hcCwgbnVsbCwgMiksCiAgICAidXRmLTgiCiAgKTsKfQphc3luYyBmdW5jdGlvbiB3cml0ZVJlc29sdmVyKCkgewogIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHJlc29sdmVyLCAiYmFzZTY0Iik7CiAgYXdhaXQgZnMyLndyaXRlRmlsZSgiZmVkZXJhdGlvbi1yZXNvbHZlci5tanMiLCBidWZmZXIsICJ1dGYtOCIpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi91dGlscy9mc3RhcnQtYXJncy1wYXJzZXIudHMKaW1wb3J0ICogYXMgZnMzIGZyb20gIm5vZGU6ZnMiOwp2YXIgZGVmYXVsdEFyZ3MgPSB7CiAgZW50cnk6ICIuL3NlcnZlci5tanMiLAogIHJlbW90ZXNPck1hbmlmZXN0VXJsOiAiLi4vYnJvd3Nlci9mZWRlcmF0aW9uLm1hbmlmZXN0Lmpzb24iLAogIHJlbEJ1bmRsZVBhdGg6ICIuLi9icm93c2VyLyIKfTsKZnVuY3Rpb24gcGFyc2VGU3RhcnRBcmdzKCkgewogIGNvbnN0IGFyZ3MyID0gewogICAgZW50cnk6ICIiLAogICAgcmVtb3Rlc09yTWFuaWZlc3RVcmw6ICIiLAogICAgcmVsQnVuZGxlUGF0aDogIiIKICB9OwogIGxldCBrZXkgPSAiIjsKICBmb3IgKGxldCBpID0gMjsgaSA8IHByb2Nlc3MuYXJndi5sZW5ndGg7IGkrKykgewogICAgY29uc3QgY2FuZCA9IHByb2Nlc3MuYXJndltpXTsKICAgIGlmIChjYW5kLnN0YXJ0c1dpdGgoIi0tIikpIHsKICAgICAgY29uc3QgY2FuZEtleSA9IGNhbmQuc3Vic3RyaW5nKDIpOwogICAgICBpZiAoZGVmYXVsdEFyZ3NbY2FuZEtleV0pIHsKICAgICAgICBrZXkgPSBjYW5kS2V5OwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUuZXJyb3IoYHN3aXRjaCAke2NhbmR9IG5vdCBzdXBwb3J0ZWQhYCk7CiAgICAgICAgZXhpdFdpdGhVc2FnZShkZWZhdWx0QXJncyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoa2V5KSB7CiAgICAgIGFyZ3MyW2tleV0gPSBjYW5kOwogICAgICBrZXkgPSAiIjsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoYHVucmVsYWRlZCB2YWx1ZSAke2NhbmR9IWApOwogICAgICBleGl0V2l0aFVzYWdlKGRlZmF1bHRBcmdzKTsKICAgIH0KICB9CiAgYXBwbHlEZWZhdWx0QXJncyhhcmdzMik7CiAgcmV0dXJuIGFyZ3MyOwp9CmZ1bmN0aW9uIGFwcGx5RGVmYXVsdEFyZ3MoYXJnczIpIHsKICBpZiAoYXJnczIucmVsQnVuZGxlUGF0aCAmJiAhYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwpIHsKICAgIGNvbnN0IGNhbmQgPSBkZWZhdWx0QXJncy5yZWxCdW5kbGVQYXRoICsgImZlZGVyYXRpb24ubWFuaWZlc3QuanNvbiI7CiAgICBpZiAoZnMzLmV4aXN0c1N5bmMoY2FuZCkpIHsKICAgICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBjYW5kOwogICAgfQogIH0KICBhcmdzMi5lbnRyeSA9IGFyZ3MyLmVudHJ5IHx8IGRlZmF1bHRBcmdzLmVudHJ5OwogIGFyZ3MyLnJlbEJ1bmRsZVBhdGggPSBhcmdzMi5yZWxCdW5kbGVQYXRoIHx8IGRlZmF1bHRBcmdzLnJlbEJ1bmRsZVBhdGg7CiAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCB8fCBkZWZhdWx0QXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybDsKICBpZiAoIWZzMy5leGlzdHNTeW5jKGFyZ3MyLnJlbW90ZXNPck1hbmlmZXN0VXJsKSkgewogICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSB2b2lkIDA7CiAgfQp9CmZ1bmN0aW9uIGV4aXRXaXRoVXNhZ2UoZGVmYXVsdEFyZ3MyKSB7CiAgbGV0IGFyZ3MyID0gIiI7CiAgZm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdEFyZ3MyKSB7CiAgICBhcmdzMiArPSBgWy0tJHtrZXl9ICR7ZGVmYXVsdEFyZ3MyW2tleV19XSBgOwogIH0KICBjb25zb2xlLmxvZygidXNhZ2U6IG5mc3RhcnQgIiArIGFyZ3MyKTsKICBwcm9jZXNzLmV4aXQoMSk7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2ZzdGFydC50cwp2YXIgYXJncyA9IHBhcnNlRlN0YXJ0QXJncygpOwooYXN5bmMgKCkgPT4gewogIGF3YWl0IGluaXROb2RlRmVkZXJhdGlvbih7CiAgICAuLi5hcmdzLnJlbW90ZXNPck1hbmlmZXN0VXJsID8geyByZW1vdGVzT3JNYW5pZmVzdFVybDogYXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybCB9IDoge30sCiAgICByZWxCdW5kbGVQYXRoOiBhcmdzLnJlbEJ1bmRsZVBhdGgKICB9KTsKICBhd2FpdCBpbXBvcnQoYXJncy5lbnRyeSk7Cn0pKCk7Cg==";
4
+ exports.fstart = "Ly8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvbm9kZS9pbml0LW5vZGUtZmVkZXJhdGlvbi50cwppbXBvcnQgeyByZWdpc3RlciB9IGZyb20gIm5vZGU6bW9kdWxlIjsKaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gIm5vZGU6dXJsIjsKaW1wb3J0ICogYXMgZnMyIGZyb20gIm5vZGU6ZnMvcHJvbWlzZXMiOwppbXBvcnQgKiBhcyBwYXRoMiBmcm9tICJub2RlOnBhdGgiOwoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvZ2xvYmFsLWNhY2hlLnRzCnZhciBuZk5hbWVzcGFjZSA9ICJfX05BVElWRV9GRURFUkFUSU9OX18iOwp2YXIgZ2xvYmFsMiA9IGdsb2JhbFRoaXM7Cmdsb2JhbDJbbmZOYW1lc3BhY2VdID8/PSB7CiAgZXh0ZXJuYWxzOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLAogIHJlbW90ZU5hbWVzVG9SZW1vdGU6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksCiAgYmFzZVVybFRvUmVtb3RlTmFtZXM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkKfTsKdmFyIGdsb2JhbENhY2hlID0gZ2xvYmFsMltuZk5hbWVzcGFjZV07CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi9tb2RlbC9leHRlcm5hbHMudHMKdmFyIGV4dGVybmFscyA9IGdsb2JhbENhY2hlLmV4dGVybmFsczsKZnVuY3Rpb24gZ2V0RXh0ZXJuYWxLZXkoc2hhcmVkKSB7CiAgcmV0dXJuIGAke3NoYXJlZC5wYWNrYWdlTmFtZX1AJHtzaGFyZWQudmVyc2lvbn1gOwp9CmZ1bmN0aW9uIGdldEV4dGVybmFsVXJsKHNoYXJlZCkgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIHJldHVybiBleHRlcm5hbHMuZ2V0KHBhY2thZ2VLZXkpOwp9CmZ1bmN0aW9uIHNldEV4dGVybmFsVXJsKHNoYXJlZCwgdXJsMikgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIGV4dGVybmFscy5zZXQocGFja2FnZUtleSwgdXJsMik7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL21vZGVsL2ltcG9ydC1tYXAudHMKZnVuY3Rpb24gbWVyZ2VJbXBvcnRNYXBzKG1hcDEsIG1hcDIpIHsKICByZXR1cm4gewogICAgaW1wb3J0czogeyAuLi5tYXAxLmltcG9ydHMsIC4uLm1hcDIuaW1wb3J0cyB9LAogICAgc2NvcGVzOiB7IC4uLm1hcDEuc2NvcGVzLCAuLi5tYXAyLnNjb3BlcyB9CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvcmVtb3Rlcy50cwp2YXIgcmVtb3RlTmFtZXNUb1JlbW90ZSA9IGdsb2JhbENhY2hlLnJlbW90ZU5hbWVzVG9SZW1vdGU7CnZhciBiYXNlVXJsVG9SZW1vdGVOYW1lcyA9IGdsb2JhbENhY2hlLmJhc2VVcmxUb1JlbW90ZU5hbWVzOwpmdW5jdGlvbiBhZGRSZW1vdGUocmVtb3RlTmFtZSwgcmVtb3RlKSB7CiAgcmVtb3RlTmFtZXNUb1JlbW90ZS5zZXQocmVtb3RlTmFtZSwgcmVtb3RlKTsKICBiYXNlVXJsVG9SZW1vdGVOYW1lcy5zZXQocmVtb3RlLmJhc2VVcmwsIHJlbW90ZU5hbWUpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi91dGlscy9wYXRoLXV0aWxzLnRzCmZ1bmN0aW9uIGdldERpcmVjdG9yeSh1cmwyKSB7CiAgY29uc3QgcGFydHMgPSB1cmwyLnNwbGl0KCIvIik7CiAgcGFydHMucG9wKCk7CiAgcmV0dXJuIHBhcnRzLmpvaW4oIi8iKTsKfQpmdW5jdGlvbiBqb2luUGF0aHMocGF0aDEsIHBhdGgyMikgewogIHdoaWxlIChwYXRoMS5lbmRzV2l0aCgiLyIpKSB7CiAgICBwYXRoMSA9IHBhdGgxLnN1YnN0cmluZygwLCBwYXRoMS5sZW5ndGggLSAxKTsKICB9CiAgaWYgKHBhdGgyMi5zdGFydHNXaXRoKCIuLyIpKSB7CiAgICBwYXRoMjIgPSBwYXRoMjIuc3Vic3RyaW5nKDIsIHBhdGgyMi5sZW5ndGgpOwogIH0KICByZXR1cm4gYCR7cGF0aDF9LyR7cGF0aDIyfWA7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL3dhdGNoLWZlZGVyYXRpb24tYnVpbGQudHMKZnVuY3Rpb24gd2F0Y2hGZWRlcmF0aW9uQnVpbGRDb21wbGV0aW9uKGVuZHBvaW50KSB7CiAgY29uc3QgZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZW5kcG9pbnQpOwogIGV2ZW50U291cmNlLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTsKICAgIGlmIChkYXRhLnR5cGUgPT09ICJmZWRlcmF0aW9uLXJlYnVpbGQtY29tcGxldGUiIC8qIENPTVBMRVRFRCAqLykgewogICAgICBjb25zb2xlLmxvZygiW0ZlZGVyYXRpb25dIFJlYnVpbGQgY29tcGxldGVkLCByZWxvYWRpbmcuLi4iKTsKICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgfQogIH07CiAgZXZlbnRTb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zb2xlLndhcm4oIltGZWRlcmF0aW9uXSBTU0UgY29ubmVjdGlvbiBlcnJvcjoiLCBldmVudCk7CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvaW5pdC1mZWRlcmF0aW9uLnRzCmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NSZW1vdGVJbmZvcyhyZW1vdGVzLCBvcHRpb25zID0geyB0aHJvd0lmUmVtb3RlTm90Rm91bmQ6IGZhbHNlIH0pIHsKICBjb25zdCBwcm9jZXNzUmVtb3RlSW5mb1Byb21pc2VzID0gT2JqZWN0LmtleXMocmVtb3RlcykubWFwKAogICAgYXN5bmMgKHJlbW90ZU5hbWUpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBsZXQgdXJsMiA9IHJlbW90ZXNbcmVtb3RlTmFtZV07CiAgICAgICAgaWYgKG9wdGlvbnMuY2FjaGVUYWcpIHsKICAgICAgICAgIGNvbnN0IGFkZEFwcGVuZCA9IHJlbW90ZXNbcmVtb3RlTmFtZV0uaW5jbHVkZXMoIj8iKSA/ICImIiA6ICI/IjsKICAgICAgICAgIHVybDIgKz0gYCR7YWRkQXBwZW5kfXQ9JHtvcHRpb25zLmNhY2hlVGFnfWA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhd2FpdCBwcm9jZXNzUmVtb3RlSW5mbyh1cmwyLCByZW1vdGVOYW1lKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnN0IGVycm9yID0gYEVycm9yIGxvYWRpbmcgcmVtb3RlIGVudHJ5IGZvciAke3JlbW90ZU5hbWV9IGZyb20gZmlsZSAke3JlbW90ZXNbcmVtb3RlTmFtZV19YDsKICAgICAgICBpZiAob3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgKTsKICBjb25zdCByZW1vdGVJbXBvcnRNYXBzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvY2Vzc1JlbW90ZUluZm9Qcm9taXNlcyk7CiAgY29uc3QgaW1wb3J0TWFwID0gcmVtb3RlSW1wb3J0TWFwcy5yZWR1Y2UoCiAgICAoYWNjLCByZW1vdGVJbXBvcnRNYXApID0+IHJlbW90ZUltcG9ydE1hcCA/IG1lcmdlSW1wb3J0TWFwcyhhY2MsIHJlbW90ZUltcG9ydE1hcCkgOiBhY2MsCiAgICB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH0KICApOwogIHJldHVybiBpbXBvcnRNYXA7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1JlbW90ZUluZm8oZmVkZXJhdGlvbkluZm9VcmwsIHJlbW90ZU5hbWUpIHsKICBjb25zdCBiYXNlVXJsID0gZ2V0RGlyZWN0b3J5KGZlZGVyYXRpb25JbmZvVXJsKTsKICBjb25zdCByZW1vdGVJbmZvID0gYXdhaXQgbG9hZEZlZGVyYXRpb25JbmZvKGZlZGVyYXRpb25JbmZvVXJsKTsKICBpZiAoIXJlbW90ZU5hbWUpIHsKICAgIHJlbW90ZU5hbWUgPSByZW1vdGVJbmZvLm5hbWU7CiAgfQogIGlmIChyZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50KSB7CiAgICB3YXRjaEZlZGVyYXRpb25CdWlsZENvbXBsZXRpb24oCiAgICAgIGJhc2VVcmwgKyByZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50CiAgICApOwogIH0KICBjb25zdCBpbXBvcnRNYXAgPSBjcmVhdGVSZW1vdGVJbXBvcnRNYXAocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCk7CiAgYWRkUmVtb3RlKHJlbW90ZU5hbWUsIHsgLi4ucmVtb3RlSW5mbywgYmFzZVVybCB9KTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZUltcG9ydE1hcChyZW1vdGVJbmZvLCByZW1vdGVOYW1lLCBiYXNlVXJsKSB7CiAgY29uc3QgaW1wb3J0cyA9IHByb2Nlc3NFeHBvc2VkKHJlbW90ZUluZm8sIHJlbW90ZU5hbWUsIGJhc2VVcmwpOwogIGNvbnN0IHNjb3BlcyA9IHByb2Nlc3NSZW1vdGVJbXBvcnRzKHJlbW90ZUluZm8sIGJhc2VVcmwpOwogIHJldHVybiB7IGltcG9ydHMsIHNjb3BlcyB9Owp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGZWRlcmF0aW9uSW5mbyh1cmwyKSB7CiAgY29uc3QgaW5mbyA9IGF3YWl0IGZldGNoKHVybDIpLnRoZW4oKHIpID0+IHIuanNvbigpKTsKICByZXR1cm4gaW5mbzsKfQpmdW5jdGlvbiBwcm9jZXNzUmVtb3RlSW1wb3J0cyhyZW1vdGVJbmZvLCBiYXNlVXJsKSB7CiAgY29uc3Qgc2NvcGVzID0ge307CiAgY29uc3Qgc2NvcGVkSW1wb3J0cyA9IHt9OwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIHJlbW90ZUluZm8uc2hhcmVkKSB7CiAgICBjb25zdCBvdXRGaWxlTmFtZSA9IGdldEV4dGVybmFsVXJsKHNoYXJlZCkgPz8gam9pblBhdGhzKGJhc2VVcmwsIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgICBzZXRFeHRlcm5hbFVybChzaGFyZWQsIG91dEZpbGVOYW1lKTsKICAgIHNjb3BlZEltcG9ydHNbc2hhcmVkLnBhY2thZ2VOYW1lXSA9IG91dEZpbGVOYW1lOwogIH0KICBzY29wZXNbYmFzZVVybCArICIvIl0gPSBzY29wZWRJbXBvcnRzOwogIHJldHVybiBzY29wZXM7Cn0KZnVuY3Rpb24gcHJvY2Vzc0V4cG9zZWQocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCkgewogIGNvbnN0IGltcG9ydHMgPSB7fTsKICBmb3IgKGNvbnN0IGV4cG9zZWQgb2YgcmVtb3RlSW5mby5leHBvc2VzKSB7CiAgICBjb25zdCBrZXkgPSBqb2luUGF0aHMocmVtb3RlTmFtZSwgZXhwb3NlZC5rZXkpOwogICAgY29uc3QgdmFsdWUgPSBqb2luUGF0aHMoYmFzZVVybCwgZXhwb3NlZC5vdXRGaWxlTmFtZSk7CiAgICBpbXBvcnRzW2tleV0gPSB2YWx1ZTsKICB9CiAgcmV0dXJuIGltcG9ydHM7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0hvc3RJbmZvKGhvc3RJbmZvLCByZWxCdW5kbGVzUGF0aCA9ICIuLyIpIHsKICBjb25zdCBpbXBvcnRzID0gaG9zdEluZm8uc2hhcmVkLnJlZHVjZSgKICAgIChhY2MsIGN1cikgPT4gKHsKICAgICAgLi4uYWNjLAogICAgICBbY3VyLnBhY2thZ2VOYW1lXTogcmVsQnVuZGxlc1BhdGggKyBjdXIub3V0RmlsZU5hbWUKICAgIH0pLAogICAge30KICApOwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIGhvc3RJbmZvLnNoYXJlZCkgewogICAgc2V0RXh0ZXJuYWxVcmwoc2hhcmVkLCByZWxCdW5kbGVzUGF0aCArIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgfQogIHJldHVybiB7IGltcG9ydHMsIHNjb3Blczoge30gfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvdXRpbHMvaW1wb3J0LW1hcC1sb2FkZXIuanMKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCB1cmwgZnJvbSAidXJsIjsKaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICJmcyI7CnZhciBJTVBPUlRfTUFQX0ZJTEVfTkFNRSA9ICJub2RlLmltcG9ydG1hcCI7CnZhciBiYXNlVVJMID0gdXJsLnBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5jd2QoKSkgKyBwYXRoLnNlcDsKZnVuY3Rpb24gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAocGFyc2VkKSB7CiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhcnNlZCkpIHsKICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSB0b3AgbGV2ZWwgbXVzdCBiZSBhbiBvYmplY3RgKTsKICB9CiAgbGV0IHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0ge307CiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJzZWQsICJpbXBvcnRzIikpIHsKICAgIGlmICghaXNQbGFpbk9iamVjdChwYXJzZWQuaW1wb3J0cykpIHsKICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgaW1wb3J0IG1hcCAtICJpbXBvcnRzIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIG9iamVjdGApOwogICAgfQogICAgc29ydGVkQW5kTm9ybWFsaXplZEltcG9ydHMgPSBzb3J0QW5kTm9ybWFsaXplU3BlY2lmaWVyTWFwKAogICAgICBwYXJzZWQuaW1wb3J0cywKICAgICAgYmFzZVVSTAogICAgKTsKICB9CiAgbGV0IHNvcnRlZEFuZE5vcm1hbGl6ZWRTY29wZXMgPSB7fTsKICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcnNlZCwgInNjb3BlcyIpKSB7CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocGFyc2VkLnNjb3BlcykpIHsKICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgaW1wb3J0IG1hcCAtICJzY29wZXMiIHByb3BlcnR5IG11c3QgYmUgYW4gb2JqZWN0YCk7CiAgICB9CiAgICBzb3J0ZWRBbmROb3JtYWxpemVkU2NvcGVzID0gc29ydEFuZE5vcm1hbGl6ZVNjb3BlcyhwYXJzZWQuc2NvcGVzLCBiYXNlVVJMKTsKICB9CiAgY29uc3QgaW52YWxpZEtleXMgPSBPYmplY3Qua2V5cyhwYXJzZWQpLmZpbHRlcigKICAgIChrZXkpID0+IGtleSAhPT0gImltcG9ydHMiICYmIGtleSAhPT0gInNjb3BlcyIKICApOwogIGlmIChpbnZhbGlkS2V5cy5sZW5ndGggPiAwKSB7CiAgICBjb25zb2xlLndhcm4oCiAgICAgIGBJbnZhbGlkIHRvcC1sZXZlbCBrZXkke2ludmFsaWRLZXlzLmxlbmd0aCA+IDAgPyAicyIgOiAiIn0gaW4gaW1wb3J0IG1hcCAtICR7aW52YWxpZEtleXMuam9pbigiLCAiKX1gCiAgICApOwogIH0KICByZXR1cm4gewogICAgaW1wb3J0czogc29ydGVkQW5kTm9ybWFsaXplZEltcG9ydHMsCiAgICBzY29wZXM6IHNvcnRlZEFuZE5vcm1hbGl6ZWRTY29wZXMKICB9Owp9CmZ1bmN0aW9uIHNvcnRBbmROb3JtYWxpemVTcGVjaWZpZXJNYXAobWFwLCBiYXNlVVJMMikgewogIGNvbnN0IG5vcm1hbGl6ZWQgPSB7fTsKICBmb3IgKGxldCBzcGVjaWZpZXJLZXkgaW4gbWFwKSB7CiAgICBjb25zdCB2YWx1ZSA9IG1hcFtzcGVjaWZpZXJLZXldOwogICAgY29uc3Qgbm9ybWFsaXplZFNwZWNpZmllcktleSA9IG5vcm1hbGl6ZVNwZWNpZmllcktleShzcGVjaWZpZXJLZXksIGJhc2VVUkwyKTsKICAgIGlmIChub3JtYWxpemVkU3BlY2lmaWVyS2V5ID09PSBudWxsKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbGV0IGFkZHJlc3NVUkwgPSBwYXJzZVVSTExpa2VTcGVjaWZpZXIodmFsdWUsIGJhc2VVUkwyKTsKICAgIGlmIChhZGRyZXNzVVJMID09PSBudWxsKSB7CiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICBgSW52YWxpZCBVUkwgYWRkcmVzcyBmb3IgaW1wb3J0IG1hcCBzcGVjaWZpZXIgJyR7c3BlY2lmaWVyS2V5fSdgCiAgICAgICk7CiAgICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplZFNwZWNpZmllcktleV0gPSBudWxsOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmIChzcGVjaWZpZXJLZXkuZW5kc1dpdGgoIi8iKSAmJiAhYWRkcmVzc1VSTC5lbmRzV2l0aCgiLyIpKSB7CiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICBgSW52YWxpZCBVUkwgYWRkcmVzcyBmb3IgaW1wb3J0IG1hcCBzcGVjaWZpZXIgJyR7c3BlY2lmaWVyS2V5fScgLSBzaW5jZSB0aGUgc3BlY2lmaWVyIGVuZHMgaW4gc2xhc2gsIHNvIG11c3QgdGhlIGFkZHJlc3NgCiAgICAgICk7CiAgICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplZFNwZWNpZmllcktleV0gPSBudWxsOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplZFNwZWNpZmllcktleV0gPSBhZGRyZXNzVVJMOwogIH0KICByZXR1cm4gbm9ybWFsaXplZDsKfQpmdW5jdGlvbiBub3JtYWxpemVTcGVjaWZpZXJLZXkoa2V5KSB7CiAgaWYgKGtleSA9PT0gIiIpIHsKICAgIGNvbnNvbGUud2FybihgU3BlY2lmaWVyIGtleXMgaW4gaW1wb3J0IG1hcHMgbWF5IG5vdCBiZSB0aGUgZW1wdHkgc3RyaW5nYCk7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIHBhcnNlVVJMTGlrZVNwZWNpZmllcihrZXksIGJhc2VVUkwpIHx8IGtleTsKfQpmdW5jdGlvbiBwYXJzZVVSTExpa2VTcGVjaWZpZXIoc3BlY2lmaWVyLCBiYXNlVVJMMikgewogIGNvbnN0IHVzZUJhc2VVcmxBc1BhcmVudCA9IHNwZWNpZmllci5zdGFydHNXaXRoKCIvIikgfHwgc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi4vIikgfHwgc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi4uLyIpOwogIHRyeSB7CiAgICByZXR1cm4gbmV3IFVSTChzcGVjaWZpZXIsIHVzZUJhc2VVcmxBc1BhcmVudCA/IGJhc2VVUkwyIDogdm9pZCAwKS5ocmVmOwogIH0gY2F0Y2ggewogICAgcmV0dXJuIG51bGw7CiAgfQp9CmZ1bmN0aW9uIHNvcnRBbmROb3JtYWxpemVTY29wZXMobWFwLCBiYXNlVVJMMikgewogIGxldCBub3JtYWxpemVkID0ge307CiAgZm9yIChsZXQgc2NvcGVQcmVmaXggaW4gbWFwKSB7CiAgICBjb25zdCBwb3RlbnRpYWxTcGVjaWZpZXJNYXAgPSBtYXBbc2NvcGVQcmVmaXhdOwogICAgaWYgKCFpc1BsYWluT2JqZWN0KHBvdGVudGlhbFNwZWNpZmllck1hcCkpIHsKICAgICAgdGhyb3cgVHlwZUVycm9yKAogICAgICAgIGBUaGUgdmFsdWUgb2Ygc2NvcGUgJHtzY29wZVByZWZpeH0gbXVzdCBiZSBhIEpTT04gb2JqZWN0YAogICAgICApOwogICAgfQogICAgbGV0IHNjb3BlUHJlZml4VVJMOwogICAgdHJ5IHsKICAgICAgc2NvcGVQcmVmaXhVUkwgPSBuZXcgVVJMKHNjb3BlUHJlZml4LCBiYXNlVVJMMikuaHJlZjsKICAgIH0gY2F0Y2ggewogICAgICBjb25zb2xlLndhcm4oCiAgICAgICAgYFNjb3BlIHByZWZpeCBVUkwgJyR7c2NvcGVQcmVmaXh9JyB3YXMgbm90IHBhcnNlYWJsZSBpbiBpbXBvcnQgbWFwYAogICAgICApOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIG5vcm1hbGl6ZWRbc2NvcGVQcmVmaXhVUkxdID0gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcCgKICAgICAgcG90ZW50aWFsU3BlY2lmaWVyTWFwLAogICAgICBiYXNlVVJMMgogICAgKTsKICB9CiAgcmV0dXJuIG5vcm1hbGl6ZWQ7Cn0KZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHsKICByZXR1cm4gb2JqID09PSBPYmplY3Qob2JqKSAmJiAhQXJyYXkuaXNBcnJheShvYmopOwp9CnZhciBpbXBvcnRNYXBQcm9taXNlID0gZ2V0SW1wb3J0TWFwUHJvbWlzZSgpOwphc3luYyBmdW5jdGlvbiBnZXRJbXBvcnRNYXBQcm9taXNlKCkgewogIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHByb2Nlc3MuZW52LklNUE9SVF9NQVBfUEFUSCB8fCBJTVBPUlRfTUFQX0ZJTEVfTkFNRTsKICBjb25zdCBpbXBvcnRNYXBQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlbGF0aXZlUGF0aCk7CiAgbGV0IHN0cjsKICB0cnkgewogICAgc3RyID0gYXdhaXQgZnMucmVhZEZpbGUoaW1wb3J0TWFwUGF0aCk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXR1cm4gZW1wdHlNYXAoKTsKICB9CiAgbGV0IGpzb247CiAgdHJ5IHsKICAgIGpzb24gPSBhd2FpdCBKU09OLnBhcnNlKHN0cik7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICB0aHJvdyBFcnJvcigKICAgICAgYEltcG9ydCBtYXAgYXQgJHtpbXBvcnRNYXBQYXRofSBjb250YWlucyBpbnZhbGlkIGpzb246ICR7ZXJyLm1lc3NhZ2V9YAogICAgKTsKICB9CiAgcmV0dXJuIHJlc29sdmVBbmRDb21wb3NlSW1wb3J0TWFwKGpzb24pOwp9Cmdsb2JhbC5ub2RlTG9hZGVyID0gZ2xvYmFsLm5vZGVMb2FkZXIgfHwge307Cmdsb2JhbC5ub2RlTG9hZGVyLnNldEltcG9ydE1hcFByb21pc2UgPSBmdW5jdGlvbiBzZXRJbXBvcnRNYXBQcm9taXNlKHByb21pc2UpIHsKICBpbXBvcnRNYXBQcm9taXNlID0gcHJvbWlzZS50aGVuKChtYXApID0+IHsKICAgIHJldHVybiByZXNvbHZlQW5kQ29tcG9zZUltcG9ydE1hcChtYXApOwogIH0pOwp9OwpmdW5jdGlvbiBlbXB0eU1hcCgpIHsKICByZXR1cm4geyBpbXBvcnRzOiB7fSwgc2NvcGVzOiB7fSB9Owp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi91dGlscy9sb2FkZXItYXMtZGF0YS11cmwuanMKdmFyIHJlc29sdmVyID0gImFXMXdiM0owSUhCaGRHZ2dabkp2YlNBbmNHRjBhQ2M3Q21sdGNHOXlkQ0IxY213Z1puSnZiU0FuZFhKc0p6c0thVzF3YjNKMElIc2djSEp2YldselpYTWdZWE1nWm5NZ2ZTQm1jbTl0SUNkbWN5YzdDZ3BsZUhCdmNuUWdZMjl1YzNRZ1NVMVFUMUpVWDAxQlVGOUdTVXhGWDA1QlRVVWdQU0FuYm05a1pTNXBiWEJ2Y25SdFlYQW5Pd29LWTI5dWMzUWdZbUZ6WlZWU1RDQTlJSFZ5YkM1d1lYUm9WRzlHYVd4bFZWSk1LSEJ5YjJObGMzTXVZM2RrS0NrcElDc2djR0YwYUM1elpYQTdDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOdVpYY3RjbVZ6YjJ4MlpTMWhiR2R2Y21sMGFHMEtaWGh3YjNKMElHWjFibU4wYVc5dUlISmxjMjlzZG1WVGNHVmphV1pwWlhJb2FXMXdiM0owVFdGd0xDQnpjR1ZqYVdacFpYSXNJSEJoY21WdWRGVlNUQ2tnZXdvZ0lHeGxkQ0JqZFhKeVpXNTBRbUZ6WlZWU1REc0tJQ0JwWmlBb2NHRnlaVzUwVlZKTUtTQjdDaUFnSUNCamIyNXpkQ0JzWVhOMFUyeGhjMmhKYm1SbGVDQTlJSEJoY21WdWRGVlNUQzVzWVhOMFNXNWtaWGhQWmlod1lYUm9Mbk5sY0NrN0NpQWdJQ0JqZFhKeVpXNTBRbUZ6WlZWU1RDQTlJSEJoY21WdWRGVlNUQzV6YkdsalpTZ3dMQ0JzWVhOMFUyeGhjMmhKYm1SbGVDQXJJREVwT3dvZ0lIMGdaV3h6WlNCN0NpQWdJQ0JqZFhKeVpXNTBRbUZ6WlZWU1RDQTlJR0poYzJWVlVrdzdDaUFnZlFvZ0lHTnZibk4wSUc1dmNtMWhiR2w2WldSVGNHVmphV1pwWlhJZ1BRb2dJQ0FnY0dGeWMyVlZVa3hNYVd0bFUzQmxZMmxtYVdWeUtITndaV05wWm1sbGNpd2dZM1Z5Y21WdWRFSmhjMlZWVWt3cElIeDhJSE53WldOcFptbGxjanNLSUNCbWIzSWdLR3hsZENCelkyOXdaVkJ5WldacGVDQnBiaUJwYlhCdmNuUk5ZWEF1YzJOdmNHVnpLU0I3Q2lBZ0lDQnBaaUFvQ2lBZ0lDQWdJSE5qYjNCbFVISmxabWw0SUQwOVBTQmpkWEp5Wlc1MFFtRnpaVlZTVENCOGZBb2dJQ0FnSUNBb2MyTnZjR1ZRY21WbWFYZ3VaVzVrYzFkcGRHZ29KeThuS1NBbUppQmpkWEp5Wlc1MFFtRnpaVlZTVEM1emRHRnlkSE5YYVhSb0tITmpiM0JsVUhKbFptbDRLU2tLSUNBZ0lDa2dld29nSUNBZ0lDQmpiMjV6ZENCelkyOXdaVWx0Y0c5eWRITk5ZWFJqYUNBOUlISmxjMjlzZG1WSmJYQnZjblJ6VFdGMFkyZ29DaUFnSUNBZ0lDQWdibTl5YldGc2FYcGxaRk53WldOcFptbGxjaXdLSUNBZ0lDQWdJQ0JwYlhCdmNuUk5ZWEF1YzJOdmNHVnpXM05qYjNCbFVISmxabWw0WFN3S0lDQWdJQ0FnS1RzS0lDQWdJQ0FnYVdZZ0tITmpiM0JsU1cxd2IzSjBjMDFoZEdOb0tTQjdDaUFnSUNBZ0lDQWdjbVYwZFhKdUlITmpiM0JsU1cxd2IzSjBjMDFoZEdOb093b2dJQ0FnSUNCOUNpQWdJQ0I5SUdWc2MyVWdld29nSUNBZ0lDQmpiMjV6ZENCMGIzQk1aWFpsYkVsdGNHOXlkSE5OWVhSamFDQTlJSEpsYzI5c2RtVkpiWEJ2Y25SelRXRjBZMmdvQ2lBZ0lDQWdJQ0FnYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2l3S0lDQWdJQ0FnSUNCcGJYQnZjblJOWVhBdWFXMXdiM0owY3l3S0lDQWdJQ0FnS1RzS0lDQWdJQ0FnYVdZZ0tIUnZjRXhsZG1Wc1NXMXdiM0owYzAxaGRHTm9LU0I3Q2lBZ0lDQWdJQ0FnY21WMGRYSnVJSFJ2Y0V4bGRtVnNTVzF3YjNKMGMwMWhkR05vT3dvZ0lDQWdJQ0I5Q2lBZ0lDQjlDaUFnZlFvS0lDQnlaWFIxY200Z2NtVnpiMngyWlVsdGNHOXlkSE5OWVhSamFDaHViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlMQ0JwYlhCdmNuUk5ZWEF1YVcxd2IzSjBjeWs3Q24wS0NpOHZJR2gwZEhCek9pOHZkMmxqWnk1bmFYUm9kV0l1YVc4dmFXMXdiM0owTFcxaGNITXZJM0psYzI5c2RtVXRZVzR0YVcxd2IzSjBjeTF0WVhSamFBcG1kVzVqZEdsdmJpQnlaWE52YkhabFNXMXdiM0owYzAxaGRHTm9LRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWElzSUhOd1pXTnBabWxsY2sxaGNDa2dld29nSUdadmNpQW9iR1YwSUhOd1pXTnBabWxsY2t0bGVTQnBiaUJ6Y0dWamFXWnBaWEpOWVhBcElIc0tJQ0FnSUdOdmJuTjBJSEpsYzI5c2RYUnBiMjVTWlhOMWJIUWdQU0J6Y0dWamFXWnBaWEpOWVhCYmMzQmxZMmxtYVdWeVMyVjVYVHNLQ2lBZ0lDQnBaaUFvYzNCbFkybG1hV1Z5UzJWNUlEMDlQU0J1YjNKdFlXeHBlbVZrVTNCbFkybG1hV1Z5S1NCN0NpQWdJQ0FnSUdsbUlDaHlaWE52YkhWMGFXOXVVbVZ6ZFd4MElEMDlQU0J1ZFd4c0tTQjdDaUFnSUNBZ0lDQWdkR2h5YjNjZ1ZIbHdaVVZ5Y205eUtBb2dJQ0FnSUNBZ0lDQWdZRlJvWlNCcGJYQnZjblFnYldGd0lISmxjMjlzZFhScGIyNGdiMllnSkh0emNHVmphV1pwWlhKTFpYbDlJR1poYVd4bFpDQmtkV1VnZEc4Z1lTQnVkV3hzSUdWdWRISjVZQ3dLSUNBZ0lDQWdJQ0FwT3dvZ0lDQWdJQ0I5Q2lBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhWMGFXOXVVbVZ6ZFd4ME93b2dJQ0FnZlNCbGJITmxJR2xtSUNnS0lDQWdJQ0FnYzNCbFkybG1hV1Z5UzJWNUxtVnVaSE5YYVhSb0tDY3ZKeWtnSmlZS0lDQWdJQ0FnYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2k1emRHRnlkSE5YYVhSb0tITndaV05wWm1sbGNrdGxlU2tLSUNBZ0lDa2dld29nSUNBZ0lDQnBaaUFvY21WemIyeDFkR2x2YmxKbGMzVnNkQ0E5UFQwZ2JuVnNiQ2tnZXdvZ0lDQWdJQ0FnSUhSb2NtOTNJRlI1Y0dWRmNuSnZjaWdLSUNBZ0lDQWdJQ0FnSUdCVWFHVWdhVzF3YjNKMElHMWhjQ0J5WlhOdmJIVjBhVzl1SUc5bUlDUjdjM0JsWTJsbWFXVnlTMlY1ZlNCbVlXbHNaV1FnWkhWbElIUnZJR0VnYm5Wc2JDQmxiblJ5ZVdBc0NpQWdJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2ZRb2dJQ0FnSUNCamIyNXpkQ0JoWm5SbGNsQnlaV1pwZUNBOUlHNXZjbTFoYkdsNlpXUlRjR1ZqYVdacFpYSXVjMnhwWTJVb2MzQmxZMmxtYVdWeVMyVjVMbXhsYm1kMGFDazdDaUFnSUNBZ0lIUnllU0I3Q2lBZ0lDQWdJQ0FnY21WMGRYSnVJRzVsZHlCVlVrd29ZV1owWlhKUWNtVm1hWGdzSUhKbGMyOXNkWFJwYjI1U1pYTjFiSFFwTG1oeVpXWTdDaUFnSUNBZ0lIMGdZMkYwWTJnZ2V3b2dJQ0FnSUNBZ0lIUm9jbTkzSUZSNWNHVkZjbkp2Y2lnS0lDQWdJQ0FnSUNBZ0lHQlVhR1VnYVcxd2IzSjBJRzFoY0NCeVpYTnZiSFYwYVc5dUlHOW1JQ1I3YzNCbFkybG1hV1Z5UzJWNWZTQm1ZV2xzWldRZ1pIVmxJSFJ2SUZWU1RDQndZWEp6WlNCbVlXbHNkWEpsWUN3S0lDQWdJQ0FnSUNBcE93b2dJQ0FnSUNCOUNpQWdJQ0I5Q2lBZ2ZRb0tJQ0J5WlhSMWNtNGdiblZzYkRzS2ZRb0tMeThnYUhSMGNITTZMeTkzYVdObkxtZHBkR2gxWWk1cGJ5OXBiWEJ2Y25RdGJXRndjeThqY0dGeWMybHVad3BsZUhCdmNuUWdablZ1WTNScGIyNGdjbVZ6YjJ4MlpVRnVaRU52YlhCdmMyVkpiWEJ2Y25STllYQW9jR0Z5YzJWa0tTQjdDaUFnTHk4Z1UzUmxjQ0F5Q2lBZ2FXWWdLQ0ZwYzFCc1lXbHVUMkpxWldOMEtIQmhjbk5sWkNrcElIc0tJQ0FnSUhSb2NtOTNJRVZ5Y205eUtHQkpiblpoYkdsa0lHbHRjRzl5ZENCdFlYQWdMU0IwYjNBZ2JHVjJaV3dnYlhWemRDQmlaU0JoYmlCdlltcGxZM1JnS1RzS0lDQjlDZ29nSUM4dklGTjBaWEFnTXdvZ0lHeGxkQ0J6YjNKMFpXUkJibVJPYjNKdFlXeHBlbVZrU1cxd2IzSjBjeUE5SUh0OU93b0tJQ0F2THlCVGRHVndJRFFLSUNCcFppQW9UMkpxWldOMExuQnliM1J2ZEhsd1pTNW9ZWE5QZDI1UWNtOXdaWEowZVM1allXeHNLSEJoY25ObFpDd2dKMmx0Y0c5eWRITW5LU2tnZXdvZ0lDQWdMeThnVTNSbGNDQTBMakVLSUNBZ0lHbG1JQ2doYVhOUWJHRnBiazlpYW1WamRDaHdZWEp6WldRdWFXMXdiM0owY3lrcElIc0tJQ0FnSUNBZ2RHaHliM2NnUlhKeWIzSW9ZRWx1ZG1Gc2FXUWdhVzF3YjNKMElHMWhjQ0F0SUNKcGJYQnZjblJ6SWlCd2NtOXdaWEowZVNCdGRYTjBJR0psSUdGdUlHOWlhbVZqZEdBcE93b2dJQ0FnZlFvS0lDQWdJQzh2SUZOMFpYQWdOQzR5Q2lBZ0lDQnpiM0owWldSQmJtUk9iM0p0WVd4cGVtVmtTVzF3YjNKMGN5QTlJSE52Y25SQmJtUk9iM0p0WVd4cGVtVlRjR1ZqYVdacFpYSk5ZWEFvQ2lBZ0lDQWdJSEJoY25ObFpDNXBiWEJ2Y25SekxBb2dJQ0FnSUNCaVlYTmxWVkpNTEFvZ0lDQWdLVHNLSUNCOUNnb2dJQzh2SUZOMFpYQWdOUW9nSUd4bGRDQnpiM0owWldSQmJtUk9iM0p0WVd4cGVtVmtVMk52Y0dWeklEMGdlMzA3Q2dvZ0lDOHZJRk4wWlhBZ05nb2dJR2xtSUNoUFltcGxZM1F1Y0hKdmRHOTBlWEJsTG1oaGMwOTNibEJ5YjNCbGNuUjVMbU5oYkd3b2NHRnljMlZrTENBbmMyTnZjR1Z6SnlrcElIc0tJQ0FnSUM4dklGTjBaWEFnTmk0eENpQWdJQ0JwWmlBb0lXbHpVR3hoYVc1UFltcGxZM1FvY0dGeWMyVmtMbk5qYjNCbGN5a3BJSHNLSUNBZ0lDQWdkR2h5YjNjZ1JYSnliM0lvWUVsdWRtRnNhV1FnYVcxd2IzSjBJRzFoY0NBdElDSnpZMjl3WlhNaUlIQnliM0JsY25SNUlHMTFjM1FnWW1VZ1lXNGdiMkpxWldOMFlDazdDaUFnSUNCOUNnb2dJQ0FnTHk4Z1UzUmxjQ0EyTGpJS0lDQWdJSE52Y25SbFpFRnVaRTV2Y20xaGJHbDZaV1JUWTI5d1pYTWdQU0J6YjNKMFFXNWtUbTl5YldGc2FYcGxVMk52Y0dWektIQmhjbk5sWkM1elkyOXdaWE1zSUdKaGMyVlZVa3dwT3dvZ0lIMEtDaUFnTHk4Z1UzUmxjQ0EzQ2lBZ1kyOXVjM1FnYVc1MllXeHBaRXRsZVhNZ1BTQlBZbXBsWTNRdWEyVjVjeWh3WVhKelpXUXBMbVpwYkhSbGNpZ0tJQ0FnSUNoclpYa3BJRDArSUd0bGVTQWhQVDBnSjJsdGNHOXlkSE1uSUNZbUlHdGxlU0FoUFQwZ0ozTmpiM0JsY3ljc0NpQWdLVHNLSUNCcFppQW9hVzUyWVd4cFpFdGxlWE11YkdWdVozUm9JRDRnTUNrZ2V3b2dJQ0FnWTI5dWMyOXNaUzUzWVhKdUtBb2dJQ0FnSUNCZ1NXNTJZV3hwWkNCMGIzQXRiR1YyWld3Z2EyVjVKSHNLSUNBZ0lDQWdJQ0JwYm5aaGJHbGtTMlY1Y3k1c1pXNW5kR2dnUGlBd0lEOGdKM01uSURvZ0p5Y0tJQ0FnSUNBZ2ZTQnBiaUJwYlhCdmNuUWdiV0Z3SUMwZ0pIdHBiblpoYkdsa1MyVjVjeTVxYjJsdUtDY3NJQ2NwZldBc0NpQWdJQ0FwT3dvZ0lIMEtDaUFnTHk4Z1UzUmxjQ0E0Q2lBZ2NtVjBkWEp1SUhzS0lDQWdJR2x0Y0c5eWRITTZJSE52Y25SbFpFRnVaRTV2Y20xaGJHbDZaV1JKYlhCdmNuUnpMQW9nSUNBZ2MyTnZjR1Z6T2lCemIzSjBaV1JCYm1ST2IzSnRZV3hwZW1Wa1UyTnZjR1Z6TEFvZ0lIMDdDbjBLQ2k4dklHaDBkSEJ6T2k4dmQybGpaeTVuYVhSb2RXSXVhVzh2YVcxd2IzSjBMVzFoY0hNdkkzTnZjblF0WVc1a0xXNXZjbTFoYkdsNlpTMWhMWE53WldOcFptbGxjaTF0WVhBS1puVnVZM1JwYjI0Z2MyOXlkRUZ1WkU1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2sxaGNDaHRZWEFzSUdKaGMyVlZVa3dwSUhzS0lDQmpiMjV6ZENCdWIzSnRZV3hwZW1Wa0lEMGdlMzA3Q2dvZ0lHWnZjaUFvYkdWMElITndaV05wWm1sbGNrdGxlU0JwYmlCdFlYQXBJSHNLSUNBZ0lHTnZibk4wSUhaaGJIVmxJRDBnYldGd1czTndaV05wWm1sbGNrdGxlVjA3Q2dvZ0lDQWdZMjl1YzNRZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNrdGxlU0E5SUc1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2t0bGVTaHpjR1ZqYVdacFpYSkxaWGtzSUdKaGMyVlZVa3dwT3dvZ0lDQWdhV1lnS0c1dmNtMWhiR2w2WldSVGNHVmphV1pwWlhKTFpYa2dQVDA5SUc1MWJHd3BJSHNLSUNBZ0lDQWdZMjl1ZEdsdWRXVTdDaUFnSUNCOUNnb2dJQ0FnYkdWMElHRmtaSEpsYzNOVlVrd2dQU0J3WVhKelpWVlNURXhwYTJWVGNHVmphV1pwWlhJb2RtRnNkV1VzSUdKaGMyVlZVa3dwT3dvZ0lDQWdhV1lnS0dGa1pISmxjM05WVWt3Z1BUMDlJRzUxYkd3cElIc0tJQ0FnSUNBZ1kyOXVjMjlzWlM1M1lYSnVLQW9nSUNBZ0lDQWdJR0JKYm5aaGJHbGtJRlZTVENCaFpHUnlaWE56SUdadmNpQnBiWEJ2Y25RZ2JXRndJSE53WldOcFptbGxjaUFuSkh0emNHVmphV1pwWlhKTFpYbDlKMkFzQ2lBZ0lDQWdJQ2s3Q2lBZ0lDQWdJRzV2Y20xaGJHbDZaV1JiYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2t0bGVWMGdQU0J1ZFd4c093b2dJQ0FnSUNCamIyNTBhVzUxWlRzS0lDQWdJSDBLQ2lBZ0lDQnBaaUFvYzNCbFkybG1hV1Z5UzJWNUxtVnVaSE5YYVhSb0tDY3ZKeWtnSmlZZ0lXRmtaSEpsYzNOVlVrd3VaVzVrYzFkcGRHZ29KeThuS1NrZ2V3b2dJQ0FnSUNCamIyNXpiMnhsTG5kaGNtNG9DaUFnSUNBZ0lDQWdZRWx1ZG1Gc2FXUWdWVkpNSUdGa1pISmxjM01nWm05eUlHbHRjRzl5ZENCdFlYQWdjM0JsWTJsbWFXVnlJQ2NrZTNOd1pXTnBabWxsY2t0bGVYMG5JQzBnYzJsdVkyVWdkR2hsSUhOd1pXTnBabWxsY2lCbGJtUnpJR2x1SUhOc1lYTm9MQ0J6YnlCdGRYTjBJSFJvWlNCaFpHUnlaWE56WUN3S0lDQWdJQ0FnS1RzS0lDQWdJQ0FnYm05eWJXRnNhWHBsWkZ0dWIzSnRZV3hwZW1Wa1UzQmxZMmxtYVdWeVMyVjVYU0E5SUc1MWJHdzdDaUFnSUNBZ0lHTnZiblJwYm5WbE93b2dJQ0FnZlFvS0lDQWdJRzV2Y20xaGJHbDZaV1JiYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2t0bGVWMGdQU0JoWkdSeVpYTnpWVkpNT3dvZ0lIMEtDaUFnY21WMGRYSnVJRzV2Y20xaGJHbDZaV1E3Q24wS0NpOHZJR2gwZEhCek9pOHZkMmxqWnk1bmFYUm9kV0l1YVc4dmFXMXdiM0owTFcxaGNITXZJMjV2Y20xaGJHbDZaUzFoTFhOd1pXTnBabWxsY2kxclpYa0tablZ1WTNScGIyNGdibTl5YldGc2FYcGxVM0JsWTJsbWFXVnlTMlY1S0d0bGVTa2dld29nSUdsbUlDaHJaWGtnUFQwOUlDY25LU0I3Q2lBZ0lDQmpiMjV6YjJ4bExuZGhjbTRvWUZOd1pXTnBabWxsY2lCclpYbHpJR2x1SUdsdGNHOXlkQ0J0WVhCeklHMWhlU0J1YjNRZ1ltVWdkR2hsSUdWdGNIUjVJSE4wY21sdVoyQXBPd29nSUNBZ2NtVjBkWEp1SUc1MWJHdzdDaUFnZlFvS0lDQnlaWFIxY200Z2NHRnljMlZWVWt4TWFXdGxVM0JsWTJsbWFXVnlLR3RsZVN3Z1ltRnpaVlZTVENrZ2ZId2dhMlY1T3dwOUNnb3ZMeUJvZEhSd2N6b3ZMM2RwWTJjdVoybDBhSFZpTG1sdkwybHRjRzl5ZEMxdFlYQnpMeU53WVhKelpTMWhMWFZ5YkMxc2FXdGxMV2x0Y0c5eWRDMXpjR1ZqYVdacFpYSUtablZ1WTNScGIyNGdjR0Z5YzJWVlVreE1hV3RsVTNCbFkybG1hV1Z5S0hOd1pXTnBabWxsY2l3Z1ltRnpaVlZTVENrZ2V3b2dJR052Ym5OMElIVnpaVUpoYzJWVmNteEJjMUJoY21WdWRDQTlDaUFnSUNCemNHVmphV1pwWlhJdWMzUmhjblJ6VjJsMGFDZ25MeWNwSUh4OENpQWdJQ0J6Y0dWamFXWnBaWEl1YzNSaGNuUnpWMmwwYUNnbkxpOG5LU0I4ZkFvZ0lDQWdjM0JsWTJsbWFXVnlMbk4wWVhKMGMxZHBkR2dvSnk0dUx5Y3BPd29LSUNCMGNua2dld29nSUNBZ2NtVjBkWEp1SUc1bGR5QlZVa3dvYzNCbFkybG1hV1Z5TENCMWMyVkNZWE5sVlhKc1FYTlFZWEpsYm5RZ1B5QmlZWE5sVlZKTUlEb2dkVzVrWldacGJtVmtLUzVvY21WbU93b2dJSDBnWTJGMFkyZ2dld29nSUNBZ2NtVjBkWEp1SUc1MWJHdzdDaUFnZlFwOUNnb3ZMeUJvZEhSd2N6b3ZMM2RwWTJjdVoybDBhSFZpTG1sdkwybHRjRzl5ZEMxdFlYQnpMeU56YjNKMExXRnVaQzF1YjNKdFlXeHBlbVV0YzJOdmNHVnpDbVoxYm1OMGFXOXVJSE52Y25SQmJtUk9iM0p0WVd4cGVtVlRZMjl3WlhNb2JXRndMQ0JpWVhObFZWSk1LU0I3Q2lBZ2JHVjBJRzV2Y20xaGJHbDZaV1FnUFNCN2ZUc0tDaUFnWm05eUlDaHNaWFFnYzJOdmNHVlFjbVZtYVhnZ2FXNGdiV0Z3S1NCN0NpQWdJQ0JqYjI1emRDQndiM1JsYm5ScFlXeFRjR1ZqYVdacFpYSk5ZWEFnUFNCdFlYQmJjMk52Y0dWUWNtVm1hWGhkT3dvZ0lDQWdhV1lnS0NGcGMxQnNZV2x1VDJKcVpXTjBLSEJ2ZEdWdWRHbGhiRk53WldOcFptbGxjazFoY0NrcElIc0tJQ0FnSUNBZ2RHaHliM2NnVkhsd1pVVnljbTl5S0FvZ0lDQWdJQ0FnSUdCVWFHVWdkbUZzZFdVZ2IyWWdjMk52Y0dVZ0pIdHpZMjl3WlZCeVpXWnBlSDBnYlhWemRDQmlaU0JoSUVwVFQwNGdiMkpxWldOMFlDd0tJQ0FnSUNBZ0tUc0tJQ0FnSUgwS0NpQWdJQ0JzWlhRZ2MyTnZjR1ZRY21WbWFYaFZVa3c3Q2lBZ0lDQjBjbmtnZXdvZ0lDQWdJQ0J6WTI5d1pWQnlaV1pwZUZWU1RDQTlJRzVsZHlCVlVrd29jMk52Y0dWUWNtVm1hWGdzSUdKaGMyVlZVa3dwTG1oeVpXWTdDaUFnSUNCOUlHTmhkR05vSUhzS0lDQWdJQ0FnWTI5dWMyOXNaUzUzWVhKdUtBb2dJQ0FnSUNBZ0lHQlRZMjl3WlNCd2NtVm1hWGdnVlZKTUlDY2tlM05qYjNCbFVISmxabWw0ZlNjZ2QyRnpJRzV2ZENCd1lYSnpaV0ZpYkdVZ2FXNGdhVzF3YjNKMElHMWhjR0FzQ2lBZ0lDQWdJQ2s3Q2lBZ0lDQWdJR052Ym5ScGJuVmxPd29nSUNBZ2ZRb0tJQ0FnSUc1dmNtMWhiR2w2WldSYmMyTnZjR1ZRY21WbWFYaFZVa3hkSUQwZ2MyOXlkRUZ1WkU1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2sxaGNDZ0tJQ0FnSUNBZ2NHOTBaVzUwYVdGc1UzQmxZMmxtYVdWeVRXRndMQW9nSUNBZ0lDQmlZWE5sVlZKTUxBb2dJQ0FnS1RzS0lDQjlDZ29nSUhKbGRIVnliaUJ1YjNKdFlXeHBlbVZrT3dwOUNncG1kVzVqZEdsdmJpQnBjMUJzWVdsdVQySnFaV04wS0c5aWFpa2dld29nSUhKbGRIVnliaUJ2WW1vZ1BUMDlJRTlpYW1WamRDaHZZbW9wSUNZbUlDRkJjbkpoZVM1cGMwRnljbUY1S0c5aWFpazdDbjBLQ2k4dklDMHRMUW9LYkdWMElHbHRjRzl5ZEUxaGNGQnliMjFwYzJVZ1BTQm5aWFJKYlhCdmNuUk5ZWEJRY205dGFYTmxLQ2s3Q2dwbGVIQnZjblFnWVhONWJtTWdablZ1WTNScGIyNGdjbVZ6YjJ4MlpTaHpjR1ZqYVdacFpYSXNJR052Ym5SbGVIUXNJR1JsWm1GMWJIUlNaWE52YkhabEtTQjdDaUFnWTI5dWMzUWdleUJ3WVhKbGJuUlZVa3dnUFNCdWRXeHNJSDBnUFNCamIyNTBaWGgwT3dvZ0lHTnZibk4wSUdsdGNHOXlkRTFoY0NBOUlHRjNZV2wwSUdsdGNHOXlkRTFoY0ZCeWIyMXBjMlU3Q2lBZ1kyOXVjM1FnYVcxd2IzSjBUV0Z3VlhKc0lEMGdjbVZ6YjJ4MlpWTndaV05wWm1sbGNpaHBiWEJ2Y25STllYQXNJSE53WldOcFptbGxjaXdnY0dGeVpXNTBWVkpNS1RzS0NpQWdjbVYwZFhKdUlHUmxabUYxYkhSU1pYTnZiSFpsS0dsdGNHOXlkRTFoY0ZWeWJDQS9QeUJ6Y0dWamFXWnBaWElzSUdOdmJuUmxlSFFzSUdSbFptRjFiSFJTWlhOdmJIWmxLVHNLZlFvS1pYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJR3h2WVdRb2RYSnNMQ0JqYjI1MFpYaDBMQ0JrWldaaGRXeDBURzloWkNrZ2V3b2dJR2xtSUNoMWNtd3VjM1JoY25SelYybDBhQ2duYUhSMGNEb3ZMeWNwSUh4OElIVnliQzV6ZEdGeWRITlhhWFJvS0Nkb2RIUndjem92THljcEtTQjdDaUFnSUNCamIyNXpkQ0J5WlhNZ1BTQmhkMkZwZENCbVpYUmphQ2gxY213cE93b2dJQ0FnYVdZZ0tDRnlaWE11YjJzcElIc0tJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCR1lXbHNaV1FnZEc4Z1ptVjBZMmdnYlc5a2RXeGxJR1p5YjIwZ0pIdDFjbXg5WUNrN0NpQWdJQ0I5Q2lBZ0lDQmpiMjV6ZENCemIzVnlZMlVnUFNCaGQyRnBkQ0J5WlhNdWRHVjRkQ2dwT3dvZ0lDQWdjbVYwZFhKdUlIc0tJQ0FnSUNBZ2MyaHZjblJEYVhKamRXbDBPaUIwY25WbExBb2dJQ0FnSUNCbWIzSnRZWFE2SUNkdGIyUjFiR1VuTEFvZ0lDQWdJQ0J6YjNWeVkyVXNDaUFnSUNCOU93b2dJSDBLQ2lBZ2FXWWdLQ0YxY213dWMzUmhjblJ6VjJsMGFDZ25ibTlrWlRvbktTa2dld29nSUNBZ1kyOXVkR1Y0ZEM1bWIzSnRZWFFnUFNBbmJXOWtkV3hsSnpzS0lDQjlDZ29nSUhKbGRIVnliaUJrWldaaGRXeDBURzloWkNoMWNtd3NJR052Ym5SbGVIUXNJR1JsWm1GMWJIUk1iMkZrS1RzS2ZRb0tZWE41Ym1NZ1puVnVZM1JwYjI0Z1oyVjBTVzF3YjNKMFRXRndVSEp2YldselpTZ3BJSHNLSUNCamIyNXpkQ0J5Wld4aGRHbDJaVkJoZEdnZ1BTQndjbTlqWlhOekxtVnVkaTVKVFZCUFVsUmZUVUZRWDFCQlZFZ2dmSHdnU1UxUVQxSlVYMDFCVUY5R1NVeEZYMDVCVFVVN0NpQWdZMjl1YzNRZ2FXMXdiM0owVFdGd1VHRjBhQ0E5SUhCaGRHZ3VjbVZ6YjJ4MlpTaHdjbTlqWlhOekxtTjNaQ2dwTENCeVpXeGhkR2wyWlZCaGRHZ3BPd29LSUNCc1pYUWdjM1J5T3dvZ0lIUnllU0I3Q2lBZ0lDQnpkSElnUFNCaGQyRnBkQ0JtY3k1eVpXRmtSbWxzWlNocGJYQnZjblJOWVhCUVlYUm9LVHNLSUNCOUlHTmhkR05vSUNobGNuSXBJSHNLSUNBZ0lISmxkSFZ5YmlCbGJYQjBlVTFoY0NncE93b2dJSDBLQ2lBZ2JHVjBJR3B6YjI0N0NpQWdkSEo1SUhzS0lDQWdJR3B6YjI0Z1BTQmhkMkZwZENCS1UwOU9MbkJoY25ObEtITjBjaWs3Q2lBZ2ZTQmpZWFJqYUNBb1pYSnlLU0I3Q2lBZ0lDQjBhSEp2ZHlCRmNuSnZjaWdLSUNBZ0lDQWdZRWx0Y0c5eWRDQnRZWEFnWVhRZ0pIdHBiWEJ2Y25STllYQlFZWFJvZlNCamIyNTBZV2x1Y3lCcGJuWmhiR2xrSUdwemIyNDZJQ1I3WlhKeUxtMWxjM05oWjJWOVlDd0tJQ0FnSUNrN0NpQWdmUW9LSUNCeVpYUjFjbTRnY21WemIyeDJaVUZ1WkVOdmJYQnZjMlZKYlhCdmNuUk5ZWEFvYW5OdmJpazdDbjBLQ21kc2IySmhiQzV1YjJSbFRHOWhaR1Z5SUQwZ1oyeHZZbUZzTG01dlpHVk1iMkZrWlhJZ2ZId2dlMzA3Q2dwbmJHOWlZV3d1Ym05a1pVeHZZV1JsY2k1elpYUkpiWEJ2Y25STllYQlFjbTl0YVhObElEMGdablZ1WTNScGIyNGdjMlYwU1cxd2IzSjBUV0Z3VUhKdmJXbHpaU2h3Y205dGFYTmxLU0I3Q2lBZ2FXMXdiM0owVFdGd1VISnZiV2x6WlNBOUlIQnliMjFwYzJVdWRHaGxiaWdvYldGd0tTQTlQaUI3Q2lBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlVGdVpFTnZiWEJ2YzJWSmJYQnZjblJOWVhBb2JXRndLVHNLSUNCOUtUc0tmVHNLQ21aMWJtTjBhVzl1SUdWdGNIUjVUV0Z3S0NrZ2V3b2dJSEpsZEhWeWJpQjdJR2x0Y0c5eWRITTZJSHQ5TENCelkyOXdaWE02SUh0OUlIMDdDbjBLIjsKCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL25vZGUvaW5pdC1ub2RlLWZlZGVyYXRpb24udHMKdmFyIGRlZmF1bHRPcHRpb25zID0gewogIHJlbW90ZXNPck1hbmlmZXN0VXJsOiB7fSwKICByZWxCdW5kbGVQYXRoOiAiLi4vYnJvd3NlciIsCiAgdGhyb3dJZlJlbW90ZU5vdEZvdW5kOiBmYWxzZQp9Owphc3luYyBmdW5jdGlvbiBpbml0Tm9kZUZlZGVyYXRpb24ob3B0aW9ucykgewogIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH07CiAgY29uc3QgaW1wb3J0TWFwID0gYXdhaXQgY3JlYXRlTm9kZUltcG9ydE1hcChtZXJnZWRPcHRpb25zKTsKICBhd2FpdCB3cml0ZUltcG9ydE1hcChpbXBvcnRNYXApOwogIGF3YWl0IHdyaXRlUmVzb2x2ZXIoKTsKICByZWdpc3RlcihwYXRoVG9GaWxlVVJMKCIuL2ZlZGVyYXRpb24tcmVzb2x2ZXIubWpzIikuaHJlZik7Cn0KYXN5bmMgZnVuY3Rpb24gY3JlYXRlTm9kZUltcG9ydE1hcChvcHRpb25zKSB7CiAgY29uc3QgeyByZW1vdGVzT3JNYW5pZmVzdFVybCwgcmVsQnVuZGxlUGF0aCB9ID0gb3B0aW9uczsKICBjb25zdCByZW1vdGVzID0gdHlwZW9mIHJlbW90ZXNPck1hbmlmZXN0VXJsID09PSAib2JqZWN0IiA/IHJlbW90ZXNPck1hbmlmZXN0VXJsIDogYXdhaXQgbG9hZEZzTWFuaWZlc3QocmVtb3Rlc09yTWFuaWZlc3RVcmwpOwogIGNvbnN0IGhvc3RJbmZvID0gYXdhaXQgbG9hZEZzRmVkZXJhdGlvbkluZm8ocmVsQnVuZGxlUGF0aCk7CiAgY29uc3QgaG9zdEltcG9ydE1hcCA9IGF3YWl0IHByb2Nlc3NIb3N0SW5mbyhob3N0SW5mbywgIi4vIiArIHJlbEJ1bmRsZVBhdGgpOwogIGNvbnN0IHJlbW90ZXNJbXBvcnRNYXAgPSBhd2FpdCBwcm9jZXNzUmVtb3RlSW5mb3MocmVtb3RlcywgewogICAgdGhyb3dJZlJlbW90ZU5vdEZvdW5kOiBvcHRpb25zLnRocm93SWZSZW1vdGVOb3RGb3VuZCwKICAgIGNhY2hlVGFnOiBvcHRpb25zLmNhY2hlVGFnCiAgfSk7CiAgY29uc3QgaW1wb3J0TWFwID0gbWVyZ2VJbXBvcnRNYXBzKGhvc3RJbXBvcnRNYXAsIHJlbW90ZXNJbXBvcnRNYXApOwogIHJldHVybiBpbXBvcnRNYXA7Cn0KYXN5bmMgZnVuY3Rpb24gbG9hZEZzTWFuaWZlc3QobWFuaWZlc3RVcmwpIHsKICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMyLnJlYWRGaWxlKG1hbmlmZXN0VXJsLCAidXRmLTgiKTsKICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoY29udGVudCk7CiAgcmV0dXJuIG1hbmlmZXN0Owp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGc0ZlZGVyYXRpb25JbmZvKHJlbEJ1bmRsZVBhdGgpIHsKICBjb25zdCBtYW5pZmVzdFBhdGggPSBwYXRoMi5qb2luKHJlbEJ1bmRsZVBhdGgsICJyZW1vdGVFbnRyeS5qc29uIik7CiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzMi5yZWFkRmlsZShtYW5pZmVzdFBhdGgsICJ1dGYtOCIpOwogIGNvbnN0IG1hbmlmZXN0ID0gSlNPTi5wYXJzZShjb250ZW50KTsKICByZXR1cm4gbWFuaWZlc3Q7Cn0KYXN5bmMgZnVuY3Rpb24gd3JpdGVJbXBvcnRNYXAobWFwKSB7CiAgYXdhaXQgZnMyLndyaXRlRmlsZSgKICAgIElNUE9SVF9NQVBfRklMRV9OQU1FLAogICAgSlNPTi5zdHJpbmdpZnkobWFwLCBudWxsLCAyKSwKICAgICJ1dGYtOCIKICApOwp9CmFzeW5jIGZ1bmN0aW9uIHdyaXRlUmVzb2x2ZXIoKSB7CiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20ocmVzb2x2ZXIsICJiYXNlNjQiKTsKICBhd2FpdCBmczIud3JpdGVGaWxlKCJmZWRlcmF0aW9uLXJlc29sdmVyLm1qcyIsIGJ1ZmZlciwgInV0Zi04Iik7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2ZzdGFydC1hcmdzLXBhcnNlci50cwppbXBvcnQgKiBhcyBmczMgZnJvbSAibm9kZTpmcyI7CnZhciBkZWZhdWx0QXJncyA9IHsKICBlbnRyeTogIi4vc2VydmVyLm1qcyIsCiAgcmVtb3Rlc09yTWFuaWZlc3RVcmw6ICIuLi9icm93c2VyL2ZlZGVyYXRpb24ubWFuaWZlc3QuanNvbiIsCiAgcmVsQnVuZGxlUGF0aDogIi4uL2Jyb3dzZXIvIgp9OwpmdW5jdGlvbiBwYXJzZUZTdGFydEFyZ3MoKSB7CiAgY29uc3QgYXJnczIgPSB7CiAgICBlbnRyeTogIiIsCiAgICByZW1vdGVzT3JNYW5pZmVzdFVybDogIiIsCiAgICByZWxCdW5kbGVQYXRoOiAiIgogIH07CiAgbGV0IGtleSA9ICIiOwogIGZvciAobGV0IGkgPSAyOyBpIDwgcHJvY2Vzcy5hcmd2Lmxlbmd0aDsgaSsrKSB7CiAgICBjb25zdCBjYW5kID0gcHJvY2Vzcy5hcmd2W2ldOwogICAgaWYgKGNhbmQuc3RhcnRzV2l0aCgiLS0iKSkgewogICAgICBjb25zdCBjYW5kS2V5ID0gY2FuZC5zdWJzdHJpbmcoMik7CiAgICAgIGlmIChkZWZhdWx0QXJnc1tjYW5kS2V5XSkgewogICAgICAgIGtleSA9IGNhbmRLZXk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc29sZS5lcnJvcihgc3dpdGNoICR7Y2FuZH0gbm90IHN1cHBvcnRlZCFgKTsKICAgICAgICBleGl0V2l0aFVzYWdlKGRlZmF1bHRBcmdzKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChrZXkpIHsKICAgICAgYXJnczJba2V5XSA9IGNhbmQ7CiAgICAgIGtleSA9ICIiOwogICAgfSBlbHNlIHsKICAgICAgY29uc29sZS5lcnJvcihgdW5yZWxhZGVkIHZhbHVlICR7Y2FuZH0hYCk7CiAgICAgIGV4aXRXaXRoVXNhZ2UoZGVmYXVsdEFyZ3MpOwogICAgfQogIH0KICBhcHBseURlZmF1bHRBcmdzKGFyZ3MyKTsKICByZXR1cm4gYXJnczI7Cn0KZnVuY3Rpb24gYXBwbHlEZWZhdWx0QXJncyhhcmdzMikgewogIGlmIChhcmdzMi5yZWxCdW5kbGVQYXRoICYmICFhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCkgewogICAgY29uc3QgY2FuZCA9IGRlZmF1bHRBcmdzLnJlbEJ1bmRsZVBhdGggKyAiZmVkZXJhdGlvbi5tYW5pZmVzdC5qc29uIjsKICAgIGlmIChmczMuZXhpc3RzU3luYyhjYW5kKSkgewogICAgICBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCA9IGNhbmQ7CiAgICB9CiAgfQogIGFyZ3MyLmVudHJ5ID0gYXJnczIuZW50cnkgfHwgZGVmYXVsdEFyZ3MuZW50cnk7CiAgYXJnczIucmVsQnVuZGxlUGF0aCA9IGFyZ3MyLnJlbEJ1bmRsZVBhdGggfHwgZGVmYXVsdEFyZ3MucmVsQnVuZGxlUGF0aDsKICBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCA9IGFyZ3MyLnJlbW90ZXNPck1hbmlmZXN0VXJsIHx8IGRlZmF1bHRBcmdzLnJlbW90ZXNPck1hbmlmZXN0VXJsOwogIGlmICghZnMzLmV4aXN0c1N5bmMoYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwpKSB7CiAgICBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCA9IHZvaWQgMDsKICB9Cn0KZnVuY3Rpb24gZXhpdFdpdGhVc2FnZShkZWZhdWx0QXJnczIpIHsKICBsZXQgYXJnczIgPSAiIjsKICBmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0QXJnczIpIHsKICAgIGFyZ3MyICs9IGBbLS0ke2tleX0gJHtkZWZhdWx0QXJnczJba2V5XX1dIGA7CiAgfQogIGNvbnNvbGUubG9nKCJ1c2FnZTogbmZzdGFydCAiICsgYXJnczIpOwogIHByb2Nlc3MuZXhpdCgxKTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvdXRpbHMvZnN0YXJ0LnRzCnZhciBhcmdzID0gcGFyc2VGU3RhcnRBcmdzKCk7Cihhc3luYyAoKSA9PiB7CiAgYXdhaXQgaW5pdE5vZGVGZWRlcmF0aW9uKHsKICAgIC4uLmFyZ3MucmVtb3Rlc09yTWFuaWZlc3RVcmwgPyB7IHJlbW90ZXNPck1hbmlmZXN0VXJsOiBhcmdzLnJlbW90ZXNPck1hbmlmZXN0VXJsIH0gOiB7fSwKICAgIHJlbEJ1bmRsZVBhdGg6IGFyZ3MucmVsQnVuZGxlUGF0aAogIH0pOwogIGF3YWl0IGltcG9ydChhcmdzLmVudHJ5KTsKfSkoKTsK";
5
5
  //# sourceMappingURL=fstart-as-data-url.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fstart-as-data-url.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/tools/fstart-as-data-url.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG,8x/BAA8x/B,CAAC"}
1
+ {"version":3,"file":"fstart-as-data-url.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/tools/fstart-as-data-url.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG,87/BAA87/B,CAAC"}
@@ -23,9 +23,9 @@ function setMemResultHandler(handler) {
23
23
  }
24
24
  function createAngularBuildAdapter(builderOptions, context, rebuildRequested = new rebuild_events_1.RebuildHubs()) {
25
25
  return (options) => tslib_1.__awaiter(this, void 0, void 0, function* () {
26
- const { entryPoints, tsConfigPath, external, outdir, mappedPaths, kind, watch, dev, hash, platform, optimizedMappings, } = options;
26
+ const { entryPoints, tsConfigPath, external, outdir, mappedPaths, kind, watch, dev, hash, platform, optimizedMappings, signal, } = options;
27
27
  setNgServerMode();
28
- const files = yield runEsbuild(builderOptions, context, entryPoints, external, outdir, tsConfigPath, mappedPaths, watch, rebuildRequested, dev, kind, hash, undefined, undefined, undefined, platform, optimizedMappings);
28
+ const files = yield runEsbuild(builderOptions, context, entryPoints, external, outdir, tsConfigPath, mappedPaths, watch, rebuildRequested, dev, kind, hash, undefined, undefined, undefined, platform, optimizedMappings, signal);
29
29
  if (kind === 'shared-package') {
30
30
  const scriptFiles = files.filter((f) => f.endsWith('.js') || f.endsWith('.mjs'));
31
31
  for (const file of scriptFiles) {
@@ -94,7 +94,11 @@ function createAngularBuildAdapter(builderOptions, context, rebuildRequested = n
94
94
  }
95
95
  }
96
96
  function runEsbuild(builderOptions_1, context_1, entryPoints_1, external_1, outdir_1, tsConfigPath_1, mappedPaths_1, watch_1) {
97
- return tslib_1.__awaiter(this, arguments, void 0, function* (builderOptions, context, entryPoints, external, outdir, tsConfigPath, mappedPaths, watch, rebuildRequested = new rebuild_events_1.RebuildHubs(), dev, kind, hash = false, plugins = null, absWorkingDir = undefined, logLevel = 'warning', platform, optimizedMappings) {
97
+ return tslib_1.__awaiter(this, arguments, void 0, function* (builderOptions, context, entryPoints, external, outdir, tsConfigPath, mappedPaths, watch, rebuildRequested = new rebuild_events_1.RebuildHubs(), dev, kind, hash = false, plugins = null, absWorkingDir = undefined, logLevel = 'warning', platform, optimizedMappings, signal) {
98
+ var _a;
99
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
100
+ throw new build_1.AbortedError('[angular-esbuild-adapter] Before building');
101
+ }
98
102
  const projectRoot = path.dirname(tsConfigPath);
99
103
  const browsers = (0, private_1.getSupportedBrowsers)(projectRoot, context.logger);
100
104
  const target = (0, private_1.transformSupportedBrowsersToTargets)(browsers);
@@ -105,15 +109,10 @@ function runEsbuild(builderOptions_1, context_1, entryPoints_1, external_1, outd
105
109
  projectRoot,
106
110
  workspaceRoot,
107
111
  ]);
108
- const tailwindConfigurationPath = (0, private_1.findTailwindConfiguration)(searchDirectories);
109
- const fullProjectRoot = path.join(workspaceRoot, projectRoot);
110
- const resolver = (0, node_module_1.createRequire)(fullProjectRoot + '/');
111
- const tailwindConfiguration = tailwindConfigurationPath
112
- ? {
113
- file: tailwindConfigurationPath,
114
- package: resolver.resolve('tailwindcss'),
115
- }
116
- : undefined;
112
+ const postcssConfiguration = yield (0, private_1.loadPostcssConfiguration)(searchDirectories);
113
+ const tailwindConfiguration = postcssConfiguration
114
+ ? undefined
115
+ : yield getTailwindConfig(workspaceRoot, searchDirectories);
117
116
  const outputNames = {
118
117
  bundles: '[name]',
119
118
  media: 'media/[name]',
@@ -143,11 +142,12 @@ function runEsbuild(builderOptions_1, context_1, entryPoints_1, external_1, outd
143
142
  inlineStyleLanguage: builderOptions.inlineStyleLanguage,
144
143
  jit: false,
145
144
  tailwindConfiguration,
145
+ postcssConfiguration,
146
146
  }, target, undefined);
147
147
  const commonjsPluginModule = yield import('@chialab/esbuild-plugin-commonjs');
148
148
  const commonjsPlugin = commonjsPluginModule.default;
149
149
  pluginOptions.styleOptions.externalDependencies = [];
150
- const config = Object.assign({ entryPoints: entryPoints.map((ep) => ({
150
+ const config = Object.assign(Object.assign({ entryPoints: entryPoints.map((ep) => ({
151
151
  in: ep.fileName,
152
152
  out: path.parse(ep.outName).name,
153
153
  })), outdir, entryNames: hash ? '[name]-[hash]' : '[name]', write: false, absWorkingDir,
@@ -161,18 +161,49 @@ function runEsbuild(builderOptions_1, context_1, entryPoints_1, external_1, outd
161
161
  ? [(0, shared_mappings_plugin_1.createSharedMappingsPlugin)(mappedPaths)]
162
162
  : []),
163
163
  commonjsPlugin(),
164
- ], define: Object.assign(Object.assign({}, (!dev ? { ngDevMode: 'false' } : {})), { ngJitMode: 'false' }) }, (builderOptions.loader ? { loader: builderOptions.loader } : {}));
164
+ ], define: Object.assign(Object.assign({}, (!dev ? { ngDevMode: 'false' } : {})), { ngJitMode: 'false' }) }, (builderOptions.loader ? { loader: builderOptions.loader } : {})), { resolveExtensions: ['.ts', '.tsx', '.mjs', '.js', '.cjs'] });
165
165
  const ctx = yield esbuild.context(config);
166
- const result = yield ctx.rebuild();
167
- const memOnly = dev && kind === 'mapping-or-exposed' && !!_memResultHandler;
168
- const writtenFiles = writeResult(result, outdir, memOnly);
169
- if (watch) {
170
- registerForRebuilds(kind, rebuildRequested, ctx, entryPoints, outdir, hash, memOnly);
166
+ try {
167
+ const abortHandler = () => tslib_1.__awaiter(this, void 0, void 0, function* () {
168
+ yield ctx.cancel();
169
+ yield ctx.dispose();
170
+ });
171
+ if (signal) {
172
+ signal.addEventListener('abort', abortHandler, { once: true });
173
+ }
174
+ const result = yield ctx.rebuild();
175
+ const memOnly = dev && kind === 'mapping-or-exposed' && !!_memResultHandler;
176
+ const writtenFiles = writeResult(result, outdir, memOnly);
177
+ if (watch) {
178
+ registerForRebuilds(kind, rebuildRequested, ctx, entryPoints, outdir, hash, memOnly);
179
+ }
180
+ else {
181
+ if (signal)
182
+ signal.removeEventListener('abort', abortHandler);
183
+ yield ctx.dispose();
184
+ }
185
+ return writtenFiles;
171
186
  }
172
- else {
173
- ctx.dispose();
187
+ catch (error) {
188
+ // ESBuild throws an error if the request is cancelled.
189
+ // if it is, it's changed to an 'AbortedError'
190
+ if ((signal === null || signal === void 0 ? void 0 : signal.aborted) && ((_a = error === null || error === void 0 ? void 0 : error.message) === null || _a === void 0 ? void 0 : _a.includes('canceled'))) {
191
+ throw new build_1.AbortedError('[runEsbuild] ESBuild was canceled.');
192
+ }
193
+ throw error;
174
194
  }
175
- return writtenFiles;
195
+ });
196
+ }
197
+ function getTailwindConfig(workspaceRoot, searchDirectories) {
198
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
199
+ const tailwindConfigurationPath = (0, private_1.findTailwindConfiguration)(searchDirectories);
200
+ if (!tailwindConfigurationPath) {
201
+ return undefined;
202
+ }
203
+ return {
204
+ file: tailwindConfigurationPath,
205
+ package: (0, node_module_1.createRequire)(path.join(workspaceRoot, tailwindConfigurationPath)).resolve('tailwindcss'),
206
+ };
176
207
  });
177
208
  }
178
209
  function createTsConfigForFederation(workspaceRoot, tsConfigPath, entryPoints) {
@@ -221,13 +252,6 @@ function doesFileExistAndJsonEqual(path, content) {
221
252
  return false;
222
253
  }
223
254
  }
224
- function doesFileExist(path, content) {
225
- if (!fs.existsSync(path)) {
226
- return false;
227
- }
228
- const currentContent = fs.readFileSync(path, 'utf-8');
229
- return currentContent === content;
230
- }
231
255
  function writeResult(result, outdir, memOnly) {
232
256
  const writtenFiles = [];
233
257
  if (memOnly) {
@@ -1 +1 @@
1
- {"version":3,"file":"angular-esbuild-adapter.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/utils/angular-esbuild-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-esbuild-adapter.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/utils/angular-esbuild-adapter.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,15 @@ import { FederationInfo } from '@softarc/native-federation-runtime';
3
3
  export type WorkspaceConfig = {
4
4
  i18n?: I18nConfig;
5
5
  };
6
+ export type LocaleTranslation = string | string[];
7
+ export type LocaleObject = {
8
+ translation: LocaleTranslation;
9
+ baseHref?: string;
10
+ subPath?: string;
11
+ };
6
12
  export type I18nConfig = {
7
13
  sourceLocale: string | SourceLocaleObject;
8
- locales: Record<string, string>;
14
+ locales: Record<string, LocaleTranslation | LocaleObject>;
9
15
  };
10
16
  export type SourceLocaleObject = {
11
17
  code: string;
package/src/utils/i18n.js CHANGED
@@ -27,7 +27,10 @@ function translateFederationArtefacts(i18n, localize, outputPath, federationResu
27
27
  build_1.logger.info('Writing Translations');
28
28
  const translationFiles = locales
29
29
  .map((loc) => i18n.locales[loc])
30
- .map((value) => JSON.stringify(value))
30
+ .map((config) => typeof config === 'string' || Array.isArray(config)
31
+ ? config
32
+ : config.translation)
33
+ .map((files) => JSON.stringify(files))
31
34
  .join(' ');
32
35
  const targetLocales = locales.join(' ');
33
36
  const sourceLocale = typeof i18n.sourceLocale === 'string'
@@ -42,7 +45,7 @@ function translateFederationArtefacts(i18n, localize, outputPath, federationResu
42
45
  // to improve performance
43
46
  const sourcePattern = '{' + federationFiles.join(',') + '}';
44
47
  const sourceLocalePath = path_1.default.join(outputPath, 'browser', sourceLocale);
45
- const localizeTranslate = path_1.default.resolve("node_modules/.bin/localize-translate");
48
+ const localizeTranslate = path_1.default.resolve('node_modules/.bin/localize-translate');
46
49
  const cmd = `${localizeTranslate} -r ${sourceLocalePath} -s "${sourcePattern}" -t ${translationFiles} -o ${translationOutPath} --target-locales ${targetLocales} -l ${sourceLocale}`;
47
50
  ensureDistFolders(locales, outputPath);
48
51
  copyRemoteEntry(locales, outputPath, sourceLocalePath);
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/utils/i18n.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/utils/i18n.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mem-resuts.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/utils/mem-resuts.ts"],"names":[],"mappings":";;;;AACA,+CAAyB;AACzB,mDAA6B;AAO7B,MAAa,aAAa;IACxB,IAAI,QAAQ;QACV,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,YAAoB,UAAsB,EAAU,UAAmB;QAAnD,eAAU,GAAV,UAAU,CAAY;QAAU,eAAU,GAAV,UAAU,CAAS;IAAG,CAAC;IAE3E,GAAG;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;IAClC,CAAC;CACF;AAdD,sCAcC;AAOD,MAAa,gBAAgB;IAC3B,IAAW,QAAQ;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAID,YAAoB,SAAyB;QAAzB,cAAS,GAAT,SAAS,CAAgB;QAC3C,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IACxB,CAAC;IAED,GAAG;QACD,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF;AAdD,4CAcC;AAED,MAAa,UAAU;IAAvB;QACU,QAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAe/C,CAAC;IAbQ,GAAG,CAAC,MAAqB;QAC9B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAEM,GAAG,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAEM,YAAY;QACjB,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF;AAhBD,gCAgBC;AAED,SAAS,KAAK,CAAC,IAAI;IACjB,OAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"mem-resuts.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/utils/mem-resuts.ts"],"names":[],"mappings":";;;;AACA,+CAAyB;AACzB,mDAA6B;AAO7B,MAAa,aAAa;IACxB,IAAI,QAAQ;QACV,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,YACU,UAAsB,EACtB,UAAmB;QADnB,eAAU,GAAV,UAAU,CAAY;QACtB,eAAU,GAAV,UAAU,CAAS;IAC1B,CAAC;IAEJ,GAAG;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;IAClC,CAAC;CACF;AAjBD,sCAiBC;AAOD,MAAa,gBAAgB;IAC3B,IAAW,QAAQ;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAID,YAAoB,SAAyB;QAAzB,cAAS,GAAT,SAAS,CAAgB;QAC3C,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IACxB,CAAC;IAED,GAAG;QACD,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF;AAdD,4CAcC;AAED,MAAa,UAAU;IAAvB;QACU,QAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAe/C,CAAC;IAbQ,GAAG,CAAC,MAAqB;QAC9B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAEM,GAAG,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAEM,YAAY;QACjB,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF;AAhBD,gCAgBC;AAED,SAAS,KAAK,CAAC,IAAI;IACjB,OAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC"}