diff --git a/.jshintrc b/.jshintrc index bd648ac8..ad7d53bc 100644 --- a/.jshintrc +++ b/.jshintrc @@ -3,8 +3,9 @@ "quotmark": "double", "camelcase": true, "browser": true, + "semi": false, "globals": { "Dexie": true, "_": true } -} \ No newline at end of file +} diff --git a/dist/background.js b/dist/background.js index 9c95d7b8..64008ae3 100644 --- a/dist/background.js +++ b/dist/background.js @@ -1422,5 +1422,4 @@ module.exports = { updateChecker } -},{"webextension-polyfill":1}]},{},[2]) -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvd2ViZXh0ZW5zaW9uLXBvbHlmaWxsL2Rpc3QvYnJvd3Nlci1wb2x5ZmlsbC5qcyIsInNyYy9jb3JlL2JhY2tncm91bmQvYmFja2dyb3VuZC5qcyIsInNyYy9jb3JlL2JhY2tncm91bmQvY29udGV4dE1lbnVzLmpzIiwic3JjL2NvcmUvYmFja2dyb3VuZC9zZWFyY2guanMiLCJzcmMvY29yZS9iYWNrZ3JvdW5kL3VwZGF0ZUNoZWNrZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShcIndlYmV4dGVuc2lvbi1wb2x5ZmlsbFwiLCBbXCJtb2R1bGVcIl0sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZmFjdG9yeShtb2R1bGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtb2QgPSB7XG4gICAgICBleHBvcnRzOiB7fVxuICAgIH07XG4gICAgZmFjdG9yeShtb2QpO1xuICAgIGdsb2JhbC5icm93c2VyID0gbW9kLmV4cG9ydHM7XG4gIH1cbn0pKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uIChtb2R1bGUpIHtcbiAgLyogd2ViZXh0ZW5zaW9uLXBvbHlmaWxsIC0gdjAuOC4wIC0gVHVlIEFwciAyMCAyMDIxIDExOjI3OjM4ICovXG5cbiAgLyogLSotIE1vZGU6IGluZGVudC10YWJzLW1vZGU6IG5pbDsganMtaW5kZW50LWxldmVsOiAyIC0qLSAqL1xuXG4gIC8qIHZpbTogc2V0IHN0cz0yIHN3PTIgZXQgdHc9ODA6ICovXG5cbiAgLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICAgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gICAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovXG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIGlmICh0eXBlb2YgYnJvd3NlciA9PT0gXCJ1bmRlZmluZWRcIiB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYnJvd3NlcikgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBjb25zdCBDSFJPTUVfU0VORF9NRVNTQUdFX0NBTExCQUNLX05PX1JFU1BPTlNFX01FU1NBR0UgPSBcIlRoZSBtZXNzYWdlIHBvcnQgY2xvc2VkIGJlZm9yZSBhIHJlc3BvbnNlIHdhcyByZWNlaXZlZC5cIjtcbiAgICBjb25zdCBTRU5EX1JFU1BPTlNFX0RFUFJFQ0FUSU9OX1dBUk5JTkcgPSBcIlJldHVybmluZyBhIFByb21pc2UgaXMgdGhlIHByZWZlcnJlZCB3YXkgdG8gc2VuZCBhIHJlcGx5IGZyb20gYW4gb25NZXNzYWdlL29uTWVzc2FnZUV4dGVybmFsIGxpc3RlbmVyLCBhcyB0aGUgc2VuZFJlc3BvbnNlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzcGVjcyAoU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvTW96aWxsYS9BZGQtb25zL1dlYkV4dGVuc2lvbnMvQVBJL3J1bnRpbWUvb25NZXNzYWdlKVwiOyAvLyBXcmFwcGluZyB0aGUgYnVsayBvZiB0aGlzIHBvbHlmaWxsIGluIGEgb25lLXRpbWUtdXNlIGZ1bmN0aW9uIGlzIGEgbWlub3JcbiAgICAvLyBvcHRpbWl6YXRpb24gZm9yIEZpcmVmb3guIFNpbmNlIFNwaWRlcm1vbmtleSBkb2VzIG5vdCBmdWxseSBwYXJzZSB0aGVcbiAgICAvLyBjb250ZW50cyBvZiBhIGZ1bmN0aW9uIHVudGlsIHRoZSBmaXJzdCB0aW1lIGl0J3MgY2FsbGVkLCBhbmQgc2luY2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGFjdHVhbGx5IG5lZWQgdG8gYmUgY2FsbGVkLCB0aGlzIGFsbG93cyB0aGUgcG9seWZpbGwgdG8gYmUgaW5jbHVkZWRcbiAgICAvLyBpbiBGaXJlZm94IG5lYXJseSBmb3IgZnJlZS5cblxuICAgIGNvbnN0IHdyYXBBUElzID0gZXh0ZW5zaW9uQVBJcyA9PiB7XG4gICAgICAvLyBOT1RFOiBhcGlNZXRhZGF0YSBpcyBhc3NvY2lhdGVkIHRvIHRoZSBjb250ZW50IG9mIHRoZSBhcGktbWV0YWRhdGEuanNvbiBmaWxlXG4gICAgICAvLyBhdCBidWlsZCB0aW1lIGJ5IHJlcGxhY2luZyB0aGUgZm9sbG93aW5nIFwiaW5jbHVkZVwiIHdpdGggdGhlIGNvbnRlbnQgb2YgdGhlXG4gICAgICAvLyBKU09OIGZpbGUuXG4gICAgICBjb25zdCBhcGlNZXRhZGF0YSA9IHtcbiAgICAgICAgXCJhbGFybXNcIjoge1xuICAgICAgICAgIFwiY2xlYXJcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjbGVhckFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImJvb2ttYXJrc1wiOiB7XG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRDaGlsZHJlblwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFJlY2VudFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFN1YlRyZWVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRUcmVlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVRyZWVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWFyY2hcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJicm93c2VyQWN0aW9uXCI6IHtcbiAgICAgICAgICBcImRpc2FibGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbmFibGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRCYWRnZUJhY2tncm91bmRDb2xvclwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEJhZGdlVGV4dFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFBvcHVwXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0VGl0bGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJvcGVuUG9wdXBcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRCYWRnZUJhY2tncm91bmRDb2xvclwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldEJhZGdlVGV4dFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldEljb25cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRQb3B1cFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFRpdGxlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYnJvd3NpbmdEYXRhXCI6IHtcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUNhY2hlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlQ29va2llc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZURvd25sb2Fkc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUZvcm1EYXRhXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlSGlzdG9yeVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUxvY2FsU3RvcmFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVBhc3N3b3Jkc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVBsdWdpbkRhdGFcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXR0aW5nc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImNvbW1hbmRzXCI6IHtcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImNvbnRleHRNZW51c1wiOiB7XG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJjb29raWVzXCI6IHtcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbENvb2tpZVN0b3Jlc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImRldnRvb2xzXCI6IHtcbiAgICAgICAgICBcImluc3BlY3RlZFdpbmRvd1wiOiB7XG4gICAgICAgICAgICBcImV2YWxcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDIsXG4gICAgICAgICAgICAgIFwic2luZ2xlQ2FsbGJhY2tBcmdcIjogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFuZWxzXCI6IHtcbiAgICAgICAgICAgIFwiY3JlYXRlXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDMsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAzLFxuICAgICAgICAgICAgICBcInNpbmdsZUNhbGxiYWNrQXJnXCI6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImVsZW1lbnRzXCI6IHtcbiAgICAgICAgICAgICAgXCJjcmVhdGVTaWRlYmFyUGFuZVwiOiB7XG4gICAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJkb3dubG9hZHNcIjoge1xuICAgICAgICAgIFwiY2FuY2VsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZG93bmxvYWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlcmFzZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEZpbGVJY29uXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwib3BlblwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhdXNlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlRmlsZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc3VtZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlYXJjaFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNob3dcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRlbnNpb25cIjoge1xuICAgICAgICAgIFwiaXNBbGxvd2VkRmlsZVNjaGVtZUFjY2Vzc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImlzQWxsb3dlZEluY29nbml0b0FjY2Vzc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImhpc3RvcnlcIjoge1xuICAgICAgICAgIFwiYWRkVXJsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGVsZXRlQWxsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGVsZXRlUmFuZ2VcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkZWxldGVVcmxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRWaXNpdHNcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWFyY2hcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJpMThuXCI6IHtcbiAgICAgICAgICBcImRldGVjdExhbmd1YWdlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0QWNjZXB0TGFuZ3VhZ2VzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaWRlbnRpdHlcIjoge1xuICAgICAgICAgIFwibGF1bmNoV2ViQXV0aEZsb3dcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJpZGxlXCI6IHtcbiAgICAgICAgICBcInF1ZXJ5U3RhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtYW5hZ2VtZW50XCI6IHtcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFNlbGZcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRFbmFibGVkXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidW5pbnN0YWxsU2VsZlwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm5vdGlmaWNhdGlvbnNcIjoge1xuICAgICAgICAgIFwiY2xlYXJcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRQZXJtaXNzaW9uTGV2ZWxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJwYWdlQWN0aW9uXCI6IHtcbiAgICAgICAgICBcImdldFBvcHVwXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0VGl0bGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJoaWRlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0SWNvblwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFBvcHVwXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0VGl0bGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzaG93XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGVybWlzc2lvbnNcIjoge1xuICAgICAgICAgIFwiY29udGFpbnNcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicnVudGltZVwiOiB7XG4gICAgICAgICAgXCJnZXRCYWNrZ3JvdW5kUGFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFBsYXRmb3JtSW5mb1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm9wZW5PcHRpb25zUGFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlcXVlc3RVcGRhdGVDaGVja1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlbmRNZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDNcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VuZE5hdGl2ZU1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRVbmluc3RhbGxVUkxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXNzaW9uc1wiOiB7XG4gICAgICAgICAgXCJnZXREZXZpY2VzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0UmVjZW50bHlDbG9zZWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXN0b3JlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic3RvcmFnZVwiOiB7XG4gICAgICAgICAgXCJsb2NhbFwiOiB7XG4gICAgICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldEJ5dGVzSW5Vc2VcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic2V0XCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1hbmFnZWRcIjoge1xuICAgICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldEJ5dGVzSW5Vc2VcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3luY1wiOiB7XG4gICAgICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldEJ5dGVzSW5Vc2VcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic2V0XCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInRhYnNcIjoge1xuICAgICAgICAgIFwiY2FwdHVyZVZpc2libGVUYWJcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkZXRlY3RMYW5ndWFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRpc2NhcmRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkdXBsaWNhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleGVjdXRlU2NyaXB0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0Q3VycmVudFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFpvb21cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRab29tU2V0dGluZ3NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnb0JhY2tcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnb0ZvcndhcmRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJoaWdobGlnaHRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbnNlcnRDU1NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtb3ZlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicXVlcnlcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWxvYWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVDU1NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZW5kTWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFpvb21cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRab29tU2V0dGluZ3NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ0b3BTaXRlc1wiOiB7XG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWJOYXZpZ2F0aW9uXCI6IHtcbiAgICAgICAgICBcImdldEFsbEZyYW1lc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEZyYW1lXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwid2ViUmVxdWVzdFwiOiB7XG4gICAgICAgICAgXCJoYW5kbGVyQmVoYXZpb3JDaGFuZ2VkXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwid2luZG93c1wiOiB7XG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRDdXJyZW50XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0TGFzdEZvY3VzZWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGFwaU1ldGFkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXBpLW1ldGFkYXRhLmpzb24gaGFzIG5vdCBiZWVuIGluY2x1ZGVkIGluIGJyb3dzZXItcG9seWZpbGxcIik7XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAqIEEgV2Vha01hcCBzdWJjbGFzcyB3aGljaCBjcmVhdGVzIGFuZCBzdG9yZXMgYSB2YWx1ZSBmb3IgYW55IGtleSB3aGljaCBkb2VzXG4gICAgICAgKiBub3QgZXhpc3Qgd2hlbiBhY2Nlc3NlZCwgYnV0IGJlaGF2ZXMgZXhhY3RseSBhcyBhbiBvcmRpbmFyeSBXZWFrTWFwXG4gICAgICAgKiBvdGhlcndpc2UuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY3JlYXRlSXRlbVxuICAgICAgICogICAgICAgIEEgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgaW4gb3JkZXIgdG8gY3JlYXRlIHRoZSB2YWx1ZSBmb3IgYW55XG4gICAgICAgKiAgICAgICAga2V5IHdoaWNoIGRvZXMgbm90IGV4aXN0LCB0aGUgZmlyc3QgdGltZSBpdCBpcyBhY2Nlc3NlZC4gVGhlXG4gICAgICAgKiAgICAgICAgZnVuY3Rpb24gcmVjZWl2ZXMsIGFzIGl0cyBvbmx5IGFyZ3VtZW50LCB0aGUga2V5IGJlaW5nIGNyZWF0ZWQuXG4gICAgICAgKi9cblxuXG4gICAgICBjbGFzcyBEZWZhdWx0V2Vha01hcCBleHRlbmRzIFdlYWtNYXAge1xuICAgICAgICBjb25zdHJ1Y3RvcihjcmVhdGVJdGVtLCBpdGVtcyA9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN1cGVyKGl0ZW1zKTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZUl0ZW0gPSBjcmVhdGVJdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0KGtleSkge1xuICAgICAgICAgIGlmICghdGhpcy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB0aGlzLmNyZWF0ZUl0ZW0oa2V5KSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyLmdldChrZXkpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICAgIC8qKlxuICAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBvYmplY3QgaXMgYW4gb2JqZWN0IHdpdGggYSBgdGhlbmAgbWV0aG9kLCBhbmQgY2FuXG4gICAgICAgKiB0aGVyZWZvcmUgYmUgYXNzdW1lZCB0byBiZWhhdmUgYXMgYSBQcm9taXNlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3QuXG4gICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdGhlbmFibGUuXG4gICAgICAgKi9cblxuXG4gICAgICBjb25zdCBpc1RoZW5hYmxlID0gdmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICB9O1xuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2gsIHdoZW4gY2FsbGVkLCB3aWxsIHJlc29sdmUgb3IgcmVqZWN0XG4gICAgICAgKiB0aGUgZ2l2ZW4gcHJvbWlzZSBiYXNlZCBvbiBob3cgaXQgaXMgY2FsbGVkOlxuICAgICAgICpcbiAgICAgICAqIC0gSWYsIHdoZW4gY2FsbGVkLCBgY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yYCBjb250YWlucyBhIG5vbi1udWxsIG9iamVjdCxcbiAgICAgICAqICAgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCB0aGF0IHZhbHVlLlxuICAgICAgICogLSBJZiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggZXhhY3RseSBvbmUgYXJndW1lbnQsIHRoZSBwcm9taXNlIGlzXG4gICAgICAgKiAgIHJlc29sdmVkIHRvIHRoYXQgdmFsdWUuXG4gICAgICAgKiAtIE90aGVyd2lzZSwgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgdG8gYW4gYXJyYXkgY29udGFpbmluZyBhbGwgb2YgdGhlXG4gICAgICAgKiAgIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9taXNlXG4gICAgICAgKiAgICAgICAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlc29sdXRpb24gYW5kIHJlamVjdGlvbiBmdW5jdGlvbnMgb2YgYVxuICAgICAgICogICAgICAgIHByb21pc2UuXG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBwcm9taXNlLnJlc29sdmVcbiAgICAgICAqICAgICAgICBUaGUgcHJvbWlzZSdzIHJlc29sdXRpb24gZnVuY3Rpb24uXG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBwcm9taXNlLnJlamVjdFxuICAgICAgICogICAgICAgIFRoZSBwcm9taXNlJ3MgcmVqZWN0aW9uIGZ1bmN0aW9uLlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IG1ldGFkYXRhXG4gICAgICAgKiAgICAgICAgTWV0YWRhdGEgYWJvdXQgdGhlIHdyYXBwZWQgbWV0aG9kIHdoaWNoIGhhcyBjcmVhdGVkIHRoZSBjYWxsYmFjay5cbiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbWV0YWRhdGEuc2luZ2xlQ2FsbGJhY2tBcmdcbiAgICAgICAqICAgICAgICBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIG9ubHkgdGhlIGZpcnN0XG4gICAgICAgKiAgICAgICAgYXJndW1lbnQgb2YgdGhlIGNhbGxiYWNrLCBhbHRlcm5hdGl2ZWx5IGFuIGFycmF5IG9mIGFsbCB0aGVcbiAgICAgICAqICAgICAgICBjYWxsYmFjayBhcmd1bWVudHMgaXMgcmVzb2x2ZWQuIEJ5IGRlZmF1bHQsIGlmIHRoZSBjYWxsYmFja1xuICAgICAgICogICAgICAgIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCBvbmx5IGEgc2luZ2xlIGFyZ3VtZW50LCB0aGF0IHdpbGwgYmVcbiAgICAgICAqICAgICAgICByZXNvbHZlZCB0byB0aGUgcHJvbWlzZSwgd2hpbGUgYWxsIGFyZ3VtZW50cyB3aWxsIGJlIHJlc29sdmVkIGFzXG4gICAgICAgKiAgICAgICAgYW4gYXJyYXkgaWYgbXVsdGlwbGUgYXJlIGdpdmVuLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAgICAgICAqICAgICAgICBUaGUgZ2VuZXJhdGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAgICovXG5cblxuICAgICAgY29uc3QgbWFrZUNhbGxiYWNrID0gKHByb21pc2UsIG1ldGFkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiAoLi4uY2FsbGJhY2tBcmdzKSA9PiB7XG4gICAgICAgICAgaWYgKGV4dGVuc2lvbkFQSXMucnVudGltZS5sYXN0RXJyb3IpIHtcbiAgICAgICAgICAgIHByb21pc2UucmVqZWN0KG5ldyBFcnJvcihleHRlbnNpb25BUElzLnJ1bnRpbWUubGFzdEVycm9yLm1lc3NhZ2UpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnNpbmdsZUNhbGxiYWNrQXJnIHx8IGNhbGxiYWNrQXJncy5sZW5ndGggPD0gMSAmJiBtZXRhZGF0YS5zaW5nbGVDYWxsYmFja0FyZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZShjYWxsYmFja0FyZ3NbMF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoY2FsbGJhY2tBcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwbHVyYWxpemVBcmd1bWVudHMgPSBudW1BcmdzID0+IG51bUFyZ3MgPT0gMSA/IFwiYXJndW1lbnRcIiA6IFwiYXJndW1lbnRzXCI7XG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBtZXRhZGF0YS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgICAgICogICAgICAgIFRoZSBuYW1lIG9mIHRoZSBtZXRob2Qgd2hpY2ggaXMgYmVpbmcgd3JhcHBlZC5cbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBtZXRhZGF0YVxuICAgICAgICogICAgICAgIE1ldGFkYXRhIGFib3V0IHRoZSBtZXRob2QgYmVpbmcgd3JhcHBlZC5cbiAgICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbWV0YWRhdGEubWluQXJnc1xuICAgICAgICogICAgICAgIFRoZSBtaW5pbXVtIG51bWJlciBvZiBhcmd1bWVudHMgd2hpY2ggbXVzdCBiZSBwYXNzZWQgdG8gdGhlXG4gICAgICAgKiAgICAgICAgZnVuY3Rpb24uIElmIGNhbGxlZCB3aXRoIGZld2VyIHRoYW4gdGhpcyBudW1iZXIgb2YgYXJndW1lbnRzLCB0aGVcbiAgICAgICAqICAgICAgICB3cmFwcGVyIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uLlxuICAgICAgICogQHBhcmFtIHtpbnRlZ2VyfSBtZXRhZGF0YS5tYXhBcmdzXG4gICAgICAgKiAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIHRoZVxuICAgICAgICogICAgICAgIGZ1bmN0aW9uLiBJZiBjYWxsZWQgd2l0aCBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgYXJndW1lbnRzLCB0aGVcbiAgICAgICAqICAgICAgICB3cmFwcGVyIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uLlxuICAgICAgICogQHBhcmFtIHtib29sZWFufSBtZXRhZGF0YS5zaW5nbGVDYWxsYmFja0FyZ1xuICAgICAgICogICAgICAgIFdoZXRoZXIgb3Igbm90IHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggb25seSB0aGUgZmlyc3RcbiAgICAgICAqICAgICAgICBhcmd1bWVudCBvZiB0aGUgY2FsbGJhY2ssIGFsdGVybmF0aXZlbHkgYW4gYXJyYXkgb2YgYWxsIHRoZVxuICAgICAgICogICAgICAgIGNhbGxiYWNrIGFyZ3VtZW50cyBpcyByZXNvbHZlZC4gQnkgZGVmYXVsdCwgaWYgdGhlIGNhbGxiYWNrXG4gICAgICAgKiAgICAgICAgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIG9ubHkgYSBzaW5nbGUgYXJndW1lbnQsIHRoYXQgd2lsbCBiZVxuICAgICAgICogICAgICAgIHJlc29sdmVkIHRvIHRoZSBwcm9taXNlLCB3aGlsZSBhbGwgYXJndW1lbnRzIHdpbGwgYmUgcmVzb2x2ZWQgYXNcbiAgICAgICAqICAgICAgICBhbiBhcnJheSBpZiBtdWx0aXBsZSBhcmUgZ2l2ZW4uXG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge2Z1bmN0aW9uKG9iamVjdCwgLi4uKil9XG4gICAgICAgKiAgICAgICBUaGUgZ2VuZXJhdGVkIHdyYXBwZXIgZnVuY3Rpb24uXG4gICAgICAgKi9cblxuXG4gICAgICBjb25zdCB3cmFwQXN5bmNGdW5jdGlvbiA9IChuYW1lLCBtZXRhZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gYXN5bmNGdW5jdGlvbldyYXBwZXIodGFyZ2V0LCAuLi5hcmdzKSB7XG4gICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgbWV0YWRhdGEubWluQXJncykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCAke21ldGFkYXRhLm1pbkFyZ3N9ICR7cGx1cmFsaXplQXJndW1lbnRzKG1ldGFkYXRhLm1pbkFyZ3MpfSBmb3IgJHtuYW1lfSgpLCBnb3QgJHthcmdzLmxlbmd0aH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPiBtZXRhZGF0YS5tYXhBcmdzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGF0IG1vc3QgJHttZXRhZGF0YS5tYXhBcmdzfSAke3BsdXJhbGl6ZUFyZ3VtZW50cyhtZXRhZGF0YS5tYXhBcmdzKX0gZm9yICR7bmFtZX0oKSwgZ290ICR7YXJncy5sZW5ndGh9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5mYWxsYmFja1RvTm9DYWxsYmFjaykge1xuICAgICAgICAgICAgICAvLyBUaGlzIEFQSSBtZXRob2QgaGFzIGN1cnJlbnRseSBubyBjYWxsYmFjayBvbiBDaHJvbWUsIGJ1dCBpdCByZXR1cm4gYSBwcm9taXNlIG9uIEZpcmVmb3gsXG4gICAgICAgICAgICAgIC8vIGFuZCBzbyB0aGUgcG9seWZpbGwgd2lsbCB0cnkgdG8gY2FsbCBpdCB3aXRoIGEgY2FsbGJhY2sgZmlyc3QsIGFuZCBpdCB3aWxsIGZhbGxiYWNrXG4gICAgICAgICAgICAgIC8vIHRvIG5vdCBwYXNzaW5nIHRoZSBjYWxsYmFjayBpZiB0aGUgZmlyc3QgY2FsbCBmYWlscy5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0oLi4uYXJncywgbWFrZUNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgICB9LCBtZXRhZGF0YSkpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChjYkVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGAke25hbWV9IEFQSSBtZXRob2QgZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgdGhlIGNhbGxiYWNrIHBhcmFtZXRlciwgYCArIFwiZmFsbGluZyBiYWNrIHRvIGNhbGwgaXQgd2l0aG91dCBhIGNhbGxiYWNrOiBcIiwgY2JFcnJvcik7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MpOyAvLyBVcGRhdGUgdGhlIEFQSSBtZXRob2QgbWV0YWRhdGEsIHNvIHRoYXQgdGhlIG5leHQgQVBJIGNhbGxzIHdpbGwgbm90IHRyeSB0b1xuICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgdW5zdXBwb3J0ZWQgY2FsbGJhY2sgYW55bW9yZS5cblxuICAgICAgICAgICAgICAgIG1ldGFkYXRhLmZhbGxiYWNrVG9Ob0NhbGxiYWNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGEubm9DYWxsYmFjayA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLm5vQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0oLi4uYXJncywgbWFrZUNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICB9LCBtZXRhZGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIC8qKlxuICAgICAgICogV3JhcHMgYW4gZXhpc3RpbmcgbWV0aG9kIG9mIHRoZSB0YXJnZXQgb2JqZWN0LCBzbyB0aGF0IGNhbGxzIHRvIGl0IGFyZVxuICAgICAgICogaW50ZXJjZXB0ZWQgYnkgdGhlIGdpdmVuIHdyYXBwZXIgZnVuY3Rpb24uIFRoZSB3cmFwcGVyIGZ1bmN0aW9uIHJlY2VpdmVzLFxuICAgICAgICogYXMgaXRzIGZpcnN0IGFyZ3VtZW50LCB0aGUgb3JpZ2luYWwgYHRhcmdldGAgb2JqZWN0LCBmb2xsb3dlZCBieSBlYWNoIG9mXG4gICAgICAgKiB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgb3JpZ2luYWwgbWV0aG9kLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXRcbiAgICAgICAqICAgICAgICBUaGUgb3JpZ2luYWwgdGFyZ2V0IG9iamVjdCB0aGF0IHRoZSB3cmFwcGVkIG1ldGhvZCBiZWxvbmdzIHRvLlxuICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kXG4gICAgICAgKiAgICAgICAgVGhlIG1ldGhvZCBiZWluZyB3cmFwcGVkLiBUaGlzIGlzIHVzZWQgYXMgdGhlIHRhcmdldCBvZiB0aGUgUHJveHlcbiAgICAgICAqICAgICAgICBvYmplY3Qgd2hpY2ggaXMgY3JlYXRlZCB0byB3cmFwIHRoZSBtZXRob2QuXG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSB3cmFwcGVyXG4gICAgICAgKiAgICAgICAgVGhlIHdyYXBwZXIgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGluIHBsYWNlIG9mIGEgZGlyZWN0IGludm9jYXRpb25cbiAgICAgICAqICAgICAgICBvZiB0aGUgd3JhcHBlZCBtZXRob2QuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge1Byb3h5PGZ1bmN0aW9uPn1cbiAgICAgICAqICAgICAgICBBIFByb3h5IG9iamVjdCBmb3IgdGhlIGdpdmVuIG1ldGhvZCwgd2hpY2ggaW52b2tlcyB0aGUgZ2l2ZW4gd3JhcHBlclxuICAgICAgICogICAgICAgIG1ldGhvZCBpbiBpdHMgcGxhY2UuXG4gICAgICAgKi9cblxuXG4gICAgICBjb25zdCB3cmFwTWV0aG9kID0gKHRhcmdldCwgbWV0aG9kLCB3cmFwcGVyKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkobWV0aG9kLCB7XG4gICAgICAgICAgYXBwbHkodGFyZ2V0TWV0aG9kLCB0aGlzT2JqLCBhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlci5jYWxsKHRoaXNPYmosIHRhcmdldCwgLi4uYXJncyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgbGV0IGhhc093blByb3BlcnR5ID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuICAgICAgLyoqXG4gICAgICAgKiBXcmFwcyBhbiBvYmplY3QgaW4gYSBQcm94eSB3aGljaCBpbnRlcmNlcHRzIGFuZCB3cmFwcyBjZXJ0YWluIG1ldGhvZHNcbiAgICAgICAqIGJhc2VkIG9uIHRoZSBnaXZlbiBgd3JhcHBlcnNgIGFuZCBgbWV0YWRhdGFgIG9iamVjdHMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IHRhcmdldFxuICAgICAgICogICAgICAgIFRoZSB0YXJnZXQgb2JqZWN0IHRvIHdyYXAuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IFt3cmFwcGVycyA9IHt9XVxuICAgICAgICogICAgICAgIEFuIG9iamVjdCB0cmVlIGNvbnRhaW5pbmcgd3JhcHBlciBmdW5jdGlvbnMgZm9yIHNwZWNpYWwgY2FzZXMuIEFueVxuICAgICAgICogICAgICAgIGZ1bmN0aW9uIHByZXNlbnQgaW4gdGhpcyBvYmplY3QgdHJlZSBpcyBjYWxsZWQgaW4gcGxhY2Ugb2YgdGhlXG4gICAgICAgKiAgICAgICAgbWV0aG9kIGluIHRoZSBzYW1lIGxvY2F0aW9uIGluIHRoZSBgdGFyZ2V0YCBvYmplY3QgdHJlZS4gVGhlc2VcbiAgICAgICAqICAgICAgICB3cmFwcGVyIG1ldGhvZHMgYXJlIGludm9rZWQgYXMgZGVzY3JpYmVkIGluIHtAc2VlIHdyYXBNZXRob2R9LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbbWV0YWRhdGEgPSB7fV1cbiAgICAgICAqICAgICAgICBBbiBvYmplY3QgdHJlZSBjb250YWluaW5nIG1ldGFkYXRhIHVzZWQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZVxuICAgICAgICogICAgICAgIFByb21pc2UtYmFzZWQgd3JhcHBlciBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cy4gQW55IGZ1bmN0aW9uIGluXG4gICAgICAgKiAgICAgICAgdGhlIGB0YXJnZXRgIG9iamVjdCB0cmVlIHdoaWNoIGhhcyBhIGNvcnJlc3BvbmRpbmcgbWV0YWRhdGEgb2JqZWN0XG4gICAgICAgKiAgICAgICAgaW4gdGhlIHNhbWUgbG9jYXRpb24gaW4gdGhlIGBtZXRhZGF0YWAgdHJlZSBpcyByZXBsYWNlZCB3aXRoIGFuXG4gICAgICAgKiAgICAgICAgYXV0b21hdGljYWxseS1nZW5lcmF0ZWQgd3JhcHBlciBmdW5jdGlvbiwgYXMgZGVzY3JpYmVkIGluXG4gICAgICAgKiAgICAgICAge0BzZWUgd3JhcEFzeW5jRnVuY3Rpb259XG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge1Byb3h5PG9iamVjdD59XG4gICAgICAgKi9cblxuICAgICAgY29uc3Qgd3JhcE9iamVjdCA9ICh0YXJnZXQsIHdyYXBwZXJzID0ge30sIG1ldGFkYXRhID0ge30pID0+IHtcbiAgICAgICAgbGV0IGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgbGV0IGhhbmRsZXJzID0ge1xuICAgICAgICAgIGhhcyhwcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb3AgaW4gdGFyZ2V0IHx8IHByb3AgaW4gY2FjaGU7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGdldChwcm94eVRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIGlmIChwcm9wIGluIGNhY2hlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjYWNoZVtwcm9wXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCEocHJvcCBpbiB0YXJnZXQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHRhcmdldFtwcm9wXTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBtZXRob2Qgb24gdGhlIHVuZGVybHlpbmcgb2JqZWN0LiBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvXG4gICAgICAgICAgICAgIC8vIGFueSB3cmFwcGluZy5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3cmFwcGVyc1twcm9wXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHNwZWNpYWwtY2FzZSB3cmFwcGVyIGZvciB0aGlzIG1ldGhvZC5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHdyYXBNZXRob2QodGFyZ2V0LCB0YXJnZXRbcHJvcF0sIHdyYXBwZXJzW3Byb3BdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNPd25Qcm9wZXJ0eShtZXRhZGF0YSwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHdlIGhhdmUgbWV0YWRhdGEgZm9yLiBDcmVhdGUgYVxuICAgICAgICAgICAgICAgIC8vIFByb21pc2Ugd3JhcHBlciBmb3IgaXQuXG4gICAgICAgICAgICAgICAgbGV0IHdyYXBwZXIgPSB3cmFwQXN5bmNGdW5jdGlvbihwcm9wLCBtZXRhZGF0YVtwcm9wXSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwTWV0aG9kKHRhcmdldCwgdGFyZ2V0W3Byb3BdLCB3cmFwcGVyKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbWV0aG9kIHRoYXQgd2UgZG9uJ3Qga25vdyBvciBjYXJlIGFib3V0LiBSZXR1cm4gdGhlXG4gICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgbWV0aG9kLCBib3VuZCB0byB0aGUgdW5kZXJseWluZyBvYmplY3QuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5iaW5kKHRhcmdldCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIChoYXNPd25Qcm9wZXJ0eSh3cmFwcGVycywgcHJvcCkgfHwgaGFzT3duUHJvcGVydHkobWV0YWRhdGEsIHByb3ApKSkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIG9iamVjdCB0aGF0IHdlIG5lZWQgdG8gZG8gc29tZSB3cmFwcGluZyBmb3IgdGhlIGNoaWxkcmVuXG4gICAgICAgICAgICAgIC8vIG9mLiBDcmVhdGUgYSBzdWItb2JqZWN0IHdyYXBwZXIgZm9yIGl0IHdpdGggdGhlIGFwcHJvcHJpYXRlIGNoaWxkXG4gICAgICAgICAgICAgIC8vIG1ldGFkYXRhLlxuICAgICAgICAgICAgICB2YWx1ZSA9IHdyYXBPYmplY3QodmFsdWUsIHdyYXBwZXJzW3Byb3BdLCBtZXRhZGF0YVtwcm9wXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc093blByb3BlcnR5KG1ldGFkYXRhLCBcIipcIikpIHtcbiAgICAgICAgICAgICAgLy8gV3JhcCBhbGwgcHJvcGVydGllcyBpbiAqIG5hbWVzcGFjZS5cbiAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwT2JqZWN0KHZhbHVlLCB3cmFwcGVyc1twcm9wXSwgbWV0YWRhdGFbXCIqXCJdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55IHdyYXBwaW5nIGZvciB0aGlzIHByb3BlcnR5LFxuICAgICAgICAgICAgICAvLyBzbyBqdXN0IGZvcndhcmQgYWxsIGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBvYmplY3QuXG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjYWNoZSwgcHJvcCwge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuXG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGVbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgc2V0KHByb3h5VGFyZ2V0LCBwcm9wLCB2YWx1ZSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIGlmIChwcm9wIGluIGNhY2hlKSB7XG4gICAgICAgICAgICAgIGNhY2hlW3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHByb3h5VGFyZ2V0LCBwcm9wLCBkZXNjKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShjYWNoZSwgcHJvcCwgZGVzYyk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGRlbGV0ZVByb3BlcnR5KHByb3h5VGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShjYWNoZSwgcHJvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH07IC8vIFBlciBjb250cmFjdCBvZiB0aGUgUHJveHkgQVBJLCB0aGUgXCJnZXRcIiBwcm94eSBoYW5kbGVyIG11c3QgcmV0dXJuIHRoZVxuICAgICAgICAvLyBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgdGFyZ2V0IGlmIHRoYXQgdmFsdWUgaXMgZGVjbGFyZWQgcmVhZC1vbmx5IGFuZFxuICAgICAgICAvLyBub24tY29uZmlndXJhYmxlLiBGb3IgdGhpcyByZWFzb24sIHdlIGNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGVcbiAgICAgICAgLy8gcHJvdG90eXBlIHNldCB0byBgdGFyZ2V0YCBpbnN0ZWFkIG9mIHVzaW5nIGB0YXJnZXRgIGRpcmVjdGx5LlxuICAgICAgICAvLyBPdGhlcndpc2Ugd2UgY2Fubm90IHJldHVybiBhIGN1c3RvbSBvYmplY3QgZm9yIEFQSXMgdGhhdFxuICAgICAgICAvLyBhcmUgZGVjbGFyZWQgcmVhZC1vbmx5IGFuZCBub24tY29uZmlndXJhYmxlLCBzdWNoIGFzIGBjaHJvbWUuZGV2dG9vbHNgLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgcHJveHkgaGFuZGxlcnMgdGhlbXNlbHZlcyB3aWxsIHN0aWxsIHVzZSB0aGUgb3JpZ2luYWwgYHRhcmdldGBcbiAgICAgICAgLy8gaW5zdGVhZCBvZiB0aGUgYHByb3h5VGFyZ2V0YCwgc28gdGhhdCB0aGUgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBhcmVcbiAgICAgICAgLy8gZGVyZWZlcmVuY2VkIHZpYSB0aGUgb3JpZ2luYWwgdGFyZ2V0cy5cblxuICAgICAgICBsZXQgcHJveHlUYXJnZXQgPSBPYmplY3QuY3JlYXRlKHRhcmdldCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkocHJveHlUYXJnZXQsIGhhbmRsZXJzKTtcbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSBzZXQgb2Ygd3JhcHBlciBmdW5jdGlvbnMgZm9yIGFuIGV2ZW50IG9iamVjdCwgd2hpY2ggaGFuZGxlc1xuICAgICAgICogd3JhcHBpbmcgb2YgbGlzdGVuZXIgZnVuY3Rpb25zIHRoYXQgdGhvc2UgbWVzc2FnZXMgYXJlIHBhc3NlZC5cbiAgICAgICAqXG4gICAgICAgKiBBIHNpbmdsZSB3cmFwcGVyIGlzIGNyZWF0ZWQgZm9yIGVhY2ggbGlzdGVuZXIgZnVuY3Rpb24sIGFuZCBzdG9yZWQgaW4gYVxuICAgICAgICogbWFwLiBTdWJzZXF1ZW50IGNhbGxzIHRvIGBhZGRMaXN0ZW5lcmAsIGBoYXNMaXN0ZW5lcmAsIG9yIGByZW1vdmVMaXN0ZW5lcmBcbiAgICAgICAqIHJldHJpZXZlIHRoZSBvcmlnaW5hbCB3cmFwcGVyLCBzbyB0aGF0ICBhdHRlbXB0cyB0byByZW1vdmUgYVxuICAgICAgICogcHJldmlvdXNseS1hZGRlZCBsaXN0ZW5lciB3b3JrIGFzIGV4cGVjdGVkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7RGVmYXVsdFdlYWtNYXA8ZnVuY3Rpb24sIGZ1bmN0aW9uPn0gd3JhcHBlck1hcFxuICAgICAgICogICAgICAgIEEgRGVmYXVsdFdlYWtNYXAgb2JqZWN0IHdoaWNoIHdpbGwgY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB3cmFwcGVyXG4gICAgICAgKiAgICAgICAgZm9yIGEgZ2l2ZW4gbGlzdGVuZXIgZnVuY3Rpb24gd2hlbiBvbmUgZG9lcyBub3QgZXhpc3QsIGFuZCByZXRyaWV2ZVxuICAgICAgICogICAgICAgIGFuIGV4aXN0aW5nIG9uZSB3aGVuIGl0IGRvZXMuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge29iamVjdH1cbiAgICAgICAqL1xuXG5cbiAgICAgIGNvbnN0IHdyYXBFdmVudCA9IHdyYXBwZXJNYXAgPT4gKHtcbiAgICAgICAgYWRkTGlzdGVuZXIodGFyZ2V0LCBsaXN0ZW5lciwgLi4uYXJncykge1xuICAgICAgICAgIHRhcmdldC5hZGRMaXN0ZW5lcih3cmFwcGVyTWFwLmdldChsaXN0ZW5lciksIC4uLmFyZ3MpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGhhc0xpc3RlbmVyKHRhcmdldCwgbGlzdGVuZXIpIHtcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0Lmhhc0xpc3RlbmVyKHdyYXBwZXJNYXAuZ2V0KGxpc3RlbmVyKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBsaXN0ZW5lcikge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVMaXN0ZW5lcih3cmFwcGVyTWFwLmdldChsaXN0ZW5lcikpO1xuICAgICAgICB9XG5cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBvblJlcXVlc3RGaW5pc2hlZFdyYXBwZXJzID0gbmV3IERlZmF1bHRXZWFrTWFwKGxpc3RlbmVyID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcmV0dXJuIGxpc3RlbmVyO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXcmFwcyBhbiBvblJlcXVlc3RGaW5pc2hlZCBsaXN0ZW5lciBmdW5jdGlvbiBzbyB0aGF0IGl0IHdpbGwgcmV0dXJuIGFcbiAgICAgICAgICogYGdldENvbnRlbnQoKWAgcHJvcGVydHkgd2hpY2ggcmV0dXJucyBhIGBQcm9taXNlYCByYXRoZXIgdGhhbiB1c2luZyBhXG4gICAgICAgICAqIGNhbGxiYWNrIEFQSS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHJlcVxuICAgICAgICAgKiAgICAgICAgVGhlIEhBUiBlbnRyeSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuZXR3b3JrIHJlcXVlc3QuXG4gICAgICAgICAqL1xuXG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG9uUmVxdWVzdEZpbmlzaGVkKHJlcSkge1xuICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXEgPSB3cmFwT2JqZWN0KHJlcSwge31cbiAgICAgICAgICAvKiB3cmFwcGVycyAqL1xuICAgICAgICAgICwge1xuICAgICAgICAgICAgZ2V0Q29udGVudDoge1xuICAgICAgICAgICAgICBtaW5BcmdzOiAwLFxuICAgICAgICAgICAgICBtYXhBcmdzOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGlzdGVuZXIod3JhcHBlZFJlcSk7XG4gICAgICAgIH07XG4gICAgICB9KTsgLy8gS2VlcCB0cmFjayBpZiB0aGUgZGVwcmVjYXRpb24gd2FybmluZyBoYXMgYmVlbiBsb2dnZWQgYXQgbGVhc3Qgb25jZS5cblxuICAgICAgbGV0IGxvZ2dlZFNlbmRSZXNwb25zZURlcHJlY2F0aW9uV2FybmluZyA9IGZhbHNlO1xuICAgICAgY29uc3Qgb25NZXNzYWdlV3JhcHBlcnMgPSBuZXcgRGVmYXVsdFdlYWtNYXAobGlzdGVuZXIgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICByZXR1cm4gbGlzdGVuZXI7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdyYXBzIGEgbWVzc2FnZSBsaXN0ZW5lciBmdW5jdGlvbiBzbyB0aGF0IGl0IG1heSBzZW5kIHJlc3BvbnNlcyBiYXNlZCBvblxuICAgICAgICAgKiBpdHMgcmV0dXJuIHZhbHVlLCByYXRoZXIgdGhhbiBieSByZXR1cm5pbmcgYSBzZW50aW5lbCB2YWx1ZSBhbmQgY2FsbGluZyBhXG4gICAgICAgICAqIGNhbGxiYWNrLiBJZiB0aGUgbGlzdGVuZXIgZnVuY3Rpb24gcmV0dXJucyBhIFByb21pc2UsIHRoZSByZXNwb25zZSBpc1xuICAgICAgICAgKiBzZW50IHdoZW4gdGhlIHByb21pc2UgZWl0aGVyIHJlc29sdmVzIG9yIHJlamVjdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gbWVzc2FnZVxuICAgICAgICAgKiAgICAgICAgVGhlIG1lc3NhZ2Ugc2VudCBieSB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjaGFubmVsLlxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gc2VuZGVyXG4gICAgICAgICAqICAgICAgICBEZXRhaWxzIGFib3V0IHRoZSBzZW5kZXIgb2YgdGhlIG1lc3NhZ2UuXG4gICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKil9IHNlbmRSZXNwb25zZVxuICAgICAgICAgKiAgICAgICAgQSBjYWxsYmFjayB3aGljaCwgd2hlbiBjYWxsZWQgd2l0aCBhbiBhcmJpdHJhcnkgYXJndW1lbnQsIHNlbmRzXG4gICAgICAgICAqICAgICAgICB0aGF0IHZhbHVlIGFzIGEgcmVzcG9uc2UuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAgICAgKiAgICAgICAgVHJ1ZSBpZiB0aGUgd3JhcHBlZCBsaXN0ZW5lciByZXR1cm5lZCBhIFByb21pc2UsIHdoaWNoIHdpbGwgbGF0ZXJcbiAgICAgICAgICogICAgICAgIHlpZWxkIGEgcmVzcG9uc2UuIEZhbHNlIG90aGVyd2lzZS5cbiAgICAgICAgICovXG5cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gb25NZXNzYWdlKG1lc3NhZ2UsIHNlbmRlciwgc2VuZFJlc3BvbnNlKSB7XG4gICAgICAgICAgbGV0IGRpZENhbGxTZW5kUmVzcG9uc2UgPSBmYWxzZTtcbiAgICAgICAgICBsZXQgd3JhcHBlZFNlbmRSZXNwb25zZTtcbiAgICAgICAgICBsZXQgc2VuZFJlc3BvbnNlUHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgd3JhcHBlZFNlbmRSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICBpZiAoIWxvZ2dlZFNlbmRSZXNwb25zZURlcHJlY2F0aW9uV2FybmluZykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihTRU5EX1JFU1BPTlNFX0RFUFJFQ0FUSU9OX1dBUk5JTkcsIG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICAgICAgICAgICAgICBsb2dnZWRTZW5kUmVzcG9uc2VEZXByZWNhdGlvbldhcm5pbmcgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGlkQ2FsbFNlbmRSZXNwb25zZSA9IHRydWU7XG4gICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGxpc3RlbmVyKG1lc3NhZ2UsIHNlbmRlciwgd3JhcHBlZFNlbmRSZXNwb25zZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGlzUmVzdWx0VGhlbmFibGUgPSByZXN1bHQgIT09IHRydWUgJiYgaXNUaGVuYWJsZShyZXN1bHQpOyAvLyBJZiB0aGUgbGlzdGVuZXIgZGlkbid0IHJldHVybmVkIHRydWUgb3IgYSBQcm9taXNlLCBvciBjYWxsZWRcbiAgICAgICAgICAvLyB3cmFwcGVkU2VuZFJlc3BvbnNlIHN5bmNocm9ub3VzbHksIHdlIGNhbiBleGl0IGVhcmxpZXJcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIHdpbGwgYmUgbm8gcmVzcG9uc2Ugc2VudCBmcm9tIHRoaXMgbGlzdGVuZXIuXG5cbiAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlICYmICFpc1Jlc3VsdFRoZW5hYmxlICYmICFkaWRDYWxsU2VuZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSAvLyBBIHNtYWxsIGhlbHBlciB0byBzZW5kIHRoZSBtZXNzYWdlIGlmIHRoZSBwcm9taXNlIHJlc29sdmVzXG4gICAgICAgICAgLy8gYW5kIGFuIGVycm9yIGlmIHRoZSBwcm9taXNlIHJlamVjdHMgKGEgd3JhcHBlZCBzZW5kTWVzc2FnZSBoYXNcbiAgICAgICAgICAvLyB0byB0cmFuc2xhdGUgdGhlIG1lc3NhZ2UgaW50byBhIHJlc29sdmVkIHByb21pc2Ugb3IgYSByZWplY3RlZFxuICAgICAgICAgIC8vIHByb21pc2UpLlxuXG5cbiAgICAgICAgICBjb25zdCBzZW5kUHJvbWlzZWRSZXN1bHQgPSBwcm9taXNlID0+IHtcbiAgICAgICAgICAgIHByb21pc2UudGhlbihtc2cgPT4ge1xuICAgICAgICAgICAgICAvLyBzZW5kIHRoZSBtZXNzYWdlIHZhbHVlLlxuICAgICAgICAgICAgICBzZW5kUmVzcG9uc2UobXNnKTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgLy8gU2VuZCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yIGlmIHRoZSByZWplY3RlZCB2YWx1ZVxuICAgICAgICAgICAgICAvLyBpcyBhbiBpbnN0YW5jZSBvZiBlcnJvciwgb3IgdGhlIG9iamVjdCBpdHNlbGYgb3RoZXJ3aXNlLlxuICAgICAgICAgICAgICBsZXQgbWVzc2FnZTtcblxuICAgICAgICAgICAgICBpZiAoZXJyb3IgJiYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgfHwgdHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09IFwic3RyaW5nXCIpKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZFwiO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc2VuZFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBfX21veldlYkV4dGVuc2lvblBvbHlmaWxsUmVqZWN0X186IHRydWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgIC8vIFByaW50IGFuIGVycm9yIG9uIHRoZSBjb25zb2xlIGlmIHVuYWJsZSB0byBzZW5kIHRoZSByZXNwb25zZS5cbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBzZW5kIG9uTWVzc2FnZSByZWplY3RlZCByZXBseVwiLCBlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTsgLy8gSWYgdGhlIGxpc3RlbmVyIHJldHVybmVkIGEgUHJvbWlzZSwgc2VuZCB0aGUgcmVzb2x2ZWQgdmFsdWUgYXMgYVxuICAgICAgICAgIC8vIHJlc3VsdCwgb3RoZXJ3aXNlIHdhaXQgdGhlIHByb21pc2UgcmVsYXRlZCB0byB0aGUgd3JhcHBlZFNlbmRSZXNwb25zZVxuICAgICAgICAgIC8vIGNhbGxiYWNrIHRvIHJlc29sdmUgYW5kIHNlbmQgaXQgYXMgYSByZXNwb25zZS5cblxuXG4gICAgICAgICAgaWYgKGlzUmVzdWx0VGhlbmFibGUpIHtcbiAgICAgICAgICAgIHNlbmRQcm9taXNlZFJlc3VsdChyZXN1bHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZW5kUHJvbWlzZWRSZXN1bHQoc2VuZFJlc3BvbnNlUHJvbWlzZSk7XG4gICAgICAgICAgfSAvLyBMZXQgQ2hyb21lIGtub3cgdGhhdCB0aGUgbGlzdGVuZXIgaXMgcmVwbHlpbmcuXG5cblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHdyYXBwZWRTZW5kTWVzc2FnZUNhbGxiYWNrID0gKHtcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICByZXNvbHZlXG4gICAgICB9LCByZXBseSkgPT4ge1xuICAgICAgICBpZiAoZXh0ZW5zaW9uQVBJcy5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgIC8vIERldGVjdCB3aGVuIG5vbmUgb2YgdGhlIGxpc3RlbmVycyByZXBsaWVkIHRvIHRoZSBzZW5kTWVzc2FnZSBjYWxsIGFuZCByZXNvbHZlXG4gICAgICAgICAgLy8gdGhlIHByb21pc2UgdG8gdW5kZWZpbmVkIGFzIGluIEZpcmVmb3guXG4gICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3dlYmV4dGVuc2lvbi1wb2x5ZmlsbC9pc3N1ZXMvMTMwXG4gICAgICAgICAgaWYgKGV4dGVuc2lvbkFQSXMucnVudGltZS5sYXN0RXJyb3IubWVzc2FnZSA9PT0gQ0hST01FX1NFTkRfTUVTU0FHRV9DQUxMQkFDS19OT19SRVNQT05TRV9NRVNTQUdFKSB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXh0ZW5zaW9uQVBJcy5ydW50aW1lLmxhc3RFcnJvci5tZXNzYWdlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlcGx5ICYmIHJlcGx5Ll9fbW96V2ViRXh0ZW5zaW9uUG9seWZpbGxSZWplY3RfXykge1xuICAgICAgICAgIC8vIENvbnZlcnQgYmFjayB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IgaW50b1xuICAgICAgICAgIC8vIGFuIEVycm9yIGluc3RhbmNlLlxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVwbHkubWVzc2FnZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVwbHkpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB3cmFwcGVkU2VuZE1lc3NhZ2UgPSAobmFtZSwgbWV0YWRhdGEsIGFwaU5hbWVzcGFjZU9iaiwgLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCBtZXRhZGF0YS5taW5BcmdzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCAke21ldGFkYXRhLm1pbkFyZ3N9ICR7cGx1cmFsaXplQXJndW1lbnRzKG1ldGFkYXRhLm1pbkFyZ3MpfSBmb3IgJHtuYW1lfSgpLCBnb3QgJHthcmdzLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IG1ldGFkYXRhLm1heEFyZ3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGF0IG1vc3QgJHttZXRhZGF0YS5tYXhBcmdzfSAke3BsdXJhbGl6ZUFyZ3VtZW50cyhtZXRhZGF0YS5tYXhBcmdzKX0gZm9yICR7bmFtZX0oKSwgZ290ICR7YXJncy5sZW5ndGh9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdyYXBwZWRDYiA9IHdyYXBwZWRTZW5kTWVzc2FnZUNhbGxiYWNrLmJpbmQobnVsbCwge1xuICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFyZ3MucHVzaCh3cmFwcGVkQ2IpO1xuICAgICAgICAgIGFwaU5hbWVzcGFjZU9iai5zZW5kTWVzc2FnZSguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzdGF0aWNXcmFwcGVycyA9IHtcbiAgICAgICAgZGV2dG9vbHM6IHtcbiAgICAgICAgICBuZXR3b3JrOiB7XG4gICAgICAgICAgICBvblJlcXVlc3RGaW5pc2hlZDogd3JhcEV2ZW50KG9uUmVxdWVzdEZpbmlzaGVkV3JhcHBlcnMpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBydW50aW1lOiB7XG4gICAgICAgICAgb25NZXNzYWdlOiB3cmFwRXZlbnQob25NZXNzYWdlV3JhcHBlcnMpLFxuICAgICAgICAgIG9uTWVzc2FnZUV4dGVybmFsOiB3cmFwRXZlbnQob25NZXNzYWdlV3JhcHBlcnMpLFxuICAgICAgICAgIHNlbmRNZXNzYWdlOiB3cmFwcGVkU2VuZE1lc3NhZ2UuYmluZChudWxsLCBcInNlbmRNZXNzYWdlXCIsIHtcbiAgICAgICAgICAgIG1pbkFyZ3M6IDEsXG4gICAgICAgICAgICBtYXhBcmdzOiAzXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgdGFiczoge1xuICAgICAgICAgIHNlbmRNZXNzYWdlOiB3cmFwcGVkU2VuZE1lc3NhZ2UuYmluZChudWxsLCBcInNlbmRNZXNzYWdlXCIsIHtcbiAgICAgICAgICAgIG1pbkFyZ3M6IDIsXG4gICAgICAgICAgICBtYXhBcmdzOiAzXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldHRpbmdNZXRhZGF0YSA9IHtcbiAgICAgICAgY2xlYXI6IHtcbiAgICAgICAgICBtaW5BcmdzOiAxLFxuICAgICAgICAgIG1heEFyZ3M6IDFcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0OiB7XG4gICAgICAgICAgbWluQXJnczogMSxcbiAgICAgICAgICBtYXhBcmdzOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgIG1pbkFyZ3M6IDEsXG4gICAgICAgICAgbWF4QXJnczogMVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgYXBpTWV0YWRhdGEucHJpdmFjeSA9IHtcbiAgICAgICAgbmV0d29yazoge1xuICAgICAgICAgIFwiKlwiOiBzZXR0aW5nTWV0YWRhdGFcbiAgICAgICAgfSxcbiAgICAgICAgc2VydmljZXM6IHtcbiAgICAgICAgICBcIipcIjogc2V0dGluZ01ldGFkYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHdlYnNpdGVzOiB7XG4gICAgICAgICAgXCIqXCI6IHNldHRpbmdNZXRhZGF0YVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHdyYXBPYmplY3QoZXh0ZW5zaW9uQVBJcywgc3RhdGljV3JhcHBlcnMsIGFwaU1ldGFkYXRhKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBjaHJvbWUgIT0gXCJvYmplY3RcIiB8fCAhY2hyb21lIHx8ICFjaHJvbWUucnVudGltZSB8fCAhY2hyb21lLnJ1bnRpbWUuaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgc2NyaXB0IHNob3VsZCBvbmx5IGJlIGxvYWRlZCBpbiBhIGJyb3dzZXIgZXh0ZW5zaW9uLlwiKTtcbiAgICB9IC8vIFRoZSBidWlsZCBwcm9jZXNzIGFkZHMgYSBVTUQgd3JhcHBlciBhcm91bmQgdGhpcyBmaWxlLCB3aGljaCBtYWtlcyB0aGVcbiAgICAvLyBgbW9kdWxlYCB2YXJpYWJsZSBhdmFpbGFibGUuXG5cblxuICAgIG1vZHVsZS5leHBvcnRzID0gd3JhcEFQSXMoY2hyb21lKTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGJyb3dzZXI7XG4gIH1cbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnJvd3Nlci1wb2x5ZmlsbC5qcy5tYXBcbiIsIlxyXG5jb25zdCB7dXBkYXRlQ2hlY2tlcn0gPSAgcmVxdWlyZShcIi4vdXBkYXRlQ2hlY2tlclwiKTtcclxuY29uc3Qge2luaXRpYWxpemVDb250ZXh0TWVudXN9ID0gcmVxdWlyZShcIi4vY29udGV4dE1lbnVzLmpzXCIpXHJcbmNvbnN0IHtpbml0aWFsaXplT21uaWJveEZlYXR1cmVzfSA9IHJlcXVpcmUoXCIuL3NlYXJjaC5qc1wiKVxyXG5cclxuY29uc29sZS5sb2coXCJzdGFydGluZyBiYWNrZ3JvdW5kIHNjcmlwdFwiKVxyXG5pbml0aWFsaXplQ29udGV4dE1lbnVzKCk7XHJcbmluaXRpYWxpemVPbW5pYm94RmVhdHVyZXMoKTtcclxudXBkYXRlQ2hlY2tlcigpOyIsImNvbnN0IGJyb3dzZXIgPSByZXF1aXJlKFwid2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCIpO1xuXG5mdW5jdGlvbiBvbkNyZWF0ZWQoKSB7XG4gIGlmIChicm93c2VyLnJ1bnRpbWUubGFzdEVycm9yKSB7XG4gICAgY29uc29sZS5sb2coYEVycm9yOiAke2Jyb3dzZXIucnVudGltZS5sYXN0RXJyb3J9YCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXCJDb250ZXh0IG1lbnUgaXRlbSBjcmVhdGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb3B5VG9DbGlwYm9hcmQodGV4dCwgaHRtbCkge1xuICBmdW5jdGlvbiBvbmNvcHkoZXZlbnQpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29weVwiLCBvbmNvcHksIHRydWUpO1xuICAgIC8vIEhpZGUgdGhlIGV2ZW50IGZyb20gdGhlIHBhZ2UgdG8gcHJldmVudCB0YW1wZXJpbmcuXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBPdmVyd3JpdGUgdGhlIGNsaXBib2FyZCBjb250ZW50LlxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKFwidGV4dC9wbGFpblwiLCB0ZXh0KTtcbiAgICBldmVudC5jbGlwYm9hcmREYXRhLnNldERhdGEoXCJ0ZXh0L2h0bWxcIiwgaHRtbCk7XG4gIH1cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvcHlcIiwgb25jb3B5LCB0cnVlKTtcblxuICAvLyBSZXF1aXJlcyB0aGUgY2xpcGJvYXJkV3JpdGUgcGVybWlzc2lvbiwgb3IgYSB1c2VyIGdlc3R1cmU6XG4gIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbnRleHRNZW51cygpIHtcbiAgYnJvd3Nlci5jb250ZXh0TWVudXMuY3JlYXRlKHtcbiAgICBpZDogXCJ0ZXh0LXNlbGVjdGlvbi10by1jbGlwYm9hcmQtYXMtcXVvdGF0aW9uXCIsXG4gICAgdGl0bGU6IFwiQ29weSBzZWxlY3RlZCB0ZXh0IGFzIHF1b3RhdGlvblwiLFxuICAgIGNvbnRleHRzOiBbXCJzZWxlY3Rpb25cIl1cbiAgfSwgb25DcmVhdGVkKTtcblxuICBicm93c2VyLmNvbnRleHRNZW51cy5jcmVhdGUoe1xuICAgIGlkOiBcInBhZ2UtYWN0aW9uLXRvLWNsaXBib2FyZC1hcy1saW5rXCIsXG4gICAgdGl0bGU6IFwiQ29weSBsaW5rIHRvIHRoZSBjdXJyZW50IHBhZ2VcIixcbiAgICBjb250ZXh0czogW1wiYWxsXCIsIFwicGFnZV9hY3Rpb25cIl1cbiAgfSwgb25DcmVhdGVkKTtcblxuICBicm93c2VyLmNvbnRleHRNZW51cy5jcmVhdGUoe1xuICAgIGlkOiBcImxpbmstdG8tY2xpcGJvYXJkLWFzLWxpbmtcIixcbiAgICB0aXRsZTogXCJDb3B5IGxpbmtcIixcbiAgICBjb250ZXh0czogW1wibGlua1wiXVxuICB9LCBvbkNyZWF0ZWQpO1xuXG4gIGJyb3dzZXIuY29udGV4dE1lbnVzLm9uQ2xpY2tlZC5hZGRMaXN0ZW5lcihmdW5jdGlvbiAoaW5mbywgdGFiKSB7XG4gICAgbGV0IHRlbXBsYXRlXG4gICAgY29uc29sZS5kaXIoXCJpbmZvXCIsIGluZm8pXG4gICAgc3dpdGNoIChpbmZvLm1lbnVJdGVtSWQpIHtcbiAgICAgIGNhc2UgXCJ0ZXh0LXNlbGVjdGlvbi10by1jbGlwYm9hcmQtYXMtcXVvdGF0aW9uXCI6XG4gICAgICBsZXQgbGluZXMgPSBpbmZvLnNlbGVjdGlvblRleHQuc3BsaXQoYFxcbmApLm1hcChsID0+IGA+ICR7bH1gKS5qb2luKGBcXG5gKVxuICAgICAgdGVtcGxhdGUgPSBgJHtsaW5lc31cXG4+XFxuPiAmbWRhc2g7IF9Tb3VyY2U6IFske3RhYi50aXRsZX1dKCR7aW5mby5wYWdlVXJsfSlfYFxuICAgICAgY29weVRvQ2xpcGJvYXJkKHRlbXBsYXRlLCB0ZW1wbGF0ZSlcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInBhZ2UtYWN0aW9uLXRvLWNsaXBib2FyZC1hcy1saW5rXCI6XG4gICAgICB0ZW1wbGF0ZSA9IGBbJHt0YWIudGl0bGV9XSgke3RhYi51cmx9KWBcbiAgICAgIGNvcHlUb0NsaXBib2FyZCh0ZW1wbGF0ZSwgdGVtcGxhdGUpXG4gICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsaW5rLXRvLWNsaXBib2FyZC1hcy1saW5rXCI6XG4gICAgICB0ZW1wbGF0ZSA9IGBbJHtpbmZvLmxpbmtUZXh0fV0oJHtpbmZvLmxpbmtVcmx9KWBcbiAgICAgIGNvcHlUb0NsaXBib2FyZCh0ZW1wbGF0ZSwgdGVtcGxhdGUpXG4gICAgICBicmVhaztcbiAgICB9XG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbml0aWFsaXplQ29udGV4dE1lbnVzXG59XG4iLCJjb25zdCBicm93c2VyID0gcmVxdWlyZShcIndlYmV4dGVuc2lvbi1wb2x5ZmlsbFwiKTtcblxuY29uc3QgaW5pdGlhbGl6ZU9tbmlib3hGZWF0dXJlcyA9ICgpID0+IHtcbiAgYnJvd3Nlci5vbW5pYm94LnNldERlZmF1bHRTdWdnZXN0aW9uKHtcbiAgICBkZXNjcmlwdGlvbjogYFNlYXJjaCBTZWN1cmUgU2N1dHRsZWJ1dHRgXG4gIH0pO1xuXG4gIGJyb3dzZXIub21uaWJveC5vbklucHV0RW50ZXJlZC5hZGRMaXN0ZW5lcigodGV4dCwgZGlzcG9zaXRpb24pID0+IHtcbiAgICBsZXQgcXVlcnkgPSBlbmNvZGVVUklDb21wb25lbnQodGV4dCk7XG4gICAgbGV0IHVybCA9IGAvaW5kZXguaHRtbD9xdWVyeT0ke3F1ZXJ5fSZwa2c9c2VhcmNoYDtcblxuICAgIHN3aXRjaCAoZGlzcG9zaXRpb24pIHtcbiAgICAgIGNhc2UgXCJjdXJyZW50VGFiXCI6XG4gICAgICBicm93c2VyLnRhYnMudXBkYXRlKHsgdXJsIH0pO1xuICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibmV3Rm9yZWdyb3VuZFRhYlwiOlxuICAgICAgYnJvd3Nlci50YWJzLmNyZWF0ZSh7IHVybCB9KTtcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm5ld0JhY2tncm91bmRUYWJcIjpcbiAgICAgIGJyb3dzZXIudGFicy5jcmVhdGUoeyB1cmwsIGFjdGl2ZTogZmFsc2UgfSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW5pdGlhbGl6ZU9tbmlib3hGZWF0dXJlc1xufVxuIiwiY29uc3QgYnJvd3NlciA9IHJlcXVpcmUoXCJ3ZWJleHRlbnNpb24tcG9seWZpbGxcIik7XG5cbmNvbnN0IHVwZGF0ZUNoZWNrZXIgPSAoKSA9PiB7XG4gIGZ1bmN0aW9uIGluc3RhbGxlZE9yVXBkYXRlZChkZXRhaWxzKSB7XG4gICAgbGV0IHVybDtcbiAgICBsZXQgdmVyc2lvbiA9IGJyb3dzZXIucnVudGltZS5nZXRNYW5pZmVzdCgpLnZlcnNpb247XG4gICAgbGV0IHByZXZpb3VzVmVyc2lvbiA9IGRldGFpbHMucHJldmlvdXNWZXJzaW9uO1xuICAgIHN3aXRjaCAoZGV0YWlscy5yZWFzb24pIHtcbiAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcbiAgICAgIGlmICh2ZXJzaW9uICE9PSBwcmV2aW91c1ZlcnNpb24pIHtcbiAgICAgICAgdXJsID0gYnJvd3Nlci5leHRlbnNpb24uZ2V0VVJMKGAvZG9jcy9pbmRleC5odG1sIy9yZWxlYXNlX25vdGVzLyR7dmVyc2lvbn1gKTtcbiAgICAgICAgYnJvd3Nlci50YWJzLmNyZWF0ZSh7XG4gICAgICAgICAgdXJsOiBgJHt1cmx9YFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImluc3RhbGxcIjpcbiAgICAgIHVybCA9IGJyb3dzZXIuZXh0ZW5zaW9uLmdldFVSTChcIi9kb2NzL2luZGV4Lmh0bWwjL2d1aWRlXCIpO1xuICAgICAgYnJvd3Nlci50YWJzLmNyZWF0ZSh7XG4gICAgICAgIHVybDogYCR7dXJsfWBcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgYnJvd3Nlci5ydW50aW1lLm9uSW5zdGFsbGVkLmFkZExpc3RlbmVyKGluc3RhbGxlZE9yVXBkYXRlZClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVwZGF0ZUNoZWNrZXJcbn1cbiJdfQ== +},{"webextension-polyfill":1}]},{},[2]); diff --git a/dist/browserAction.js b/dist/browserAction.js index 411096ba..626ce267 100644 --- a/dist/browserAction.js +++ b/dist/browserAction.js @@ -131,5 +131,4 @@ keymage("f", goProfile); const version = browser.runtime.getManifest().version; document.getElementById("patchfox-header").innerText = `Patchfox ${version}`; -},{}]},{},[1]) -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvY29yZS9icm93c2VyQWN0aW9uL2Jyb3dzZXJBY3Rpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJcbmZ1bmN0aW9uIGdvUHVibGljKCkge1xuICBicm93c2VyLnRhYnMuY3JlYXRlKHtcbiAgICB1cmw6IFwiL2luZGV4Lmh0bWw/cGtnPWh1YlwiXG4gIH0pO1xuICB3aW5kb3cuY2xvc2UoKTtcbn1cblxuZnVuY3Rpb24gZ29Qb3B1bGFyKCkge1xuICBicm93c2VyLnRhYnMuY3JlYXRlKHtcbiAgICB1cmw6IFwiL2luZGV4Lmh0bWw/cGtnPWh1YiZ2aWV3PXBvcHVsYXJcIlxuICB9KTtcbiAgd2luZG93LmNsb3NlKCk7XG59XG5cbmZ1bmN0aW9uIGdvQ29tcG9zZSgpIHtcbiAgYnJvd3Nlci50YWJzLmNyZWF0ZSh7XG4gICAgdXJsOiBcIi9pbmRleC5odG1sP3BrZz1wb3N0JnZpZXc9Y29tcG9zZVwiXG4gIH0pO1xuICB3aW5kb3cuY2xvc2UoKTtcbn1cblxuZnVuY3Rpb24gZ29Qcm9maWxlKCkge1xuICBicm93c2VyLnRhYnMuY3JlYXRlKHtcbiAgICB1cmw6IFwiL2luZGV4Lmh0bWw/cGtnPWNvbnRhY3RzJnZpZXc9cHJvZmlsZVwiXG4gIH0pO1xuICB3aW5kb3cuY2xvc2UoKTtcbn1cblxuXG5mdW5jdGlvbiBnb01lbnRpb25zKCkge1xuICBicm93c2VyLnRhYnMuY3JlYXRlKHtcbiAgICB1cmw6IFwiL2luZGV4Lmh0bWw/cGtnPWh1YiZ2aWV3PW1lbnRpb25zXCJcbiAgfSk7XG4gIHdpbmRvdy5jbG9zZSgpO1xufVxuXG5cbmZ1bmN0aW9uIGdvQ2hhbm5lbHMoKSB7XG4gIGJyb3dzZXIudGFicy5jcmVhdGUoe1xuICAgIHVybDogXCIvaW5kZXguaHRtbD9wa2c9aHViJnZpZXc9Y2hhbm5lbHNcIlxuICB9KTtcbiAgd2luZG93LmNsb3NlKCk7XG59XG5cbmZ1bmN0aW9uIGdvU2V0dGluZ3MoKSB7XG4gIGJyb3dzZXIucnVudGltZS5vcGVuT3B0aW9uc1BhZ2UoKTtcbiAgd2luZG93LmNsb3NlKCk7XG59XG5cbmZ1bmN0aW9uIGdvSGVscCgpIHtcbiAgY29uc3QgdXJsID0gYnJvd3Nlci5leHRlbnNpb24uZ2V0VVJMKFwiZG9jcy9pbmRleC5odG1sXCIpO1xuICBicm93c2VyLnRhYnMuY3JlYXRlKHtcbiAgICB1cmw6IGAke3VybH0jLz9pZD1yZWFkbWVgXG4gIH0pO1xuICB3aW5kb3cuY2xvc2UoKTtcbn1cblxuXG5mdW5jdGlvbiBnb1JlbGVhc2VOb3RlcygpIHtcbiAgY29uc3QgdmVyc2lvbiA9IGJyb3dzZXIucnVudGltZS5nZXRNYW5pZmVzdCgpLnZlcnNpb247XG4gIGNvbnN0IHVybCA9IGJyb3dzZXIuZXh0ZW5zaW9uLmdldFVSTChgL2RvY3MvaW5kZXguaHRtbCMvcmVsZWFzZV9ub3Rlcy8ke3ZlcnNpb259YCk7XG4gIGJyb3dzZXIudGFicy5jcmVhdGUoe1xuICAgIHVybDogYCR7dXJsfSMvP2lkPXJlYWRtZWBcbiAgfSk7XG4gIHdpbmRvdy5jbG9zZSgpO1xufVxuXG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm9wdGlvbnMtdHJpZ2dlclwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2KSA9PiB7XG4gIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICBnb1NldHRpbmdzKCk7XG59KTtcblxuXG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvLXRvLXB1YmxpY1wiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2KSA9PiB7XG4gIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICBnb1B1YmxpYygpO1xufSk7XG5cbmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ28tdG8tcG9wdWxhclwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2KSA9PiB7XG4gIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICBnb1BvcHVsYXIoKTtcbn0pO1xuXG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvLXRvLXByb2ZpbGVcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldikgPT4ge1xuICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgZ29Qcm9maWxlKCk7XG59KTtcblxuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb21wb3NlXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXYpID0+IHtcbiAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gIGdvQ29tcG9zZSgpO1xufSk7XG5cblxuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnby10by1oZWxwXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXYpID0+IHtcbiAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gIGdvSGVscCgpO1xufSk7XG5cblxuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnby10by1yZWxlYXNlLW5vdGVzXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXYpID0+IHtcbiAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gIGdvUmVsZWFzZU5vdGVzKCk7XG59KTtcblxuXG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvLXRvLW1lbnRpb25zXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXYpID0+IHtcbiAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gIGdvTWVudGlvbnMoKTtcbn0pO1xuXG5rZXltYWdlKFwicFwiLCBnb1B1YmxpYyk7XG5rZXltYWdlKFwib1wiLCBnb1BvcHVsYXIpO1xua2V5bWFnZShcInNcIiwgZ29TZXR0aW5ncyk7XG5rZXltYWdlKFwiY1wiLCBnb0NvbXBvc2UpO1xua2V5bWFnZShcIm5cIiwgZ29DaGFubmVscyk7XG5rZXltYWdlKFwibVwiLCBnb01lbnRpb25zKTtcbmtleW1hZ2UoXCJmXCIsIGdvUHJvZmlsZSk7XG5cblxuY29uc3QgdmVyc2lvbiA9IGJyb3dzZXIucnVudGltZS5nZXRNYW5pZmVzdCgpLnZlcnNpb247XG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBhdGNoZm94LWhlYWRlclwiKS5pbm5lclRleHQgPSBgUGF0Y2hmb3ggJHt2ZXJzaW9ufWA7XG4iXX0= +},{}]},{},[1]); diff --git a/dist/bundle.js b/dist/bundle.js index 06b67564..7805449e 100644 --- a/dist/bundle.js +++ b/dist/bundle.js @@ -5769,7 +5769,6 @@ var objectKeys = Object.keys || function (obj) { }; }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - },{"object-assign":375,"util/":19}],17:[function(require,module,exports){ if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module @@ -6392,7 +6391,6 @@ function hasOwnProperty(obj, prop) { } }).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - },{"./support/isBuffer":18,"_process":390,"inherits":17}],20:[function(require,module,exports){ (function (global){(function (){ 'use strict'; @@ -6422,7 +6420,6 @@ module.exports = function availableTypedArrays() { }; }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - },{}],21:[function(require,module,exports){ 'use strict' @@ -11306,7 +11303,6 @@ exports.encrypt = function (self, chunk) { } }).call(this)}).call(this,require("buffer").Buffer) - },{"buffer":69,"buffer-xor":68}],41:[function(require,module,exports){ var aes = require('./aes') var Buffer = require('safe-buffer').Buffer @@ -11522,7 +11518,6 @@ crt.getr = getr module.exports = crt }).call(this)}).call(this,require("buffer").Buffer) - },{"bn.js":22,"buffer":69,"randombytes":451}],46:[function(require,module,exports){ module.exports = require('./browser/algorithms.json') @@ -12286,7 +12281,6 @@ Object.defineProperty(Duplex.prototype, 'destroyed', { } }); }).call(this)}).call(this,require('_process')) - },{"./_stream_readable":55,"./_stream_writable":57,"_process":390,"inherits":193}],54:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // @@ -13454,7 +13448,6 @@ function indexOf(xs, x) { return -1; } }).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - },{"../errors":52,"./_stream_duplex":53,"./internal/streams/async_iterator":58,"./internal/streams/buffer_list":59,"./internal/streams/destroy":60,"./internal/streams/from":62,"./internal/streams/state":64,"./internal/streams/stream":65,"_process":390,"buffer":69,"events":129,"inherits":193,"string_decoder/":571,"util":24}],56:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // @@ -14357,7 +14350,6 @@ Writable.prototype._destroy = function (err, cb) { cb(err); }; }).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - },{"../errors":52,"./_stream_duplex":53,"./internal/streams/destroy":60,"./internal/streams/state":64,"./internal/streams/stream":65,"_process":390,"buffer":69,"inherits":193,"util-deprecate":588}],58:[function(require,module,exports){ (function (process){(function (){ 'use strict'; @@ -14568,7 +14560,6 @@ var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterat module.exports = createReadableStreamAsyncIterator; }).call(this)}).call(this,require('_process')) - },{"./end-of-stream":61,"_process":390}],59:[function(require,module,exports){ 'use strict'; @@ -14888,7 +14879,6 @@ module.exports = { errorOrDestroy: errorOrDestroy }; }).call(this)}).call(this,require('_process')) - },{"_process":390}],61:[function(require,module,exports){ // Ported from https://github.com/mafintosh/end-of-stream with // permission from the author, Mathias Buus (@mafintosh). @@ -15155,7 +15145,6 @@ module.exports = function xor (a, b) { } }).call(this)}).call(this,require("buffer").Buffer) - },{"buffer":69}],69:[function(require,module,exports){ (function (Buffer){(function (){ /*! @@ -16937,7 +16926,6 @@ function numberIsNaN (obj) { } }).call(this)}).call(this,require("buffer").Buffer) - },{"base64-js":21,"buffer":69,"ieee754":192}],70:[function(require,module,exports){ module.exports = { "100": "Continue", @@ -17303,7 +17291,6 @@ function formatReturnValue (bn, enc, len) { } }).call(this)}).call(this,require("buffer").Buffer) - },{"bn.js":76,"buffer":69,"elliptic":103}],76:[function(require,module,exports){ arguments[4][15][0].apply(exports,arguments) },{"buffer":24,"dup":15}],77:[function(require,module,exports){ @@ -17936,7 +17923,6 @@ function arrayToObject(array) { }); return out; } - },{"libnested":208}],90:[function(require,module,exports){ 'use strict'; @@ -18660,7 +18646,6 @@ exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffi exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman }).call(this)}).call(this,require("buffer").Buffer) - },{"./lib/dh":97,"./lib/generatePrime":98,"./lib/primes.json":99,"buffer":69}],97:[function(require,module,exports){ (function (Buffer){(function (){ var BN = require('bn.js'); @@ -18829,7 +18814,6 @@ function formatReturnValue(bn, enc) { } }).call(this)}).call(this,require("buffer").Buffer) - },{"./generatePrime":98,"bn.js":100,"buffer":69,"miller-rabin":361,"randombytes":451}],98:[function(require,module,exports){ var randomBytes = require('randombytes'); module.exports = findPrime; @@ -24787,16114 +24771,6652 @@ module.exports = HashBase },{"inherits":193,"readable-stream":157,"safe-buffer":459}],143:[function(require,module,exports){ arguments[4][52][0].apply(exports,arguments) },{"dup":52}],144:[function(require,module,exports){ -(function (process){(function (){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. -'use strict'; -/**/ +arguments[4][53][0].apply(exports,arguments) +},{"./_stream_readable":146,"./_stream_writable":148,"_process":390,"dup":53,"inherits":193}],145:[function(require,module,exports){ +arguments[4][54][0].apply(exports,arguments) +},{"./_stream_transform":147,"dup":54,"inherits":193}],146:[function(require,module,exports){ +arguments[4][55][0].apply(exports,arguments) +},{"../errors":143,"./_stream_duplex":144,"./internal/streams/async_iterator":149,"./internal/streams/buffer_list":150,"./internal/streams/destroy":151,"./internal/streams/from":153,"./internal/streams/state":155,"./internal/streams/stream":156,"_process":390,"buffer":69,"dup":55,"events":129,"inherits":193,"string_decoder/":571,"util":24}],147:[function(require,module,exports){ +arguments[4][56][0].apply(exports,arguments) +},{"../errors":143,"./_stream_duplex":144,"dup":56,"inherits":193}],148:[function(require,module,exports){ +arguments[4][57][0].apply(exports,arguments) +},{"../errors":143,"./_stream_duplex":144,"./internal/streams/destroy":151,"./internal/streams/state":155,"./internal/streams/stream":156,"_process":390,"buffer":69,"dup":57,"inherits":193,"util-deprecate":588}],149:[function(require,module,exports){ +arguments[4][58][0].apply(exports,arguments) +},{"./end-of-stream":152,"_process":390,"dup":58}],150:[function(require,module,exports){ +arguments[4][59][0].apply(exports,arguments) +},{"buffer":69,"dup":59,"util":24}],151:[function(require,module,exports){ +arguments[4][60][0].apply(exports,arguments) +},{"_process":390,"dup":60}],152:[function(require,module,exports){ +arguments[4][61][0].apply(exports,arguments) +},{"../../../errors":143,"dup":61}],153:[function(require,module,exports){ +arguments[4][62][0].apply(exports,arguments) +},{"dup":62}],154:[function(require,module,exports){ +arguments[4][63][0].apply(exports,arguments) +},{"../../../errors":143,"./end-of-stream":152,"dup":63}],155:[function(require,module,exports){ +arguments[4][64][0].apply(exports,arguments) +},{"../../../errors":143,"dup":64}],156:[function(require,module,exports){ +arguments[4][65][0].apply(exports,arguments) +},{"dup":65,"events":129}],157:[function(require,module,exports){ +arguments[4][66][0].apply(exports,arguments) +},{"./lib/_stream_duplex.js":144,"./lib/_stream_passthrough.js":145,"./lib/_stream_readable.js":146,"./lib/_stream_transform.js":147,"./lib/_stream_writable.js":148,"./lib/internal/streams/end-of-stream.js":152,"./lib/internal/streams/pipeline.js":154,"dup":66}],158:[function(require,module,exports){ +var hash = exports; -var objectKeys = Object.keys || function (obj) { - var keys = []; +hash.utils = require('./hash/utils'); +hash.common = require('./hash/common'); +hash.sha = require('./hash/sha'); +hash.ripemd = require('./hash/ripemd'); +hash.hmac = require('./hash/hmac'); - for (var key in obj) { - keys.push(key); - } +// Proxy hash functions to the main object +hash.sha1 = hash.sha.sha1; +hash.sha256 = hash.sha.sha256; +hash.sha224 = hash.sha.sha224; +hash.sha384 = hash.sha.sha384; +hash.sha512 = hash.sha.sha512; +hash.ripemd160 = hash.ripemd.ripemd160; - return keys; -}; -/**/ +},{"./hash/common":159,"./hash/hmac":160,"./hash/ripemd":161,"./hash/sha":162,"./hash/utils":169}],159:[function(require,module,exports){ +'use strict'; +var utils = require('./utils'); +var assert = require('minimalistic-assert'); -module.exports = Duplex; +function BlockHash() { + this.pending = null; + this.pendingTotal = 0; + this.blockSize = this.constructor.blockSize; + this.outSize = this.constructor.outSize; + this.hmacStrength = this.constructor.hmacStrength; + this.padLength = this.constructor.padLength / 8; + this.endian = 'big'; -var Readable = require('./_stream_readable'); + this._delta8 = this.blockSize / 8; + this._delta32 = this.blockSize / 32; +} +exports.BlockHash = BlockHash; -var Writable = require('./_stream_writable'); +BlockHash.prototype.update = function update(msg, enc) { + // Convert message to array, pad it, and join into 32bit blocks + msg = utils.toArray(msg, enc); + if (!this.pending) + this.pending = msg; + else + this.pending = this.pending.concat(msg); + this.pendingTotal += msg.length; -require('inherits')(Duplex, Readable); + // Enough data, try updating + if (this.pending.length >= this._delta8) { + msg = this.pending; -{ - // Allow the keys array to be GC'ed. - var keys = objectKeys(Writable.prototype); + // Process pending data in blocks + var r = msg.length % this._delta8; + this.pending = msg.slice(msg.length - r, msg.length); + if (this.pending.length === 0) + this.pending = null; - for (var v = 0; v < keys.length; v++) { - var method = keys[v]; - if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + msg = utils.join32(msg, 0, msg.length - r, this.endian); + for (var i = 0; i < msg.length; i += this._delta32) + this._update(msg, i, i + this._delta32); } -} -function Duplex(options) { - if (!(this instanceof Duplex)) return new Duplex(options); - Readable.call(this, options); - Writable.call(this, options); - this.allowHalfOpen = true; + return this; +}; - if (options) { - if (options.readable === false) this.readable = false; - if (options.writable === false) this.writable = false; +BlockHash.prototype.digest = function digest(enc) { + this.update(this._pad()); + assert(this.pending === null); - if (options.allowHalfOpen === false) { - this.allowHalfOpen = false; - this.once('end', onend); - } - } -} + return this._digest(enc); +}; -Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.highWaterMark; - } -}); -Object.defineProperty(Duplex.prototype, 'writableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState && this._writableState.getBuffer(); - } -}); -Object.defineProperty(Duplex.prototype, 'writableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.length; - } -}); // the no-half-open enforcer +BlockHash.prototype._pad = function pad() { + var len = this.pendingTotal; + var bytes = this._delta8; + var k = bytes - ((len + this.padLength) % bytes); + var res = new Array(k + this.padLength); + res[0] = 0x80; + for (var i = 1; i < k; i++) + res[i] = 0; -function onend() { - // If the writable side ended, then we're ok. - if (this._writableState.ended) return; // no more data can be written. - // But allow more writes to happen in this tick. + // Append length + len <<= 3; + if (this.endian === 'big') { + for (var t = 8; t < this.padLength; t++) + res[i++] = 0; - process.nextTick(onEndNT, this); -} + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = (len >>> 24) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = len & 0xff; + } else { + res[i++] = len & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 24) & 0xff; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; -function onEndNT(self) { - self.end(); -} + for (t = 8; t < this.padLength; t++) + res[i++] = 0; + } -Object.defineProperty(Duplex.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._readableState === undefined || this._writableState === undefined) { - return false; - } + return res; +}; - return this._readableState.destroyed && this._writableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (this._readableState === undefined || this._writableState === undefined) { - return; - } // backward compatibility, the user is explicitly - // managing destroyed +},{"./utils":169,"minimalistic-assert":363}],160:[function(require,module,exports){ +'use strict'; +var utils = require('./utils'); +var assert = require('minimalistic-assert'); - this._readableState.destroyed = value; - this._writableState.destroyed = value; - } -}); -}).call(this)}).call(this,require('_process')) +function Hmac(hash, key, enc) { + if (!(this instanceof Hmac)) + return new Hmac(hash, key, enc); + this.Hash = hash; + this.blockSize = hash.blockSize / 8; + this.outSize = hash.outSize / 8; + this.inner = null; + this.outer = null; -},{"./_stream_readable":146,"./_stream_writable":148,"_process":390,"inherits":193}],145:[function(require,module,exports){ -arguments[4][54][0].apply(exports,arguments) -},{"./_stream_transform":147,"dup":54,"inherits":193}],146:[function(require,module,exports){ -(function (process,global){(function (){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -'use strict'; + this._init(utils.toArray(key, enc)); +} +module.exports = Hmac; -module.exports = Readable; -/**/ +Hmac.prototype._init = function init(key) { + // Shorten key, if needed + if (key.length > this.blockSize) + key = new this.Hash().update(key).digest(); + assert(key.length <= this.blockSize); -var Duplex; -/**/ + // Add padding to key + for (var i = key.length; i < this.blockSize; i++) + key.push(0); -Readable.ReadableState = ReadableState; -/**/ + for (i = 0; i < key.length; i++) + key[i] ^= 0x36; + this.inner = new this.Hash().update(key); -var EE = require('events').EventEmitter; + // 0x36 ^ 0x5c = 0x6a + for (i = 0; i < key.length; i++) + key[i] ^= 0x6a; + this.outer = new this.Hash().update(key); +}; -var EElistenerCount = function EElistenerCount(emitter, type) { - return emitter.listeners(type).length; +Hmac.prototype.update = function update(msg, enc) { + this.inner.update(msg, enc); + return this; }; -/**/ -/**/ +Hmac.prototype.digest = function digest(enc) { + this.outer.update(this.inner.digest()); + return this.outer.digest(enc); +}; +},{"./utils":169,"minimalistic-assert":363}],161:[function(require,module,exports){ +'use strict'; -var Stream = require('./internal/streams/stream'); -/**/ +var utils = require('./utils'); +var common = require('./common'); +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_3 = utils.sum32_3; +var sum32_4 = utils.sum32_4; +var BlockHash = common.BlockHash; -var Buffer = require('buffer').Buffer; +function RIPEMD160() { + if (!(this instanceof RIPEMD160)) + return new RIPEMD160(); -var OurUint8Array = global.Uint8Array || function () {}; + BlockHash.call(this); -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); + this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; + this.endian = 'little'; } +utils.inherits(RIPEMD160, BlockHash); +exports.ripemd160 = RIPEMD160; -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} -/**/ +RIPEMD160.blockSize = 512; +RIPEMD160.outSize = 160; +RIPEMD160.hmacStrength = 192; +RIPEMD160.padLength = 64; +RIPEMD160.prototype._update = function update(msg, start) { + var A = this.h[0]; + var B = this.h[1]; + var C = this.h[2]; + var D = this.h[3]; + var E = this.h[4]; + var Ah = A; + var Bh = B; + var Ch = C; + var Dh = D; + var Eh = E; + for (var j = 0; j < 80; j++) { + var T = sum32( + rotl32( + sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), + s[j]), + E); + A = E; + E = D; + D = rotl32(C, 10); + C = B; + B = T; + T = sum32( + rotl32( + sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), + sh[j]), + Eh); + Ah = Eh; + Eh = Dh; + Dh = rotl32(Ch, 10); + Ch = Bh; + Bh = T; + } + T = sum32_3(this.h[1], C, Dh); + this.h[1] = sum32_3(this.h[2], D, Eh); + this.h[2] = sum32_3(this.h[3], E, Ah); + this.h[3] = sum32_3(this.h[4], A, Bh); + this.h[4] = sum32_3(this.h[0], B, Ch); + this.h[0] = T; +}; -var debugUtil = require('util'); +RIPEMD160.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'little'); + else + return utils.split32(this.h, 'little'); +}; -var debug; +function f(j, x, y, z) { + if (j <= 15) + return x ^ y ^ z; + else if (j <= 31) + return (x & y) | ((~x) & z); + else if (j <= 47) + return (x | (~y)) ^ z; + else if (j <= 63) + return (x & z) | (y & (~z)); + else + return x ^ (y | (~z)); +} -if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog('stream'); -} else { - debug = function debug() {}; +function K(j) { + if (j <= 15) + return 0x00000000; + else if (j <= 31) + return 0x5a827999; + else if (j <= 47) + return 0x6ed9eba1; + else if (j <= 63) + return 0x8f1bbcdc; + else + return 0xa953fd4e; } -/**/ +function Kh(j) { + if (j <= 15) + return 0x50a28be6; + else if (j <= 31) + return 0x5c4dd124; + else if (j <= 47) + return 0x6d703ef3; + else if (j <= 63) + return 0x7a6d76e9; + else + return 0x00000000; +} -var BufferList = require('./internal/streams/buffer_list'); +var r = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 +]; -var destroyImpl = require('./internal/streams/destroy'); +var rh = [ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 +]; -var _require = require('./internal/streams/state'), - getHighWaterMark = _require.getHighWaterMark; +var s = [ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 +]; -var _require$codes = require('../errors').codes, - ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, - ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance. +var sh = [ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 +]; +},{"./common":159,"./utils":169}],162:[function(require,module,exports){ +'use strict'; -var StringDecoder; -var createReadableStreamAsyncIterator; -var from; +exports.sha1 = require('./sha/1'); +exports.sha224 = require('./sha/224'); +exports.sha256 = require('./sha/256'); +exports.sha384 = require('./sha/384'); +exports.sha512 = require('./sha/512'); -require('inherits')(Readable, Stream); +},{"./sha/1":163,"./sha/224":164,"./sha/256":165,"./sha/384":166,"./sha/512":167}],163:[function(require,module,exports){ +'use strict'; -var errorOrDestroy = destroyImpl.errorOrDestroy; -var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); -function prependListener(emitter, event, fn) { - // Sadly this is not cacheable as some libraries bundle their own - // event emitter implementation with them. - if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any - // userland ones. NEVER DO THIS. This is here only because this code needs - // to continue to work with older versions of Node.js that do not include - // the prependListener() method. The goal is to eventually remove this hack. +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_5 = utils.sum32_5; +var ft_1 = shaCommon.ft_1; +var BlockHash = common.BlockHash; - if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; -} +var sha1_K = [ + 0x5A827999, 0x6ED9EBA1, + 0x8F1BBCDC, 0xCA62C1D6 +]; -function ReadableState(options, stream, isDuplex) { - Duplex = Duplex || require('./_stream_duplex'); - options = options || {}; // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. +function SHA1() { + if (!(this instanceof SHA1)) + return new SHA1(); - if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away + BlockHash.call(this); + this.h = [ + 0x67452301, 0xefcdab89, 0x98badcfe, + 0x10325476, 0xc3d2e1f0 ]; + this.W = new Array(80); +} - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" +utils.inherits(SHA1, BlockHash); +module.exports = SHA1; - this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the - // linked list can remove elements from the beginning faster than - // array.shift() +SHA1.blockSize = 512; +SHA1.outSize = 160; +SHA1.hmacStrength = 80; +SHA1.padLength = 64; - this.buffer = new BufferList(); - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted - // immediately, or on a later tick. We set this to true at first, because - // any actions that shouldn't happen until "later" should generally also - // not happen before the first read call. +SHA1.prototype._update = function _update(msg, start) { + var W = this.W; - this.sync = true; // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. + for (var i = 0; i < 16; i++) + W[i] = msg[start + i]; - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; - this.paused = true; // Should close be emitted on destroy. Defaults to true. + for(; i < W.length; i++) + W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); - this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish') + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; - this.autoDestroy = !!options.autoDestroy; // has it been destroyed + for (i = 0; i < W.length; i++) { + var s = ~~(i / 20); + var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); + e = d; + d = c; + c = rotl32(b, 30); + b = a; + a = t; + } - this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); +}; - this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s +SHA1.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; - this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled +},{"../common":159,"../utils":169,"./common":168}],164:[function(require,module,exports){ +'use strict'; - this.readingMore = false; - this.decoder = null; - this.encoding = null; +var utils = require('../utils'); +var SHA256 = require('./256'); - if (options.encoding) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } +function SHA224() { + if (!(this instanceof SHA224)) + return new SHA224(); + + SHA256.call(this); + this.h = [ + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; } +utils.inherits(SHA224, SHA256); +module.exports = SHA224; -function Readable(options) { - Duplex = Duplex || require('./_stream_duplex'); - if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside - // the ReadableState constructor, at least with V8 6.5 +SHA224.blockSize = 512; +SHA224.outSize = 224; +SHA224.hmacStrength = 192; +SHA224.padLength = 64; - var isDuplex = this instanceof Duplex; - this._readableState = new ReadableState(options, this, isDuplex); // legacy +SHA224.prototype._digest = function digest(enc) { + // Just truncate output + if (enc === 'hex') + return utils.toHex32(this.h.slice(0, 7), 'big'); + else + return utils.split32(this.h.slice(0, 7), 'big'); +}; - this.readable = true; - if (options) { - if (typeof options.read === 'function') this._read = options.read; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - } +},{"../utils":169,"./256":165}],165:[function(require,module,exports){ +'use strict'; - Stream.call(this); -} +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); +var assert = require('minimalistic-assert'); -Object.defineProperty(Readable.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._readableState === undefined) { - return false; - } +var sum32 = utils.sum32; +var sum32_4 = utils.sum32_4; +var sum32_5 = utils.sum32_5; +var ch32 = shaCommon.ch32; +var maj32 = shaCommon.maj32; +var s0_256 = shaCommon.s0_256; +var s1_256 = shaCommon.s1_256; +var g0_256 = shaCommon.g0_256; +var g1_256 = shaCommon.g1_256; - return this._readableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._readableState) { - return; - } // backward compatibility, the user is explicitly - // managing destroyed +var BlockHash = common.BlockHash; +var sha256_K = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +]; - this._readableState.destroyed = value; - } -}); -Readable.prototype.destroy = destroyImpl.destroy; -Readable.prototype._undestroy = destroyImpl.undestroy; +function SHA256() { + if (!(this instanceof SHA256)) + return new SHA256(); -Readable.prototype._destroy = function (err, cb) { - cb(err); -}; // Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. + BlockHash.call(this); + this.h = [ + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ]; + this.k = sha256_K; + this.W = new Array(64); +} +utils.inherits(SHA256, BlockHash); +module.exports = SHA256; +SHA256.blockSize = 512; +SHA256.outSize = 256; +SHA256.hmacStrength = 192; +SHA256.padLength = 64; -Readable.prototype.push = function (chunk, encoding) { - var state = this._readableState; - var skipChunkCheck; +SHA256.prototype._update = function _update(msg, start) { + var W = this.W; - if (!state.objectMode) { - if (typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; + for (var i = 0; i < 16; i++) + W[i] = msg[start + i]; + for (; i < W.length; i++) + W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); - if (encoding !== state.encoding) { - chunk = Buffer.from(chunk, encoding); - encoding = ''; - } + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + var f = this.h[5]; + var g = this.h[6]; + var h = this.h[7]; - skipChunkCheck = true; - } - } else { - skipChunkCheck = true; + assert(this.k.length === W.length); + for (i = 0; i < W.length; i++) { + var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); + var T2 = sum32(s0_256(a), maj32(a, b, c)); + h = g; + g = f; + f = e; + e = sum32(d, T1); + d = c; + c = b; + b = a; + a = sum32(T1, T2); } - return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); -}; // Unshift should *always* be something directly out of read() - + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); + this.h[5] = sum32(this.h[5], f); + this.h[6] = sum32(this.h[6], g); + this.h[7] = sum32(this.h[7], h); +}; -Readable.prototype.unshift = function (chunk) { - return readableAddChunk(this, chunk, null, true, false); +SHA256.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); }; -function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { - debug('readableAddChunk', chunk); - var state = stream._readableState; +},{"../common":159,"../utils":169,"./common":168,"minimalistic-assert":363}],166:[function(require,module,exports){ +'use strict'; - if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else { - var er; - if (!skipChunkCheck) er = chunkInvalid(state, chunk); +var utils = require('../utils'); - if (er) { - errorOrDestroy(stream, er); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { - chunk = _uint8ArrayToBuffer(chunk); - } +var SHA512 = require('./512'); - if (addToFront) { - if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true); - } else if (state.ended) { - errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); - } else if (state.destroyed) { - return false; - } else { - state.reading = false; +function SHA384() { + if (!(this instanceof SHA384)) + return new SHA384(); - if (state.decoder && !encoding) { - chunk = state.decoder.write(chunk); - if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); - } else { - addChunk(stream, state, chunk, false); - } - } - } else if (!addToFront) { - state.reading = false; - maybeReadMore(stream, state); - } - } // We can push more data if we are below the highWaterMark. - // Also, if we have no data yet, we can stand some more bytes. - // This is to work around cases where hwm=0, such as the repl. + SHA512.call(this); + this.h = [ + 0xcbbb9d5d, 0xc1059ed8, + 0x629a292a, 0x367cd507, + 0x9159015a, 0x3070dd17, + 0x152fecd8, 0xf70e5939, + 0x67332667, 0xffc00b31, + 0x8eb44a87, 0x68581511, + 0xdb0c2e0d, 0x64f98fa7, + 0x47b5481d, 0xbefa4fa4 ]; +} +utils.inherits(SHA384, SHA512); +module.exports = SHA384; +SHA384.blockSize = 1024; +SHA384.outSize = 384; +SHA384.hmacStrength = 192; +SHA384.padLength = 128; - return !state.ended && (state.length < state.highWaterMark || state.length === 0); -} +SHA384.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h.slice(0, 12), 'big'); + else + return utils.split32(this.h.slice(0, 12), 'big'); +}; -function addChunk(stream, state, chunk, addToFront) { - if (state.flowing && state.length === 0 && !state.sync) { - state.awaitDrain = 0; - stream.emit('data', chunk); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - if (state.needReadable) emitReadable(stream); - } +},{"../utils":169,"./512":167}],167:[function(require,module,exports){ +'use strict'; - maybeReadMore(stream, state); -} +var utils = require('../utils'); +var common = require('../common'); +var assert = require('minimalistic-assert'); -function chunkInvalid(state, chunk) { - var er; +var rotr64_hi = utils.rotr64_hi; +var rotr64_lo = utils.rotr64_lo; +var shr64_hi = utils.shr64_hi; +var shr64_lo = utils.shr64_lo; +var sum64 = utils.sum64; +var sum64_hi = utils.sum64_hi; +var sum64_lo = utils.sum64_lo; +var sum64_4_hi = utils.sum64_4_hi; +var sum64_4_lo = utils.sum64_4_lo; +var sum64_5_hi = utils.sum64_5_hi; +var sum64_5_lo = utils.sum64_5_lo; - if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk); - } +var BlockHash = common.BlockHash; - return er; -} +var sha512_K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; // backwards compatibility. +function SHA512() { + if (!(this instanceof SHA512)) + return new SHA512(); + BlockHash.call(this); + this.h = [ + 0x6a09e667, 0xf3bcc908, + 0xbb67ae85, 0x84caa73b, + 0x3c6ef372, 0xfe94f82b, + 0xa54ff53a, 0x5f1d36f1, + 0x510e527f, 0xade682d1, + 0x9b05688c, 0x2b3e6c1f, + 0x1f83d9ab, 0xfb41bd6b, + 0x5be0cd19, 0x137e2179 ]; + this.k = sha512_K; + this.W = new Array(160); +} +utils.inherits(SHA512, BlockHash); +module.exports = SHA512; -Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - var decoder = new StringDecoder(enc); - this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8 +SHA512.blockSize = 1024; +SHA512.outSize = 512; +SHA512.hmacStrength = 192; +SHA512.padLength = 128; - this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers: +SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { + var W = this.W; - var p = this._readableState.buffer.head; - var content = ''; + // 32 x 32bit words + for (var i = 0; i < 32; i++) + W[i] = msg[start + i]; + for (; i < W.length; i += 2) { + var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 + var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); + var c1_hi = W[i - 14]; // i - 7 + var c1_lo = W[i - 13]; + var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 + var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); + var c3_hi = W[i - 32]; // i - 16 + var c3_lo = W[i - 31]; - while (p !== null) { - content += decoder.write(p.data); - p = p.next; + W[i] = sum64_4_hi( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo); + W[i + 1] = sum64_4_lo( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo); } +}; - this._readableState.buffer.clear(); +SHA512.prototype._update = function _update(msg, start) { + this._prepareBlock(msg, start); - if (content !== '') this._readableState.buffer.push(content); - this._readableState.length = content.length; - return this; -}; // Don't raise the hwm > 1GB + var W = this.W; + var ah = this.h[0]; + var al = this.h[1]; + var bh = this.h[2]; + var bl = this.h[3]; + var ch = this.h[4]; + var cl = this.h[5]; + var dh = this.h[6]; + var dl = this.h[7]; + var eh = this.h[8]; + var el = this.h[9]; + var fh = this.h[10]; + var fl = this.h[11]; + var gh = this.h[12]; + var gl = this.h[13]; + var hh = this.h[14]; + var hl = this.h[15]; -var MAX_HWM = 0x40000000; + assert(this.k.length === W.length); + for (var i = 0; i < W.length; i += 2) { + var c0_hi = hh; + var c0_lo = hl; + var c1_hi = s1_512_hi(eh, el); + var c1_lo = s1_512_lo(eh, el); + var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); + var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); + var c3_hi = this.k[i]; + var c3_lo = this.k[i + 1]; + var c4_hi = W[i]; + var c4_lo = W[i + 1]; -function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE. - n = MAX_HWM; - } else { - // Get the next highest power of 2 to prevent increasing hwm excessively in - // tiny amounts - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - - return n; -} // This function is designed to be inlinable, so please take care when making -// changes to the function body. + var T1_hi = sum64_5_hi( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo, + c4_hi, c4_lo); + var T1_lo = sum64_5_lo( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo, + c4_hi, c4_lo); + c0_hi = s0_512_hi(ah, al); + c0_lo = s0_512_lo(ah, al); + c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); + c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); -function howMuchToRead(n, state) { - if (n <= 0 || state.length === 0 && state.ended) return 0; - if (state.objectMode) return 1; + var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); + var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); - if (n !== n) { - // Only flow one buffer at a time - if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; - } // If we're asking for more than the current hwm, then raise the hwm. + hh = gh; + hl = gl; + gh = fh; + gl = fl; - if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) return n; // Don't have enough + fh = eh; + fl = el; - if (!state.ended) { - state.needReadable = true; - return 0; - } + eh = sum64_hi(dh, dl, T1_hi, T1_lo); + el = sum64_lo(dl, dl, T1_hi, T1_lo); - return state.length; -} // you can override either this method, or the async _read(n) below. + dh = ch; + dl = cl; + ch = bh; + cl = bl; -Readable.prototype.read = function (n) { - debug('read', n); - n = parseInt(n, 10); - var state = this._readableState; - var nOrig = n; - if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. + bh = ah; + bl = al; - if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); - return null; + ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); + al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); } - n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. - - if (n === 0 && state.ended) { - if (state.length === 0) endReadable(this); - return null; - } // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - // if we need a readable event, then we need to do some reading. - - - var doRead = state.needReadable; - debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some + sum64(this.h, 0, ah, al); + sum64(this.h, 2, bh, bl); + sum64(this.h, 4, ch, cl); + sum64(this.h, 6, dh, dl); + sum64(this.h, 8, eh, el); + sum64(this.h, 10, fh, fl); + sum64(this.h, 12, gh, gl); + sum64(this.h, 14, hh, hl); +}; - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. +SHA512.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; +function ch64_hi(xh, xl, yh, yl, zh) { + var r = (xh & yh) ^ ((~xh) & zh); + if (r < 0) + r += 0x100000000; + return r; +} - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } else if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; // if the length is currently zero, then we *need* a readable event. +function ch64_lo(xh, xl, yh, yl, zh, zl) { + var r = (xl & yl) ^ ((~xl) & zl); + if (r < 0) + r += 0x100000000; + return r; +} - if (state.length === 0) state.needReadable = true; // call internal read method +function maj64_hi(xh, xl, yh, yl, zh) { + var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); + if (r < 0) + r += 0x100000000; + return r; +} - this._read(state.highWaterMark); +function maj64_lo(xh, xl, yh, yl, zh, zl) { + var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); + if (r < 0) + r += 0x100000000; + return r; +} - state.sync = false; // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. +function s0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 28); + var c1_hi = rotr64_hi(xl, xh, 2); // 34 + var c2_hi = rotr64_hi(xl, xh, 7); // 39 - if (!state.reading) n = howMuchToRead(nOrig, state); - } + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} - var ret; - if (n > 0) ret = fromList(n, state);else ret = null; +function s0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 28); + var c1_lo = rotr64_lo(xl, xh, 2); // 34 + var c2_lo = rotr64_lo(xl, xh, 7); // 39 - if (ret === null) { - state.needReadable = state.length <= state.highWaterMark; - n = 0; - } else { - state.length -= n; - state.awaitDrain = 0; - } + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} - if (state.length === 0) { - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick. +function s1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 14); + var c1_hi = rotr64_hi(xh, xl, 18); + var c2_hi = rotr64_hi(xl, xh, 9); // 41 - if (nOrig !== n && state.ended) endReadable(this); - } + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} - if (ret !== null) this.emit('data', ret); - return ret; -}; +function s1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 14); + var c1_lo = rotr64_lo(xh, xl, 18); + var c2_lo = rotr64_lo(xl, xh, 9); // 41 -function onEofChunk(stream, state) { - debug('onEofChunk'); - if (state.ended) return; + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} - if (state.decoder) { - var chunk = state.decoder.end(); +function g0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 1); + var c1_hi = rotr64_hi(xh, xl, 8); + var c2_hi = shr64_hi(xh, xl, 7); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} - state.ended = true; +function g0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 1); + var c1_lo = rotr64_lo(xh, xl, 8); + var c2_lo = shr64_lo(xh, xl, 7); - if (state.sync) { - // if we are sync, wait until next tick to emit the data. - // Otherwise we risk emitting data in the flow() - // the readable code triggers during a read() call - emitReadable(stream); - } else { - // emit 'readable' now to make sure it gets picked up. - state.needReadable = false; + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} - if (!state.emittedReadable) { - state.emittedReadable = true; - emitReadable_(stream); - } - } -} // Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. +function g1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 19); + var c1_hi = rotr64_hi(xl, xh, 29); // 61 + var c2_hi = shr64_hi(xh, xl, 6); + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} -function emitReadable(stream) { - var state = stream._readableState; - debug('emitReadable', state.needReadable, state.emittedReadable); - state.needReadable = false; +function g1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 19); + var c1_lo = rotr64_lo(xl, xh, 29); // 61 + var c2_lo = shr64_lo(xh, xl, 6); - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - process.nextTick(emitReadable_, stream); - } + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; } -function emitReadable_(stream) { - var state = stream._readableState; - debug('emitReadable_', state.destroyed, state.length, state.ended); +},{"../common":159,"../utils":169,"minimalistic-assert":363}],168:[function(require,module,exports){ +'use strict'; - if (!state.destroyed && (state.length || state.ended)) { - stream.emit('readable'); - state.emittedReadable = false; - } // The stream needs another readable event if - // 1. It is not flowing, as the flow mechanism will take - // care of it. - // 2. It is not ended. - // 3. It is below the highWaterMark, so we can schedule - // another readable later. +var utils = require('../utils'); +var rotr32 = utils.rotr32; +function ft_1(s, x, y, z) { + if (s === 0) + return ch32(x, y, z); + if (s === 1 || s === 3) + return p32(x, y, z); + if (s === 2) + return maj32(x, y, z); +} +exports.ft_1 = ft_1; - state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; - flow(stream); -} // at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. +function ch32(x, y, z) { + return (x & y) ^ ((~x) & z); +} +exports.ch32 = ch32; +function maj32(x, y, z) { + return (x & y) ^ (x & z) ^ (y & z); +} +exports.maj32 = maj32; -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - process.nextTick(maybeReadMore_, stream, state); - } +function p32(x, y, z) { + return x ^ y ^ z; } +exports.p32 = p32; -function maybeReadMore_(stream, state) { - // Attempt to read more data if we should. - // - // The conditions for reading more data are (one of): - // - Not enough data buffered (state.length < state.highWaterMark). The loop - // is responsible for filling the buffer with enough data if such data - // is available. If highWaterMark is 0 and we are not in the flowing mode - // we should _not_ attempt to buffer any extra data. We'll get more data - // when the stream consumer calls read() instead. - // - No data in the buffer, and the stream is in flowing mode. In this mode - // the loop below is responsible for ensuring read() is called. Failing to - // call read here would abort the flow and there's no other mechanism for - // continuing the flow if the stream consumer has just subscribed to the - // 'data' event. - // - // In addition to the above conditions to keep reading data, the following - // conditions prevent the data from being read: - // - The stream has ended (state.ended). - // - There is already a pending 'read' operation (state.reading). This is a - // case where the the stream has called the implementation defined _read() - // method, but they are processing the call asynchronously and have _not_ - // called push() with new data. In this case we skip performing more - // read()s. The execution ends in this method again after the _read() ends - // up calling push() with more data. - while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { - var len = state.length; - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) // didn't get any data, stop spinning. - break; - } +function s0_256(x) { + return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); +} +exports.s0_256 = s0_256; - state.readingMore = false; -} // abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. +function s1_256(x) { + return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); +} +exports.s1_256 = s1_256; +function g0_256(x) { + return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); +} +exports.g0_256 = g0_256; -Readable.prototype._read = function (n) { - errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()')); -}; +function g1_256(x) { + return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); +} +exports.g1_256 = g1_256; -Readable.prototype.pipe = function (dest, pipeOpts) { - var src = this; - var state = this._readableState; +},{"../utils":169}],169:[function(require,module,exports){ +'use strict'; - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); - case 1: - state.pipes = [state.pipes, dest]; - break; +exports.inherits = inherits; - default: - state.pipes.push(dest); - break; +function isSurrogatePair(msg, i) { + if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { + return false; } + if (i < 0 || i + 1 >= msg.length) { + return false; + } + return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; +} - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - var endFn = doEnd ? onend : unpipe; - if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn); - dest.on('unpipe', onunpipe); - - function onunpipe(readable, unpipeInfo) { - debug('onunpipe'); - - if (readable === src) { - if (unpipeInfo && unpipeInfo.hasUnpiped === false) { - unpipeInfo.hasUnpiped = true; - cleanup(); +function toArray(msg, enc) { + if (Array.isArray(msg)) + return msg.slice(); + if (!msg) + return []; + var res = []; + if (typeof msg === 'string') { + if (!enc) { + // Inspired by stringToUtf8ByteArray() in closure-library by Google + // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 + // Apache License 2.0 + // https://github.com/google/closure-library/blob/master/LICENSE + var p = 0; + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + if (c < 128) { + res[p++] = c; + } else if (c < 2048) { + res[p++] = (c >> 6) | 192; + res[p++] = (c & 63) | 128; + } else if (isSurrogatePair(msg, i)) { + c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); + res[p++] = (c >> 18) | 240; + res[p++] = ((c >> 12) & 63) | 128; + res[p++] = ((c >> 6) & 63) | 128; + res[p++] = (c & 63) | 128; + } else { + res[p++] = (c >> 12) | 224; + res[p++] = ((c >> 6) & 63) | 128; + res[p++] = (c & 63) | 128; + } } + } else if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) + msg = '0' + msg; + for (i = 0; i < msg.length; i += 2) + res.push(parseInt(msg[i] + msg[i + 1], 16)); } + } else { + for (i = 0; i < msg.length; i++) + res[i] = msg[i] | 0; } + return res; +} +exports.toArray = toArray; - function onend() { - debug('onend'); - dest.end(); - } // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - - - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - var cleanedUp = false; +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) + res += zero2(msg[i].toString(16)); + return res; +} +exports.toHex = toHex; - function cleanup() { - debug('cleanup'); // cleanup event handlers once the pipe is broken +function htonl(w) { + var res = (w >>> 24) | + ((w >>> 8) & 0xff00) | + ((w << 8) & 0xff0000) | + ((w & 0xff) << 24); + return res >>> 0; +} +exports.htonl = htonl; - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', unpipe); - src.removeListener('data', ondata); - cleanedUp = true; // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); +function toHex32(msg, endian) { + var res = ''; + for (var i = 0; i < msg.length; i++) { + var w = msg[i]; + if (endian === 'little') + w = htonl(w); + res += zero8(w.toString(16)); } + return res; +} +exports.toHex32 = toHex32; - src.on('data', ondata); +function zero2(word) { + if (word.length === 1) + return '0' + word; + else + return word; +} +exports.zero2 = zero2; - function ondata(chunk) { - debug('ondata'); - var ret = dest.write(chunk); - debug('dest.write', ret); +function zero8(word) { + if (word.length === 7) + return '0' + word; + else if (word.length === 6) + return '00' + word; + else if (word.length === 5) + return '000' + word; + else if (word.length === 4) + return '0000' + word; + else if (word.length === 3) + return '00000' + word; + else if (word.length === 2) + return '000000' + word; + else if (word.length === 1) + return '0000000' + word; + else + return word; +} +exports.zero8 = zero8; - if (ret === false) { - // If the user unpiped during `dest.write()`, it is possible - // to get stuck in a permanently paused state if that write - // also returned false. - // => Check whether `dest` is still a piping destination. - if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug('false write response, pause', state.awaitDrain); - state.awaitDrain++; - } +function join32(msg, start, end, endian) { + var len = end - start; + assert(len % 4 === 0); + var res = new Array(len / 4); + for (var i = 0, k = start; i < res.length; i++, k += 4) { + var w; + if (endian === 'big') + w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; + else + w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; + res[i] = w >>> 0; + } + return res; +} +exports.join32 = join32; - src.pause(); +function split32(msg, endian) { + var res = new Array(msg.length * 4); + for (var i = 0, k = 0; i < msg.length; i++, k += 4) { + var m = msg[i]; + if (endian === 'big') { + res[k] = m >>> 24; + res[k + 1] = (m >>> 16) & 0xff; + res[k + 2] = (m >>> 8) & 0xff; + res[k + 3] = m & 0xff; + } else { + res[k + 3] = m >>> 24; + res[k + 2] = (m >>> 16) & 0xff; + res[k + 1] = (m >>> 8) & 0xff; + res[k] = m & 0xff; } - } // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. + } + return res; +} +exports.split32 = split32; +function rotr32(w, b) { + return (w >>> b) | (w << (32 - b)); +} +exports.rotr32 = rotr32; - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er); - } // Make sure our error handler is attached before userland ones. +function rotl32(w, b) { + return (w << b) | (w >>> (32 - b)); +} +exports.rotl32 = rotl32; +function sum32(a, b) { + return (a + b) >>> 0; +} +exports.sum32 = sum32; - prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once. +function sum32_3(a, b, c) { + return (a + b + c) >>> 0; +} +exports.sum32_3 = sum32_3; - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } +function sum32_4(a, b, c, d) { + return (a + b + c + d) >>> 0; +} +exports.sum32_4 = sum32_4; - dest.once('close', onclose); +function sum32_5(a, b, c, d, e) { + return (a + b + c + d + e) >>> 0; +} +exports.sum32_5 = sum32_5; - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } +function sum64(buf, pos, ah, al) { + var bh = buf[pos]; + var bl = buf[pos + 1]; - dest.once('finish', onfinish); + var lo = (al + bl) >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + buf[pos] = hi >>> 0; + buf[pos + 1] = lo; +} +exports.sum64 = sum64; - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } // tell the dest that it's being piped to +function sum64_hi(ah, al, bh, bl) { + var lo = (al + bl) >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + return hi >>> 0; +} +exports.sum64_hi = sum64_hi; +function sum64_lo(ah, al, bh, bl) { + var lo = al + bl; + return lo >>> 0; +} +exports.sum64_lo = sum64_lo; - dest.emit('pipe', src); // start the flow if it hasn't been started already. +function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { + var carry = 0; + var lo = al; + lo = (lo + bl) >>> 0; + carry += lo < al ? 1 : 0; + lo = (lo + cl) >>> 0; + carry += lo < cl ? 1 : 0; + lo = (lo + dl) >>> 0; + carry += lo < dl ? 1 : 0; - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } + var hi = ah + bh + ch + dh + carry; + return hi >>> 0; +} +exports.sum64_4_hi = sum64_4_hi; - return dest; -}; +function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { + var lo = al + bl + cl + dl; + return lo >>> 0; +} +exports.sum64_4_lo = sum64_4_lo; -function pipeOnDrain(src) { - return function pipeOnDrainFunctionResult() { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) state.awaitDrain--; +function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var carry = 0; + var lo = al; + lo = (lo + bl) >>> 0; + carry += lo < al ? 1 : 0; + lo = (lo + cl) >>> 0; + carry += lo < cl ? 1 : 0; + lo = (lo + dl) >>> 0; + carry += lo < dl ? 1 : 0; + lo = (lo + el) >>> 0; + carry += lo < el ? 1 : 0; - if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; + var hi = ah + bh + ch + dh + eh + carry; + return hi >>> 0; } +exports.sum64_5_hi = sum64_5_hi; -Readable.prototype.unpipe = function (dest) { - var state = this._readableState; - var unpipeInfo = { - hasUnpiped: false - }; // if we're not piping anywhere, then do nothing. - - if (state.pipesCount === 0) return this; // just one destination. most common case. +function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var lo = al + bl + cl + dl + el; - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) return this; - if (!dest) dest = state.pipes; // got a match. + return lo >>> 0; +} +exports.sum64_5_lo = sum64_5_lo; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) dest.emit('unpipe', this, unpipeInfo); - return this; - } // slow case. multiple pipe destinations. +function rotr64_hi(ah, al, num) { + var r = (al << (32 - num)) | (ah >>> num); + return r >>> 0; +} +exports.rotr64_hi = rotr64_hi; +function rotr64_lo(ah, al, num) { + var r = (ah << (32 - num)) | (al >>> num); + return r >>> 0; +} +exports.rotr64_lo = rotr64_lo; - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; +function shr64_hi(ah, al, num) { + return ah >>> num; +} +exports.shr64_hi = shr64_hi; - for (var i = 0; i < len; i++) { - dests[i].emit('unpipe', this, { - hasUnpiped: false - }); - } +function shr64_lo(ah, al, num) { + var r = (ah << (32 - num)) | (al >>> num); + return r >>> 0; +} +exports.shr64_lo = shr64_lo; - return this; - } // try to find the right one. +},{"inherits":193,"minimalistic-assert":363}],170:[function(require,module,exports){ +'use strict'; +var hash = require('hash.js'); +var utils = require('minimalistic-crypto-utils'); +var assert = require('minimalistic-assert'); - var index = indexOf(state.pipes, dest); - if (index === -1) return this; - state.pipes.splice(index, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) state.pipes = state.pipes[0]; - dest.emit('unpipe', this, unpipeInfo); - return this; -}; // set up data events if they are asked for -// Ensure readable listeners eventually get something +function HmacDRBG(options) { + if (!(this instanceof HmacDRBG)) + return new HmacDRBG(options); + this.hash = options.hash; + this.predResist = !!options.predResist; + this.outLen = this.hash.outSize; + this.minEntropy = options.minEntropy || this.hash.hmacStrength; -Readable.prototype.on = function (ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - var state = this._readableState; + this._reseed = null; + this.reseedInterval = null; + this.K = null; + this.V = null; - if (ev === 'data') { - // update readableListening so that resume() may be a no-op - // a few lines down. This is needed to support once('readable'). - state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused + var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); + var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); + var pers = utils.toArray(options.pers, options.persEnc || 'hex'); + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + this._init(entropy, nonce, pers); +} +module.exports = HmacDRBG; - if (state.flowing !== false) this.resume(); - } else if (ev === 'readable') { - if (!state.endEmitted && !state.readableListening) { - state.readableListening = state.needReadable = true; - state.flowing = false; - state.emittedReadable = false; - debug('on readable', state.length, state.reading); +HmacDRBG.prototype._init = function init(entropy, nonce, pers) { + var seed = entropy.concat(nonce).concat(pers); - if (state.length) { - emitReadable(this); - } else if (!state.reading) { - process.nextTick(nReadingNextTick, this); - } - } + this.K = new Array(this.outLen / 8); + this.V = new Array(this.outLen / 8); + for (var i = 0; i < this.V.length; i++) { + this.K[i] = 0x00; + this.V[i] = 0x01; } - return res; + this._update(seed); + this._reseed = 1; + this.reseedInterval = 0x1000000000000; // 2^48 }; -Readable.prototype.addListener = Readable.prototype.on; - -Readable.prototype.removeListener = function (ev, fn) { - var res = Stream.prototype.removeListener.call(this, ev, fn); +HmacDRBG.prototype._hmac = function hmac() { + return new hash.hmac(this.hash, this.K); +}; - if (ev === 'readable') { - // We need to check if there is someone still listening to - // readable and reset the state. However this needs to happen - // after readable has been emitted but before I/O (nextTick) to - // support once('readable', fn) cycles. This means that calling - // resume within the same tick will have no - // effect. - process.nextTick(updateReadableListening, this); - } +HmacDRBG.prototype._update = function update(seed) { + var kmac = this._hmac() + .update(this.V) + .update([ 0x00 ]); + if (seed) + kmac = kmac.update(seed); + this.K = kmac.digest(); + this.V = this._hmac().update(this.V).digest(); + if (!seed) + return; - return res; + this.K = this._hmac() + .update(this.V) + .update([ 0x01 ]) + .update(seed) + .digest(); + this.V = this._hmac().update(this.V).digest(); }; -Readable.prototype.removeAllListeners = function (ev) { - var res = Stream.prototype.removeAllListeners.apply(this, arguments); - - if (ev === 'readable' || ev === undefined) { - // We need to check if there is someone still listening to - // readable and reset the state. However this needs to happen - // after readable has been emitted but before I/O (nextTick) to - // support once('readable', fn) cycles. This means that calling - // resume within the same tick will have no - // effect. - process.nextTick(updateReadableListening, this); +HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { + // Optional entropy enc + if (typeof entropyEnc !== 'string') { + addEnc = add; + add = entropyEnc; + entropyEnc = null; } - return res; -}; - -function updateReadableListening(self) { - var state = self._readableState; - state.readableListening = self.listenerCount('readable') > 0; + entropy = utils.toArray(entropy, entropyEnc); + add = utils.toArray(add, addEnc); - if (state.resumeScheduled && !state.paused) { - // flowing needs to be set to true now, otherwise - // the upcoming resume will not flow. - state.flowing = true; // crude way to check if we should resume - } else if (self.listenerCount('data') > 0) { - self.resume(); - } -} + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); -function nReadingNextTick(self) { - debug('readable nexttick read 0'); - self.read(0); -} // pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. + this._update(entropy.concat(add || [])); + this._reseed = 1; +}; +HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { + if (this._reseed > this.reseedInterval) + throw new Error('Reseed is required'); -Readable.prototype.resume = function () { - var state = this._readableState; + // Optional encoding + if (typeof enc !== 'string') { + addEnc = add; + add = enc; + enc = null; + } - if (!state.flowing) { - debug('resume'); // we flow only if there is no one listening - // for readable, but we still have to call - // resume() + // Optional additional data + if (add) { + add = utils.toArray(add, addEnc || 'hex'); + this._update(add); + } - state.flowing = !state.readableListening; - resume(this, state); + var temp = []; + while (temp.length < len) { + this.V = this._hmac().update(this.V).digest(); + temp = temp.concat(this.V); } - state.paused = false; - return this; + var res = temp.slice(0, len); + this._update(add); + this._reseed++; + return utils.encode(res, enc); }; -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - process.nextTick(resume_, stream, state); - } -} +},{"hash.js":158,"minimalistic-assert":363,"minimalistic-crypto-utils":364}],171:[function(require,module,exports){ +var http = require('http') +var url = require('url') -function resume_(stream, state) { - debug('resume', state.reading); +var https = module.exports - if (!state.reading) { - stream.read(0); - } +for (var key in http) { + if (http.hasOwnProperty(key)) https[key] = http[key] +} - state.resumeScheduled = false; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) stream.read(0); +https.request = function (params, cb) { + params = validateParams(params) + return http.request.call(this, params, cb) } -Readable.prototype.pause = function () { - debug('call pause flowing=%j', this._readableState.flowing); +https.get = function (params, cb) { + params = validateParams(params) + return http.get.call(this, params, cb) +} - if (this._readableState.flowing !== false) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); +function validateParams (params) { + if (typeof params === 'string') { + params = url.parse(params) } - - this._readableState.paused = true; - return this; -}; - -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - - while (state.flowing && stream.read() !== null) { - ; + if (!params.protocol) { + params.protocol = 'https:' } -} // wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. + if (params.protocol !== 'https:') { + throw new Error('Protocol "' + params.protocol + '" not supported. Expected "https:"') + } + return params +} +},{"http":551,"url":586}],172:[function(require,module,exports){ +"use strict"; -Readable.prototype.wrap = function (stream) { - var _this = this; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; - var state = this._readableState; - var paused = false; - stream.on('end', function () { - debug('wrapped end'); +var _nanoid = require("nanoid"); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) _this.push(chunk); - } +var _utils = require("./utils"); - _this.push(null); - }); - stream.on('data', function (chunk) { - debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode +var defaults = { + title: 'Untitled event', + productId: 'adamgibbons/ics', + method: 'PUBLISH', + uid: (0, _nanoid.nanoid)(), + timestamp: (0, _utils.formatDate)(null, 'utc'), + start: (0, _utils.formatDate)(null, 'utc') +}; +var _default = defaults; +exports["default"] = _default; +},{"./utils":183,"nanoid":372}],173:[function(require,module,exports){ +"use strict"; - if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createEvent = createEvent; +exports.createEvents = createEvents; - var ret = _this.push(chunk); +var _nanoid = require("nanoid"); - if (!ret) { - paused = true; - stream.pause(); - } - }); // proxy all the other methods. - // important when wrapping filters and duplexes. +var _pipeline = require("./pipeline"); - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function methodWrap(method) { - return function methodWrapReturnFunction() { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } // proxy certain important events. +function assignUniqueId(event) { + event.uid = event.uid || (0, _nanoid.nanoid)(); + return event; +} +function validateAndBuildEvent(event) { + return (0, _pipeline.validateEvent)((0, _pipeline.buildEvent)(event)); +} - for (var n = 0; n < kProxyEvents.length; n++) { - stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); - } // when we try to consume some more bytes, simply unpause the - // underlying stream. +function applyInitialFormatting(_ref) { + var error = _ref.error, + value = _ref.value; + if (error) { + return { + error: error, + value: null + }; + } - this._read = function (n) { - debug('wrapped _read', n); + return { + error: null, + value: (0, _pipeline.formatEvent)(value) + }; +} - if (paused) { - paused = false; - stream.resume(); - } +function reformatEventsByPosition(_ref2, idx, list) { + var error = _ref2.error, + value = _ref2.value; + if (error) return { + error: error, + value: value }; - return this; -}; + if (idx === 0) { + // beginning of list + return { + value: value.slice(0, value.indexOf('END:VCALENDAR')), + error: null + }; + } -if (typeof Symbol === 'function') { - Readable.prototype[Symbol.asyncIterator] = function () { - if (createReadableStreamAsyncIterator === undefined) { - createReadableStreamAsyncIterator = require('./internal/streams/async_iterator'); - } + if (idx === list.length - 1) { + // end of list + return { + value: value.slice(value.indexOf('BEGIN:VEVENT')), + error: null + }; + } - return createReadableStreamAsyncIterator(this); + return { + error: null, + value: value.slice(value.indexOf('BEGIN:VEVENT'), value.indexOf('END:VEVENT') + 12) }; } -Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.highWaterMark; - } -}); -Object.defineProperty(Readable.prototype, 'readableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState && this._readableState.buffer; - } -}); -Object.defineProperty(Readable.prototype, 'readableFlowing', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.flowing; - }, - set: function set(state) { - if (this._readableState) { - this._readableState.flowing = state; - } - } -}); // exposed for testing purposes only. +function catenateEvents(accumulator, _ref3, idx) { + var error = _ref3.error, + value = _ref3.value; -Readable._fromList = fromList; -Object.defineProperty(Readable.prototype, 'readableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.length; + if (error) { + accumulator.error = error; + accumulator.value = null; + return accumulator; } -}); // Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromList(n, state) { - // nothing buffered - if (state.length === 0) return null; - var ret; - if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { - // read it all, truncate the list - if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length); - state.buffer.clear(); - } else { - // read part of list - ret = state.buffer.consume(n, state.decoder); + if (accumulator.value) { + accumulator.value = accumulator.value.concat(value); + return accumulator; } - return ret; -} -function endReadable(stream) { - var state = stream._readableState; - debug('endReadable', state.endEmitted); + accumulator.value = value; + return accumulator; +} - if (!state.endEmitted) { - state.ended = true; - process.nextTick(endReadableNT, state, stream); +function createEvent(attributes, cb) { + if (!attributes) { + Error('Attributes argument is required'); } -} -function endReadableNT(state, stream) { - debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift. + assignUniqueId(attributes); - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); + if (!cb) { + // No callback, so return error or value in an object + var _validateAndBuildEven = validateAndBuildEvent(attributes), + _error = _validateAndBuildEven.error, + _value = _validateAndBuildEven.value; - if (state.autoDestroy) { - // In case of duplex streams we need a way to detect - // if the writable side is ready for autoDestroy as well - var wState = stream._writableState; + if (_error) return { + error: _error, + value: _value + }; + var event = ''; - if (!wState || wState.autoDestroy && wState.finished) { - stream.destroy(); - } + try { + event = (0, _pipeline.formatEvent)(_value); + } catch (error) { + return { + error: error, + value: null + }; } - } -} -if (typeof Symbol === 'function') { - Readable.from = function (iterable, opts) { - if (from === undefined) { - from = require('./internal/streams/from'); - } + return { + error: null, + value: event + }; + } // Return a node-style callback - return from(Readable, iterable, opts); - }; + + var _validateAndBuildEven2 = validateAndBuildEvent(attributes), + error = _validateAndBuildEven2.error, + value = _validateAndBuildEven2.value; + + if (error) return cb(error); + return cb(null, (0, _pipeline.formatEvent)(value)); } -function indexOf(xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; +function createEvents(events, cb) { + if (!events) { + return { + error: Error('one argument is required'), + value: null + }; } - return -1; -} -}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + if (events.length === 1) { + return createEvent(events[0], cb); + } -},{"../errors":143,"./_stream_duplex":144,"./internal/streams/async_iterator":149,"./internal/streams/buffer_list":150,"./internal/streams/destroy":151,"./internal/streams/from":153,"./internal/streams/state":155,"./internal/streams/stream":156,"_process":390,"buffer":69,"events":129,"inherits":193,"string_decoder/":571,"util":24}],147:[function(require,module,exports){ -arguments[4][56][0].apply(exports,arguments) -},{"../errors":143,"./_stream_duplex":144,"dup":56,"inherits":193}],148:[function(require,module,exports){ -(function (process,global){(function (){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -// A bit simpler than readable streams. -// Implement an async ._write(chunk, encoding, cb), and it'll handle all -// the drain event emission and buffering. -'use strict'; + var _events$map$map$map$m = events.map(assignUniqueId).map(validateAndBuildEvent).map(applyInitialFormatting).map(reformatEventsByPosition).reduce(catenateEvents, { + error: null, + value: null + }), + error = _events$map$map$map$m.error, + value = _events$map$map$map$m.value; -module.exports = Writable; -/* */ + if (!cb) { + return { + error: error, + value: value + }; + } -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} // It seems a linked list but it is not -// there will be only 2 of these for each stream + return cb(error, value); +} +},{"./pipeline":176,"nanoid":372}],174:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = buildEvent; -function CorkedRequest(state) { - var _this = this; +var _defaults = _interopRequireDefault(require("../defaults")); - this.next = null; - this.entry = null; +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - this.finish = function () { - onCorkedFinish(_this, state); - }; -} -/* */ +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -/**/ +function buildEvent() { + var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var title = attributes.title, + productId = attributes.productId, + method = attributes.method, + uid = attributes.uid, + sequence = attributes.sequence, + start = attributes.start, + startType = attributes.startType, + duration = attributes.duration, + end = attributes.end, + description = attributes.description, + url = attributes.url, + geo = attributes.geo, + location = attributes.location, + status = attributes.status, + categories = attributes.categories, + organizer = attributes.organizer, + attendees = attributes.attendees, + alarms = attributes.alarms, + recurrenceRule = attributes.recurrenceRule, + created = attributes.created, + lastModified = attributes.lastModified, + calName = attributes.calName; // fill in default values where necessary + var output = Object.assign({}, _defaults["default"], attributes); // remove falsey values -var Duplex; -/**/ + return Object.entries(output).reduce(function (clean, entry) { + return entry[1] ? Object.assign(clean, _defineProperty({}, entry[0], entry[1])) : clean; + }, {}); +} +},{"../defaults":172}],175:[function(require,module,exports){ +"use strict"; -Writable.WritableState = WritableState; -/**/ +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = formatEvent; -var internalUtil = { - deprecate: require('util-deprecate') -}; -/**/ +var _utils = require("../utils"); -/**/ +function formatEvent() { + var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var title = attributes.title, + productId = attributes.productId, + method = attributes.method, + uid = attributes.uid, + sequence = attributes.sequence, + timestamp = attributes.timestamp, + start = attributes.start, + startType = attributes.startType, + startInputType = attributes.startInputType, + startOutputType = attributes.startOutputType, + duration = attributes.duration, + end = attributes.end, + endInputType = attributes.endInputType, + endOutputType = attributes.endOutputType, + description = attributes.description, + url = attributes.url, + geo = attributes.geo, + location = attributes.location, + status = attributes.status, + categories = attributes.categories, + organizer = attributes.organizer, + attendees = attributes.attendees, + alarms = attributes.alarms, + recurrenceRule = attributes.recurrenceRule, + busyStatus = attributes.busyStatus, + created = attributes.created, + lastModified = attributes.lastModified, + calName = attributes.calName; + var icsFormat = ''; + icsFormat += 'BEGIN:VCALENDAR\r\n'; + icsFormat += 'VERSION:2.0\r\n'; + icsFormat += 'CALSCALE:GREGORIAN\r\n'; + icsFormat += (0, _utils.foldLine)("PRODID:".concat(productId)) + '\r\n'; + icsFormat += (0, _utils.foldLine)("METHOD:".concat(method)) + '\r\n'; + icsFormat += calName ? (0, _utils.foldLine)("X-WR-CALNAME:".concat(calName)) + '\r\n' : ''; + icsFormat += "X-PUBLISHED-TTL:PT1H\r\n"; + icsFormat += 'BEGIN:VEVENT\r\n'; + icsFormat += "UID:".concat(uid, "\r\n"); + icsFormat += (0, _utils.foldLine)("SUMMARY:".concat(title ? (0, _utils.setSummary)(title) : title)) + '\r\n'; + icsFormat += "DTSTAMP:".concat(timestamp, "\r\n"); // All day events like anniversaries must be specified as VALUE type DATE -var Stream = require('./internal/streams/stream'); -/**/ + icsFormat += "DTSTART".concat(start && start.length == 3 ? ";VALUE=DATE" : "", ":").concat((0, _utils.formatDate)(start, startOutputType || startType, startInputType), "\r\n"); // End is not required for all day events on single days (like anniversaries) + if (!end || end.length !== 3 || start.length !== end.length || start.some(function (val, i) { + return val !== end[i]; + })) { + if (end) { + icsFormat += "DTEND".concat(end.length === 3 ? ";VALUE=DATE" : "", ":").concat((0, _utils.formatDate)(end, endOutputType || startOutputType || startType, endInputType || startInputType), "\r\n"); + } + } -var Buffer = require('buffer').Buffer; + icsFormat += sequence ? "SEQUENCE:".concat(sequence, "\r\n") : ''; + icsFormat += description ? (0, _utils.foldLine)("DESCRIPTION:".concat((0, _utils.setDescription)(description))) + '\r\n' : ''; + icsFormat += url ? (0, _utils.foldLine)("URL:".concat(url)) + '\r\n' : ''; + icsFormat += geo ? (0, _utils.foldLine)("GEO:".concat((0, _utils.setGeolocation)(geo))) + '\r\n' : ''; + icsFormat += location ? (0, _utils.foldLine)("LOCATION:".concat((0, _utils.setLocation)(location))) + '\r\n' : ''; + icsFormat += status ? (0, _utils.foldLine)("STATUS:".concat(status)) + '\r\n' : ''; + icsFormat += categories ? (0, _utils.foldLine)("CATEGORIES:".concat(categories)) + '\r\n' : ''; + icsFormat += organizer ? (0, _utils.foldLine)("ORGANIZER;".concat((0, _utils.setOrganizer)(organizer))) + '\r\n' : ''; + icsFormat += busyStatus ? (0, _utils.foldLine)("X-MICROSOFT-CDO-BUSYSTATUS:".concat(busyStatus)) + '\r\n' : ''; + icsFormat += created ? 'CREATED:' + (0, _utils.formatDate)(created) + '\r\n' : ''; + icsFormat += lastModified ? 'LAST-MODIFIED:' + (0, _utils.formatDate)(lastModified) + '\r\n' : ''; -var OurUint8Array = global.Uint8Array || function () {}; + if (attendees) { + attendees.map(function (attendee) { + icsFormat += (0, _utils.foldLine)("ATTENDEE;".concat((0, _utils.setContact)(attendee))) + '\r\n'; + }); + } -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} + if (alarms) { + alarms.map(function (alarm) { + icsFormat += (0, _utils.setAlarm)(alarm); + }); + } -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; + icsFormat += recurrenceRule ? "RRULE:".concat(recurrenceRule, "\r\n") : ''; + icsFormat += duration ? "DURATION:".concat((0, _utils.formatDuration)(duration), "\r\n") : ''; + icsFormat += "END:VEVENT\r\n"; + icsFormat += "END:VCALENDAR\r\n"; + return icsFormat; } +},{"../utils":183}],176:[function(require,module,exports){ +"use strict"; -var destroyImpl = require('./internal/streams/destroy'); +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "buildEvent", { + enumerable: true, + get: function get() { + return _build["default"]; + } +}); +Object.defineProperty(exports, "formatEvent", { + enumerable: true, + get: function get() { + return _format["default"]; + } +}); +Object.defineProperty(exports, "validateEvent", { + enumerable: true, + get: function get() { + return _validate["default"]; + } +}); -var _require = require('./internal/streams/state'), - getHighWaterMark = _require.getHighWaterMark; +var _build = _interopRequireDefault(require("./build")); -var _require$codes = require('../errors').codes, - ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, - ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE, - ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED, - ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES, - ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END, - ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; +var _format = _interopRequireDefault(require("./format")); -var errorOrDestroy = destroyImpl.errorOrDestroy; +var _validate = _interopRequireDefault(require("./validate")); -require('inherits')(Writable, Stream); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +},{"./build":174,"./format":175,"./validate":177}],177:[function(require,module,exports){ +"use strict"; -function nop() {} +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; -function WritableState(options, stream, isDuplex) { - Duplex = Duplex || require('./_stream_duplex'); - options = options || {}; // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream, - // e.g. options.readableObjectMode vs. options.writableObjectMode, etc. +var _schema = _interopRequireDefault(require("../schema")); - if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream - // contains buffers or objects. - - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - - this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called - - this.finalCalled = false; // drain event flag. - - this.needDrain = false; // at the start of calling end() - - this.ending = false; // when end() has been called, and returned +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - this.ended = false; // when 'finish' is emitted +var _default = _schema["default"]; +exports["default"] = _default; +},{"../schema":178}],178:[function(require,module,exports){ +"use strict"; - this.finished = false; // has it been destroyed +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - this.destroyed = false; // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = validateEvent; - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. +var yup = _interopRequireWildcard(require("yup")); - this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. +function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } - this.length = 0; // a flag to see when we're in the middle of a write. +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } - this.writing = false; // when true all writes will be buffered until .uncork() call +// yup url validation blocks localhost, so use a more flexible regex instead +// taken from https://github.com/jquense/yup/issues/224#issuecomment-417172609 +// This does mean that the url validation error is +// "url must match the following: ...." as opposed to "url must be a valid URL" +var urlRegex = /^(?:([a-z0-9+.-]+):\/\/)(?:\S+(?::\S*)?@)?(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/; +var dateTimeSchema = yup.array().min(3).max(7).of(yup.lazy(function (item, options) { + var itemIndex = parseInt(options.path.match(/.*\[(\d+)]/)[1]); + return [yup.number().integer(), yup.number().integer().min(1).max(12), yup.number().integer().min(1).max(31), yup.number().integer().min(0).max(23), yup.number().integer().min(0).max(60), yup.number().integer().min(0).max(60)][itemIndex]; +})); +var durationSchema = yup.object().shape({ + before: yup["boolean"](), + //option to set before alaram + weeks: yup.number(), + days: yup.number(), + hours: yup.number(), + minutes: yup.number(), + seconds: yup.number() +}).noUnknown(); +var contactSchema = yup.object().shape({ + name: yup.string(), + email: yup.string().email(), + rsvp: yup["boolean"](), + dir: yup.string().matches(urlRegex), + partstat: yup.string(), + role: yup.string() +}).noUnknown(); +var organizerSchema = yup.object().shape({ + name: yup.string(), + email: yup.string().email() +}).noUnknown(); +var alarmSchema = yup.object().shape({ + action: yup.string().matches(/audio|display|email/).required(), + trigger: yup.mixed().required(), + description: yup.string(), + duration: durationSchema, + repeat: yup.number(), + attach: yup.string(), + attachType: yup.string(), + summary: yup.string(), + attendee: contactSchema, + 'x-prop': yup.mixed(), + 'iana-prop': yup.mixed() +}).noUnknown(); +var schema = yup.object().shape({ + summary: yup.string(), + timestamp: yup.mixed(), + title: yup.string(), + productId: yup.string(), + method: yup.string(), + uid: yup.string().required(), + sequence: yup.number(), + start: dateTimeSchema.required(), + duration: durationSchema, + startType: yup.string().matches(/utc|local/), + startInputType: yup.string().matches(/utc|local/), + startOutputType: yup.string().matches(/utc|local/), + end: dateTimeSchema, + endInputType: yup.string().matches(/utc|local/), + endOutputType: yup.string().matches(/utc|local/), + description: yup.string(), + url: yup.string().matches(urlRegex), + geo: yup.object().shape({ + lat: yup.number(), + lon: yup.number() + }), + location: yup.string(), + status: yup.string().matches(/TENTATIVE|CANCELLED|CONFIRMED/i), + categories: yup.array().of(yup.string()), + organizer: organizerSchema, + attendees: yup.array().of(contactSchema), + alarms: yup.array().of(alarmSchema), + recurrenceRule: yup.string(), + busyStatus: yup.string().matches(/TENTATIVE|FREE|BUSY|OOF/i), + created: dateTimeSchema, + lastModified: dateTimeSchema, + calName: yup.string() +}).test('xor', "object should have end or duration", function (val) { + var hasEnd = !!val.end; + var hasDuration = !!val.duration; + return hasEnd && !hasDuration || !hasEnd && hasDuration || !hasEnd && !hasDuration; +}).noUnknown(); - this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. +function validateEvent(candidate) { + try { + var value = schema.validateSync(candidate, { + abortEarly: false, + strict: true + }); + return { + error: null, + value: value + }; + } catch (error) { + return { + error: Object.assign({}, error), + value: undefined + }; + } +} +},{"yup":640}],179:[function(require,module,exports){ +"use strict"; - this.sync = true; // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = foldLine; - this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) +function foldLine(line) { + var parts = []; + var length = 75; - this.onwrite = function (er) { - onwrite(stream, er); - }; // the callback that the user supplies to write(chunk,encoding,cb) + while (line.length > length) { + parts.push(line.slice(0, length)); + line = line.slice(length); + length = 74; + } + parts.push(line); + return parts.join('\r\n\t'); +} +},{}],180:[function(require,module,exports){ +"use strict"; - this.writecb = null; // the amount that is being written when _write is called. +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = formatDate; - this.writelen = 0; - this.bufferedRequest = null; - this.lastBufferedRequest = null; // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } - this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - this.prefinished = false; // True if the error was already emitted and should not be thrown again +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true. +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end') +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - this.autoDestroy = !!options.autoDestroy; // count buffered requests +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always - // one allocated and free to use, and we maintain at most two +var pad = function pad(n) { + return n < 10 ? "0".concat(n) : "".concat(n); +}; - this.corkedRequestsFree = new CorkedRequest(this); -} +function formatDate() { + var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var outputType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'utc'; + var inputType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'local'; -WritableState.prototype.getBuffer = function getBuffer() { - var current = this.bufferedRequest; - var out = []; + if (Array.isArray(args) && args.length === 3) { + var _args = _slicedToArray(args, 3), + year = _args[0], + month = _args[1], + date = _args[2]; - while (current) { - out.push(current); - current = current.next; + return "".concat(year).concat(pad(month)).concat(pad(date)); } - return out; -}; - -(function () { - try { - Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function writableStateBufferGetter() { - return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') - }); - } catch (_) {} -})(); // Test _writableState for inheritance to account for Duplex streams, -// whose prototype chain only points to Readable. - + var outDate = new Date(new Date().setUTCSeconds(0, 0)); -var realHasInstance; + if (Array.isArray(args) && args.length > 0 && args[0]) { + var _args2 = _slicedToArray(args, 6), + _year = _args2[0], + _month = _args2[1], + _date = _args2[2], + _args2$ = _args2[3], + hours = _args2$ === void 0 ? 0 : _args2$, + _args2$2 = _args2[4], + minutes = _args2$2 === void 0 ? 0 : _args2$2, + _args2$3 = _args2[5], + seconds = _args2$3 === void 0 ? 0 : _args2$3; -if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { - realHasInstance = Function.prototype[Symbol.hasInstance]; - Object.defineProperty(Writable, Symbol.hasInstance, { - value: function value(object) { - if (realHasInstance.call(this, object)) return true; - if (this !== Writable) return false; - return object && object._writableState instanceof WritableState; + if (inputType === 'local') { + outDate = new Date(_year, _month - 1, _date, hours, minutes, seconds); + } else { + outDate = new Date(Date.UTC(_year, _month - 1, _date, hours, minutes, seconds)); } - }); -} else { - realHasInstance = function realHasInstance(object) { - return object instanceof this; - }; -} - -function Writable(options) { - Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too. - // `realHasInstance` is necessary because using plain `instanceof` - // would return false, as no `_writableState` property is attached. - // Trying to use the custom `instanceof` for Writable here will also break the - // Node.js LazyTransform implementation, which has a non-trivial getter for - // `_writableState` that would lead to infinite recursion. - // Checking for a Stream.Duplex instance is faster here instead of inside - // the WritableState constructor, at least with V8 6.5 - - var isDuplex = this instanceof Duplex; - if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options); - this._writableState = new WritableState(options, this, isDuplex); // legacy. - - this.writable = true; - - if (options) { - if (typeof options.write === 'function') this._write = options.write; - if (typeof options.writev === 'function') this._writev = options.writev; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - if (typeof options.final === 'function') this._final = options.final; } - Stream.call(this); -} // Otherwise people can pipe Writable streams, which is just wrong. - + if (outputType === 'local') { + return [outDate.getFullYear(), pad(outDate.getMonth() + 1), pad(outDate.getDate()), 'T', pad(outDate.getHours()), pad(outDate.getMinutes()), pad(outDate.getSeconds())].join(''); + } -Writable.prototype.pipe = function () { - errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); -}; + return [outDate.getUTCFullYear(), pad(outDate.getUTCMonth() + 1), pad(outDate.getUTCDate()), 'T', pad(outDate.getUTCHours()), pad(outDate.getUTCMinutes()), pad(outDate.getUTCSeconds()), 'Z'].join(''); +} +},{}],181:[function(require,module,exports){ +"use strict"; -function writeAfterEnd(stream, cb) { - var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = formatDuration; - errorOrDestroy(stream, er); - process.nextTick(cb, er); -} // Checks that a user-supplied chunk is valid, especially for the particular -// mode the stream is in. Currently this means that `null` is never accepted -// and undefined/non-string values are only allowed in object mode. +function formatDuration() { + var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var weeks = attributes.weeks, + days = attributes.days, + hours = attributes.hours, + minutes = attributes.minutes, + seconds = attributes.seconds; + var formattedDuration = 'P'; + formattedDuration += weeks ? "".concat(weeks, "W") : ''; + formattedDuration += days ? "".concat(days, "D") : ''; + formattedDuration += 'T'; + formattedDuration += hours ? "".concat(hours, "H") : ''; + formattedDuration += minutes ? "".concat(minutes, "M") : ''; + formattedDuration += seconds ? "".concat(seconds, "S") : ''; + return formattedDuration; +} +},{}],182:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = formatText; -function validChunk(stream, state, chunk, cb) { - var er; +function formatText(text) { + return text.replace(/\\/gm, "\\\\").replace(/\r?\n/gm, "\\n").replace(/;/gm, "\\;").replace(/,/gm, "\\,"); +} +},{}],183:[function(require,module,exports){ +"use strict"; - if (chunk === null) { - er = new ERR_STREAM_NULL_VALUES(); - } else if (typeof chunk !== 'string' && !state.objectMode) { - er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "formatDate", { + enumerable: true, + get: function get() { + return _formatDate["default"]; } - - if (er) { - errorOrDestroy(stream, er); - process.nextTick(cb, er); - return false; +}); +Object.defineProperty(exports, "setGeolocation", { + enumerable: true, + get: function get() { + return _setGeolocation["default"]; } - - return true; -} - -Writable.prototype.write = function (chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - - var isBuf = !state.objectMode && _isUint8Array(chunk); - - if (isBuf && !Buffer.isBuffer(chunk)) { - chunk = _uint8ArrayToBuffer(chunk); +}); +Object.defineProperty(exports, "setContact", { + enumerable: true, + get: function get() { + return _setContact["default"]; } - - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; +}); +Object.defineProperty(exports, "setOrganizer", { + enumerable: true, + get: function get() { + return _setOrganizer["default"]; } - - if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - if (typeof cb !== 'function') cb = nop; - if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); +}); +Object.defineProperty(exports, "setAlarm", { + enumerable: true, + get: function get() { + return _setAlarm["default"]; } - return ret; -}; - -Writable.prototype.cork = function () { - this._writableState.corked++; -}; - -Writable.prototype.uncork = function () { - var state = this._writableState; - - if (state.corked) { - state.corked--; - if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); +}); +Object.defineProperty(exports, "setDescription", { + enumerable: true, + get: function get() { + return _setDescription["default"]; } -}; - -Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - // node::ParseEncoding() requires lower case. - if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding); - this._writableState.defaultEncoding = encoding; - return this; -}; - -Object.defineProperty(Writable.prototype, 'writableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, +}); +Object.defineProperty(exports, "setSummary", { + enumerable: true, get: function get() { - return this._writableState && this._writableState.getBuffer(); + return _setSummary["default"]; } }); - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { - chunk = Buffer.from(chunk, encoding); +Object.defineProperty(exports, "formatDuration", { + enumerable: true, + get: function get() { + return _formatDuration["default"]; } - - return chunk; -} - -Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, +}); +Object.defineProperty(exports, "foldLine", { + enumerable: true, get: function get() { - return this._writableState.highWaterMark; + return _foldLine["default"]; } -}); // if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. +}); +Object.defineProperty(exports, "setLocation", { + enumerable: true, + get: function get() { + return _setLocation["default"]; + } +}); -function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { - if (!isBuf) { - var newChunk = decodeChunk(state, chunk, encoding); +var _formatDate = _interopRequireDefault(require("./format-date")); - if (chunk !== newChunk) { - isBuf = true; - encoding = 'buffer'; - chunk = newChunk; - } - } +var _setGeolocation = _interopRequireDefault(require("./set-geolocation")); - var len = state.objectMode ? 1 : chunk.length; - state.length += len; - var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. +var _setContact = _interopRequireDefault(require("./set-contact")); - if (!ret) state.needDrain = true; +var _setOrganizer = _interopRequireDefault(require("./set-organizer")); - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = { - chunk: chunk, - encoding: encoding, - isBuf: isBuf, - callback: cb, - next: null - }; +var _setAlarm = _interopRequireDefault(require("./set-alarm")); - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } +var _setDescription = _interopRequireDefault(require("./set-description")); - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); - } +var _setSummary = _interopRequireDefault(require("./set-summary")); - return ret; -} +var _formatDuration = _interopRequireDefault(require("./format-duration")); -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} +var _foldLine = _interopRequireDefault(require("./fold-line")); -function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; +var _setLocation = _interopRequireDefault(require("./set-location")); - if (sync) { - // defer the callback if we are being called synchronously - // to avoid piling up things on the stack - process.nextTick(cb, er); // this can emit finish, and it will always happen - // after error +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +},{"./fold-line":179,"./format-date":180,"./format-duration":181,"./set-alarm":184,"./set-contact":185,"./set-description":186,"./set-geolocation":187,"./set-location":188,"./set-organizer":189,"./set-summary":190}],184:[function(require,module,exports){ +"use strict"; - process.nextTick(finishMaybe, stream, state); - stream._writableState.errorEmitted = true; - errorOrDestroy(stream, er); - } else { - // the caller expect this to happen before if - // it is async - cb(er); - stream._writableState.errorEmitted = true; - errorOrDestroy(stream, er); // this can emit finish, but finish must - // always follow error +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setAlarm; - finishMaybe(stream, state); - } -} +var _formatDate = _interopRequireDefault(require("./format-date")); -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} +var _foldLine = _interopRequireDefault(require("./fold-line")); -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK(); - onwriteStateUpdate(state); - if (er) onwriteError(stream, state, sync, er, cb);else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state) || stream.destroyed; +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } +function setDuration(_ref) { + var weeks = _ref.weeks, + days = _ref.days, + hours = _ref.hours, + minutes = _ref.minutes, + seconds = _ref.seconds; + var formattedString = 'P'; + formattedString += weeks ? "".concat(weeks, "W") : ''; + formattedString += days ? "".concat(days, "D") : ''; + formattedString += 'T'; + formattedString += hours ? "".concat(hours, "H") : ''; + formattedString += minutes ? "".concat(minutes, "M") : ''; + formattedString += seconds ? "".concat(seconds, "S") : ''; + return formattedString; +} - if (sync) { - process.nextTick(afterWrite, stream, state, finished, cb); - } else { - afterWrite(stream, state, finished, cb); - } +function setTrigger(trigger) { + var formattedString = ''; + + if (Array.isArray(trigger)) { + formattedString = "TRIGGER;VALUE=DATE-TIME:".concat((0, _formatDate["default"])(trigger), "\r\n"); + } else { + var alert = trigger.before ? '-' : ''; + formattedString = "TRIGGER:".concat(alert + setDuration(trigger), "\r\n"); } + + return formattedString; } -function afterWrite(stream, state, finished, cb) { - if (!finished) onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} // Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. +function setAction(action) { + return action.toUpperCase(); +} +function setAlarm() { + var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var action = attributes.action, + repeat = attributes.repeat, + description = attributes.description, + duration = attributes.duration, + attach = attributes.attach, + attachType = attributes.attachType, + trigger = attributes.trigger, + summary = attributes.summary; + var formattedString = 'BEGIN:VALARM\r\n'; + formattedString += (0, _foldLine["default"])("ACTION:".concat(setAction(action))) + '\r\n'; + formattedString += repeat ? (0, _foldLine["default"])("REPEAT:".concat(repeat)) + '\r\n' : ''; + formattedString += description ? (0, _foldLine["default"])("DESCRIPTION:".concat(description)) + '\r\n' : ''; + formattedString += duration ? (0, _foldLine["default"])("DURATION:".concat(setDuration(duration))) + '\r\n' : ''; + var attachInfo = attachType ? attachType : 'FMTTYPE=audio/basic'; + formattedString += attach ? (0, _foldLine["default"])("ATTACH;".concat(attachInfo, ":").concat(attach)) + '\r\n' : ''; + formattedString += trigger ? setTrigger(trigger) : ''; + formattedString += summary ? (0, _foldLine["default"])("SUMMARY:".concat(summary)) + '\r\n' : ''; + formattedString += 'END:VALARM\r\n'; + return formattedString; +} // Example: A duration of 15 days, 5 hours, and 20 seconds would be: +// P15DT5H0M20S +// A duration of 7 weeks would be: +// P7W +},{"./fold-line":179,"./format-date":180}],185:[function(require,module,exports){ +"use strict"; -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} // if there's something in the buffer waiting, then process it +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setContact; +function setContact(_ref) { + var name = _ref.name, + email = _ref.email, + rsvp = _ref.rsvp, + dir = _ref.dir, + partstat = _ref.partstat, + role = _ref.role; + var formattedAttendee = ''; + formattedAttendee += rsvp ? 'RSVP=TRUE;' : 'RSVP=FALSE;'; + formattedAttendee += role ? "ROLE=".concat(role, ";") : ''; + formattedAttendee += partstat ? "PARTSTAT=".concat(partstat, ";") : ''; + formattedAttendee += dir ? "DIR=".concat(dir, ";") : ''; + formattedAttendee += 'CN='; + formattedAttendee += name || 'Unnamed attendee'; + formattedAttendee += email ? ":mailto:".concat(email) : ''; + return formattedAttendee; +} +},{}],186:[function(require,module,exports){ +"use strict"; -function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setDescription; - if (stream._writev && entry && entry.next) { - // Fast case, write everything using _writev() - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - var count = 0; - var allBuffers = true; +var _formatText = _interopRequireDefault(require("./format-text")); - while (entry) { - buffer[count] = entry; - if (!entry.isBuf) allBuffers = false; - entry = entry.next; - count += 1; - } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - buffer.allBuffers = allBuffers; - doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time - // as the hot path ends with doWrite +function setDescription(description) { + return (0, _formatText["default"])(description); +} +},{"./format-text":182}],187:[function(require,module,exports){ +"use strict"; - state.pendingcb++; - state.lastBufferedRequest = null; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setGeolocation; - if (holder.next) { - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - state.corkedRequestsFree = new CorkedRequest(state); - } +function setGeolocation(_ref) { + var lat = _ref.lat, + lon = _ref.lon; + return "".concat(lat, ";").concat(lon); +} +},{}],188:[function(require,module,exports){ +"use strict"; - state.bufferedRequestCount = 0; - } else { - // Slow case, write chunks one-by-one - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setLocation; - if (state.writing) { - break; - } - } +var _formatText = _interopRequireDefault(require("./format-text")); - if (entry === null) state.lastBufferedRequest = null; - } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - state.bufferedRequest = entry; - state.bufferProcessing = false; +function setLocation(location) { + return (0, _formatText["default"])(location); } +},{"./format-text":182}],189:[function(require,module,exports){ +"use strict"; -Writable.prototype._write = function (chunk, encoding, cb) { - cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()')); -}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setOrganizer; -Writable.prototype._writev = null; +function setOrganizer(_ref) { + var name = _ref.name, + email = _ref.email, + dir = _ref.dir; + var formattedOrganizer = ''; + formattedOrganizer += dir ? "DIR=".concat(dir, ";") : ''; + formattedOrganizer += 'CN='; + formattedOrganizer += name || 'Organizer'; + formattedOrganizer += email ? ":mailto:".concat(email) : ''; + return formattedOrganizer; +} +},{}],190:[function(require,module,exports){ +"use strict"; -Writable.prototype.end = function (chunk, encoding, cb) { - var state = this._writableState; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setSummary; - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } +var _formatText = _interopRequireDefault(require("./format-text")); - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - if (state.corked) { - state.corked = 1; - this.uncork(); - } // ignore unnecessary end() calls. +function setSummary(summary) { + return (0, _formatText["default"])(summary); +} +},{"./format-text":182}],191:[function(require,module,exports){ +var ics = require('./dist'); +module.exports = ics; - if (!state.ending) endWritable(this, state, cb); - return this; -}; +},{"./dist":173}],192:[function(require,module,exports){ +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] -Object.defineProperty(Writable.prototype, 'writableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.length; - } -}); + i += d -function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) } -function callFinal(stream, state) { - stream._final(function (err) { - state.pendingcb--; +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - if (err) { - errorOrDestroy(stream, err); - } + value = Math.abs(value) - state.prefinished = true; - stream.emit('prefinish'); - finishMaybe(stream, state); - }); -} + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } -function prefinish(stream, state) { - if (!state.prefinished && !state.finalCalled) { - if (typeof stream._final === 'function' && !state.destroyed) { - state.pendingcb++; - state.finalCalled = true; - process.nextTick(callFinal, stream, state); + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = ((value * c) - 1) * Math.pow(2, mLen) + e = e + eBias } else { - state.prefinished = true; - stream.emit('prefinish'); + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 } } -} - -function finishMaybe(stream, state) { - var need = needFinish(state); - if (need) { - prefinish(stream, state); + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - if (state.pendingcb === 0) { - state.finished = true; - stream.emit('finish'); + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - if (state.autoDestroy) { - // In case of duplex streams we need a way to detect - // if the readable side is ready for autoDestroy as well - var rState = stream._readableState; + buffer[offset + i - d] |= s * 128 +} - if (!rState || rState.autoDestroy && rState.endEmitted) { - stream.destroy(); +},{}],193:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true } - } + }) + } + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor } } - - return need; } -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); +},{}],194:[function(require,module,exports){ +'use strict'; - if (cb) { - if (state.finished) process.nextTick(cb);else stream.once('finish', cb); - } +var ip = exports; +var Buffer = require('buffer').Buffer; +var os = require('os'); - state.ended = true; - stream.writable = false; -} +ip.toBuffer = function(ip, buff, offset) { + offset = ~~offset; -function onCorkedFinish(corkReq, state, err) { - var entry = corkReq.entry; - corkReq.entry = null; + var result; - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; - } // reuse the free corkReq. + if (this.isV4Format(ip)) { + result = buff || new Buffer(offset + 4); + ip.split(/\./g).map(function(byte) { + result[offset++] = parseInt(byte, 10) & 0xff; + }); + } else if (this.isV6Format(ip)) { + var sections = ip.split(':', 8); + var i; + for (i = 0; i < sections.length; i++) { + var isv4 = this.isV4Format(sections[i]); + var v4Buffer; - state.corkedRequestsFree.next = corkReq; -} + if (isv4) { + v4Buffer = this.toBuffer(sections[i]); + sections[i] = v4Buffer.slice(0, 2).toString('hex'); + } -Object.defineProperty(Writable.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._writableState === undefined) { - return false; + if (v4Buffer && ++i < 8) { + sections.splice(i, 0, v4Buffer.slice(2, 4).toString('hex')); + } } - return this._writableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._writableState) { - return; - } // backward compatibility, the user is explicitly - // managing destroyed + if (sections[0] === '') { + while (sections.length < 8) sections.unshift('0'); + } else if (sections[sections.length - 1] === '') { + while (sections.length < 8) sections.push('0'); + } else if (sections.length < 8) { + for (i = 0; i < sections.length && sections[i] !== ''; i++); + var argv = [ i, 1 ]; + for (i = 9 - sections.length; i > 0; i--) { + argv.push('0'); + } + sections.splice.apply(sections, argv); + } + result = buff || new Buffer(offset + 16); + for (i = 0; i < sections.length; i++) { + var word = parseInt(sections[i], 16); + result[offset++] = (word >> 8) & 0xff; + result[offset++] = word & 0xff; + } + } - this._writableState.destroyed = value; + if (!result) { + throw Error('Invalid ip address: ' + ip); } -}); -Writable.prototype.destroy = destroyImpl.destroy; -Writable.prototype._undestroy = destroyImpl.undestroy; -Writable.prototype._destroy = function (err, cb) { - cb(err); + return result; }; -}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../errors":143,"./_stream_duplex":144,"./internal/streams/destroy":151,"./internal/streams/state":155,"./internal/streams/stream":156,"_process":390,"buffer":69,"inherits":193,"util-deprecate":588}],149:[function(require,module,exports){ -(function (process){(function (){ -'use strict'; +ip.toString = function(buff, offset, length) { + offset = ~~offset; + length = length || (buff.length - offset); -var _Object$setPrototypeO; + var result = []; + if (length === 4) { + // IPv4 + for (var i = 0; i < length; i++) { + result.push(buff[offset + i]); + } + result = result.join('.'); + } else if (length === 16) { + // IPv6 + for (var i = 0; i < length; i += 2) { + result.push(buff.readUInt16BE(offset + i).toString(16)); + } + result = result.join(':'); + result = result.replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3'); + result = result.replace(/:{3,4}/, '::'); + } -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + return result; +}; -var finished = require('./end-of-stream'); +var ipv4Regex = /^(\d{1,3}\.){3,3}\d{1,3}$/; +var ipv6Regex = + /^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i; -var kLastResolve = Symbol('lastResolve'); -var kLastReject = Symbol('lastReject'); -var kError = Symbol('error'); -var kEnded = Symbol('ended'); -var kLastPromise = Symbol('lastPromise'); -var kHandlePromise = Symbol('handlePromise'); -var kStream = Symbol('stream'); +ip.isV4Format = function(ip) { + return ipv4Regex.test(ip); +}; -function createIterResult(value, done) { - return { - value: value, - done: done - }; +ip.isV6Format = function(ip) { + return ipv6Regex.test(ip); +}; +function _normalizeFamily(family) { + return family ? family.toLowerCase() : 'ipv4'; } -function readAndResolve(iter) { - var resolve = iter[kLastResolve]; - - if (resolve !== null) { - var data = iter[kStream].read(); // we defer if data is null - // we can be expecting either 'end' or - // 'error' - - if (data !== null) { - iter[kLastPromise] = null; - iter[kLastResolve] = null; - iter[kLastReject] = null; - resolve(createIterResult(data, false)); - } +ip.fromPrefixLen = function(prefixlen, family) { + if (prefixlen > 32) { + family = 'ipv6'; + } else { + family = _normalizeFamily(family); } -} -function onReadable(iter) { - // we wait for the next tick, because it might - // emit an error with process.nextTick - process.nextTick(readAndResolve, iter); -} + var len = 4; + if (family === 'ipv6') { + len = 16; + } + var buff = new Buffer(len); -function wrapForNext(lastPromise, iter) { - return function (resolve, reject) { - lastPromise.then(function () { - if (iter[kEnded]) { - resolve(createIterResult(undefined, true)); - return; - } + for (var i = 0, n = buff.length; i < n; ++i) { + var bits = 8; + if (prefixlen < 8) { + bits = prefixlen; + } + prefixlen -= bits; - iter[kHandlePromise](resolve, reject); - }, reject); - }; -} + buff[i] = ~(0xff >> bits) & 0xff; + } -var AsyncIteratorPrototype = Object.getPrototypeOf(function () {}); -var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = { - get stream() { - return this[kStream]; - }, + return ip.toString(buff); +}; - next: function next() { - var _this = this; +ip.mask = function(addr, mask) { + addr = ip.toBuffer(addr); + mask = ip.toBuffer(mask); - // if we have detected an error in the meanwhile - // reject straight away - var error = this[kError]; + var result = new Buffer(Math.max(addr.length, mask.length)); - if (error !== null) { - return Promise.reject(error); + var i = 0; + // Same protocol - do bitwise and + if (addr.length === mask.length) { + for (i = 0; i < addr.length; i++) { + result[i] = addr[i] & mask[i]; } - - if (this[kEnded]) { - return Promise.resolve(createIterResult(undefined, true)); + } else if (mask.length === 4) { + // IPv6 address and IPv4 mask + // (Mask low bits) + for (i = 0; i < mask.length; i++) { + result[i] = addr[addr.length - 4 + i] & mask[i]; } - - if (this[kStream].destroyed) { - // We need to defer via nextTick because if .destroy(err) is - // called, the error will be emitted via nextTick, and - // we cannot guarantee that there is no error lingering around - // waiting to be emitted. - return new Promise(function (resolve, reject) { - process.nextTick(function () { - if (_this[kError]) { - reject(_this[kError]); - } else { - resolve(createIterResult(undefined, true)); - } - }); - }); - } // if we have multiple next() calls - // we will wait for the previous Promise to finish - // this logic is optimized to support for await loops, - // where next() is only called once at a time - - - var lastPromise = this[kLastPromise]; - var promise; - - if (lastPromise) { - promise = new Promise(wrapForNext(lastPromise, this)); - } else { - // fast path needed to support multiple this.push() - // without triggering the next() queue - var data = this[kStream].read(); - - if (data !== null) { - return Promise.resolve(createIterResult(data, false)); - } - - promise = new Promise(this[kHandlePromise]); + } else { + // IPv6 mask and IPv4 addr + for (var i = 0; i < result.length - 6; i++) { + result[i] = 0; } - this[kLastPromise] = promise; - return promise; + // ::ffff:ipv4 + result[10] = 0xff; + result[11] = 0xff; + for (i = 0; i < addr.length; i++) { + result[i + 12] = addr[i] & mask[i + 12]; + } + i = i + 12; } -}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () { - return this; -}), _defineProperty(_Object$setPrototypeO, "return", function _return() { - var _this2 = this; + for (; i < result.length; i++) + result[i] = 0; - // destroy(err, cb) is a private API - // we can guarantee we have that here, because we control the - // Readable class this is attached to - return new Promise(function (resolve, reject) { - _this2[kStream].destroy(null, function (err) { - if (err) { - reject(err); - return; - } + return ip.toString(result); +}; - resolve(createIterResult(undefined, true)); - }); - }); -}), _Object$setPrototypeO), AsyncIteratorPrototype); +ip.cidr = function(cidrString) { + var cidrParts = cidrString.split('/'); -var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) { - var _Object$create; + var addr = cidrParts[0]; + if (cidrParts.length !== 2) + throw new Error('invalid CIDR subnet: ' + addr); - var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, { - value: stream, - writable: true - }), _defineProperty(_Object$create, kLastResolve, { - value: null, - writable: true - }), _defineProperty(_Object$create, kLastReject, { - value: null, - writable: true - }), _defineProperty(_Object$create, kError, { - value: null, - writable: true - }), _defineProperty(_Object$create, kEnded, { - value: stream._readableState.endEmitted, - writable: true - }), _defineProperty(_Object$create, kHandlePromise, { - value: function value(resolve, reject) { - var data = iterator[kStream].read(); + var mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10)); - if (data) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - resolve(createIterResult(data, false)); - } else { - iterator[kLastResolve] = resolve; - iterator[kLastReject] = reject; - } - }, - writable: true - }), _Object$create)); - iterator[kLastPromise] = null; - finished(stream, function (err) { - if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') { - var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise - // returned by next() and store the error + return ip.mask(addr, mask); +}; - if (reject !== null) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - reject(err); - } +ip.subnet = function(addr, mask) { + var networkAddress = ip.toLong(ip.mask(addr, mask)); - iterator[kError] = err; - return; + // Calculate the mask's length. + var maskBuffer = ip.toBuffer(mask); + var maskLength = 0; + + for (var i = 0; i < maskBuffer.length; i++) { + if (maskBuffer[i] === 0xff) { + maskLength += 8; + } else { + var octet = maskBuffer[i] & 0xff; + while (octet) { + octet = (octet << 1) & 0xff; + maskLength++; + } } + } - var resolve = iterator[kLastResolve]; + var numberOfAddresses = Math.pow(2, 32 - maskLength); - if (resolve !== null) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - resolve(createIterResult(undefined, true)); + return { + networkAddress: ip.fromLong(networkAddress), + firstAddress: numberOfAddresses <= 2 ? + ip.fromLong(networkAddress) : + ip.fromLong(networkAddress + 1), + lastAddress: numberOfAddresses <= 2 ? + ip.fromLong(networkAddress + numberOfAddresses - 1) : + ip.fromLong(networkAddress + numberOfAddresses - 2), + broadcastAddress: ip.fromLong(networkAddress + numberOfAddresses - 1), + subnetMask: mask, + subnetMaskLength: maskLength, + numHosts: numberOfAddresses <= 2 ? + numberOfAddresses : numberOfAddresses - 2, + length: numberOfAddresses, + contains: function(other) { + return networkAddress === ip.toLong(ip.mask(other, mask)); } - - iterator[kEnded] = true; - }); - stream.on('readable', onReadable.bind(null, iterator)); - return iterator; + }; }; -module.exports = createReadableStreamAsyncIterator; -}).call(this)}).call(this,require('_process')) - -},{"./end-of-stream":152,"_process":390}],150:[function(require,module,exports){ -arguments[4][59][0].apply(exports,arguments) -},{"buffer":69,"dup":59,"util":24}],151:[function(require,module,exports){ -(function (process){(function (){ -'use strict'; // undocumented cb() API, needed for core, not for public API - -function destroy(err, cb) { - var _this = this; +ip.cidrSubnet = function(cidrString) { + var cidrParts = cidrString.split('/'); - var readableDestroyed = this._readableState && this._readableState.destroyed; - var writableDestroyed = this._writableState && this._writableState.destroyed; + var addr = cidrParts[0]; + if (cidrParts.length !== 2) + throw new Error('invalid CIDR subnet: ' + addr); - if (readableDestroyed || writableDestroyed) { - if (cb) { - cb(err); - } else if (err) { - if (!this._writableState) { - process.nextTick(emitErrorNT, this, err); - } else if (!this._writableState.errorEmitted) { - this._writableState.errorEmitted = true; - process.nextTick(emitErrorNT, this, err); - } - } + var mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10)); - return this; - } // we set destroyed to true before firing error callbacks in order - // to make it re-entrance safe in case destroy() is called within callbacks + return ip.subnet(addr, mask); +}; +ip.not = function(addr) { + var buff = ip.toBuffer(addr); + for (var i = 0; i < buff.length; i++) { + buff[i] = 0xff ^ buff[i]; + } + return ip.toString(buff); +}; - if (this._readableState) { - this._readableState.destroyed = true; - } // if this is a duplex stream mark the writable part as destroyed as well +ip.or = function(a, b) { + a = ip.toBuffer(a); + b = ip.toBuffer(b); + // same protocol + if (a.length === b.length) { + for (var i = 0; i < a.length; ++i) { + a[i] |= b[i]; + } + return ip.toString(a); - if (this._writableState) { - this._writableState.destroyed = true; - } + // mixed protocols + } else { + var buff = a; + var other = b; + if (b.length > a.length) { + buff = b; + other = a; + } - this._destroy(err || null, function (err) { - if (!cb && err) { - if (!_this._writableState) { - process.nextTick(emitErrorAndCloseNT, _this, err); - } else if (!_this._writableState.errorEmitted) { - _this._writableState.errorEmitted = true; - process.nextTick(emitErrorAndCloseNT, _this, err); - } else { - process.nextTick(emitCloseNT, _this); - } - } else if (cb) { - process.nextTick(emitCloseNT, _this); - cb(err); - } else { - process.nextTick(emitCloseNT, _this); + var offset = buff.length - other.length; + for (var i = offset; i < buff.length; ++i) { + buff[i] |= other[i - offset]; } - }); - return this; -} + return ip.toString(buff); + } +}; -function emitErrorAndCloseNT(self, err) { - emitErrorNT(self, err); - emitCloseNT(self); -} +ip.isEqual = function(a, b) { + a = ip.toBuffer(a); + b = ip.toBuffer(b); -function emitCloseNT(self) { - if (self._writableState && !self._writableState.emitClose) return; - if (self._readableState && !self._readableState.emitClose) return; - self.emit('close'); -} + // Same protocol + if (a.length === b.length) { + for (var i = 0; i < a.length; i++) { + if (a[i] !== b[i]) return false; + } + return true; + } -function undestroy() { - if (this._readableState) { - this._readableState.destroyed = false; - this._readableState.reading = false; - this._readableState.ended = false; - this._readableState.endEmitted = false; + // Swap + if (b.length === 4) { + var t = b; + b = a; + a = t; } - if (this._writableState) { - this._writableState.destroyed = false; - this._writableState.ended = false; - this._writableState.ending = false; - this._writableState.finalCalled = false; - this._writableState.prefinished = false; - this._writableState.finished = false; - this._writableState.errorEmitted = false; + // a - IPv4, b - IPv6 + for (var i = 0; i < 10; i++) { + if (b[i] !== 0) return false; } -} -function emitErrorNT(self, err) { - self.emit('error', err); -} + var word = b.readUInt16BE(10); + if (word !== 0 && word !== 0xffff) return false; -function errorOrDestroy(stream, err) { - // We have tests that rely on errors being emitted - // in the same tick, so changing this is semver major. - // For now when you opt-in to autoDestroy we allow - // the error to be emitted nextTick. In a future - // semver major update we should change the default to this. - var rState = stream._readableState; - var wState = stream._writableState; - if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err); -} + for (var i = 0; i < 4; i++) { + if (a[i] !== b[i + 12]) return false; + } -module.exports = { - destroy: destroy, - undestroy: undestroy, - errorOrDestroy: errorOrDestroy + return true; }; -}).call(this)}).call(this,require('_process')) -},{"_process":390}],152:[function(require,module,exports){ -arguments[4][61][0].apply(exports,arguments) -},{"../../../errors":143,"dup":61}],153:[function(require,module,exports){ -arguments[4][62][0].apply(exports,arguments) -},{"dup":62}],154:[function(require,module,exports){ -arguments[4][63][0].apply(exports,arguments) -},{"../../../errors":143,"./end-of-stream":152,"dup":63}],155:[function(require,module,exports){ -arguments[4][64][0].apply(exports,arguments) -},{"../../../errors":143,"dup":64}],156:[function(require,module,exports){ -arguments[4][65][0].apply(exports,arguments) -},{"dup":65,"events":129}],157:[function(require,module,exports){ -arguments[4][66][0].apply(exports,arguments) -},{"./lib/_stream_duplex.js":144,"./lib/_stream_passthrough.js":145,"./lib/_stream_readable.js":146,"./lib/_stream_transform.js":147,"./lib/_stream_writable.js":148,"./lib/internal/streams/end-of-stream.js":152,"./lib/internal/streams/pipeline.js":154,"dup":66}],158:[function(require,module,exports){ -var hash = exports; +ip.isPrivate = function(addr) { + return /^(::f{4}:)?10\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i + .test(addr) || + /^(::f{4}:)?192\.168\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || + /^(::f{4}:)?172\.(1[6-9]|2\d|30|31)\.([0-9]{1,3})\.([0-9]{1,3})$/i + .test(addr) || + /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || + /^(::f{4}:)?169\.254\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || + /^f[cd][0-9a-f]{2}:/i.test(addr) || + /^fe80:/i.test(addr) || + /^::1$/.test(addr) || + /^::$/.test(addr); +}; -hash.utils = require('./hash/utils'); -hash.common = require('./hash/common'); -hash.sha = require('./hash/sha'); -hash.ripemd = require('./hash/ripemd'); -hash.hmac = require('./hash/hmac'); +ip.isPublic = function(addr) { + return !ip.isPrivate(addr); +}; -// Proxy hash functions to the main object -hash.sha1 = hash.sha.sha1; -hash.sha256 = hash.sha.sha256; -hash.sha224 = hash.sha.sha224; -hash.sha384 = hash.sha.sha384; -hash.sha512 = hash.sha.sha512; -hash.ripemd160 = hash.ripemd.ripemd160; +ip.isLoopback = function(addr) { + return /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/ + .test(addr) || + /^fe80::1$/.test(addr) || + /^::1$/.test(addr) || + /^::$/.test(addr); +}; -},{"./hash/common":159,"./hash/hmac":160,"./hash/ripemd":161,"./hash/sha":162,"./hash/utils":169}],159:[function(require,module,exports){ -'use strict'; +ip.loopback = function(family) { + // + // Default to `ipv4` + // + family = _normalizeFamily(family); -var utils = require('./utils'); -var assert = require('minimalistic-assert'); + if (family !== 'ipv4' && family !== 'ipv6') { + throw new Error('family must be ipv4 or ipv6'); + } -function BlockHash() { - this.pending = null; - this.pendingTotal = 0; - this.blockSize = this.constructor.blockSize; - this.outSize = this.constructor.outSize; - this.hmacStrength = this.constructor.hmacStrength; - this.padLength = this.constructor.padLength / 8; - this.endian = 'big'; + return family === 'ipv4' ? '127.0.0.1' : 'fe80::1'; +}; - this._delta8 = this.blockSize / 8; - this._delta32 = this.blockSize / 32; -} -exports.BlockHash = BlockHash; +// +// ### function address (name, family) +// #### @name {string|'public'|'private'} **Optional** Name or security +// of the network interface. +// #### @family {ipv4|ipv6} **Optional** IP family of the address (defaults +// to ipv4). +// +// Returns the address for the network interface on the current system with +// the specified `name`: +// * String: First `family` address of the interface. +// If not found see `undefined`. +// * 'public': the first public ip address of family. +// * 'private': the first private ip address of family. +// * undefined: First address with `ipv4` or loopback address `127.0.0.1`. +// +ip.address = function(name, family) { + var interfaces = os.networkInterfaces(); + var all; -BlockHash.prototype.update = function update(msg, enc) { - // Convert message to array, pad it, and join into 32bit blocks - msg = utils.toArray(msg, enc); - if (!this.pending) - this.pending = msg; - else - this.pending = this.pending.concat(msg); - this.pendingTotal += msg.length; + // + // Default to `ipv4` + // + family = _normalizeFamily(family); - // Enough data, try updating - if (this.pending.length >= this._delta8) { - msg = this.pending; + // + // If a specific network interface has been named, + // return the address. + // + if (name && name !== 'private' && name !== 'public') { + var res = interfaces[name].filter(function(details) { + var itemFamily = details.family.toLowerCase(); + return itemFamily === family; + }); + if (res.length === 0) + return undefined; + return res[0].address; + } - // Process pending data in blocks - var r = msg.length % this._delta8; - this.pending = msg.slice(msg.length - r, msg.length); - if (this.pending.length === 0) - this.pending = null; + var all = Object.keys(interfaces).map(function (nic) { + // + // Note: name will only be `public` or `private` + // when this is called. + // + var addresses = interfaces[nic].filter(function (details) { + details.family = details.family.toLowerCase(); + if (details.family !== family || ip.isLoopback(details.address)) { + return false; + } else if (!name) { + return true; + } - msg = utils.join32(msg, 0, msg.length - r, this.endian); - for (var i = 0; i < msg.length; i += this._delta32) - this._update(msg, i, i + this._delta32); - } + return name === 'public' ? ip.isPrivate(details.address) : + ip.isPublic(details.address); + }); - return this; -}; + return addresses.length ? addresses[0].address : undefined; + }).filter(Boolean); -BlockHash.prototype.digest = function digest(enc) { - this.update(this._pad()); - assert(this.pending === null); + return !all.length ? ip.loopback(family) : all[0]; +}; - return this._digest(enc); +ip.toLong = function(ip) { + var ipl = 0; + ip.split('.').forEach(function(octet) { + ipl <<= 8; + ipl += parseInt(octet); + }); + return(ipl >>> 0); }; -BlockHash.prototype._pad = function pad() { - var len = this.pendingTotal; - var bytes = this._delta8; - var k = bytes - ((len + this.padLength) % bytes); - var res = new Array(k + this.padLength); - res[0] = 0x80; - for (var i = 1; i < k; i++) - res[i] = 0; +ip.fromLong = function(ipl) { + return ((ipl >>> 24) + '.' + + (ipl >> 16 & 255) + '.' + + (ipl >> 8 & 255) + '.' + + (ipl & 255) ); +}; - // Append length - len <<= 3; - if (this.endian === 'big') { - for (var t = 8; t < this.padLength; t++) - res[i++] = 0; +},{"buffer":69,"os":376}],195:[function(require,module,exports){ +'use strict'; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = (len >>> 24) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = len & 0xff; - } else { - res[i++] = len & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 24) & 0xff; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; +var hasToStringTag = require('has-tostringtag/shams')(); +var callBound = require('call-bind/callBound'); - for (t = 8; t < this.padLength; t++) - res[i++] = 0; - } +var $toString = callBound('Object.prototype.toString'); - return res; +var isStandardArguments = function isArguments(value) { + if (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) { + return false; + } + return $toString(value) === '[object Arguments]'; }; -},{"./utils":169,"minimalistic-assert":363}],160:[function(require,module,exports){ -'use strict'; +var isLegacyArguments = function isArguments(value) { + if (isStandardArguments(value)) { + return true; + } + return value !== null && + typeof value === 'object' && + typeof value.length === 'number' && + value.length >= 0 && + $toString(value) !== '[object Array]' && + $toString(value.callee) === '[object Function]'; +}; -var utils = require('./utils'); -var assert = require('minimalistic-assert'); +var supportsStandardArguments = (function () { + return isStandardArguments(arguments); +}()); -function Hmac(hash, key, enc) { - if (!(this instanceof Hmac)) - return new Hmac(hash, key, enc); - this.Hash = hash; - this.blockSize = hash.blockSize / 8; - this.outSize = hash.outSize / 8; - this.inner = null; - this.outer = null; +isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests - this._init(utils.toArray(key, enc)); -} -module.exports = Hmac; +module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments; -Hmac.prototype._init = function init(key) { - // Shorten key, if needed - if (key.length > this.blockSize) - key = new this.Hash().update(key).digest(); - assert(key.length <= this.blockSize); +},{"call-bind/callBound":71,"has-tostringtag/shams":140}],196:[function(require,module,exports){ - // Add padding to key - for (var i = key.length; i < this.blockSize; i++) - key.push(0); +var char = '[a-zA-Z0-9\/\+]' +var trail2 = '[AQgw]==' +var trail4 = '[AEIMQUYcgkosw048]=' +var rx = '(?:' +char+ '{4})*(?:' +char+ '(?:(?:' +trail2 + ')|(?:' +char+trail4+ ')))?' +module.exports = function (prefix,suffix, length) { + if(!Number.isInteger(length)) return new RegExp('^'+(prefix||'')+rx+(suffix||'')+'$') - for (i = 0; i < key.length; i++) - key[i] ^= 0x36; - this.inner = new this.Hash().update(key); + var mod = length % 3 - // 0x36 ^ 0x5c = 0x6a - for (i = 0; i < key.length; i++) - key[i] ^= 0x6a; - this.outer = new this.Hash().update(key); -}; + return new RegExp('^'+(prefix||'')+( + char +'{'+~~((length*8)/6)+'}' + ( + mod === 0 ? '' + : mod === 1 ? trail2 + : trail4 + ) + )+(suffix||'')+'$') +} -Hmac.prototype.update = function update(msg, enc) { - this.inner.update(msg, enc); - return this; -}; -Hmac.prototype.digest = function digest(enc) { - this.outer.update(this.inner.digest()); - return this.outer.digest(enc); -}; -},{"./utils":169,"minimalistic-assert":363}],161:[function(require,module,exports){ -'use strict'; -var utils = require('./utils'); -var common = require('./common'); -var rotl32 = utils.rotl32; -var sum32 = utils.sum32; -var sum32_3 = utils.sum32_3; -var sum32_4 = utils.sum32_4; -var BlockHash = common.BlockHash; -function RIPEMD160() { - if (!(this instanceof RIPEMD160)) - return new RIPEMD160(); - BlockHash.call(this); - this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; - this.endian = 'little'; -} -utils.inherits(RIPEMD160, BlockHash); -exports.ripemd160 = RIPEMD160; -RIPEMD160.blockSize = 512; -RIPEMD160.outSize = 160; -RIPEMD160.hmacStrength = 192; -RIPEMD160.padLength = 64; -RIPEMD160.prototype._update = function update(msg, start) { - var A = this.h[0]; - var B = this.h[1]; - var C = this.h[2]; - var D = this.h[3]; - var E = this.h[4]; - var Ah = A; - var Bh = B; - var Ch = C; - var Dh = D; - var Eh = E; - for (var j = 0; j < 80; j++) { - var T = sum32( - rotl32( - sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), - s[j]), - E); - A = E; - E = D; - D = rotl32(C, 10); - C = B; - B = T; - T = sum32( - rotl32( - sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), - sh[j]), - Eh); - Ah = Eh; - Eh = Dh; - Dh = rotl32(Ch, 10); - Ch = Bh; - Bh = T; - } - T = sum32_3(this.h[1], C, Dh); - this.h[1] = sum32_3(this.h[2], D, Eh); - this.h[2] = sum32_3(this.h[3], E, Ah); - this.h[3] = sum32_3(this.h[4], A, Bh); - this.h[4] = sum32_3(this.h[0], B, Ch); - this.h[0] = T; -}; -RIPEMD160.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'little'); - else - return utils.split32(this.h, 'little'); -}; -function f(j, x, y, z) { - if (j <= 15) - return x ^ y ^ z; - else if (j <= 31) - return (x & y) | ((~x) & z); - else if (j <= 47) - return (x | (~y)) ^ z; - else if (j <= 63) - return (x & z) | (y & (~z)); - else - return x ^ (y | (~z)); -} -function K(j) { - if (j <= 15) - return 0x00000000; - else if (j <= 31) - return 0x5a827999; - else if (j <= 47) - return 0x6ed9eba1; - else if (j <= 63) - return 0x8f1bbcdc; - else - return 0xa953fd4e; -} -function Kh(j) { - if (j <= 15) - return 0x50a28be6; - else if (j <= 31) - return 0x5c4dd124; - else if (j <= 47) - return 0x6d703ef3; - else if (j <= 63) - return 0x7a6d76e9; - else - return 0x00000000; -} -var r = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 -]; -var rh = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 -]; +},{}],197:[function(require,module,exports){ +'use strict'; -var s = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 -]; +var toStr = Object.prototype.toString; +var fnToStr = Function.prototype.toString; +var isFnRegex = /^\s*(?:function)?\*/; +var hasToStringTag = require('has-tostringtag/shams')(); +var getProto = Object.getPrototypeOf; +var getGeneratorFunc = function () { // eslint-disable-line consistent-return + if (!hasToStringTag) { + return false; + } + try { + return Function('return function*() {}')(); + } catch (e) { + } +}; +var GeneratorFunction; -var sh = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 -]; +module.exports = function isGeneratorFunction(fn) { + if (typeof fn !== 'function') { + return false; + } + if (isFnRegex.test(fnToStr.call(fn))) { + return true; + } + if (!hasToStringTag) { + var str = toStr.call(fn); + return str === '[object GeneratorFunction]'; + } + if (!getProto) { + return false; + } + if (typeof GeneratorFunction === 'undefined') { + var generatorFunc = getGeneratorFunc(); + GeneratorFunction = generatorFunc ? getProto(generatorFunc) : false; + } + return getProto(fn) === GeneratorFunction; +}; -},{"./common":159,"./utils":169}],162:[function(require,module,exports){ -'use strict'; +},{"has-tostringtag/shams":140}],198:[function(require,module,exports){ +var reIpv4FirstPass = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ -exports.sha1 = require('./sha/1'); -exports.sha224 = require('./sha/224'); -exports.sha256 = require('./sha/256'); -exports.sha384 = require('./sha/384'); -exports.sha512 = require('./sha/512'); +var reSubnetString = /\/\d{1,3}(?=%|$)/ +var reForwardSlash = /\// +var reZone = /%.*$/ +var reBadCharacters = /([^0-9a-f:/%])/i +var reBadAddress = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]|\/$)/i -},{"./sha/1":163,"./sha/224":164,"./sha/256":165,"./sha/384":166,"./sha/512":167}],163:[function(require,module,exports){ -'use strict'; +function validate4 (input) { + if (!(reIpv4FirstPass.test(input))) return false -var utils = require('../utils'); -var common = require('../common'); -var shaCommon = require('./common'); + var parts = input.split('.') -var rotl32 = utils.rotl32; -var sum32 = utils.sum32; -var sum32_5 = utils.sum32_5; -var ft_1 = shaCommon.ft_1; -var BlockHash = common.BlockHash; + if (parts.length !== 4) return false -var sha1_K = [ - 0x5A827999, 0x6ED9EBA1, - 0x8F1BBCDC, 0xCA62C1D6 -]; + if (parts[0][0] === '0' && parts[0].length > 1) return false + if (parts[1][0] === '0' && parts[1].length > 1) return false + if (parts[2][0] === '0' && parts[2].length > 1) return false + if (parts[3][0] === '0' && parts[3].length > 1) return false -function SHA1() { - if (!(this instanceof SHA1)) - return new SHA1(); + var n0 = Number(parts[0]) + var n1 = Number(parts[1]) + var n2 = Number(parts[2]) + var n3 = Number(parts[3]) - BlockHash.call(this); - this.h = [ - 0x67452301, 0xefcdab89, 0x98badcfe, - 0x10325476, 0xc3d2e1f0 ]; - this.W = new Array(80); + return (n0 >= 0 && n0 < 256 && n1 >= 0 && n1 < 256 && n2 >= 0 && n2 < 256 && n3 >= 0 && n3 < 256) } -utils.inherits(SHA1, BlockHash); -module.exports = SHA1; - -SHA1.blockSize = 512; -SHA1.outSize = 160; -SHA1.hmacStrength = 80; -SHA1.padLength = 64; +function validate6 (input) { + var withoutSubnet = input.replace(reSubnetString, '') + var hasSubnet = (input.length !== withoutSubnet.length) -SHA1.prototype._update = function _update(msg, start) { - var W = this.W; + // FIXME: this should probably be an option in the future + if (hasSubnet) return false - for (var i = 0; i < 16; i++) - W[i] = msg[start + i]; + if (!hasSubnet) { + if (reForwardSlash.test(input)) return false + } - for(; i < W.length; i++) - W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + var withoutZone = withoutSubnet.replace(reZone, '') + var lastPartSeparator = withoutZone.lastIndexOf(':') - var a = this.h[0]; - var b = this.h[1]; - var c = this.h[2]; - var d = this.h[3]; - var e = this.h[4]; + if (lastPartSeparator === -1) return false - for (i = 0; i < W.length; i++) { - var s = ~~(i / 20); - var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); - e = d; - d = c; - c = rotl32(b, 30); - b = a; - a = t; - } + var lastPart = withoutZone.substring(lastPartSeparator + 1) + var hasV4Part = validate4(lastPart) + var address = (hasV4Part ? withoutZone.substring(0, lastPartSeparator + 1) + '1234:5678' : withoutZone) - this.h[0] = sum32(this.h[0], a); - this.h[1] = sum32(this.h[1], b); - this.h[2] = sum32(this.h[2], c); - this.h[3] = sum32(this.h[3], d); - this.h[4] = sum32(this.h[4], e); -}; + if (reBadCharacters.test(address)) return false + if (reBadAddress.test(address)) return false -SHA1.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; + var halves = address.split('::') -},{"../common":159,"../utils":169,"./common":168}],164:[function(require,module,exports){ -'use strict'; + if (halves.length > 2) return false -var utils = require('../utils'); -var SHA256 = require('./256'); + if (halves.length === 2) { + var first = (halves[0] === '' ? [] : halves[0].split(':')) + var last = (halves[1] === '' ? [] : halves[1].split(':')) + var remainingLength = 8 - (first.length + last.length) -function SHA224() { - if (!(this instanceof SHA224)) - return new SHA224(); + if (remainingLength <= 0) return false + } else { + if (address.split(':').length !== 8) return false + } - SHA256.call(this); - this.h = [ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; + return true } -utils.inherits(SHA224, SHA256); -module.exports = SHA224; -SHA224.blockSize = 512; -SHA224.outSize = 224; -SHA224.hmacStrength = 192; -SHA224.padLength = 64; +function validate (input) { + return validate4(input) || validate6(input) +} -SHA224.prototype._digest = function digest(enc) { - // Just truncate output - if (enc === 'hex') - return utils.toHex32(this.h.slice(0, 7), 'big'); - else - return utils.split32(this.h.slice(0, 7), 'big'); -}; +module.exports = function validator (options) { + if (!options) options = {} + if (options.version === 4) return validate4 + if (options.version === 6) return validate6 + if (options.version == null) return validate -},{"../utils":169,"./256":165}],165:[function(require,module,exports){ -'use strict'; + throw new Error('Unknown version: ' + options.version) +} -var utils = require('../utils'); -var common = require('../common'); -var shaCommon = require('./common'); -var assert = require('minimalistic-assert'); +module.exports['__all_regexes__'] = [ + reIpv4FirstPass, + reSubnetString, + reForwardSlash, + reZone, + reBadCharacters, + reBadAddress +] -var sum32 = utils.sum32; -var sum32_4 = utils.sum32_4; -var sum32_5 = utils.sum32_5; -var ch32 = shaCommon.ch32; -var maj32 = shaCommon.maj32; -var s0_256 = shaCommon.s0_256; -var s1_256 = shaCommon.s1_256; -var g0_256 = shaCommon.g0_256; -var g1_256 = shaCommon.g1_256; +},{}],199:[function(require,module,exports){ +var createIpValidator = require('is-my-ip-valid') -var BlockHash = common.BlockHash; +var reEmailWhitespace = /\s/ +var reHostnameFirstPass = /^[a-zA-Z0-9.-]+$/ +var reHostnamePart = /^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/ +var rePhoneFirstPass = /^\+[0-9][0-9 ]{5,27}[0-9]$/ +var rePhoneDoubleSpace = / {2}/ +var rePhoneGlobalSpace = / /g -var sha256_K = [ - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, - 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, - 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, - 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, - 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, - 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, - 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -]; +exports['date-time'] = /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}[tT ]\d{2}:\d{2}:\d{2}(?:\.\d+|)([zZ]|[+-]\d{2}:\d{2})$/ +exports['date'] = /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}$/ +exports['time'] = /^\d{2}:\d{2}:\d{2}$/ +exports['email'] = function (input) { return (input.indexOf('@') !== -1) && (!reEmailWhitespace.test(input)) } +exports['ip-address'] = exports['ipv4'] = createIpValidator({ version: 4 }) +exports['ipv6'] = createIpValidator({ version: 6 }) +exports['uri'] = /^[a-zA-Z][a-zA-Z0-9+\-.]*:[^\s]*$/ +exports['color'] = /(#?([0-9A-Fa-f]{3,6})\b)|(aqua)|(black)|(blue)|(fuchsia)|(gray)|(green)|(lime)|(maroon)|(navy)|(olive)|(orange)|(purple)|(red)|(silver)|(teal)|(white)|(yellow)|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\))/ +exports['hostname'] = function (input) { + if (!(reHostnameFirstPass.test(input))) return false -function SHA256() { - if (!(this instanceof SHA256)) - return new SHA256(); + var parts = input.split('.') - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, - 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 - ]; - this.k = sha256_K; - this.W = new Array(64); + for (var i = 0; i < parts.length; i++) { + if (!(reHostnamePart.test(parts[i]))) return false + } + + return true } -utils.inherits(SHA256, BlockHash); -module.exports = SHA256; +exports['alpha'] = /^[a-zA-Z]+$/ +exports['alphanumeric'] = /^[a-zA-Z0-9]+$/ +exports['style'] = /.:\s*[^;]/g +exports['phone'] = function (input) { + if (!(rePhoneFirstPass.test(input))) return false + if (rePhoneDoubleSpace.test(input)) return false -SHA256.blockSize = 512; -SHA256.outSize = 256; -SHA256.hmacStrength = 192; -SHA256.padLength = 64; + var digits = input.substring(1).replace(rePhoneGlobalSpace, '').length -SHA256.prototype._update = function _update(msg, start) { - var W = this.W; + return (digits >= 7 && digits <= 15) +} +exports['utc-millisec'] = /^[0-9]{1,15}\.?[0-9]{0,15}$/ - for (var i = 0; i < 16; i++) - W[i] = msg[start + i]; - for (; i < W.length; i++) - W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); +},{"is-my-ip-valid":198}],200:[function(require,module,exports){ +var genobj = require('generate-object-property') +var genfun = require('generate-function') +var jsonpointer = require('jsonpointer') +var xtend = require('xtend') +var formats = require('./formats') - var a = this.h[0]; - var b = this.h[1]; - var c = this.h[2]; - var d = this.h[3]; - var e = this.h[4]; - var f = this.h[5]; - var g = this.h[6]; - var h = this.h[7]; +var get = function(obj, additionalSchemas, ptr) { - assert(this.k.length === W.length); - for (i = 0; i < W.length; i++) { - var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); - var T2 = sum32(s0_256(a), maj32(a, b, c)); - h = g; - g = f; - f = e; - e = sum32(d, T1); - d = c; - c = b; - b = a; - a = sum32(T1, T2); + var visit = function(sub) { + if (sub && sub.id === ptr) return sub + if (typeof sub !== 'object' || !sub) return null + return Object.keys(sub).reduce(function(res, k) { + return res || visit(sub[k]) + }, null) } - this.h[0] = sum32(this.h[0], a); - this.h[1] = sum32(this.h[1], b); - this.h[2] = sum32(this.h[2], c); - this.h[3] = sum32(this.h[3], d); - this.h[4] = sum32(this.h[4], e); - this.h[5] = sum32(this.h[5], f); - this.h[6] = sum32(this.h[6], g); - this.h[7] = sum32(this.h[7], h); -}; - -SHA256.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; - -},{"../common":159,"../utils":169,"./common":168,"minimalistic-assert":363}],166:[function(require,module,exports){ -'use strict'; + var res = visit(obj) + if (res) return res -var utils = require('../utils'); + ptr = ptr.replace(/^#/, '') + ptr = ptr.replace(/\/$/, '') -var SHA512 = require('./512'); + try { + return jsonpointer.get(obj, decodeURI(ptr)) + } catch (err) { + var end = ptr.indexOf('#') + var other + // external reference + if (end !== 0) { + // fragment doesn't exist. + if (end === -1) { + other = additionalSchemas[ptr] + } else { + var ext = ptr.slice(0, end) + other = additionalSchemas[ext] + var fragment = ptr.slice(end).replace(/^#/, '') + try { + return jsonpointer.get(other, fragment) + } catch (err) {} + } + } else { + other = additionalSchemas[ptr] + } + return other || null + } +} -function SHA384() { - if (!(this instanceof SHA384)) - return new SHA384(); +var types = {} - SHA512.call(this); - this.h = [ - 0xcbbb9d5d, 0xc1059ed8, - 0x629a292a, 0x367cd507, - 0x9159015a, 0x3070dd17, - 0x152fecd8, 0xf70e5939, - 0x67332667, 0xffc00b31, - 0x8eb44a87, 0x68581511, - 0xdb0c2e0d, 0x64f98fa7, - 0x47b5481d, 0xbefa4fa4 ]; +types.any = function() { + return 'true' } -utils.inherits(SHA384, SHA512); -module.exports = SHA384; - -SHA384.blockSize = 1024; -SHA384.outSize = 384; -SHA384.hmacStrength = 192; -SHA384.padLength = 128; -SHA384.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h.slice(0, 12), 'big'); - else - return utils.split32(this.h.slice(0, 12), 'big'); -}; +types.null = function(name) { + return name+' === null' +} -},{"../utils":169,"./512":167}],167:[function(require,module,exports){ -'use strict'; +types.boolean = function(name) { + return 'typeof '+name+' === "boolean"' +} -var utils = require('../utils'); -var common = require('../common'); -var assert = require('minimalistic-assert'); +types.array = function(name) { + return 'Array.isArray('+name+')' +} -var rotr64_hi = utils.rotr64_hi; -var rotr64_lo = utils.rotr64_lo; -var shr64_hi = utils.shr64_hi; -var shr64_lo = utils.shr64_lo; -var sum64 = utils.sum64; -var sum64_hi = utils.sum64_hi; -var sum64_lo = utils.sum64_lo; -var sum64_4_hi = utils.sum64_4_hi; -var sum64_4_lo = utils.sum64_4_lo; -var sum64_5_hi = utils.sum64_5_hi; -var sum64_5_lo = utils.sum64_5_lo; +types.object = function(name) { + return 'typeof '+name+' === "object" && '+name+' && !Array.isArray('+name+')' +} -var BlockHash = common.BlockHash; +types.number = function(name) { + return 'typeof '+name+' === "number" && isFinite('+name+')' +} -var sha512_K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -]; +types.integer = function(name) { + return 'typeof '+name+' === "number" && (Math.floor('+name+') === '+name+' || '+name+' > 9007199254740992 || '+name+' < -9007199254740992)' +} -function SHA512() { - if (!(this instanceof SHA512)) - return new SHA512(); +types.string = function(name) { + return 'typeof '+name+' === "string"' +} - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xf3bcc908, - 0xbb67ae85, 0x84caa73b, - 0x3c6ef372, 0xfe94f82b, - 0xa54ff53a, 0x5f1d36f1, - 0x510e527f, 0xade682d1, - 0x9b05688c, 0x2b3e6c1f, - 0x1f83d9ab, 0xfb41bd6b, - 0x5be0cd19, 0x137e2179 ]; - this.k = sha512_K; - this.W = new Array(160); +var unique = function(array, len) { + len = Math.min(len === -1 ? array.length : len, array.length) + var list = [] + for (var i = 0; i < len; i++) { + list.push(typeof array[i] === 'object' ? JSON.stringify(array[i]) : array[i]) + } + for (var i = 1; i < list.length; i++) { + if (list.indexOf(list[i]) !== i) return false + } + return true } -utils.inherits(SHA512, BlockHash); -module.exports = SHA512; -SHA512.blockSize = 1024; -SHA512.outSize = 512; -SHA512.hmacStrength = 192; -SHA512.padLength = 128; +var isMultipleOf = function(name, multipleOf) { + var res; + var factor = ((multipleOf | 0) !== multipleOf) ? Math.pow(10, multipleOf.toString().split('.').pop().length) : 1 + if (factor > 1) { + var factorName = ((name | 0) !== name) ? Math.pow(10, name.toString().split('.').pop().length) : 1 + if (factorName > factor) res = true + else res = Math.round(factor * name) % (factor * multipleOf) + } + else res = name % multipleOf; + return !res; +} -SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { - var W = this.W; +var testLimitedRegex = function (r, s, maxLength) { + if (maxLength > -1 && s.length > maxLength) return true + return r.test(s) +} - // 32 x 32bit words - for (var i = 0; i < 32; i++) - W[i] = msg[start + i]; - for (; i < W.length; i += 2) { - var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 - var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); - var c1_hi = W[i - 14]; // i - 7 - var c1_lo = W[i - 13]; - var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 - var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); - var c3_hi = W[i - 32]; // i - 16 - var c3_lo = W[i - 31]; +var compile = function(schema, cache, root, reporter, opts) { + var fmts = opts ? xtend(formats, opts.formats) : formats + var scope = {unique:unique, formats:fmts, isMultipleOf:isMultipleOf, testLimitedRegex:testLimitedRegex} + var verbose = opts ? !!opts.verbose : false; + var greedy = opts && opts.greedy !== undefined ? + opts.greedy : false; - W[i] = sum64_4_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); - W[i + 1] = sum64_4_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); + var syms = {} + var allocated = [] + var gensym = function(name) { + var res = name+(syms[name] = (syms[name] || 0)+1) + allocated.push(res) + return res } -}; -SHA512.prototype._update = function _update(msg, start) { - this._prepareBlock(msg, start); - - var W = this.W; + var formatName = function(field) { + var s = JSON.stringify(field) + try { + var pattern = /\[([^\[\]"]+)\]/ + while (pattern.test(s)) s = s.replace(pattern, replacer) + return s + } catch (_) { + return JSON.stringify(field) + } - var ah = this.h[0]; - var al = this.h[1]; - var bh = this.h[2]; - var bl = this.h[3]; - var ch = this.h[4]; - var cl = this.h[5]; - var dh = this.h[6]; - var dl = this.h[7]; - var eh = this.h[8]; - var el = this.h[9]; - var fh = this.h[10]; - var fl = this.h[11]; - var gh = this.h[12]; - var gl = this.h[13]; - var hh = this.h[14]; - var hl = this.h[15]; + function replacer (match, v) { + if (allocated.indexOf(v) === -1) throw new Error('Unreplaceable') + return '." + ' + v + ' + "' + } + } - assert(this.k.length === W.length); - for (var i = 0; i < W.length; i += 2) { - var c0_hi = hh; - var c0_lo = hl; - var c1_hi = s1_512_hi(eh, el); - var c1_lo = s1_512_lo(eh, el); - var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); - var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); - var c3_hi = this.k[i]; - var c3_lo = this.k[i + 1]; - var c4_hi = W[i]; - var c4_lo = W[i + 1]; + var reversePatterns = {} + var patterns = function(p) { + if (reversePatterns[p]) return reversePatterns[p] + var n = gensym('pattern') + scope[n] = new RegExp(p) + reversePatterns[p] = n + return n + } - var T1_hi = sum64_5_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); - var T1_lo = sum64_5_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); + var vars = ['i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','y','z'] + var genloop = function() { + var v = vars.shift() + vars.push(v+v[0]) + allocated.push(v) + return v + } - c0_hi = s0_512_hi(ah, al); - c0_lo = s0_512_lo(ah, al); - c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); - c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); + var visit = function(name, node, reporter, filter, schemaPath) { + var properties = node.properties + var type = node.type + var tuple = false - var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); - var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); + if (Array.isArray(node.items)) { // tuple type + properties = {} + node.items.forEach(function(item, i) { + properties[i] = item + }) + type = 'array' + tuple = true + } - hh = gh; - hl = gl; + var indent = 0 + var error = function(msg, prop, value) { + validate('errors++') + if (reporter === true) { + validate('if (validate.errors === null) validate.errors = []') + if (verbose) { + validate( + 'validate.errors.push({field:%s,message:%s,value:%s,type:%s,schemaPath:%s})', + formatName(prop || name), + JSON.stringify(msg), + value || name, + JSON.stringify(type), + JSON.stringify(schemaPath) + ) + } else { + validate('validate.errors.push({field:%s,message:%s})', formatName(prop || name), JSON.stringify(msg)) + } + } + } - gh = fh; - gl = fl; + if (node.required === true) { + indent++ + validate('if (%s === undefined) {', name) + error('is required') + validate('} else {') + } else { + indent++ + validate('if (%s !== undefined) {', name) + } - fh = eh; - fl = el; + var valid = [].concat(type) + .map(function(t) { + if (t && !types.hasOwnProperty(t)) { + throw new Error('Unknown type: ' + t) + } - eh = sum64_hi(dh, dl, T1_hi, T1_lo); - el = sum64_lo(dl, dl, T1_hi, T1_lo); + return types[t || 'any'](name) + }) + .join(' || ') || 'true' - dh = ch; - dl = cl; + if (valid !== 'true') { + indent++ + validate('if (!(%s)) {', valid) + error('is the wrong type') + validate('} else {') + } - ch = bh; - cl = bl; + if (tuple) { + if (node.additionalItems === false) { + validate('if (%s.length > %d) {', name, node.items.length) + error('has additional items') + validate('}') + } else if (node.additionalItems) { + var i = genloop() + validate('for (var %s = %d; %s < %s.length; %s++) {', i, node.items.length, i, name, i) + visit(name+'['+i+']', node.additionalItems, reporter, filter, schemaPath.concat('additionalItems')) + validate('}') + } + } - bh = ah; - bl = al; + if (node.format && fmts[node.format]) { + if (type !== 'string' && formats[node.format]) validate('if (%s) {', types.string(name)) + var n = gensym('format') + scope[n] = fmts[node.format] - ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); - al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); - } + if (typeof scope[n] === 'function') validate('if (!%s(%s)) {', n, name) + else validate('if (!testLimitedRegex(%s, %s, %d)) {', n, name, typeof node.maxLength === 'undefined' ? -1 : node.maxLength) + error('must be '+node.format+' format') + validate('}') + if (type !== 'string' && formats[node.format]) validate('}') + } - sum64(this.h, 0, ah, al); - sum64(this.h, 2, bh, bl); - sum64(this.h, 4, ch, cl); - sum64(this.h, 6, dh, dl); - sum64(this.h, 8, eh, el); - sum64(this.h, 10, fh, fl); - sum64(this.h, 12, gh, gl); - sum64(this.h, 14, hh, hl); -}; + if (Array.isArray(node.required)) { + var n = gensym('missing') + validate('var %s = 0', n) + var checkRequired = function (req) { + var prop = genobj(name, req); + validate('if (%s === undefined) {', prop) + error('is required', prop) + validate('%s++', n) + validate('}') + } + validate('if ((%s)) {', type !== 'object' ? types.object(name) : 'true') + node.required.map(checkRequired) + validate('}'); + if (!greedy) { + validate('if (%s === 0) {', n) + indent++ + } + } -SHA512.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; + if (node.uniqueItems) { + if (type !== 'array') validate('if (%s) {', types.array(name)) + validate('if (!(unique(%s, %d))) {', name, node.maxItems || -1) + error('must be unique') + validate('}') + if (type !== 'array') validate('}') + } -function ch64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ ((~xh) & zh); - if (r < 0) - r += 0x100000000; - return r; -} + if (node.enum) { + var complex = node.enum.some(function(e) { + return typeof e === 'object' + }) -function ch64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ ((~xl) & zl); - if (r < 0) - r += 0x100000000; - return r; -} + var compare = complex ? + function(e) { + return 'JSON.stringify('+name+')'+' !== JSON.stringify('+JSON.stringify(e)+')' + } : + function(e) { + return name+' !== '+JSON.stringify(e) + } -function maj64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); - if (r < 0) - r += 0x100000000; - return r; -} + validate('if (%s) {', node.enum.map(compare).join(' && ') || 'false') + error('must be an enum value') + validate('}') + } -function maj64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); - if (r < 0) - r += 0x100000000; - return r; -} + if (node.dependencies) { + if (type !== 'object') validate('if (%s) {', types.object(name)) -function s0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 28); - var c1_hi = rotr64_hi(xl, xh, 2); // 34 - var c2_hi = rotr64_hi(xl, xh, 7); // 39 + Object.keys(node.dependencies).forEach(function(key) { + var deps = node.dependencies[key] + if (typeof deps === 'string') deps = [deps] - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} + var exists = function(k) { + return genobj(name, k) + ' !== undefined' + } -function s0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 28); - var c1_lo = rotr64_lo(xl, xh, 2); // 34 - var c2_lo = rotr64_lo(xl, xh, 7); // 39 + if (Array.isArray(deps)) { + validate('if (%s !== undefined && !(%s)) {', genobj(name, key), deps.map(exists).join(' && ') || 'true') + error('dependencies not set') + validate('}') + } + if (typeof deps === 'object') { + validate('if (%s !== undefined) {', genobj(name, key)) + visit(name, deps, reporter, filter, schemaPath.concat(['dependencies', key])) + validate('}') + } + }) - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} + if (type !== 'object') validate('}') + } -function s1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 14); - var c1_hi = rotr64_hi(xh, xl, 18); - var c2_hi = rotr64_hi(xl, xh, 9); // 41 + if (node.additionalProperties || node.additionalProperties === false) { + if (type !== 'object') validate('if (%s) {', types.object(name)) - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} + var i = genloop() + var keys = gensym('keys') -function s1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 14); - var c1_lo = rotr64_lo(xh, xl, 18); - var c2_lo = rotr64_lo(xl, xh, 9); // 41 + var toCompare = function(p) { + return keys+'['+i+'] !== '+JSON.stringify(p) + } - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} + var toTest = function(p) { + return '!'+patterns(p)+'.test('+keys+'['+i+'])' + } -function g0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 1); - var c1_hi = rotr64_hi(xh, xl, 8); - var c2_hi = shr64_hi(xh, xl, 7); + var additionalProp = Object.keys(properties || {}).map(toCompare) + .concat(Object.keys(node.patternProperties || {}).map(toTest)) + .join(' && ') || 'true' - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} + validate('var %s = Object.keys(%s)', keys, name) + ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i) + ('if (%s) {', additionalProp) -function g0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 1); - var c1_lo = rotr64_lo(xh, xl, 8); - var c2_lo = shr64_lo(xh, xl, 7); + if (node.additionalProperties === false) { + if (filter) validate('delete %s', name+'['+keys+'['+i+']]') + error('has additional properties', null, JSON.stringify(name+'.') + ' + ' + keys + '['+i+']') + } else { + visit(name+'['+keys+'['+i+']]', node.additionalProperties, reporter, filter, schemaPath.concat(['additionalProperties'])) + } - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} + validate + ('}') + ('}') -function g1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 19); - var c1_hi = rotr64_hi(xl, xh, 29); // 61 - var c2_hi = shr64_hi(xh, xl, 6); + if (type !== 'object') validate('}') + } - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} + if (node.$ref) { + var sub = get(root, opts && opts.schemas || {}, node.$ref) + if (sub) { + var fn = cache[node.$ref] + if (!fn) { + cache[node.$ref] = function proxy(data) { + return fn(data) + } + fn = compile(sub, cache, root, false, opts) + } + var n = gensym('ref') + scope[n] = fn + validate('if (!(%s(%s))) {', n, name) + error('referenced schema does not match') + validate('}') + } + } -function g1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 19); - var c1_lo = rotr64_lo(xl, xh, 29); // 61 - var c2_lo = shr64_lo(xh, xl, 6); + if (node.not) { + var prev = gensym('prev') + validate('var %s = errors', prev) + visit(name, node.not, false, filter, schemaPath.concat('not')) + validate('if (%s === errors) {', prev) + error('negative schema matches') + validate('} else {') + ('errors = %s', prev) + ('}') + } - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} + if (node.items && !tuple) { + if (type !== 'array') validate('if (%s) {', types.array(name)) -},{"../common":159,"../utils":169,"minimalistic-assert":363}],168:[function(require,module,exports){ -'use strict'; + var i = genloop() + validate('for (var %s = 0; %s < %s.length; %s++) {', i, i, name, i) + visit(name+'['+i+']', node.items, reporter, filter, schemaPath.concat('items')) + validate('}') -var utils = require('../utils'); -var rotr32 = utils.rotr32; + if (type !== 'array') validate('}') + } -function ft_1(s, x, y, z) { - if (s === 0) - return ch32(x, y, z); - if (s === 1 || s === 3) - return p32(x, y, z); - if (s === 2) - return maj32(x, y, z); -} -exports.ft_1 = ft_1; + if (node.patternProperties) { + if (type !== 'object') validate('if (%s) {', types.object(name)) + var keys = gensym('keys') + var i = genloop() + validate + ('var %s = Object.keys(%s)', keys, name) + ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i) -function ch32(x, y, z) { - return (x & y) ^ ((~x) & z); -} -exports.ch32 = ch32; + Object.keys(node.patternProperties).forEach(function(key) { + var p = patterns(key) + validate('if (%s.test(%s)) {', p, keys+'['+i+']') + visit(name+'['+keys+'['+i+']]', node.patternProperties[key], reporter, filter, schemaPath.concat(['patternProperties', key])) + validate('}') + }) -function maj32(x, y, z) { - return (x & y) ^ (x & z) ^ (y & z); -} -exports.maj32 = maj32; + validate('}') + if (type !== 'object') validate('}') + } -function p32(x, y, z) { - return x ^ y ^ z; -} -exports.p32 = p32; + if (node.pattern) { + var p = patterns(node.pattern) + if (type !== 'string') validate('if (%s) {', types.string(name)) + validate('if (!(testLimitedRegex(%s, %s, %d))) {', p, name, typeof node.maxLength === 'undefined' ? -1 : node.maxLength) + error('pattern mismatch') + validate('}') + if (type !== 'string') validate('}') + } -function s0_256(x) { - return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); -} -exports.s0_256 = s0_256; + if (node.allOf) { + node.allOf.forEach(function(sch, key) { + visit(name, sch, reporter, filter, schemaPath.concat(['allOf', key])) + }) + } -function s1_256(x) { - return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); -} -exports.s1_256 = s1_256; + if (node.anyOf && node.anyOf.length) { + var prev = gensym('prev') -function g0_256(x) { - return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); -} -exports.g0_256 = g0_256; + node.anyOf.forEach(function(sch, i) { + if (i === 0) { + validate('var %s = errors', prev) + } else { + validate('if (errors !== %s) {', prev) + ('errors = %s', prev) + } + visit(name, sch, false, false, schemaPath) + }) + node.anyOf.forEach(function(sch, i) { + if (i) validate('}') + }) + validate('if (%s !== errors) {', prev) + error('no schemas match') + validate('}') + } -function g1_256(x) { - return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); -} -exports.g1_256 = g1_256; + if (node.oneOf && node.oneOf.length) { + var prev = gensym('prev') + var passes = gensym('passes') -},{"../utils":169}],169:[function(require,module,exports){ -'use strict'; + validate + ('var %s = errors', prev) + ('var %s = 0', passes) -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); + node.oneOf.forEach(function(sch, i) { + visit(name, sch, false, false, schemaPath) + validate('if (%s === errors) {', prev) + ('%s++', passes) + ('} else {') + ('errors = %s', prev) + ('}') + }) -exports.inherits = inherits; + validate('if (%s !== 1) {', passes) + error('no (or more than one) schemas match') + validate('}') + } -function isSurrogatePair(msg, i) { - if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { - return false; - } - if (i < 0 || i + 1 >= msg.length) { - return false; - } - return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; -} + if (node.multipleOf !== undefined) { + if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) -function toArray(msg, enc) { - if (Array.isArray(msg)) - return msg.slice(); - if (!msg) - return []; - var res = []; - if (typeof msg === 'string') { - if (!enc) { - // Inspired by stringToUtf8ByteArray() in closure-library by Google - // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 - // Apache License 2.0 - // https://github.com/google/closure-library/blob/master/LICENSE - var p = 0; - for (var i = 0; i < msg.length; i++) { - var c = msg.charCodeAt(i); - if (c < 128) { - res[p++] = c; - } else if (c < 2048) { - res[p++] = (c >> 6) | 192; - res[p++] = (c & 63) | 128; - } else if (isSurrogatePair(msg, i)) { - c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); - res[p++] = (c >> 18) | 240; - res[p++] = ((c >> 12) & 63) | 128; - res[p++] = ((c >> 6) & 63) | 128; - res[p++] = (c & 63) | 128; - } else { - res[p++] = (c >> 12) | 224; - res[p++] = ((c >> 6) & 63) | 128; - res[p++] = (c & 63) | 128; - } - } - } else if (enc === 'hex') { - msg = msg.replace(/[^a-z0-9]+/ig, ''); - if (msg.length % 2 !== 0) - msg = '0' + msg; - for (i = 0; i < msg.length; i += 2) - res.push(parseInt(msg[i] + msg[i + 1], 16)); + validate('if (!isMultipleOf(%s, %d)) {', name, node.multipleOf) + + error('has a remainder') + validate('}') + + if (type !== 'number' && type !== 'integer') validate('}') } - } else { - for (i = 0; i < msg.length; i++) - res[i] = msg[i] | 0; - } - return res; -} -exports.toArray = toArray; -function toHex(msg) { - var res = ''; - for (var i = 0; i < msg.length; i++) - res += zero2(msg[i].toString(16)); - return res; -} -exports.toHex = toHex; + if (node.maxProperties !== undefined) { + if (type !== 'object') validate('if (%s) {', types.object(name)) -function htonl(w) { - var res = (w >>> 24) | - ((w >>> 8) & 0xff00) | - ((w << 8) & 0xff0000) | - ((w & 0xff) << 24); - return res >>> 0; -} -exports.htonl = htonl; + validate('if (Object.keys(%s).length > %d) {', name, node.maxProperties) + error('has more properties than allowed') + validate('}') -function toHex32(msg, endian) { - var res = ''; - for (var i = 0; i < msg.length; i++) { - var w = msg[i]; - if (endian === 'little') - w = htonl(w); - res += zero8(w.toString(16)); - } - return res; -} -exports.toHex32 = toHex32; + if (type !== 'object') validate('}') + } -function zero2(word) { - if (word.length === 1) - return '0' + word; - else - return word; -} -exports.zero2 = zero2; + if (node.minProperties !== undefined) { + if (type !== 'object') validate('if (%s) {', types.object(name)) -function zero8(word) { - if (word.length === 7) - return '0' + word; - else if (word.length === 6) - return '00' + word; - else if (word.length === 5) - return '000' + word; - else if (word.length === 4) - return '0000' + word; - else if (word.length === 3) - return '00000' + word; - else if (word.length === 2) - return '000000' + word; - else if (word.length === 1) - return '0000000' + word; - else - return word; -} -exports.zero8 = zero8; - -function join32(msg, start, end, endian) { - var len = end - start; - assert(len % 4 === 0); - var res = new Array(len / 4); - for (var i = 0, k = start; i < res.length; i++, k += 4) { - var w; - if (endian === 'big') - w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; - else - w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; - res[i] = w >>> 0; - } - return res; -} -exports.join32 = join32; + validate('if (Object.keys(%s).length < %d) {', name, node.minProperties) + error('has less properties than allowed') + validate('}') -function split32(msg, endian) { - var res = new Array(msg.length * 4); - for (var i = 0, k = 0; i < msg.length; i++, k += 4) { - var m = msg[i]; - if (endian === 'big') { - res[k] = m >>> 24; - res[k + 1] = (m >>> 16) & 0xff; - res[k + 2] = (m >>> 8) & 0xff; - res[k + 3] = m & 0xff; - } else { - res[k + 3] = m >>> 24; - res[k + 2] = (m >>> 16) & 0xff; - res[k + 1] = (m >>> 8) & 0xff; - res[k] = m & 0xff; + if (type !== 'object') validate('}') } - } - return res; -} -exports.split32 = split32; - -function rotr32(w, b) { - return (w >>> b) | (w << (32 - b)); -} -exports.rotr32 = rotr32; - -function rotl32(w, b) { - return (w << b) | (w >>> (32 - b)); -} -exports.rotl32 = rotl32; -function sum32(a, b) { - return (a + b) >>> 0; -} -exports.sum32 = sum32; - -function sum32_3(a, b, c) { - return (a + b + c) >>> 0; -} -exports.sum32_3 = sum32_3; - -function sum32_4(a, b, c, d) { - return (a + b + c + d) >>> 0; -} -exports.sum32_4 = sum32_4; - -function sum32_5(a, b, c, d, e) { - return (a + b + c + d + e) >>> 0; -} -exports.sum32_5 = sum32_5; - -function sum64(buf, pos, ah, al) { - var bh = buf[pos]; - var bl = buf[pos + 1]; - - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - buf[pos] = hi >>> 0; - buf[pos + 1] = lo; -} -exports.sum64 = sum64; - -function sum64_hi(ah, al, bh, bl) { - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - return hi >>> 0; -} -exports.sum64_hi = sum64_hi; - -function sum64_lo(ah, al, bh, bl) { - var lo = al + bl; - return lo >>> 0; -} -exports.sum64_lo = sum64_lo; - -function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; - - var hi = ah + bh + ch + dh + carry; - return hi >>> 0; -} -exports.sum64_4_hi = sum64_4_hi; - -function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { - var lo = al + bl + cl + dl; - return lo >>> 0; -} -exports.sum64_4_lo = sum64_4_lo; + if (node.maxItems !== undefined) { + if (type !== 'array') validate('if (%s) {', types.array(name)) -function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; - lo = (lo + el) >>> 0; - carry += lo < el ? 1 : 0; + validate('if (%s.length > %d) {', name, node.maxItems) + error('has more items than allowed') + validate('}') - var hi = ah + bh + ch + dh + eh + carry; - return hi >>> 0; -} -exports.sum64_5_hi = sum64_5_hi; + if (type !== 'array') validate('}') + } -function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var lo = al + bl + cl + dl + el; + if (node.minItems !== undefined) { + if (type !== 'array') validate('if (%s) {', types.array(name)) - return lo >>> 0; -} -exports.sum64_5_lo = sum64_5_lo; + validate('if (%s.length < %d) {', name, node.minItems) + error('has less items than allowed') + validate('}') -function rotr64_hi(ah, al, num) { - var r = (al << (32 - num)) | (ah >>> num); - return r >>> 0; -} -exports.rotr64_hi = rotr64_hi; + if (type !== 'array') validate('}') + } -function rotr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.rotr64_lo = rotr64_lo; + if (node.maxLength !== undefined) { + if (type !== 'string') validate('if (%s) {', types.string(name)) -function shr64_hi(ah, al, num) { - return ah >>> num; -} -exports.shr64_hi = shr64_hi; + validate('if (%s.length > %d) {', name, node.maxLength) + error('has longer length than allowed') + validate('}') -function shr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.shr64_lo = shr64_lo; + if (type !== 'string') validate('}') + } -},{"inherits":193,"minimalistic-assert":363}],170:[function(require,module,exports){ -'use strict'; + if (node.minLength !== undefined) { + if (type !== 'string') validate('if (%s) {', types.string(name)) -var hash = require('hash.js'); -var utils = require('minimalistic-crypto-utils'); -var assert = require('minimalistic-assert'); + validate('if (%s.length < %d) {', name, node.minLength) + error('has less length than allowed') + validate('}') -function HmacDRBG(options) { - if (!(this instanceof HmacDRBG)) - return new HmacDRBG(options); - this.hash = options.hash; - this.predResist = !!options.predResist; + if (type !== 'string') validate('}') + } - this.outLen = this.hash.outSize; - this.minEntropy = options.minEntropy || this.hash.hmacStrength; + if (node.minimum !== undefined) { + if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) - this._reseed = null; - this.reseedInterval = null; - this.K = null; - this.V = null; + validate('if (%s %s %d) {', name, node.exclusiveMinimum ? '<=' : '<', node.minimum) + error('is less than minimum') + validate('}') - var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); - var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); - var pers = utils.toArray(options.pers, options.persEnc || 'hex'); - assert(entropy.length >= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); - this._init(entropy, nonce, pers); -} -module.exports = HmacDRBG; + if (type !== 'number' && type !== 'integer') validate('}') + } -HmacDRBG.prototype._init = function init(entropy, nonce, pers) { - var seed = entropy.concat(nonce).concat(pers); + if (node.maximum !== undefined) { + if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) - this.K = new Array(this.outLen / 8); - this.V = new Array(this.outLen / 8); - for (var i = 0; i < this.V.length; i++) { - this.K[i] = 0x00; - this.V[i] = 0x01; - } + validate('if (%s %s %d) {', name, node.exclusiveMaximum ? '>=' : '>', node.maximum) + error('is more than maximum') + validate('}') - this._update(seed); - this._reseed = 1; - this.reseedInterval = 0x1000000000000; // 2^48 -}; + if (type !== 'number' && type !== 'integer') validate('}') + } -HmacDRBG.prototype._hmac = function hmac() { - return new hash.hmac(this.hash, this.K); -}; + if (properties) { + Object.keys(properties).forEach(function(p) { + if (Array.isArray(type) && type.indexOf('null') !== -1) validate('if (%s !== null) {', name) -HmacDRBG.prototype._update = function update(seed) { - var kmac = this._hmac() - .update(this.V) - .update([ 0x00 ]); - if (seed) - kmac = kmac.update(seed); - this.K = kmac.digest(); - this.V = this._hmac().update(this.V).digest(); - if (!seed) - return; + visit( + genobj(name, p), + properties[p], + reporter, + filter, + schemaPath.concat(tuple ? p : ['properties', p]) + ) - this.K = this._hmac() - .update(this.V) - .update([ 0x01 ]) - .update(seed) - .digest(); - this.V = this._hmac().update(this.V).digest(); -}; + if (Array.isArray(type) && type.indexOf('null') !== -1) validate('}') + }) + } -HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { - // Optional entropy enc - if (typeof entropyEnc !== 'string') { - addEnc = add; - add = entropyEnc; - entropyEnc = null; + while (indent--) validate('}') } - entropy = utils.toArray(entropy, entropyEnc); - add = utils.toArray(add, addEnc); - - assert(entropy.length >= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + var validate = genfun + ('function validate(data) {') + // Since undefined is not a valid JSON value, we coerce to null and other checks will catch this + ('if (data === undefined) data = null') + ('validate.errors = null') + ('var errors = 0') - this._update(entropy.concat(add || [])); - this._reseed = 1; -}; + visit('data', schema, reporter, opts && opts.filter, []) -HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { - if (this._reseed > this.reseedInterval) - throw new Error('Reseed is required'); + validate + ('return errors === 0') + ('}') - // Optional encoding - if (typeof enc !== 'string') { - addEnc = add; - add = enc; - enc = null; - } + validate = validate.toFunction(scope) + validate.errors = null - // Optional additional data - if (add) { - add = utils.toArray(add, addEnc || 'hex'); - this._update(add); + if (Object.defineProperty) { + Object.defineProperty(validate, 'error', { + get: function() { + if (!validate.errors) return '' + return validate.errors.map(function(err) { + return err.field + ' ' + err.message; + }).join('\n') + } + }) } - var temp = []; - while (temp.length < len) { - this.V = this._hmac().update(this.V).digest(); - temp = temp.concat(this.V); + validate.toJSON = function() { + return schema } - var res = temp.slice(0, len); - this._update(add); - this._reseed++; - return utils.encode(res, enc); -}; - -},{"hash.js":158,"minimalistic-assert":363,"minimalistic-crypto-utils":364}],171:[function(require,module,exports){ -var http = require('http') -var url = require('url') - -var https = module.exports - -for (var key in http) { - if (http.hasOwnProperty(key)) https[key] = http[key] -} - -https.request = function (params, cb) { - params = validateParams(params) - return http.request.call(this, params, cb) + return validate } -https.get = function (params, cb) { - params = validateParams(params) - return http.get.call(this, params, cb) +module.exports = function(schema, opts) { + if (typeof schema === 'string') schema = JSON.parse(schema) + return compile(schema, {}, schema, true, opts) } -function validateParams (params) { - if (typeof params === 'string') { - params = url.parse(params) - } - if (!params.protocol) { - params.protocol = 'https:' - } - if (params.protocol !== 'https:') { - throw new Error('Protocol "' + params.protocol + '" not supported. Expected "https:"') +module.exports.filter = function(schema, opts) { + var validate = module.exports(schema, xtend(opts, {filter: true})) + return function(sch) { + validate(sch) + return sch } - return params } -},{"http":551,"url":586}],172:[function(require,module,exports){ -"use strict"; +},{"./formats":199,"generate-function":135,"generate-object-property":136,"jsonpointer":206,"xtend":632}],201:[function(require,module,exports){ +"use strict" +function isProperty(str) { + return /^[$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc][$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc0-9\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19b0-\u19c0\u19c8\u19c9\u19d0-\u19d9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f]*$/.test(str) +} +module.exports = isProperty +},{}],202:[function(require,module,exports){ +(function (global){(function (){ +'use strict'; -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; +var forEach = require('foreach'); +var availableTypedArrays = require('available-typed-arrays'); +var callBound = require('call-bind/callBound'); -var _nanoid = require("nanoid"); +var $toString = callBound('Object.prototype.toString'); +var hasToStringTag = require('has-tostringtag/shams')(); -var _utils = require("./utils"); +var typedArrays = availableTypedArrays(); -var defaults = { - title: 'Untitled event', - productId: 'adamgibbons/ics', - method: 'PUBLISH', - uid: (0, _nanoid.nanoid)(), - timestamp: (0, _utils.formatDate)(null, 'utc'), - start: (0, _utils.formatDate)(null, 'utc') +var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) { + for (var i = 0; i < array.length; i += 1) { + if (array[i] === value) { + return i; + } + } + return -1; }; -var _default = defaults; -exports["default"] = _default; -},{"./utils":183,"nanoid":372}],173:[function(require,module,exports){ -"use strict"; +var $slice = callBound('String.prototype.slice'); +var toStrTags = {}; +var gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor'); +var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof'); +if (hasToStringTag && gOPD && getPrototypeOf) { + forEach(typedArrays, function (typedArray) { + var arr = new global[typedArray](); + if (Symbol.toStringTag in arr) { + var proto = getPrototypeOf(arr); + var descriptor = gOPD(proto, Symbol.toStringTag); + if (!descriptor) { + var superProto = getPrototypeOf(proto); + descriptor = gOPD(superProto, Symbol.toStringTag); + } + toStrTags[typedArray] = descriptor.get; + } + }); +} -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.createEvent = createEvent; -exports.createEvents = createEvents; +var tryTypedArrays = function tryAllTypedArrays(value) { + var anyTrue = false; + forEach(toStrTags, function (getter, typedArray) { + if (!anyTrue) { + try { + anyTrue = getter.call(value) === typedArray; + } catch (e) { /**/ } + } + }); + return anyTrue; +}; -var _nanoid = require("nanoid"); +module.exports = function isTypedArray(value) { + if (!value || typeof value !== 'object') { return false; } + if (!hasToStringTag || !(Symbol.toStringTag in value)) { + var tag = $slice($toString(value), 8, -1); + return $indexOf(typedArrays, tag) > -1; + } + if (!gOPD) { return false; } + return tryTypedArrays(value); +}; -var _pipeline = require("./pipeline"); +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"available-typed-arrays":20,"call-bind/callBound":71,"es-abstract/helpers/getOwnPropertyDescriptor":128,"foreach":132,"has-tostringtag/shams":140}],203:[function(require,module,exports){ +module.exports = isTypedArray +isTypedArray.strict = isStrictTypedArray +isTypedArray.loose = isLooseTypedArray -function assignUniqueId(event) { - event.uid = event.uid || (0, _nanoid.nanoid)(); - return event; +var toString = Object.prototype.toString +var names = { + '[object Int8Array]': true + , '[object Int16Array]': true + , '[object Int32Array]': true + , '[object Uint8Array]': true + , '[object Uint8ClampedArray]': true + , '[object Uint16Array]': true + , '[object Uint32Array]': true + , '[object Float32Array]': true + , '[object Float64Array]': true } -function validateAndBuildEvent(event) { - return (0, _pipeline.validateEvent)((0, _pipeline.buildEvent)(event)); +function isTypedArray(arr) { + return ( + isStrictTypedArray(arr) + || isLooseTypedArray(arr) + ) } -function applyInitialFormatting(_ref) { - var error = _ref.error, - value = _ref.value; +function isStrictTypedArray(arr) { + return ( + arr instanceof Int8Array + || arr instanceof Int16Array + || arr instanceof Int32Array + || arr instanceof Uint8Array + || arr instanceof Uint8ClampedArray + || arr instanceof Uint16Array + || arr instanceof Uint32Array + || arr instanceof Float32Array + || arr instanceof Float64Array + ) +} - if (error) { - return { - error: error, - value: null - }; - } +function isLooseTypedArray(arr) { + return names[toString.call(arr)] +} - return { - error: null, - value: (0, _pipeline.formatEvent)(value) - }; -} - -function reformatEventsByPosition(_ref2, idx, list) { - var error = _ref2.error, - value = _ref2.value; - if (error) return { - error: error, - value: value - }; - - if (idx === 0) { - // beginning of list - return { - value: value.slice(0, value.indexOf('END:VCALENDAR')), - error: null - }; - } - - if (idx === list.length - 1) { - // end of list - return { - value: value.slice(value.indexOf('BEGIN:VEVENT')), - error: null - }; - } - - return { - error: null, - value: value.slice(value.indexOf('BEGIN:VEVENT'), value.indexOf('END:VEVENT') + 12) - }; -} - -function catenateEvents(accumulator, _ref3, idx) { - var error = _ref3.error, - value = _ref3.value; - - if (error) { - accumulator.error = error; - accumulator.value = null; - return accumulator; - } - - if (accumulator.value) { - accumulator.value = accumulator.value.concat(value); - return accumulator; - } - - accumulator.value = value; - return accumulator; -} - -function createEvent(attributes, cb) { - if (!attributes) { - Error('Attributes argument is required'); - } - - assignUniqueId(attributes); - - if (!cb) { - // No callback, so return error or value in an object - var _validateAndBuildEven = validateAndBuildEvent(attributes), - _error = _validateAndBuildEven.error, - _value = _validateAndBuildEven.value; - - if (_error) return { - error: _error, - value: _value - }; - var event = ''; - - try { - event = (0, _pipeline.formatEvent)(_value); - } catch (error) { - return { - error: error, - value: null - }; - } - - return { - error: null, - value: event - }; - } // Return a node-style callback - - - var _validateAndBuildEven2 = validateAndBuildEvent(attributes), - error = _validateAndBuildEven2.error, - value = _validateAndBuildEven2.value; - - if (error) return cb(error); - return cb(null, (0, _pipeline.formatEvent)(value)); -} - -function createEvents(events, cb) { - if (!events) { - return { - error: Error('one argument is required'), - value: null - }; - } - - if (events.length === 1) { - return createEvent(events[0], cb); - } - - var _events$map$map$map$m = events.map(assignUniqueId).map(validateAndBuildEvent).map(applyInitialFormatting).map(reformatEventsByPosition).reduce(catenateEvents, { - error: null, - value: null - }), - error = _events$map$map$map$m.error, - value = _events$map$map$map$m.value; - - if (!cb) { - return { - error: error, - value: value - }; - } - - return cb(error, value); -} -},{"./pipeline":176,"nanoid":372}],174:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = buildEvent; - -var _defaults = _interopRequireDefault(require("../defaults")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function buildEvent() { - var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var title = attributes.title, - productId = attributes.productId, - method = attributes.method, - uid = attributes.uid, - sequence = attributes.sequence, - start = attributes.start, - startType = attributes.startType, - duration = attributes.duration, - end = attributes.end, - description = attributes.description, - url = attributes.url, - geo = attributes.geo, - location = attributes.location, - status = attributes.status, - categories = attributes.categories, - organizer = attributes.organizer, - attendees = attributes.attendees, - alarms = attributes.alarms, - recurrenceRule = attributes.recurrenceRule, - created = attributes.created, - lastModified = attributes.lastModified, - calName = attributes.calName; // fill in default values where necessary - - var output = Object.assign({}, _defaults["default"], attributes); // remove falsey values - - return Object.entries(output).reduce(function (clean, entry) { - return entry[1] ? Object.assign(clean, _defineProperty({}, entry[0], entry[1])) : clean; - }, {}); -} -},{"../defaults":172}],175:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = formatEvent; - -var _utils = require("../utils"); - -function formatEvent() { - var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var title = attributes.title, - productId = attributes.productId, - method = attributes.method, - uid = attributes.uid, - sequence = attributes.sequence, - timestamp = attributes.timestamp, - start = attributes.start, - startType = attributes.startType, - startInputType = attributes.startInputType, - startOutputType = attributes.startOutputType, - duration = attributes.duration, - end = attributes.end, - endInputType = attributes.endInputType, - endOutputType = attributes.endOutputType, - description = attributes.description, - url = attributes.url, - geo = attributes.geo, - location = attributes.location, - status = attributes.status, - categories = attributes.categories, - organizer = attributes.organizer, - attendees = attributes.attendees, - alarms = attributes.alarms, - recurrenceRule = attributes.recurrenceRule, - busyStatus = attributes.busyStatus, - created = attributes.created, - lastModified = attributes.lastModified, - calName = attributes.calName; - var icsFormat = ''; - icsFormat += 'BEGIN:VCALENDAR\r\n'; - icsFormat += 'VERSION:2.0\r\n'; - icsFormat += 'CALSCALE:GREGORIAN\r\n'; - icsFormat += (0, _utils.foldLine)("PRODID:".concat(productId)) + '\r\n'; - icsFormat += (0, _utils.foldLine)("METHOD:".concat(method)) + '\r\n'; - icsFormat += calName ? (0, _utils.foldLine)("X-WR-CALNAME:".concat(calName)) + '\r\n' : ''; - icsFormat += "X-PUBLISHED-TTL:PT1H\r\n"; - icsFormat += 'BEGIN:VEVENT\r\n'; - icsFormat += "UID:".concat(uid, "\r\n"); - icsFormat += (0, _utils.foldLine)("SUMMARY:".concat(title ? (0, _utils.setSummary)(title) : title)) + '\r\n'; - icsFormat += "DTSTAMP:".concat(timestamp, "\r\n"); // All day events like anniversaries must be specified as VALUE type DATE - - icsFormat += "DTSTART".concat(start && start.length == 3 ? ";VALUE=DATE" : "", ":").concat((0, _utils.formatDate)(start, startOutputType || startType, startInputType), "\r\n"); // End is not required for all day events on single days (like anniversaries) - - if (!end || end.length !== 3 || start.length !== end.length || start.some(function (val, i) { - return val !== end[i]; - })) { - if (end) { - icsFormat += "DTEND".concat(end.length === 3 ? ";VALUE=DATE" : "", ":").concat((0, _utils.formatDate)(end, endOutputType || startOutputType || startType, endInputType || startInputType), "\r\n"); - } - } - - icsFormat += sequence ? "SEQUENCE:".concat(sequence, "\r\n") : ''; - icsFormat += description ? (0, _utils.foldLine)("DESCRIPTION:".concat((0, _utils.setDescription)(description))) + '\r\n' : ''; - icsFormat += url ? (0, _utils.foldLine)("URL:".concat(url)) + '\r\n' : ''; - icsFormat += geo ? (0, _utils.foldLine)("GEO:".concat((0, _utils.setGeolocation)(geo))) + '\r\n' : ''; - icsFormat += location ? (0, _utils.foldLine)("LOCATION:".concat((0, _utils.setLocation)(location))) + '\r\n' : ''; - icsFormat += status ? (0, _utils.foldLine)("STATUS:".concat(status)) + '\r\n' : ''; - icsFormat += categories ? (0, _utils.foldLine)("CATEGORIES:".concat(categories)) + '\r\n' : ''; - icsFormat += organizer ? (0, _utils.foldLine)("ORGANIZER;".concat((0, _utils.setOrganizer)(organizer))) + '\r\n' : ''; - icsFormat += busyStatus ? (0, _utils.foldLine)("X-MICROSOFT-CDO-BUSYSTATUS:".concat(busyStatus)) + '\r\n' : ''; - icsFormat += created ? 'CREATED:' + (0, _utils.formatDate)(created) + '\r\n' : ''; - icsFormat += lastModified ? 'LAST-MODIFIED:' + (0, _utils.formatDate)(lastModified) + '\r\n' : ''; - - if (attendees) { - attendees.map(function (attendee) { - icsFormat += (0, _utils.foldLine)("ATTENDEE;".concat((0, _utils.setContact)(attendee))) + '\r\n'; - }); - } - - if (alarms) { - alarms.map(function (alarm) { - icsFormat += (0, _utils.setAlarm)(alarm); - }); - } - - icsFormat += recurrenceRule ? "RRULE:".concat(recurrenceRule, "\r\n") : ''; - icsFormat += duration ? "DURATION:".concat((0, _utils.formatDuration)(duration), "\r\n") : ''; - icsFormat += "END:VEVENT\r\n"; - icsFormat += "END:VCALENDAR\r\n"; - return icsFormat; -} -},{"../utils":183}],176:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -Object.defineProperty(exports, "buildEvent", { - enumerable: true, - get: function get() { - return _build["default"]; - } -}); -Object.defineProperty(exports, "formatEvent", { - enumerable: true, - get: function get() { - return _format["default"]; - } -}); -Object.defineProperty(exports, "validateEvent", { - enumerable: true, - get: function get() { - return _validate["default"]; - } -}); - -var _build = _interopRequireDefault(require("./build")); - -var _format = _interopRequireDefault(require("./format")); - -var _validate = _interopRequireDefault(require("./validate")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -},{"./build":174,"./format":175,"./validate":177}],177:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -var _schema = _interopRequireDefault(require("../schema")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var _default = _schema["default"]; -exports["default"] = _default; -},{"../schema":178}],178:[function(require,module,exports){ -"use strict"; - -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = validateEvent; - -var yup = _interopRequireWildcard(require("yup")); - -function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } - -// yup url validation blocks localhost, so use a more flexible regex instead -// taken from https://github.com/jquense/yup/issues/224#issuecomment-417172609 -// This does mean that the url validation error is -// "url must match the following: ...." as opposed to "url must be a valid URL" -var urlRegex = /^(?:([a-z0-9+.-]+):\/\/)(?:\S+(?::\S*)?@)?(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/; -var dateTimeSchema = yup.array().min(3).max(7).of(yup.lazy(function (item, options) { - var itemIndex = parseInt(options.path.match(/.*\[(\d+)]/)[1]); - return [yup.number().integer(), yup.number().integer().min(1).max(12), yup.number().integer().min(1).max(31), yup.number().integer().min(0).max(23), yup.number().integer().min(0).max(60), yup.number().integer().min(0).max(60)][itemIndex]; -})); -var durationSchema = yup.object().shape({ - before: yup["boolean"](), - //option to set before alaram - weeks: yup.number(), - days: yup.number(), - hours: yup.number(), - minutes: yup.number(), - seconds: yup.number() -}).noUnknown(); -var contactSchema = yup.object().shape({ - name: yup.string(), - email: yup.string().email(), - rsvp: yup["boolean"](), - dir: yup.string().matches(urlRegex), - partstat: yup.string(), - role: yup.string() -}).noUnknown(); -var organizerSchema = yup.object().shape({ - name: yup.string(), - email: yup.string().email() -}).noUnknown(); -var alarmSchema = yup.object().shape({ - action: yup.string().matches(/audio|display|email/).required(), - trigger: yup.mixed().required(), - description: yup.string(), - duration: durationSchema, - repeat: yup.number(), - attach: yup.string(), - attachType: yup.string(), - summary: yup.string(), - attendee: contactSchema, - 'x-prop': yup.mixed(), - 'iana-prop': yup.mixed() -}).noUnknown(); -var schema = yup.object().shape({ - summary: yup.string(), - timestamp: yup.mixed(), - title: yup.string(), - productId: yup.string(), - method: yup.string(), - uid: yup.string().required(), - sequence: yup.number(), - start: dateTimeSchema.required(), - duration: durationSchema, - startType: yup.string().matches(/utc|local/), - startInputType: yup.string().matches(/utc|local/), - startOutputType: yup.string().matches(/utc|local/), - end: dateTimeSchema, - endInputType: yup.string().matches(/utc|local/), - endOutputType: yup.string().matches(/utc|local/), - description: yup.string(), - url: yup.string().matches(urlRegex), - geo: yup.object().shape({ - lat: yup.number(), - lon: yup.number() - }), - location: yup.string(), - status: yup.string().matches(/TENTATIVE|CANCELLED|CONFIRMED/i), - categories: yup.array().of(yup.string()), - organizer: organizerSchema, - attendees: yup.array().of(contactSchema), - alarms: yup.array().of(alarmSchema), - recurrenceRule: yup.string(), - busyStatus: yup.string().matches(/TENTATIVE|FREE|BUSY|OOF/i), - created: dateTimeSchema, - lastModified: dateTimeSchema, - calName: yup.string() -}).test('xor', "object should have end or duration", function (val) { - var hasEnd = !!val.end; - var hasDuration = !!val.duration; - return hasEnd && !hasDuration || !hasEnd && hasDuration || !hasEnd && !hasDuration; -}).noUnknown(); - -function validateEvent(candidate) { - try { - var value = schema.validateSync(candidate, { - abortEarly: false, - strict: true - }); - return { - error: null, - value: value - }; - } catch (error) { - return { - error: Object.assign({}, error), - value: undefined - }; - } -} -},{"yup":640}],179:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = foldLine; - -function foldLine(line) { - var parts = []; - var length = 75; - - while (line.length > length) { - parts.push(line.slice(0, length)); - line = line.slice(length); - length = 74; - } - - parts.push(line); - return parts.join('\r\n\t'); -} -},{}],180:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = formatDate; - -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } - -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - -function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - -var pad = function pad(n) { - return n < 10 ? "0".concat(n) : "".concat(n); -}; - -function formatDate() { - var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var outputType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'utc'; - var inputType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'local'; - - if (Array.isArray(args) && args.length === 3) { - var _args = _slicedToArray(args, 3), - year = _args[0], - month = _args[1], - date = _args[2]; - - return "".concat(year).concat(pad(month)).concat(pad(date)); - } - - var outDate = new Date(new Date().setUTCSeconds(0, 0)); - - if (Array.isArray(args) && args.length > 0 && args[0]) { - var _args2 = _slicedToArray(args, 6), - _year = _args2[0], - _month = _args2[1], - _date = _args2[2], - _args2$ = _args2[3], - hours = _args2$ === void 0 ? 0 : _args2$, - _args2$2 = _args2[4], - minutes = _args2$2 === void 0 ? 0 : _args2$2, - _args2$3 = _args2[5], - seconds = _args2$3 === void 0 ? 0 : _args2$3; - - if (inputType === 'local') { - outDate = new Date(_year, _month - 1, _date, hours, minutes, seconds); - } else { - outDate = new Date(Date.UTC(_year, _month - 1, _date, hours, minutes, seconds)); - } - } - - if (outputType === 'local') { - return [outDate.getFullYear(), pad(outDate.getMonth() + 1), pad(outDate.getDate()), 'T', pad(outDate.getHours()), pad(outDate.getMinutes()), pad(outDate.getSeconds())].join(''); - } - - return [outDate.getUTCFullYear(), pad(outDate.getUTCMonth() + 1), pad(outDate.getUTCDate()), 'T', pad(outDate.getUTCHours()), pad(outDate.getUTCMinutes()), pad(outDate.getUTCSeconds()), 'Z'].join(''); -} -},{}],181:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = formatDuration; - -function formatDuration() { - var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var weeks = attributes.weeks, - days = attributes.days, - hours = attributes.hours, - minutes = attributes.minutes, - seconds = attributes.seconds; - var formattedDuration = 'P'; - formattedDuration += weeks ? "".concat(weeks, "W") : ''; - formattedDuration += days ? "".concat(days, "D") : ''; - formattedDuration += 'T'; - formattedDuration += hours ? "".concat(hours, "H") : ''; - formattedDuration += minutes ? "".concat(minutes, "M") : ''; - formattedDuration += seconds ? "".concat(seconds, "S") : ''; - return formattedDuration; -} -},{}],182:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = formatText; - -function formatText(text) { - return text.replace(/\\/gm, "\\\\").replace(/\r?\n/gm, "\\n").replace(/;/gm, "\\;").replace(/,/gm, "\\,"); -} -},{}],183:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -Object.defineProperty(exports, "formatDate", { - enumerable: true, - get: function get() { - return _formatDate["default"]; - } -}); -Object.defineProperty(exports, "setGeolocation", { - enumerable: true, - get: function get() { - return _setGeolocation["default"]; - } -}); -Object.defineProperty(exports, "setContact", { - enumerable: true, - get: function get() { - return _setContact["default"]; - } -}); -Object.defineProperty(exports, "setOrganizer", { - enumerable: true, - get: function get() { - return _setOrganizer["default"]; - } -}); -Object.defineProperty(exports, "setAlarm", { - enumerable: true, - get: function get() { - return _setAlarm["default"]; - } -}); -Object.defineProperty(exports, "setDescription", { - enumerable: true, - get: function get() { - return _setDescription["default"]; - } -}); -Object.defineProperty(exports, "setSummary", { - enumerable: true, - get: function get() { - return _setSummary["default"]; - } -}); -Object.defineProperty(exports, "formatDuration", { - enumerable: true, - get: function get() { - return _formatDuration["default"]; - } -}); -Object.defineProperty(exports, "foldLine", { - enumerable: true, - get: function get() { - return _foldLine["default"]; - } -}); -Object.defineProperty(exports, "setLocation", { - enumerable: true, - get: function get() { - return _setLocation["default"]; - } -}); - -var _formatDate = _interopRequireDefault(require("./format-date")); - -var _setGeolocation = _interopRequireDefault(require("./set-geolocation")); - -var _setContact = _interopRequireDefault(require("./set-contact")); - -var _setOrganizer = _interopRequireDefault(require("./set-organizer")); - -var _setAlarm = _interopRequireDefault(require("./set-alarm")); - -var _setDescription = _interopRequireDefault(require("./set-description")); - -var _setSummary = _interopRequireDefault(require("./set-summary")); - -var _formatDuration = _interopRequireDefault(require("./format-duration")); - -var _foldLine = _interopRequireDefault(require("./fold-line")); - -var _setLocation = _interopRequireDefault(require("./set-location")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -},{"./fold-line":179,"./format-date":180,"./format-duration":181,"./set-alarm":184,"./set-contact":185,"./set-description":186,"./set-geolocation":187,"./set-location":188,"./set-organizer":189,"./set-summary":190}],184:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = setAlarm; - -var _formatDate = _interopRequireDefault(require("./format-date")); - -var _foldLine = _interopRequireDefault(require("./fold-line")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function setDuration(_ref) { - var weeks = _ref.weeks, - days = _ref.days, - hours = _ref.hours, - minutes = _ref.minutes, - seconds = _ref.seconds; - var formattedString = 'P'; - formattedString += weeks ? "".concat(weeks, "W") : ''; - formattedString += days ? "".concat(days, "D") : ''; - formattedString += 'T'; - formattedString += hours ? "".concat(hours, "H") : ''; - formattedString += minutes ? "".concat(minutes, "M") : ''; - formattedString += seconds ? "".concat(seconds, "S") : ''; - return formattedString; -} - -function setTrigger(trigger) { - var formattedString = ''; - - if (Array.isArray(trigger)) { - formattedString = "TRIGGER;VALUE=DATE-TIME:".concat((0, _formatDate["default"])(trigger), "\r\n"); - } else { - var alert = trigger.before ? '-' : ''; - formattedString = "TRIGGER:".concat(alert + setDuration(trigger), "\r\n"); - } - - return formattedString; -} - -function setAction(action) { - return action.toUpperCase(); -} - -function setAlarm() { - var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var action = attributes.action, - repeat = attributes.repeat, - description = attributes.description, - duration = attributes.duration, - attach = attributes.attach, - attachType = attributes.attachType, - trigger = attributes.trigger, - summary = attributes.summary; - var formattedString = 'BEGIN:VALARM\r\n'; - formattedString += (0, _foldLine["default"])("ACTION:".concat(setAction(action))) + '\r\n'; - formattedString += repeat ? (0, _foldLine["default"])("REPEAT:".concat(repeat)) + '\r\n' : ''; - formattedString += description ? (0, _foldLine["default"])("DESCRIPTION:".concat(description)) + '\r\n' : ''; - formattedString += duration ? (0, _foldLine["default"])("DURATION:".concat(setDuration(duration))) + '\r\n' : ''; - var attachInfo = attachType ? attachType : 'FMTTYPE=audio/basic'; - formattedString += attach ? (0, _foldLine["default"])("ATTACH;".concat(attachInfo, ":").concat(attach)) + '\r\n' : ''; - formattedString += trigger ? setTrigger(trigger) : ''; - formattedString += summary ? (0, _foldLine["default"])("SUMMARY:".concat(summary)) + '\r\n' : ''; - formattedString += 'END:VALARM\r\n'; - return formattedString; -} // Example: A duration of 15 days, 5 hours, and 20 seconds would be: -// P15DT5H0M20S -// A duration of 7 weeks would be: -// P7W -},{"./fold-line":179,"./format-date":180}],185:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = setContact; - -function setContact(_ref) { - var name = _ref.name, - email = _ref.email, - rsvp = _ref.rsvp, - dir = _ref.dir, - partstat = _ref.partstat, - role = _ref.role; - var formattedAttendee = ''; - formattedAttendee += rsvp ? 'RSVP=TRUE;' : 'RSVP=FALSE;'; - formattedAttendee += role ? "ROLE=".concat(role, ";") : ''; - formattedAttendee += partstat ? "PARTSTAT=".concat(partstat, ";") : ''; - formattedAttendee += dir ? "DIR=".concat(dir, ";") : ''; - formattedAttendee += 'CN='; - formattedAttendee += name || 'Unnamed attendee'; - formattedAttendee += email ? ":mailto:".concat(email) : ''; - return formattedAttendee; -} -},{}],186:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = setDescription; - -var _formatText = _interopRequireDefault(require("./format-text")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function setDescription(description) { - return (0, _formatText["default"])(description); -} -},{"./format-text":182}],187:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = setGeolocation; - -function setGeolocation(_ref) { - var lat = _ref.lat, - lon = _ref.lon; - return "".concat(lat, ";").concat(lon); -} -},{}],188:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = setLocation; - -var _formatText = _interopRequireDefault(require("./format-text")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function setLocation(location) { - return (0, _formatText["default"])(location); -} -},{"./format-text":182}],189:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = setOrganizer; - -function setOrganizer(_ref) { - var name = _ref.name, - email = _ref.email, - dir = _ref.dir; - var formattedOrganizer = ''; - formattedOrganizer += dir ? "DIR=".concat(dir, ";") : ''; - formattedOrganizer += 'CN='; - formattedOrganizer += name || 'Organizer'; - formattedOrganizer += email ? ":mailto:".concat(email) : ''; - return formattedOrganizer; -} -},{}],190:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = setSummary; - -var _formatText = _interopRequireDefault(require("./format-text")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function setSummary(summary) { - return (0, _formatText["default"])(summary); -} -},{"./format-text":182}],191:[function(require,module,exports){ -var ics = require('./dist'); - -module.exports = ics; - -},{"./dist":173}],192:[function(require,module,exports){ -/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] - - i += d - - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} - - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} - - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) - } else { - m = m + Math.pow(2, mLen) - e = e - eBias - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) -} - -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - - value = Math.abs(value) - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 - } - - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = ((value * c) - 1) * Math.pow(2, mLen) - e = e + eBias - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - - buffer[offset + i - d] |= s * 128 -} - -},{}],193:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }) - } - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } - } -} - -},{}],194:[function(require,module,exports){ -'use strict'; - -var ip = exports; -var Buffer = require('buffer').Buffer; -var os = require('os'); - -ip.toBuffer = function(ip, buff, offset) { - offset = ~~offset; - - var result; - - if (this.isV4Format(ip)) { - result = buff || new Buffer(offset + 4); - ip.split(/\./g).map(function(byte) { - result[offset++] = parseInt(byte, 10) & 0xff; - }); - } else if (this.isV6Format(ip)) { - var sections = ip.split(':', 8); - - var i; - for (i = 0; i < sections.length; i++) { - var isv4 = this.isV4Format(sections[i]); - var v4Buffer; - - if (isv4) { - v4Buffer = this.toBuffer(sections[i]); - sections[i] = v4Buffer.slice(0, 2).toString('hex'); - } - - if (v4Buffer && ++i < 8) { - sections.splice(i, 0, v4Buffer.slice(2, 4).toString('hex')); - } - } - - if (sections[0] === '') { - while (sections.length < 8) sections.unshift('0'); - } else if (sections[sections.length - 1] === '') { - while (sections.length < 8) sections.push('0'); - } else if (sections.length < 8) { - for (i = 0; i < sections.length && sections[i] !== ''; i++); - var argv = [ i, 1 ]; - for (i = 9 - sections.length; i > 0; i--) { - argv.push('0'); - } - sections.splice.apply(sections, argv); - } - - result = buff || new Buffer(offset + 16); - for (i = 0; i < sections.length; i++) { - var word = parseInt(sections[i], 16); - result[offset++] = (word >> 8) & 0xff; - result[offset++] = word & 0xff; - } - } - - if (!result) { - throw Error('Invalid ip address: ' + ip); - } - - return result; -}; - -ip.toString = function(buff, offset, length) { - offset = ~~offset; - length = length || (buff.length - offset); - - var result = []; - if (length === 4) { - // IPv4 - for (var i = 0; i < length; i++) { - result.push(buff[offset + i]); - } - result = result.join('.'); - } else if (length === 16) { - // IPv6 - for (var i = 0; i < length; i += 2) { - result.push(buff.readUInt16BE(offset + i).toString(16)); - } - result = result.join(':'); - result = result.replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3'); - result = result.replace(/:{3,4}/, '::'); - } - - return result; -}; - -var ipv4Regex = /^(\d{1,3}\.){3,3}\d{1,3}$/; -var ipv6Regex = - /^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i; - -ip.isV4Format = function(ip) { - return ipv4Regex.test(ip); -}; - -ip.isV6Format = function(ip) { - return ipv6Regex.test(ip); -}; -function _normalizeFamily(family) { - return family ? family.toLowerCase() : 'ipv4'; -} - -ip.fromPrefixLen = function(prefixlen, family) { - if (prefixlen > 32) { - family = 'ipv6'; - } else { - family = _normalizeFamily(family); - } - - var len = 4; - if (family === 'ipv6') { - len = 16; - } - var buff = new Buffer(len); - - for (var i = 0, n = buff.length; i < n; ++i) { - var bits = 8; - if (prefixlen < 8) { - bits = prefixlen; - } - prefixlen -= bits; - - buff[i] = ~(0xff >> bits) & 0xff; - } - - return ip.toString(buff); -}; - -ip.mask = function(addr, mask) { - addr = ip.toBuffer(addr); - mask = ip.toBuffer(mask); - - var result = new Buffer(Math.max(addr.length, mask.length)); - - var i = 0; - // Same protocol - do bitwise and - if (addr.length === mask.length) { - for (i = 0; i < addr.length; i++) { - result[i] = addr[i] & mask[i]; - } - } else if (mask.length === 4) { - // IPv6 address and IPv4 mask - // (Mask low bits) - for (i = 0; i < mask.length; i++) { - result[i] = addr[addr.length - 4 + i] & mask[i]; - } - } else { - // IPv6 mask and IPv4 addr - for (var i = 0; i < result.length - 6; i++) { - result[i] = 0; - } - - // ::ffff:ipv4 - result[10] = 0xff; - result[11] = 0xff; - for (i = 0; i < addr.length; i++) { - result[i + 12] = addr[i] & mask[i + 12]; - } - i = i + 12; - } - for (; i < result.length; i++) - result[i] = 0; - - return ip.toString(result); -}; - -ip.cidr = function(cidrString) { - var cidrParts = cidrString.split('/'); - - var addr = cidrParts[0]; - if (cidrParts.length !== 2) - throw new Error('invalid CIDR subnet: ' + addr); - - var mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10)); - - return ip.mask(addr, mask); -}; - -ip.subnet = function(addr, mask) { - var networkAddress = ip.toLong(ip.mask(addr, mask)); - - // Calculate the mask's length. - var maskBuffer = ip.toBuffer(mask); - var maskLength = 0; - - for (var i = 0; i < maskBuffer.length; i++) { - if (maskBuffer[i] === 0xff) { - maskLength += 8; - } else { - var octet = maskBuffer[i] & 0xff; - while (octet) { - octet = (octet << 1) & 0xff; - maskLength++; - } - } - } - - var numberOfAddresses = Math.pow(2, 32 - maskLength); - - return { - networkAddress: ip.fromLong(networkAddress), - firstAddress: numberOfAddresses <= 2 ? - ip.fromLong(networkAddress) : - ip.fromLong(networkAddress + 1), - lastAddress: numberOfAddresses <= 2 ? - ip.fromLong(networkAddress + numberOfAddresses - 1) : - ip.fromLong(networkAddress + numberOfAddresses - 2), - broadcastAddress: ip.fromLong(networkAddress + numberOfAddresses - 1), - subnetMask: mask, - subnetMaskLength: maskLength, - numHosts: numberOfAddresses <= 2 ? - numberOfAddresses : numberOfAddresses - 2, - length: numberOfAddresses, - contains: function(other) { - return networkAddress === ip.toLong(ip.mask(other, mask)); - } - }; -}; - -ip.cidrSubnet = function(cidrString) { - var cidrParts = cidrString.split('/'); - - var addr = cidrParts[0]; - if (cidrParts.length !== 2) - throw new Error('invalid CIDR subnet: ' + addr); - - var mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10)); - - return ip.subnet(addr, mask); -}; - -ip.not = function(addr) { - var buff = ip.toBuffer(addr); - for (var i = 0; i < buff.length; i++) { - buff[i] = 0xff ^ buff[i]; - } - return ip.toString(buff); -}; - -ip.or = function(a, b) { - a = ip.toBuffer(a); - b = ip.toBuffer(b); - - // same protocol - if (a.length === b.length) { - for (var i = 0; i < a.length; ++i) { - a[i] |= b[i]; - } - return ip.toString(a); - - // mixed protocols - } else { - var buff = a; - var other = b; - if (b.length > a.length) { - buff = b; - other = a; - } - - var offset = buff.length - other.length; - for (var i = offset; i < buff.length; ++i) { - buff[i] |= other[i - offset]; - } - - return ip.toString(buff); - } -}; - -ip.isEqual = function(a, b) { - a = ip.toBuffer(a); - b = ip.toBuffer(b); - - // Same protocol - if (a.length === b.length) { - for (var i = 0; i < a.length; i++) { - if (a[i] !== b[i]) return false; - } - return true; - } - - // Swap - if (b.length === 4) { - var t = b; - b = a; - a = t; - } - - // a - IPv4, b - IPv6 - for (var i = 0; i < 10; i++) { - if (b[i] !== 0) return false; - } - - var word = b.readUInt16BE(10); - if (word !== 0 && word !== 0xffff) return false; - - for (var i = 0; i < 4; i++) { - if (a[i] !== b[i + 12]) return false; - } - - return true; -}; - -ip.isPrivate = function(addr) { - return /^(::f{4}:)?10\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i - .test(addr) || - /^(::f{4}:)?192\.168\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || - /^(::f{4}:)?172\.(1[6-9]|2\d|30|31)\.([0-9]{1,3})\.([0-9]{1,3})$/i - .test(addr) || - /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || - /^(::f{4}:)?169\.254\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || - /^f[cd][0-9a-f]{2}:/i.test(addr) || - /^fe80:/i.test(addr) || - /^::1$/.test(addr) || - /^::$/.test(addr); -}; - -ip.isPublic = function(addr) { - return !ip.isPrivate(addr); -}; - -ip.isLoopback = function(addr) { - return /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/ - .test(addr) || - /^fe80::1$/.test(addr) || - /^::1$/.test(addr) || - /^::$/.test(addr); -}; - -ip.loopback = function(family) { - // - // Default to `ipv4` - // - family = _normalizeFamily(family); - - if (family !== 'ipv4' && family !== 'ipv6') { - throw new Error('family must be ipv4 or ipv6'); - } - - return family === 'ipv4' ? '127.0.0.1' : 'fe80::1'; -}; - -// -// ### function address (name, family) -// #### @name {string|'public'|'private'} **Optional** Name or security -// of the network interface. -// #### @family {ipv4|ipv6} **Optional** IP family of the address (defaults -// to ipv4). -// -// Returns the address for the network interface on the current system with -// the specified `name`: -// * String: First `family` address of the interface. -// If not found see `undefined`. -// * 'public': the first public ip address of family. -// * 'private': the first private ip address of family. -// * undefined: First address with `ipv4` or loopback address `127.0.0.1`. -// -ip.address = function(name, family) { - var interfaces = os.networkInterfaces(); - var all; - - // - // Default to `ipv4` - // - family = _normalizeFamily(family); - - // - // If a specific network interface has been named, - // return the address. - // - if (name && name !== 'private' && name !== 'public') { - var res = interfaces[name].filter(function(details) { - var itemFamily = details.family.toLowerCase(); - return itemFamily === family; - }); - if (res.length === 0) - return undefined; - return res[0].address; - } - - var all = Object.keys(interfaces).map(function (nic) { - // - // Note: name will only be `public` or `private` - // when this is called. - // - var addresses = interfaces[nic].filter(function (details) { - details.family = details.family.toLowerCase(); - if (details.family !== family || ip.isLoopback(details.address)) { - return false; - } else if (!name) { - return true; - } - - return name === 'public' ? ip.isPrivate(details.address) : - ip.isPublic(details.address); - }); - - return addresses.length ? addresses[0].address : undefined; - }).filter(Boolean); - - return !all.length ? ip.loopback(family) : all[0]; -}; - -ip.toLong = function(ip) { - var ipl = 0; - ip.split('.').forEach(function(octet) { - ipl <<= 8; - ipl += parseInt(octet); - }); - return(ipl >>> 0); -}; - -ip.fromLong = function(ipl) { - return ((ipl >>> 24) + '.' + - (ipl >> 16 & 255) + '.' + - (ipl >> 8 & 255) + '.' + - (ipl & 255) ); -}; - -},{"buffer":69,"os":376}],195:[function(require,module,exports){ -'use strict'; - -var hasToStringTag = require('has-tostringtag/shams')(); -var callBound = require('call-bind/callBound'); - -var $toString = callBound('Object.prototype.toString'); - -var isStandardArguments = function isArguments(value) { - if (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) { - return false; - } - return $toString(value) === '[object Arguments]'; -}; - -var isLegacyArguments = function isArguments(value) { - if (isStandardArguments(value)) { - return true; - } - return value !== null && - typeof value === 'object' && - typeof value.length === 'number' && - value.length >= 0 && - $toString(value) !== '[object Array]' && - $toString(value.callee) === '[object Function]'; -}; - -var supportsStandardArguments = (function () { - return isStandardArguments(arguments); -}()); - -isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests - -module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments; - -},{"call-bind/callBound":71,"has-tostringtag/shams":140}],196:[function(require,module,exports){ - -var char = '[a-zA-Z0-9\/\+]' -var trail2 = '[AQgw]==' -var trail4 = '[AEIMQUYcgkosw048]=' -var rx = '(?:' +char+ '{4})*(?:' +char+ '(?:(?:' +trail2 + ')|(?:' +char+trail4+ ')))?' -module.exports = function (prefix,suffix, length) { - if(!Number.isInteger(length)) return new RegExp('^'+(prefix||'')+rx+(suffix||'')+'$') - - var mod = length % 3 - - return new RegExp('^'+(prefix||'')+( - char +'{'+~~((length*8)/6)+'}' + ( - mod === 0 ? '' - : mod === 1 ? trail2 - : trail4 - ) - )+(suffix||'')+'$') -} - - - - - - - - - - - - - - - - -},{}],197:[function(require,module,exports){ -'use strict'; - -var toStr = Object.prototype.toString; -var fnToStr = Function.prototype.toString; -var isFnRegex = /^\s*(?:function)?\*/; -var hasToStringTag = require('has-tostringtag/shams')(); -var getProto = Object.getPrototypeOf; -var getGeneratorFunc = function () { // eslint-disable-line consistent-return - if (!hasToStringTag) { - return false; - } - try { - return Function('return function*() {}')(); - } catch (e) { - } -}; -var GeneratorFunction; - -module.exports = function isGeneratorFunction(fn) { - if (typeof fn !== 'function') { - return false; - } - if (isFnRegex.test(fnToStr.call(fn))) { - return true; - } - if (!hasToStringTag) { - var str = toStr.call(fn); - return str === '[object GeneratorFunction]'; - } - if (!getProto) { - return false; - } - if (typeof GeneratorFunction === 'undefined') { - var generatorFunc = getGeneratorFunc(); - GeneratorFunction = generatorFunc ? getProto(generatorFunc) : false; - } - return getProto(fn) === GeneratorFunction; -}; - -},{"has-tostringtag/shams":140}],198:[function(require,module,exports){ -var reIpv4FirstPass = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ - -var reSubnetString = /\/\d{1,3}(?=%|$)/ -var reForwardSlash = /\// -var reZone = /%.*$/ -var reBadCharacters = /([^0-9a-f:/%])/i -var reBadAddress = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]|\/$)/i - -function validate4 (input) { - if (!(reIpv4FirstPass.test(input))) return false - - var parts = input.split('.') - - if (parts.length !== 4) return false - - if (parts[0][0] === '0' && parts[0].length > 1) return false - if (parts[1][0] === '0' && parts[1].length > 1) return false - if (parts[2][0] === '0' && parts[2].length > 1) return false - if (parts[3][0] === '0' && parts[3].length > 1) return false - - var n0 = Number(parts[0]) - var n1 = Number(parts[1]) - var n2 = Number(parts[2]) - var n3 = Number(parts[3]) - - return (n0 >= 0 && n0 < 256 && n1 >= 0 && n1 < 256 && n2 >= 0 && n2 < 256 && n3 >= 0 && n3 < 256) -} - -function validate6 (input) { - var withoutSubnet = input.replace(reSubnetString, '') - var hasSubnet = (input.length !== withoutSubnet.length) - - // FIXME: this should probably be an option in the future - if (hasSubnet) return false - - if (!hasSubnet) { - if (reForwardSlash.test(input)) return false - } - - var withoutZone = withoutSubnet.replace(reZone, '') - var lastPartSeparator = withoutZone.lastIndexOf(':') - - if (lastPartSeparator === -1) return false - - var lastPart = withoutZone.substring(lastPartSeparator + 1) - var hasV4Part = validate4(lastPart) - var address = (hasV4Part ? withoutZone.substring(0, lastPartSeparator + 1) + '1234:5678' : withoutZone) - - if (reBadCharacters.test(address)) return false - if (reBadAddress.test(address)) return false - - var halves = address.split('::') - - if (halves.length > 2) return false - - if (halves.length === 2) { - var first = (halves[0] === '' ? [] : halves[0].split(':')) - var last = (halves[1] === '' ? [] : halves[1].split(':')) - var remainingLength = 8 - (first.length + last.length) - - if (remainingLength <= 0) return false - } else { - if (address.split(':').length !== 8) return false - } - - return true -} - -function validate (input) { - return validate4(input) || validate6(input) -} - -module.exports = function validator (options) { - if (!options) options = {} - - if (options.version === 4) return validate4 - if (options.version === 6) return validate6 - if (options.version == null) return validate - - throw new Error('Unknown version: ' + options.version) -} - -module.exports['__all_regexes__'] = [ - reIpv4FirstPass, - reSubnetString, - reForwardSlash, - reZone, - reBadCharacters, - reBadAddress -] - -},{}],199:[function(require,module,exports){ -var createIpValidator = require('is-my-ip-valid') - -var reEmailWhitespace = /\s/ -var reHostnameFirstPass = /^[a-zA-Z0-9.-]+$/ -var reHostnamePart = /^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/ -var rePhoneFirstPass = /^\+[0-9][0-9 ]{5,27}[0-9]$/ -var rePhoneDoubleSpace = / {2}/ -var rePhoneGlobalSpace = / /g - -exports['date-time'] = /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}[tT ]\d{2}:\d{2}:\d{2}(?:\.\d+|)([zZ]|[+-]\d{2}:\d{2})$/ -exports['date'] = /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}$/ -exports['time'] = /^\d{2}:\d{2}:\d{2}$/ -exports['email'] = function (input) { return (input.indexOf('@') !== -1) && (!reEmailWhitespace.test(input)) } -exports['ip-address'] = exports['ipv4'] = createIpValidator({ version: 4 }) -exports['ipv6'] = createIpValidator({ version: 6 }) -exports['uri'] = /^[a-zA-Z][a-zA-Z0-9+\-.]*:[^\s]*$/ -exports['color'] = /(#?([0-9A-Fa-f]{3,6})\b)|(aqua)|(black)|(blue)|(fuchsia)|(gray)|(green)|(lime)|(maroon)|(navy)|(olive)|(orange)|(purple)|(red)|(silver)|(teal)|(white)|(yellow)|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\))/ -exports['hostname'] = function (input) { - if (!(reHostnameFirstPass.test(input))) return false - - var parts = input.split('.') - - for (var i = 0; i < parts.length; i++) { - if (!(reHostnamePart.test(parts[i]))) return false - } - - return true -} -exports['alpha'] = /^[a-zA-Z]+$/ -exports['alphanumeric'] = /^[a-zA-Z0-9]+$/ -exports['style'] = /.:\s*[^;]/g -exports['phone'] = function (input) { - if (!(rePhoneFirstPass.test(input))) return false - if (rePhoneDoubleSpace.test(input)) return false - - var digits = input.substring(1).replace(rePhoneGlobalSpace, '').length - - return (digits >= 7 && digits <= 15) -} -exports['utc-millisec'] = /^[0-9]{1,15}\.?[0-9]{0,15}$/ - -},{"is-my-ip-valid":198}],200:[function(require,module,exports){ -var genobj = require('generate-object-property') -var genfun = require('generate-function') -var jsonpointer = require('jsonpointer') -var xtend = require('xtend') -var formats = require('./formats') - -var get = function(obj, additionalSchemas, ptr) { - - var visit = function(sub) { - if (sub && sub.id === ptr) return sub - if (typeof sub !== 'object' || !sub) return null - return Object.keys(sub).reduce(function(res, k) { - return res || visit(sub[k]) - }, null) - } - - var res = visit(obj) - if (res) return res - - ptr = ptr.replace(/^#/, '') - ptr = ptr.replace(/\/$/, '') - - try { - return jsonpointer.get(obj, decodeURI(ptr)) - } catch (err) { - var end = ptr.indexOf('#') - var other - // external reference - if (end !== 0) { - // fragment doesn't exist. - if (end === -1) { - other = additionalSchemas[ptr] - } else { - var ext = ptr.slice(0, end) - other = additionalSchemas[ext] - var fragment = ptr.slice(end).replace(/^#/, '') - try { - return jsonpointer.get(other, fragment) - } catch (err) {} - } - } else { - other = additionalSchemas[ptr] - } - return other || null - } -} - -var types = {} - -types.any = function() { - return 'true' -} - -types.null = function(name) { - return name+' === null' -} - -types.boolean = function(name) { - return 'typeof '+name+' === "boolean"' -} - -types.array = function(name) { - return 'Array.isArray('+name+')' -} - -types.object = function(name) { - return 'typeof '+name+' === "object" && '+name+' && !Array.isArray('+name+')' -} - -types.number = function(name) { - return 'typeof '+name+' === "number" && isFinite('+name+')' -} - -types.integer = function(name) { - return 'typeof '+name+' === "number" && (Math.floor('+name+') === '+name+' || '+name+' > 9007199254740992 || '+name+' < -9007199254740992)' -} - -types.string = function(name) { - return 'typeof '+name+' === "string"' -} - -var unique = function(array, len) { - len = Math.min(len === -1 ? array.length : len, array.length) - var list = [] - for (var i = 0; i < len; i++) { - list.push(typeof array[i] === 'object' ? JSON.stringify(array[i]) : array[i]) - } - for (var i = 1; i < list.length; i++) { - if (list.indexOf(list[i]) !== i) return false - } - return true -} - -var isMultipleOf = function(name, multipleOf) { - var res; - var factor = ((multipleOf | 0) !== multipleOf) ? Math.pow(10, multipleOf.toString().split('.').pop().length) : 1 - if (factor > 1) { - var factorName = ((name | 0) !== name) ? Math.pow(10, name.toString().split('.').pop().length) : 1 - if (factorName > factor) res = true - else res = Math.round(factor * name) % (factor * multipleOf) - } - else res = name % multipleOf; - return !res; -} - -var testLimitedRegex = function (r, s, maxLength) { - if (maxLength > -1 && s.length > maxLength) return true - return r.test(s) -} - -var compile = function(schema, cache, root, reporter, opts) { - var fmts = opts ? xtend(formats, opts.formats) : formats - var scope = {unique:unique, formats:fmts, isMultipleOf:isMultipleOf, testLimitedRegex:testLimitedRegex} - var verbose = opts ? !!opts.verbose : false; - var greedy = opts && opts.greedy !== undefined ? - opts.greedy : false; - - var syms = {} - var allocated = [] - var gensym = function(name) { - var res = name+(syms[name] = (syms[name] || 0)+1) - allocated.push(res) - return res - } - - var formatName = function(field) { - var s = JSON.stringify(field) - try { - var pattern = /\[([^\[\]"]+)\]/ - while (pattern.test(s)) s = s.replace(pattern, replacer) - return s - } catch (_) { - return JSON.stringify(field) - } - - function replacer (match, v) { - if (allocated.indexOf(v) === -1) throw new Error('Unreplaceable') - return '." + ' + v + ' + "' - } - } - - var reversePatterns = {} - var patterns = function(p) { - if (reversePatterns[p]) return reversePatterns[p] - var n = gensym('pattern') - scope[n] = new RegExp(p) - reversePatterns[p] = n - return n - } - - var vars = ['i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','y','z'] - var genloop = function() { - var v = vars.shift() - vars.push(v+v[0]) - allocated.push(v) - return v - } - - var visit = function(name, node, reporter, filter, schemaPath) { - var properties = node.properties - var type = node.type - var tuple = false - - if (Array.isArray(node.items)) { // tuple type - properties = {} - node.items.forEach(function(item, i) { - properties[i] = item - }) - type = 'array' - tuple = true - } - - var indent = 0 - var error = function(msg, prop, value) { - validate('errors++') - if (reporter === true) { - validate('if (validate.errors === null) validate.errors = []') - if (verbose) { - validate( - 'validate.errors.push({field:%s,message:%s,value:%s,type:%s,schemaPath:%s})', - formatName(prop || name), - JSON.stringify(msg), - value || name, - JSON.stringify(type), - JSON.stringify(schemaPath) - ) - } else { - validate('validate.errors.push({field:%s,message:%s})', formatName(prop || name), JSON.stringify(msg)) - } - } - } - - if (node.required === true) { - indent++ - validate('if (%s === undefined) {', name) - error('is required') - validate('} else {') - } else { - indent++ - validate('if (%s !== undefined) {', name) - } - - var valid = [].concat(type) - .map(function(t) { - if (t && !types.hasOwnProperty(t)) { - throw new Error('Unknown type: ' + t) - } - - return types[t || 'any'](name) - }) - .join(' || ') || 'true' - - if (valid !== 'true') { - indent++ - validate('if (!(%s)) {', valid) - error('is the wrong type') - validate('} else {') - } - - if (tuple) { - if (node.additionalItems === false) { - validate('if (%s.length > %d) {', name, node.items.length) - error('has additional items') - validate('}') - } else if (node.additionalItems) { - var i = genloop() - validate('for (var %s = %d; %s < %s.length; %s++) {', i, node.items.length, i, name, i) - visit(name+'['+i+']', node.additionalItems, reporter, filter, schemaPath.concat('additionalItems')) - validate('}') - } - } - - if (node.format && fmts[node.format]) { - if (type !== 'string' && formats[node.format]) validate('if (%s) {', types.string(name)) - var n = gensym('format') - scope[n] = fmts[node.format] - - if (typeof scope[n] === 'function') validate('if (!%s(%s)) {', n, name) - else validate('if (!testLimitedRegex(%s, %s, %d)) {', n, name, typeof node.maxLength === 'undefined' ? -1 : node.maxLength) - error('must be '+node.format+' format') - validate('}') - if (type !== 'string' && formats[node.format]) validate('}') - } - - if (Array.isArray(node.required)) { - var n = gensym('missing') - validate('var %s = 0', n) - var checkRequired = function (req) { - var prop = genobj(name, req); - validate('if (%s === undefined) {', prop) - error('is required', prop) - validate('%s++', n) - validate('}') - } - validate('if ((%s)) {', type !== 'object' ? types.object(name) : 'true') - node.required.map(checkRequired) - validate('}'); - if (!greedy) { - validate('if (%s === 0) {', n) - indent++ - } - } - - if (node.uniqueItems) { - if (type !== 'array') validate('if (%s) {', types.array(name)) - validate('if (!(unique(%s, %d))) {', name, node.maxItems || -1) - error('must be unique') - validate('}') - if (type !== 'array') validate('}') - } - - if (node.enum) { - var complex = node.enum.some(function(e) { - return typeof e === 'object' - }) - - var compare = complex ? - function(e) { - return 'JSON.stringify('+name+')'+' !== JSON.stringify('+JSON.stringify(e)+')' - } : - function(e) { - return name+' !== '+JSON.stringify(e) - } - - validate('if (%s) {', node.enum.map(compare).join(' && ') || 'false') - error('must be an enum value') - validate('}') - } - - if (node.dependencies) { - if (type !== 'object') validate('if (%s) {', types.object(name)) - - Object.keys(node.dependencies).forEach(function(key) { - var deps = node.dependencies[key] - if (typeof deps === 'string') deps = [deps] - - var exists = function(k) { - return genobj(name, k) + ' !== undefined' - } - - if (Array.isArray(deps)) { - validate('if (%s !== undefined && !(%s)) {', genobj(name, key), deps.map(exists).join(' && ') || 'true') - error('dependencies not set') - validate('}') - } - if (typeof deps === 'object') { - validate('if (%s !== undefined) {', genobj(name, key)) - visit(name, deps, reporter, filter, schemaPath.concat(['dependencies', key])) - validate('}') - } - }) - - if (type !== 'object') validate('}') - } - - if (node.additionalProperties || node.additionalProperties === false) { - if (type !== 'object') validate('if (%s) {', types.object(name)) - - var i = genloop() - var keys = gensym('keys') - - var toCompare = function(p) { - return keys+'['+i+'] !== '+JSON.stringify(p) - } - - var toTest = function(p) { - return '!'+patterns(p)+'.test('+keys+'['+i+'])' - } - - var additionalProp = Object.keys(properties || {}).map(toCompare) - .concat(Object.keys(node.patternProperties || {}).map(toTest)) - .join(' && ') || 'true' - - validate('var %s = Object.keys(%s)', keys, name) - ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i) - ('if (%s) {', additionalProp) - - if (node.additionalProperties === false) { - if (filter) validate('delete %s', name+'['+keys+'['+i+']]') - error('has additional properties', null, JSON.stringify(name+'.') + ' + ' + keys + '['+i+']') - } else { - visit(name+'['+keys+'['+i+']]', node.additionalProperties, reporter, filter, schemaPath.concat(['additionalProperties'])) - } - - validate - ('}') - ('}') - - if (type !== 'object') validate('}') - } - - if (node.$ref) { - var sub = get(root, opts && opts.schemas || {}, node.$ref) - if (sub) { - var fn = cache[node.$ref] - if (!fn) { - cache[node.$ref] = function proxy(data) { - return fn(data) - } - fn = compile(sub, cache, root, false, opts) - } - var n = gensym('ref') - scope[n] = fn - validate('if (!(%s(%s))) {', n, name) - error('referenced schema does not match') - validate('}') - } - } - - if (node.not) { - var prev = gensym('prev') - validate('var %s = errors', prev) - visit(name, node.not, false, filter, schemaPath.concat('not')) - validate('if (%s === errors) {', prev) - error('negative schema matches') - validate('} else {') - ('errors = %s', prev) - ('}') - } - - if (node.items && !tuple) { - if (type !== 'array') validate('if (%s) {', types.array(name)) - - var i = genloop() - validate('for (var %s = 0; %s < %s.length; %s++) {', i, i, name, i) - visit(name+'['+i+']', node.items, reporter, filter, schemaPath.concat('items')) - validate('}') - - if (type !== 'array') validate('}') - } - - if (node.patternProperties) { - if (type !== 'object') validate('if (%s) {', types.object(name)) - var keys = gensym('keys') - var i = genloop() - validate - ('var %s = Object.keys(%s)', keys, name) - ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i) - - Object.keys(node.patternProperties).forEach(function(key) { - var p = patterns(key) - validate('if (%s.test(%s)) {', p, keys+'['+i+']') - visit(name+'['+keys+'['+i+']]', node.patternProperties[key], reporter, filter, schemaPath.concat(['patternProperties', key])) - validate('}') - }) - - validate('}') - if (type !== 'object') validate('}') - } - - if (node.pattern) { - var p = patterns(node.pattern) - if (type !== 'string') validate('if (%s) {', types.string(name)) - validate('if (!(testLimitedRegex(%s, %s, %d))) {', p, name, typeof node.maxLength === 'undefined' ? -1 : node.maxLength) - error('pattern mismatch') - validate('}') - if (type !== 'string') validate('}') - } - - if (node.allOf) { - node.allOf.forEach(function(sch, key) { - visit(name, sch, reporter, filter, schemaPath.concat(['allOf', key])) - }) - } - - if (node.anyOf && node.anyOf.length) { - var prev = gensym('prev') - - node.anyOf.forEach(function(sch, i) { - if (i === 0) { - validate('var %s = errors', prev) - } else { - validate('if (errors !== %s) {', prev) - ('errors = %s', prev) - } - visit(name, sch, false, false, schemaPath) - }) - node.anyOf.forEach(function(sch, i) { - if (i) validate('}') - }) - validate('if (%s !== errors) {', prev) - error('no schemas match') - validate('}') - } - - if (node.oneOf && node.oneOf.length) { - var prev = gensym('prev') - var passes = gensym('passes') - - validate - ('var %s = errors', prev) - ('var %s = 0', passes) - - node.oneOf.forEach(function(sch, i) { - visit(name, sch, false, false, schemaPath) - validate('if (%s === errors) {', prev) - ('%s++', passes) - ('} else {') - ('errors = %s', prev) - ('}') - }) - - validate('if (%s !== 1) {', passes) - error('no (or more than one) schemas match') - validate('}') - } - - if (node.multipleOf !== undefined) { - if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) - - validate('if (!isMultipleOf(%s, %d)) {', name, node.multipleOf) - - error('has a remainder') - validate('}') - - if (type !== 'number' && type !== 'integer') validate('}') - } - - if (node.maxProperties !== undefined) { - if (type !== 'object') validate('if (%s) {', types.object(name)) - - validate('if (Object.keys(%s).length > %d) {', name, node.maxProperties) - error('has more properties than allowed') - validate('}') - - if (type !== 'object') validate('}') - } - - if (node.minProperties !== undefined) { - if (type !== 'object') validate('if (%s) {', types.object(name)) - - validate('if (Object.keys(%s).length < %d) {', name, node.minProperties) - error('has less properties than allowed') - validate('}') - - if (type !== 'object') validate('}') - } - - if (node.maxItems !== undefined) { - if (type !== 'array') validate('if (%s) {', types.array(name)) - - validate('if (%s.length > %d) {', name, node.maxItems) - error('has more items than allowed') - validate('}') - - if (type !== 'array') validate('}') - } - - if (node.minItems !== undefined) { - if (type !== 'array') validate('if (%s) {', types.array(name)) - - validate('if (%s.length < %d) {', name, node.minItems) - error('has less items than allowed') - validate('}') - - if (type !== 'array') validate('}') - } - - if (node.maxLength !== undefined) { - if (type !== 'string') validate('if (%s) {', types.string(name)) - - validate('if (%s.length > %d) {', name, node.maxLength) - error('has longer length than allowed') - validate('}') - - if (type !== 'string') validate('}') - } - - if (node.minLength !== undefined) { - if (type !== 'string') validate('if (%s) {', types.string(name)) - - validate('if (%s.length < %d) {', name, node.minLength) - error('has less length than allowed') - validate('}') - - if (type !== 'string') validate('}') - } - - if (node.minimum !== undefined) { - if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) - - validate('if (%s %s %d) {', name, node.exclusiveMinimum ? '<=' : '<', node.minimum) - error('is less than minimum') - validate('}') - - if (type !== 'number' && type !== 'integer') validate('}') - } - - if (node.maximum !== undefined) { - if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) - - validate('if (%s %s %d) {', name, node.exclusiveMaximum ? '>=' : '>', node.maximum) - error('is more than maximum') - validate('}') - - if (type !== 'number' && type !== 'integer') validate('}') - } - - if (properties) { - Object.keys(properties).forEach(function(p) { - if (Array.isArray(type) && type.indexOf('null') !== -1) validate('if (%s !== null) {', name) - - visit( - genobj(name, p), - properties[p], - reporter, - filter, - schemaPath.concat(tuple ? p : ['properties', p]) - ) - - if (Array.isArray(type) && type.indexOf('null') !== -1) validate('}') - }) - } - - while (indent--) validate('}') - } - - var validate = genfun - ('function validate(data) {') - // Since undefined is not a valid JSON value, we coerce to null and other checks will catch this - ('if (data === undefined) data = null') - ('validate.errors = null') - ('var errors = 0') - - visit('data', schema, reporter, opts && opts.filter, []) - - validate - ('return errors === 0') - ('}') - - validate = validate.toFunction(scope) - validate.errors = null - - if (Object.defineProperty) { - Object.defineProperty(validate, 'error', { - get: function() { - if (!validate.errors) return '' - return validate.errors.map(function(err) { - return err.field + ' ' + err.message; - }).join('\n') - } - }) - } - - validate.toJSON = function() { - return schema - } - - return validate -} - -module.exports = function(schema, opts) { - if (typeof schema === 'string') schema = JSON.parse(schema) - return compile(schema, {}, schema, true, opts) -} - -module.exports.filter = function(schema, opts) { - var validate = module.exports(schema, xtend(opts, {filter: true})) - return function(sch) { - validate(sch) - return sch - } -} - -},{"./formats":199,"generate-function":135,"generate-object-property":136,"jsonpointer":206,"xtend":632}],201:[function(require,module,exports){ -"use strict" -function isProperty(str) { - return /^[$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc][$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc0-9\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19b0-\u19c0\u19c8\u19c9\u19d0-\u19d9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f]*$/.test(str) -} -module.exports = isProperty -},{}],202:[function(require,module,exports){ -(function (global){(function (){ -'use strict'; - -var forEach = require('foreach'); -var availableTypedArrays = require('available-typed-arrays'); -var callBound = require('call-bind/callBound'); - -var $toString = callBound('Object.prototype.toString'); -var hasToStringTag = require('has-tostringtag/shams')(); - -var typedArrays = availableTypedArrays(); - -var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) { - for (var i = 0; i < array.length; i += 1) { - if (array[i] === value) { - return i; - } - } - return -1; -}; -var $slice = callBound('String.prototype.slice'); -var toStrTags = {}; -var gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor'); -var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof'); -if (hasToStringTag && gOPD && getPrototypeOf) { - forEach(typedArrays, function (typedArray) { - var arr = new global[typedArray](); - if (Symbol.toStringTag in arr) { - var proto = getPrototypeOf(arr); - var descriptor = gOPD(proto, Symbol.toStringTag); - if (!descriptor) { - var superProto = getPrototypeOf(proto); - descriptor = gOPD(superProto, Symbol.toStringTag); - } - toStrTags[typedArray] = descriptor.get; - } - }); -} - -var tryTypedArrays = function tryAllTypedArrays(value) { - var anyTrue = false; - forEach(toStrTags, function (getter, typedArray) { - if (!anyTrue) { - try { - anyTrue = getter.call(value) === typedArray; - } catch (e) { /**/ } - } - }); - return anyTrue; -}; - -module.exports = function isTypedArray(value) { - if (!value || typeof value !== 'object') { return false; } - if (!hasToStringTag || !(Symbol.toStringTag in value)) { - var tag = $slice($toString(value), 8, -1); - return $indexOf(typedArrays, tag) > -1; - } - if (!gOPD) { return false; } - return tryTypedArrays(value); -}; - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"available-typed-arrays":20,"call-bind/callBound":71,"es-abstract/helpers/getOwnPropertyDescriptor":128,"foreach":132,"has-tostringtag/shams":140}],203:[function(require,module,exports){ -module.exports = isTypedArray -isTypedArray.strict = isStrictTypedArray -isTypedArray.loose = isLooseTypedArray - -var toString = Object.prototype.toString -var names = { - '[object Int8Array]': true - , '[object Int16Array]': true - , '[object Int32Array]': true - , '[object Uint8Array]': true - , '[object Uint8ClampedArray]': true - , '[object Uint16Array]': true - , '[object Uint32Array]': true - , '[object Float32Array]': true - , '[object Float64Array]': true -} - -function isTypedArray(arr) { - return ( - isStrictTypedArray(arr) - || isLooseTypedArray(arr) - ) -} - -function isStrictTypedArray(arr) { - return ( - arr instanceof Int8Array - || arr instanceof Int16Array - || arr instanceof Int32Array - || arr instanceof Uint8Array - || arr instanceof Uint8ClampedArray - || arr instanceof Uint16Array - || arr instanceof Uint32Array - || arr instanceof Float32Array - || arr instanceof Float64Array - ) -} - -function isLooseTypedArray(arr) { - return names[toString.call(arr)] -} - -},{}],204:[function(require,module,exports){ -module.exports={ - "com.ac": true, - "net.ac": true, - "gov.ac": true, - "org.ac": true, - "mil.ac": true, - "co.ae": true, - "net.ae": true, - "gov.ae": true, - "ac.ae": true, - "sch.ae": true, - "org.ae": true, - "mil.ae": true, - "pro.ae": true, - "name.ae": true, - "com.af": true, - "edu.af": true, - "gov.af": true, - "net.af": true, - "org.af": true, - "com.al": true, - "edu.al": true, - "gov.al": true, - "mil.al": true, - "net.al": true, - "org.al": true, - "ed.ao": true, - "gv.ao": true, - "og.ao": true, - "co.ao": true, - "pb.ao": true, - "it.ao": true, - "com.ar": true, - "edu.ar": true, - "gob.ar": true, - "gov.ar": true, - "int.ar": true, - "mil.ar": true, - "net.ar": true, - "org.ar": true, - "tur.ar": true, - "gv.at": true, - "ac.at": true, - "co.at": true, - "or.at": true, - "com.au": true, - "net.au": true, - "org.au": true, - "edu.au": true, - "gov.au": true, - "csiro.au": true, - "asn.au": true, - "id.au": true, - "vic.au": true, - "sa.au": true, - "wa.au": true, - "nt.au": true, - "tas.au": true, - "qld.au": true, - "act.au": true, - "conf.au": true, - "oz.au": true, - "org.ba": true, - "net.ba": true, - "edu.ba": true, - "gov.ba": true, - "mil.ba": true, - "unsa.ba": true, - "untz.ba": true, - "unmo.ba": true, - "unbi.ba": true, - "unze.ba": true, - "co.ba": true, - "com.ba": true, - "rs.ba": true, - "co.bb": true, - "com.bb": true, - "net.bb": true, - "org.bb": true, - "gov.bb": true, - "edu.bb": true, - "info.bb": true, - "store.bb": true, - "tv.bb": true, - "biz.bb": true, - "com.bh": true, - "info.bh": true, - "cc.bh": true, - "edu.bh": true, - "biz.bh": true, - "net.bh": true, - "org.bh": true, - "gov.bh": true, - "com.bn": true, - "edu.bn": true, - "gov.bn": true, - "net.bn": true, - "org.bn": true, - "com.bo": true, - "net.bo": true, - "org.bo": true, - "tv.bo": true, - "mil.bo": true, - "int.bo": true, - "gob.bo": true, - "gov.bo": true, - "edu.bo": true, - "adm.br": true, - "adv.br": true, - "agr.br": true, - "am.br": true, - "arq.br": true, - "art.br": true, - "ato.br": true, - "b.br": true, - "bio.br": true, - "blog.br": true, - "bmd.br": true, - "cim.br": true, - "cng.br": true, - "cnt.br": true, - "com.br": true, - "coop.br": true, - "ecn.br": true, - "edu.br": true, - "eng.br": true, - "esp.br": true, - "etc.br": true, - "eti.br": true, - "far.br": true, - "flog.br": true, - "fm.br": true, - "fnd.br": true, - "fot.br": true, - "fst.br": true, - "g12.br": true, - "ggf.br": true, - "gov.br": true, - "imb.br": true, - "ind.br": true, - "inf.br": true, - "jor.br": true, - "jus.br": true, - "lel.br": true, - "mat.br": true, - "med.br": true, - "mil.br": true, - "mus.br": true, - "net.br": true, - "nom.br": true, - "not.br": true, - "ntr.br": true, - "odo.br": true, - "org.br": true, - "ppg.br": true, - "pro.br": true, - "psc.br": true, - "psi.br": true, - "qsl.br": true, - "rec.br": true, - "slg.br": true, - "srv.br": true, - "tmp.br": true, - "trd.br": true, - "tur.br": true, - "tv.br": true, - "vet.br": true, - "vlog.br": true, - "wiki.br": true, - "zlg.br": true, - "com.bs": true, - "net.bs": true, - "org.bs": true, - "edu.bs": true, - "gov.bs": true, - "om.bz": true, - "du.bz": true, - "ov.bz": true, - "et.bz": true, - "rg.bz": true, - "ab.ca": true, - "bc.ca": true, - "mb.ca": true, - "nb.ca": true, - "nf.ca": true, - "nl.ca": true, - "ns.ca": true, - "nt.ca": true, - "nu.ca": true, - "on.ca": true, - "pe.ca": true, - "qc.ca": true, - "sk.ca": true, - "yk.ca": true, - "co.ck": true, - "org.ck": true, - "edu.ck": true, - "gov.ck": true, - "net.ck": true, - "gen.ck": true, - "biz.ck": true, - "info.ck": true, - "ac.cn": true, - "com.cn": true, - "edu.cn": true, - "gov.cn": true, - "mil.cn": true, - "net.cn": true, - "org.cn": true, - "ah.cn": true, - "bj.cn": true, - "cq.cn": true, - "fj.cn": true, - "gd.cn": true, - "gs.cn": true, - "gz.cn": true, - "gx.cn": true, - "ha.cn": true, - "hb.cn": true, - "he.cn": true, - "hi.cn": true, - "hl.cn": true, - "hn.cn": true, - "jl.cn": true, - "js.cn": true, - "jx.cn": true, - "ln.cn": true, - "nm.cn": true, - "nx.cn": true, - "qh.cn": true, - "sc.cn": true, - "sd.cn": true, - "sh.cn": true, - "sn.cn": true, - "sx.cn": true, - "tj.cn": true, - "tw.cn": true, - "xj.cn": true, - "xz.cn": true, - "yn.cn": true, - "zj.cn": true, - "com.co": true, - "org.co": true, - "edu.co": true, - "gov.co": true, - "net.co": true, - "mil.co": true, - "nom.co": true, - "ac.cr": true, - "co.cr": true, - "ed.cr": true, - "fi.cr": true, - "go.cr": true, - "or.cr": true, - "sa.cr": true, - "cr": true, - "ac.cy": true, - "net.cy": true, - "gov.cy": true, - "org.cy": true, - "pro.cy": true, - "name.cy": true, - "ekloges.cy": true, - "tm.cy": true, - "ltd.cy": true, - "biz.cy": true, - "press.cy": true, - "parliament.cy": true, - "com.cy": true, - "edu.do": true, - "gob.do": true, - "gov.do": true, - "com.do": true, - "sld.do": true, - "org.do": true, - "net.do": true, - "web.do": true, - "mil.do": true, - "art.do": true, - "com.dz": true, - "org.dz": true, - "net.dz": true, - "gov.dz": true, - "edu.dz": true, - "asso.dz": true, - "pol.dz": true, - "art.dz": true, - "com.ec": true, - "info.ec": true, - "net.ec": true, - "fin.ec": true, - "med.ec": true, - "pro.ec": true, - "org.ec": true, - "edu.ec": true, - "gov.ec": true, - "mil.ec": true, - "com.eg": true, - "edu.eg": true, - "eun.eg": true, - "gov.eg": true, - "mil.eg": true, - "name.eg": true, - "net.eg": true, - "org.eg": true, - "sci.eg": true, - "com.er": true, - "edu.er": true, - "gov.er": true, - "mil.er": true, - "net.er": true, - "org.er": true, - "ind.er": true, - "rochest.er": true, - "w.er": true, - "com.es": true, - "nom.es": true, - "org.es": true, - "gob.es": true, - "edu.es": true, - "com.et": true, - "gov.et": true, - "org.et": true, - "edu.et": true, - "net.et": true, - "biz.et": true, - "name.et": true, - "info.et": true, - "ac.fj": true, - "biz.fj": true, - "com.fj": true, - "info.fj": true, - "mil.fj": true, - "name.fj": true, - "net.fj": true, - "org.fj": true, - "pro.fj": true, - "co.fk": true, - "org.fk": true, - "gov.fk": true, - "ac.fk": true, - "nom.fk": true, - "net.fk": true, - "fr": true, - "tm.fr": true, - "asso.fr": true, - "nom.fr": true, - "prd.fr": true, - "presse.fr": true, - "com.fr": true, - "gouv.fr": true, - "co.gg": true, - "net.gg": true, - "org.gg": true, - "com.gh": true, - "edu.gh": true, - "gov.gh": true, - "org.gh": true, - "mil.gh": true, - "co.gl": true, - "com.gl": true, - "edu.gl": true, - "net.gl": true, - "org.gl": true, - "com.gn": true, - "ac.gn": true, - "gov.gn": true, - "org.gn": true, - "net.gn": true, - "com.gr": true, - "edu.gr": true, - "net.gr": true, - "org.gr": true, - "gov.gr": true, - "mil.gr": true, - "com.gt": true, - "edu.gt": true, - "net.gt": true, - "gob.gt": true, - "org.gt": true, - "mil.gt": true, - "ind.gt": true, - "com.gu": true, - "net.gu": true, - "gov.gu": true, - "org.gu": true, - "edu.gu": true, - "com.hk": true, - "edu.hk": true, - "gov.hk": true, - "idv.hk": true, - "net.hk": true, - "org.hk": true, - "2000.hu": true, - "agrar.hu": true, - "bolt.hu": true, - "casino.hu": true, - "city.hu": true, - "co.hu": true, - "erotica.hu": true, - "erotika.hu": true, - "film.hu": true, - "forum.hu": true, - "games.hu": true, - "hotel.hu": true, - "info.hu": true, - "ingatlan.hu": true, - "jogasz.hu": true, - "konyvelo.hu": true, - "lakas.hu": true, - "media.hu": true, - "news.hu": true, - "org.hu": true, - "priv.hu": true, - "reklam.hu": true, - "sex.hu": true, - "shop.hu": true, - "sport.hu": true, - "suli.huv": true, - "szex.hu": true, - "tm.hu": true, - "tozsde.hu": true, - "utazas.hu": true, - "video.hu": true, - "ac.id": true, - "co.id": true, - "net.id": true, - "or.id": true, - "web.id": true, - "sch.id": true, - "mil.id": true, - "go.id": true, - "war.net.id": true, - "my.id": true, - "biz.id": true, - "ac.il": true, - "co.il": true, - "org.il": true, - "net.il": true, - "k12.il": true, - "gov.il": true, - "muni.il": true, - "idf.il": true, - "in": true, - "4fd.in": true, - "co.in": true, - "firm.in": true, - "net.in": true, - "org.in": true, - "gen.in": true, - "ind.in": true, - "ac.in": true, - "edu.in": true, - "res.in": true, - "ernet.in": true, - "gov.in": true, - "mil.in": true, - "nic.in": true, - "iq": true, - "gov.iq": true, - "edu.iq": true, - "com.iq": true, - "mil.iq": true, - "org.iq": true, - "net.iq": true, - "ir": true, - "ac.ir": true, - "co.ir": true, - "gov.ir": true, - "id.ir": true, - "net.ir": true, - "org.ir": true, - "sch.ir": true, - "dnssec.ir": true, - "gov.it": true, - "edu.it": true, - "co.je": true, - "net.je": true, - "org.je": true, - "com.jo": true, - "net.jo": true, - "gov.jo": true, - "edu.jo": true, - "org.jo": true, - "mil.jo": true, - "name.jo": true, - "sch.jo": true, - "ac.jp": true, - "ad.jp": true, - "co.jp": true, - "ed.jp": true, - "go.jp": true, - "gr.jp": true, - "lg.jp": true, - "ne.jp": true, - "or.jp": true, - "co.ke": true, - "or.ke": true, - "ne.ke": true, - "go.ke": true, - "ac.ke": true, - "sc.ke": true, - "me.ke": true, - "mobi.ke": true, - "info.ke": true, - "per.kh": true, - "com.kh": true, - "edu.kh": true, - "gov.kh": true, - "mil.kh": true, - "net.kh": true, - "org.kh": true, - "com.ki": true, - "biz.ki": true, - "de.ki": true, - "net.ki": true, - "info.ki": true, - "org.ki": true, - "gov.ki": true, - "edu.ki": true, - "mob.ki": true, - "tel.ki": true, - "km": true, - "com.km": true, - "coop.km": true, - "asso.km": true, - "nom.km": true, - "presse.km": true, - "tm.km": true, - "medecin.km": true, - "notaires.km": true, - "pharmaciens.km": true, - "veterinaire.km": true, - "edu.km": true, - "gouv.km": true, - "mil.km": true, - "net.kn": true, - "org.kn": true, - "edu.kn": true, - "gov.kn": true, - "kr": true, - "co.kr": true, - "ne.kr": true, - "or.kr": true, - "re.kr": true, - "pe.kr": true, - "go.kr": true, - "mil.kr": true, - "ac.kr": true, - "hs.kr": true, - "ms.kr": true, - "es.kr": true, - "sc.kr": true, - "kg.kr": true, - "seoul.kr": true, - "busan.kr": true, - "daegu.kr": true, - "incheon.kr": true, - "gwangju.kr": true, - "daejeon.kr": true, - "ulsan.kr": true, - "gyeonggi.kr": true, - "gangwon.kr": true, - "chungbuk.kr": true, - "chungnam.kr": true, - "jeonbuk.kr": true, - "jeonnam.kr": true, - "gyeongbuk.kr": true, - "gyeongnam.kr": true, - "jeju.kr": true, - "edu.kw": true, - "com.kw": true, - "net.kw": true, - "org.kw": true, - "gov.kw": true, - "com.ky": true, - "org.ky": true, - "net.ky": true, - "edu.ky": true, - "gov.ky": true, - "com.kz": true, - "edu.kz": true, - "gov.kz": true, - "mil.kz": true, - "net.kz": true, - "org.kz": true, - "com.lb": true, - "edu.lb": true, - "gov.lb": true, - "net.lb": true, - "org.lb": true, - "gov.lk": true, - "sch.lk": true, - "net.lk": true, - "int.lk": true, - "com.lk": true, - "org.lk": true, - "edu.lk": true, - "ngo.lk": true, - "soc.lk": true, - "web.lk": true, - "ltd.lk": true, - "assn.lk": true, - "grp.lk": true, - "hotel.lk": true, - "com.lr": true, - "edu.lr": true, - "gov.lr": true, - "org.lr": true, - "net.lr": true, - "com.lv": true, - "edu.lv": true, - "gov.lv": true, - "org.lv": true, - "mil.lv": true, - "id.lv": true, - "net.lv": true, - "asn.lv": true, - "conf.lv": true, - "com.ly": true, - "net.ly": true, - "gov.ly": true, - "plc.ly": true, - "edu.ly": true, - "sch.ly": true, - "med.ly": true, - "org.ly": true, - "id.ly": true, - "ma": true, - "net.ma": true, - "ac.ma": true, - "org.ma": true, - "gov.ma": true, - "press.ma": true, - "co.ma": true, - "tm.mc": true, - "asso.mc": true, - "co.me": true, - "net.me": true, - "org.me": true, - "edu.me": true, - "ac.me": true, - "gov.me": true, - "its.me": true, - "priv.me": true, - "org.mg": true, - "nom.mg": true, - "gov.mg": true, - "prd.mg": true, - "tm.mg": true, - "edu.mg": true, - "mil.mg": true, - "com.mg": true, - "com.mk": true, - "org.mk": true, - "net.mk": true, - "edu.mk": true, - "gov.mk": true, - "inf.mk": true, - "name.mk": true, - "pro.mk": true, - "com.ml": true, - "net.ml": true, - "org.ml": true, - "edu.ml": true, - "gov.ml": true, - "presse.ml": true, - "gov.mn": true, - "edu.mn": true, - "org.mn": true, - "com.mo": true, - "edu.mo": true, - "gov.mo": true, - "net.mo": true, - "org.mo": true, - "com.mt": true, - "org.mt": true, - "net.mt": true, - "edu.mt": true, - "gov.mt": true, - "aero.mv": true, - "biz.mv": true, - "com.mv": true, - "coop.mv": true, - "edu.mv": true, - "gov.mv": true, - "info.mv": true, - "int.mv": true, - "mil.mv": true, - "museum.mv": true, - "name.mv": true, - "net.mv": true, - "org.mv": true, - "pro.mv": true, - "ac.mw": true, - "co.mw": true, - "com.mw": true, - "coop.mw": true, - "edu.mw": true, - "gov.mw": true, - "int.mw": true, - "museum.mw": true, - "net.mw": true, - "org.mw": true, - "com.mx": true, - "net.mx": true, - "org.mx": true, - "edu.mx": true, - "gob.mx": true, - "com.my": true, - "net.my": true, - "org.my": true, - "gov.my": true, - "edu.my": true, - "sch.my": true, - "mil.my": true, - "name.my": true, - "com.nf": true, - "net.nf": true, - "arts.nf": true, - "store.nf": true, - "web.nf": true, - "firm.nf": true, - "info.nf": true, - "other.nf": true, - "per.nf": true, - "rec.nf": true, - "com.ng": true, - "org.ng": true, - "gov.ng": true, - "edu.ng": true, - "net.ng": true, - "sch.ng": true, - "name.ng": true, - "mobi.ng": true, - "biz.ng": true, - "mil.ng": true, - "gob.ni": true, - "co.ni": true, - "com.ni": true, - "ac.ni": true, - "edu.ni": true, - "org.ni": true, - "nom.ni": true, - "net.ni": true, - "mil.ni": true, - "com.np": true, - "edu.np": true, - "gov.np": true, - "org.np": true, - "mil.np": true, - "net.np": true, - "edu.nr": true, - "gov.nr": true, - "biz.nr": true, - "info.nr": true, - "net.nr": true, - "org.nr": true, - "com.nr": true, - "com.om": true, - "co.om": true, - "edu.om": true, - "ac.om": true, - "sch.om": true, - "gov.om": true, - "net.om": true, - "org.om": true, - "mil.om": true, - "museum.om": true, - "biz.om": true, - "pro.om": true, - "med.om": true, - "edu.pe": true, - "gob.pe": true, - "nom.pe": true, - "mil.pe": true, - "sld.pe": true, - "org.pe": true, - "com.pe": true, - "net.pe": true, - "com.ph": true, - "net.ph": true, - "org.ph": true, - "mil.ph": true, - "ngo.ph": true, - "i.ph": true, - "gov.ph": true, - "edu.ph": true, - "com.pk": true, - "net.pk": true, - "edu.pk": true, - "org.pk": true, - "fam.pk": true, - "biz.pk": true, - "web.pk": true, - "gov.pk": true, - "gob.pk": true, - "gok.pk": true, - "gon.pk": true, - "gop.pk": true, - "gos.pk": true, - "pwr.pl": true, - "com.pl": true, - "biz.pl": true, - "net.pl": true, - "art.pl": true, - "edu.pl": true, - "org.pl": true, - "ngo.pl": true, - "gov.pl": true, - "info.pl": true, - "mil.pl": true, - "waw.pl": true, - "warszawa.pl": true, - "wroc.pl": true, - "wroclaw.pl": true, - "krakow.pl": true, - "katowice.pl": true, - "poznan.pl": true, - "lodz.pl": true, - "gda.pl": true, - "gdansk.pl": true, - "slupsk.pl": true, - "radom.pl": true, - "szczecin.pl": true, - "lublin.pl": true, - "bialystok.pl": true, - "olsztyn.pl": true, - "torun.pl": true, - "gorzow.pl": true, - "zgora.pl": true, - "biz.pr": true, - "com.pr": true, - "edu.pr": true, - "gov.pr": true, - "info.pr": true, - "isla.pr": true, - "name.pr": true, - "net.pr": true, - "org.pr": true, - "pro.pr": true, - "est.pr": true, - "prof.pr": true, - "ac.pr": true, - "com.ps": true, - "net.ps": true, - "org.ps": true, - "edu.ps": true, - "gov.ps": true, - "plo.ps": true, - "sec.ps": true, - "co.pw": true, - "ne.pw": true, - "or.pw": true, - "ed.pw": true, - "go.pw": true, - "belau.pw": true, - "arts.ro": true, - "com.ro": true, - "firm.ro": true, - "info.ro": true, - "nom.ro": true, - "nt.ro": true, - "org.ro": true, - "rec.ro": true, - "store.ro": true, - "tm.ro": true, - "www.ro": true, - "co.rs": true, - "org.rs": true, - "edu.rs": true, - "ac.rs": true, - "gov.rs": true, - "in.rs": true, - "com.sb": true, - "net.sb": true, - "edu.sb": true, - "org.sb": true, - "gov.sb": true, - "com.sc": true, - "net.sc": true, - "edu.sc": true, - "gov.sc": true, - "org.sc": true, - "co.sh": true, - "com.sh": true, - "org.sh": true, - "gov.sh": true, - "edu.sh": true, - "net.sh": true, - "nom.sh": true, - "com.sl": true, - "net.sl": true, - "org.sl": true, - "edu.sl": true, - "gov.sl": true, - "gov.st": true, - "saotome.st": true, - "principe.st": true, - "consulado.st": true, - "embaixada.st": true, - "org.st": true, - "edu.st": true, - "net.st": true, - "com.st": true, - "store.st": true, - "mil.st": true, - "co.st": true, - "edu.sv": true, - "gob.sv": true, - "com.sv": true, - "org.sv": true, - "red.sv": true, - "co.sz": true, - "ac.sz": true, - "org.sz": true, - "com.tr": true, - "gen.tr": true, - "org.tr": true, - "biz.tr": true, - "info.tr": true, - "av.tr": true, - "dr.tr": true, - "pol.tr": true, - "bel.tr": true, - "tsk.tr": true, - "bbs.tr": true, - "k12.tr": true, - "edu.tr": true, - "name.tr": true, - "net.tr": true, - "gov.tr": true, - "web.tr": true, - "tel.tr": true, - "tv.tr": true, - "co.tt": true, - "com.tt": true, - "org.tt": true, - "net.tt": true, - "biz.tt": true, - "info.tt": true, - "pro.tt": true, - "int.tt": true, - "coop.tt": true, - "jobs.tt": true, - "mobi.tt": true, - "travel.tt": true, - "museum.tt": true, - "aero.tt": true, - "cat.tt": true, - "tel.tt": true, - "name.tt": true, - "mil.tt": true, - "edu.tt": true, - "gov.tt": true, - "edu.tw": true, - "gov.tw": true, - "mil.tw": true, - "com.tw": true, - "net.tw": true, - "org.tw": true, - "idv.tw": true, - "game.tw": true, - "ebiz.tw": true, - "club.tw": true, - "com.mu": true, - "gov.mu": true, - "net.mu": true, - "org.mu": true, - "ac.mu": true, - "co.mu": true, - "or.mu": true, - "ac.mz": true, - "co.mz": true, - "edu.mz": true, - "org.mz": true, - "gov.mz": true, - "com.na": true, - "co.na": true, - "ac.nz": true, - "co.nz": true, - "cri.nz": true, - "geek.nz": true, - "gen.nz": true, - "govt.nz": true, - "health.nz": true, - "iwi.nz": true, - "maori.nz": true, - "mil.nz": true, - "net.nz": true, - "org.nz": true, - "parliament.nz": true, - "school.nz": true, - "abo.pa": true, - "ac.pa": true, - "com.pa": true, - "edu.pa": true, - "gob.pa": true, - "ing.pa": true, - "med.pa": true, - "net.pa": true, - "nom.pa": true, - "org.pa": true, - "sld.pa": true, - "com.pt": true, - "edu.pt": true, - "gov.pt": true, - "int.pt": true, - "net.pt": true, - "nome.pt": true, - "org.pt": true, - "publ.pt": true, - "com.py": true, - "edu.py": true, - "gov.py": true, - "mil.py": true, - "net.py": true, - "org.py": true, - "com.qa": true, - "edu.qa": true, - "gov.qa": true, - "mil.qa": true, - "net.qa": true, - "org.qa": true, - "asso.re": true, - "com.re": true, - "nom.re": true, - "ac.ru": true, - "adygeya.ru": true, - "altai.ru": true, - "amur.ru": true, - "arkhangelsk.ru": true, - "astrakhan.ru": true, - "bashkiria.ru": true, - "belgorod.ru": true, - "bir.ru": true, - "bryansk.ru": true, - "buryatia.ru": true, - "cbg.ru": true, - "chel.ru": true, - "chelyabinsk.ru": true, - "chita.ru": true, - "chukotka.ru": true, - "chuvashia.ru": true, - "com.ru": true, - "dagestan.ru": true, - "e-burg.ru": true, - "edu.ru": true, - "gov.ru": true, - "grozny.ru": true, - "int.ru": true, - "irkutsk.ru": true, - "ivanovo.ru": true, - "izhevsk.ru": true, - "jar.ru": true, - "joshkar-ola.ru": true, - "kalmykia.ru": true, - "kaluga.ru": true, - "kamchatka.ru": true, - "karelia.ru": true, - "kazan.ru": true, - "kchr.ru": true, - "kemerovo.ru": true, - "khabarovsk.ru": true, - "khakassia.ru": true, - "khv.ru": true, - "kirov.ru": true, - "koenig.ru": true, - "komi.ru": true, - "kostroma.ru": true, - "kranoyarsk.ru": true, - "kuban.ru": true, - "kurgan.ru": true, - "kursk.ru": true, - "lipetsk.ru": true, - "magadan.ru": true, - "mari.ru": true, - "mari-el.ru": true, - "marine.ru": true, - "mil.ru": true, - "mordovia.ru": true, - "mosreg.ru": true, - "msk.ru": true, - "murmansk.ru": true, - "nalchik.ru": true, - "net.ru": true, - "nnov.ru": true, - "nov.ru": true, - "novosibirsk.ru": true, - "nsk.ru": true, - "omsk.ru": true, - "orenburg.ru": true, - "org.ru": true, - "oryol.ru": true, - "penza.ru": true, - "perm.ru": true, - "pp.ru": true, - "pskov.ru": true, - "ptz.ru": true, - "rnd.ru": true, - "ryazan.ru": true, - "sakhalin.ru": true, - "samara.ru": true, - "saratov.ru": true, - "simbirsk.ru": true, - "smolensk.ru": true, - "spb.ru": true, - "stavropol.ru": true, - "stv.ru": true, - "surgut.ru": true, - "tambov.ru": true, - "tatarstan.ru": true, - "tom.ru": true, - "tomsk.ru": true, - "tsaritsyn.ru": true, - "tsk.ru": true, - "tula.ru": true, - "tuva.ru": true, - "tver.ru": true, - "tyumen.ru": true, - "udm.ru": true, - "udmurtia.ru": true, - "ulan-ude.ru": true, - "vladikavkaz.ru": true, - "vladimir.ru": true, - "vladivostok.ru": true, - "volgograd.ru": true, - "vologda.ru": true, - "voronezh.ru": true, - "vrn.ru": true, - "vyatka.ru": true, - "yakutia.ru": true, - "yamal.ru": true, - "yekaterinburg.ru": true, - "yuzhno-sakhalinsk.ru": true, - "ac.rw": true, - "co.rw": true, - "com.rw": true, - "edu.rw": true, - "gouv.rw": true, - "gov.rw": true, - "int.rw": true, - "mil.rw": true, - "net.rw": true, - "com.sa": true, - "edu.sa": true, - "gov.sa": true, - "med.sa": true, - "net.sa": true, - "org.sa": true, - "pub.sa": true, - "sch.sa": true, - "com.sd": true, - "edu.sd": true, - "gov.sd": true, - "info.sd": true, - "med.sd": true, - "net.sd": true, - "org.sd": true, - "tv.sd": true, - "a.se": true, - "ac.se": true, - "b.se": true, - "bd.se": true, - "c.se": true, - "d.se": true, - "e.se": true, - "f.se": true, - "g.se": true, - "h.se": true, - "i.se": true, - "k.se": true, - "l.se": true, - "m.se": true, - "n.se": true, - "o.se": true, - "org.se": true, - "p.se": true, - "parti.se": true, - "pp.se": true, - "press.se": true, - "r.se": true, - "s.se": true, - "t.se": true, - "tm.se": true, - "u.se": true, - "w.se": true, - "x.se": true, - "y.se": true, - "z.se": true, - "com.sg": true, - "edu.sg": true, - "gov.sg": true, - "idn.sg": true, - "net.sg": true, - "org.sg": true, - "per.sg": true, - "art.sn": true, - "com.sn": true, - "edu.sn": true, - "gouv.sn": true, - "org.sn": true, - "perso.sn": true, - "univ.sn": true, - "com.sy": true, - "edu.sy": true, - "gov.sy": true, - "mil.sy": true, - "net.sy": true, - "news.sy": true, - "org.sy": true, - "ac.th": true, - "co.th": true, - "go.th": true, - "in.th": true, - "mi.th": true, - "net.th": true, - "or.th": true, - "ac.tj": true, - "biz.tj": true, - "co.tj": true, - "com.tj": true, - "edu.tj": true, - "go.tj": true, - "gov.tj": true, - "info.tj": true, - "int.tj": true, - "mil.tj": true, - "name.tj": true, - "net.tj": true, - "nic.tj": true, - "org.tj": true, - "test.tj": true, - "web.tj": true, - "agrinet.tn": true, - "com.tn": true, - "defense.tn": true, - "edunet.tn": true, - "ens.tn": true, - "fin.tn": true, - "gov.tn": true, - "ind.tn": true, - "info.tn": true, - "intl.tn": true, - "mincom.tn": true, - "nat.tn": true, - "net.tn": true, - "org.tn": true, - "perso.tn": true, - "rnrt.tn": true, - "rns.tn": true, - "rnu.tn": true, - "tourism.tn": true, - "ac.tz": true, - "co.tz": true, - "go.tz": true, - "ne.tz": true, - "or.tz": true, - "biz.ua": true, - "cherkassy.ua": true, - "chernigov.ua": true, - "chernovtsy.ua": true, - "ck.ua": true, - "cn.ua": true, - "co.ua": true, - "com.ua": true, - "crimea.ua": true, - "cv.ua": true, - "dn.ua": true, - "dnepropetrovsk.ua": true, - "donetsk.ua": true, - "dp.ua": true, - "edu.ua": true, - "gov.ua": true, - "if.ua": true, - "in.ua": true, - "ivano-frankivsk.ua": true, - "kh.ua": true, - "kharkov.ua": true, - "kherson.ua": true, - "khmelnitskiy.ua": true, - "kiev.ua": true, - "kirovograd.ua": true, - "km.ua": true, - "kr.ua": true, - "ks.ua": true, - "kv.ua": true, - "lg.ua": true, - "lugansk.ua": true, - "lutsk.ua": true, - "lviv.ua": true, - "me.ua": true, - "mk.ua": true, - "net.ua": true, - "nikolaev.ua": true, - "od.ua": true, - "odessa.ua": true, - "org.ua": true, - "pl.ua": true, - "poltava.ua": true, - "pp.ua": true, - "rovno.ua": true, - "rv.ua": true, - "sebastopol.ua": true, - "sumy.ua": true, - "te.ua": true, - "ternopil.ua": true, - "uzhgorod.ua": true, - "vinnica.ua": true, - "vn.ua": true, - "zaporizhzhe.ua": true, - "zhitomir.ua": true, - "zp.ua": true, - "zt.ua": true, - "ac.ug": true, - "co.ug": true, - "go.ug": true, - "ne.ug": true, - "or.ug": true, - "org.ug": true, - "sc.ug": true, - "ac.uk": true, - "bl.uk": true, - "british-library.uk": true, - "co.uk": true, - "cym.uk": true, - "gov.uk": true, - "govt.uk": true, - "icnet.uk": true, - "jet.uk": true, - "lea.uk": true, - "ltd.uk": true, - "me.uk": true, - "mil.uk": true, - "mod.uk": true, - "national-library-scotland.uk": true, - "nel.uk": true, - "net.uk": true, - "nhs.uk": true, - "nic.uk": true, - "nls.uk": true, - "org.uk": true, - "orgn.uk": true, - "parliament.uk": true, - "plc.uk": true, - "police.uk": true, - "sch.uk": true, - "scot.uk": true, - "soc.uk": true, - "4fd.us": true, - "dni.us": true, - "fed.us": true, - "isa.us": true, - "kids.us": true, - "nsn.us": true, - "com.uy": true, - "edu.uy": true, - "gub.uy": true, - "mil.uy": true, - "net.uy": true, - "org.uy": true, - "co.ve": true, - "com.ve": true, - "edu.ve": true, - "gob.ve": true, - "info.ve": true, - "mil.ve": true, - "net.ve": true, - "org.ve": true, - "web.ve": true, - "co.vi": true, - "com.vi": true, - "k12.vi": true, - "net.vi": true, - "org.vi": true, - "ac.vn": true, - "biz.vn": true, - "com.vn": true, - "edu.vn": true, - "gov.vn": true, - "health.vn": true, - "info.vn": true, - "int.vn": true, - "name.vn": true, - "net.vn": true, - "org.vn": true, - "pro.vn": true, - "co.ye": true, - "com.ye": true, - "gov.ye": true, - "ltd.ye": true, - "me.ye": true, - "net.ye": true, - "org.ye": true, - "plc.ye": true, - "ac.yu": true, - "co.yu": true, - "edu.yu": true, - "gov.yu": true, - "org.yu": true, - "ac.za": true, - "agric.za": true, - "alt.za": true, - "bourse.za": true, - "city.za": true, - "co.za": true, - "cybernet.za": true, - "db.za": true, - "ecape.school.za": true, - "edu.za": true, - "fs.school.za": true, - "gov.za": true, - "gp.school.za": true, - "grondar.za": true, - "iaccess.za": true, - "imt.za": true, - "inca.za": true, - "kzn.school.za": true, - "landesign.za": true, - "law.za": true, - "lp.school.za": true, - "mil.za": true, - "mpm.school.za": true, - "ncape.school.za": true, - "net.za": true, - "ngo.za": true, - "nis.za": true, - "nom.za": true, - "nw.school.za": true, - "olivetti.za": true, - "org.za": true, - "pix.za": true, - "school.za": true, - "tm.za": true, - "wcape.school.za": true, - "web.za": true, - "ac.zm": true, - "co.zm": true, - "com.zm": true, - "edu.zm": true, - "gov.zm": true, - "net.zm": true, - "org.zm": true, - "sch.zm": true -} -},{}],205:[function(require,module,exports){ -const punycode = require('punycode') -const sldMap = require('./data/sldMap.json') - -module.exports = function isValidDomain (value, opts) { - if (typeof value !== 'string') return false - if (!(opts instanceof Object)) opts = {} - value = value.toLowerCase() - - if (value.endsWith('.')) { - value = value.slice(0, value.length - 1) - } - - if (opts.allowUnicode) { - value = punycode.toASCII(value) - } - - if (value.length > 253) { - return false - } - - const validChars = /^([a-z0-9-._*]+)$/g - if (!validChars.test(value)) { - return false - } - - const sldRegex = /(.*)\.(([a-z0-9]+)(\.[a-z0-9]+))/ - const matches = value.match(sldRegex) - var tld = null - var labels = null - if (matches && matches.length > 2) { - if (sldMap[matches[2]]) { - tld = matches[2] - labels = matches[1].split('.') - } - } - - if (!labels) { - labels = value.split('.') - if (labels.length <= 1) return false - - tld = labels.pop() - const tldRegex = /^(?:xn--)?(?!^\d+$)[a-z0-9]+$/gi - - if (!tldRegex.test(tld)) return false - } - - if (opts.subdomain === false && labels.length > 1) return false - - const isValid = labels.every(function (label, index) { - if (opts.wildcard && index === 0 && label === '*' && labels.length > 1) { - return true - } - - let validLabelChars = /^([a-zA-Z0-9-_]+)$/g - if (index === labels.length - 1) { - validLabelChars = /^([a-zA-Z0-9-]+)$/g - } - - const doubleDashCount = (label.match(/--/g) || []).length - const xnDashCount = (label.match(/xn--/g) || []).length - if (doubleDashCount !== xnDashCount) { - return false - } - - const isValid = ( - validLabelChars.test(label) && - label.length < 64 && - !label.startsWith('-') && - !label.endsWith('-') - ) - - return isValid - }) - - return isValid -} - -},{"./data/sldMap.json":204,"punycode":445}],206:[function(require,module,exports){ -var hasExcape = /~/ -var escapeMatcher = /~[01]/g -function escapeReplacer (m) { - switch (m) { - case '~1': return '/' - case '~0': return '~' - } - throw new Error('Invalid tilde escape: ' + m) -} - -function untilde (str) { - if (!hasExcape.test(str)) return str - return str.replace(escapeMatcher, escapeReplacer) -} - -function setter (obj, pointer, value) { - var part - var hasNextPart - - if (pointer[1] === 'constructor' && pointer[2] === 'prototype') return obj - if (pointer[1] === '__proto__') return obj - - for (var p = 1, len = pointer.length; p < len;) { - part = untilde(pointer[p++]) - hasNextPart = len > p - - if (typeof obj[part] === 'undefined') { - // support setting of /- - if (Array.isArray(obj) && part === '-') { - part = obj.length - } - - // support nested objects/array when setting values - if (hasNextPart) { - if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = [] - else obj[part] = {} - } - } - - if (!hasNextPart) break - obj = obj[part] - } - - var oldValue = obj[part] - if (value === undefined) delete obj[part] - else obj[part] = value - return oldValue -} - -function compilePointer (pointer) { - if (typeof pointer === 'string') { - pointer = pointer.split('/') - if (pointer[0] === '') return pointer - throw new Error('Invalid JSON pointer.') - } else if (Array.isArray(pointer)) { - return pointer - } - - throw new Error('Invalid JSON pointer.') -} - -function get (obj, pointer) { - if (typeof obj !== 'object') throw new Error('Invalid input object.') - pointer = compilePointer(pointer) - var len = pointer.length - if (len === 1) return obj - - for (var p = 1; p < len;) { - obj = obj[untilde(pointer[p++])] - if (len === p) return obj - if (typeof obj !== 'object') return undefined - } -} - -function set (obj, pointer, value) { - if (typeof obj !== 'object') throw new Error('Invalid input object.') - pointer = compilePointer(pointer) - if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.') - return setter(obj, pointer, value) -} - -function compile (pointer) { - var compiled = compilePointer(pointer) - return { - get: function (object) { - return get(object, compiled) - }, - set: function (object, value) { - return set(object, compiled, value) - } - } -} - -exports.get = get -exports.set = set -exports.compile = compile - -},{}],207:[function(require,module,exports){ -/// keymage.js - Javascript keyboard bindings handling -/// http://github.com/piranha/keymage -/// -/// (c) 2012-2016 Alexander Solovyov under terms of ISC License - -(function(define, undefined) { -define(function() { - var VERSION = '1.1.3'; - var isOsx = typeof navigator !== 'undefined' && - ~navigator.userAgent.indexOf('Mac OS X'); - - // Defining all keys - var MODPROPS = ['shiftKey', 'ctrlKey', 'altKey', 'metaKey']; - var MODS = { - 'shift': 'shift', - 'ctrl': 'ctrl', 'control': 'ctrl', - 'alt': 'alt', 'option': 'alt', - 'win': 'meta', 'cmd': 'meta', 'super': 'meta', - 'meta': 'meta', - // default modifier for os x is cmd and for others is ctrl - 'defmod': isOsx ? 'meta' : 'ctrl' - }; - var MODORDER = ['shift', 'ctrl', 'alt', 'meta']; - var MODNUMS = [16, 17, 18, 91]; - - var KEYS = { - 'backspace': 8, - 'tab': 9, - 'enter': 13, 'return': 13, - 'pause': 19, - 'caps': 20, 'capslock': 20, - 'escape': 27, 'esc': 27, - 'space': 32, - 'pgup': 33, 'pageup': 33, - 'pgdown': 34, 'pagedown': 34, - 'end': 35, - 'home': 36, - 'ins': 45, 'insert': 45, - 'del': 46, 'delete': 46, - - 'left': 37, - 'up': 38, - 'right': 39, - 'down': 40, - - '*': 106, - '+': 107, 'plus': 107, - 'minus': 109, - ';': 186, - '=': 187, - ',': 188, - '-': 189, - '.': 190, - '/': 191, - '`': 192, - '[': 219, - '\\': 220, - ']': 221, - "'": 222 - }; - - var i; - // numpad - for (i = 0; i < 10; i++) { - KEYS['num-' + i] = i + 95; - } - // top row 0-9 - for (i = 0; i < 10; i++) { - KEYS[i.toString()] = i + 48; - } - // f1-f24 - for (i = 1; i < 25; i++) { - KEYS['f' + i] = i + 111; - } - // alphabet - for (i = 65; i < 91; i++) { - KEYS[String.fromCharCode(i).toLowerCase()] = i; - } - - // Reverse key codes - var KEYREV = {}; - for (var k in KEYS) { - var val = KEYS[k]; - if (!KEYREV[val] || KEYREV[val].length < k.length) { - KEYREV[val] = k; - } - } - - // ----------------------- - // Actual work is done here - - var currentScope = ''; - var allChains = {}; - - function parseKeyString(keystring) { - var bits = keystring.split(/-(?!$)/); - var button = bits[bits.length - 1]; - var key = {code: KEYS[button]}; - - if (!key.code) { - throw 'Unknown key "' + button + '" in keystring "' + - keystring + '"'; - } - - var mod; - for (var i = 0; i < bits.length - 1; i++) { - button = bits[i]; - mod = MODS[button]; - if (!mod) { - throw 'Unknown modifier "' + button + '" in keystring "' + - keystring + '"'; - } - key[mod] = true; - } - - return key; - } - - function stringifyKey(key) { - var s = ''; - for (var i = 0; i < MODORDER.length; i++) { - if (key[MODORDER[i]]) { - s += MODORDER[i] + '-'; - } - } - s += KEYREV[key.code]; - return s; - } - - function normalizeKeyChain(keychainString) { - var keychain = []; - var keys = keychainString.split(' '); - - for (var i = 0; i < keys.length; i++) { - var key = parseKeyString(keys[i]); - key = stringifyKey(key); - keychain.push(key); - } - - keychain.original = keychainString; - return keychain; - } - - function eventKeyString(e) { - var key = {code: e.keyCode}; - for (var i = 0; i < MODPROPS.length; i++) { - var mod = MODPROPS[i]; - if (e[mod]) { - key[mod.slice(0, mod.length - 3)] = true; - } - } - return stringifyKey(key); - } - - function getNestedChains(chains, scope) { - for (var i = 0; i < scope.length; i++) { - var bit = scope[i]; - - if (bit) { - chains = chains[bit]; - } - - if (!chains) { - break; - } - } - return chains; - } - - var sequence = []; - function dispatch(e) { - // Skip all modifiers - if (~MODNUMS.indexOf(e.keyCode)) { - return; - } - - var seq = sequence.slice(); - seq.push(eventKeyString(e)); - var scope = currentScope.split('.'); - var matched, chains, key; - - for (var i = scope.length; i >= 0; i--) { - chains = getNestedChains(allChains, scope.slice(0, i)); - if (!chains) { - continue; - } - matched = true; - for (var j = 0; j < seq.length; j++) { - key = seq[j]; - if (!chains[key]) { - matched = false; - break; - } - chains = chains[key]; - } - - if (matched) { - break; - } - } - - var definitionScope = scope.slice(0, i).join('.'); - var preventDefault = chains.preventDefault; - - // partial match, save the sequence - if (matched && !chains.handlers) { - sequence = seq; - if (preventDefault) { - e.preventDefault(); - } - return; - } - - if (matched) { - for (i = 0; i < chains.handlers.length; i++) { - var handler = chains.handlers[i]; - var options = handler._keymage; - - var res = handler.call(options.context, e, { - shortcut: options.original, - scope: currentScope, - definitionScope: definitionScope - }); - - if (res === false || preventDefault) { - e.preventDefault(); - } - } - } - - // either matched or not, drop the sequence - sequence = []; - } - - function getHandlers(scope, keychain, fn) { - var bits = scope.split('.'); - var chains = allChains; - bits = bits.concat(keychain); - - for (var i = 0, l = bits.length; i < l; i++) { - var bit = bits[i]; - if (!bit) continue; - - chains = chains[bit] || (chains[bit] = {}); - if (fn && fn._keymage.preventDefault) { - chains.preventDefault = true; - } - - if (i === l - 1) { - var handlers = chains.handlers || (chains.handlers = []); - return handlers; - } - } - } - - function assignKey(scope, keychain, fn) { - var handlers = getHandlers(scope, keychain, fn); - handlers.push(fn); - } - - function unassignKey(scope, keychain, fn) { - var handlers = getHandlers(scope, keychain); - var idx = handlers.indexOf(fn); - if (~idx) { - handlers.splice(idx, 1); - } - } - - function parsed(scope, keychain, fn, options) { - if (keychain === undefined && fn === undefined) { - return function(keychain, fn) { - return keymage(scope, keychain, fn); - }; - } - - if (typeof keychain === 'function') { - options = fn; - fn = keychain; - keychain = scope; - scope = ''; - } - - var normalized = normalizeKeyChain(keychain); - - return [scope, normalized, fn, options]; - } - - // optional arguments: scope, options. - function keymage(scope, keychain, fn, options) { - var args = parsed(scope, keychain, fn, options); - fn = args[2]; - options = args[3]; - fn._keymage = options || {}; - fn._keymage.original = keychain; - assignKey.apply(null, args); - - return function () { - unassignKey.apply(null, args); - }; - } - - keymage.unbind = function(scope, keychain, fn) { - var args = parsed(scope, keychain, fn); - unassignKey.apply(null, args); - }; - - keymage.parse = parseKeyString; - keymage.stringify = stringifyKey; - - keymage.bindings = allChains; - - keymage.setScope = function(scope) { - currentScope = scope ? scope : ''; - }; - - keymage.getScope = function() { return currentScope; }; - - keymage.pushScope = function(scope) { - currentScope = (currentScope ? currentScope + '.' : '') + scope; - return currentScope; - }; - - keymage.popScope = function(scope) { - var i; - - if (!scope) { - i = currentScope.lastIndexOf('.'); - scope = currentScope.slice(i + 1); - currentScope = i == -1 ? '' : currentScope.slice(0, i); - return scope; - } - - currentScope = currentScope.replace( - new RegExp('(^|\\.)' + scope + '(\\.|$).*'), ''); - return scope; - }; - - keymage.version = VERSION; - - window.addEventListener('keydown', dispatch, false); - - return keymage; -}); -})(typeof define !== 'undefined' ? define : function(factory) { - if (typeof module !== 'undefined') { - module.exports = factory(); - } else { - window.keymage = factory(); - } -}); - -},{}],208:[function(require,module,exports){ -function isObject (o, allowArray) { - return o && 'object' === typeof o && (allowArray || !Array.isArray(o)) -} - -function isBasic (b) { - return 'string' === typeof b || 'number' === typeof b -} - -function get (obj, path, dft) { - if(!isObject(obj, true)) return dft - if(isBasic(path)) return obj[path] - for(var i = 0; i < path.length; i++) { - if(null == (obj = obj[path[i]])) return dft - } - return obj -} - -function isNonNegativeInteger (i) { - return Number.isInteger(i) && i >= 0 -} - -function set (obj, path, value) { - if(!obj) throw new Error('libnested.set: first arg must be an object') - if(isBasic(path)) return obj[path] = value - for(var i = 0; i < path.length; i++) - if(i === path.length - 1) - obj[path[i]] = value - else if(null == obj[path[i]]) - obj = (obj[path[i]] = isNonNegativeInteger(path[i+1]) ? [] : {}) - else - obj = obj[path[i]] - return value -} - -function each (obj, iter, includeArrays, path) { - path = path || [] - //handle array separately, so that arrays can have integer keys - if(Array.isArray(obj)) { - if(!includeArrays) return false - for(var k = 0; k < obj.length; k++) { - //loop content is duplicated, so that return works - var v = obj[k] - if(isObject(v, includeArrays)) { - if(false === each(v, iter, includeArrays, path.concat(k))) - return false - } else { - if(false === iter(v, path.concat(k))) return false - } - } - } - else { - for(var k in obj) { - //loop content is duplicated, so that return works - var v = obj[k] - if(isObject(v, includeArrays)) { - if(false === each(v, iter, includeArrays, path.concat(k))) - return false - } else { - if(false === iter(v, path.concat(k))) return false - } - } - } - return true -} - -function map (obj, iter, out, includeArrays) { - var out = out || Array.isArray(obj) ? [] : {} - each(obj, function (val, path) { - set(out, path, iter(val, path)) - }, includeArrays) - return out -} - -function paths (obj, incluedArrays) { - var out = [] - each(obj, function (_, path) { - out.push(path) - }, incluedArrays) - return out -} - -function id (e) { return e } - -//note, cyclic objects are not supported. -//will cause an stack overflow. -function clone (obj) { - if(!isObject(obj, true)) return obj - var _obj - _obj = Array.isArray(obj) ? [] : {} - for(var k in obj) _obj[k] = clone(obj[k]) - return _obj -} - -exports.get = get -exports.set = set -exports.each = each -exports.map = map -exports.paths = paths -exports.clone = clone -exports.copy = clone - -},{}],209:[function(require,module,exports){ -!function(e){function r(e,r){"use strict";var t,a=r.ready.then((function(){function a(){if(0!==t._sodium_init())throw new Error("libsodium was not correctly initialized.");for(var r=["crypto_aead_chacha20poly1305_decrypt","crypto_aead_chacha20poly1305_decrypt_detached","crypto_aead_chacha20poly1305_encrypt","crypto_aead_chacha20poly1305_encrypt_detached","crypto_aead_chacha20poly1305_ietf_decrypt","crypto_aead_chacha20poly1305_ietf_decrypt_detached","crypto_aead_chacha20poly1305_ietf_encrypt","crypto_aead_chacha20poly1305_ietf_encrypt_detached","crypto_aead_chacha20poly1305_ietf_keygen","crypto_aead_chacha20poly1305_keygen","crypto_aead_xchacha20poly1305_ietf_decrypt","crypto_aead_xchacha20poly1305_ietf_decrypt_detached","crypto_aead_xchacha20poly1305_ietf_encrypt","crypto_aead_xchacha20poly1305_ietf_encrypt_detached","crypto_aead_xchacha20poly1305_ietf_keygen","crypto_auth","crypto_auth_hmacsha256","crypto_auth_hmacsha256_keygen","crypto_auth_hmacsha256_verify","crypto_auth_hmacsha512","crypto_auth_hmacsha512_keygen","crypto_auth_hmacsha512_verify","crypto_auth_keygen","crypto_auth_verify","crypto_box_beforenm","crypto_box_curve25519xchacha20poly1305_keypair","crypto_box_curve25519xchacha20poly1305_seal","crypto_box_curve25519xchacha20poly1305_seal_open","crypto_box_detached","crypto_box_easy","crypto_box_easy_afternm","crypto_box_keypair","crypto_box_open_detached","crypto_box_open_easy","crypto_box_open_easy_afternm","crypto_box_seal","crypto_box_seal_open","crypto_box_seed_keypair","crypto_core_ed25519_add","crypto_core_ed25519_from_hash","crypto_core_ed25519_from_uniform","crypto_core_ed25519_is_valid_point","crypto_core_ed25519_random","crypto_core_ed25519_scalar_add","crypto_core_ed25519_scalar_complement","crypto_core_ed25519_scalar_invert","crypto_core_ed25519_scalar_mul","crypto_core_ed25519_scalar_negate","crypto_core_ed25519_scalar_random","crypto_core_ed25519_scalar_reduce","crypto_core_ed25519_scalar_sub","crypto_core_ed25519_sub","crypto_core_ristretto255_add","crypto_core_ristretto255_from_hash","crypto_core_ristretto255_is_valid_point","crypto_core_ristretto255_random","crypto_core_ristretto255_scalar_add","crypto_core_ristretto255_scalar_complement","crypto_core_ristretto255_scalar_invert","crypto_core_ristretto255_scalar_mul","crypto_core_ristretto255_scalar_negate","crypto_core_ristretto255_scalar_random","crypto_core_ristretto255_scalar_reduce","crypto_core_ristretto255_scalar_sub","crypto_core_ristretto255_sub","crypto_generichash","crypto_generichash_blake2b_salt_personal","crypto_generichash_final","crypto_generichash_init","crypto_generichash_keygen","crypto_generichash_update","crypto_hash","crypto_hash_sha256","crypto_hash_sha256_final","crypto_hash_sha256_init","crypto_hash_sha256_update","crypto_hash_sha512","crypto_hash_sha512_final","crypto_hash_sha512_init","crypto_hash_sha512_update","crypto_kdf_derive_from_key","crypto_kdf_keygen","crypto_kx_client_session_keys","crypto_kx_keypair","crypto_kx_seed_keypair","crypto_kx_server_session_keys","crypto_onetimeauth","crypto_onetimeauth_final","crypto_onetimeauth_init","crypto_onetimeauth_keygen","crypto_onetimeauth_update","crypto_onetimeauth_verify","crypto_pwhash","crypto_pwhash_scryptsalsa208sha256","crypto_pwhash_scryptsalsa208sha256_ll","crypto_pwhash_scryptsalsa208sha256_str","crypto_pwhash_scryptsalsa208sha256_str_verify","crypto_pwhash_str","crypto_pwhash_str_needs_rehash","crypto_pwhash_str_verify","crypto_scalarmult","crypto_scalarmult_base","crypto_scalarmult_ed25519","crypto_scalarmult_ed25519_base","crypto_scalarmult_ed25519_base_noclamp","crypto_scalarmult_ed25519_noclamp","crypto_scalarmult_ristretto255","crypto_scalarmult_ristretto255_base","crypto_secretbox_detached","crypto_secretbox_easy","crypto_secretbox_keygen","crypto_secretbox_open_detached","crypto_secretbox_open_easy","crypto_secretstream_xchacha20poly1305_init_pull","crypto_secretstream_xchacha20poly1305_init_push","crypto_secretstream_xchacha20poly1305_keygen","crypto_secretstream_xchacha20poly1305_pull","crypto_secretstream_xchacha20poly1305_push","crypto_secretstream_xchacha20poly1305_rekey","crypto_shorthash","crypto_shorthash_keygen","crypto_shorthash_siphashx24","crypto_sign","crypto_sign_detached","crypto_sign_ed25519_pk_to_curve25519","crypto_sign_ed25519_sk_to_curve25519","crypto_sign_ed25519_sk_to_pk","crypto_sign_ed25519_sk_to_seed","crypto_sign_final_create","crypto_sign_final_verify","crypto_sign_init","crypto_sign_keypair","crypto_sign_open","crypto_sign_seed_keypair","crypto_sign_update","crypto_sign_verify_detached","crypto_stream_chacha20","crypto_stream_chacha20_ietf_xor","crypto_stream_chacha20_ietf_xor_ic","crypto_stream_chacha20_keygen","crypto_stream_chacha20_xor","crypto_stream_chacha20_xor_ic","crypto_stream_keygen","crypto_stream_xchacha20_keygen","crypto_stream_xchacha20_xor","crypto_stream_xchacha20_xor_ic","randombytes_buf","randombytes_buf_deterministic","randombytes_close","randombytes_random","randombytes_set_implementation","randombytes_stir","randombytes_uniform","sodium_version_string"],a=[E,x,k,S,T,w,Y,B,A,K,M,I,N,L,U,O,C,R,P,G,X,D,F,V,H,q,j,z,W,J,Q,Z,$,ee,re,te,ae,_e,se,ne,ce,oe,he,pe,ye,ie,le,ue,de,ve,ge,be,fe,me,Ee,xe,ke,Se,Te,we,Ye,Be,Ae,Ke,Me,Ie,Ne,Le,Ue,Oe,Ce,Re,Pe,Ge,Xe,De,Fe,Ve,He,qe,je,ze,We,Je,Qe,Ze,$e,er,rr,tr,ar,_r,sr,nr,cr,or,hr,pr,yr,ir,lr,ur,dr,vr,gr,br,fr,mr,Er,xr,kr,Sr,Tr,wr,Yr,Br,Ar,Kr,Mr,Ir,Nr,Lr,Ur,Or,Cr,Rr,Pr,Gr,Xr,Dr,Fr,Vr,Hr,qr,jr,zr,Wr,Jr,Qr,Zr,$r,et,rt,tt,at,_t,st,nt,ct,ot,ht,pt,yt,it],_=0;_=240?(p=4,o=!0):y>=224?(p=3,o=!0):y>=192?(p=2,o=!0):y<128&&(p=1,o=!0)}while(!o);for(var i=p-(c.length-h),l=0;l>8&-39)<<8|87+(r=e[s]>>>4)+(r-10>>8&-39),_+=String.fromCharCode(255&a)+String.fromCharCode(a>>>8);return _}var c={ORIGINAL:1,ORIGINAL_NO_PADDING:3,URLSAFE:5,URLSAFE_NO_PADDING:7};function o(e){if(null==e)return c.URLSAFE_NO_PADDING;if(e!==c.ORIGINAL&&e!==c.ORIGINAL_NO_PADDING&&e!==c.URLSAFE&&e!=c.URLSAFE_NO_PADDING)throw new Error("unsupported base64 variant");return e}function h(e,r){r=o(r),e=m(_,e,"input");var a,_=[],n=0|Math.floor(e.length/3),c=e.length-3*n,h=4*n+(0!==c?0==(2&r)?4:2+(c>>>1):0),p=new l(h+1),y=u(e);return _.push(y),_.push(p.address),0===t._sodium_bin2base64(p.address,p.length,y,e.length,r)&&g(_,"conversion failed"),p.length=h,a=s(p.to_Uint8Array()),v(_),a}function p(e,r){var t=r||"uint8array";if(!y(t))throw new Error(t+" output format is not available");if(e instanceof l){if("uint8array"===t)return e.to_Uint8Array();if("text"===t)return s(e.to_Uint8Array());if("hex"===t)return n(e.to_Uint8Array());if("base64"===t)return h(e.to_Uint8Array(),c.URLSAFE_NO_PADDING);throw new Error('What is output format "'+t+'"?')}if("object"==typeof e){for(var a=Object.keys(e),_={},o=0;o>>24>>>8,o,y);var x=p(g,n);return v(c),x}function ze(e){var r=[];i(e);var a=new l(0|t._crypto_kdf_keybytes()),_=a.address;r.push(_),t._crypto_kdf_keygen(_);var s=p(a,e);return v(r),s}function We(e,r,a,_){var s=[];i(_),e=m(s,e,"clientPublicKey");var n,c=0|t._crypto_kx_publickeybytes();e.length!==c&&b(s,"invalid clientPublicKey length"),n=u(e),s.push(n),r=m(s,r,"clientSecretKey");var o,h=0|t._crypto_kx_secretkeybytes();r.length!==h&&b(s,"invalid clientSecretKey length"),o=u(r),s.push(o),a=m(s,a,"serverPublicKey");var y,d=0|t._crypto_kx_publickeybytes();a.length!==d&&b(s,"invalid serverPublicKey length"),y=u(a),s.push(y);var f=new l(0|t._crypto_kx_sessionkeybytes()),E=f.address;s.push(E);var x=new l(0|t._crypto_kx_sessionkeybytes()),k=x.address;if(s.push(k),0==(0|t._crypto_kx_client_session_keys(E,k,n,o,y))){var S=p({sharedRx:f,sharedTx:x},_);return v(s),S}g(s,"invalid usage")}function Je(e){var r=[];i(e);var a=new l(0|t._crypto_kx_publickeybytes()),_=a.address;r.push(_);var s=new l(0|t._crypto_kx_secretkeybytes()),n=s.address;if(r.push(n),0==(0|t._crypto_kx_keypair(_,n))){var c={publicKey:p(a,e),privateKey:p(s,e),keyType:"x25519"};return v(r),c}g(r,"internal error")}function Qe(e,r){var a=[];i(r),e=m(a,e,"seed");var _,s=0|t._crypto_kx_seedbytes();e.length!==s&&b(a,"invalid seed length"),_=u(e),a.push(_);var n=new l(0|t._crypto_kx_publickeybytes()),c=n.address;a.push(c);var o=new l(0|t._crypto_kx_secretkeybytes()),h=o.address;if(a.push(h),0==(0|t._crypto_kx_seed_keypair(c,h,_))){var y={publicKey:p(n,r),privateKey:p(o,r),keyType:"x25519"};return v(a),y}g(a,"internal error")}function Ze(e,r,a,_){var s=[];i(_),e=m(s,e,"serverPublicKey");var n,c=0|t._crypto_kx_publickeybytes();e.length!==c&&b(s,"invalid serverPublicKey length"),n=u(e),s.push(n),r=m(s,r,"serverSecretKey");var o,h=0|t._crypto_kx_secretkeybytes();r.length!==h&&b(s,"invalid serverSecretKey length"),o=u(r),s.push(o),a=m(s,a,"clientPublicKey");var y,d=0|t._crypto_kx_publickeybytes();a.length!==d&&b(s,"invalid clientPublicKey length"),y=u(a),s.push(y);var f=new l(0|t._crypto_kx_sessionkeybytes()),E=f.address;s.push(E);var x=new l(0|t._crypto_kx_sessionkeybytes()),k=x.address;if(s.push(k),0==(0|t._crypto_kx_server_session_keys(E,k,n,o,y))){var S=p({sharedRx:f,sharedTx:x},_);return v(s),S}g(s,"invalid usage")}function $e(e,r,a){var _=[];i(a);var s=u(e=m(_,e,"message")),n=e.length;_.push(s),r=m(_,r,"key");var c,o=0|t._crypto_onetimeauth_keybytes();r.length!==o&&b(_,"invalid key length"),c=u(r),_.push(c);var h=new l(0|t._crypto_onetimeauth_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_onetimeauth(y,s,n,0,c))){var d=p(h,a);return v(_),d}g(_,"invalid usage")}function er(e,r){var a=[];i(r),f(a,e,"state_address");var _=new l(0|t._crypto_onetimeauth_bytes()),s=_.address;if(a.push(s),0==(0|t._crypto_onetimeauth_final(e,s))){var n=(t._free(e),p(_,r));return v(a),n}g(a,"invalid usage")}function rr(e,r){var a=[];i(r);var _=null;null!=e&&(_=u(e=m(a,e,"key")),e.length,a.push(_));var s=new l(144).address;if(0==(0|t._crypto_onetimeauth_init(s,_))){var n=s;return v(a),n}g(a,"invalid usage")}function tr(e){var r=[];i(e);var a=new l(0|t._crypto_onetimeauth_keybytes()),_=a.address;r.push(_),t._crypto_onetimeauth_keygen(_);var s=p(a,e);return v(r),s}function ar(e,r,a){var _=[];i(a),f(_,e,"state_address");var s=u(r=m(_,r,"message_chunk")),n=r.length;_.push(s),0!=(0|t._crypto_onetimeauth_update(e,s,n))&&g(_,"invalid usage"),v(_)}function _r(e,r,a){var _=[];e=m(_,e,"hash");var s,n=0|t._crypto_onetimeauth_bytes();e.length!==n&&b(_,"invalid hash length"),s=u(e),_.push(s);var c=u(r=m(_,r,"message")),o=r.length;_.push(c),a=m(_,a,"key");var h,p=0|t._crypto_onetimeauth_keybytes();a.length!==p&&b(_,"invalid key length"),h=u(a),_.push(h);var y=0==(0|t._crypto_onetimeauth_verify(s,c,o,0,h));return v(_),y}function sr(e,r,a,_,s,n,c){var o=[];i(c),f(o,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&b(o,"keyLength must be an unsigned integer");var h=u(r=m(o,r,"password")),y=r.length;o.push(h),a=m(o,a,"salt");var d,E=0|t._crypto_pwhash_saltbytes();a.length!==E&&b(o,"invalid salt length"),d=u(a),o.push(d),f(o,_,"opsLimit"),("number"!=typeof _||(0|_)!==_||_<0)&&b(o,"opsLimit must be an unsigned integer"),f(o,s,"memLimit"),("number"!=typeof s||(0|s)!==s||s<0)&&b(o,"memLimit must be an unsigned integer"),f(o,n,"algorithm"),("number"!=typeof n||(0|n)!==n||n<0)&&b(o,"algorithm must be an unsigned integer");var x=new l(0|e),k=x.address;if(o.push(k),0==(0|t._crypto_pwhash(k,e,0,h,y,0,d,_,0,s,n))){var S=p(x,c);return v(o),S}g(o,"invalid usage")}function nr(e,r,a,_,s,n){var c=[];i(n),f(c,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&b(c,"keyLength must be an unsigned integer");var o=u(r=m(c,r,"password")),h=r.length;c.push(o),a=m(c,a,"salt");var y,d=0|t._crypto_pwhash_scryptsalsa208sha256_saltbytes();a.length!==d&&b(c,"invalid salt length"),y=u(a),c.push(y),f(c,_,"opsLimit"),("number"!=typeof _||(0|_)!==_||_<0)&&b(c,"opsLimit must be an unsigned integer"),f(c,s,"memLimit"),("number"!=typeof s||(0|s)!==s||s<0)&&b(c,"memLimit must be an unsigned integer");var E=new l(0|e),x=E.address;if(c.push(x),0==(0|t._crypto_pwhash_scryptsalsa208sha256(x,e,0,o,h,0,y,_,0,s))){var k=p(E,n);return v(c),k}g(c,"invalid usage")}function cr(e,r,a,_,s,n,c){var o=[];i(c);var h=u(e=m(o,e,"password")),y=e.length;o.push(h);var d=u(r=m(o,r,"salt")),E=r.length;o.push(d),f(o,a,"opsLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(o,"opsLimit must be an unsigned integer"),f(o,_,"r"),("number"!=typeof _||(0|_)!==_||_<0)&&b(o,"r must be an unsigned integer"),f(o,s,"p"),("number"!=typeof s||(0|s)!==s||s<0)&&b(o,"p must be an unsigned integer"),f(o,n,"keyLength"),("number"!=typeof n||(0|n)!==n||n<0)&&b(o,"keyLength must be an unsigned integer");var x=new l(0|n),k=x.address;if(o.push(k),0==(0|t._crypto_pwhash_scryptsalsa208sha256_ll(h,y,d,E,a,0,_,s,k,n))){var S=p(x,c);return v(o),S}g(o,"invalid usage")}function or(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"password")),c=e.length;s.push(n),f(s,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(s,"opsLimit must be an unsigned integer"),f(s,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(s,"memLimit must be an unsigned integer");var o=new l(0|t._crypto_pwhash_scryptsalsa208sha256_strbytes()).address;if(s.push(o),0==(0|t._crypto_pwhash_scryptsalsa208sha256_str(o,n,c,0,r,0,a))){var h=t.UTF8ToString(o);return v(s),h}g(s,"invalid usage")}function hr(e,r,a){var s=[];i(a),"string"!=typeof e&&b(s,"hashed_password must be a string"),e=_(e+"\0"),null!=c&&e.length-1!==c&&b(s,"invalid hashed_password length");var n=u(e),c=e.length-1;s.push(n);var o=u(r=m(s,r,"password")),h=r.length;s.push(o);var p=0==(0|t._crypto_pwhash_scryptsalsa208sha256_str_verify(n,o,h,0));return v(s),p}function pr(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"password")),c=e.length;s.push(n),f(s,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(s,"opsLimit must be an unsigned integer"),f(s,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(s,"memLimit must be an unsigned integer");var o=new l(0|t._crypto_pwhash_strbytes()).address;if(s.push(o),0==(0|t._crypto_pwhash_str(o,n,c,0,r,0,a))){var h=t.UTF8ToString(o);return v(s),h}g(s,"invalid usage")}function yr(e,r,a,s){var n=[];i(s),"string"!=typeof e&&b(n,"hashed_password must be a string"),e=_(e+"\0"),null!=o&&e.length-1!==o&&b(n,"invalid hashed_password length");var c=u(e),o=e.length-1;n.push(c),f(n,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(n,"opsLimit must be an unsigned integer"),f(n,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(n,"memLimit must be an unsigned integer");var h=0!=(0|t._crypto_pwhash_str_needs_rehash(c,r,0,a));return v(n),h}function ir(e,r,a){var s=[];i(a),"string"!=typeof e&&b(s,"hashed_password must be a string"),e=_(e+"\0"),null!=c&&e.length-1!==c&&b(s,"invalid hashed_password length");var n=u(e),c=e.length-1;s.push(n);var o=u(r=m(s,r,"password")),h=r.length;s.push(o);var p=0==(0|t._crypto_pwhash_str_verify(n,o,h,0));return v(s),p}function lr(e,r,a){var _=[];i(a),e=m(_,e,"privateKey");var s,n=0|t._crypto_scalarmult_scalarbytes();e.length!==n&&b(_,"invalid privateKey length"),s=u(e),_.push(s),r=m(_,r,"publicKey");var c,o=0|t._crypto_scalarmult_bytes();r.length!==o&&b(_,"invalid publicKey length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult(y,s,c))){var d=p(h,a);return v(_),d}g(_,"weak public key")}function ur(e,r){var a=[];i(r),e=m(a,e,"privateKey");var _,s=0|t._crypto_scalarmult_scalarbytes();e.length!==s&&b(a,"invalid privateKey length"),_=u(e),a.push(_);var n=new l(0|t._crypto_scalarmult_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_base(c,_))){var o=p(n,r);return v(a),o}g(a,"unknown error")}function dr(e,r,a){var _=[];i(a),e=m(_,e,"n");var s,n=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==n&&b(_,"invalid n length"),s=u(e),_.push(s),r=m(_,r,"p");var c,o=0|t._crypto_scalarmult_ed25519_bytes();r.length!==o&&b(_,"invalid p length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_ed25519_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult_ed25519(y,s,c))){var d=p(h,a);return v(_),d}g(_,"invalid point or scalar is 0")}function vr(e,r){var a=[];i(r),e=m(a,e,"scalar");var _,s=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==s&&b(a,"invalid scalar length"),_=u(e),a.push(_);var n=new l(0|t._crypto_scalarmult_ed25519_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_ed25519_base(c,_))){var o=p(n,r);return v(a),o}g(a,"scalar is 0")}function gr(e,r){var a=[];i(r),e=m(a,e,"scalar");var _,s=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==s&&b(a,"invalid scalar length"),_=u(e),a.push(_);var n=new l(0|t._crypto_scalarmult_ed25519_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_ed25519_base_noclamp(c,_))){var o=p(n,r);return v(a),o}g(a,"scalar is 0")}function br(e,r,a){var _=[];i(a),e=m(_,e,"n");var s,n=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==n&&b(_,"invalid n length"),s=u(e),_.push(s),r=m(_,r,"p");var c,o=0|t._crypto_scalarmult_ed25519_bytes();r.length!==o&&b(_,"invalid p length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_ed25519_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult_ed25519_noclamp(y,s,c))){var d=p(h,a);return v(_),d}g(_,"invalid point or scalar is 0")}function fr(e,r,a){var _=[];i(a),e=m(_,e,"scalar");var s,n=0|t._crypto_scalarmult_ristretto255_scalarbytes();e.length!==n&&b(_,"invalid scalar length"),s=u(e),_.push(s),r=m(_,r,"element");var c,o=0|t._crypto_scalarmult_ristretto255_bytes();r.length!==o&&b(_,"invalid element length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_ristretto255_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult_ristretto255(y,s,c))){var d=p(h,a);return v(_),d}g(_,"result is identity element")}function mr(e,r){var a=[];i(r),e=m(a,e,"scalar");var _,s=0|t._crypto_core_ristretto255_scalarbytes();e.length!==s&&b(a,"invalid scalar length"),_=u(e),a.push(_);var n=new l(0|t._crypto_core_ristretto255_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_ristretto255_base(c,_))){var o=p(n,r);return v(a),o}g(a,"scalar is 0")}function Er(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"message")),c=e.length;s.push(n),r=m(s,r,"nonce");var o,h=0|t._crypto_secretbox_noncebytes();r.length!==h&&b(s,"invalid nonce length"),o=u(r),s.push(o),a=m(s,a,"key");var y,d=0|t._crypto_secretbox_keybytes();a.length!==d&&b(s,"invalid key length"),y=u(a),s.push(y);var f=new l(0|c),E=f.address;s.push(E);var x=new l(0|t._crypto_secretbox_macbytes()),k=x.address;if(s.push(k),0==(0|t._crypto_secretbox_detached(E,k,n,c,0,o,y))){var S=p({mac:x,cipher:f},_);return v(s),S}g(s,"invalid usage")}function xr(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"message")),c=e.length;s.push(n),r=m(s,r,"nonce");var o,h=0|t._crypto_secretbox_noncebytes();r.length!==h&&b(s,"invalid nonce length"),o=u(r),s.push(o),a=m(s,a,"key");var y,d=0|t._crypto_secretbox_keybytes();a.length!==d&&b(s,"invalid key length"),y=u(a),s.push(y);var f=new l(c+t._crypto_secretbox_macbytes()|0),E=f.address;if(s.push(E),0==(0|t._crypto_secretbox_easy(E,n,c,0,o,y))){var x=p(f,_);return v(s),x}g(s,"invalid usage")}function kr(e){var r=[];i(e);var a=new l(0|t._crypto_secretbox_keybytes()),_=a.address;r.push(_),t._crypto_secretbox_keygen(_);var s=p(a,e);return v(r),s}function Sr(e,r,a,_,s){var n=[];i(s);var c=u(e=m(n,e,"ciphertext")),o=e.length;n.push(c),r=m(n,r,"mac");var h,y=0|t._crypto_secretbox_macbytes();r.length!==y&&b(n,"invalid mac length"),h=u(r),n.push(h),a=m(n,a,"nonce");var d,f=0|t._crypto_secretbox_noncebytes();a.length!==f&&b(n,"invalid nonce length"),d=u(a),n.push(d),_=m(n,_,"key");var E,x=0|t._crypto_secretbox_keybytes();_.length!==x&&b(n,"invalid key length"),E=u(_),n.push(E);var k=new l(0|o),S=k.address;if(n.push(S),0==(0|t._crypto_secretbox_open_detached(S,c,h,o,0,d,E))){var T=p(k,s);return v(n),T}g(n,"wrong secret key for the given ciphertext")}function Tr(e,r,a,_){var s=[];i(_),e=m(s,e,"ciphertext");var n,c=t._crypto_secretbox_macbytes(),o=e.length;o>>0;return v([]),r}function ht(e,r){var a=[];i(r);for(var _=t._malloc(24),s=0;s<6;s++)t.setValue(_+4*s,t.Runtime.addFunction(e[["implementation_name","random","stir","uniform","buf","close"][s]]),"i32");0!=(0|t._randombytes_set_implementation(_))&&g(a,"unsupported implementation"),v(a)}function pt(e){i(e),t._randombytes_stir()}function yt(e,r){var a=[];i(r),f(a,e,"upper_bound"),("number"!=typeof e||(0|e)!==e||e<0)&&b(a,"upper_bound must be an unsigned integer");var _=t._randombytes_uniform(e)>>>0;return v(a),_}function it(){var e=t._sodium_version_string(),r=t.UTF8ToString(e);return v([]),r}return l.prototype.to_Uint8Array=function(){var e=new Uint8Array(this.length);return e.set(t.HEAPU8.subarray(this.address,this.address+this.length)),e},e.add=function(e,r){if(!(e instanceof Uint8Array&&r instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can added");var t=e.length,a=0,_=0;if(r.length!=e.length)throw new TypeError("Arguments must have the same length");for(_=0;_>=8,a+=e[_]+r[_],e[_]=255&a},e.base64_variants=c,e.compare=function(e,r){if(!(e instanceof Uint8Array&&r instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be compared");if(e.length!==r.length)throw new TypeError("Only instances of identical length can be compared");for(var t=0,a=1,_=e.length;_-- >0;)t|=r[_]-e[_]>>8&a,a&=(r[_]^e[_])-1>>8;return t+t+a-1},e.from_base64=function(e,r){r=o(r);var a,_=[],s=new l(3*(e=m(_,e,"input")).length/4),n=u(e),c=d(4),h=d(4);return _.push(n),_.push(s.address),_.push(s.result_bin_len_p),_.push(s.b64_end_p),0!==t._sodium_base642bin(s.address,s.length,n,e.length,0,c,h,r)&&g(_,"invalid input"),t.getValue(h,"i32")-n!==e.length&&g(_,"incomplete input"),s.length=t.getValue(c,"i32"),a=s.to_Uint8Array(),v(_),a},e.from_hex=function(e){var r,a=[],_=new l((e=m(a,e,"input")).length/2),s=u(e),n=d(4);return a.push(s),a.push(_.address),a.push(_.hex_end_p),0!==t._sodium_hex2bin(_.address,_.length,s,e.length,0,0,n)&&g(a,"invalid input"),t.getValue(n,"i32")-s!==e.length&&g(a,"incomplete input"),r=_.to_Uint8Array(),v(a),r},e.from_string=_,e.increment=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be incremented");for(var r=256,t=0,a=e.length;t>=8,r+=e[t],e[t]=255&r},e.is_zero=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be checked");for(var r=0,t=0,a=e.length;t 0");var a,_=[],s=d(4),n=1,c=0,o=0|e.length,h=new l(o+r);_.push(s),_.push(h.address);for(var p=h.address,y=h.address+o+r;p>>48|o>>>32|o>>>16|o))-1>>16);return 0!==t._sodium_pad(s,h.address,e.length,r,h.length)&&g(_,"internal error"),h.length=t.getValue(s,"i32"),a=h.to_Uint8Array(),v(_),a},e.unpad=function(e,r){if(!(e instanceof Uint8Array))throw new TypeError("buffer must be a Uint8Array");if((r|=0)<=0)throw new Error("block size must be > 0");var a=[],_=u(e),s=d(4);return a.push(_),a.push(s),0!==t._sodium_unpad(s,_,e.length,r)&&g(a,"unsupported/invalid padding"),e=(e=new Uint8Array(e)).subarray(0,t.getValue(s,"i32")),v(a),e},e.ready=a,e.symbols=function(){return Object.keys(e).sort()},e.to_base64=h,e.to_hex=n,e.to_string=s,e}var t="object"==typeof e.sodium&&"function"==typeof e.sodium.onload?e.sodium.onload:null;"function"==typeof define&&define.amd?define(["exports","libsodium"],r):"object"==typeof exports&&"string"!=typeof exports.nodeName?r(exports,require("libsodium")):e.sodium=r(e.commonJsStrict={},e.libsodium),t&&e.sodium.ready.then((function(){t(e.sodium)}))}(this); - -},{"libsodium":210}],210:[function(require,module,exports){ -(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__dirname){(function (){ -!function(A){function I(A){"use strict";var I;void 0===(I=A)&&(I={});var g=I;"object"!=typeof g.sodium&&("object"==typeof global?g=global:"object"==typeof window&&(g=window)),"object"==typeof g.sodium&&"number"==typeof g.sodium.totalMemory&&(I.TOTAL_MEMORY=g.sodium.totalMemory);var B=I;return I.ready=new Promise((function(A,I){(Q=B).onAbort=I,Q.print=function(A){},Q.printErr=function(A){},Q.onRuntimeInitialized=function(){try{Q._crypto_secretbox_keybytes(),A()}catch(A){I(A)}},Q.useBackupModule=function(){return new Promise((function(A,I){(Q={}).onAbort=I,Q.onRuntimeInitialized=function(){Object.keys(B).forEach((function(A){"getRandomValue"!==A&&delete B[A]})),Object.keys(Q).forEach((function(A){B[A]=Q[A]})),A()};var g,Q=void 0!==Q?Q:{},C={};for(g in Q)Q.hasOwnProperty(g)&&(C[g]=Q[g]);var E=[],i=!1,n=!1,a=!1,r=!1;i="object"==typeof window,n="function"==typeof importScripts,a="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,r=!i&&!a&&!n;var o,e,t,f,c,y="";function s(A){return Q.locateFile?Q.locateFile(A,y):y+A}a?(y=n?require("path").dirname(y)+"/":__dirname+"/",o=function(A,I){var g=bA(A);return g?I?g:g.toString():(f||(f=require("fs")),c||(c=require("path")),A=c.normalize(A),f.readFileSync(A,I?null:"utf8"))},t=function(A){var I=o(A,!0);return I.buffer||(I=new Uint8Array(I)),G(I.buffer),I},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),E=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Q),Q.inspect=function(){return"[Emscripten Module object]"}):r?("undefined"!=typeof read&&(o=function(A){var I=bA(A);return I?_A(I):read(A)}),t=function(A){var I;return(I=bA(A))?I:"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(G("object"==typeof(I=read(A,"binary"))),I)},"undefined"!=typeof scriptArgs?E=scriptArgs:void 0!==arguments&&(E=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(i||n)&&(n?y=self.location.href:"undefined"!=typeof document&&document.currentScript&&(y=document.currentScript.src),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",o=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText}catch(I){var g=bA(A);if(g)return _A(g);throw I}},n&&(t=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}catch(I){var g=bA(A);if(g)return g;throw I}}),e=function(A,I,g){var B=new XMLHttpRequest;B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=function(){if(200==B.status||0==B.status&&B.response)I(B.response);else{var Q=bA(A);Q?I(Q.buffer):g()}},B.onerror=g,B.send(null)}),Q.print;var w,h=Q.printErr||void 0;for(g in C)C.hasOwnProperty(g)&&(Q[g]=C[g]);C=null,Q.arguments&&(E=Q.arguments),Q.thisProgram&&Q.thisProgram,Q.quit&&Q.quit,Q.wasmBinary&&(w=Q.wasmBinary),Q.noExitRuntime&&Q.noExitRuntime;var D,u={Memory:function(A){this.buffer=new ArrayBuffer(65536*A.initial)},Module:function(A){},Instance:function(A,I){this.exports=function(A){for(var I,g=new Uint8Array(123),B=25;B>=0;--B)g[48+B]=52+B,g[65+B]=B,g[97+B]=26+B;function Q(A,I,B){for(var Q,C,E=0,i=I,n=B.length,a=I+(3*n>>2)-("="==B[n-2])-("="==B[n-1]);E>4,i>2),i>2]=n[0|K]|n[K+1|0]<<8|n[K+2|0]<<16|n[K+3|0]<<24,i[V+4>>2]=QA,16!=(0|(Z=Z+1|0)););for(g=X(W,A,64),K=i[(I=g)>>2],Z=i[I+4>>2],a=K,K=(QA=i[I+32>>2])+(W=i[I+128>>2])|0,I=($=i[I+36>>2])+i[I+132>>2]|0,I=K>>>0>>0?I+1|0:I,W=K,I=I+Z|0,W=I=(K=a+K|0)>>>0>>0?I+1|0:I,x=ug((Z=K)^(n[0|(K=A- -64|0)]|n[K+1|0]<<8|n[K+2|0]<<16|n[K+3|0]<<24)^-1377402159,I^(n[K+4|0]|n[K+5|0]<<8|n[K+6|0]<<16|n[K+7|0]<<24)^1359893119,32),K=I=p,I=I+1779033703|0,a=QA^(V=x-205731576|0),QA=I=V>>>0<4089235720?I+1|0:I,b=ug(a,$^I,24),m=I=p,j=K,a=x,I=I+W|0,I=(I=(x=b+Z|0)>>>0>>0?I+1|0:I)+(t=B=i[g+140>>2])|0,a=ug(a^(o=Z=(K=i[g+136>>2])+x|0),(G=x>>>0>o>>>0?I+1|0:I)^j,16),I=QA+(d=p)|0,t=ug((l=Z=V+a|0)^b,(W=V>>>0>l>>>0?I+1|0:I)^m,63),f=p,V=i[g+12>>2],Z=(b=i[g+144>>2])+($=QA=i[g+40>>2])|0,I=(T=i[g+148>>2])+(j=i[g+44>>2])|0,I=Z>>>0<$>>>0?I+1|0:I,$=Z,I=I+V|0,I=(Z=Z+i[g+8>>2]|0)>>>0<$>>>0?I+1|0:I,x=ug(Z^(n[A+72|0]|n[A+73|0]<<8|n[A+74|0]<<16|n[A+75|0]<<24)^725511199,(n[A+76|0]|n[A+77|0]<<8|n[A+78|0]<<16|n[A+79|0]<<24)^I^-1694144372,32),j=ug(r=(V=x-2067093701|0)^QA,j^(m=(QA=p)-((x>>>0<2067093701)+1150833018|0)|0),24),c=i[g+156>>2],r=j,I=I+($=p)|0,I=(I=(j=j+Z|0)>>>0>>0?I+1|0:I)+c|0,eA=ug((u=Z=j+i[g+152>>2]|0)^x,(k=j>>>0>u>>>0?I+1|0:I)^QA,16),I=m+(H=p)|0,cA=Z=V+eA|0,x=ug(r^Z,(V=V>>>0>Z>>>0?I+1|0:I)^$,63),m=p,QA=i[g+20>>2],Z=(U=i[g+160>>2])+(j=i[g+48>>2])|0,I=(iA=i[g+164>>2])+(y=i[g+52>>2])|0,$=Z,I=(I=Z>>>0>>0?I+1|0:I)+QA|0,rA=Z=Z+i[g+16>>2]|0,Z=Z>>>0<$>>>0?I+1|0:I,s=ug(rA^(n[A+80|0]|n[A+81|0]<<8|n[A+82|0]<<16|n[A+83|0]<<24)^-79577749,Z^(n[A+84|0]|n[A+85|0]<<8|n[A+86|0]<<16|n[A+87|0]<<24)^528734635,32),QA=I=p,I=I+1013904242|0,r=j^($=s-23791573|0),j=I=$>>>0<4271175723?I+1|0:I,I=ug(r,y^I,24),c=QA,Q=i[g+172>>2],r=I,e=s,s=I,rA=I+rA|0,I=(y=p)+Z|0,I=(I=s>>>0>rA>>>0?I+1|0:I)+(J=Q)|0,AA=ug(e^(F=Z=(QA=i[g+168>>2])+(s=rA)|0),(J=s>>>0>F>>>0?I+1|0:I)^c,16),I=j+(M=p)|0,y=ug(r^(_=Z=$+AA|0),(j=_>>>0<$>>>0?I+1|0:I)^y,63),c=p,s=i[g+28>>2],$=(Z=i[g+176>>2])+(D=rA=i[g+56>>2])|0,I=(yA=i[g+180>>2])+(w=i[g+60>>2])|0,I=(I=D>>>0>$>>>0?I+1|0:I)+s|0,I=(D=$)>>>0>(v=$=D+i[g+24>>2]|0)>>>0?I+1|0:I,S=ug(v^(n[A+88|0]|n[A+89|0]<<8|n[A+90|0]<<16|n[A+91|0]<<24)^327033209,I^(n[A+92|0]|n[A+93|0]<<8|n[A+94|0]<<16|n[A+95|0]<<24)^1541459225,32),s=ug(e=(r=(s=S)+1595750129|0)^rA,w^(rA=($=p)-((s>>>0<2699217167)+1521486533|0)|0),24),w=rA,Y=$,rA=i[g+188>>2],e=s,P=r,I=(D=p)+I|0,I=(I=(v=s+v|0)>>>0>>0?I+1|0:I)+(N=rA)|0,O=s=($=i[g+184>>2])+v|0,r=ug(s^S,(r=Y)^(Y=s>>>0>>0?I+1|0:I),16),I=(I=w)+(w=p)|0,v=s=P+r|0,S=D,D=I=s>>>0>>0?I+1|0:I,e=ug(e^s,S^I,63),s=p,S=m,P=x,L=_,I=m+G|0,m=o=o+x|0,I=(I=o>>>0>>0?I+1|0:I)+(N=q=i[g+196>>2])|0,_=ug((o=x=(IA=i[g+192>>2])+o|0)^r,(x=m>>>0>o>>>0?I+1|0:I)^w,32),I=(I=j)+(j=p)|0,G=I=(m=L+(G=_)|0)>>>0>>0?I+1|0:I,I=ug(P^m,I^S,24),fA=i[g+204>>2],P=I,r=_,w=o,o=I,_=w+I|0,I=(w=p)+x|0,I=(I=o>>>0>_>>>0?I+1|0:I)+(N=fA)|0,CA=x=(S=i[g+200>>2])+(o=_)|0,tA=ug(r^x,(o=o>>>0>x>>>0?I+1|0:I)^j,16),I=G+(_=p)|0,N=ug(P^(r=j=m+tA|0),(G=w)^(w=m>>>0>r>>>0?I+1|0:I),63),G=p,j=c,L=y,I=c+k|0,I=(I=(m=y+u|0)>>>0>>0?I+1|0:I)+(P=oA=i[g+212>>2])|0,u=ug((R=a)^(a=m=(x=i[g+208>>2])+(y=m)|0),(y=y>>>0>a>>>0?I+1|0:I)^d,32),I=D+(m=p)|0,j=ug(L^(c=v+u|0),(I=c>>>0>>0?I+1|0:I)^j,24),d=I,k=m,z=i[g+220>>2],L=j,R=c,I=(c=p)+y|0,I=(I=(D=a+j|0)>>>0>>0?I+1|0:I)+(P=z)|0,k=ug((D=j=(m=i[g+216>>2])+(y=D)|0)^u,(v=y>>>0>D>>>0?I+1|0:I)^k,16),I=(a=p)+d|0,aA=j=R+(y=k)|0,P=ug(L^j,(y=y>>>0>j>>>0?I+1|0:I)^c,63),c=p,d=s,L=e,I=s+J|0,I=(I=(e=e+F|0)>>>0>>0?I+1|0:I)+(u=E=i[g+228>>2])|0,e=ug((J=s=(j=i[g+224>>2])+e|0)^eA,(s=s>>>0>>0?I+1|0:I)^H,32),I=(H=p)+W|0,l=F=l+e|0,W=ug(L^F,(I=F>>>0>>0?I+1|0:I)^d,24),F=I,L=i[g+236>>2],u=W,I=(d=p)+s|0,I=(I=(J=J+W|0)>>>0>>0?I+1|0:I)+L|0,nA=ug((J=W=(BA=i[g+232>>2])+(s=J)|0)^e,(W=H)^(H=s>>>0>J>>>0?I+1|0:I),16),I=(I=F)+(F=p)|0,s=ug(u^(e=W=(s=nA)+l|0),(l=s>>>0>e>>>0?I+1|0:I)^d,63),d=p,u=f,gA=t,EA=cA,I=f+Y|0,I=(I=(cA=t+O|0)>>>0>>0?I+1|0:I)+(R=eA=i[g+244>>2])|0,f=I=(t=(W=i[g+240>>2])+(f=cA)|0)>>>0>>0?I+1|0:I,AA=ug(t^AA,I^M,32),I=(I=V)+(V=p)|0,O=M=EA+(Y=AA)|0,u=ug(gA^M,(I=Y>>>0>M>>>0?I+1|0:I)^u,24),gA=EA=p,M=I,Y=V,sA=u,I=f+EA|0,I=(I=(u=t+u|0)>>>0>>0?I+1|0:I)+(cA=i[g+252>>2])|0,u=t=(V=i[g+248>>2])+(f=u)|0,R=ug(t^AA,(R=Y)^(Y=t>>>0>>0?I+1|0:I),16),I=(I=M)+(M=p)|0,AA=ug(sA^(EA=t=(f=R)+O|0),(t=t>>>0>>0?I+1|0:I)^gA,63),gA=I=p,f=I,sA=k,I=o+eA|0,I=(I=(k=W)>>>0>(O=k+CA|0)>>>0?I+1|0:I)+f|0,O=ug(sA^(f=k=(o=O)+AA|0),(k=o>>>0>f>>>0?I+1|0:I)^a,32),I=l+(o=p)|0,e=I=(a=e+O|0)>>>0>>0?I+1|0:I,CA=AA=ug(AA^a,gA^I,24),gA=I=p,l=I,wA=AA,I=k+oA|0,I=(I=(AA=f+x|0)>>>0>>0?I+1|0:I)+l|0,CA=f=CA+(k=AA)|0,sA=ug(f^O,(l=o)^(o=f>>>0>>0?I+1|0:I),16),I=e+(l=p)|0,e=I=(f=a+sA|0)>>>0>>0?I+1|0:I,AA=ug(wA^(a=f),I^gA,63),k=p,O=N,I=iA+(f=G)|0,I=(I=(N=U+N|0)>>>0>>0?I+1|0:I)+v|0,U=I=(G=D+N|0)>>>0>>0?I+1|0:I,v=ug(G^nA,I^F,32),I=(I=t)+(t=p)|0,I=(F=(D=v)+EA|0)>>>0>>0?I+1|0:I,D=f,f=I,N=ug(O^F,D^I,24),iA=I=p,D=I,O=v,I=U+q|0,I=(I=(v=G+IA|0)>>>0>>0?I+1|0:I)+D|0,I=(G=(U=v)+N|0)>>>0>>0?I+1|0:I,U=G,D=I,nA=ug(O^G,I^t,16),I=f+(v=p)|0,EA=t=F+nA|0,N=ug(t^N,(f=t>>>0>>0?I+1|0:I)^iA,63),t=p,G=c,I=c+fA|0,I=(I=(F=S+P|0)>>>0>>0?I+1|0:I)+H|0,M=ug((S=c=F+J|0)^R,(c=c>>>0>>0?I+1|0:I)^M,32),I=w+(H=p)|0,I=r>>>0>(F=r+M|0)>>>0?I+1|0:I,r=G,G=I,r=w=ug(F^P,r^I,24),P=I=p,J=I,O=M,I=c+cA|0,I=(I=(w=(M=V)+S|0)>>>0>>0?I+1|0:I)+J|0,R=c=r+w|0,gA=ug(O^c,(M=H)^(H=c>>>0>>0?I+1|0:I),16),I=G+(J=p)|0,P=ug((S=c=F+gA|0)^r,(c=c>>>0>>0?I+1|0:I)^P,63),G=p,r=s,I=(F=d)+L|0,I=(I=(M=s+BA|0)>>>0>>0?I+1|0:I)+Y|0,w=ug((M=s=u+M|0)^tA,(s=s>>>0>>0?I+1|0:I)^_,32),I=(I=y)+(y=p)|0,_=ug(r^(Y=d=w+aA|0),(I=d>>>0>>0?I+1|0:I)^F,24),u=d=p,F=I,O=Y,Y=w,w=(I=M)+(M=Z)|0,I=s+yA|0,I=(I=w>>>0>>0?I+1|0:I)+d|0,M=s=w+(r=_)|0,w=I=s>>>0>>0?I+1|0:I,Y=ug(Y^s,I^y,16),I=(d=p)+F|0,O=ug(_^(r=y=O+(s=Y)|0),(s=r>>>0>>0?I+1|0:I)^u,63),y=p,F=t,_=S,u=Y,I=o+B|0,I=(I=(Y=K)>>>0>(S=Y+CA|0)>>>0?I+1|0:I)+t|0,S=ug(u^(t=Y=S+N|0),(o=d)^(d=t>>>0>>0?I+1|0:I),32),I=(I=c)+(c=p)|0,I=(o=S)>>>0>(Y=_+o|0)>>>0?I+1|0:I,u=_=ug((o=Y)^N,I^F,24),N=F=p,Y=I,CA=S,I=d+E|0,I=(I=(S=t+j|0)>>>0>>0?I+1|0:I)+F|0,F=t=(d=S)+_|0,tA=ug(CA^t,(S=t>>>0>>0?I+1|0:I)^c,16),I=(I=Y)+(Y=p)|0,o=t=(c=tA)+o|0,iA=ug(t^u,(_=t>>>0>>0?I+1|0:I)^N,63),c=p,N=r,I=D+(t=G)|0,I=(I=(d=U+P|0)>>>0>>0?I+1|0:I)+(u=aA=i[g+132>>2])|0,d=I=(G=(r=i[g+128>>2])+d|0)>>>0>>0?I+1|0:I,D=ug(G^sA,I^l,32),I=(I=s)+(s=p)|0,l=U=N+D|0,N=u=ug(U^P,(I=U>>>0>>0?I+1|0:I)^t,24),P=t=p,U=I,CA=D,I=d+T|0,d=D=b+G|0,I=(I=D>>>0>>0?I+1|0:I)+t|0,t=ug(CA^(D=G=D+u|0),(t=s)^(s=D>>>0>>0?I+1|0:I),16),I=(I=U)+(U=p)|0,l=G=t+l|0,fA=ug(G^N,(u=G>>>0>>0?I+1|0:I)^P,63),G=p,d=y,I=H+z|0,I=(I=(P=m+R|0)>>>0>>0?I+1|0:I)+y|0,I=(H=(N=P)+O|0)>>>0>>0?I+1|0:I,N=H,y=I,P=ug(H^nA,I^v,32),I=e+(H=p)|0,I=a>>>0>(v=a+P|0)>>>0?I+1|0:I,O=e=ug((a=v)^O,I^d,24),CA=d=p,v=I,R=a,I=y+rA|0,I=(a=$)>>>0>(e=a+N|0)>>>0?I+1|0:I,a=e,I=I+d|0,e=H,H=I=a>>>0>(y=O+a|0)>>>0?I+1|0:I,nA=ug((a=y)^P,e^I,16),I=(y=p)+v|0,O=ug((v=d=R+(e=nA)|0)^O,(I=e>>>0>v>>>0?I+1|0:I)^CA,63),d=p,N=I,P=t,R=AA,I=Q+(e=k)|0,I=(I=(t=QA)>>>0>(AA=t+AA|0)>>>0?I+1|0:I)+w|0,k=t=M+AA|0,w=ug(t^gA,(w=J)^(J=t>>>0>>0?I+1|0:I),32),I=(t=p)+f|0,CA=M=w+EA|0,e=ug(R^M,(I=M>>>0>>0?I+1|0:I)^e,24),gA=EA=p,f=I,M=t,EA=e,R=w,I=J+gA|0,I=(I=(w=e+k|0)>>>0>>0?I+1|0:I)+(AA=i[g+156>>2])|0,J=k=(t=i[g+152>>2])+w|0,e=M,M=I=k>>>0>>0?I+1|0:I,R=ug(R^k,e^I,16),I=(I=f)+(f=p)|0,e=I=(w=R)>>>0>(k=w+CA|0)>>>0?I+1|0:I,CA=ug(EA^(w=k),I^gA,63),EA=I=p,k=I,gA=v,I=S+z|0,I=(I=(v=F+m|0)>>>0>>0?I+1|0:I)+k|0,k=F=v+CA|0,P=ug(F^P,(S=U)^(U=F>>>0>>0?I+1|0:I),32),I=(F=p)+N|0,S=I=(v=gA+(S=P)|0)>>>0>>0?I+1|0:I,EA=CA=ug(CA^v,EA^I,24),gA=I=p,N=I,sA=P,I=U+q|0,I=(I=(P=k+IA|0)>>>0>>0?I+1|0:I)+N|0,I=(k=(U=P)+CA|0)>>>0>>0?I+1|0:I,U=k,N=F,F=I,CA=ug(sA^k,N^I,16),I=S+(N=p)|0,I=(k=v+CA|0)>>>0>>0?I+1|0:I,v=k,S=I,IA=ug(k^EA,I^gA,63),k=p,P=c,gA=iA,I=c+E|0,I=s+(j>>>0>(iA=j+iA|0)>>>0?I+1|0:I)|0,q=c=D+iA|0,iA=ug(c^nA,(s=y)^(y=c>>>0>>0?I+1|0:I),32),I=e+(c=p)|0,D=I=(s=w+iA|0)>>>0>>0?I+1|0:I,P=e=ug(gA^s,I^P,24),nA=I=p,w=I,I=y+aA|0,I=(I=(e=r+q|0)>>>0>>0?I+1|0:I)+w|0,q=y=P+(r=e)|0,iA=ug(y^iA,(w=y>>>0>>0?I+1|0:I)^c,16),I=D+(r=p)|0,aA=y=s+iA|0,e=ug(y^P,(s=y>>>0>>0?I+1|0:I)^nA,63),y=p,I=Q+(c=G)|0,I=H+((D=QA)>>>0>(P=D+fA|0)>>>0?I+1|0:I)|0,D=f,f=I=a>>>0>(G=a+P|0)>>>0?I+1|0:I,P=ug((a=G)^R,D^I,32),I=_+(G=p)|0,I=o>>>0>(H=o+P|0)>>>0?I+1|0:I,o=c,c=I,o=ug(H^fA,o^I,24),fA=I=p,D=I,gA=o,I=f+T|0,I=(I=(o=b)>>>0>(_=o+a|0)>>>0?I+1|0:I)+D|0,nA=f=gA+(o=_)|0,R=ug(f^P,(D=f>>>0>>0?I+1|0:I)^G,16),I=c+(o=p)|0,P=f=H+R|0,_=ug(gA^f,(G=f>>>0>>0?I+1|0:I)^fA,63),f=p,I=cA+(c=d)|0,I=M+((a=(H=V)+O|0)>>>0>>0?I+1|0:I)|0,H=I=(d=J+a|0)>>>0>>0?I+1|0:I,a=ug(d^tA,I^Y,32),I=u+(J=p)|0,Y=c,c=I=l>>>0>(M=l+a|0)>>>0?I+1|0:I,l=ug(M^O,Y^I,24),O=I=p,Y=I,gA=a,I=H+L|0,I=(I=(a=d+BA|0)>>>0>>0?I+1|0:I)+Y|0,a=ug(gA^(Y=d=a+(u=l)|0),(u=J)^(J=a>>>0>Y>>>0?I+1|0:I),16),I=c+(H=p)|0,l=ug(l^(u=d=M+a|0),(d=u>>>0>>0?I+1|0:I)^O,63),c=p,M=y,O=e,gA=a,I=F+oA|0,F=a=U+x|0,I=(I=a>>>0>>0?I+1|0:I)+y|0,e=ug(gA^(a=U=a+e|0),(y=F>>>0>a>>>0?I+1|0:I)^H,32),I=(I=G)+(G=p)|0,U=I=(H=e+P|0)>>>0>>0?I+1|0:I,P=M=ug(O^H,I^M,24),O=I=p,F=I,I=y+eA|0,I=(I=(a=(M=W)+a|0)>>>0>>0?I+1|0:I)+F|0,fA=y=P+a|0,tA=ug(y^e,(F=y>>>0>>0?I+1|0:I)^G,16),I=U+(M=p)|0,P=ug((EA=y=H+tA|0)^P,(y=y>>>0>>0?I+1|0:I)^O,63),G=p,H=f,e=_,I=w+AA|0,I=(I=(_=t+q|0)>>>0>>0?I+1|0:I)+f|0,f=I=(w=_)>>>0>(U=e+w|0)>>>0?I+1|0:I,_=ug((w=U)^CA,I^N,32),I=(I=d)+(d=p)|0,I=(a=_)>>>0>(U=a+u|0)>>>0?I+1|0:I,u=e=ug(e^(a=U),I^H,24),U=I,N=a,a=_,_=(I=w)+(w=Z)|0,I=f+yA|0,I=(I=w>>>0>_>>>0?I+1|0:I)+(H=p)|0,I=(f=(w=_)+e|0)>>>0>>0?I+1|0:I,w=f,_=I,a=ug(a^f,I^d,16),I=(e=p)+U|0,d=ug((CA=f=N+a|0)^u,(f=f>>>0>>0?I+1|0:I)^H,63),H=p,U=c,N=l,I=D+rA|0,I=(I=(u=(l=$)+nA|0)>>>0>>0?I+1|0:I)+c|0,l=D=N+u|0,c=I=D>>>0>>0?I+1|0:I,u=ug(D^iA,I^r,32),I=S+(D=p)|0,S=r=v+u|0,N=r=ug(N^r,(I=r>>>0>>0?I+1|0:I)^U,24),q=U=p,v=I,O=S,I=c+B|0,I=(I=(r=(S=K)+l|0)>>>0>>0?I+1|0:I)+U|0,I=(c=N+r|0)>>>0>>0?I+1|0:I,S=c,r=D,D=I,nA=ug(c^u,r^I,16),I=(I=v)+(v=p)|0,N=ug((c=O+(U=nA)|0)^N,(I=c>>>0>>0?I+1|0:I)^q,63),U=p,l=c,u=I,I=J+(r=k)|0,k=c=Y+IA|0,I=(I=c>>>0>>0?I+1|0:I)+(q=i[g+204>>2])|0,k=I=(c=(O=i[g+200>>2])+c|0)>>>0>>0?I+1|0:I,Y=ug(c^R,I^o,32),I=(I=s)+(s=p)|0,I=(o=Y)>>>0>(J=o+aA|0)>>>0?I+1|0:I,r=ug((o=J)^IA,I^r,24),R=aA=p,J=I,gA=o,aA=Y,I=k+R|0,I=(I=(Y=c+r|0)>>>0>>0?I+1|0:I)+(IA=i[g+164>>2])|0,Y=c=(iA=i[g+160>>2])+(k=Y)|0,aA=ug(aA^c,(o=c>>>0>>0?I+1|0:I)^s,16),I=(I=J)+(J=p)|0,r=ug(r^(gA=c=gA+(s=aA)|0),(c=c>>>0>>0?I+1|0:I)^R,63),R=I=p,s=I,sA=a,I=F+rA|0,I=(I=(a=(k=$)+fA|0)>>>0>>0?I+1|0:I)+s|0,e=ug(sA^(s=k=a+r|0),(k=a>>>0>s>>>0?I+1|0:I)^e,32),I=(F=p)+u|0,l=a=l+e|0,u=ug(r^a,(I=a>>>0>>0?I+1|0:I)^R,24),R=r=p,a=I,fA=l,sA=e,I=k+q|0,I=(I=(e=s+O|0)>>>0>>0?I+1|0:I)+r|0,l=s=e+u|0,sA=ug(sA^s,(r=F)^(F=s>>>0>>0?I+1|0:I),16),I=(r=p)+a|0,fA=ug((wA=s=fA+(k=sA)|0)^u,(s=s>>>0>>0?I+1|0:I)^R,63),k=p,I=AA+(a=G)|0,I=(I=(e=t+P|0)>>>0>>0?I+1|0:I)+_|0,e=ug((_=t=e+w|0)^nA,(t=t>>>0>>0?I+1|0:I)^v,32),I=(I=c)+(c=p)|0,w=I=e>>>0>(G=e+gA|0)>>>0?I+1|0:I,u=a=ug(G^P,I^a,24),P=I=p,v=I,a=(I=_)+(_=K)|0,I=t+B|0,I=(I=a>>>0<_>>>0?I+1|0:I)+v|0,AA=t=u+a|0,nA=ug(t^e,(v=t>>>0>>0?I+1|0:I)^c,16),I=w+(_=p)|0,R=t=G+nA|0,a=ug(t^u,(c=t>>>0>>0?I+1|0:I)^P,63),t=p,e=d,I=(G=H)+L|0,I=(I=(w=d+BA|0)>>>0>>0?I+1|0:I)+D|0,H=I=(d=w+S|0)>>>0>>0?I+1|0:I,D=ug(d^aA,I^J,32),I=(I=y)+(y=p)|0,I=(w=D)>>>0>(J=w+EA|0)>>>0?I+1|0:I,S=ug(e^(w=J),I^G,24),u=G=p,J=I,P=w,L=D,I=H+E|0,H=D=d+j|0,I=(I=D>>>0>>0?I+1|0:I)+G|0,aA=ug(L^(D=d=D+(e=S)|0),(w=H>>>0>D>>>0?I+1|0:I)^y,16),I=(I=J)+(J=p)|0,u=ug(S^(e=y=P+(G=aA)|0),(G=e>>>0>>0?I+1|0:I)^u,63),y=p,d=U,I=U+z|0,I=(I=(S=m+N|0)>>>0>>0?I+1|0:I)+o|0,I=(H=Y+S|0)>>>0>>0?I+1|0:I,Y=H,H=I,S=ug(Y^tA,I^M,32),I=(I=f)+(f=p)|0,o=d,d=I=(U=(M=S)+CA|0)>>>0>>0?I+1|0:I,N=o=ug(U^N,o^I,24),P=I=p,M=I,L=S,S=(I=Y)+(Y=W)|0,I=H+eA|0,I=(I=Y>>>0>S>>>0?I+1|0:I)+M|0,M=H=(Y=S)+o|0,o=ug(L^H,(Y=H>>>0>>0?I+1|0:I)^f,16),I=d+(H=p)|0,I=(f=U+o|0)>>>0>>0?I+1|0:I,U=f,S=I,N=ug(f^N,I^P,63),f=p,d=t,P=a,L=o,I=F+T|0,I=(I=(a=(o=b)+l|0)>>>0>>0?I+1|0:I)+t|0,t=I=a>>>0>(F=P+a|0)>>>0?I+1|0:I,o=ug(L^F,I^H,32),I=(I=G)+(G=p)|0,I=(a=o)>>>0>(H=a+e|0)>>>0?I+1|0:I,l=e=ug(P^(a=H),I^d,24),H=I,P=o,o=(I=F)+(F=Z)|0,I=t+yA|0,I=(I=o>>>0>>0?I+1|0:I)+(d=p)|0,F=t=o+e|0,o=I=t>>>0>>0?I+1|0:I,t=(G=tA=ug(P^t,I^G,16))+a|0,I=(a=p)+H|0,e=t,L=ug(H=t^l,(l=t>>>0>>0?I+1|0:I)^d,63),d=p,I=v+Q|0,I=(I=(G=QA)>>>0>(H=G+AA|0)>>>0?I+1|0:I)+(t=y)|0,v=G=H+u|0,r=ug(G^sA,(y=G>>>0>>0?I+1|0:I)^r,32),I=S+(G=p)|0,I=(H=U+r|0)>>>0>>0?I+1|0:I,U=H,S=ug(H^u,I^t,24),P=t=p,H=I,AA=U,I=y+oA|0,I=(U=x)>>>0>(v=U+v|0)>>>0?I+1|0:I,U=v,I=I+t|0,v=y=v+(u=S)|0,y=ug(y^r,(S=y>>>0>>0?I+1|0:I)^G,16),I=(U=p)+H|0,EA=t=AA+y|0,BA=ug(t^u,(G=t>>>0>>0?I+1|0:I)^P,63),H=p,P=N,I=w+IA|0,I=(I=(r=D+iA|0)>>>0>>0?I+1|0:I)+(t=f)|0,u=ug((f=D=r+N|0)^nA,(D=r>>>0>f>>>0?I+1|0:I)^_,32),I=(I=s)+(s=p)|0,N=w=(_=u)+wA|0,r=ug(P^w,(I=w>>>0<_>>>0?I+1|0:I)^t,24),w=t=p,_=I,P=r,I=D+t|0,I=(I=(r=f+r|0)>>>0>>0?I+1|0:I)+(AA=i[g+132>>2])|0,D=f=(t=i[g+128>>2])+r|0,r=I=f>>>0>>0?I+1|0:I,nA=ug(f^u,I^s,16),I=(I=_)+(_=p)|0,CA=ug(P^(f=(s=nA)+N|0),(I=f>>>0>>0?I+1|0:I)^w,63),s=p,u=f,N=I,P=y,I=cA+(w=k)|0,I=(I=(f=(y=V)+fA|0)>>>0>>0?I+1|0:I)+Y|0,M=ug((f=y=f+M|0)^aA,(k=f>>>0>>0?I+1|0:I)^J,32),I=(y=p)+c|0,I=(Y=M)>>>0>(J=Y+R|0)>>>0?I+1|0:I,w=ug((Y=J)^fA,I^w,24),gA=R=p,c=I,J=y,aA=M,I=k+R|0,I=(I=(M=f+w|0)>>>0>>0?I+1|0:I)+(fA=i[g+196>>2])|0,M=f=(y=i[g+192>>2])+(k=M)|0,aA=ug(aA^f,(R=J)^(J=f>>>0>>0?I+1|0:I),16),I=(I=c)+(c=p)|0,w=ug(w^(R=f=(k=aA)+Y|0),(f=f>>>0>>0?I+1|0:I)^gA,63),gA=I=p,k=I,I=o+q|0,I=(I=(Y=F+O|0)>>>0>>0?I+1|0:I)+k|0,I=(F=Y+w|0)>>>0>>0?I+1|0:I,Y=F,k=I,o=ug(F^P,I^U,32),I=(U=p)+N|0,u=F=u+o|0,N=ug(w^F,(I=F>>>0>>0?I+1|0:I)^gA,24),q=F=p,w=I,P=o,I=k+AA|0,I=(I=(o=t+Y|0)>>>0>>0?I+1|0:I)+F|0,O=k=o+N|0,gA=ug(P^k,(F=k>>>0>>0?I+1|0:I)^U,16),I=(I=w)+(w=p)|0,Y=k=(U=gA)+u|0,q=ug(k^N,(o=k>>>0>>0?I+1|0:I)^q,63),U=p,I=Q+(k=d)|0,I=S+((u=QA)>>>0>(N=u+L|0)>>>0?I+1|0:I)|0,v=I=(d=v+N|0)>>>0>>0?I+1|0:I,u=ug(d^nA,I^_,32),I=(I=f)+(f=p)|0,I=(_=u)>>>0>(S=_+R|0)>>>0?I+1|0:I,_=k,k=I,N=ug(S^L,_^I,24),L=I=p,_=I,P=u,I=v+rA|0,I=(I=(u=d+$|0)>>>0>>0?I+1|0:I)+_|0,_=I=(d=(v=u)+N|0)>>>0>>0?I+1|0:I,nA=ug(P^(v=d),I^f,16),I=k+(u=p)|0,R=f=S+nA|0,N=ug(f^N,(d=f>>>0>>0?I+1|0:I)^L,63),f=p,k=H,I=H+T|0,I=r+(b>>>0>(P=b+BA|0)>>>0?I+1|0:I)|0,r=c,c=I=D>>>0>(H=D+P|0)>>>0?I+1|0:I,P=ug(H^aA,r^I,32),I=l+(D=p)|0,r=k,k=I=e>>>0>(S=e+P|0)>>>0?I+1|0:I,l=e=ug(S^BA,r^I,24),r=I=p,I=c+IA|0,I=(I=(e=H+iA|0)>>>0>>0?I+1|0:I)+r|0,IA=c=l+e|0,iA=ug(c^P,(H=c>>>0>>0?I+1|0:I)^D,16),I=k+(D=p)|0,BA=c=S+iA|0,e=ug(c^l,(k=c>>>0>>0?I+1|0:I)^r,63),c=p,S=s,I=s+oA|0,I=J+((r=x)>>>0>(l=r+CA|0)>>>0?I+1|0:I)|0,a=ug((r=s=M+l|0)^tA,(s=r>>>0>>0?I+1|0:I)^a,32),I=(I=G)+(G=p)|0,P=S=ug((l=J=a+EA|0)^CA,(I=a>>>0>l>>>0?I+1|0:I)^S,24),L=J=p,M=I,I=s+cA|0,I=(I=(r=(S=V)+r|0)>>>0>>0?I+1|0:I)+J|0,J=s=P+r|0,a=ug(s^a,(S=s>>>0>>0?I+1|0:I)^G,16),I=(I=M)+(M=p)|0,CA=s=a+l|0,P=ug(s^P,(G=s>>>0>>0?I+1|0:I)^L,63),s=p,L=N,aA=a,I=F+eA|0,I=(I=(a=W)>>>0>(l=a+O|0)>>>0?I+1|0:I)+(r=f)|0,f=I=(a=l)>>>0>(F=a+N|0)>>>0?I+1|0:I,l=ug(aA^(a=F),I^M,32),I=(I=k)+(k=p)|0,N=F=(M=l)+BA|0,L=r=ug(L^F,(I=F>>>0>>0?I+1|0:I)^r,24),BA=F=p,M=I,I=f+B|0,I=(I=(a=(r=K)+a|0)>>>0>>0?I+1|0:I)+F|0,tA=f=L+a|0,aA=ug(f^l,(r=k)^(k=f>>>0>>0?I+1|0:I),16),I=(F=p)+M|0,M=f=(r=aA)+N|0,L=ug(f^L,(r=f>>>0>>0?I+1|0:I)^BA,63),f=p,N=e,I=_+z|0,_=e=m+v|0,I=(I=e>>>0>>0?I+1|0:I)+(a=c)|0,l=ug((e=v=N+e|0)^gA,(c=e>>>0<_>>>0?I+1|0:I)^w,32),I=(I=G)+(G=p)|0,v=I=(w=(v=l)+CA|0)>>>0>>0?I+1|0:I,N=a=ug(N^w,I^a,24),BA=I=p,_=I,I=c+E|0,I=(I=(a=j)>>>0>(e=a+e|0)>>>0?I+1|0:I)+_|0,_=c=N+(a=e)|0,G=ug(c^l,(a=c>>>0>>0?I+1|0:I)^G,16),I=v+(e=p)|0,I=(c=w+G|0)>>>0>>0?I+1|0:I,w=c,v=I,BA=ug(c^N,I^BA,63),c=p,l=s,O=P,I=H+yA|0,I=(I=(N=Z)>>>0>(P=N+IA|0)>>>0?I+1|0:I)+s|0,I=(H=O+(N=P)|0)>>>0>>0?I+1|0:I,N=H,s=I,P=ug(H^nA,I^u,32),I=o+(H=p)|0,o=I=(u=Y+P|0)>>>0>>0?I+1|0:I,u=ug(O^(Y=u),I^l,24),O=I=p,l=I,I=s+fA|0,I=(I=(N=y+N|0)>>>0>>0?I+1|0:I)+l|0,l=s=(IA=u)+(u=N)|0,CA=ug(s^P,(N=H)^(H=s>>>0>>0?I+1|0:I),16),I=o+(u=p)|0,I=(s=Y+CA|0)>>>0>>0?I+1|0:I,Y=s,IA=ug(s^IA,I^O,63),s=p,N=I,gA=q,I=S+(o=U)|0,I=(I=(q=J+q|0)>>>0>>0?I+1|0:I)+(O=nA=i[g+156>>2])|0,J=I=(U=(P=i[g+152>>2])+(J=q)|0)>>>0>>0?I+1|0:I,S=ug(U^iA,I^D,32),I=(I=d)+(d=p)|0,q=D=S+R|0,O=o=ug(gA^D,(I=D>>>0>>0?I+1|0:I)^o,24),R=iA=p,D=I,gA=EA=i[g+236>>2],EA=q,q=S,I=J+R|0,I=(I=(o=o+U|0)>>>0>>0?I+1|0:I)+gA|0,I=(U=(S=i[g+232>>2])+o|0)>>>0>>0?I+1|0:I,o=d,d=I,iA=ug(q^U,o^I,16),I=(J=p)+D|0,O=ug((D=o=EA+(q=iA)|0)^O,(o=o>>>0>>0?I+1|0:I)^R,63),R=I=p,q=I,EA=G,I=k+T|0,I=(I=(G=b+tA|0)>>>0>>0?I+1|0:I)+q|0,e=ug(EA^(q=b=G+O|0),(b=b>>>0>>0?I+1|0:I)^e,32),I=(G=p)+N|0,N=k=Y+e|0,T=ug(O^k,R^(I=k>>>0>>0?I+1|0:I),24),tA=k=p,Y=I,O=N,R=e,I=b+E|0,I=(I=(e=j)>>>0>(N=e+q|0)>>>0?I+1|0:I)+k|0,R=ug(R^(k=b=(e=N)+T|0),(e=e>>>0>k>>>0?I+1|0:I)^G,16),I=(I=Y)+(Y=p)|0,N=b=O+(G=R)|0,O=ug(b^T,(q=b>>>0>>0?I+1|0:I)^tA,63),G=p,b=f,EA=L,I=f+yA|0,I=a+(Z>>>0>(L=Z+L|0)>>>0?I+1|0:I)|0,u=ug((T=f=_+L|0)^CA,(f=f>>>0<_>>>0?I+1|0:I)^u,32),I=o+(_=p)|0,I=(a=D+u|0)>>>0>>0?I+1|0:I,D=a,o=b,b=I,L=a=ug(EA^a,o^I,24),CA=I=p,o=I,EA=a,tA=u,I=f+oA|0,I=(I=(a=x)>>>0>(u=a+T|0)>>>0?I+1|0:I)+o|0,L=f=L+(a=u)|0,tA=ug(tA^f,(o=f>>>0>>0?I+1|0:I)^_,16),I=b+(_=p)|0,I=(f=D+tA|0)>>>0>>0?I+1|0:I,D=f,a=I,u=ug(EA^f,I^CA,63),f=p,b=c,I=c+AA|0,I=(I=(T=t+BA|0)>>>0>>0?I+1|0:I)+H|0,I=(t=l+T|0)>>>0>>0?I+1|0:I,l=t,t=I,T=ug(l^iA,I^J,32),I=r+(c=p)|0,r=b,b=I=(H=M+T|0)>>>0>>0?I+1|0:I,r=M=ug(H^BA,r^I,24),BA=I=p,J=I,I=t+z|0,I=(I=(M=m+l|0)>>>0>>0?I+1|0:I)+J|0,l=m=r+(t=M)|0,T=ug(m^T,(M=c)^(c=t>>>0>m>>>0?I+1|0:I),16),I=b+(J=p)|0,z=m=H+T|0,M=ug(m^r,(t=m>>>0>>0?I+1|0:I)^BA,63),b=p,m=s,I=s+fA|0,I=(I=(H=y+IA|0)>>>0>>0?I+1|0:I)+d|0,I=(y=H+U|0)>>>0>>0?I+1|0:I,U=y,y=I,F=ug(U^aA,I^F,32),I=v+(s=p)|0,r=m,m=I=w>>>0>(d=w+F|0)>>>0?I+1|0:I,v=w=ug(d^IA,r^I,24),r=I=p,I=y+nA|0,I=(I=(U=U+P|0)>>>0

>>0?I+1|0:I)+r|0,H=y=U+w|0,F=ug(y^F,(w=s)^(s=y>>>0>>0?I+1|0:I),16),I=m+(U=p)|0,r=ug((w=y=d+F|0)^v,(y=y>>>0>>0?I+1|0:I)^r,63),m=p,d=f,P=F,I=f+e|0,I=(F=k+u|0)>>>0>>0?I+1|0:I,k=F,I=I+(v=i[g+164>>2])|0,v=ug(P^(F=f=F+i[g+160>>2]|0),(f=f>>>0>>0?I+1|0:I)^U,32),I=(I=t)+(t=p)|0,e=d,d=I=(k=(U=v)+z|0)>>>0>>0?I+1|0:I,e=ug(k^u,e^I,24),P=I=p,U=I,I=f+gA|0,I=(I=(F=F+S|0)>>>0>>0?I+1|0:I)+U|0,BA=ug((z=f=F+e|0)^v,(f=f>>>0>>0?I+1|0:I)^t,16),I=d+(U=p)|0,d=t=k+BA|0,u=ug(t^e,(k=t>>>0>>0?I+1|0:I)^P,63),t=p,e=M,S=w,I=o+rA|0,I=(I=(w=(M=$)+L|0)>>>0>>0?I+1|0:I)+(F=b)|0,Y=ug((v=M=e+w|0)^R,(b=w>>>0>v>>>0?I+1|0:I)^Y,32),I=(I=y)+(y=p)|0,o=F,F=I=(w=Y)>>>0>(M=S+w|0)>>>0?I+1|0:I,o=S=ug(e^M,o^I,24),e=I=p,S=Y,I=b+Q|0,I=(I=(Y=QA)>>>0>(v=Y+v|0)>>>0?I+1|0:I)+e|0,v=ug(S^(w=b=v+o|0),(Y=w>>>0>>0?I+1|0:I)^y,16),I=F+(S=p)|0,P=ug((F=b=M+v|0)^o,(M=F>>>0>>0?I+1|0:I)^e,63),b=p,L=r,I=c+cA|0,I=(o=V)>>>0>(r=o+l|0)>>>0?I+1|0:I,o=r,I=I+(y=m)|0,e=ug((r=c=L+r|0)^tA,(m=r>>>0>>0?I+1|0:I)^_,32),I=q+(c=p)|0,_=y,y=I=(o=N+e|0)>>>0>>0?I+1|0:I,l=ug(L^o,_^I,24),q=I=p,_=I,N=e,e=(I=r)+(r=W)|0,I=m+eA|0,I=(I=r>>>0>e>>>0?I+1|0:I)+_|0,_=I=(r=e)>>>0>(m=r+l|0)>>>0?I+1|0:I,L=ug(N^m,I^c,16),I=y+(r=p)|0,N=ug((c=o+L|0)^l,(I=c>>>0>>0?I+1|0:I)^q,63),y=p,e=I,I=B+(o=G)|0,I=s+((l=K)>>>0>(q=l+O|0)>>>0?I+1|0:I)|0,l=G=H+q|0,q=ug(G^T,(s=G>>>0>>0?I+1|0:I)^J,32),I=a+(G=p)|0,J=I=D>>>0>(H=D+q|0)>>>0?I+1|0:I,T=I=ug(H^O,I^o,24),D=I,o=I+l|0,I=(a=p)+s|0,I=(I=o>>>0>>0?I+1|0:I)+(IA=i[g+204>>2])|0,I=(s=o+i[g+200>>2]|0)>>>0>>0?I+1|0:I,o=G,G=I,IA=ug(s^q,o^I,16),I=J+(D=p)|0,I=(o=H+IA|0)>>>0>>0?I+1|0:I,H=o,J=I,a=ug(T^o,I^a,63),o=I=p,l=c,T=v,I=f+E|0,I=(I=(c=j)>>>0>(v=c+z|0)>>>0?I+1|0:I)+o|0,T=ug(T^(q=f=(c=v)+a|0),(f=f>>>0>>0?I+1|0:I)^S,32),I=(c=p)+e|0,S=I=(v=l+(S=T)|0)>>>0>>0?I+1|0:I,a=ug(a^v,o^I,24),l=I=p,o=I,R=a,I=f+Q|0,I=(I=(a=QA)>>>0>(e=a+q|0)>>>0?I+1|0:I)+o|0,T=ug((o=f=R+(a=e)|0)^T,(a=o>>>0>>0?I+1|0:I)^c,16),I=S+(e=p)|0,I=(f=v+T|0)>>>0>>0?I+1|0:I,v=f,S=I,f=ug(R^f,I^l,63),c=p,l=t,R=u,I=t+B|0,I=Y+((u=K)>>>0>(q=R+u|0)>>>0?I+1|0:I)|0,r=ug((u=t=w+q|0)^L,(t=t>>>0>>0?I+1|0:I)^r,32),I=J+(w=p)|0,J=I=H>>>0>(Y=H+r|0)>>>0?I+1|0:I,q=l=ug(R^(H=Y),I^l,24),z=I=p,Y=I,R=l,L=r,I=t+cA|0,I=(I=(r=V)>>>0>(l=r+u|0)>>>0?I+1|0:I)+Y|0,q=t=q+(r=l)|0,L=ug(L^t,(Y=w)^(w=t>>>0>>0?I+1|0:I),16),I=J+(Y=p)|0,I=(t=H+L|0)>>>0>>0?I+1|0:I,H=t,J=I,u=ug(R^t,I^z,63),t=p,R=P,I=eA+(r=b)|0,I=_+((l=W)>>>0>(P=l+P|0)>>>0?I+1|0:I)|0,l=ug((_=b=m+P|0)^IA,(b=m>>>0>_>>>0?I+1|0:I)^D,32),I=k+(m=p)|0,I=(D=d+l|0)>>>0>>0?I+1|0:I,d=D,k=I,I=ug(R^D,I^r,24),z=i[g+236>>2],R=I,r=_,_=I,r=r+I|0,I=(D=p)+b|0,I=(I=r>>>0<_>>>0?I+1|0:I)+z|0,r=I=(b=r+i[g+232>>2]|0)>>>0>>0?I+1|0:I,z=ug((_=b)^l,I^m,16),I=k+(l=p)|0,P=b=d+z|0,D=ug(R^b,(m=b>>>0>>0?I+1|0:I)^D,63),b=p,d=y,R=N,I=y+G|0,I=(I=(k=s+N|0)>>>0>>0?I+1|0:I)+(IA=i[g+164>>2])|0,U=ug((N=y=(s=k)+i[g+160>>2]|0)^BA,(y=y>>>0>>0?I+1|0:I)^U,32),I=M+(s=p)|0,M=d,d=I=F>>>0>(G=F+U|0)>>>0?I+1|0:I,M=F=ug(R^G,M^I,24),BA=I=p,k=I,R=U,I=y+oA|0,I=(I=(F=(U=x)+N|0)>>>0>>0?I+1|0:I)+k|0,IA=y=M+F|0,F=ug(R^y,(k=s)^(s=y>>>0>>0?I+1|0:I),16),I=d+(k=p)|0,I=(y=G+F|0)>>>0>>0?I+1|0:I,G=y,d=I,N=ug(y^M,I^BA,63),y=p,U=t,R=F,I=t+a|0,I=(I=(F=o+u|0)>>>0>>0?I+1|0:I)+(M=i[g+132>>2])|0,o=ug(R^(M=t=F+i[g+128>>2]|0),(t=t>>>0>>0?I+1|0:I)^k,32),I=(I=m)+(m=p)|0,a=U,U=I=o>>>0>(k=o+P|0)>>>0?I+1|0:I,a=ug(k^u,a^I,24),P=I=p,F=I,u=o,o=(I=M)+(M=$)|0,I=t+rA|0,I=(I=o>>>0>>0?I+1|0:I)+F|0,BA=t=o+a|0,AA=ug(u^t,(F=t>>>0>>0?I+1|0:I)^m,16),I=U+(M=p)|0,U=I=(m=k+AA|0)>>>0>>0?I+1|0:I,u=ug((k=m)^a,I^P,63),m=p,P=D,I=w+yA|0,w=o=(D=Z)+q|0,I=(I=o>>>0>>0?I+1|0:I)+(t=b)|0,a=ug((o=D=P+o|0)^T,(b=w>>>0>o>>>0?I+1|0:I)^e,32),I=d+(D=p)|0,I=(w=G+a|0)>>>0>>0?I+1|0:I,G=w,e=t,t=I,I=ug(P^w,e^I,24),P=i[g+156>>2],e=I,w=I,o=I+o|0,I=(d=p)+b|0,I=(I=o>>>0>>0?I+1|0:I)+P|0,I=o>>>0>(b=o+i[g+152>>2]|0)>>>0?I+1|0:I,o=D,D=I,q=ug((w=b)^a,o^I,16),I=t+(o=p)|0,a=d,d=I=(b=G+q|0)>>>0>>0?I+1|0:I,P=ug(e^(G=b),a^I,63),t=p,b=y,I=y+r|0,I=(I=(a=_+N|0)>>>0<_>>>0?I+1|0:I)+(e=i[g+204>>2])|0,I=(y=a+i[g+200>>2]|0)>>>0>>0?I+1|0:I,a=Y,Y=I,a=ug(y^L,a^I,32),I=S+(_=p)|0,I=(r=v+a|0)>>>0>>0?I+1|0:I,v=r,e=b,b=I,r=ug(r^N,e^I,24),e=I=p,L=r,I=I+Y|0,I=(I=(r=y+r|0)>>>0>>0?I+1|0:I)+(N=i[g+148>>2])|0,I=(y=r+i[g+144>>2]|0)>>>0>>0?I+1|0:I,Y=y,r=_,_=I,T=ug(y^a,r^I,16),I=b+(r=p)|0,I=(y=v+T|0)>>>0>>0?I+1|0:I,v=y,S=I,N=ug(L^y,e^I,63),y=p,b=c,L=f,I=c+s|0,c=a=f+IA|0,I=(I=a>>>0>>0?I+1|0:I)+(e=i[g+196>>2])|0,e=ug((a=f=a+i[g+192>>2]|0)^z,(f=a>>>0>>0?I+1|0:I)^l,32),I=J+(c=p)|0,b=ug(L^(s=H+e|0),(I=s>>>0>>0?I+1|0:I)^b,24),H=I,z=i[g+220>>2],l=b,R=s,I=(s=p)+f|0,f=a=a+b|0,I=(I=a>>>0>>0?I+1|0:I)+(L=z)|0,L=ug(b=(a=b=(J=i[g+216>>2])+a|0)^e,(e=f>>>0>a>>>0?I+1|0:I)^c,16),I=(I=H)+(H=p)|0,I=(f=L)>>>0>(b=R+f|0)>>>0?I+1|0:I,f=s,s=I,I=ug(l^b,f^I,63),O=i[g+236>>2],R=I,c=I,l=I+BA|0,I=(f=p)+F|0,I=(I=c>>>0>l>>>0?I+1|0:I)+O|0,q=ug((l=c=(F=l)+i[g+232>>2]|0)^q,(c=c>>>0>>0?I+1|0:I)^o,32),I=S+(F=p)|0,I=(o=v+q|0)>>>0>>0?I+1|0:I,v=o,S=f,f=I,I=ug(R^o,S^I,24),R=q,o=I,l=I+l|0,I=(S=p)+c|0,I=z+(o>>>0>l>>>0?I+1|0:I)|0,q=c=l+J|0,z=ug(R^c,(l=F)^(F=c>>>0>>0?I+1|0:I),16),I=f+(J=p)|0,I=(c=v+z|0)>>>0>>0?I+1|0:I,v=c,f=S,S=I,f=ug(o^c,f^I,63),c=p,R=u,I=rA+(o=m)|0,I=D+((u=(l=$)+u|0)>>>0>>0?I+1|0:I)|0,r=ug((l=m=w+u|0)^T,(m=w>>>0>m>>>0?I+1|0:I)^r,32),I=s+(D=p)|0,I=(w=b+r|0)>>>0>>0?I+1|0:I,b=w,s=I,u=o=ug(R^w,I^o,24),T=I=p,w=I,R=r,I=m+eA|0,I=(I=(o=W)>>>0>(r=o+l|0)>>>0?I+1|0:I)+w|0,BA=m=u+(o=r)|0,IA=ug(R^m,(r=D)^(D=o>>>0>m>>>0?I+1|0:I),16),I=s+(w=p)|0,l=ug((s=m=b+IA|0)^u,(o=s>>>0>>0?I+1|0:I)^T,63),b=p,m=t,I=t+E|0,I=_+((r=j)>>>0>(u=r+P|0)>>>0?I+1|0:I)|0,r=ug((_=t=Y+u|0)^L,(t=t>>>0>>0?I+1|0:I)^H,32),I=U+(H=p)|0,I=k>>>0>(Y=k+r|0)>>>0?I+1|0:I,k=Y,Y=m,m=I,u=Y=ug(k^P,Y^I,24),P=I=p,U=I,I=t+B|0,I=(I=(Y=K)>>>0>(_=Y+_|0)>>>0?I+1|0:I)+U|0,U=t=u+_|0,T=ug(t^r,(Y=H)^(H=t>>>0<_>>>0?I+1|0:I),16),I=m+(Y=p)|0,I=(t=k+T|0)>>>0>>0?I+1|0:I,k=t,_=I,u=ug(t^u,I^P,63),m=p,I=e+(t=y)|0,I=(I=(r=a+N|0)>>>0>>0?I+1|0:I)+(P=i[g+156>>2])|0,a=M,M=I=(y=r+i[g+152>>2]|0)>>>0>>0?I+1|0:I,e=ug(y^AA,a^I,32),I=d+(r=p)|0,I=(a=G+e|0)>>>0>>0?I+1|0:I,G=a,d=t,t=I,a=ug(a^N,d^I,24),N=I=p,R=a,I=M+I|0,I=(I=(a=a+y|0)>>>0>>0?I+1|0:I)+(P=i[g+204>>2])|0,L=y=a+i[g+200>>2]|0,a=ug(y^e,(M=y>>>0>>0?I+1|0:I)^r,16),I=t+(y=p)|0,I=(r=G+a|0)>>>0>>0?I+1|0:I,G=r,d=I,N=ug(R^r,N^I,63),t=p,P=a,I=F+Q|0,I=(I=(a=QA)>>>0>(e=a+q|0)>>>0?I+1|0:I)+(r=b)|0,b=F=(a=e)+l|0,e=ug(P^F,(e=y)^(y=a>>>0>F>>>0?I+1|0:I),32),I=_+(F=p)|0,I=(a=k+e|0)>>>0>>0?I+1|0:I,k=a,_=I,a=ug(a^l,I^r,24),r=I=p,l=a,I=y+I|0,I=(I=(a=a+b|0)>>>0>>0?I+1|0:I)+(P=i[g+132>>2])|0,q=b=a+i[g+128>>2]|0,AA=ug(b^e,(y=F)^(F=a>>>0>b>>>0?I+1|0:I),16),I=_+(a=p)|0,_=I=(b=k+AA|0)>>>0>>0?I+1|0:I,P=ug(l^(k=b),I^r,63),b=p,I=D+cA|0,I=(I=(r=V)>>>0>(e=r+BA|0)>>>0?I+1|0:I)+(y=m)|0,m=I=(r=e)>>>0>(D=r+u|0)>>>0?I+1|0:I,e=ug((r=D)^z,I^J,32),I=d+(J=p)|0,I=G>>>0>(D=G+e|0)>>>0?I+1|0:I,G=D,l=y,y=I,I=ug(D^u,l^I,24),u=i[g+164>>2],l=I,D=I,r=I+r|0,I=(d=p)+m|0,I=(I=r>>>0>>0?I+1|0:I)+u|0,I=(m=r+i[g+160>>2]|0)>>>0>>0?I+1|0:I,r=J,J=I,r=ug((D=m)^e,r^I,16),I=y+(e=p)|0,y=d,d=I=(m=G+r|0)>>>0>>0?I+1|0:I,m=ug(l^(G=m),y^I,63),y=p,l=t,R=N,I=t+H|0,I=(I=(u=U+N|0)>>>0>>0?I+1|0:I)+(z=i[g+196>>2])|0,N=ug((u=t=(H=u)+i[g+192>>2]|0)^IA,(t=t>>>0>>0?I+1|0:I)^w,32),I=S+(H=p)|0,w=I=(U=v+N|0)>>>0>>0?I+1|0:I,S=ug(R^U,I^l,24),z=I=p,v=I,R=S,I=t+yA|0,I=(I=(l=(S=Z)+u|0)>>>0>>0?I+1|0:I)+v|0,BA=t=R+(S=l)|0,IA=ug(t^N,(l=H)^(H=t>>>0>>0?I+1|0:I),16),I=w+(v=p)|0,I=(t=U+IA|0)>>>0>>0?I+1|0:I,U=t,l=ug(R^t,I^z,63),t=p,w=c,S=I,R=f,I=c+M|0,I=(I=(u=f+L|0)>>>0>>0?I+1|0:I)+(N=i[g+148>>2])|0,Y=ug((u=f=(c=u)+i[g+144>>2]|0)^T,(f=f>>>0>>0?I+1|0:I)^Y,32),I=o+(c=p)|0,I=s>>>0>(M=s+Y|0)>>>0?I+1|0:I,s=M,M=I,N=o=ug(R^s,I^w,24),T=I=p,w=I,L=Y,I=f+oA|0,I=(I=(o=(Y=x)+u|0)>>>0>>0?I+1|0:I)+w|0,w=f=N+o|0,z=ug(L^f,(Y=f>>>0>>0?I+1|0:I)^c,16),I=M+(c=p)|0,I=(f=s+z|0)>>>0>>0?I+1|0:I,s=f,M=I,o=ug(f^N,I^T,63),u=I=p,f=I,N=U,T=r,I=F+yA|0,F=r=(U=Z)+q|0,I=(I=r>>>0>>0?I+1|0:I)+f|0,e=ug(T^(r=U=r+o|0),(f=F>>>0>r>>>0?I+1|0:I)^e,32),I=(U=p)+S|0,S=I=(F=N+e|0)>>>0>>0?I+1|0:I,u=ug(o^F,u^I,24),q=I=p,o=I,N=e,e=(I=r)+(r=V)|0,I=f+cA|0,I=(I=r>>>0>e>>>0?I+1|0:I)+o|0,T=f=(r=e)+u|0,L=ug(N^f,(o=U)^(U=f>>>0>>0?I+1|0:I),16),I=S+(o=p)|0,I=(f=F+L|0)>>>0>>0?I+1|0:I,F=f,S=I,N=ug(f^u,I^q,63),f=p,I=eA+(r=b)|0,I=J+((e=W)>>>0>(u=e+P|0)>>>0?I+1|0:I)|0,v=ug((e=b=D+u|0)^IA,(b=e>>>0>>0?I+1|0:I)^v,32),I=M+(J=p)|0,M=I=s>>>0>(D=s+v|0)>>>0?I+1|0:I,I=ug((s=D)^P,I^r,24),P=i[g+204>>2],u=I,q=v,v=I,r=I+e|0,I=(D=p)+b|0,I=(I=r>>>0>>0?I+1|0:I)+P|0,P=b=r+i[g+200>>2]|0,q=ug(q^b,(e=J)^(J=b>>>0>>0?I+1|0:I),16),I=M+(v=p)|0,M=b=s+q|0,e=ug(u^b,(r=D)^(D=s>>>0>b>>>0?I+1|0:I),63),b=p,s=y,R=m,I=y+H|0,I=(I=(r=m+BA|0)>>>0>>0?I+1|0:I)+(u=i[g+220>>2])|0,r=ug((H=m=r+i[g+216>>2]|0)^z,(m=r>>>0>H>>>0?I+1|0:I)^c,32),I=_+(y=p)|0,_=s,s=I=(c=k+r|0)>>>0>>0?I+1|0:I,I=ug(R^c,_^I,24),z=i[g+156>>2],u=I,_=H,H=I,_=_+I|0,I=(k=p)+m|0,I=(I=H>>>0>_>>>0?I+1|0:I)+z|0,z=m=(H=_)+i[g+152>>2]|0,BA=ug(m^r,(H=m>>>0>>0?I+1|0:I)^y,16),I=s+(_=p)|0,y=ug(u^(s=m=c+BA|0),(r=k)^(k=c>>>0>s>>>0?I+1|0:I),63),c=p,m=t,I=t+Y|0,I=(I=(r=w+l|0)>>>0>>0?I+1|0:I)+(u=i[g+132>>2])|0,w=I=(t=r+i[g+128>>2]|0)>>>0>>0?I+1|0:I,a=ug(t^AA,I^a,32),I=d+(Y=p)|0,I=(r=G+a|0)>>>0>>0?I+1|0:I,G=r,u=m,m=I,r=ug(r^l,u^I,24),l=I=p,R=r,I=w+I|0,I=(I=(r=t+r|0)>>>0>>0?I+1|0:I)+(u=i[g+196>>2])|0,I=(t=r+i[g+192>>2]|0)>>>0>>0?I+1|0:I,w=t,r=Y,Y=I,a=ug(t^a,r^I,16),I=m+(t=p)|0,I=(r=G+a|0)>>>0>>0?I+1|0:I,G=r,d=I,u=ug(R^r,l^I,63),m=p,R=e,l=a,I=U+E|0,I=(I=(a=j)>>>0>(e=a+T|0)>>>0?I+1|0:I)+(r=b)|0,b=U=R+(a=e)|0,e=ug(l^U,(e=t)^(t=a>>>0>U>>>0?I+1|0:I),32),I=k+(U=p)|0,l=a=s+e|0,a=ug(R^a,(I=a>>>0>>0?I+1|0:I)^r,24),k=I,IA=i[g+148>>2],T=a,I=t+(s=p)|0,I=(I=(a=a+b|0)>>>0>>0?I+1|0:I)+(AA=IA)|0,O=ug((AA=b=(r=i[g+144>>2])+a|0)^e,(b=a>>>0>b>>>0?I+1|0:I)^U,16),I=(I=k)+(k=p)|0,I=(t=(U=O)+l|0)>>>0>>0?I+1|0:I,U=t,a=I,t=ug(T^t,I^s,63),s=p,R=y,I=(e=c)+J|0,I=(I=(l=y+P|0)>>>0>>0?I+1|0:I)+(T=i[g+236>>2])|0,o=ug((l=y=(c=l)+i[g+232>>2]|0)^L,(y=c>>>0>y>>>0?I+1|0:I)^o,32),I=d+(c=p)|0,d=I=G>>>0>(J=G+o|0)>>>0?I+1|0:I,P=e=ug(R^(G=J),I^e,24),T=I=p,J=I,R=o,I=y+rA|0,I=(I=(o=$)>>>0>(e=o+l|0)>>>0?I+1|0:I)+J|0,L=y=P+(o=e)|0,o=ug(R^y,(J=y>>>0>>0?I+1|0:I)^c,16),I=d+(e=p)|0,d=y=G+o|0,P=ug(y^P,(l=y>>>0>>0?I+1|0:I)^T,63),y=p,T=u,I=H+B|0,I=(I=(G=K)>>>0>(u=G+z|0)>>>0?I+1|0:I)+(c=m)|0,u=ug((m=G=T+(H=u)|0)^q,(G=G>>>0>>0?I+1|0:I)^v,32),I=S+(H=p)|0,S=ug(T^(v=F+u|0),(I=F>>>0>v>>>0?I+1|0:I)^c,24),F=I,z=i[g+164>>2],q=S,R=v,I=G+(c=p)|0,G=S=m+S|0,I=(I=S>>>0>>0?I+1|0:I)+(T=z)|0,S=H,H=I=(m=(v=i[g+160>>2])+G|0)>>>0>>0?I+1|0:I,iA=ug(m^u,S^I,16),I=(I=F)+(F=p)|0,S=I=(G=R+(S=iA)|0)>>>0>>0?I+1|0:I,q=ug(q^G,I^c,63),c=p,u=f,R=N,I=f+oA|0,I=Y+((N=x)>>>0>(T=R+N|0)>>>0?I+1|0:I)|0,_=ug((N=f=w+T|0)^BA,(f=f>>>0>>0?I+1|0:I)^_,32),I=D+(w=p)|0,D=I=(Y=M+_|0)>>>0>>0?I+1|0:I,T=u=ug(R^(M=Y),I^u,24),BA=I=p,Y=I,R=_,I=f+Q|0,I=(I=(u=(_=QA)+N|0)>>>0<_>>>0?I+1|0:I)+Y|0,Y=f=T+u|0,N=ug(R^f,(_=w)^(w=f>>>0>>0?I+1|0:I),16),I=D+(_=p)|0,I=(f=M+N|0)>>>0>>0?I+1|0:I,M=f,D=I,u=ug(f^T,I^BA,63),T=I=p,f=I,R=o,I=b+oA|0,b=o=x+AA|0,I=(I=o>>>0>>0?I+1|0:I)+f|0,e=ug(R^(o=x=o+u|0),(b=b>>>0>o>>>0?I+1|0:I)^e,32),I=S+(f=p)|0,oA=x=G+e|0,S=I=G>>>0>x>>>0?I+1|0:I,R=x=ug(u^x,T^I,24),I=(G=p)+b|0,I=(I=(o=o+x|0)>>>0>>0?I+1|0:I)+IA|0,T=ug((u=x=o+r|0)^e,(o=r>>>0>u>>>0?I+1|0:I)^f,16),I=(I=S)+(S=p)|0,oA=x=(b=T)+oA|0,f=ug(R^x,(b=b>>>0>x>>>0?I+1|0:I)^G,63),G=p,x=s,R=t,I=s+J|0,s=r=t+L|0,I=(I=r>>>0>>0?I+1|0:I)+(e=i[g+196>>2])|0,e=ug((r=t=r+i[g+192>>2]|0)^iA,(t=r>>>0>>0?I+1|0:I)^F,32),I=D+(s=p)|0,D=x,x=I=(F=M+e|0)>>>0>>0?I+1|0:I,R=I=ug(R^F,D^I,24),M=I,D=I+r|0,I=(J=p)+t|0,I=z+(D>>>0>>0?I+1|0:I)|0,z=t=D+v|0,L=ug(t^e,(r=s)^(s=t>>>0>>0?I+1|0:I),16),I=x+(M=p)|0,I=(t=F+L|0)>>>0>>0?I+1|0:I,F=t,r=J,J=I,r=ug(R^t,r^I,63),x=p,I=rA+(t=y)|0,I=H+((D=$)>>>0>(v=D+P|0)>>>0?I+1|0:I)|0,D=y=m+v|0,v=ug(y^N,(m=y>>>0>>0?I+1|0:I)^_,32),I=a+(y=p)|0,a=t,t=I=(H=U+v|0)>>>0>>0?I+1|0:I,a=_=ug(H^P,a^I,24),e=I=p,_=v,v=(I=D)+(D=Z)|0,I=m+yA|0,I=(I=D>>>0>v>>>0?I+1|0:I)+e|0,U=m=(D=v)+a|0,N=ug(_^m,(D=m>>>0>>0?I+1|0:I)^y,16),I=t+(v=p)|0,t=ug((P=m=H+N|0)^a,(m=m>>>0>>0?I+1|0:I)^e,63),y=p,H=c,I=c+B|0,I=w+((a=(_=K)+q|0)>>>0<_>>>0?I+1|0:I)|0,I=(c=Y+a|0)>>>0>>0?I+1|0:I,Y=c,c=I,_=ug(Y^O,I^k,32),I=l+(k=p)|0,I=(w=d+_|0)>>>0>>0?I+1|0:I,d=w,a=H,H=I,a=ug(w^q,a^I,24),l=I=p,w=I,e=_,_=(I=Y)+(Y=QA)|0,I=c+Q|0,I=(I=Y>>>0>_>>>0?I+1|0:I)+w|0,q=c=_+a|0,_=ug(e^c,(Y=k)^(k=c>>>0<_>>>0?I+1|0:I),16),I=H+(w=p)|0,I=(c=d+_|0)>>>0>>0?I+1|0:I,d=c,H=I,e=ug(c^a,I^l,63),c=p,a=r,l=_,I=o+cA|0,I=(I=(r=(_=V)+u|0)>>>0<_>>>0?I+1|0:I)+(Y=x)|0,_=o=a+r|0,x=I=o>>>0>>0?I+1|0:I,r=ug(l^o,I^w,32),I=(I=m)+(m=p)|0,o=Y,Y=I=r>>>0>(w=r+P|0)>>>0?I+1|0:I,I=ug(a^w,o^I,24),l=i[g+220>>2],a=I,P=r,o=_,_=I,r=o+I|0,I=(o=p)+x|0,I=(I=r>>>0<_>>>0?I+1|0:I)+l|0,P=ug(P^(u=x=r+i[g+216>>2]|0),(_=r>>>0>u>>>0?I+1|0:I)^m,16),I=Y+(r=p)|0,Y=I=w>>>0>(x=w+P|0)>>>0?I+1|0:I,x=ug(a^(w=x),I^o,63),m=p,R=t,I=(o=y)+s|0,y=a=t+z|0,I=(I=a>>>0>>0?I+1|0:I)+(l=i[g+204>>2])|0,S=ug((a=t=a+i[g+200>>2]|0)^T,(t=a>>>0>>0?I+1|0:I)^S,32),I=H+(y=p)|0,d=I=(s=d+S|0)>>>0>>0?I+1|0:I,l=o=ug(R^s,I^o,24),T=I=p,H=I,R=S,I=t+eA|0,I=(I=(o=(S=W)+a|0)>>>0>>0?I+1|0:I)+H|0,z=t=l+o|0,BA=ug(R^t,(H=t>>>0>>0?I+1|0:I)^y,16),I=d+(S=p)|0,I=(t=s+BA|0)>>>0>>0?I+1|0:I,s=t,d=I,t=ug(t^l,I^T,63),y=p,R=e,I=(o=c)+D|0,I=(e=e+U|0)>>>0>>0?I+1|0:I,U=e,I=I+(l=T=i[g+156>>2])|0,l=ug((e=c=(a=i[g+152>>2])+e|0)^L,(c=e>>>0>>0?I+1|0:I)^M,32),I=(I=b)+(b=p)|0,M=I=(U=l+oA|0)>>>0>>0?I+1|0:I,oA=o=ug(R^U,I^o,24),L=I=p,D=I,R=o,I=c+E|0,I=(I=(o=j)>>>0>(e=o+e|0)>>>0?I+1|0:I)+D|0,oA=c=oA+(o=e)|0,IA=ug(c^l,(D=c>>>0>>0?I+1|0:I)^b,16),I=M+(c=p)|0,I=(b=U+IA|0)>>>0>>0?I+1|0:I,U=b,M=I,l=ug(R^b,I^L,63),b=p,R=f,I=(o=G)+k|0,G=e=f+q|0,I=(I=e>>>0>>0?I+1|0:I)+(L=i[g+236>>2])|0,v=ug((e=f=e+i[g+232>>2]|0)^N,(G=e>>>0>>0?I+1|0:I)^v,32),I=J+(k=p)|0,N=f=F+v|0,f=ug(R^f,(I=f>>>0>>0?I+1|0:I)^o,24),J=I,L=i[g+132>>2],q=f,R=N,N=v,I=(F=p)+G|0,I=(I=(o=f+e|0)>>>0>>0?I+1|0:I)+L|0,I=(f=(v=i[g+128>>2])+o|0)>>>0>>0?I+1|0:I,G=f,o=k,k=I,N=ug(N^f,o^I,16),I=(I=J)+(J=p)|0,I=(f=R+(o=N)|0)>>>0>>0?I+1|0:I,o=f,f=F,F=I,q=I=ug(q^o,f^I,63),e=I,u=I+u|0,I=(f=p)+_|0,I=L+(e>>>0>u>>>0?I+1|0:I)|0,u=ug((e=_=u+v|0)^BA,(v=v>>>0>e>>>0?I+1|0:I)^S,32),I=M+(S=p)|0,I=U>>>0>(_=U+u|0)>>>0?I+1|0:I,U=_,_=f,f=I,q=_=ug(q^U,_^I,24),L=I=p,M=I,R=_,I=v+B|0,I=(I=(e=(_=K)+e|0)>>>0<_>>>0?I+1|0:I)+M|0,q=v=q+e|0,BA=ug(v^u,(M=v>>>0>>0?I+1|0:I)^S,16),I=f+(v=p)|0,I=U>>>0>(S=U+BA|0)>>>0?I+1|0:I,U=S,S=I,u=ug(R^U,I^L,63),f=p,_=m,R=x,I=m+H|0,m=e=x+z|0,I=(I=e>>>0>>0?I+1|0:I)+(L=i[g+148>>2])|0,z=ug((e=x=e+i[g+144>>2]|0)^IA,(x=m>>>0>e>>>0?I+1|0:I)^c,32),I=F+(m=p)|0,H=I=(c=o+z|0)>>>0>>0?I+1|0:I,L=I=ug(R^c,I^_,24),o=I,_=I+e|0,I=(F=p)+x|0,I=T+(o>>>0>_>>>0?I+1|0:I)|0,T=x=a+_|0,z=ug(x^z,(o=a>>>0>x>>>0?I+1|0:I)^m,16),I=H+(_=p)|0,m=ug(L^(H=x=c+z|0),(a=F)^(F=c>>>0>H>>>0?I+1|0:I),63),c=p,x=y,L=t,I=y+D|0,y=a=t+oA|0,I=(I=a>>>0>>0?I+1|0:I)+(e=i[g+164>>2])|0,e=ug((a=t=a+i[g+160>>2]|0)^N,(t=a>>>0>>0?I+1|0:I)^J,32),I=Y+(y=p)|0,Y=x,x=I=w>>>0>(J=w+e|0)>>>0?I+1|0:I,w=ug(L^J,Y^I,24),N=I=p,D=I,R=w,I=t+Q|0,I=(I=(w=QA)>>>0>(Y=w+a|0)>>>0?I+1|0:I)+D|0,oA=t=R+(w=Y)|0,L=ug(t^e,(D=t>>>0>>0?I+1|0:I)^y,16),I=x+(w=p)|0,I=(t=J+L|0)>>>0>>0?I+1|0:I,J=t,Y=I,t=ug(R^t,I^N,63),y=p,x=b,I=b+yA|0,I=k+((a=Z)>>>0>(e=a+l|0)>>>0?I+1|0:I)|0,r=ug((a=b=G+e|0)^P,(b=a>>>0>>0?I+1|0:I)^r,32),I=d+(G=p)|0,e=x,x=I=s>>>0>(k=s+r|0)>>>0?I+1|0:I,e=k=ug((s=k)^l,e^I,24),l=I=p,N=r,I=b+rA|0,I=(I=(r=(k=$)+a|0)>>>0>>0?I+1|0:I)+l|0,d=b=e+r|0,r=ug(N^b,(a=G)^(G=b>>>0>>0?I+1|0:I),16),I=x+(k=p)|0,l=ug((a=b=s+r|0)^e,(b=s>>>0>a>>>0?I+1|0:I)^l,63),x=p,s=c,N=m,P=r,I=c+M|0,I=(I=(r=m+q|0)>>>0>>0?I+1|0:I)+(e=i[g+196>>2])|0,r=ug(P^(M=m=r+i[g+192>>2]|0),(m=r>>>0>m>>>0?I+1|0:I)^k,32),I=Y+(c=p)|0,e=s,s=I=(k=J+r|0)>>>0>>0?I+1|0:I,I=ug(N^k,e^I,24),N=i[g+204>>2],e=I,Y=M,M=I,Y=Y+I|0,I=(J=p)+m|0,I=(I=Y>>>0>>0?I+1|0:I)+N|0,P=m=Y+i[g+200>>2]|0,q=ug(m^r,(M=m>>>0>>0?I+1|0:I)^c,16),I=s+(Y=p)|0,m=ug(e^(s=m=k+q|0),(k=s>>>0>>0?I+1|0:I)^J,63),c=p,J=y,N=t,R=a,I=y+o|0,I=(I=(a=t+T|0)>>>0>>0?I+1|0:I)+(e=IA=i[g+212>>2])|0,a=ug((o=t=(r=i[g+208>>2])+a|0)^BA,(t=t>>>0>>0?I+1|0:I)^v,32),I=(I=b)+(b=p)|0,e=J,J=I=(y=R+a|0)>>>0>>0?I+1|0:I,I=ug(N^y,e^I,24),N=i[g+220>>2],R=I,e=a,a=o,o=I,a=a+I|0,I=(v=p)+t|0,I=(I=a>>>0>>0?I+1|0:I)+N|0,T=t=a+i[g+216>>2]|0,a=ug(e^t,(o=t>>>0>>0?I+1|0:I)^b,16),I=J+(e=p)|0,J=b=y+a|0,b=ug(R^b,(t=v)^(v=y>>>0>b>>>0?I+1|0:I),63),t=p,R=l,I=D+E|0,I=(I=(l=j)>>>0>(N=l+oA|0)>>>0?I+1|0:I)+(y=x)|0,N=ug((x=D=R+(l=N)|0)^z,(D=D>>>0>>0?I+1|0:I)^_,32),I=S+(_=p)|0,I=U>>>0>(l=U+N|0)>>>0?I+1|0:I,U=l,l=y,y=I,l=ug(R^U,l^I,24),S=I=p,R=l,I=D+I|0,I=(I=(l=l+x|0)>>>0>>0?I+1|0:I)+(z=i[g+236>>2])|0,oA=x=(D=l)+i[g+232>>2]|0,z=ug(x^N,(D=D>>>0>x>>>0?I+1|0:I)^_,16),I=y+(_=p)|0,N=ug(R^(y=x=U+z|0),(U=U>>>0>y>>>0?I+1|0:I)^S,63),x=p,S=f,R=u,I=f+eA|0,I=G+((u=(l=W)+u|0)>>>0>>0?I+1|0:I)|0,w=ug((l=f=d+u|0)^L,(f=f>>>0>>0?I+1|0:I)^w,32),I=F+(G=p)|0,H=I=H>>>0>(d=H+w|0)>>>0?I+1|0:I,u=S=ug(R^d,I^S,24),L=I=p,F=I,R=w,I=f+cA|0,I=(I=(w=V)>>>0>(S=w+l|0)>>>0?I+1|0:I)+F|0,F=f=u+(w=S)|0,l=ug(R^f,(l=G)^(G=f>>>0>>0?I+1|0:I),16),I=H+(w=p)|0,I=(f=d+l|0)>>>0>>0?I+1|0:I,d=f,H=I,S=ug(f^u,I^L,63),u=I=p,f=I,L=a,I=M+eA|0,M=a=P+W|0,I=(I=a>>>0>>0?I+1|0:I)+f|0,e=ug(L^(a=W=a+S|0),(W=M>>>0>a>>>0?I+1|0:I)^e,32),I=U+(f=p)|0,U=I=y>>>0>(M=y+e|0)>>>0?I+1|0:I,P=I=ug(S^(y=M),u^I,24),S=I,a=I+a|0,I=(M=p)+W|0,I=IA+(a>>>0>>0?I+1|0:I)|0,u=ug((u=e)^(e=W=a+r|0),(S=r>>>0>e>>>0?I+1|0:I)^f,16),I=U+(r=p)|0,y=ug(P^(U=W=y+u|0),(a=M)^(M=y>>>0>U>>>0?I+1|0:I),63),f=p,W=c,L=m,I=c+o|0,c=a=m+T|0,I=(I=a>>>0>>0?I+1|0:I)+(P=i[g+164>>2])|0,_=ug((a=m=a+i[g+160>>2]|0)^z,(m=c>>>0>a>>>0?I+1|0:I)^_,32),I=H+(c=p)|0,I=(o=d+_|0)>>>0>>0?I+1|0:I,d=o,H=W,W=I,I=ug(L^o,H^I,24),T=i[g+196>>2],L=I,P=_,o=I,_=I+a|0,I=(H=p)+m|0,I=(I=o>>>0>_>>>0?I+1|0:I)+T|0,P=ug(P^(a=m=(o=_)+i[g+192>>2]|0),(_=c)^(c=o>>>0>a>>>0?I+1|0:I),16),I=W+(T=p)|0,I=(m=d+P|0)>>>0>>0?I+1|0:I,d=m,o=H,H=I,o=ug(L^m,o^I,63),W=p,m=t,L=b,I=t+D|0,I=(I=(_=b+oA|0)>>>0>>0?I+1|0:I)+(eA=i[g+204>>2])|0,w=ug((_=b=(t=_)+i[g+200>>2]|0)^l,(b=t>>>0>b>>>0?I+1|0:I)^w,32),I=k+(t=p)|0,I=s>>>0>(D=s+w|0)>>>0?I+1|0:I,s=D,D=m,m=I,l=D=ug(L^s,D^I,24),eA=I=p,k=I,L=D,I=b+cA|0,I=(I=(D=_+V|0)>>>0>>0?I+1|0:I)+k|0,l=ug((_=V=l+D|0)^w,(l=t)^(t=D>>>0>_>>>0?I+1|0:I),16),I=m+(k=p)|0,D=I=s>>>0>(V=s+l|0)>>>0?I+1|0:I,V=ug(L^(s=V),I^eA,63),b=p,I=G+(m=x)|0,G=w=F+N|0,I=(I=w>>>0>>0?I+1|0:I)+(eA=i[g+236>>2])|0,Y=ug((w=x=w+i[g+232>>2]|0)^q,(x=G>>>0>w>>>0?I+1|0:I)^Y,32),I=v+(G=p)|0,v=m,m=I=(F=J+Y|0)>>>0>>0?I+1|0:I,v=ug(F^N,v^I,24),q=I=p,J=I,I=x+yA|0,I=(I=(w=w+Z|0)>>>0>>0?I+1|0:I)+J|0,N=ug((J=Z=w+v|0)^Y,(N=G)^(G=w>>>0>J>>>0?I+1|0:I),16),I=m+(yA=p)|0,w=I=F>>>0>(Z=F+N|0)>>>0?I+1|0:I,x=ug(v^(F=Z),I^q,63),m=p,I=S+B|0,I=(I=(v=e+K|0)>>>0>>0?I+1|0:I)+(Y=W)|0,I=v>>>0>(K=v+o|0)>>>0?I+1|0:I,v=K,K=I,I=E+I|0,j=I=(Y=j+v|0)>>>0>>0?I+1|0:I,e=Y,Y=ug(v^N,K^yA,32),I=D+(v=p)|0,S=ug((D=K=s+Y|0)^o,(K=s>>>0>D>>>0?I+1|0:I)^W,24),I=(o=p)+j|0,I=(s=S)>>>0>(W=e+s|0)>>>0?I+1|0:I,s=W,i[g>>2]=s,i[g+4>>2]=I,Z=I,I=ug(s^Y,I^v,16),Y=W=p,i[g+120>>2]=I,i[g+124>>2]=Y,j=I,D=I+D|0,I=Y+K|0,i[g+80>>2]=D,I=D>>>0>>0?I+1|0:I,i[g+84>>2]=I,hA=g,DA=ug(S^D,I^o,63),i[hA+40>>2]=DA,i[g+44>>2]=p,K=b,o=V,I=c+b|0,I=(I=(j=a+V|0)>>>0>>0?I+1|0:I)+(D=i[g+132>>2])|0,j=I=(V=j+i[g+128>>2]|0)>>>0>>0?I+1|0:I,c=ug(V^u,I^r,32),I=w+(D=p)|0,a=K,K=I=F>>>0>(b=F+c|0)>>>0?I+1|0:I,w=ug(o^(F=b),a^I,24),I=j+(Y=p)|0,I=(b=w+V|0)>>>0>>0?I+1|0:I,V=(j=i[g+144>>2])+b|0,I=i[g+148>>2]+I|0,I=V>>>0>>0?I+1|0:I,i[g+8>>2]=V,i[g+12>>2]=I,I=ug(c^V,I^D,16),b=W=p,i[g+96>>2]=I,i[g+100>>2]=b,V=I,j=I+F|0,I=b+K|0,K=j,i[g+88>>2]=K,I=V>>>0>K>>>0?I+1|0:I,i[g+92>>2]=I,hA=g,DA=ug(w^K,I^Y,63),i[hA+48>>2]=DA,i[g+52>>2]=p,a=$,I=t+m|0,I=(I=(V=_+x|0)>>>0>>0?I+1|0:I)+(j=i[g+220>>2])|0,I=(W=V+i[g+216>>2]|0)>>>0>>0?I+1|0:I,$=W,j=W,V=a+W|0,W=I,I=I+rA|0,I=V>>>0>>0?I+1|0:I,j=V,V=I,a=j,o=x,j=ug(P^$,W^T,32),I=M+(x=p)|0,m=ug(o^(b=W=U+j|0),(W=U>>>0>b>>>0?I+1|0:I)^m,24),I=(c=p)+V|0,V=$=a+(t=m)|0,i[g+16>>2]=V,I=t>>>0>V>>>0?I+1|0:I,i[g+20>>2]=I,I=ug(V^j,I^x,16),K=p,i[g+104>>2]=I,i[g+108>>2]=K,V=I,$=I+b|0,I=W+K|0,W=$,i[g+64>>2]=W,I=V>>>0>W>>>0?I+1|0:I,i[g+68>>2]=I,hA=g,DA=ug(t^W,I^c,63),i[hA+56>>2]=DA,i[g+60>>2]=p,I=f+Q|0,I=(I=(V=y+QA|0)>>>0>>0?I+1|0:I)+G|0,QA=I=J>>>0>(V=J+V|0)>>>0?I+1|0:I,x=ug(V^l,I^k,32),I=H+(b=p)|0,K=I=d>>>0>($=d+x|0)>>>0?I+1|0:I,m=ug($^y,f^I,24),I=QA+(t=p)|0,I=V>>>0>(j=m+V|0)>>>0?I+1|0:I,V=(QA=i[g+152>>2])+j|0,I=i[g+156>>2]+I|0,I=V>>>0>>0?I+1|0:I,i[g+24>>2]=V,i[g+28>>2]=I,I=ug(x^V,I^b,16),i[g+112>>2]=I,QA=p,i[g+116>>2]=QA,V=I+$|0,I=K+QA|0,K=V,i[g+72>>2]=K,I=K>>>0<$>>>0?I+1|0:I,i[g+76>>2]=I,hA=g,DA=ug(m^K,I^t,63),i[hA+32>>2]=DA,i[g+36>>2]=p,I=i[g+68>>2]^(n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24)^Z,K=i[g+64>>2]^(n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24)^s,C[0|A]=K,C[A+1|0]=K>>>8,C[A+2|0]=K>>>16,C[A+3|0]=K>>>24,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24,Z=1;I=(K=Z<<3)+A|0,W=K=g+K|0,V=i[K>>2]^(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24),QA=i[(K=K- -64|0)>>2],K=i[K+4>>2]^i[W+4>>2]^(n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24),W=V^QA,C[0|I]=W,C[I+1|0]=W>>>8,C[I+2|0]=W>>>16,C[I+3|0]=W>>>24,C[I+4|0]=K,C[I+5|0]=K>>>8,C[I+6|0]=K>>>16,C[I+7|0]=K>>>24,8!=(0|(Z=Z+1|0)););h=g+256|0}function F(A,I,g,B){var Q=0,C=0,E=0,n=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0;for(function(A,I){for(var g=0,B=0,Q=0,C=0,E=0;C=Q=(B=g<<3)+A|0,E=dA(I+B|0),i[C>>2]=E,i[Q+4>>2]=p,16!=(0|(g=g+1|0)););}(g,I),I=X(B,A,64),o=i[g>>2],f=i[g+4>>2],B=0;;){if(Q=ug(l=i[(E=I)+32>>2],t=i[E+36>>2],14),s=p,Q=ug(l,t,18)^Q,D=p^s,C=o,o=ug(l,t,41)^Q,Q=(p^D)+f|0,Q=o>>>0>(s=C+o|0)>>>0?Q+1|0:Q,o=s,y=i[E+48>>2],o=(D=i[(f=34784+(L=B<<3)|0)>>2])+o|0,Q=i[f+4>>2]+Q|0,Q=o>>>0>>0?Q+1|0:Q,o=(f=y^((k=i[E+40>>2])^y)&l)+o|0,Q=(((C=i[E+52>>2])^(u=i[E+44>>2]))&t^C)+Q|0,Q=o>>>0>>0?Q+1|0:Q,s=(a=o)+(o=i[E+56>>2])|0,Q=i[E+60>>2]+Q|0,Q=o>>>0>s>>>0?Q+1|0:Q,f=s+(D=i[E+24>>2])|0,o=Q,Q=Q+i[E+28>>2]|0,Q=f>>>0>>0?Q+1|0:Q,D=f,c=Q,i[E+24>>2]=f,i[E+28>>2]=Q,Q=ug(F=i[E>>2],f=i[E+4>>2],28),h=p,Q=ug(F,f,34)^Q,n=p^h,h=s+(ug(F,f,39)^Q)|0,Q=o+(p^n)|0,Q=s>>>0>h>>>0?Q+1|0:Q,s=(a=F&((n=i[E+16>>2])|(r=i[E+8>>2]))|n&r)+h|0,Q=(f&((h=i[E+20>>2])|(o=i[E+12>>2]))|o&h)+Q|0,s=Q=a>>>0>(e=s)>>>0?Q+1|0:Q,i[E+56>>2]=e,i[E+60>>2]=Q,Q=ug(D,c,14),a=p,d=ug(D,c,18)^Q,a^=p,w=n,Q=((t^u)&c^u)+C|0,Q=(n=(l^k)&D^k)>>>0>(y=n+y|0)>>>0?Q+1|0:Q,C=ug(D,c,41)^d,Q=(p^a)+Q|0,Q=C>>>0>(y=C+y|0)>>>0?Q+1|0:Q,y=(a=i[(n=d=(C=(1|B)<<3)+g|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=a>>>0>y>>>0?Q+1|0:Q,y=(n=i[(C=C+34784|0)>>2])+y|0,Q=i[C+4>>2]+Q|0,n=Q=n>>>0>y>>>0?Q+1|0:Q,Q=Q+h|0,h=y=w+(C=a=y)|0,C=Q=C>>>0>y>>>0?Q+1|0:Q,i[E+16>>2]=y,i[E+20>>2]=Q,y=E,Q=ug(e,s,28),E=p,G=ug(e,s,34)^Q,H=p^E,E=(Q=a)+(a=(r|F)&e|r&F)|0,Q=((o|f)&s|o&f)+n|0,Q=E>>>0>>0?Q+1|0:Q,n=ug(e,s,39)^G,Q=(p^H)+Q|0,G=E=n+E|0,E=Q=E>>>0>>0?Q+1|0:Q,i[y+48>>2]=G,i[y+52>>2]=Q,a=y,Q=ug(h,C,14),y=p,n=ug(h,C,18)^Q,H=p^y,w=r,Q=((t^c)&C^t)+u|0,Q=(r=(D^l)&h^l)>>>0>(y=r+k|0)>>>0?Q+1|0:Q,n=ug(h,C,41)^n,Q=(p^H)+Q|0,Q=n>>>0>(y=n+y|0)>>>0?Q+1|0:Q,y=(k=i[(r=U=(n=(2|B)<<3)+g|0)>>2])+y|0,Q=i[r+4>>2]+Q|0,Q=y>>>0>>0?Q+1|0:Q,y=(r=i[(n=n+34784|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=r>>>0>y>>>0?Q+1|0:Q,y=w+(n=r=y)|0,w=o,o=Q,Q=w+Q|0,n=Q=n>>>0>y>>>0?Q+1|0:Q,i[a+8>>2]=y,i[a+12>>2]=Q,Q=ug(G,E,28),k=p,u=ug(G,E,34)^Q,k^=p,Q=((f|s)&E|f&s)+o|0,Q=(r=(H=(e|F)&G|e&F)+r|0)>>>0>>0?Q+1|0:Q,o=r,r=ug(G,E,39)^u,Q=(p^k)+Q|0,k=o=o+r|0,o=Q=o>>>0>>0?Q+1|0:Q,i[a+40>>2]=k,i[a+44>>2]=Q,r=a,Q=ug(y,n,14),a=p,u=ug(y,n,18)^Q,H=p^a,w=F,Q=(c^(C^c)&n)+t|0,Q=(a=(F=D^(h^D)&y)+l|0)>>>0>>0?Q+1|0:Q,t=a,a=ug(y,n,41)^u,Q=(p^H)+Q|0,Q=a>>>0>(t=t+a|0)>>>0?Q+1|0:Q,t=(u=i[(l=F=(a=(3|B)<<3)+g|0)>>2])+t|0,Q=i[l+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=(l=i[(a=a+34784|0)>>2])+t|0,Q=i[a+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,l=t,t=w+(a=t)|0,w=f,f=Q,Q=w+Q|0,a=Q=a>>>0>t>>>0?Q+1|0:Q,i[r>>2]=t,i[r+4>>2]=Q,Q=ug(k,o,28),u=p,H=ug(k,o,34)^Q,u^=p,Q=((E|s)&o|E&s)+f|0,Q=(l=(v=(e|G)&k|e&G)+l|0)>>>0>>0?Q+1|0:Q,f=l,l=ug(k,o,39)^H,Q=(p^u)+Q|0,Q=(f=f+l|0)>>>0>>0?Q+1|0:Q,l=f,f=Q,i[r+32>>2]=l,i[r+36>>2]=Q,Q=ug(t,a,14),u=p,H=ug(t,a,18)^Q,u^=p,w=e,Q=c+(C^(C^n)&a)|0,Q=(e=D+(h^(y^h)&t)|0)>>>0>>0?Q+1|0:Q,c=ug(t,a,41)^H,Q=(p^u)+Q|0,Q=c>>>0>(D=c+e|0)>>>0?Q+1|0:Q,D=(u=i[(e=S=(c=(4|B)<<3)+g|0)>>2])+D|0,Q=i[e+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,D=(e=i[(c=c+34784|0)>>2])+D|0,Q=i[c+4>>2]+Q|0,c=s,s=Q=e>>>0>D>>>0?Q+1|0:Q,Q=c+Q|0,c=Q=(e=D)>>>0>(D=w+e|0)>>>0?Q+1|0:Q,i[r+56>>2]=D,i[r+60>>2]=Q,Q=ug(l,f,28),u=p,H=ug(l,f,34)^Q,u^=p,Q=((E|o)&f|E&o)+s|0,Q=(e=(v=(k|G)&l|k&G)+e|0)>>>0>>0?Q+1|0:Q,s=e,e=ug(l,f,39)^H,Q=(p^u)+Q|0,u=s=s+e|0,s=Q=e>>>0>s>>>0?Q+1|0:Q,i[r+24>>2]=u,i[r+28>>2]=Q,Q=ug(D,c,14),e=p,H=ug(D,c,18)^Q,v=p^e,w=G,Q=C+(n^(n^a)&c)|0,Q=(e=h+(y^(t^y)&D)|0)>>>0>>0?Q+1|0:Q,C=ug(D,c,41)^H,Q=(p^v)+Q|0,Q=C>>>0>(h=C+e|0)>>>0?Q+1|0:Q,h=(H=i[(e=G=(C=(5|B)<<3)+g|0)>>2])+h|0,Q=i[e+4>>2]+Q|0,Q=h>>>0>>0?Q+1|0:Q,h=(e=i[(C=C+34784|0)>>2])+h|0,Q=i[C+4>>2]+Q|0,Q=e>>>0>h>>>0?Q+1|0:Q,h=w+(C=e=h)|0,w=E,E=Q,Q=w+Q|0,C=Q=C>>>0>h>>>0?Q+1|0:Q,i[r+48>>2]=h,i[r+52>>2]=Q,Q=ug(u,s,28),H=p,v=ug(u,s,34)^Q,H^=p,Q=((o|f)&s|o&f)+E|0,Q=(e=(_=(l|k)&u|l&k)+e|0)>>>0<_>>>0?Q+1|0:Q,E=e,e=ug(u,s,39)^v,Q=(p^H)+Q|0,v=E=E+e|0,E=Q=E>>>0>>0?Q+1|0:Q,i[r+16>>2]=v,i[r+20>>2]=Q,Q=ug(h,C,14),e=p,H=ug(h,C,18)^Q,_=p^e,w=k,Q=n+(a^(a^c)&C)|0,Q=(e=y+(t^(t^D)&h)|0)>>>0>>0?Q+1|0:Q,n=ug(h,C,41)^H,Q=(p^_)+Q|0,Q=n>>>0>(y=n+e|0)>>>0?Q+1|0:Q,y=(k=i[(e=R=(n=(6|B)<<3)+g|0)>>2])+y|0,Q=i[e+4>>2]+Q|0,Q=y>>>0>>0?Q+1|0:Q,y=(e=i[(n=n+34784|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=e>>>0>y>>>0?Q+1|0:Q,y=w+(n=e=y)|0,w=o,o=Q,Q=w+Q|0,n=Q=n>>>0>y>>>0?Q+1|0:Q,i[r+40>>2]=y,i[r+44>>2]=Q,Q=ug(v,E,28),k=p,H=ug(v,E,34)^Q,k^=p,Q=((f|s)&E|f&s)+o|0,Q=(e=(_=(u|l)&v|u&l)+e|0)>>>0<_>>>0?Q+1|0:Q,o=e,e=ug(v,E,39)^H,Q=(p^k)+Q|0,_=o=o+e|0,o=Q=o>>>0>>0?Q+1|0:Q,i[r+8>>2]=_,i[r+12>>2]=Q,Q=ug(y,n,14),e=p,k=ug(y,n,18)^Q,H=p^e,w=l,Q=a+(c^(C^c)&n)|0,Q=(e=t+(D^(h^D)&y)|0)>>>0>>0?Q+1|0:Q,a=ug(y,n,41)^k,Q=(p^H)+Q|0,Q=a>>>0>(t=a+e|0)>>>0?Q+1|0:Q,t=(l=i[(e=k=(a=(7|B)<<3)+g|0)>>2])+t|0,Q=i[e+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=(e=i[(a=a+34784|0)>>2])+t|0,Q=i[a+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=w+(a=e=t)|0,w=f,f=Q,Q=w+Q|0,a=Q=a>>>0>t>>>0?Q+1|0:Q,i[r+32>>2]=t,i[r+36>>2]=Q,Q=ug(_,o,28),l=p,H=ug(_,o,34)^Q,l^=p,Q=((E|s)&o|E&s)+f|0,Q=(e=(w=(u|v)&_|u&v)+e|0)>>>0>>0?Q+1|0:Q,f=e,e=ug(_,o,39)^H,Q=(p^l)+Q|0,w=f=f+e|0,f=Q=e>>>0>f>>>0?Q+1|0:Q,i[r>>2]=w,i[r+4>>2]=Q,e=r,Q=ug(t,a,14),r=p,l=ug(t,a,18)^Q,H=p^r,Q=c+(C^(C^n)&a)|0,Q=(r=D+(h^(y^h)&t)|0)>>>0>>0?Q+1|0:Q,c=ug(t,a,41)^l,Q=(p^H)+Q|0,Q=c>>>0>(D=c+r|0)>>>0?Q+1|0:Q,D=(l=i[(r=H=(c=(8|B)<<3)+g|0)>>2])+D|0,Q=i[r+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,D=(r=i[(c=c+34784|0)>>2])+D|0,Q=i[c+4>>2]+Q|0,Q=r>>>0>D>>>0?Q+1|0:Q,l=D,r=s,s=Q,Q=r+Q|0,r=Q=(c=D)>>>0>(D=c+u|0)>>>0?Q+1|0:Q,i[e+24>>2]=D,i[e+28>>2]=Q,c=e,Q=ug(w,f,28),e=p,u=ug(w,f,34)^Q,Y=p^e,e=(Q=l)+(l=(_|v)&w|_&v)|0,Q=((E|o)&f|E&o)+s|0,Q=e>>>0>>0?Q+1|0:Q,s=e,e=ug(w,f,39)^u,Q=(p^Y)+Q|0,Y=s=s+e|0,s=Q=e>>>0>s>>>0?Q+1|0:Q,i[c+56>>2]=Y,i[c+60>>2]=Q,Q=ug(D,r,14),e=p,l=ug(D,r,18)^Q,u=p^e,Q=C+(n^(n^a)&r)|0,Q=(e=h+(y^(t^y)&D)|0)>>>0>>0?Q+1|0:Q,C=ug(D,r,41)^l,Q=(p^u)+Q|0,Q=C>>>0>(h=C+e|0)>>>0?Q+1|0:Q,h=(u=i[(e=l=(C=(9|B)<<3)+g|0)>>2])+h|0,Q=i[e+4>>2]+Q|0,Q=h>>>0>>0?Q+1|0:Q,h=(e=i[(C=C+34784|0)>>2])+h|0,Q=i[C+4>>2]+Q|0,Q=e>>>0>h>>>0?Q+1|0:Q,e=E,E=Q,Q=e+Q|0,e=Q=(C=h)>>>0>(h=C+v|0)>>>0?Q+1|0:Q,i[c+16>>2]=h,i[c+20>>2]=Q,Q=ug(Y,s,28),u=p,v=ug(Y,s,34)^Q,u^=p,Q=((o|f)&s|o&f)+E|0,Q=(C=(b=(w|_)&Y|w&_)+C|0)>>>0>>0?Q+1|0:Q,E=C,C=ug(Y,s,39)^v,Q=(p^u)+Q|0,b=E=E+C|0,E=Q=E>>>0>>0?Q+1|0:Q,i[c+48>>2]=b,i[c+52>>2]=Q,Q=ug(h,e,14),C=p,u=ug(h,e,18)^Q,v=p^C,Q=n+(a^(r^a)&e)|0,Q=(C=y+(t^(t^D)&h)|0)>>>0>>0?Q+1|0:Q,n=C,C=ug(h,e,41)^u,Q=(p^v)+Q|0,Q=C>>>0>(y=n+C|0)>>>0?Q+1|0:Q,y=(u=i[(n=v=(C=(10|B)<<3)+g|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=y>>>0>>0?Q+1|0:Q,y=(n=i[(C=C+34784|0)>>2])+y|0,Q=i[C+4>>2]+Q|0,Q=n>>>0>y>>>0?Q+1|0:Q,u=y,n=o,o=Q,Q=n+Q|0,n=Q=(C=y)>>>0>(y=C+_|0)>>>0?Q+1|0:Q,i[c+8>>2]=y,i[c+12>>2]=Q,C=c,Q=ug(b,E,28),c=p,_=ug(b,E,34)^Q,N=p^c,c=(Q=u)+(u=(w|Y)&b|w&Y)|0,Q=((f|s)&E|f&s)+o|0,Q=c>>>0>>0?Q+1|0:Q,o=c,c=ug(b,E,39)^_,Q=(p^N)+Q|0,c=Q=(o=o+c|0)>>>0>>0?Q+1|0:Q,i[C+40>>2]=o,i[C+44>>2]=Q,Q=ug(y,n,14),u=p,_=ug(y,n,18)^Q,N=p^u,m=w,Q=a+(r^(r^e)&n)|0,Q=(u=t+(D^(h^D)&y)|0)>>>0>>0?Q+1|0:Q,a=ug(y,n,41)^_,Q=(p^N)+Q|0,Q=a>>>0>(t=a+u|0)>>>0?Q+1|0:Q,t=(w=i[(u=(a=(11|B)<<3)+g|0)>>2])+t|0,Q=i[u+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=(_=i[(a=a+34784|0)>>2])+t|0,Q=i[a+4>>2]+Q|0,Q=t>>>0<_>>>0?Q+1|0:Q,w=t,_=f,f=Q,Q=_+Q|0,a=Q=(a=t)>>>0>(t=m+a|0)>>>0?Q+1|0:Q,i[C>>2]=t,i[C+4>>2]=Q,_=C,Q=ug(o,c,28),C=p,N=ug(o,c,34)^Q,M=p^C,C=(Q=w)+(w=(Y|b)&o|Y&b)|0,Q=((E|s)&c|E&s)+f|0,Q=C>>>0>>0?Q+1|0:Q,f=C,C=ug(o,c,39)^N,Q=(p^M)+Q|0,C=Q=C>>>0>(f=f+C|0)>>>0?Q+1|0:Q,i[_+32>>2]=f,i[_+36>>2]=Q,w=_,Q=ug(t,a,14),_=p,N=ug(t,a,18)^Q,M=p^_,m=Y,Q=r+(e^(n^e)&a)|0,Q=(_=D+(h^(y^h)&t)|0)>>>0>>0?Q+1|0:Q,r=ug(t,a,41)^N,Q=(p^M)+Q|0,Q=r>>>0>(D=r+_|0)>>>0?Q+1|0:Q,D=(N=i[(Y=_=(r=(12|B)<<3)+g|0)>>2])+D|0,Q=i[Y+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,D=(Y=i[(r=r+34784|0)>>2])+D|0,Q=i[r+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,Y=D,D=m+(r=D)|0,m=s,s=Q,Q=m+Q|0,N=D,D=Q=r>>>0>D>>>0?Q+1|0:Q,i[w+56>>2]=N,i[w+60>>2]=Q,r=w,Q=ug(f,C,28),w=p,M=ug(f,C,34)^Q,m=p^w,w=(Q=Y)+(Y=(o|b)&f|o&b)|0,Q=((E|c)&C|E&c)+s|0,Q=w>>>0>>0?Q+1|0:Q,s=w,w=ug(f,C,39)^M,Q=(p^m)+Q|0,Y=s=s+w|0,s=Q=s>>>0>>0?Q+1|0:Q,i[r+24>>2]=Y,i[r+28>>2]=Q,w=r,Q=ug(N,D,14),r=p,M=ug(N,D,18)^Q,m=p^r,P=b,Q=e+(n^(n^a)&D)|0,Q=(r=h+(y^(t^y)&N)|0)>>>0>>0?Q+1|0:Q,e=r,r=ug(N,D,41)^M,Q=(p^m)+Q|0,Q=r>>>0>(h=e+r|0)>>>0?Q+1|0:Q,r=(r=h)+(M=i[(h=(e=(13|B)<<3)+g|0)>>2])|0,Q=i[h+4>>2]+Q|0,Q=r>>>0>>0?Q+1|0:Q,r=(b=i[(e=e+34784|0)>>2])+r|0,Q=i[e+4>>2]+Q|0,Q=r>>>0>>0?Q+1|0:Q,b=r,e=r,m=E,E=Q,Q=m+Q|0,M=r=P+r|0,r=Q=r>>>0>>0?Q+1|0:Q,i[w+48>>2]=M,i[w+52>>2]=Q,e=w,Q=ug(Y,s,28),w=p,m=ug(Y,s,34)^Q,P=p^w,w=(Q=b)+(b=(o|f)&Y|o&f)|0,Q=((C|c)&s|C&c)+E|0,Q=w>>>0>>0?Q+1|0:Q,E=w,w=ug(Y,s,39)^m,Q=(p^P)+Q|0,b=E=E+w|0,E=Q=E>>>0>>0?Q+1|0:Q,i[e+16>>2]=b,i[e+20>>2]=Q,Q=ug(M,r,14),w=p,m=ug(M,r,18)^Q,P=p^w,Q=n+(a^(a^D)&r)|0,Q=(w=y+(t^(t^N)&M)|0)>>>0>>0?Q+1|0:Q,n=ug(M,r,41)^m,Q=(p^P)+Q|0,Q=n>>>0>(y=n+w|0)>>>0?Q+1|0:Q,n=(n=y)+(P=i[(y=(w=(14|B)<<3)+g|0)>>2])|0,Q=i[y+4>>2]+Q|0,Q=n>>>0

>>0?Q+1|0:Q,n=(m=i[(w=w+34784|0)>>2])+n|0,Q=i[w+4>>2]+Q|0,P=n,w=Q=n>>>0>>0?Q+1|0:Q,Q=c+Q|0,m=n=o+n|0,o=Q=n>>>0>>0?Q+1|0:Q,i[e+40>>2]=n,i[e+44>>2]=Q,n=e,Q=ug(b,E,28),c=p,e=ug(b,E,34)^Q,J=p^c,c=(Q=P)+(P=(f|Y)&b|f&Y)|0,Q=((C|s)&E|C&s)+w|0,Q=c>>>0

>>0?Q+1|0:Q,e=ug(b,E,39)^e,Q=(p^J)+Q|0,Q=e>>>0>(c=e+c|0)>>>0?Q+1|0:Q,e=c,c=Q,i[n+8>>2]=e,i[n+12>>2]=Q,Q=ug(m,o,14),n=p,P=ug(m,o,18)^Q,J=p^n,Q=a+(D^(r^D)&o)|0,Q=(w=t+(N^(N^M)&m)|0)>>>0>>0?Q+1|0:Q,D=ug(m,o,41)^P,Q=(p^J)+Q|0,Q=(o=D+w|0)>>>0>>0?Q+1|0:Q,o=(r=i[(a=D=(t=(15|B)<<3)+g|0)>>2])+o|0,Q=i[a+4>>2]+Q|0,Q=o>>>0>>0?Q+1|0:Q,o=(a=i[(t=t+34784|0)>>2])+o|0,Q=i[t+4>>2]+Q|0,Q=o>>>0>>0?Q+1|0:Q,t=f+(a=o)|0,o=Q,Q=C+Q|0,i[(n=I)+32>>2]=t,i[n+36>>2]=t>>>0>>0?Q+1|0:Q,Q=ug(e,c,28),f=p,C=ug(e,c,34)^Q,n=p^f,Q=((E|s)&c|E&s)+o|0,s=(t=(E=a)+(a=(Y|b)&e|Y&b)|0)+(E=ug(e,c,39)^C)|0,Q=(p^n)+(a>>>0>t>>>0?Q+1|0:Q)|0,i[(f=I)>>2]=s,i[f+4>>2]=E>>>0>s>>>0?Q+1|0:Q,64==(0|B)){for(;s=g=(B=x<<3)+A|0,B=(E=i[(Q=I+B|0)>>2])+i[s>>2]|0,Q=i[s+4>>2]+i[Q+4>>2]|0,i[s>>2]=B,i[s+4>>2]=B>>>0>>0?Q+1|0:Q,8!=(0|(x=x+1|0)););break}c=((B=B+16|0)<<3)+g|0,Y=s=i[y+4>>2],Q=s>>>6|0,s=((63&s)<<26|(b=i[y>>2])>>>6)^ug(b,s,19),Q^=p,s=(C=ug(b,Y,61)^s)+(E=w=i[l>>2])|0,Q=(f=i[l+4>>2])+(p^Q)|0,Q=E>>>0>s>>>0?Q+1|0:Q,s=(o=i[(E=g+L|0)>>2])+s|0,Q=i[E+4>>2]+Q|0,s=o>>>0>(C=s)>>>0?Q+1|0:Q,o=E=i[d+4>>2],Q=E>>>7|0,E=((127&E)<<25|(t=i[d>>2])>>>7)^ug(t,E,1),Q^=p,a=C,C=ug(t,o,8)^E,Q=(p^Q)+s|0,n=E=a+C|0,E=Q=E>>>0>>0?Q+1|0:Q,i[c>>2]=n,i[c+4>>2]=Q,Q=i[(c=d)+76>>2]+o|0,C=t,o=(t=i[c+72>>2])>>>0>(C=s=C+t|0)>>>0?Q+1|0:Q,s=t=i[D+4>>2],Q=t>>>6|0,t=((63&t)<<26|(e=i[D>>2])>>>6)^ug(e,t,19),Q^=p,a=C,C=ug(e,s,61)^t,Q=(p^Q)+o|0,o=C>>>0>(a=t=a+C|0)>>>0?Q+1|0:Q,t=C=i[c+12>>2],Q=C>>>7|0,C=((127&C)<<25|(r=i[c+8>>2])>>>7)^ug(r,C,1),Q^=p,d=a,a=ug(r,t,8)^C,Q=(p^Q)+o|0,Q=(C=d+a|0)>>>0>>0?Q+1|0:Q,a=C,o=Q,i[c+128>>2]=C,i[c+132>>2]=Q,c=U,C=t,Q=ug(n,E,19),U=p,t=Q,Q=E>>>6|0,E=(E=ug(n,E,61)^t^((63&E)<<26|n>>>6))+(n=d=i[u>>2])|0,Q=(t=i[u+4>>2])+(p^Q^U)|0,Q=E>>>0>>0?Q+1|0:Q,n=E,Q=Q+C|0,r=E=E+r|0,E=E>>>0>>0?Q+1|0:Q,n=C=i[F+4>>2],Q=C>>>7|0,C=((127&C)<<25|(U=i[F>>2])>>>7)^ug(U,C,1),Q^=p,m=r,r=ug(U,n,8)^C,Q=(p^Q)+E|0,Q=(C=m+r|0)>>>0>>0?Q+1|0:Q,r=C,E=Q,i[c+128>>2]=C,i[c+132>>2]=Q,c=(Q=U)+(U=i[(C=F)+72>>2])|0,Q=i[C+76>>2]+n|0,n=Q=c>>>0>>0?Q+1|0:Q,Q=ug(a,o,19),U=p,F=c,c=Q,Q=o>>>6|0,c=ug(a,o,61)^c^((63&o)<<26|a>>>6),Q=(p^Q^U)+n|0,U=o=F+c|0,o=o>>>0>>0?Q+1|0:Q,c=n=i[C+12>>2],Q=n>>>7|0,n=((127&n)<<25|(a=i[C+8>>2])>>>7)^ug(a,n,1),Q^=p,F=ug(a,c,8)^n,Q=(p^Q)+o|0,Q=(n=F+U|0)>>>0>>0?Q+1|0:Q,F=n,o=Q,i[C+128>>2]=n,i[C+132>>2]=Q,C=S,n=c,Q=ug(r,E,19),S=p,m=a,a=Q,Q=E>>>6|0,E=(E=ug(r,E,61)^a^((63&E)<<26|r>>>6))+(a=U=i[h>>2])|0,Q=(c=i[h+4>>2])+(p^Q^S)|0,Q=E>>>0>>0?Q+1|0:Q,a=E,Q=Q+n|0,S=E=m+E|0,E=E>>>0>>0?Q+1|0:Q,a=n=i[G+4>>2],Q=n>>>7|0,n=((127&n)<<25|(r=i[G>>2])>>>7)^ug(r,n,1),Q^=p,m=S,S=ug(r,a,8)^n,Q=(p^Q)+E|0,Q=(n=m+S|0)>>>0>>0?Q+1|0:Q,S=n,E=Q,i[C+128>>2]=n,i[C+132>>2]=Q,C=(Q=r)+(r=i[(n=G)+72>>2])|0,Q=i[n+76>>2]+a|0,a=Q=C>>>0>>0?Q+1|0:Q,Q=ug(F,o,19),r=p,G=C,m=Q,Q=(C=o)>>>6|0,C=m^((63&C)<<26|F>>>6)^ug(F,C,61),Q=(p^Q^r)+a|0,o=C>>>0>(r=o=G+C|0)>>>0?Q+1|0:Q,Q=(C=a=i[n+12>>2])>>>7|0,a=((127&C)<<25|(G=i[n+8>>2])>>>7)^ug(G,C,1),Q^=p,F=r,r=ug(G,C,8)^a,Q=(p^Q)+o|0,F=a=F+r|0,o=Q=r>>>0>a>>>0?Q+1|0:Q,i[n+128>>2]=a,i[n+132>>2]=Q,n=R,a=C,Q=ug(S,E,19),R=p,C=Q,Q=E>>>6|0,C=ug(S,E,61)^C^((63&E)<<26|S>>>6),Q=(p^Q^R)+s|0,Q=(E=C+e|0)>>>0>>0?Q+1|0:Q,C=E,Q=Q+a|0,G=E=E+G|0,E=E>>>0>>0?Q+1|0:Q,Q=(C=r=i[k+4>>2])>>>7|0,r=((127&C)<<25|(a=i[k>>2])>>>7)^ug(a,C,1),Q^=p,S=G,G=ug(a,C,8)^r,Q=(p^Q)+E|0,E=Q=(r=S+G|0)>>>0>>0?Q+1|0:Q,i[n+128>>2]=r,i[n+132>>2]=Q,Q=i[(n=k)+76>>2]+C|0,a=(C=a=(G=i[n+72>>2])+a|0)>>>0>>0?Q+1|0:Q,Q=ug(F,o,19),G=p,S=C,k=Q,Q=(C=o)>>>6|0,C=k^((63&C)<<26|F>>>6)^ug(F,C,61),Q=(p^Q^G)+a|0,F=o=S+C|0,o=C>>>0>o>>>0?Q+1|0:Q,Q=(C=a=i[n+12>>2])>>>7|0,a=((127&C)<<25|(G=i[n+8>>2])>>>7)^ug(G,C,1),Q^=p,S=F,F=ug(G,C,8)^a,Q=(p^Q)+o|0,Q=(a=S+F|0)>>>0>>0?Q+1|0:Q,F=a,o=Q,i[n+128>>2]=a,i[n+132>>2]=Q,a=C,Q=ug(r,E,19),k=p,C=Q,Q=E>>>6|0,E=(E=ug(r,E,61)^C^((63&E)<<26|r>>>6))+(C=i[(n=H)+72>>2])|0,Q=i[n+76>>2]+(p^Q^k)|0,Q=E>>>0>>0?Q+1|0:Q,C=E,Q=Q+a|0,C=Q=(E=E+G|0)>>>0>>0?Q+1|0:Q,Q=ug(w,f,1),a=p,G=E,r=Q,Q=(E=f)>>>7|0,r=r^((127&E)<<25|w>>>7)^ug(w,E,8),Q=(p^Q^a)+C|0,a=E=G+r|0,E=Q=E>>>0>>0?Q+1|0:Q,i[n+128>>2]=a,i[n+132>>2]=Q,Q=i[(C=l)+76>>2]+f|0,f=n=(r=i[C+72>>2])+w|0,n=n>>>0>>0?Q+1|0:Q,Q=ug(F,o,19),r=p,w=f,f=Q,Q=o>>>6|0,f=ug(F,o,61)^f^((63&o)<<26|F>>>6),Q=(p^Q^r)+n|0,o=(r=o=w+f|0)>>>0>>0?Q+1|0:Q,f=n=i[C+12>>2],Q=n>>>7|0,n=((127&n)<<25|(F=i[C+8>>2])>>>7)^ug(F,n,1),Q^=p,w=r,r=ug(F,f,8)^n,Q=(p^Q)+o|0,Q=(n=w+r|0)>>>0>>0?Q+1|0:Q,r=n,o=Q,i[C+128>>2]=n,i[C+132>>2]=Q,n=f,Q=ug(a,E,19),G=p,C=Q,Q=E>>>6|0,E=(E=ug(a,E,61)^C^((63&E)<<26|a>>>6))+(f=i[(C=v)+72>>2])|0,Q=i[C+76>>2]+(p^Q^G)|0,Q=E>>>0>>0?Q+1|0:Q,f=E,Q=Q+n|0,f=Q=(E=E+F|0)>>>0>>0?Q+1|0:Q,Q=ug(d,t,1),n=p,w=E,a=Q,Q=(E=t)>>>7|0,a=a^((127&E)<<25|d>>>7)^ug(d,E,8),Q=(p^Q^n)+f|0,n=E=w+a|0,E=Q=E>>>0>>0?Q+1|0:Q,i[C+128>>2]=n,i[C+132>>2]=Q,f=(a=i[(C=u)+72>>2])+d|0,Q=i[C+76>>2]+t|0,t=Q=a>>>0>f>>>0?Q+1|0:Q,Q=ug(r,o,19),a=p,w=f,f=Q,Q=o>>>6|0,f=ug(r,o,61)^f^((63&o)<<26|r>>>6),Q=(p^Q^a)+t|0,o=(a=o=w+f|0)>>>0>>0?Q+1|0:Q,f=t=i[C+12>>2],Q=t>>>7|0,t=((127&t)<<25|(r=i[C+8>>2])>>>7)^ug(r,t,1),Q^=p,w=a,a=ug(r,f,8)^t,Q=(p^Q)+o|0,Q=a>>>0>(t=w+a|0)>>>0?Q+1|0:Q,a=t,o=Q,i[C+128>>2]=a,i[C+132>>2]=Q,C=f,Q=ug(n,E,19),d=p,f=Q,Q=E>>>6|0,E=(E=ug(n,E,61)^f^((63&E)<<26|n>>>6))+(f=i[(t=_)+72>>2])|0,Q=i[t+76>>2]+(p^Q^d)|0,Q=E>>>0>>0?Q+1|0:Q,f=E,Q=Q+C|0,f=Q=(E=E+r|0)>>>0>>0?Q+1|0:Q,Q=ug(U,c,1),C=p,r=E,n=Q,Q=(E=c)>>>7|0,n=n^((127&E)<<25|U>>>7)^ug(U,E,8),Q=(p^Q^C)+f|0,C=E=r+n|0,E=Q=E>>>0>>0?Q+1|0:Q,i[t+128>>2]=C,i[t+132>>2]=Q,t=(n=i[(f=h)+72>>2])+U|0,Q=i[f+76>>2]+c|0,c=Q=n>>>0>t>>>0?Q+1|0:Q,Q=ug(a,o,19),n=p,r=t,t=Q,Q=o>>>6|0,t=ug(a,o,61)^t^((63&o)<<26|a>>>6),Q=(p^Q^n)+c|0,o=(n=o=r+t|0)>>>0>>0?Q+1|0:Q,c=t=i[f+12>>2],Q=t>>>7|0,t=((127&t)<<25|(h=i[f+8>>2])>>>7)^ug(h,t,1),Q^=p,t=ug(h,c,8)^t,Q=(p^Q)+o|0,Q=t>>>0>(h=t+n|0)>>>0?Q+1|0:Q,t=h,o=Q,i[f+128>>2]=t,i[f+132>>2]=Q,h=(c=i[(f=y)+72>>2])+b|0,Q=i[f+76>>2]+Y|0,y=Q=c>>>0>h>>>0?Q+1|0:Q,Q=ug(C,E,19),c=p,a=h,n=Q,Q=E>>>6|0,h=ug(C,E,61)^n^((63&E)<<26|C>>>6),Q=(p^Q^c)+y|0,h=Q=(E=a+h|0)>>>0>>0?Q+1|0:Q,Q=ug(e,s,1),y=p,C=E,a=Q,Q=(E=s)>>>7|0,E=C+(c=a^((127&E)<<25|e>>>7)^ug(e,E,8))|0,Q=(p^Q^y)+h|0,i[f+128>>2]=E,i[f+132>>2]=E>>>0>>0?Q+1|0:Q,Q=i[(E=D)+76>>2]+s|0,s=f=(h=i[E+72>>2])+e|0,f=f>>>0>>0?Q+1|0:Q,Q=ug(t,o,19),h=p,C=Q,Q=o>>>6|0,o=ug(t,o,61)^C^((63&o)<<26|t>>>6),Q=(p^Q^h)+f|0,s=o>>>0>(y=s=o+s|0)>>>0?Q+1|0:Q,D=((127&(f=h=i[E+12>>2]))<<25|(o=i[E+8>>2])>>>7)^ug(o,f,1),Q=p^f>>>7,D=(h=ug(o,f,8)^D)+y|0,Q=(p^Q)+s|0,i[E+128>>2]=D,i[E+132>>2]=h>>>0>D>>>0?Q+1|0:Q}}function G(A){var I,g,B,Q,E,i,a,r,o,e,t,f,c,y,s,w,h,D,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0,EA=0;y=HI(A),s=n[A+2|0]|n[A+3|0]<<8|n[A+4|0]<<16|n[A+5|0]<<24,w=HI(A+5|0),h=p,IA=n[A+7|0]|n[A+8|0]<<8|n[A+9|0]<<16|n[A+10|0]<<24,gA=n[A+10|0]|n[A+11|0]<<8|n[A+12|0]<<16|n[A+13|0]<<24,D=HI(A+13|0),BA=p,M=n[A+15|0]|n[A+16|0]<<8|n[A+17|0]<<16|n[A+18|0]<<24,Z=HI(A+18|0),d=p,m=HI(A+21|0),_=n[A+23|0]|n[A+24|0]<<8|n[A+25|0]<<16|n[A+26|0]<<24,k=HI(A+26|0),l=p,AA=n[A+28|0]|n[A+29|0]<<8|n[A+30|0]<<16|n[A+31|0]<<24,q=n[A+31|0]|n[A+32|0]<<8|n[A+33|0]<<16|n[A+34|0]<<24,T=HI(A+34|0),W=p,P=n[A+36|0]|n[A+37|0]<<8|n[A+38|0]<<16|n[A+39|0]<<24,O=HI(A+39|0),J=p,Y=HI(A+42|0),G=n[A+44|0]|n[A+45|0]<<8|n[A+46|0]<<16|n[A+47|0]<<24,F=HI(A+47|0),u=2097151&((3&l)<<30|k>>>2),k=eg(I=2097151&((3&(H=p))<<30|F>>>2),0,136657,0)+u|0,l=p,l=u>>>0>k>>>0?l+1|0:l,F=eg(g=(n[A+49|0]|n[A+50|0]<<8|n[A+51|0]<<16|n[A+52|0]<<24)>>>7&2097151,0,-997805,-1),u=p+l|0,u=F>>>0>(k=F+k|0)>>>0?u+1|0:u,l=eg(B=(n[A+52|0]|n[A+53|0]<<8|n[A+54|0]<<16|n[A+55|0]<<24)>>>4&2097151,0,654183,0),F=p+u|0,F=l>>>0>(k=l+k|0)>>>0?F+1|0:F,u=k,l=HI(A+55|0),k=u+(l=eg(Q=2097151&((1&(k=p))<<31|l>>>1),0,470296,0))|0,u=p+F|0,u=l>>>0>k>>>0?u+1|0:u,F=eg(E=(n[A+57|0]|n[A+58|0]<<8|n[A+59|0]<<16|n[A+60|0]<<24)>>>6&2097151,0,666643,0),l=p+u|0,U=l=F>>>0>(k=F+k|0)>>>0?l+1|0:l,F=l,b=G>>>5&2097151,l=2097151&Y,G=eg(i=(n[A+60|0]|n[A+61|0]<<8|n[A+62|0]<<16|n[A+63|0]<<24)>>>3|0,0,-683901,-1)+l|0,u=p,Y=G,S=u=l>>>0>G>>>0?u+1|0:u,N=(u=G)- -1048576|0,L=G=S-((u>>>0<4293918720)-1|0)|0,u=G>>21,r=b=(G=(2097151&G)<<11|N>>>21)+b|0,V=l=G>>>0>b>>>0?u+1|0:u,u=eg(b,l,-683901,-1),l=p+F|0,j=H=u+k|0,v=u>>>0>H>>>0?l+1|0:l,F=_>>>5&2097151,H=eg(I,0,-997805,-1)+F|0,u=p,u=F>>>0>H>>>0?u+1|0:u,l=eg(g,0,654183,0),F=p+u|0,F=l>>>0>(H=l+H|0)>>>0?F+1|0:F,u=eg(B,0,470296,0),l=p+F|0,l=u>>>0>(H=u+H|0)>>>0?l+1|0:l,F=eg(Q,0,666643,0),u=p+l|0,F=F>>>0>(_=H=F+H|0)>>>0?u+1|0:u,u=2097151&m,H=eg(I,0,654183,0)+u|0,l=p,l=u>>>0>H>>>0?l+1|0:l,G=(u=H)+(H=eg(g,0,470296,0))|0,u=p+l|0,u=G>>>0>>0?u+1|0:u,H=eg(B,0,666643,0),l=p+u|0,b=G=H+G|0,G=l=G>>>0>>0?l+1|0:l,z=(u=b)- -1048576|0,R=H=l-((u>>>0<4293918720)-1|0)|0,F=(u=H>>>21|0)+F|0,m=F=(l=(2097151&H)<<11|z>>>21)>>>0>(_=H=l+_|0)>>>0?F+1|0:F,K=(u=_)- -1048576|0,f=k- -1048576|0,U=U-((k>>>0<4293918720)-1|0)|0,l=(u=(F=x=F-((u>>>0<4293918720)-1|0)|0)>>21)+v|0,U=(l=(k=(2097151&F)<<11|K>>>21)>>>0>(x=k+j|0)>>>0?l+1|0:l)-(((u=-2097152&f)>>>0>(k=x)>>>0)+(H=U)|0)|0,QA=(u=k-u|0)-(l=-2097152&(c=u- -1048576|0))|0,CA=U-((u>>>0>>0)+(k=U-((u>>>0<4293918720)-1|0)|0)|0)|0,l=eg(r,V,136657,0)+_|0,u=m+p|0,u=l>>>0<_>>>0?u+1|0:u,$=(_=l)-(l=-2097152&K)|0,j=u-((l>>>0>_>>>0)+F|0)|0,U=Y-(u=-2097152&N)|0,v=S-((u>>>0>Y>>>0)+L|0)|0,u=2097151&((7&J)<<29|O>>>3),F=eg(i,0,136657,0)+u|0,l=p,l=u>>>0>F>>>0?l+1|0:l,_=(u=F)+(F=eg(E,0,-683901,-1))|0,u=p+l|0,Y=_,_=F>>>0>_>>>0?u+1|0:u,u=eg(Q,0,-683901,-1),l=p,F=u,l=(u=P>>>6&2097151)>>>0>(F=F+u|0)>>>0?l+1|0:l,m=(u=eg(i,0,-997805,-1))+F|0,F=p+l|0,F=u>>>0>m>>>0?F+1|0:F,l=eg(E,0,136657,0),u=p+F|0,K=l=(N=u=l>>>0>(m=l+m|0)>>>0?u+1|0:u)-(((u=m)>>>0<4293918720)-1|0)|0,u=(2097151&l)<<11|(O=u- -1048576|0)>>>21,l=(l>>21)+_|0,S=l=u>>>0>(Y=u+Y|0)>>>0?l+1|0:l,x=(u=Y)- -1048576|0,L=l=l-((u>>>0<4293918720)-1|0)|0,u=(F=l>>21)+v|0,o=_=(l=(2097151&l)<<11|x>>>21)+U|0,X=u=l>>>0>_>>>0?u+1|0:u,l=eg(_,u,-683901,-1),u=p+j|0,EA=F=l+$|0,P=l>>>0>F>>>0?u+1|0:u,v=b,u=2097151&((7&d)<<29|Z>>>3),F=eg(I,0,470296,0)+u|0,l=p,l=u>>>0>F>>>0?l+1|0:l,u=eg(g,0,666643,0),l=p+l|0,U=F=u+F|0,F=u>>>0>F>>>0?l+1|0:l,_=M>>>6&2097151,b=eg(I,0,666643,0)+_|0,u=p,d=_=(M=u=_>>>0>b>>>0?u+1|0:u)-(((u=b)>>>0<4293918720)-1|0)|0,l=(l=_>>>21|0)+F|0,J=l=(u=(2097151&_)<<11|($=u- -1048576|0)>>>21)>>>0>(_=u+U|0)>>>0?l+1|0:l,Z=l-(((u=_)>>>0<4293918720)-1|0)|0,j=u- -1048576|0,a=Y-(u=-2097152&x)|0,e=F=S-((u>>>0>Y>>>0)+L|0)|0,u=((U=Z)>>>21|0)+G|0,u=(Y=(2097151&U)<<11|j>>>21)>>>0>(v=Y+v|0)>>>0?u+1|0:u,v=(G=eg(r,V,-997805,-1))+((Y=v)-(l=-2097152&z)|0)|0,l=p+(u-((8191&R)+(l>>>0>Y>>>0)|0)|0)|0,l=G>>>0>v>>>0?l+1|0:l,u=eg(o,X,136657,0),l=p+l|0,l=u>>>0>(G=u+v|0)>>>0?l+1|0:l,F=eg(a,F,-683901,-1),u=p+l|0,S=u=F>>>0>(G=F+G|0)>>>0?u+1|0:u,x=(u=G)- -1048576|0,L=F=S-((u>>>0<4293918720)-1|0)|0,l=(u=F>>21)+P|0,v=l=(F=(2097151&F)<<11|x>>>21)>>>0>(Y=F+EA|0)>>>0?l+1|0:l,R=(u=F=Y)- -1048576|0,u=(u=(Y=P=l-((u>>>0<4293918720)-1|0)|0)>>21)+CA|0,QA=P=(l=(2097151&Y)<<11|R>>>21)+QA|0,P=l>>>0>P>>>0?u+1|0:u,CA=F-(u=-2097152&R)|0,EA=v-((u>>>0>F>>>0)+Y|0)|0,Z=G-(u=-2097152&x)|0,z=S-((u>>>0>G>>>0)+L|0)|0,u=eg(r,V,654183,0),F=p+(J-((8191&U)+((l=-2097152&j)>>>0>_>>>0)|0)|0)|0,F=u>>>0>(G=u+(_-l|0)|0)>>>0?F+1|0:F,l=eg(o,X,-997805,-1),u=p+F|0,u=l>>>0>(G=l+G|0)>>>0?u+1|0:u,F=eg(a,e,136657,0),l=p+u|0,x=G=F+G|0,Y=F>>>0>G>>>0?l+1|0:l,R=m-(u=-2097152&O)|0,J=N-((u>>>0>m>>>0)+K|0)|0,l=2097151&((1&W)<<31|T>>>1),G=eg(B,0,-683901,-1)+l|0,u=p,u=l>>>0>G>>>0?u+1|0:u,l=eg(Q,0,136657,0),u=p+u|0,u=l>>>0>(F=l+G|0)>>>0?u+1|0:u,G=(l=F)+(F=eg(i,0,654183,0))|0,l=p+u|0,l=F>>>0>G>>>0?l+1|0:l,u=eg(E,0,-997805,-1),l=p+l|0,m=F=u+G|0,G=u>>>0>F>>>0?l+1|0:l,u=eg(g,0,-683901,-1),F=p,l=u,F=(u=q>>>4&2097151)>>>0>(l=l+u|0)>>>0?F+1|0:F,_=(u=l)+(l=eg(B,0,136657,0))|0,u=p+F|0,u=l>>>0>_>>>0?u+1|0:u,F=eg(Q,0,-997805,-1),l=p+u|0,l=F>>>0>(_=F+_|0)>>>0?l+1|0:l,F=eg(i,0,470296,0),u=p+l|0,u=F>>>0>(_=F+_|0)>>>0?u+1|0:u,F=eg(E,0,654183,0),l=p+u|0,S=l=F>>>0>(_=F+_|0)>>>0?l+1|0:l,K=(u=_)- -1048576|0,L=F=l-((u>>>0<4293918720)-1|0)|0,u=(u=F>>21)+G|0,G=F=(l=(2097151&F)<<11|K>>>21)+m|0,v=u=l>>>0>F>>>0?u+1|0:u,U=(u=F)- -1048576|0,m=F=v-((u>>>0<4293918720)-1|0)|0,l=(u=F>>21)+J|0,t=N=(F=(2097151&F)<<11|U>>>21)+R|0,q=l=F>>>0>N>>>0?l+1|0:l,u=eg(N,l,-683901,-1),F=p+Y|0,J=l=u+x|0,Y=u>>>0>l>>>0?F+1|0:F,T=G-(u=-2097152&U)|0,W=m=v-((u>>>0>G>>>0)+m|0)|0,F=(u=eg(r,V,470296,0))+(b-(l=-2097152&$)|0)|0,l=p+(M-((2047&d)+(l>>>0>b>>>0)|0)|0)|0,l=u>>>0>F>>>0?l+1|0:l,u=eg(o,X,654183,0),l=p+l|0,l=u>>>0>(F=u+F|0)>>>0?l+1|0:l,G=(u=eg(a,e,-997805,-1))+F|0,F=p+l|0,F=u>>>0>G>>>0?F+1|0:F,l=eg(N,q,136657,0),u=p+F|0,u=l>>>0>(G=l+G|0)>>>0?u+1|0:u,F=eg(T,m,-683901,-1),l=p+u|0,v=l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,d=(u=G)- -1048576|0,m=F=l-((u>>>0<4293918720)-1|0)|0,u=(u=F>>21)+Y|0,Y=u=(l=(2097151&F)<<11|d>>>21)>>>0>(F=l+J|0)>>>0?u+1|0:u,U=(u=F)- -1048576|0,l=(u=(b=J=Y-((u>>>0<4293918720)-1|0)|0)>>21)+z|0,Z=M=(J=(2097151&b)<<11|U>>>21)+Z|0,J=M>>>0>>0?l+1|0:l,z=F-(u=-2097152&U)|0,O=Y-((u>>>0>F>>>0)+b|0)|0,x=G-(u=-2097152&d)|0,N=v-((u>>>0>G>>>0)+m|0)|0,l=2097151&((1&BA)<<31|D>>>1),G=eg(r,V,666643,0)+l|0,u=p,u=l>>>0>G>>>0?u+1|0:u,F=eg(o,X,470296,0),l=p+u|0,l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,F=eg(a,e,654183,0),u=p+l|0,u=F>>>0>(G=F+G|0)>>>0?u+1|0:u,l=eg(t,q,-997805,-1),F=p+u|0,F=l>>>0>(G=l+G|0)>>>0?F+1|0:F,u=eg(T,W,136657,0),l=p+F|0,m=G=u+G|0,b=u>>>0>G>>>0?l+1|0:l,Y=_-(u=-2097152&K)|0,_=S-((u>>>0>_>>>0)+L|0)|0,u=eg(I,0,-683901,-1),l=p,F=u,l=(u=AA>>>7&2097151)>>>0>(F=F+u|0)>>>0?l+1|0:l,G=(u=eg(g,0,136657,0))+F|0,F=p+l|0,F=u>>>0>G>>>0?F+1|0:F,l=eg(B,0,-997805,-1),u=p+F|0,u=l>>>0>(G=l+G|0)>>>0?u+1|0:u,F=eg(Q,0,654183,0),l=p+u|0,l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,F=eg(i,0,666643,0),u=p+l|0,u=F>>>0>(G=F+G|0)>>>0?u+1|0:u,F=eg(E,0,470296,0),l=p+u|0,u=l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,l=H>>21,G=(H=(2097151&H)<<11|f>>>21)+(F=G)|0,F=u+l|0,L=F=G>>>0>>0?F+1|0:F,S=(u=G)- -1048576|0,v=F=F-((u>>>0<4293918720)-1|0)|0,u=(l=F>>21)+_|0,V=H=(F=(2097151&F)<<11|S>>>21)+Y|0,R=u=F>>>0>H>>>0?u+1|0:u,u=eg(H,u,-683901,-1),l=p+b|0,b=F=u+m|0,H=u>>>0>F>>>0?l+1|0:l,u=eg(o,X,666643,0),F=p,l=u,F=(u=gA>>>4&2097151)>>>0>(l=l+u|0)>>>0?F+1|0:F,_=(u=l)+(l=eg(a,e,470296,0))|0,u=p+F|0,u=l>>>0>_>>>0?u+1|0:u,F=eg(t,q,654183,0),l=p+u|0,l=F>>>0>(_=F+_|0)>>>0?l+1|0:l,u=eg(T,W,-997805,-1),l=p+l|0,l=u>>>0>(F=u+_|0)>>>0?l+1|0:l,_=(u=F)+(F=eg(V,R,136657,0))|0,u=p+l|0,m=u=F>>>0>_>>>0?u+1|0:u,M=(u=_)- -1048576|0,Y=F=m-((u>>>0<4293918720)-1|0)|0,u=(l=F>>21)+H|0,F=u=(F=(2097151&F)<<11|M>>>21)>>>0>(H=b=F+b|0)>>>0?u+1|0:u,d=(u=H)- -1048576|0,u=(l=(b=U=F-((u>>>0<4293918720)-1|0)|0)>>21)+N|0,$=K=(U=(2097151&b)<<11|d>>>21)+x|0,U=U>>>0>K>>>0?u+1|0:u,u=G-(l=-2097152&S)|0,G=L-((l>>>0>G>>>0)+v|0)|0,v=u,u=(u=k>>21)+G|0,S=u=(l=(2097151&k)<<11|c>>>21)>>>0>(G=k=v+l|0)>>>0?u+1|0:u,K=(u=G)- -1048576|0,L=k=S-((u>>>0<4293918720)-1|0)|0,N=u=k>>21,u=eg(X=(2097151&k)<<11|K>>>21,u,-683901,-1),l=p+F|0,l=u>>>0>(k=u+H|0)>>>0?l+1|0:l,j=(F=k)-(u=-2097152&d)|0,x=l-((u>>>0>F>>>0)+b|0)|0,l=eg(X,N,136657,0)+_|0,u=m+p|0,u=l>>>0<_>>>0?u+1|0:u,AA=(F=l)-(l=-2097152&M)|0,M=u-((l>>>0>F>>>0)+Y|0)|0,u=eg(a,e,666643,0),l=p,F=u,l=(u=IA>>>7&2097151)>>>0>(F=F+u|0)>>>0?l+1|0:l,k=(u=eg(t,q,470296,0))+F|0,F=p+l|0,F=u>>>0>k>>>0?F+1|0:F,l=eg(T,W,654183,0),u=p+F|0,u=l>>>0>(k=l+k|0)>>>0?u+1|0:u,l=eg(V,R,-997805,-1),u=p+u|0,Y=F=l+k|0,F=l>>>0>F>>>0?u+1|0:u,u=2097151&((3&h)<<30|w>>>2),k=eg(t,q,666643,0)+u|0,l=p,l=u>>>0>k>>>0?l+1|0:l,u=eg(T,W,470296,0),l=p+l|0,l=u>>>0>(k=u+k|0)>>>0?l+1|0:l,H=(u=k)+(k=eg(V,R,654183,0))|0,u=p+l|0,b=u=k>>>0>H>>>0?u+1|0:u,d=(u=k=H)- -1048576|0,u=(l=(_=H=b-((u>>>0<4293918720)-1|0)|0)>>21)+F|0,m=Y=(H=(2097151&_)<<11|d>>>21)+Y|0,F=u=H>>>0>Y>>>0?u+1|0:u,Y=(u=Y)- -1048576|0,u=(l=(H=v=F-((u>>>0<4293918720)-1|0)|0)>>21)+M|0,IA=q=(v=(2097151&H)<<11|Y>>>21)+AA|0,v=v>>>0>q>>>0?u+1|0:u,u=eg(X,N,-997805,-1),F=p+F|0,F=u>>>0>(l=u+m|0)>>>0?F+1|0:F,gA=l-(u=-2097152&Y)|0,BA=F-((u>>>0>l>>>0)+H|0)|0,u=eg(X,N,654183,0)+k|0,l=b+p|0,l=u>>>0>>0?l+1|0:l,AA=(F=u)-(u=-2097152&d)|0,q=l-((u>>>0>F>>>0)+_|0)|0,u=eg(T,W,666643,0),F=p,l=u,F=(u=s>>>5&2097151)>>>0>(l=l+u|0)>>>0?F+1|0:F,k=(u=l)+(l=eg(V,R,470296,0))|0,u=p+F|0,_=k,F=l>>>0>k>>>0?u+1|0:u,l=2097151&y,k=eg(V,R,666643,0)+l|0,u=p,H=k,Y=k=(m=u=l>>>0>k>>>0?u+1|0:u)-(((u=k)>>>0<4293918720)-1|0)|0,F=(l=k>>21)+F|0,b=F=(u=(2097151&k)<<11|(M=u- -1048576|0)>>>21)>>>0>(k=u+_|0)>>>0?F+1|0:F,d=(u=k)- -1048576|0,_=F=F-((u>>>0<4293918720)-1|0)|0,u=(l=F>>21)+q|0,F=u=(F=(2097151&F)<<11|d>>>21)>>>0>(R=F+AA|0)>>>0?u+1|0:u,u=eg(X,N,470296,0)+k|0,l=b+p|0,_=(l=u>>>0>>0?l+1|0:l)-(((k=-2097152&d)>>>0>(b=u)>>>0)+_|0)|0,b=u=u-k|0,k=(l=eg(X,N,666643,0))+(H-(u=-2097152&M)|0)|0,u=p+(m-((u>>>0>H>>>0)+Y|0)|0)|0,H=k,l=(l=(u=l>>>0>k>>>0?u+1|0:u)>>21)+_|0,W=k=b+(u=(2097151&u)<<11|k>>>21)|0,F=(u=(l=u>>>0>k>>>0?l+1|0:l)>>21)+F|0,_=k=(l=(2097151&l)<<11|k>>>21)+R|0,l=(F=l>>>0>(u=k)>>>0?F+1|0:F)>>21,F=(2097151&F)<<11|u>>>21,u=l+BA|0,Y=k=F+gA|0,F=(u=F>>>0>(l=k)>>>0?u+1|0:u)>>21,u=(2097151&u)<<11|l>>>21,l=F+v|0,v=k=u+IA|0,u=(u=(l=u>>>0>(F=k)>>>0?l+1|0:l)>>21)+x|0,R=F=(l=(2097151&l)<<11|F>>>21)+j|0,l=(l=(u=l>>>0>F>>>0?u+1|0:u)>>21)+U|0,N=F=(u=(2097151&u)<<11|F>>>21)+$|0,u=(l=u>>>0>F>>>0?l+1|0:l)>>21,l=(2097151&l)<<11|F>>>21,F=u+O|0,M=k=l+z|0,l=(F=l>>>0>(u=k)>>>0?F+1|0:F)>>21,F=(2097151&F)<<11|u>>>21,u=l+J|0,d=k=F+Z|0,F=(u=F>>>0>(l=k)>>>0?u+1|0:u)>>21,u=(2097151&u)<<11|l>>>21,l=F+EA|0,J=k=u+CA|0,u=(u=(l=u>>>0>(F=k)>>>0?l+1|0:l)>>21)+P|0,U=F=(l=(2097151&l)<<11|F>>>21)+QA|0,l=(u=l>>>0>F>>>0?u+1|0:u)>>21,k=(2097151&u)<<11|F>>>21,u=G-(F=-2097152&K)|0,F=(S-((F>>>0>G>>>0)+L|0)|0)+l|0,L=k=k+u|0,P=(2097151&(F=u>>>0>(l=k)>>>0?F+1|0:F))<<11|l>>>21,m=u=F>>21,l=2097151&H,F=eg(P,u,666643,0)+l|0,u=p,b=F,k=u=l>>>0>F>>>0?u+1|0:u,C[0|A]=F,C[A+1|0]=(255&u)<<24|F>>>8,u=2097151&W,F=eg(P,m,470296,0)+u|0,l=p,l=u>>>0>F>>>0?l+1|0:l,H=F,G=(2097151&(F=k))<<11|b>>>21,F=(u=F>>21)+l|0,F=G>>>0>(S=H+G|0)>>>0?F+1|0:F,G=S,C[A+4|0]=(2047&F)<<21|G>>>11,u=l=F,F=G,C[A+3|0]=(7&u)<<29|F>>>3,F=2097151&_,_=eg(P,m,654183,0)+F|0,u=p,u=F>>>0>_>>>0?u+1|0:u,F=_,_=(2097151&l)<<11|G>>>21,l=(l>>21)+u|0,l=_>>>0>(S=F+_|0)>>>0?l+1|0:l,_=S,u=l,C[A+6|0]=(63&u)<<26|_>>>6,H=0,F=31&((65535&k)<<16|b>>>16),l=b=2097151&G,C[A+2|0]=F|l<<5,F=2097151&Y,G=eg(P,m,-997805,-1)+F|0,l=p,F=l=F>>>0>G>>>0?l+1|0:l,F=(l=u>>21)+F|0,Y=G=(u=(2097151&u)<<11|_>>>21)+G|0,F=u>>>0>G>>>0?F+1|0:F,C[A+9|0]=(511&F)<<23|G>>>9,u=l=F,F=G,C[A+8|0]=(1&u)<<31|F>>>1,G=0,F=_&=2097151,C[A+5|0]=(524287&H)<<13|b>>>19|F<<2,F=2097151&v,H=eg(P,m,136657,0)+F|0,u=p,u=(u=F>>>0>H>>>0?u+1|0:u)+(F=l>>21)|0,b=H=(l=(2097151&l)<<11|Y>>>21)+H|0,u=l>>>0>H>>>0?u+1|0:u,l=H,C[A+12|0]=(4095&u)<<20|l>>>12,F=u,C[A+11|0]=(15&u)<<28|l>>>4,H=0,l=v=2097151&Y,C[A+7|0]=(16383&G)<<18|_>>>14|l<<7,u=2097151&R,G=eg(P,m,-683901,-1)+u|0,l=p,l=u>>>0>G>>>0?l+1|0:l,l=(u=F>>21)+l|0,_=G=(F=(2097151&F)<<11|b>>>21)+G|0,u=l=F>>>0>G>>>0?l+1|0:l,C[A+14|0]=(127&u)<<25|G>>>7,G=0,F=Y=2097151&b,C[A+10|0]=(131071&H)<<15|v>>>17|F<<4,l=u>>21,F=(u=(2097151&u)<<11|_>>>21)>>>0>(b=u+(2097151&N)|0)>>>0?l+1|0:l,C[A+17|0]=(1023&F)<<22|b>>>10,u=F,F=b,C[A+16|0]=(3&u)<<30|F>>>2,F=m=2097151&_,C[A+13|0]=(1048575&G)<<12|Y>>>20|F<<1,F=(2097151&u)<<11|b>>>21,u>>=21,u=F>>>0>(_=F+(2097151&M)|0)>>>0?u+1|0:u,l=_,C[A+20|0]=(8191&u)<<19|l>>>13,C[A+19|0]=(31&u)<<27|l>>>5,l=Y=2097151&b,C[A+15|0]=(32767&H)<<17|m>>>15|l<<6,k=(2097151&u)<<11|_>>>21,u=l=u>>21,k=u=k>>>0>(m=k+(2097151&d)|0)>>>0?u+1|0:u,C[A+21|0]=m,u=_,C[A+18|0]=(262143&G)<<14|Y>>>18|u<<3,u=k,C[A+22|0]=(255&u)<<24|m>>>8,F=u,u>>=21,F=(_=(H=(2097151&F)<<11|m>>>21)+(2097151&J)|0)>>>0>>0?u+1|0:u,C[(l=A)+25|0]=(2047&F)<<21|_>>>11,u=F,F=_,C[l+24|0]=(7&u)<<29|F>>>3,F=l,H=(2097151&u)<<11|_>>>21,u>>=21,l=u=H>>>0>(G=b=H+(2097151&U)|0)>>>0?u+1|0:u,C[F+27|0]=(63&u)<<26|G>>>6,H=0,u=b=2097151&_,C[F+23|0]=31&((65535&k)<<16|m>>>16)|u<<5,l=(u=l)>>21,l=(u=(2097151&u)<<11|G>>>21)>>>0>(k=u+(2097151&L)|0)>>>0?l+1|0:l,F=k,C[A+31|0]=(131071&l)<<15|F>>>17,u=l,C[A+30|0]=(511&u)<<23|F>>>9,C[A+29|0]=(1&u)<<31|F>>>1,l=0,G&=2097151,C[A+26|0]=(524287&H)<<13|b>>>19|G<<2,C[A+28|0]=(16383&l)<<18|G>>>14|F<<7}function k(A){var I,g=0,B=0,Q=0,C=0,E=0,r=0,o=0,t=0,f=0,c=0,y=0,s=0,w=0;h=I=h-16|0;A:{I:{g:{B:{Q:{C:{E:{i:{n:{a:{r:{o:{if((A|=0)>>>0<=244){if(3&(g=(E=i[8961])>>>(B=(t=A>>>0<11?16:A+11&-8)>>>3|0)|0)){A=(C=i[35892+(g=(Q=B+(1&(-1^g))|0)<<3)>>2])+8|0,(0|(B=i[C+8>>2]))!=(0|(g=g+35884|0))?(i[B+12>>2]=g,i[g+8>>2]=B):(s=35844,w=vI(-2,Q)&E,i[s>>2]=w),g=Q<<3,i[C+4>>2]=3|g,i[4+(g=g+C|0)>>2]=1|i[g+4>>2];break A}if((c=i[8963])>>>0>=t>>>0)break o;if(g){B=A=(g=(0-(A=(0-(A=2<>>12&16,B|=A=(g=g>>>A|0)>>>5&8,B|=A=(g=g>>>A|0)>>>2&4,r=i[35892+(A=(B=((B|=A=(g=g>>>A|0)>>>1&2)|(A=(g=g>>>A|0)>>>1&1))+(g>>>A|0)|0)<<3)>>2],(0|(g=i[r+8>>2]))!=(0|(A=A+35884|0))?(i[g+12>>2]=A,i[A+8>>2]=g):(E=vI(-2,B)&E,i[8961]=E),A=r+8|0,i[r+4>>2]=3|t,C=(g=B<<3)-t|0,i[4+(Q=r+t|0)>>2]=1|C,i[g+r>>2]=C,c&&(B=35884+((g=c>>>3|0)<<3)|0,r=i[8966],(g=1<>2]:(i[8961]=g|E,g=B),i[B+8>>2]=r,i[g+12>>2]=r,i[r+12>>2]=B,i[r+8>>2]=g),i[8966]=Q,i[8963]=C;break A}if(!(o=i[8962]))break o;for(B=A=(g=(o&0-o)-1|0)>>>12&16,B|=A=(g=g>>>A|0)>>>5&8,B|=A=(g=g>>>A|0)>>>2&4,g=i[36148+(((B|=A=(g=g>>>A|0)>>>1&2)|(A=(g=g>>>A|0)>>>1&1))+(g>>>A|0)<<2)>>2],C=(-8&i[g+4>>2])-t|0,B=g;(A=i[B+16>>2])||(A=i[B+20>>2]);)C=(Q=(B=(-8&i[A+4>>2])-t|0)>>>0>>0)?B:C,g=Q?A:g,B=A;if((f=g+t|0)>>>0<=g>>>0)break r;if(y=i[g+24>>2],(0|(Q=i[g+12>>2]))!=(0|g)){A=i[g+8>>2],i[A+12>>2]=Q,i[Q+8>>2]=A;break I}if(!(A=i[(B=g+20|0)>>2])){if(!(A=i[g+16>>2]))break a;B=g+16|0}for(;r=B,Q=A,(A=i[(B=A+20|0)>>2])||(B=Q+16|0,A=i[Q+16>>2]););i[r>>2]=0;break I}if(t=-1,!(A>>>0>4294967231)&&(t=-8&(A=A+11|0),f=i[8962])){E=31,C=0-t|0,t>>>0<=16777215&&(A=A>>>8|0,A<<=r=A+1048320>>>16&8,E=28+((A=((A<<=B=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|B|r)|0)<<1|t>>>A+21&1)|0);e:{t:{if(B=i[36148+(E<<2)>>2])for(A=0,g=t<<(31==(0|E)?0:25-(E>>>1|0)|0);;){if(!((r=(-8&i[B+4>>2])-t|0)>>>0>=C>>>0||(Q=B,C=r))){C=0,A=B;break t}if(r=i[B+20>>2],B=i[16+((g>>>29&4)+B|0)>>2],A=r?(0|r)==(0|B)?A:r:A,g<<=1,!B)break}else A=0;if(!(A|Q)){if(!(A=(0-(A=2<>>12&16,B|=A=(g=g>>>A|0)>>>5&8,B|=A=(g=g>>>A|0)>>>2&4,A=i[36148+(((B|=A=(g=g>>>A|0)>>>1&2)|(A=(g=g>>>A|0)>>>1&1))+(g>>>A|0)<<2)>>2]}if(!A)break e}for(;C=(B=(g=(-8&i[A+4>>2])-t|0)>>>0>>0)?g:C,Q=B?A:Q,A=(g=i[A+16>>2])||i[A+20>>2];);}if(!(!Q|i[8963]-t>>>0<=C>>>0)){if((o=Q+t|0)>>>0<=Q>>>0)break r;if(E=i[Q+24>>2],(0|Q)!=(0|(g=i[Q+12>>2]))){A=i[Q+8>>2],i[A+12>>2]=g,i[g+8>>2]=A;break g}if(!(A=i[(B=Q+20|0)>>2])){if(!(A=i[Q+16>>2]))break n;B=Q+16|0}for(;r=B,g=A,(A=i[(B=A+20|0)>>2])||(B=g+16|0,A=i[g+16>>2]););i[r>>2]=0;break g}}}if((B=i[8963])>>>0>=t>>>0){Q=i[8966],(g=B-t|0)>>>0>=16?(i[8963]=g,A=Q+t|0,i[8966]=A,i[A+4>>2]=1|g,i[B+Q>>2]=g,i[Q+4>>2]=3|t):(i[8966]=0,i[8963]=0,i[Q+4>>2]=3|B,i[4+(A=B+Q|0)>>2]=1|i[A+4>>2]),A=Q+8|0;break A}if((o=i[8964])>>>0>t>>>0){g=o-t|0,i[8964]=g,A=(B=i[8967])+t|0,i[8967]=A,i[A+4>>2]=1|g,i[B+4>>2]=3|t,A=B+8|0;break A}if(A=0,g=f=t+47|0,i[9079]?B=i[9081]:(i[9082]=-1,i[9083]=-1,i[9080]=4096,i[9081]=4096,i[9079]=I+12&-16^1431655768,i[9084]=0,i[9072]=0,B=4096),(B=(r=g+B|0)&(C=0-B|0))>>>0<=t>>>0)break A;if((Q=i[9071])&&Q>>>0<(E=(g=i[9069])+B|0)>>>0|g>>>0>=E>>>0)break A;if(4&n[36288])break C;o:{e:{if(Q=i[8967])for(A=36292;;){if(Q>>>0<(g=i[A>>2])+i[A+4>>2]>>>0&&g>>>0<=Q>>>0)break e;if(!(A=i[A+8>>2]))break}if(-1==(0|(g=II(0))))break E;if(E=B,(A=(Q=i[9080])-1|0)&g&&(E=(B-g|0)+(A+g&0-Q)|0),E>>>0<=t>>>0|E>>>0>2147483646)break E;if((Q=i[9071])&&Q>>>0<(C=(A=i[9069])+E|0)>>>0|A>>>0>=C>>>0)break E;if((0|g)!=(0|(A=II(E))))break o;break Q}if((E=C&r-o)>>>0>2147483646)break E;if((0|(g=II(E)))==(i[A>>2]+i[A+4>>2]|0))break i;A=g}if(!(-1==(0|A)|t+48>>>0<=E>>>0)){if((g=(g=i[9081])+(f-E|0)&0-g)>>>0>2147483646){g=A;break Q}if(-1!=(0|II(g))){E=g+E|0,g=A;break Q}II(0-E|0);break E}if(g=A,-1!=(0|A))break Q;break E}e()}Q=0;break I}g=0;break g}if(-1!=(0|g))break Q}i[9072]=4|i[9072]}if(B>>>0>2147483646)break B;if((g=II(B))>>>0>=(A=II(0))>>>0|-1==(0|g)|-1==(0|A))break B;if((E=A-g|0)>>>0<=t+40>>>0)break B}A=i[9069]+E|0,i[9069]=A,A>>>0>a[9070]&&(i[9070]=A);Q:{C:{E:{if(r=i[8967]){for(A=36292;;){if(((Q=i[A>>2])+(B=i[A+4>>2])|0)==(0|g))break E;if(!(A=i[A+8>>2]))break}break C}for((A=i[8965])>>>0<=g>>>0&&A||(i[8965]=g),A=0,i[9074]=E,i[9073]=g,i[8969]=-1,i[8970]=i[9079],i[9076]=0;B=35884+(Q=A<<3)|0,i[Q+35892>>2]=B,i[Q+35896>>2]=B,32!=(0|(A=A+1|0)););B=(Q=E-40|0)-(A=g+8&7?-8-g&7:0)|0,i[8964]=B,A=A+g|0,i[8967]=A,i[A+4>>2]=1|B,i[4+(g+Q|0)>>2]=40,i[8968]=i[9083];break Q}if(!(8&n[A+12|0]|g>>>0<=r>>>0|Q>>>0>r>>>0)){i[A+4>>2]=B+E,B=(A=r+8&7?-8-r&7:0)+r|0,i[8967]=B,A=(g=i[8964]+E|0)-A|0,i[8964]=A,i[B+4>>2]=1|A,i[4+(g+r|0)>>2]=40,i[8968]=i[9083];break Q}}(Q=i[8965])>>>0>g>>>0&&(i[8965]=g,Q=0),B=g+E|0,A=36292;C:{E:{i:{n:{a:{r:{for(;;){if((0|B)!=i[A>>2]){if(A=i[A+8>>2])continue;break r}break}if(!(8&n[A+12|0]))break a}for(A=36292;;){if((B=i[A>>2])>>>0<=r>>>0&&(C=B+i[A+4>>2]|0)>>>0>r>>>0)break n;A=i[A+8>>2]}}if(i[A>>2]=g,i[A+4>>2]=i[A+4>>2]+E,i[4+(f=(g+8&7?-8-g&7:0)+g|0)>>2]=3|t,B=((E=B+(B+8&7?-8-B&7:0)|0)-f|0)-t|0,o=t+f|0,(0|E)==(0|r)){i[8967]=o,A=i[8964]+B|0,i[8964]=A,i[o+4>>2]=1|A;break E}if(i[8966]==(0|E)){i[8966]=o,A=i[8963]+B|0,i[8963]=A,i[o+4>>2]=1|A,i[A+o>>2]=A;break E}if(1==(3&(A=i[E+4>>2]))){r=-8&A;a:if(A>>>0<=255){if(Q=i[E+8>>2],A=A>>>3|0,(0|(g=i[E+12>>2]))==(0|Q)){s=35844,w=i[8961]&vI(-2,A),i[s>>2]=w;break a}i[Q+12>>2]=g,i[g+8>>2]=Q}else{if(t=i[E+24>>2],(0|E)==(0|(g=i[E+12>>2])))if((C=i[(A=E+20|0)>>2])||(C=i[(A=E+16|0)>>2])){for(;Q=A,(C=i[(A=(g=C)+20|0)>>2])||(A=g+16|0,C=i[g+16>>2]););i[Q>>2]=0}else g=0;else A=i[E+8>>2],i[A+12>>2]=g,i[g+8>>2]=A;if(t){Q=i[E+28>>2];r:{if(i[(A=36148+(Q<<2)|0)>>2]==(0|E)){if(i[A>>2]=g,g)break r;s=35848,w=i[8962]&vI(-2,Q),i[s>>2]=w;break a}if(i[t+(i[t+16>>2]==(0|E)?16:20)>>2]=g,!g)break a}i[g+24>>2]=t,(A=i[E+16>>2])&&(i[g+16>>2]=A,i[A+24>>2]=g),(A=i[E+20>>2])&&(i[g+20>>2]=A,i[A+24>>2]=g)}}E=E+r|0,B=B+r|0}if(i[E+4>>2]=-2&i[E+4>>2],i[o+4>>2]=1|B,i[B+o>>2]=B,B>>>0<=255){g=35884+((A=B>>>3|0)<<3)|0,(B=i[8961])&(A=1<>2]:(i[8961]=A|B,A=g),i[g+8>>2]=o,i[A+12>>2]=o,i[o+12>>2]=g,i[o+8>>2]=A;break E}if(A=31,B>>>0<=16777215&&(A=B>>>8|0,A<<=C=A+1048320>>>16&8,A=28+((A=((A<<=Q=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|Q|C)|0)<<1|B>>>A+21&1)|0),i[o+28>>2]=A,i[o+16>>2]=0,i[o+20>>2]=0,C=36148+(A<<2)|0,(Q=i[8962])&(g=1<>>1|0)|0),g=i[C>>2];;){if(Q=g,(-8&i[g+4>>2])==(0|B))break i;if(g=A>>>29|0,A<<=1,!(g=i[16+(C=Q+(4&g)|0)>>2]))break}i[C+16>>2]=o,i[o+24>>2]=Q}else i[8962]=g|Q,i[C>>2]=o,i[o+24>>2]=C;i[o+12>>2]=o,i[o+8>>2]=o;break E}for(B=(Q=E-40|0)-(A=g+8&7?-8-g&7:0)|0,i[8964]=B,A=A+g|0,i[8967]=A,i[A+4>>2]=1|B,i[4+(g+Q|0)>>2]=40,i[8968]=i[9083],i[(B=(A=(C+(C-39&7?39-C&7:0)|0)-47|0)>>>0>>0?r:A)+4>>2]=27,A=i[9076],i[B+16>>2]=i[9075],i[B+20>>2]=A,A=i[9074],i[B+8>>2]=i[9073],i[B+12>>2]=A,i[9075]=B+8,i[9074]=E,i[9073]=g,i[9076]=0,A=B+24|0;i[A+4>>2]=7,g=A+8|0,A=A+4|0,g>>>0>>0;);if((0|B)==(0|r))break Q;if(i[B+4>>2]=-2&i[B+4>>2],C=B-r|0,i[r+4>>2]=1|C,i[B>>2]=C,C>>>0<=255){g=35884+((A=C>>>3|0)<<3)|0,(B=i[8961])&(A=1<>2]:(i[8961]=A|B,A=g),i[g+8>>2]=r,i[A+12>>2]=r,i[r+12>>2]=g,i[r+8>>2]=A;break Q}if(A=31,i[r+16>>2]=0,i[r+20>>2]=0,C>>>0<=16777215&&(A=C>>>8|0,A<<=Q=A+1048320>>>16&8,A=28+((A=((A<<=B=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|B|Q)|0)<<1|C>>>A+21&1)|0),i[r+28>>2]=A,Q=36148+(A<<2)|0,(B=i[8962])&(g=1<>>1|0)|0),g=i[Q>>2];;){if(B=g,(0|C)==(-8&i[g+4>>2]))break C;if(g=A>>>29|0,A<<=1,!(g=i[16+(Q=B+(4&g)|0)>>2]))break}i[Q+16>>2]=r,i[r+24>>2]=B}else i[8962]=g|B,i[Q>>2]=r,i[r+24>>2]=Q;i[r+12>>2]=r,i[r+8>>2]=r;break Q}A=i[Q+8>>2],i[A+12>>2]=o,i[Q+8>>2]=o,i[o+24>>2]=0,i[o+12>>2]=Q,i[o+8>>2]=A}A=f+8|0;break A}A=i[B+8>>2],i[A+12>>2]=r,i[B+8>>2]=r,i[r+24>>2]=0,i[r+12>>2]=B,i[r+8>>2]=A}if(!((A=i[8964])>>>0<=t>>>0)){g=A-t|0,i[8964]=g,A=(B=i[8967])+t|0,i[8967]=A,i[A+4>>2]=1|g,i[B+4>>2]=3|t,A=B+8|0;break A}}i[8960]=48,A=0;break A}g:if(E){B=i[Q+28>>2];B:{if(i[(A=36148+(B<<2)|0)>>2]==(0|Q)){if(i[A>>2]=g,g)break B;f=vI(-2,B)&f,i[8962]=f;break g}if(i[E+(i[E+16>>2]==(0|Q)?16:20)>>2]=g,!g)break g}i[g+24>>2]=E,(A=i[Q+16>>2])&&(i[g+16>>2]=A,i[A+24>>2]=g),(A=i[Q+20>>2])&&(i[g+20>>2]=A,i[A+24>>2]=g)}g:if(C>>>0<=15)A=C+t|0,i[Q+4>>2]=3|A,i[4+(A=A+Q|0)>>2]=1|i[A+4>>2];else if(i[Q+4>>2]=3|t,i[o+4>>2]=1|C,i[C+o>>2]=C,C>>>0<=255)g=35884+((A=C>>>3|0)<<3)|0,(B=i[8961])&(A=1<>2]:(i[8961]=A|B,A=g),i[g+8>>2]=o,i[A+12>>2]=o,i[o+12>>2]=g,i[o+8>>2]=A;else{A=31,C>>>0<=16777215&&(A=C>>>8|0,A<<=r=A+1048320>>>16&8,A=28+((A=((A<<=B=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|B|r)|0)<<1|C>>>A+21&1)|0),i[o+28>>2]=A,i[o+16>>2]=0,i[o+20>>2]=0,B=36148+(A<<2)|0;B:{if((g=1<>>1|0)|0),t=i[B>>2];;){if((-8&i[(g=t)+4>>2])==(0|C))break B;if(B=A>>>29|0,A<<=1,!(t=i[16+(B=g+(4&B)|0)>>2]))break}i[B+16>>2]=o,i[o+24>>2]=g}else i[8962]=g|f,i[B>>2]=o,i[o+24>>2]=B;i[o+12>>2]=o,i[o+8>>2]=o;break g}A=i[g+8>>2],i[A+12>>2]=o,i[g+8>>2]=o,i[o+24>>2]=0,i[o+12>>2]=g,i[o+8>>2]=A}A=Q+8|0;break A}I:if(y){B=i[g+28>>2];g:{if(i[(A=36148+(B<<2)|0)>>2]==(0|g)){if(i[A>>2]=Q,Q)break g;s=35848,w=vI(-2,B)&o,i[s>>2]=w;break I}if(i[(i[y+16>>2]==(0|g)?16:20)+y>>2]=Q,!Q)break I}i[Q+24>>2]=y,(A=i[g+16>>2])&&(i[Q+16>>2]=A,i[A+24>>2]=Q),(A=i[g+20>>2])&&(i[Q+20>>2]=A,i[A+24>>2]=Q)}C>>>0<=15?(A=C+t|0,i[g+4>>2]=3|A,i[4+(A=A+g|0)>>2]=1|i[A+4>>2]):(i[g+4>>2]=3|t,i[f+4>>2]=1|C,i[C+f>>2]=C,c&&(B=35884+((A=c>>>3|0)<<3)|0,Q=i[8966],(A=1<>2]:(i[8961]=A|E,A=B),i[B+8>>2]=Q,i[A+12>>2]=Q,i[Q+12>>2]=B,i[Q+8>>2]=A),i[8966]=f,i[8963]=C),A=g+8|0}return h=I+16|0,0|A}function _(A,I,g){var B,Q,C,E,n,a,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L,K,q,X,V,W,T,j,Z,O,z,$,AA,IA,gA,BA,QA,CA,EA=0,iA=0,nA=0,aA=0,rA=0,oA=0,eA=0,tA=0,fA=0,cA=0,yA=0,sA=0,wA=0,hA=0,DA=0,uA=0,pA=0,lA=0,FA=0,GA=0,kA=0,_A=0,HA=0,YA=0,bA=0;eA=A,B=EA=HA=i[g+4>>2],t=EA>>31,x=EA=(DA=i[I+20>>2])<<1,EA=eg(B,t,EA,H=EA>>31),nA=p,iA=EA,Q=EA=i[g>>2],C=EA>>31,f=EA=i[I+24>>2],rA=eg(Q,C,EA,E=EA>>31),EA=p+nA|0,EA=(iA=iA+rA|0)>>>0>>0?EA+1|0:EA,nA=iA,L=iA=oA=i[g+8>>2],u=iA>>31,c=iA=i[I+16>>2],iA=nA+(rA=eg(oA,u,iA,n=iA>>31))|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,K=EA=pA=i[g+12>>2],l=EA>>31,q=EA=(sA=i[I+12>>2])<<1,EA=(rA=eg(pA,l,EA,Y=EA>>31))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=EA,O=EA=uA=i[g+16>>2],k=EA>>31,y=EA=i[I+8>>2],rA=eg(uA,k,EA,a=EA>>31),EA=p+iA|0,EA=(nA=nA+rA|0)>>>0>>0?EA+1|0:EA,aA=nA,z=iA=cA=i[g+20>>2],b=iA>>31,X=iA=(fA=i[I+4>>2])<<1,nA=eg(cA,b,iA,m=iA>>31),EA=p+EA|0,EA=(iA=aA+nA|0)>>>0>>0?EA+1|0:EA,nA=iA,$=iA=yA=i[g+24>>2],V=iA>>31,s=iA=i[I>>2],rA=eg(yA,V,iA,o=iA>>31),iA=p+EA|0,iA=(nA=nA+rA|0)>>>0>>0?iA+1|0:iA,lA=i[g+28>>2],F=EA=r(lA,19),G=EA>>31,W=EA=(wA=i[I+36>>2])<<1,EA=(rA=eg(F,G,EA,v=EA>>31))+nA|0,nA=p+iA|0,nA=EA>>>0>>0?nA+1|0:nA,iA=EA,hA=i[g+32>>2],FA=EA=r(hA,19),GA=EA>>31,w=EA=i[I+32>>2],rA=eg(FA,GA,EA,e=EA>>31),EA=p+nA|0,EA=(iA=iA+rA|0)>>>0>>0?EA+1|0:EA,nA=iA,AA=i[g+36>>2],h=g=r(AA,19),D=g>>31,T=g=(I=i[I+28>>2])<<1,iA=eg(h,D,g,U=g>>31),EA=p+EA|0,tA=g=nA+iA|0,g=g>>>0>>0?EA+1|0:EA,EA=eg(c,n,B,t),iA=p,DA=eg(Q,C,rA=DA,S=rA>>31),nA=p+iA|0,nA=(EA=DA+EA|0)>>>0>>0?nA+1|0:nA,DA=sA,sA=eg(oA,u,sA,N=sA>>31),iA=p+nA|0,iA=(EA=sA+EA|0)>>>0>>0?iA+1|0:iA,nA=(sA=eg(y,a,pA,l))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,sA=fA,nA=eg(uA,k,fA,M=fA>>31),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(s,o,cA,b),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=iA,d=iA=r(yA,19),iA=nA+(wA=eg(iA,_=iA>>31,fA=wA,P=fA>>31))|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,EA=(wA=eg(w,e,F,G))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,wA=I,I=(nA=eg(FA,GA,I,R=I>>31))+EA|0,EA=p+iA|0,EA=I>>>0>>0?EA+1|0:EA,iA=eg(h,D,f,E),EA=p+EA|0,_A=I=iA+I|0,I=I>>>0>>0?EA+1|0:EA,EA=eg(B,t,q,Y),nA=p,iA=(yA=eg(Q,C,c,n))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,yA=eg(y,a,oA,u),nA=p+EA|0,nA=(iA=yA+iA|0)>>>0>>0?nA+1|0:nA,EA=(yA=eg(pA,l,X,m))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(yA=eg(s,o,uA,k))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,aA=nA,j=iA=r(cA,19),nA=eg(iA,J=iA>>31,W,v),EA=p+EA|0,EA=(iA=aA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(w,e,d,_),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,cA=eg(F,G,T,U),nA=p+EA|0,nA=(iA=cA+iA|0)>>>0>>0?nA+1|0:nA,EA=(cA=eg(FA,GA,f,E))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(cA=eg(h,D,x,H))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,cA=nA,gA=EA,yA=iA=nA+33554432|0,BA=EA=iA>>>0<33554432?EA+1|0:EA,nA=_A,_A=(67108863&EA)<<6|iA>>>26,EA=(EA>>26)+I|0,EA=(nA=nA+_A|0)>>>0<_A>>>0?EA+1|0:EA,QA=I=(_A=nA)+16777216|0,EA=g+(iA=(nA=I>>>0<16777216?EA+1|0:EA)>>25)|0,EA=(I=(nA=(33554431&nA)<<7|I>>>25)+tA|0)>>>0>>0?EA+1|0:EA,YA=I=(g=I)+33554432|0,I=EA=I>>>0<33554432?EA+1|0:EA,EA=-67108864&YA,i[eA+24>>2]=g-EA,tA=eA,g=eg(B,t,X,m),EA=p,iA=eg(Q,C,y,a),nA=p+EA|0,nA=(g=iA+g|0)>>>0>>0?nA+1|0:nA,iA=eg(s,o,oA,u),EA=p+nA|0,EA=(g=iA+g|0)>>>0>>0?EA+1|0:EA,nA=g,eA=g=r(pA,19),iA=eg(g,pA=g>>31,W,v),EA=p+EA|0,EA=(g=nA+iA|0)>>>0>>0?EA+1|0:EA,iA=g,IA=g=r(uA,19),g=iA+(nA=eg(w,e,g,Z=g>>31))|0,iA=p+EA|0,iA=g>>>0>>0?iA+1|0:iA,nA=eg(T,U,j,J),EA=p+iA|0,EA=(g=nA+g|0)>>>0>>0?EA+1|0:EA,iA=eg(f,E,d,_),nA=p+EA|0,nA=(g=iA+g|0)>>>0>>0?nA+1|0:nA,iA=eg(F,G,x,H),EA=p+nA|0,EA=(g=iA+g|0)>>>0>>0?EA+1|0:EA,iA=eg(FA,GA,c,n),EA=p+EA|0,EA=(g=iA+g|0)>>>0>>0?EA+1|0:EA,nA=eg(h,D,q,Y),iA=p+EA|0,aA=g=nA+g|0,g=g>>>0>>0?iA+1|0:iA,EA=eg(s,o,B,t),nA=p,iA=(uA=eg(Q,C,sA,M))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=iA,uA=iA=r(oA,19),iA=nA+(oA=eg(iA,kA=iA>>31,fA,P))|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,oA=eg(w,e,eA,pA),EA=p+nA|0,EA=(iA=oA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(IA,Z,wA,R),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=(oA=eg(f,E,j,J))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,oA=eg(d,_,rA,S),EA=p+iA|0,EA=(nA=oA+nA|0)>>>0>>0?EA+1|0:EA,iA=(oA=eg(c,n,F,G))+nA|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,oA=eg(FA,GA,DA,N),EA=p+nA|0,EA=(iA=oA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(h,D,y,a),EA=p+EA|0,bA=iA=nA+iA|0,oA=iA>>>0>>0?EA+1|0:EA,EA=eg(EA=r(B,19),EA>>31,W,v),iA=p,nA=eg(Q,C,s,o),iA=p+iA|0,iA=(EA=nA+EA|0)>>>0>>0?iA+1|0:iA,nA=(HA=eg(w,e,uA,kA))+EA|0,EA=p+iA|0,iA=(eA=eg(eA,pA,T,U))+nA|0,nA=p+(nA>>>0>>0?EA+1|0:EA)|0,nA=iA>>>0>>0?nA+1|0:nA,eA=eg(f,E,IA,Z),EA=p+nA|0,EA=(iA=eA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(x,H,j,J),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=(eA=eg(c,n,d,_))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,eA=eg(F,G,q,Y),EA=p+iA|0,EA=(nA=eA+nA|0)>>>0>>0?EA+1|0:EA,iA=(eA=eg(FA,GA,y,a))+nA|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,eA=eg(h,D,X,m),EA=p+nA|0,EA=(iA=eA+iA|0)>>>0>>0?EA+1|0:EA,eA=iA,HA=EA,pA=iA=iA+33554432|0,uA=EA=iA>>>0<33554432?EA+1|0:EA,kA=(67108863&EA)<<6|iA>>>26,iA=(nA=EA>>26)+oA|0,oA=EA=kA+bA|0,nA=aA,EA=EA>>>0>>0?iA+1|0:iA,CA=iA=oA+16777216|0,aA=(33554431&(EA=iA>>>0<16777216?EA+1|0:EA))<<7|iA>>>25,EA=(EA>>25)+g|0,EA=(iA=nA+aA|0)>>>0>>0?EA+1|0:EA,kA=g=iA+33554432|0,g=EA=g>>>0<33554432?EA+1|0:EA,EA=-67108864&kA,i[tA+8>>2]=iA-EA,aA=tA,EA=eg(f,E,B,t),nA=p,iA=(tA=eg(Q,C,wA,R))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=eg(L,u,rA,S),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(c,n,K,l),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,tA=eg(O,k,DA,N),nA=p+EA|0,nA=(iA=tA+iA|0)>>>0>>0?nA+1|0:nA,EA=(tA=eg(y,a,z,b))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(tA=eg(sA,M,$,V))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(s,o,tA=lA,bA=tA>>31),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(FA,GA,fA,P),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,lA=eg(h,D,w,e),nA=p+EA|0,nA=(iA=lA+iA|0)>>>0>>0?nA+1|0:nA,EA=I>>26,I=(lA=(67108863&I)<<6|YA>>>26)+iA|0,iA=EA+nA|0,EA=iA=I>>>0>>0?iA+1|0:iA,YA=I=(nA=I)+16777216|0,I=EA=I>>>0<16777216?EA+1|0:EA,EA=-33554432&YA,i[aA+28>>2]=nA-EA,lA=aA,EA=eg(y,a,B,t),iA=p,aA=eg(Q,C,DA,N),nA=p+iA|0,nA=(EA=aA+EA|0)>>>0>>0?nA+1|0:nA,aA=eg(L,u,sA,M),iA=p+nA|0,iA=(EA=aA+EA|0)>>>0>>0?iA+1|0:iA,nA=(aA=eg(s,o,K,l))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(IA,Z,fA,P),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(w,e,j,J),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,aA=eg(d,_,wA,R),nA=p+EA|0,nA=(iA=aA+iA|0)>>>0>>0?nA+1|0:nA,EA=(aA=eg(f,E,F,G))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(aA=eg(FA,GA,rA,S))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(h,D,c,n),EA=p+EA|0,aA=iA=iA+nA|0,EA=(EA=iA>>>0>>0?EA+1|0:EA)+(iA=g>>26)|0,EA=(g=aA+(nA=(67108863&g)<<6|kA>>>26)|0)>>>0>>0?EA+1|0:EA,FA=g=(iA=g)+16777216|0,g=nA=g>>>0<16777216?EA+1|0:EA,EA=-33554432&FA,i[lA+12>>2]=iA-EA,EA=eg(B,t,T,U),nA=p,iA=(aA=eg(Q,C,w,e))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=eg(f,E,L,u),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,aA=eg(K,l,x,H),nA=p+EA|0,nA=(iA=aA+iA|0)>>>0>>0?nA+1|0:nA,EA=(aA=eg(c,n,O,k))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(aA=eg(q,Y,z,b))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(y,a,$,V),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(tA,bA,X,m),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,hA=eg(s,o,aA=hA,GA=aA>>31),nA=p+EA|0,nA=(iA=hA+iA|0)>>>0>>0?nA+1|0:nA,EA=(hA=eg(h,D,W,v))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,hA=EA,EA=(EA=I>>25)+iA|0,EA=(I=hA+(nA=(33554431&I)<<7|YA>>>25)|0)>>>0>>0?EA+1|0:EA,hA=I=(iA=I)+33554432|0,I=EA=I>>>0<33554432?EA+1|0:EA,EA=-67108864&hA,i[lA+32>>2]=iA-EA,nA=iA=cA-(EA=-67108864&yA)|0,EA=(EA=gA-((EA>>>0>cA>>>0)+BA|0)|0)+(iA=g>>25)|0,EA=(g=nA+(cA=(33554431&g)<<7|FA>>>25)|0)>>>0>>0?EA+1|0:EA,(iA=g+33554432|0)>>>0<33554432&&(EA=EA+1|0),EA=(_A-(-33554432&QA)|0)+((67108863&EA)<<6|iA>>>26)|0,i[A+20>>2]=EA,EA=-67108864&iA,i[A+16>>2]=g-EA,EA=eg(w,e,B,t),nA=p,iA=(fA=eg(Q,C,fA,P))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=(fA=eg(L,u,wA,R))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,EA=(fA=eg(f,E,K,l))+nA|0,nA=p+iA|0,iA=(rA=eg(O,k,rA,S))+EA|0,EA=p+(EA>>>0>>0?nA+1|0:nA)|0,EA=iA>>>0>>0?EA+1|0:EA,nA=eg(c,n,z,b),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(DA,N,$,V),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=(rA=eg(y,a,tA,bA))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,EA=(rA=eg(aA,GA,sA,M))+nA|0,nA=p+iA|0,nA=EA>>>0>>0?nA+1|0:nA,iA=(rA=eg(s,o,AA,AA>>31))+EA|0,EA=p+nA|0,g=iA,EA=(EA=iA>>>0>>0?EA+1|0:EA)+(iA=I>>26)|0,EA=(I=g+(nA=(67108863&I)<<6|hA>>>26)|0)>>>0>>0?EA+1|0:EA,EA=(I=(g=I)+16777216|0)>>>0<16777216?EA+1|0:EA,I=-33554432&(iA=I),i[A+36>>2]=g-I,nA=oA-(-33554432&CA)|0,rA=eA-(I=-67108864&pA)|0,DA=HA-((I>>>0>eA>>>0)+uA|0)|0,EA=eg((33554431&(I=EA))<<7|iA>>>25,EA>>=25,19,0),iA=p+DA|0,EA=iA=(I=EA+rA|0)>>>0>>0?iA+1|0:iA,g=((67108863&(EA=(g=I+33554432|0)>>>0<33554432?EA+1|0:EA))<<6|(iA=g)>>>26)+nA|0,i[A+4>>2]=g,g=A,A=-67108864&iA,i[g>>2]=I-A}function H(A,I){var g,B,Q,C,E,n,a,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0;W=A,t=K=(L=i[I+12>>2])<<1,j=L,L=eg(K,E=K>>31,L,H=L>>31),X=p,K=L,g=L=i[I+16>>2],n=L>>31,D=L=(O=i[I+8>>2])<<1,V=eg(g,n,L,y=L>>31),L=p+X|0,L=(K=K+V|0)>>>0>>0?L+1|0:L,X=K,s=K=(V=i[I+20>>2])<<1,w=K>>31,a=K=(z=i[I+4>>2])<<1,q=eg(s,w,K,B=K>>31),K=p+L|0,K=(X=X+q|0)>>>0>>0?K+1|0:K,F=L=T=i[I+24>>2],f=L>>31,o=L=(BA=i[I>>2])<<1,q=eg(T,f,L,Q=L>>31),L=p+K|0,L=(X=q+X|0)>>>0>>0?L+1|0:L,Z=X,K=i[I+32>>2],h=X=r(K,19),Y=K,X=eg(X,c=X>>31,K,G=K>>31),L=p+L|0,L=(K=Z+X|0)>>>0>>0?L+1|0:L,Z=K,AA=i[I+36>>2],e=K=r(AA,38),C=K>>31,S=I=(X=i[I+28>>2])<<1,q=eg(K,C,I,b=I>>31),I=p+L|0,IA=K=Z+q|0,$=K>>>0>>0?I+1|0:I,I=eg(a,B,g,n),L=p,K=eg(D,y,j,H),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,N=V,q=eg(V,k=V>>31,o,Q),K=p+L|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(h,c,S,b),L=p+K|0,L=(I=q+I|0)>>>0>>0?L+1|0:L,K=eg(e,C,T,f),L=p+L|0,Z=I=K+I|0,QA=I>>>0>>0?L+1|0:L,I=eg(a,B,t,E),K=p,L=(O=eg(q=O,u=q>>31,q,u))+I|0,I=p+K|0,I=L>>>0>>0?I+1|0:I,K=(O=eg(o,Q,g,n))+L|0,L=p+I|0,L=K>>>0>>0?L+1|0:L,_=I=r(X,38),O=X,I=(X=eg(I,l=I>>31,X,m=X>>31))+K|0,K=p+L|0,K=I>>>0>>0?K+1|0:K,I=(L=I)+(X=eg(h,c,I=T<<1,I>>31))|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,K=eg(e,C,s,w),L=p+L|0,v=I=K+I|0,P=L=I>>>0>>0?L+1|0:L,I=L,M=L=v+33554432|0,R=I=L>>>0<33554432?I+1|0:I,L=(L=I>>26)+QA|0,QA=I=(K=(67108863&I)<<6|M>>>26)+Z|0,K=I>>>0>>0?L+1|0:L,J=I=I+16777216|0,L=(L=(K=I>>>0<16777216?K+1|0:K)>>25)+$|0,L=(I=(K=(33554431&K)<<7|I>>>25)+IA|0)>>>0>>0?L+1|0:L,K=I,I=L,Z=L=K+33554432|0,X=I=L>>>0<33554432?I+1|0:I,I=-67108864&L,i[W+24>>2]=K-I,I=eg(o,Q,q,u),L=p,z=eg(a,B,W=z,gA=W>>31),K=p+L|0,K=(I=z+I|0)>>>0>>0?K+1|0:K,L=I,z=I=r(T,19),I=L+(T=eg(I,IA=I>>31,T,f))|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,K=(T=eg(s,w,_,l))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,d=L=g<<1,T=eg(h,c,L,U=L>>31),L=p+I|0,L=(K=T+K|0)>>>0>>0?L+1|0:L,I=K,K=eg(e,C,t,E),L=p+L|0,$=I=I+K|0,T=I>>>0>>0?L+1|0:L,I=eg(s,w,z,IA),L=p,W=eg(o,Q,W,gA),K=p+L|0,K=(I=W+I|0)>>>0>>0?K+1|0:K,W=eg(g,n,_,l),L=p+K|0,L=(I=W+I|0)>>>0>>0?L+1|0:L,K=(W=eg(h,c,t,E))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,W=eg(e,C,q,u),L=p+I|0,gA=K=W+K|0,W=K>>>0>>0?L+1|0:L,I=eg(I=r(V,38),I>>31,V,k),L=p,V=I,K=eg(I=BA,K=I>>31,I,K),L=p+L|0,L=(I=V+K|0)>>>0>>0?L+1|0:L,V=eg(z,IA,d,U),K=p+L|0,K=(I=V+I|0)>>>0>>0?K+1|0:K,V=eg(t,E,_,l),L=p+K|0,L=(I=V+I|0)>>>0>>0?L+1|0:L,K=(V=eg(h,c,D,y))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,V=eg(a,B,e,C),L=p+I|0,z=K=V+K|0,IA=L=K>>>0>>0?L+1|0:L,BA=I=K+33554432|0,x=L=I>>>0<33554432?L+1|0:L,K=(I=L>>26)+W|0,W=L=(V=(67108863&L)<<6|BA>>>26)+gA|0,L=L>>>0>>0?K+1|0:K,gA=I=W+16777216|0,V=(33554431&(L=I>>>0<16777216?L+1|0:L))<<7|I>>>25,L=(L>>25)+T|0,L=(K=V+$|0)>>>0>>0?L+1|0:L,T=K=(I=K)+33554432|0,V=L=K>>>0<33554432?L+1|0:L,L=-67108864&K,i[A+8>>2]=I-L,I=eg(D,y,N,k),L=p,K=eg(g,n,t,E),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=eg(a,B,F,f),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=eg(o,Q,O,m),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=($=eg(e,C,Y,G))+I|0,I=p+L|0,L=X>>26,X=(Z=(67108863&X)<<6|Z>>>26)+K|0,K=(I=K>>>0<$>>>0?I+1|0:I)+L|0,L=K=X>>>0>>0?K+1|0:K,Z=K=(I=X)+16777216|0,X=L=K>>>0<16777216?L+1|0:L,L=-33554432&K,i[A+28>>2]=I-L,I=eg(o,Q,j,H),K=p,L=(q=eg(a,B,q,u))+I|0,I=p+K|0,I=L>>>0>>0?I+1|0:I,q=eg(F,f,_,l),K=p+I|0,K=(L=q+L|0)>>>0>>0?K+1|0:K,I=(q=eg(h,c,s,w))+L|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,K=eg(e,C,g,n),L=p+L|0,L=(L=(I=K+I|0)>>>0>>0?L+1|0:L)+(K=V>>26)|0,K=I=(V=(67108863&V)<<6|T>>>26)+I|0,I=L=I>>>0>>0?L+1|0:L,T=L=K+16777216|0,V=I=L>>>0<16777216?I+1|0:I,I=-33554432&L,i[A+12>>2]=K-I,q=A,I=eg(F,f,D,y),L=p,K=eg(g,n,g,n),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=eg(t,E,s,w),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=(j=eg(a,B,S,b))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,L=(j=eg(o,Q,Y,G))+K|0,K=p+I|0,K=L>>>0>>0?K+1|0:K,I=(AA=eg(e,C,j=AA,$=j>>31))+L|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,A=I,L=(I=X>>25)+L|0,L=(K=A+(X=(33554431&X)<<7|Z>>>25)|0)>>>0>>0?L+1|0:L,AA=K=(I=K)+33554432|0,X=L=K>>>0<33554432?L+1|0:L,L=-67108864&K,i[q+32>>2]=I-L,L=V>>25,K=(V=(33554431&V)<<7|T>>>25)+(v-(I=-67108864&M)|0)|0,I=L+(P-((I>>>0>v>>>0)+R|0)|0)|0,L=I=K>>>0>>0?I+1|0:I,V=I=K+33554432|0,I=((67108863&(L=I>>>0<33554432?L+1|0:L))<<6|I>>>26)+(QA=QA-(-33554432&J)|0)|0,i[q+20>>2]=I,I=-67108864&V,i[q+16>>2]=K-I,V=q,I=eg(t,E,F,f),K=p,L=(q=eg(N,k,d,U))+I|0,I=p+K|0,I=L>>>0>>0?I+1|0:I,K=(q=eg(D,y,O,m))+L|0,L=p+I|0,L=K>>>0>>0?L+1|0:L,I=(q=eg(a,B,Y,G))+K|0,K=p+L|0,K=I>>>0>>0?K+1|0:K,q=eg(o,Q,j,$),L=p+K|0,K=I=q+I|0,L=(I=I>>>0>>0?L+1|0:L)+(L=X>>26)|0,L=(K=(X=(67108863&X)<<6|AA>>>26)+K|0)>>>0>>0?L+1|0:L,X=K,I=L,I=(L=K+16777216|0)>>>0<16777216?I+1|0:I,K=-33554432&L,i[V+36>>2]=X-K,q=eg((33554431&I)<<7|L>>>25,I>>25,19,0),L=p+(IA-(((K=-67108864&BA)>>>0>z>>>0)+x|0)|0)|0,K=I=q+(z-K|0)|0,I=I>>>0>>0?L+1|0:L,I=(W-(-33554432&gA)|0)+((67108863&(I=(L=K+33554432|0)>>>0<33554432?I+1|0:I))<<6|L>>>26)|0,i[V+4>>2]=I,A=-67108864&L,i[V>>2]=K-A}function Y(A,I,g){var B,Q=0,C=0,E=0,n=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0;for(h=B=h-2048|0,Yg(B+1024|0,I),QI(B+1024|0,A),Yg(B,B+1024|0),QI(B,g),I=0;n=i[(Q=f=(B+1024|0)+(64|(A=F<<7))|0)>>2],e=i[(E=t=(B+1024|0)+(96|A)|0)>>2],E=i[E+4>>2],a=n,w=i[Q+4>>2],o=e,Q=A+(B+1024|0)|0,r=i[(n=(B+1024|0)+(32|A)|0)>>2],e=i[n+4>>2],o=ug(o^(l=rI(i[Q>>2],i[Q+4>>2],r,e)),(C=E)^(E=p),32),e=ug(a=(s=rI(a,w,o,C=p))^r,e^(r=p),24),P=ug((m=rI(l,a=E,e,E=p))^o,(y=p)^C,16),E=ug(e^(R=rI(s,r,P,S=p)),(N=p)^E,63),e=p,o=i[(r=(B+1024|0)+(104|A)|0)>>2],s=i[r+4>>2],H=i[(C=l=(B+1024|0)+(72|A)|0)>>2],c=i[C+4>>2],G=ug((G=o)^(k=rI(u=i[(C=o=(B+1024|0)+(8|A)|0)>>2],w=i[C+4>>2],U=i[(C=(B+1024|0)+(40|A)|0)>>2],a=i[C+4>>2])),(w=s)^(s=p),32),a=ug(c=(u=rI(H,c,G,w=p))^U,a^(U=p),24),V=ug((M=rI(k,c=s,a,s=p))^G,(J=p)^w,16),s=ug(a^(O=rI(u,U,V,j=p)),(z=p)^s,63),a=p,G=i[(k=U=(B+1024|0)+(112|A)|0)>>2],u=i[k+4>>2],v=i[(k=(B+1024|0)+(80|A)|0)>>2],D=i[k+4>>2],H=G,G=(B+1024|0)+(16|A)|0,Y=i[(b=w=(B+1024|0)+(48|A)|0)>>2],b=i[b+4>>2],H=ug(H^(d=rI(i[G>>2],i[G+4>>2],Y,b)),(c=u)^(u=p),32),b=ug(D=(c=rI(v,D,H,_=p))^Y,b^(Y=p),24),IA=ug(($=rI(d,D=u,b,u=p))^H,(AA=p)^_,16),u=ug(b^(W=rI(c,Y,IA,gA=p)),(q=p)^u,63),b=p,H=i[(Y=(B+1024|0)+(120|A)|0)>>2],_=i[Y+4>>2],BA=i[(c=d=(B+1024|0)+(88|A)|0)>>2],X=i[c+4>>2],L=ug((v=H)^(T=rI(Z=i[(c=H=(B+1024|0)+(24|A)|0)>>2],D=i[c+4>>2],x=i[(A=(B+1024|0)+(56|A)|0)>>2],c=i[A+4>>2])),(D=_)^(_=p),32),c=ug(D=(X=rI(BA,X,L,K=p))^x,c^(x=p),24),v=x,L=ug((x=rI(T,D=_,c,_=p))^L,(T=p)^K,16),_=ug(c^(X=rI(X,v,L,K=p)),(Z=p)^_,63),c=p,v=W,D=q,W=ug(L^(m=rI(m,y,s,a)),K^(y=p),32),s=ug((L=rI(v,D,W,q=p))^s,(K=p)^a,24),a=rI(a=m,y,s,m=p),y=p,i[Q>>2]=a,i[Q+4>>2]=y,Q=ug(a^W,q^y,16),a=p,i[Y>>2]=Q,i[Y+4>>2]=a,Q=rI(L,K,Q,a),a=p,i[k>>2]=Q,i[k+4>>2]=a,QA=C,CA=ug(Q^s,a^m,63),i[QA>>2]=CA,i[C+4>>2]=p,y=u,a=ug(P^(C=rI(M,J,u,b)),S^(s=p),32),Q=ug(y^(u=rI(X,Z,a,k=p)),(Q=b)^(b=p),24),C=rI(C,y=s,Q,s=p),Y=p,i[o>>2]=C,i[o+4>>2]=Y,o=ug(C^a,k^Y,16),C=p,i[t>>2]=o,i[t+4>>2]=C,t=rI(u,b,o,C),i[d>>2]=t,o=p,i[d+4>>2]=o,QA=w,CA=ug(Q^t,o^s,63),i[QA>>2]=CA,i[w+4>>2]=p,Q=rI($,AA,_,c),a=rI(R,N,C=ug(V^Q,j^(o=p),32),s=p),Q=rI(Q,w=o,t=ug(a^_,(k=p)^c,24),o=p),u=w=p,i[G>>2]=Q,i[G+4>>2]=u,Q=ug(Q^C,s^u,16),C=p,i[r>>2]=Q,i[r+4>>2]=C,Q=rI(a,k,Q,C),i[f>>2]=Q,C=f,f=p,i[C+4>>2]=f,QA=A,CA=ug(Q^t,f^o,63),i[QA>>2]=CA,i[A+4>>2]=p,C=E,Q=ug(IA^(f=rI(x,T,E,e)),gA^(t=p),32),A=ug(C^(r=rI(O,z,Q,E=p)),(A=e)^(e=p),24),f=rI(f,C=t,A,t=p),C=o=p,i[H>>2]=f,i[H+4>>2]=C,f=ug(Q^f,E^C,16),Q=p,i[U>>2]=f,i[U+4>>2]=Q,f=rI(r,e,f,Q),i[l>>2]=f,Q=p,i[l+4>>2]=Q,QA=n,CA=ug(A^f,Q^t,63),i[QA>>2]=CA,i[n+4>>2]=p,8!=(0|(F=F+1|0)););for(;F=i[768+(A=(t=I<<4)+(B+1024|0)|0)>>2],f=i[A+772>>2],a=i[(Q=A+512|0)>>2],o=i[Q+4>>2],C=F,F=i[A+256>>2],Q=i[A+260>>2],E=ug(C^(n=rI(i[A>>2],i[A+4>>2],F,Q)),(E=f)^(f=p),32),Q=ug(C=(r=rI(a,o,E,e=p))^F,Q^(F=p),24),w=F,s=ug((o=rI(n,f,Q,F=p))^E,(C=p)^e,16),F=ug(Q^(U=rI(r,w,s,a=p)),(k=p)^F,63),f=p,Q=i[A+780>>2],u=i[A+520>>2],y=i[A+524>>2],r=ug((G=i[A+776>>2])^(e=rI(w=i[(n=t=(B+1024|0)+(8|t)|0)>>2],e=i[n+4>>2],n=i[A+264>>2],E=i[A+268>>2])),(w=Q)^(Q=p),32),E=ug(w=(G=rI(u,y,r,l=p))^n,E^(n=p),24),y=G,u=ug((G=rI(e,w=Q,E,Q=p))^r,(w=p)^l,16),Q=ug(E^(Y=rI(y,n,u,b=p)),(d=p)^Q,63),n=p,E=i[A+900>>2],D=i[A+640>>2],m=i[A+644>>2],c=i[A+896>>2],e=i[A+384>>2],r=i[A+388>>2],H=ug(c^(l=rI(i[A+128>>2],i[A+132>>2],e,r)),(y=E)^(E=p),32),r=ug(y=(c=rI(D,m,H,_=p))^e,r^(e=p),24),D=c,c=ug((c=H)^(H=rI(l,y=E,r,E=p)),(y=_)^(_=p),16),E=ug(r^(y=rI(D,e,c,m=p)),(P=p)^E,63),e=p,r=i[A+908>>2],q=i[A+648>>2],j=i[A+652>>2],v=i[A+904>>2],l=i[A+392>>2],S=i[A+396>>2],N=ug(v^(R=rI(i[A+136>>2],i[A+140>>2],l,S)),(D=r)^(r=p),32),v=S=ug(D=(J=rI(q,j,N,M=p))^l,S^(l=p),24),N=ug((S=rI(R,D=r,S,r=p))^N,(R=p)^M,16),r=ug(v^(J=rI(J,l,N,M=p)),(V=p)^r,63),l=p,v=y,D=P,y=ug(N^(o=rI(o,C,Q,n)),M^(C=p),32),Q=ug((N=rI(v,D,y,P=p))^Q,(M=p)^n,24),n=rI(n=o,C,Q,o=p),C=p,i[A>>2]=n,i[A+4>>2]=C,n=ug(n^y,P^C,16),C=p,i[A+904>>2]=n,i[A+908>>2]=C,n=rI(N,M,n,C),C=p,i[A+640>>2]=n,i[A+644>>2]=C,QA=A,CA=ug(Q^n,o^C,63),i[QA+264>>2]=CA,i[A+268>>2]=p,y=E,n=rI(G,w,E,e),s=rI(J,V,o=ug(s^n,a^(E=p),32),C=p),n=rI(n,a=E,Q=ug(y^s,(Q=e)^(e=p),24),E=p),a=p,i[t>>2]=n,i[t+4>>2]=a,t=ug(n^o,C^a,16),n=p,i[A+768>>2]=t,i[A+772>>2]=n,t=rI(s,e,t,n),i[A+648>>2]=t,n=p,i[A+652>>2]=n,QA=A,CA=ug(Q^t,n^E,63),i[QA+384>>2]=CA,i[A+388>>2]=p,o=r,E=ug(u^(Q=rI(H,_,r,l)),b^(n=p),32),t=ug(o^(r=rI(U,k,E,e=p)),(C=l)^(l=p),24),Q=rI(Q,C=n,t,n=p),C=o=p,i[A+128>>2]=Q,i[A+132>>2]=C,Q=ug(Q^E,C^e,16),E=p,i[A+776>>2]=Q,i[A+780>>2]=E,Q=rI(r,l,Q,E),i[A+512>>2]=Q,E=p,i[A+516>>2]=E,QA=A,CA=ug(Q^t,n^E,63),i[QA+392>>2]=CA,i[A+396>>2]=p,t=rI(S,R,F,f),e=rI(Y,d,n=ug(c^t,m^(Q=p),32),E=p),f=rI(C=t,Q,F=ug(e^F,(r=p)^f,24),t=p),Q=p,i[A+136>>2]=f,i[A+140>>2]=Q,f=ug(n^f,E^Q,16),Q=p,i[A+896>>2]=f,i[A+900>>2]=Q,f=rI(e,r,f,Q),i[A+520>>2]=f,Q=p,i[A+524>>2]=Q,QA=A,CA=ug(f^F,Q^t,63),i[QA+256>>2]=CA,i[A+260>>2]=p,8!=(0|(I=I+1|0)););Yg(g,B),QI(g,B+1024|0),h=B+2048|0}function b(A,I,g){var B,Q=0,C=0,E=0,n=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0;for(h=B=h-2048|0,Yg(B+1024|0,I),QI(B+1024|0,A),Yg(B,B+1024|0),I=0;n=i[(Q=f=(B+1024|0)+(64|(A=F<<7))|0)>>2],e=i[(E=t=(B+1024|0)+(96|A)|0)>>2],E=i[E+4>>2],a=n,w=i[Q+4>>2],o=e,Q=A+(B+1024|0)|0,r=i[(n=(B+1024|0)+(32|A)|0)>>2],e=i[n+4>>2],o=ug(o^(l=rI(i[Q>>2],i[Q+4>>2],r,e)),(C=E)^(E=p),32),e=ug(a=(s=rI(a,w,o,C=p))^r,e^(r=p),24),P=ug((m=rI(l,a=E,e,E=p))^o,(y=p)^C,16),E=ug(e^(R=rI(s,r,P,S=p)),(N=p)^E,63),e=p,o=i[(r=(B+1024|0)+(104|A)|0)>>2],s=i[r+4>>2],H=i[(C=l=(B+1024|0)+(72|A)|0)>>2],c=i[C+4>>2],G=ug((G=o)^(k=rI(u=i[(C=o=(B+1024|0)+(8|A)|0)>>2],w=i[C+4>>2],U=i[(C=(B+1024|0)+(40|A)|0)>>2],a=i[C+4>>2])),(w=s)^(s=p),32),a=ug(c=(u=rI(H,c,G,w=p))^U,a^(U=p),24),V=ug((M=rI(k,c=s,a,s=p))^G,(J=p)^w,16),s=ug(a^(O=rI(u,U,V,j=p)),(z=p)^s,63),a=p,G=i[(k=U=(B+1024|0)+(112|A)|0)>>2],u=i[k+4>>2],v=i[(k=(B+1024|0)+(80|A)|0)>>2],D=i[k+4>>2],H=G,G=(B+1024|0)+(16|A)|0,Y=i[(b=w=(B+1024|0)+(48|A)|0)>>2],b=i[b+4>>2],H=ug(H^(d=rI(i[G>>2],i[G+4>>2],Y,b)),(c=u)^(u=p),32),b=ug(D=(c=rI(v,D,H,_=p))^Y,b^(Y=p),24),IA=ug(($=rI(d,D=u,b,u=p))^H,(AA=p)^_,16),u=ug(b^(W=rI(c,Y,IA,gA=p)),(q=p)^u,63),b=p,H=i[(Y=(B+1024|0)+(120|A)|0)>>2],_=i[Y+4>>2],BA=i[(c=d=(B+1024|0)+(88|A)|0)>>2],X=i[c+4>>2],L=ug((v=H)^(T=rI(Z=i[(c=H=(B+1024|0)+(24|A)|0)>>2],D=i[c+4>>2],x=i[(A=(B+1024|0)+(56|A)|0)>>2],c=i[A+4>>2])),(D=_)^(_=p),32),c=ug(D=(X=rI(BA,X,L,K=p))^x,c^(x=p),24),v=x,L=ug((x=rI(T,D=_,c,_=p))^L,(T=p)^K,16),_=ug(c^(X=rI(X,v,L,K=p)),(Z=p)^_,63),c=p,v=W,D=q,W=ug(L^(m=rI(m,y,s,a)),K^(y=p),32),s=ug((L=rI(v,D,W,q=p))^s,(K=p)^a,24),a=rI(a=m,y,s,m=p),y=p,i[Q>>2]=a,i[Q+4>>2]=y,Q=ug(a^W,q^y,16),a=p,i[Y>>2]=Q,i[Y+4>>2]=a,Q=rI(L,K,Q,a),a=p,i[k>>2]=Q,i[k+4>>2]=a,QA=C,CA=ug(Q^s,a^m,63),i[QA>>2]=CA,i[C+4>>2]=p,y=u,a=ug(P^(C=rI(M,J,u,b)),S^(s=p),32),Q=ug(y^(u=rI(X,Z,a,k=p)),(Q=b)^(b=p),24),C=rI(C,y=s,Q,s=p),Y=p,i[o>>2]=C,i[o+4>>2]=Y,o=ug(C^a,k^Y,16),C=p,i[t>>2]=o,i[t+4>>2]=C,t=rI(u,b,o,C),i[d>>2]=t,o=p,i[d+4>>2]=o,QA=w,CA=ug(Q^t,o^s,63),i[QA>>2]=CA,i[w+4>>2]=p,Q=rI($,AA,_,c),a=rI(R,N,C=ug(V^Q,j^(o=p),32),s=p),Q=rI(Q,w=o,t=ug(a^_,(k=p)^c,24),o=p),u=w=p,i[G>>2]=Q,i[G+4>>2]=u,Q=ug(Q^C,s^u,16),C=p,i[r>>2]=Q,i[r+4>>2]=C,Q=rI(a,k,Q,C),i[f>>2]=Q,C=f,f=p,i[C+4>>2]=f,QA=A,CA=ug(Q^t,f^o,63),i[QA>>2]=CA,i[A+4>>2]=p,C=E,Q=ug(IA^(f=rI(x,T,E,e)),gA^(t=p),32),A=ug(C^(r=rI(O,z,Q,E=p)),(A=e)^(e=p),24),f=rI(f,C=t,A,t=p),C=o=p,i[H>>2]=f,i[H+4>>2]=C,f=ug(Q^f,E^C,16),Q=p,i[U>>2]=f,i[U+4>>2]=Q,f=rI(r,e,f,Q),i[l>>2]=f,Q=p,i[l+4>>2]=Q,QA=n,CA=ug(A^f,Q^t,63),i[QA>>2]=CA,i[n+4>>2]=p,8!=(0|(F=F+1|0)););for(;F=i[768+(A=(t=I<<4)+(B+1024|0)|0)>>2],f=i[A+772>>2],a=i[(Q=A+512|0)>>2],o=i[Q+4>>2],C=F,F=i[A+256>>2],Q=i[A+260>>2],E=ug(C^(n=rI(i[A>>2],i[A+4>>2],F,Q)),(E=f)^(f=p),32),Q=ug(C=(r=rI(a,o,E,e=p))^F,Q^(F=p),24),w=F,s=ug((o=rI(n,f,Q,F=p))^E,(C=p)^e,16),F=ug(Q^(U=rI(r,w,s,a=p)),(k=p)^F,63),f=p,Q=i[A+780>>2],u=i[A+520>>2],y=i[A+524>>2],r=ug((G=i[A+776>>2])^(e=rI(w=i[(n=t=(B+1024|0)+(8|t)|0)>>2],e=i[n+4>>2],n=i[A+264>>2],E=i[A+268>>2])),(w=Q)^(Q=p),32),E=ug(w=(G=rI(u,y,r,l=p))^n,E^(n=p),24),y=G,u=ug((G=rI(e,w=Q,E,Q=p))^r,(w=p)^l,16),Q=ug(E^(Y=rI(y,n,u,b=p)),(d=p)^Q,63),n=p,E=i[A+900>>2],D=i[A+640>>2],m=i[A+644>>2],c=i[A+896>>2],e=i[A+384>>2],r=i[A+388>>2],H=ug(c^(l=rI(i[A+128>>2],i[A+132>>2],e,r)),(y=E)^(E=p),32),r=ug(y=(c=rI(D,m,H,_=p))^e,r^(e=p),24),D=c,c=ug((c=H)^(H=rI(l,y=E,r,E=p)),(y=_)^(_=p),16),E=ug(r^(y=rI(D,e,c,m=p)),(P=p)^E,63),e=p,r=i[A+908>>2],q=i[A+648>>2],j=i[A+652>>2],v=i[A+904>>2],l=i[A+392>>2],S=i[A+396>>2],N=ug(v^(R=rI(i[A+136>>2],i[A+140>>2],l,S)),(D=r)^(r=p),32),v=S=ug(D=(J=rI(q,j,N,M=p))^l,S^(l=p),24),N=ug((S=rI(R,D=r,S,r=p))^N,(R=p)^M,16),r=ug(v^(J=rI(J,l,N,M=p)),(V=p)^r,63),l=p,v=y,D=P,y=ug(N^(o=rI(o,C,Q,n)),M^(C=p),32),Q=ug((N=rI(v,D,y,P=p))^Q,(M=p)^n,24),n=rI(n=o,C,Q,o=p),C=p,i[A>>2]=n,i[A+4>>2]=C,n=ug(n^y,P^C,16),C=p,i[A+904>>2]=n,i[A+908>>2]=C,n=rI(N,M,n,C),C=p,i[A+640>>2]=n,i[A+644>>2]=C,QA=A,CA=ug(Q^n,o^C,63),i[QA+264>>2]=CA,i[A+268>>2]=p,y=E,n=rI(G,w,E,e),s=rI(J,V,o=ug(s^n,a^(E=p),32),C=p),n=rI(n,a=E,Q=ug(y^s,(Q=e)^(e=p),24),E=p),a=p,i[t>>2]=n,i[t+4>>2]=a,t=ug(n^o,C^a,16),n=p,i[A+768>>2]=t,i[A+772>>2]=n,t=rI(s,e,t,n),i[A+648>>2]=t,n=p,i[A+652>>2]=n,QA=A,CA=ug(Q^t,n^E,63),i[QA+384>>2]=CA,i[A+388>>2]=p,o=r,E=ug(u^(Q=rI(H,_,r,l)),b^(n=p),32),t=ug(o^(r=rI(U,k,E,e=p)),(C=l)^(l=p),24),Q=rI(Q,C=n,t,n=p),C=o=p,i[A+128>>2]=Q,i[A+132>>2]=C,Q=ug(Q^E,C^e,16),E=p,i[A+776>>2]=Q,i[A+780>>2]=E,Q=rI(r,l,Q,E),i[A+512>>2]=Q,E=p,i[A+516>>2]=E,QA=A,CA=ug(Q^t,n^E,63),i[QA+392>>2]=CA,i[A+396>>2]=p,t=rI(S,R,F,f),e=rI(Y,d,n=ug(c^t,m^(Q=p),32),E=p),f=rI(C=t,Q,F=ug(e^F,(r=p)^f,24),t=p),Q=p,i[A+136>>2]=f,i[A+140>>2]=Q,f=ug(n^f,E^Q,16),Q=p,i[A+896>>2]=f,i[A+900>>2]=Q,f=rI(e,r,f,Q),i[A+520>>2]=f,Q=p,i[A+524>>2]=Q,QA=A,CA=ug(f^F,Q^t,63),i[QA+256>>2]=CA,i[A+260>>2]=p,8!=(0|(I=I+1|0)););Yg(g,B),QI(g,B+1024|0),h=B+2048|0}function m(A){var I=0,g=0,B=0,Q=0,C=0,E=0,n=0,r=0,o=0;A:if(A|=0){C=(B=A-8|0)+(A=-8&(I=i[A-4>>2]))|0;I:if(!(1&I)){if(!(3&I))break A;if((B=B-(I=i[B>>2])|0)>>>0>2])))return i[8963]=A,i[C+4>>2]=-2&I,i[B+4>>2]=1|A,void(i[A+B>>2]=A)}else{if(I>>>0<=255){if(Q=i[B+8>>2],I=I>>>3|0,(0|(g=i[B+12>>2]))==(0|Q)){r=35844,o=i[8961]&vI(-2,I),i[r>>2]=o;break I}i[Q+12>>2]=g,i[g+8>>2]=Q;break I}if(n=i[B+24>>2],(0|B)==(0|(I=i[B+12>>2])))if((g=i[(Q=B+20|0)>>2])||(g=i[(Q=B+16|0)>>2])){for(;E=Q,(g=i[(Q=(I=g)+20|0)>>2])||(Q=I+16|0,g=i[I+16>>2]););i[E>>2]=0}else I=0;else g=i[B+8>>2],i[g+12>>2]=I,i[I+8>>2]=g;if(!n)break I;Q=i[B+28>>2];g:{if(i[(g=36148+(Q<<2)|0)>>2]==(0|B)){if(i[g>>2]=I,I)break g;r=35848,o=i[8962]&vI(-2,Q),i[r>>2]=o;break I}if(i[n+(i[n+16>>2]==(0|B)?16:20)>>2]=I,!I)break I}if(i[I+24>>2]=n,(g=i[B+16>>2])&&(i[I+16>>2]=g,i[g+24>>2]=I),!(g=i[B+20>>2]))break I;i[I+20>>2]=g,i[g+24>>2]=I}}if(!(B>>>0>=C>>>0)&&1&(I=i[C+4>>2])){I:{if(!(2&I)){if(i[8967]==(0|C)){if(i[8967]=B,A=i[8964]+A|0,i[8964]=A,i[B+4>>2]=1|A,i[8966]!=(0|B))break A;return i[8963]=0,void(i[8966]=0)}if(i[8966]==(0|C))return i[8966]=B,A=i[8963]+A|0,i[8963]=A,i[B+4>>2]=1|A,void(i[A+B>>2]=A);A=(-8&I)+A|0;g:if(I>>>0<=255){if(I=I>>>3|0,(0|(g=i[C+8>>2]))==(0|(Q=i[C+12>>2]))){r=35844,o=i[8961]&vI(-2,I),i[r>>2]=o;break g}i[g+12>>2]=Q,i[Q+8>>2]=g}else{if(n=i[C+24>>2],(0|C)==(0|(I=i[C+12>>2])))if((g=i[(Q=C+20|0)>>2])||(g=i[(Q=C+16|0)>>2])){for(;E=Q,(g=i[(Q=(I=g)+20|0)>>2])||(Q=I+16|0,g=i[I+16>>2]););i[E>>2]=0}else I=0;else g=i[C+8>>2],i[g+12>>2]=I,i[I+8>>2]=g;if(n){Q=i[C+28>>2];B:{if(i[(g=36148+(Q<<2)|0)>>2]==(0|C)){if(i[g>>2]=I,I)break B;r=35848,o=i[8962]&vI(-2,Q),i[r>>2]=o;break g}if(i[n+(i[n+16>>2]==(0|C)?16:20)>>2]=I,!I)break g}i[I+24>>2]=n,(g=i[C+16>>2])&&(i[I+16>>2]=g,i[g+24>>2]=I),(g=i[C+20>>2])&&(i[I+20>>2]=g,i[g+24>>2]=I)}}if(i[B+4>>2]=1|A,i[A+B>>2]=A,i[8966]!=(0|B))break I;return void(i[8963]=A)}i[C+4>>2]=-2&I,i[B+4>>2]=1|A,i[A+B>>2]=A}if(A>>>0<=255)return I=35884+((A=A>>>3|0)<<3)|0,(g=i[8961])&(A=1<>2]:(i[8961]=A|g,A=I),i[I+8>>2]=B,i[A+12>>2]=B,i[B+12>>2]=I,void(i[B+8>>2]=A);Q=31,i[B+16>>2]=0,i[B+20>>2]=0,A>>>0<=16777215&&(I=A>>>8|0,I<<=E=I+1048320>>>16&8,Q=28+((I=((I<<=Q=I+520192>>>16&4)<<(g=I+245760>>>16&2)>>>15|0)-(g|Q|E)|0)<<1|A>>>I+21&1)|0),i[B+28>>2]=Q,E=36148+(Q<<2)|0;I:{g:{if((g=i[8962])&(I=1<>>1|0)|0),I=i[E>>2];;){if(g=I,(-8&i[I+4>>2])==(0|A))break g;if(I=Q>>>29|0,Q<<=1,!(I=i[16+(E=g+(4&I)|0)>>2]))break}i[E+16>>2]=B,i[B+24>>2]=g}else i[8962]=I|g,i[E>>2]=B,i[B+24>>2]=E;i[B+12>>2]=B,i[B+8>>2]=B;break I}A=i[g+8>>2],i[A+12>>2]=B,i[g+8>>2]=B,i[B+24>>2]=0,i[B+12>>2]=g,i[B+8>>2]=A}A=i[8969]-1|0,i[8969]=A||-1}}}function v(A,I){var g,B=0,Q=0,C=0,E=0,n=0,a=0,r=0;g=A+I|0;A:{I:if(!(1&(B=i[A+4>>2]))){if(!(3&B))break A;if(I=(B=i[A>>2])+I|0,(0|(A=A-B|0))==i[8966]){if(3==(3&(B=i[g+4>>2])))return i[8963]=I,i[g+4>>2]=-2&B,i[A+4>>2]=1|I,void(i[g>>2]=I)}else{if(B>>>0<=255){if(C=i[A+8>>2],B=B>>>3|0,(0|(Q=i[A+12>>2]))==(0|C)){a=35844,r=i[8961]&vI(-2,B),i[a>>2]=r;break I}i[C+12>>2]=Q,i[Q+8>>2]=C;break I}if(n=i[A+24>>2],(0|(B=i[A+12>>2]))==(0|A))if((Q=i[(C=A+20|0)>>2])||(Q=i[(C=A+16|0)>>2])){for(;E=C,(Q=i[(C=(B=Q)+20|0)>>2])||(C=B+16|0,Q=i[B+16>>2]););i[E>>2]=0}else B=0;else Q=i[A+8>>2],i[Q+12>>2]=B,i[B+8>>2]=Q;if(!n)break I;C=i[A+28>>2];g:{if(i[(Q=36148+(C<<2)|0)>>2]==(0|A)){if(i[Q>>2]=B,B)break g;a=35848,r=i[8962]&vI(-2,C),i[a>>2]=r;break I}if(i[n+(i[n+16>>2]==(0|A)?16:20)>>2]=B,!B)break I}if(i[B+24>>2]=n,(Q=i[A+16>>2])&&(i[B+16>>2]=Q,i[Q+24>>2]=B),!(Q=i[A+20>>2]))break I;i[B+20>>2]=Q,i[Q+24>>2]=B}}I:{if(!(2&(B=i[g+4>>2]))){if(i[8967]==(0|g)){if(i[8967]=A,I=i[8964]+I|0,i[8964]=I,i[A+4>>2]=1|I,i[8966]!=(0|A))break A;return i[8963]=0,void(i[8966]=0)}if(i[8966]==(0|g))return i[8966]=A,I=i[8963]+I|0,i[8963]=I,i[A+4>>2]=1|I,void(i[A+I>>2]=I);I=(-8&B)+I|0;g:if(B>>>0<=255){if(C=i[g+8>>2],B=B>>>3|0,(0|(Q=i[g+12>>2]))==(0|C)){a=35844,r=i[8961]&vI(-2,B),i[a>>2]=r;break g}i[C+12>>2]=Q,i[Q+8>>2]=C}else{if(n=i[g+24>>2],(0|g)==(0|(B=i[g+12>>2])))if((C=i[(Q=g+20|0)>>2])||(C=i[(Q=g+16|0)>>2])){for(;E=Q,(C=i[(Q=(B=C)+20|0)>>2])||(Q=B+16|0,C=i[B+16>>2]););i[E>>2]=0}else B=0;else Q=i[g+8>>2],i[Q+12>>2]=B,i[B+8>>2]=Q;if(n){C=i[g+28>>2];B:{if(i[(Q=36148+(C<<2)|0)>>2]==(0|g)){if(i[Q>>2]=B,B)break B;a=35848,r=i[8962]&vI(-2,C),i[a>>2]=r;break g}if(i[n+(i[n+16>>2]==(0|g)?16:20)>>2]=B,!B)break g}i[B+24>>2]=n,(Q=i[g+16>>2])&&(i[B+16>>2]=Q,i[Q+24>>2]=B),(Q=i[g+20>>2])&&(i[B+20>>2]=Q,i[Q+24>>2]=B)}}if(i[A+4>>2]=1|I,i[A+I>>2]=I,i[8966]!=(0|A))break I;return void(i[8963]=I)}i[g+4>>2]=-2&B,i[A+4>>2]=1|I,i[A+I>>2]=I}if(I>>>0<=255)return B=35884+((I=I>>>3|0)<<3)|0,(Q=i[8961])&(I=1<>2]:(i[8961]=I|Q,I=B),i[B+8>>2]=A,i[I+12>>2]=A,i[A+12>>2]=B,void(i[A+8>>2]=I);C=31,i[A+16>>2]=0,i[A+20>>2]=0,I>>>0<=16777215&&(B=I>>>8|0,B<<=E=B+1048320>>>16&8,C=28+((B=((B<<=C=B+520192>>>16&4)<<(Q=B+245760>>>16&2)>>>15|0)-(Q|C|E)|0)<<1|I>>>B+21&1)|0),i[A+28>>2]=C,E=36148+(C<<2)|0;I:{if((Q=i[8962])&(B=1<>>1|0)|0),B=i[E>>2];;){if(Q=B,(-8&i[B+4>>2])==(0|I))break I;if(B=C>>>29|0,C<<=1,!(B=i[16+(E=Q+(4&B)|0)>>2]))break}i[E+16>>2]=A,i[A+24>>2]=Q}else i[8962]=B|Q,i[E>>2]=A,i[A+24>>2]=E;return i[A+12>>2]=A,void(i[A+8>>2]=A)}I=i[Q+8>>2],i[I+12>>2]=A,i[Q+8>>2]=A,i[A+24>>2]=0,i[A+12>>2]=Q,i[A+8>>2]=I}}function U(A,I,g,B,Q){var E,a,r,o,e,t,f,c,y,s,w,D,u,p,l,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0;for(h=E=h+-64|0,a=i[A+60>>2],r=i[A+56>>2],K=i[A+52>>2],x=i[A+48>>2],o=i[A+44>>2],e=i[A+40>>2],t=i[A+36>>2],f=i[A+32>>2],c=i[A+28>>2],y=i[A+24>>2],s=i[A+20>>2],w=i[A+16>>2],D=i[A+12>>2],u=i[A+8>>2],p=i[A+4>>2],l=i[A>>2];;){if(!Q&B>>>0>63|Q)k=g;else{if(_=0,k=F=EA(E,0,64),B|Q)for(;C[F+_|0]=n[I+_|0],!Q&(_=_+1|0)>>>0>>0|Q;);I=k,V=g}for(q=20,m=l,v=p,U=u,S=D,_=w,F=s,g=y,N=c,H=f,Y=t,M=e,d=a,P=r,G=K,R=x,L=o;b=_,m=Hg((_=_+m|0)^R,16),R=Hg(b^(H=m+H|0),12),b=H,H=Hg((H=m)^(m=_+R|0),8),_=Hg(R^(J=b+H|0),7),b=F,v=Hg((F=F+v|0)^G,16),G=Hg(b^(Y=v+Y|0),12),b=Y,Y=Hg((Y=v)^(v=F+G|0),8),F=Hg(G^(X=b+Y|0),7),G=g,U=Hg((g=g+U|0)^P,16),b=P=Hg(G^(M=U+M|0),12),P=Hg((G=U)^(U=g+P|0),8),g=Hg(b^(M=P+M|0),7),G=N,S=Hg((N=N+S|0)^d,16),L=G=Hg(G^(d=S+L|0),12),b=d,d=Hg((d=S)^(S=N+G|0),8),N=Hg(L^(G=b+d|0),7),b=M,M=Hg((m=F+m|0)^d,16),F=Hg((R=b+M|0)^F,12),d=Hg(M^(m=F+m|0),8),F=Hg(F^(M=R+d|0),7),H=Hg((v=g+v|0)^H,16),g=Hg((G=H+G|0)^g,12),R=Hg(H^(v=g+v|0),8),g=Hg(g^(L=G+R|0),7),H=Hg((U=N+U|0)^Y,16),N=Hg((Y=H+J|0)^N,12),G=Hg(H^(U=N+U|0),8),N=Hg(N^(H=Y+G|0),7),Y=Hg((S=_+S|0)^P,16),_=Hg((J=Y+X|0)^_,12),P=Hg(Y^(S=_+S|0),8),_=Hg(_^(Y=J+P|0),7),q=q-2|0;);if(q=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,J=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,X=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,W=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,T=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,j=n[I+24|0]|n[I+25|0]<<8|n[I+26|0]<<16|n[I+27|0]<<24,Z=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,O=n[I+32|0]|n[I+33|0]<<8|n[I+34|0]<<16|n[I+35|0]<<24,z=n[I+36|0]|n[I+37|0]<<8|n[I+38|0]<<16|n[I+39|0]<<24,$=n[I+40|0]|n[I+41|0]<<8|n[I+42|0]<<16|n[I+43|0]<<24,AA=n[I+44|0]|n[I+45|0]<<8|n[I+46|0]<<16|n[I+47|0]<<24,IA=n[I+48|0]|n[I+49|0]<<8|n[I+50|0]<<16|n[I+51|0]<<24,gA=n[I+52|0]|n[I+53|0]<<8|n[I+54|0]<<16|n[I+55|0]<<24,BA=n[I+56|0]|n[I+57|0]<<8|n[I+58|0]<<16|n[I+59|0]<<24,b=n[I+60|0]|n[I+61|0]<<8|n[I+62|0]<<16|n[I+63|0]<<24,xI(k,m+l^(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24)),xI(k+4|0,v+p^q),xI(k+8|0,U+u^J),xI(k+12|0,S+D^X),xI(k+16|0,_+w^W),xI(k+20|0,F+s^T),xI(k+24|0,g+y^j),xI(k+28|0,N+c^Z),xI(k+32|0,H+f^O),xI(k+36|0,Y+t^z),xI(k+40|0,$^M+e),xI(k+44|0,AA^L+o),xI(k+48|0,IA^R+x),xI(k+52|0,gA^G+K),xI(k+56|0,BA^P+r),xI(k+60|0,b^d+a),K=((x=(g=x)+1|0)>>>0>>0)+K|0,!Q&B>>>0<=64){if(!(!B|!Q&B>>>0>63|0!=(0|Q)))for(F=0;C[F+V|0]=n[k+F|0],(0|B)!=(0|(F=F+1|0)););i[A+52>>2]=K,i[A+48>>2]=x,h=E- -64|0;break}I=I- -64|0,g=k- -64|0,Q=Q-1|0,Q=(B=B+-64|0)>>>0<4294967232?Q+1|0:Q}}function S(A,I,g,B){var Q=0,C=0,E=0,a=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0;if(c=i[A+36>>2],a=i[A+32>>2],E=i[A+28>>2],C=i[A+24>>2],o=i[A+20>>2],!B&g>>>0>=16|B)for(H=!n[A+80|0]<<24,s=i[A+4>>2],Y=r(s,5),D=i[A+8>>2],_=r(D,5),G=i[A+12>>2],k=r(G,5),Q=i[A+16>>2],u=r(Q,5),b=Q,w=i[A>>2];Q=eg(e=((n[I+3|0]|n[I+4|0]<<8|n[I+5|0]<<16|n[I+6|0]<<24)>>>2&67108863)+C|0,0,G,0),t=p,C=(y=eg(o=(67108863&(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24))+o|0,0,b,0))+Q|0,Q=p+t|0,Q=C>>>0>>0?Q+1|0:Q,f=C,C=eg(t=((n[I+6|0]|n[I+7|0]<<8|n[I+8|0]<<16|n[I+9|0]<<24)>>>4&67108863)+E|0,0,D,0),Q=p+Q|0,Q=C>>>0>(E=f+C|0)>>>0?Q+1|0:Q,C=E,E=eg(y=((n[I+9|0]|n[I+10|0]<<8|n[I+11|0]<<16|n[I+12|0]<<24)>>>6|0)+a|0,0,s,0),Q=p+Q|0,Q=E>>>0>(a=C+E|0)>>>0?Q+1|0:Q,C=a,a=eg(h=c+H+((n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24)>>>8)|0,0,w,0),Q=p+Q|0,m=c=C+a|0,c=a>>>0>c>>>0?Q+1|0:Q,Q=eg(e,0,D,0),E=p,a=(C=eg(o,0,G,0))+Q|0,Q=p+E|0,Q=C>>>0>a>>>0?Q+1|0:Q,E=eg(t,0,s,0),Q=p+Q|0,Q=E>>>0>(a=E+a|0)>>>0?Q+1|0:Q,E=eg(y,0,w,0),Q=p+Q|0,Q=E>>>0>(a=E+a|0)>>>0?Q+1|0:Q,E=eg(h,0,u,0),Q=p+Q|0,v=a=E+a|0,a=E>>>0>a>>>0?Q+1|0:Q,Q=eg(e,0,s,0),C=p,E=(l=eg(o,0,D,0))+Q|0,Q=p+C|0,Q=E>>>0>>0?Q+1|0:Q,C=eg(t,0,w,0),Q=p+Q|0,Q=C>>>0>(E=C+E|0)>>>0?Q+1|0:Q,C=eg(y,0,u,0),Q=p+Q|0,Q=C>>>0>(E=C+E|0)>>>0?Q+1|0:Q,C=eg(h,0,k,0),Q=p+Q|0,l=E=C+E|0,E=C>>>0>E>>>0?Q+1|0:Q,Q=eg(e,0,w,0),f=p,C=(F=eg(o,0,s,0))+Q|0,Q=p+f|0,Q=C>>>0>>0?Q+1|0:Q,f=eg(t,0,u,0),Q=p+Q|0,Q=(C=f+C|0)>>>0>>0?Q+1|0:Q,f=eg(y,0,k,0),Q=p+Q|0,Q=(C=f+C|0)>>>0>>0?Q+1|0:Q,f=eg(h,0,_,0),Q=p+Q|0,Q=(C=f+C|0)>>>0>>0?Q+1|0:Q,f=C,C=Q,Q=eg(e,0,u,0),F=p,e=(o=eg(o,0,w,0))+Q|0,Q=p+F|0,Q=e>>>0>>0?Q+1|0:Q,o=eg(t,0,k,0),Q=p+Q|0,Q=(e=o+e|0)>>>0>>0?Q+1|0:Q,o=eg(y,0,_,0),Q=p+Q|0,Q=(e=o+e|0)>>>0>>0?Q+1|0:Q,o=eg(h,0,Y,0),Q=p+Q|0,Q=(e=o+e|0)>>>0>>0?Q+1|0:Q,o=e,t=(67108863&Q)<<6|e>>>26,Q=C,t=(67108863&(Q=(e=t+f|0)>>>0>>0?Q+1|0:Q))<<6|(C=e)>>>26,Q=E,Q=(C=t+l|0)>>>0>>0?Q+1|0:Q,t=C,C=(67108863&Q)<<6|C>>>26,Q=a,y=E=C+v|0,E=(67108863&(Q=C>>>0>E>>>0?Q+1|0:Q))<<6|E>>>26,Q=c,c=a=E+m|0,C=(67108863&e)+((Q=r((67108863&(Q=E>>>0>a>>>0?Q+1|0:Q))<<6|a>>>26,5)+(67108863&o)|0)>>>26|0)|0,E=67108863&t,a=67108863&y,c&=67108863,o=67108863&Q,I=I+16|0,!(B=B-(g>>>0<16)|0)&(g=g-16|0)>>>0>15|B;);i[A+20>>2]=o,i[A+36>>2]=c,i[A+32>>2]=a,i[A+28>>2]=E,i[A+24>>2]=C}function N(A,I,g){var B,Q,E,i,a=0,r=0,o=0,e=0,t=0;return h=E=h-160|0,mI(I,g,32,0),C[0|I]=248&n[0|I],C[I+31|0]=63&n[I+31|0]|64,CA(E,I),nI(A,E),r=n[(Q=g)+8|0]|n[Q+9|0]<<8|n[Q+10|0]<<16|n[Q+11|0]<<24,a=n[Q+12|0]|n[Q+13|0]<<8|n[Q+14|0]<<16|n[Q+15|0]<<24,o=n[Q+16|0]|n[Q+17|0]<<8|n[Q+18|0]<<16|n[Q+19|0]<<24,e=n[Q+20|0]|n[Q+21|0]<<8|n[Q+22|0]<<16|n[Q+23|0]<<24,t=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,g=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,B=I,i=n[Q+28|0]|n[Q+29|0]<<8|n[Q+30|0]<<16|n[Q+31|0]<<24,I=n[Q+24|0]|n[Q+25|0]<<8|n[Q+26|0]<<16|n[Q+27|0]<<24,C[B+24|0]=I,C[B+25|0]=I>>>8,C[B+26|0]=I>>>16,C[B+27|0]=I>>>24,C[B+28|0]=i,C[B+29|0]=i>>>8,C[B+30|0]=i>>>16,C[B+31|0]=i>>>24,C[B+16|0]=o,C[B+17|0]=o>>>8,C[B+18|0]=o>>>16,C[B+19|0]=o>>>24,C[B+20|0]=e,C[B+21|0]=e>>>8,C[B+22|0]=e>>>16,C[B+23|0]=e>>>24,C[B+8|0]=r,C[B+9|0]=r>>>8,C[B+10|0]=r>>>16,C[B+11|0]=r>>>24,C[B+12|0]=a,C[B+13|0]=a>>>8,C[B+14|0]=a>>>16,C[B+15|0]=a>>>24,C[0|B]=t,C[B+1|0]=t>>>8,C[B+2|0]=t>>>16,C[B+3|0]=t>>>24,C[B+4|0]=g,C[B+5|0]=g>>>8,C[B+6|0]=g>>>16,C[B+7|0]=g>>>24,o=n[(a=A)+8|0]|n[a+9|0]<<8|n[a+10|0]<<16|n[a+11|0]<<24,e=n[a+12|0]|n[a+13|0]<<8|n[a+14|0]<<16|n[a+15|0]<<24,t=n[a+16|0]|n[a+17|0]<<8|n[a+18|0]<<16|n[a+19|0]<<24,g=n[a+20|0]|n[a+21|0]<<8|n[a+22|0]<<16|n[a+23|0]<<24,I=n[0|a]|n[a+1|0]<<8|n[a+2|0]<<16|n[a+3|0]<<24,A=n[a+4|0]|n[a+5|0]<<8|n[a+6|0]<<16|n[a+7|0]<<24,r=n[a+28|0]|n[a+29|0]<<8|n[a+30|0]<<16|n[a+31|0]<<24,a=n[a+24|0]|n[a+25|0]<<8|n[a+26|0]<<16|n[a+27|0]<<24,C[B+56|0]=a,C[B+57|0]=a>>>8,C[B+58|0]=a>>>16,C[B+59|0]=a>>>24,C[B+60|0]=r,C[B+61|0]=r>>>8,C[B+62|0]=r>>>16,C[B+63|0]=r>>>24,C[B+48|0]=t,C[B+49|0]=t>>>8,C[B+50|0]=t>>>16,C[B+51|0]=t>>>24,C[B+52|0]=g,C[B+53|0]=g>>>8,C[B+54|0]=g>>>16,C[B+55|0]=g>>>24,C[B+40|0]=o,C[B+41|0]=o>>>8,C[B+42|0]=o>>>16,C[B+43|0]=o>>>24,C[B+44|0]=e,C[B+45|0]=e>>>8,C[B+46|0]=e>>>16,C[B+47|0]=e>>>24,C[B+32|0]=I,C[B+33|0]=I>>>8,C[B+34|0]=I>>>16,C[B+35|0]=I>>>24,C[B+36|0]=A,C[B+37|0]=A>>>8,C[B+38|0]=A>>>16,C[B+39|0]=A>>>24,h=E+160|0,0}function M(A,I,g){var B,Q=0,E=0,i=0;h=B=h+-64|0;A:{if(!(!g|g>>>0>=65)){if(Q=-1,!(n[A+80|0]|n[A+81|0]<<8|n[A+82|0]<<16|n[A+83|0]<<24|n[A+84|0]|n[A+85|0]<<8|n[A+86|0]<<16|n[A+87|0]<<24)){if(E=A,(Q=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)>>>0>=129){if(iA(A,128),l(A,i=A+96|0),Q=(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)-128|0,C[A+352|0]=Q,C[A+353|0]=Q>>>8,C[A+354|0]=Q>>>16,C[A+355|0]=Q>>>24,Q>>>0>=129)break A;X(i,A+224|0,Q),Q=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24}iA(E,Q),n[A+356|0]&&(C[A+88|0]=255,C[A+89|0]=255,C[A+90|0]=255,C[A+91|0]=255,C[A+92|0]=255,C[A+93|0]=255,C[A+94|0]=255,C[A+95|0]=255),C[A+80|0]=255,C[A+81|0]=255,C[A+82|0]=255,C[A+83|0]=255,C[A+84|0]=255,C[A+85|0]=255,C[A+86|0]=255,C[A+87|0]=255,EA((Q=A+96|0)+(E=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)|0,0,256-E|0),l(A,Q),tI(B,n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24,n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24),tI(8|B,n[A+8|0]|n[A+9|0]<<8|n[A+10|0]<<16|n[A+11|0]<<24,n[A+12|0]|n[A+13|0]<<8|n[A+14|0]<<16|n[A+15|0]<<24),tI(B+16|0,n[A+16|0]|n[A+17|0]<<8|n[A+18|0]<<16|n[A+19|0]<<24,n[A+20|0]|n[A+21|0]<<8|n[A+22|0]<<16|n[A+23|0]<<24),tI(B+24|0,n[A+24|0]|n[A+25|0]<<8|n[A+26|0]<<16|n[A+27|0]<<24,n[A+28|0]|n[A+29|0]<<8|n[A+30|0]<<16|n[A+31|0]<<24),tI(B+32|0,n[A+32|0]|n[A+33|0]<<8|n[A+34|0]<<16|n[A+35|0]<<24,n[A+36|0]|n[A+37|0]<<8|n[A+38|0]<<16|n[A+39|0]<<24),tI(B+40|0,n[A+40|0]|n[A+41|0]<<8|n[A+42|0]<<16|n[A+43|0]<<24,n[A+44|0]|n[A+45|0]<<8|n[A+46|0]<<16|n[A+47|0]<<24),tI(B+48|0,n[A+48|0]|n[A+49|0]<<8|n[A+50|0]<<16|n[A+51|0]<<24,n[A+52|0]|n[A+53|0]<<8|n[A+54|0]<<16|n[A+55|0]<<24),tI(B+56|0,n[A+56|0]|n[A+57|0]<<8|n[A+58|0]<<16|n[A+59|0]<<24,n[A+60|0]|n[A+61|0]<<8|n[A+62|0]<<16|n[A+63|0]<<24),X(I,B,g),fI(A,64),fI(Q,256),Q=0}return h=B- -64|0,Q}OI(),e()}t(1854,1886,306,1931),e()}function d(A,I){var g,B,Q,C,E,a,r,o,e,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0;g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,u=HI(I+4|0),t=p,h=HI(I+7|0),c=p,D=HI(I+10|0),f=p,B=HI(I+13|0),s=p,y=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,Q=HI(I+20|0),l=p,C=HI(I+23|0),E=p,a=HI(I+26|0),r=p,o=HI(I+29|0),I=f<<3|D>>>29,F=f=D<<3,D=f=f+16777216|0,f=I=f>>>0<16777216?I+1|0:I,c=I=c<<5|h>>>27,e=w=h<<5,t=I=t<<6|(h=u)>>>26,u=I=16777216+(h<<=6)|0,w=I,I=(I=(t=I>>>0<16777216?t+1|0:t)>>25)+c|0,I=(t=e+(w=(33554431&t)<<7|w>>>25)|0)>>>0>>0?I+1|0:I,(c=t+33554432|0)>>>0<33554432&&(I=I+1|0),I=(F-(-33554432&D)|0)+((67108863&I)<<6|c>>>26)|0,i[A+12>>2]=I,I=-67108864&c,i[A+8>>2]=t-I,I=0,w=y=(c=y)+16777216|0,y=I=y>>>0<16777216?1:I,F=c-(-33554432&w)|0,I=s<<2|(c=B)>>>30,s=c<<2,c=I,I=(I=f>>25)+c|0,t=I=(f=(t=s)+(s=(33554431&f)<<7|D>>>25)|0)>>>0>>0?I+1|0:I,c=I=f+33554432|0,I=((67108863&(t=I>>>0<33554432?t+1|0:t))<<6|I>>>26)+F|0,i[A+20>>2]=I,I=-67108864&c,i[A+16>>2]=f-I,s=(t=Q)<<7,I=(I=l<<7|t>>>25)+(t=y>>25)|0,I=(y=s+(c=(33554431&y)<<7|w>>>25)|0)>>>0>>0?I+1|0:I,y=t=y,c=t=t+33554432|0,t=I=t>>>0<33554432?I+1|0:I,I=-67108864&c,i[(f=A)+24>>2]=y-I,y=f,I=E<<5|(f=C)>>>27,l=f<<=5,s=f=f+16777216|0,f=I=f>>>0<16777216?I+1|0:I,I=(l-(-33554432&s)|0)+((67108863&t)<<6|c>>>26)|0,i[y+28>>2]=I,c=(t=a)<<4,t=I=r<<4|t>>>28,I=(I=f>>25)+t|0,I=(f=(w=c)+(c=(33554431&f)<<7|s>>>25)|0)>>>0>>0?I+1|0:I,f=t=f,c=t=t+33554432|0,t=I=t>>>0<33554432?I+1|0:I,I=-67108864&c,i[y+32>>2]=f-I,I=0,f=y=(y=o)<<2&33554428,I=(y=y+16777216|0)>>>0<16777216?I+1|0:I,t=(f-(33554432&y)|0)+((67108863&t)<<6|c>>>26)|0,i[A+36>>2]=t,y=eg((33554431&I)<<7|y>>>25,I>>>25|0,19,0),I=p,I=(t=y+g|0)>>>0>>0?I+1|0:I,(f=t+33554432|0)>>>0<33554432&&(I=I+1|0),I=(h-(-33554432&u)|0)+((67108863&I)<<6|f>>>26)|0,i[A+4>>2]=I,I=A,A=-67108864&f,i[I>>2]=t-A}function P(A,I){var g,B,Q,C,E,n,a,r,o,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0,G=0,k=0;l=t=i[(e=I)+4>>2],D=t>>31,F=t=i[e+8>>2],B=t>>31,w=t=i[e+12>>2],u=t>>31,G=t=i[e+16>>2],Q=t>>31,h=t=i[e+20>>2],s=t>>31,k=t=i[e+24>>2],C=t>>31,E=t=i[e>>2],n=t>>31,c=t=eg(e=i[e+36>>2],e>>31,121666,0),e=p,g=t=t+16777216|0,t=e=t>>>0<16777216?e+1|0:e,a=c-(-33554432&g)|0,f=eg(e=i[I+32>>2],e>>31,121666,0),r=p,c=eg(I=i[I+28>>2],I>>31,121666,0),e=p,y=f,o=I=c+16777216|0,f=I,I=(I=(e=I>>>0<16777216?e+1|0:e)>>25)+r|0,I=(e=y+(f=(33554431&e)<<7|f>>>25)|0)>>>0>>0?I+1|0:I,f=e,e=I,y=I=f+33554432|0,I=((67108863&(e=I>>>0<33554432?e+1|0:e))<<6|I>>>26)+a|0,i[A+36>>2]=I,I=-67108864&y,i[A+32>>2]=f-I,y=c-(-33554432&o)|0,e=eg(k,C,121666,0),k=p,c=eg(h,s,121666,0),I=p,f=e,h=e=c+16777216|0,s=e,e=(e=(I=e>>>0<16777216?I+1|0:I)>>25)+k|0,e=(I=f+(s=(33554431&I)<<7|s>>>25)|0)>>>0>>0?e+1|0:e,(f=I+33554432|0)>>>0<33554432&&(e=e+1|0),e=y+((67108863&e)<<6|f>>>26)|0,i[A+28>>2]=e,e=-67108864&f,i[A+24>>2]=I-e,h=c-(-33554432&h)|0,I=eg(G,Q,121666,0),G=p,c=eg(w,u,121666,0),e=p,y=I,w=I=c+16777216|0,u=(33554431&(e=I>>>0<16777216?e+1|0:e))<<7|I>>>25,e=(e>>25)+G|0,I=e=(f=y+u|0)>>>0>>0?e+1|0:e,I=((67108863&(I=(e=f+33554432|0)>>>0<33554432?I+1|0:I))<<6|e>>>26)+h|0,i[A+20>>2]=I,I=-67108864&e,i[A+16>>2]=f-I,w=c-(-33554432&w)|0,e=eg(F,B,121666,0),F=p,c=eg(l,D,121666,0),I=p,y=e,l=e=c+16777216|0,D=(33554431&(I=e>>>0<16777216?I+1|0:I))<<7|e>>>25,I=(I>>25)+F|0,e=I=(f=y+D|0)>>>0>>0?I+1|0:I,y=I=f+33554432|0,I=((67108863&(e=I>>>0<33554432?e+1|0:e))<<6|I>>>26)+w|0,i[A+12>>2]=I,I=-67108864&y,i[A+8>>2]=f-I,I=eg((33554431&t)<<7|g>>>25,t>>25,19,0),e=p,y=c-(-33554432&l)|0,t=eg(E,n,121666,0),e=p+e|0,e=(I=t+I|0)>>>0>>0?e+1|0:e,(t=I+33554432|0)>>>0<33554432&&(e=e+1|0),e=y+((67108863&e)<<6|t>>>26)|0,i[A+4>>2]=e,e=A,A=-67108864&t,i[e>>2]=I-A}function R(A,I,g,B){var Q,E=0,a=0;h=Q=h-16|0,E=-31;A:{I:{g:{B:switch(B-1|0){case 1:if(I>>>0<13)break I;B=n[35660]|n[35661]<<8|n[35662]<<16|n[35663]<<24,E=n[35656]|n[35657]<<8|n[35658]<<16|n[35659]<<24,C[0|A]=E,C[A+1|0]=E>>>8,C[A+2|0]=E>>>16,C[A+3|0]=E>>>24,C[A+4|0]=B,C[A+5|0]=B>>>8,C[A+6|0]=B>>>16,C[A+7|0]=B>>>24,B=n[35665]|n[35666]<<8|n[35667]<<16|n[35668]<<24,E=n[35661]|n[35662]<<8|n[35663]<<16|n[35664]<<24,C[A+5|0]=E,C[A+6|0]=E>>>8,C[A+7|0]=E>>>16,C[A+8|0]=E>>>24,C[A+9|0]=B,C[A+10|0]=B>>>8,C[A+11|0]=B>>>16,C[A+12|0]=B>>>24,a=-12,B=12;break g;case 0:break B;default:break A}if(I>>>0<12)break I;B=n[35673]|n[35674]<<8|n[35675]<<16|n[35676]<<24,E=n[35669]|n[35670]<<8|n[35671]<<16|n[35672]<<24,C[0|A]=E,C[A+1|0]=E>>>8,C[A+2|0]=E>>>16,C[A+3|0]=E>>>24,C[A+4|0]=B,C[A+5|0]=B>>>8,C[A+6|0]=B>>>16,C[A+7|0]=B>>>24,B=n[35677]|n[35678]<<8|n[35679]<<16|n[35680]<<24,C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,a=-11,B=11}if(E=oA(g))break A;if(qA(Q+5|0,19),!((E=I+a|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+B|0,Q+5|0,I+1|0),!((B=E-I|0)>>>0<4)&&(C[0|(A=A+I|0)]=36,C[A+1|0]=109,C[A+2|0]=61,C[A+3|0]=0,qA(Q+5|0,i[g+44>>2]),!((B=B-3|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+3|0,Q+5|0,I+1|0),!((B=B-I|0)>>>0<4)&&(C[0|(A=A+I|0)]=44,C[A+1|0]=116,C[A+2|0]=61,C[A+3|0]=0,qA(Q+5|0,i[g+40>>2]),!((B=B-3|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+3|0,Q+5|0,I+1|0),!((B=B-I|0)>>>0<4)&&(C[0|(A=A+I|0)]=44,C[A+1|0]=112,C[A+2|0]=61,C[A+3|0]=0,qA(Q+5|0,i[g+48>>2]),!((B=B-3|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+3|0,Q+5|0,I+1|0),!((B=B-I|0)>>>0<2)&&(C[0|(A=A+I|0)]=36,C[A+1|0]=0,O(A=A+1|0,I=B-1|0,i[g+16>>2],i[g+20>>2],3)))))))))){if(E=-31,(B=(B=I)-(I=YA(A))|0)>>>0<2)break A;return C[0|(A=A+I|0)]=36,C[A+1|0]=0,A=O(A+1|0,B-1|0,i[g>>2],i[g+4>>2],3),h=Q+16|0,A?0:-31}}E=-31}return h=Q+16|0,E}function J(A,I,g,B){var Q,E=0;Q=E=h,h=E=E-576&-64,i[E+188>>2]=0,xI(E+188|0,I);A:if(I>>>0<=64){if((0|iI(E+192|0,0,0,I))<0)break A;if((0|hg(E+192|0,E+188|0,4,0))<0)break A;if((0|hg(E+192|0,g,B,0))<0)break A;dI(E+192|0,A,I)}else if(!((0|iI(E+192|0,0,0,64))<0||(0|hg(E+192|0,E+188|0,4,0))<0||(0|hg(E+192|0,g,B,0))<0||(0|dI(E+192|0,E+112|0,64))<0)){if(g=i[E+116>>2],B=i[E+112>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24,g=i[E+124>>2],B=i[E+120>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=g,C[A+13|0]=g>>>8,C[A+14|0]=g>>>16,C[A+15|0]=g>>>24,g=i[E+140>>2],B=i[E+136>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=g,C[A+29|0]=g>>>8,C[A+30|0]=g>>>16,C[A+31|0]=g>>>24,g=i[E+132>>2],B=i[E+128>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=g,C[A+21|0]=g>>>8,C[A+22|0]=g>>>16,C[A+23|0]=g>>>24,A=A+32|0,(I=I-32|0)>>>0>=65)for(;;){if(X(E+48|0,E+112|0,64),(0|GI(E+112|0,64,E+48|0,64,0,0,0))<0)break A;if(g=i[E+116>>2],B=i[E+112>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24,g=i[E+124>>2],B=i[E+120>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=g,C[A+13|0]=g>>>8,C[A+14|0]=g>>>16,C[A+15|0]=g>>>24,g=i[E+140>>2],B=i[E+136>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=g,C[A+29|0]=g>>>8,C[A+30|0]=g>>>16,C[A+31|0]=g>>>24,g=i[E+132>>2],B=i[E+128>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=g,C[A+21|0]=g>>>8,C[A+22|0]=g>>>16,C[A+23|0]=g>>>24,A=A+32|0,!((I=I-32|0)>>>0>64))break}X(E+48|0,E+112|0,64),(0|GI(E+112|0,I,E+48|0,64,0,0,0))<0||X(A,E+112|0,I)}fI(E+192|0,384),h=Q}function x(A,I,g){var B=0,Q=0,C=0,E=0,i=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,p=0;for(C=2036477234,e=857760878,t=1634760805,E=1797285236,o=n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,B=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24,Q=n[g+8|0]|n[g+9|0]<<8|n[g+10|0]<<16|n[g+11|0]<<24,a=n[g+12|0]|n[g+13|0]<<8|n[g+14|0]<<16|n[g+15|0]<<24,c=n[g+16|0]|n[g+17|0]<<8|n[g+18|0]<<16|n[g+19|0]<<24,y=n[g+20|0]|n[g+21|0]<<8|n[g+22|0]<<16|n[g+23|0]<<24,w=n[g+24|0]|n[g+25|0]<<8|n[g+26|0]<<16|n[g+27|0]<<24,h=n[g+28|0]|n[g+29|0]<<8|n[g+30|0]<<16|n[g+31|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,f=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,i=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,I=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24;r=o,t=Hg((s=g)^(g=o+t|0),16),r=c=Hg(r^(o=t+c|0),12),c=Hg((s=t)^(t=g+c|0),8),o=Hg(r^(D=c+o|0),7),r=B,e=Hg((g=B+e|0)^f,16),r=f=Hg(r^(B=e+y|0),12),f=Hg((s=e)^(e=g+f|0),8),g=Hg(r^(y=f+B|0),7),r=Q,B=Hg((C=C+Q|0)^i,16),r=i=Hg(r^(Q=B+w|0),12),s=Hg(B^(i=C+i|0),8),C=Hg(r^(B=s+Q|0),7),E=Hg((Q=I)^(I=E+a|0),16),a=Hg((Q=E+h|0)^a,12),I=Hg(E^(u=I+a|0),8),E=Hg(a^(Q=I+Q|0),7),r=B,B=Hg((B=I)^(I=g+t|0),16),g=Hg((a=r+B|0)^g,12),I=Hg(B^(t=I+g|0),8),B=Hg(g^(w=a+I|0),7),r=Q,Q=Hg((g=C+e|0)^c,16),C=Hg((a=r+Q|0)^C,12),g=Hg(Q^(e=g+C|0),8),Q=Hg(C^(h=a+g|0),7),a=Hg((C=E+i|0)^f,16),E=Hg((i=a+D|0)^E,12),f=Hg(a^(C=C+E|0),8),a=Hg(E^(c=i+f|0),7),i=Hg((E=o+u|0)^s,16),o=Hg((y=i+y|0)^o,12),i=Hg(i^(E=E+o|0),8),o=Hg(o^(y=y+i|0),7),10!=(0|(p=p+1|0)););xI(A,t),xI(A+4|0,e),xI(A+8|0,C),xI(A+12|0,E),xI(A+16|0,g),xI(A+20|0,f),xI(A+24|0,i),xI(A+28|0,I)}function L(A){var I,g=0,B=0;h=I=h-48|0,g=n[28+(A|=0)|0]|n[A+29|0]<<8|n[A+30|0]<<16|n[A+31|0]<<24,i[I+24>>2]=n[A+24|0]|n[A+25|0]<<8|n[A+26|0]<<16|n[A+27|0]<<24,i[I+28>>2]=g,g=n[A+20|0]|n[A+21|0]<<8|n[A+22|0]<<16|n[A+23|0]<<24,i[I+16>>2]=n[A+16|0]|n[A+17|0]<<8|n[A+18|0]<<16|n[A+19|0]<<24,i[I+20>>2]=g,g=n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24,i[I>>2]=n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24,i[I+4>>2]=g,g=n[A+12|0]|n[A+13|0]<<8|n[A+14|0]<<16|n[A+15|0]<<24,i[I+8>>2]=n[A+8|0]|n[A+9|0]<<8|n[A+10|0]<<16|n[A+11|0]<<24,i[I+12>>2]=g,g=n[A+40|0]|n[A+41|0]<<8|n[A+42|0]<<16|n[A+43|0]<<24,i[I+32>>2]=n[A+36|0]|n[A+37|0]<<8|n[A+38|0]<<16|n[A+39|0]<<24,i[I+36>>2]=g,Vg[i[8957]](I,I,40,0,A+32|0,0,A),g=i[I+28>>2],B=i[I+24>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=g,C[A+29|0]=g>>>8,C[A+30|0]=g>>>16,C[A+31|0]=g>>>24,g=i[I+20>>2],B=i[I+16>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=g,C[A+21|0]=g>>>8,C[A+22|0]=g>>>16,C[A+23|0]=g>>>24,g=i[I+12>>2],B=i[I+8>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=g,C[A+13|0]=g>>>8,C[A+14|0]=g>>>16,C[A+15|0]=g>>>24,g=i[I+4>>2],B=i[I>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24,g=i[I+36>>2],B=i[I+32>>2],C[A+36|0]=B,C[A+37|0]=B>>>8,C[A+38|0]=B>>>16,C[A+39|0]=B>>>24,C[A+40|0]=g,C[A+41|0]=g>>>8,C[A+42|0]=g>>>16,C[A+43|0]=g>>>24,XI(A),h=I+48|0}function K(A,I,g){var B=0,Q=0,C=0,E=0,i=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,p=0,l=0,F=0;for(Q=2036477234,C=857760878,E=1634760805,i=1797285236,w=20,o=n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,s=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24,h=n[g+8|0]|n[g+9|0]<<8|n[g+10|0]<<16|n[g+11|0]<<24,c=n[g+12|0]|n[g+13|0]<<8|n[g+14|0]<<16|n[g+15|0]<<24,e=n[g+16|0]|n[g+17|0]<<8|n[g+18|0]<<16|n[g+19|0]<<24,a=n[g+20|0]|n[g+21|0]<<8|n[g+22|0]<<16|n[g+23|0]<<24,t=n[g+24|0]|n[g+25|0]<<8|n[g+26|0]<<16|n[g+27|0]<<24,f=n[g+28|0]|n[g+29|0]<<8|n[g+30|0]<<16|n[g+31|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,r=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,B=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,I=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24;D=B,B=Hg(E+a|0,7)^c,y=D^Hg(B+E|0,9),u=Hg(B+y|0,13)^a,c=Hg(y+u|0,18),I=Hg(C+o|0,7)^I,t=Hg(I+C|0,9)^t,o=Hg(I+t|0,13)^o,l=Hg(t+o|0,18),f=Hg(g+Q|0,7)^f,a=Hg(f+Q|0,9)^s,p=Hg(a+f|0,13)^g,F=Hg(a+p|0,18),g=Hg(i+e|0,7)^h,r=Hg(g+i|0,9)^r,e=Hg(g+r|0,13)^e,D=Hg(r+e|0,18),o=Hg((E^=c)+g|0,7)^o,s=Hg(o+E|0,9)^a,h=Hg(o+s|0,13)^g,E=Hg(s+h|0,18)^E,g=Hg((C^=l)+B|0,7)^p,r=Hg(g+C|0,9)^r,c=Hg(g+r|0,13)^B,C=Hg(r+c|0,18)^C,e=Hg((Q^=F)+I|0,7)^e,B=Hg(e+Q|0,9)^y,I=Hg(B+e|0,13)^I,Q=Hg(I+B|0,18)^Q,a=Hg((i^=D)+f|0,7)^u,t=Hg(a+i|0,9)^t,f=Hg(a+t|0,13)^f,i=Hg(t+f|0,18)^i,y=w>>>0>2,w=w-2|0,y;);return xI(A,E),xI(A+4|0,C),xI(A+8|0,Q),xI(A+12|0,i),xI(A+16|0,g),xI(A+20|0,r),xI(A+24|0,B),xI(A+28|0,I),0}function q(A,I,g,B,Q,E,a){var r,o,e,t,f,c,y,s=0;return h=r=h-560|0,ig(r+352|0,a),mI(r+288|0,E,32,0),V(r+352|0,r+320|0,32,0),V(r+352|0,g,B,Q),UI(r+352|0,r+224|0),o=n[(s=E)+32|0]|n[s+33|0]<<8|n[s+34|0]<<16|n[s+35|0]<<24,e=n[s+36|0]|n[s+37|0]<<8|n[s+38|0]<<16|n[s+39|0]<<24,t=n[s+40|0]|n[s+41|0]<<8|n[s+42|0]<<16|n[s+43|0]<<24,f=n[s+44|0]|n[s+45|0]<<8|n[s+46|0]<<16|n[s+47|0]<<24,c=n[s+48|0]|n[s+49|0]<<8|n[s+50|0]<<16|n[s+51|0]<<24,E=n[s+52|0]|n[s+53|0]<<8|n[s+54|0]<<16|n[s+55|0]<<24,y=n[s+60|0]|n[s+61|0]<<8|n[s+62|0]<<16|n[s+63|0]<<24,s=n[s+56|0]|n[s+57|0]<<8|n[s+58|0]<<16|n[s+59|0]<<24,C[A+56|0]=s,C[A+57|0]=s>>>8,C[A+58|0]=s>>>16,C[A+59|0]=s>>>24,C[A+60|0]=y,C[A+61|0]=y>>>8,C[A+62|0]=y>>>16,C[A+63|0]=y>>>24,C[A+48|0]=c,C[A+49|0]=c>>>8,C[A+50|0]=c>>>16,C[A+51|0]=c>>>24,C[A+52|0]=E,C[A+53|0]=E>>>8,C[A+54|0]=E>>>16,C[A+55|0]=E>>>24,C[A+40|0]=t,C[A+41|0]=t>>>8,C[A+42|0]=t>>>16,C[A+43|0]=t>>>24,C[A+44|0]=f,C[A+45|0]=f>>>8,C[A+46|0]=f>>>16,C[A+47|0]=f>>>24,C[0|(E=A+32|0)]=o,C[E+1|0]=o>>>8,C[E+2|0]=o>>>16,C[E+3|0]=o>>>24,C[E+4|0]=e,C[E+5|0]=e>>>8,C[E+6|0]=e>>>16,C[E+7|0]=e>>>24,G(r+224|0),CA(r,r+224|0),nI(A,r),ig(r+352|0,a),V(r+352|0,A,64,0),V(r+352|0,g,B,Q),UI(r+352|0,r+160|0),G(r+160|0),C[r+288|0]=248&n[r+288|0],C[r+319|0]=63&n[r+319|0]|64,function(A,I,g,B){var Q,E,i,a,r,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L,K,q,X,V,W,T,j,Z,O,z,$,AA,IA=0,gA=0,BA=0,QA=0,CA=0,EA=0,iA=0,nA=0,aA=0,rA=0,oA=0,eA=0,tA=0,fA=0,cA=0,yA=0,sA=0,wA=0,hA=0,DA=0,uA=0,pA=0,lA=0,FA=0,GA=0,kA=0,_A=0,HA=0,YA=0,bA=0,mA=0,vA=0,UA=0,SA=0,NA=0,MA=0,dA=0,PA=0,RA=0,JA=0,xA=0,LA=0,KA=0,qA=0,XA=0,VA=0,WA=0,TA=0,jA=0,ZA=0,OA=0;RA=HI(I),sA=n[I+2|0]|n[I+3|0]<<8|n[I+4|0]<<16|n[I+5|0]<<24,WA=HI(I+5|0),YA=p,wA=n[I+7|0]|n[I+8|0]<<8|n[I+9|0]<<16|n[I+10|0]<<24,hA=n[I+10|0]|n[I+11|0]<<8|n[I+12|0]<<16|n[I+13|0]<<24,mA=HI(I+13|0),oA=p,tA=n[I+15|0]|n[I+16|0]<<8|n[I+17|0]<<16|n[I+18|0]<<24,KA=HI(I+18|0),fA=p,bA=HI(I+21|0),iA=n[I+23|0]|n[I+24|0]<<8|n[I+25|0]<<16|n[I+26|0]<<24,aA=HI(I+26|0),QA=p,BA=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,NA=HI(g),pA=n[(I=g)+2|0]|n[I+3|0]<<8|n[I+4|0]<<16|n[I+5|0]<<24,XA=HI(I+5|0),rA=p,cA=n[I+7|0]|n[I+8|0]<<8|n[I+9|0]<<16|n[I+10|0]<<24,yA=n[I+10|0]|n[I+11|0]<<8|n[I+12|0]<<16|n[I+13|0]<<24,VA=HI(I+13|0),eA=p,CA=n[I+15|0]|n[I+16|0]<<8|n[I+17|0]<<16|n[I+18|0]<<24,qA=HI(I+18|0),gA=p,JA=HI(I+21|0),IA=n[I+23|0]|n[I+24|0]<<8|n[I+25|0]<<16|n[I+26|0]<<24,nA=HI(I+26|0),g=p,I=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,Z=HI(B),O=n[B+2|0]|n[B+3|0]<<8|n[B+4|0]<<16|n[B+5|0]<<24,z=HI(B+5|0),$=p,MA=n[B+7|0]|n[B+8|0]<<8|n[B+9|0]<<16|n[B+10|0]<<24,xA=n[B+10|0]|n[B+11|0]<<8|n[B+12|0]<<16|n[B+13|0]<<24,LA=HI(B+13|0),SA=p,vA=n[B+15|0]|n[B+16|0]<<8|n[B+17|0]<<16|n[B+18|0]<<24,TA=HI(B+18|0),_A=p,FA=HI(B+21|0),I=eg(Q=I>>>7|0,0,E=2097151&((3&QA)<<30|aA>>>2),0),EA=p,QA=I,I=eg(i=2097151&((3&g)<<30|nA>>>2),0,a=BA>>>7|0,0),g=p+EA|0,EA=BA=QA+I|0,BA=I>>>0>BA>>>0?g+1|0:g,I=eg(E,0,i,0),QA=p,IA=(g=eg(r=IA>>>5&2097151,0,a,0))+I|0,I=p+QA|0,g=I=g>>>0>IA>>>0?I+1|0:I,I=eg(Q,0,o=iA>>>5&2097151,0),g=p+g|0,iA=IA=I+IA|0,lA=g=I>>>0>IA>>>0?g+1|0:g,DA=(I=IA)- -1048576|0,uA=g=g-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+BA|0,aA=I=(g=(2097151&g)<<11|DA>>>21)>>>0>(BA=QA=g+EA|0)>>>0?I+1|0:I,GA=(I=BA)- -1048576|0,nA=EA=aA-((I>>>0<4293918720)-1|0)|0,QA=eg(Q,0,a,0),g=HA=(PA=p)-(((I=QA)>>>0<4293918720)-1|0)|0,IA=EA>>21,HA=(2097151&EA)<<11|GA>>>21,QA=I-(EA=-2097152&(dA=I- -1048576|0))|0,I=(PA-((I>>>0>>0)+g|0)|0)+IA|0,P=I=QA>>>0>(v=HA+QA|0)>>>0?I+1|0:I,EA=eg(v,I,-683901,-1),QA=p,R=I=g>>21,I=eg(S=(2097151&g)<<11|dA>>>21,I,136657,0),IA=p+QA|0,HA=g=I+EA|0,EA=I>>>0>g>>>0?IA+1|0:IA,I=eg(e=2097151&((1&eA)<<31|VA>>>1),0,E,0),g=p,IA=I,I=eg(t=yA>>>4&2097151,0,a,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(f=CA>>>6&2097151,0,o,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,m=I=0,QA=IA,IA=eg(c=2097151&JA,I,y=2097151&((7&fA)<<29|KA>>>3),0),I=p+g|0,I=IA>>>0>(QA=QA+IA|0)>>>0?I+1|0:I,IA=eg(s=2097151&((7&gA)<<29|qA>>>3),0,w=2097151&bA,0),g=p+I|0,g=IA>>>0>(QA=IA+QA|0)>>>0?g+1|0:g,I=eg(r,0,h=tA>>>6&2097151,0),IA=p+g|0,IA=I>>>0>(QA=I+QA|0)>>>0?IA+1|0:IA,g=eg(i,0,D=2097151&((1&oA)<<31|mA>>>1),0),I=p+IA|0,g=g>>>0>(IA=QA=g+QA|0)>>>0?I+1|0:I,I=eg(Q,0,u=hA>>>4&2097151,0),g=p+g|0,fA=IA=I+IA|0,QA=I>>>0>IA>>>0?g+1|0:g,I=eg(E,0,t,0),g=p,gA=(IA=I)+(I=eg(l=cA>>>7&2097151,0,a,0))|0,IA=p+g|0,IA=I>>>0>gA>>>0?IA+1|0:IA,g=eg(o,0,e,0),I=p+IA|0,I=g>>>0>(gA=g+gA|0)>>>0?I+1|0:I,IA=eg(f,0,w,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,I=eg(c,m,h,0),g=p+g|0,g=I>>>0>(IA=I+gA|0)>>>0?g+1|0:g,gA=(I=IA)+(IA=eg(y,0,s,0))|0,I=p+g|0,I=IA>>>0>gA>>>0?I+1|0:I,g=eg(r,0,D,0),IA=p+I|0,IA=g>>>0>(gA=g+gA|0)>>>0?IA+1|0:IA,g=eg(i,0,u,0),I=p+IA|0,g=g>>>0>(IA=gA=g+gA|0)>>>0?I+1|0:I,I=eg(Q,0,F=wA>>>7&2097151,0),g=p+g|0,yA=IA=I+IA|0,CA=g=I>>>0>IA>>>0?g+1|0:g,eA=(I=IA)- -1048576|0,gA=g=g-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+QA|0,g=I=(g=(2097151&g)<<11|eA>>>21)>>>0>(cA=g+fA|0)>>>0?I+1|0:I,I=I+EA|0,I=(IA=QA=cA)>>>0>(cA=IA+HA|0)>>>0?I+1|0:I,EA=(EA=g)-(((g=QA)>>>0<4293918720)-1|0)|0,oA=g- -1048576|0,tA=(g=IA=cA)-(IA=-2097152&oA)|0,fA=I-((QA=EA)+(g>>>0>>0)|0)|0,N=BA-(I=-2097152&GA)|0,J=g=aA-((I>>>0>BA>>>0)+nA|0)|0,I=eg(S,R,-997805,-1),IA=p+CA|0,IA=I>>>0>(BA=I+yA|0)>>>0?IA+1|0:IA,CA=(I=BA)+(BA=eg(v,P,136657,0))|0,I=p+IA|0,g=eg(N,g,-683901,-1),I=p+(BA>>>0>CA>>>0?I+1|0:I)|0,I=g>>>0>(IA=g+CA|0)>>>0?I+1|0:I,EA=IA-(g=-2097152&eA)|0,CA=I-((g>>>0>IA>>>0)+gA|0)|0,I=eg(E,0,l,0),IA=p,BA=(g=eg(G=2097151&((3&rA)<<30|XA>>>2),0,a,0))+I|0,I=p+IA|0,I=g>>>0>BA>>>0?I+1|0:I,IA=eg(o,0,t,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,I=eg(e,0,w,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(f,0,y,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,IA=eg(c,m,D,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,IA=eg(s,0,h,0),I=p+g|0,I=IA>>>0>(BA=IA+BA|0)>>>0?I+1|0:I,IA=eg(r,0,u,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,I=eg(i,0,F,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(Q,0,k=2097151&((3&YA)<<30|WA>>>2),0),I=p+IA|0,BA=g>>>0>(gA=BA=g+BA|0)>>>0?I+1|0:I,I=eg(E,0,G,0),g=p,IA=I,I=eg(_=pA>>>5&2097151,0,a,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,nA=(I=eg(o,0,l,0))+IA|0,IA=p+g|0,IA=I>>>0>nA>>>0?IA+1|0:IA,g=eg(t,0,w,0),I=p+IA|0,I=g>>>0>(nA=g+nA|0)>>>0?I+1|0:I,g=eg(e,0,y,0),I=p+I|0,I=g>>>0>(IA=g+nA|0)>>>0?I+1|0:I,nA=(g=IA)+(IA=eg(f,0,h,0))|0,g=p+I|0,g=IA>>>0>nA>>>0?g+1|0:g,I=eg(c,m,u,0),g=p+g|0,g=I>>>0>(IA=I+nA|0)>>>0?g+1|0:g,nA=(I=eg(s,0,D,0))+IA|0,IA=p+g|0,IA=I>>>0>nA>>>0?IA+1|0:IA,g=eg(r,0,F,0),I=p+IA|0,I=g>>>0>(nA=g+nA|0)>>>0?I+1|0:I,g=eg(i,0,k,0),I=p+I|0,g=I=g>>>0>(IA=g+nA|0)>>>0?I+1|0:I,I=eg(Q,0,H=sA>>>5&2097151,0),g=p+g|0,cA=IA=I+IA|0,XA=g=I>>>0>IA>>>0?g+1|0:g,AA=(I=IA)- -1048576|0,VA=IA=g-((I>>>0<4293918720)-1|0)|0,I=(I=IA>>21)+BA|0,yA=IA=(g=(2097151&IA)<<11|AA>>>21)+gA|0,qA=I=g>>>0>IA>>>0?I+1|0:I,WA=(I=IA)- -1048576|0,JA=IA=qA-((I>>>0<4293918720)-1|0)|0,g=(I=IA>>21)+CA|0,eA=BA=(IA=(2097151&IA)<<11|WA>>>21)+EA|0,PA=g=IA>>>0>BA>>>0?g+1|0:g,mA=(I=BA)- -1048576|0,HA=IA=g-((I>>>0<4293918720)-1|0)|0,I=(I=IA>>21)+fA|0,CA=IA=(g=(2097151&IA)<<11|mA>>>21)+tA|0,sA=IA=(GA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,aA=(2097151&IA)<<11|(bA=I- -1048576|0)>>>21,gA=IA>>21,I=eg(E,0,f,0),g=p,IA=I,I=eg(a,0,e,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(c,m,w,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,BA=(I=IA)+(IA=eg(o,0,s,0))|0,I=p+g|0,I=IA>>>0>BA>>>0?I+1|0:I,g=eg(r,0,y,0),IA=p+I|0,IA=g>>>0>(BA=g+BA|0)>>>0?IA+1|0:IA,g=eg(i,0,h,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,IA=eg(Q,0,D,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,IA=eg(S,R,-683901,-1),g=(I=g)+p|0,g=IA>>>0>(EA=BA+IA|0)>>>0?g+1|0:g,IA=EA,EA=(EA=I)-(((I=BA)>>>0<4293918720)-1|0)|0,pA=I- -1048576|0,nA=(I=IA)-(IA=-2097152&pA)|0,IA=g-((BA=EA)+(I>>>0>>0)|0)|0,I=(I=QA>>21)+IA|0,I=(g=(2097151&QA)<<11|oA>>>21)>>>0>(QA=g+nA|0)>>>0?I+1|0:I,EA=(g=QA)-(IA=-2097152&(rA=g- -1048576|0))|0,IA=(I-((g>>>0>>0)+(QA=nA=I-((g>>>0<4293918720)-1|0)|0)|0)|0)+gA|0,x=aA=EA+aA|0,L=IA=EA>>>0>aA>>>0?IA+1|0:IA,nA=eg(aA,IA,-683901,-1),EA=p,g=eg(o,0,c,m),I=p,IA=g,g=eg(a,0,f,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(E,0,s,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,IA=eg(r,0,w,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,IA=eg(i,0,y,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,I=eg(Q,0,h,0),IA=p+g|0,IA=I>>>0>(gA=I+gA|0)>>>0?IA+1|0:IA,I=(I=BA>>21)+IA|0,wA=gA=(I=(g=(2097151&BA)<<11|pA>>>21)>>>0>(BA=g+gA|0)>>>0?I+1|0:I)-(((g=BA)>>>0<4293918720)-1|0)|0,BA=g-(IA=-2097152&(UA=g- -1048576|0))|0,IA=(I-((g>>>0>>0)+gA|0)|0)+(QA>>21)|0,K=BA=(I=(2097151&QA)<<11|rA>>>21)+BA|0,q=IA=I>>>0>BA>>>0?IA+1|0:IA,g=eg(BA,IA,136657,0),I=p+EA|0,KA=IA=g+nA|0,hA=g>>>0>IA>>>0?I+1|0:I,g=eg(w,0,_,0),I=p,IA=g,g=eg(Y=2097151&NA,0,o,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,BA=(g=IA)+(IA=eg(y,0,G,0))|0,g=p+I|0,g=IA>>>0>BA>>>0?g+1|0:g,I=eg(h,0,l,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(t,0,D,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,IA=eg(e,0,u,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,IA=eg(f,0,F,0),I=p+g|0,I=IA>>>0>(BA=IA+BA|0)>>>0?I+1|0:I,IA=eg(c,m,H,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,I=eg(s,0,k,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(r,0,b=2097151&RA,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,QA=BA=(IA=(n[B+23|0]|n[B+24|0]<<8|n[B+25|0]<<16|n[B+26|0]<<24)>>>5&2097151)+BA|0,BA=IA>>>0>BA>>>0?I+1|0:I,I=eg(y,0,_,0),g=p,IA=I,I=eg(w,0,Y,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,gA=(I=eg(h,0,G,0))+IA|0,IA=p+g|0,IA=I>>>0>gA>>>0?IA+1|0:IA,g=eg(D,0,l,0),I=p+IA|0,I=g>>>0>(gA=g+gA|0)>>>0?I+1|0:I,g=eg(t,0,u,0),I=p+I|0,I=g>>>0>(IA=g+gA|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(e,0,F,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,I=eg(f,0,k,0),g=p+g|0,g=I>>>0>(IA=I+gA|0)>>>0?g+1|0:g,gA=(I=eg(c,m,b,0))+IA|0,IA=p+g|0,IA=I>>>0>gA>>>0?IA+1|0:IA,g=eg(s,0,H,0),I=p+IA|0,I=g>>>0>(gA=g+gA|0)>>>0?I+1|0:I,gA=IA=(g=2097151&FA)+gA|0,tA=IA=(oA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(YA=I- -1048576|0)>>>21,IA=(IA>>>21|0)+BA|0,rA=IA=I>>>0>(QA=I+QA|0)>>>0?IA+1|0:IA,NA=iA-(I=-2097152&DA)|0,FA=lA-((I>>>0>iA>>>0)+uA|0)|0,g=eg(E,0,r,0),I=p,IA=g,g=eg(a,0,c,m),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,BA=(g=IA)+(IA=eg(i,0,o,0))|0,g=p+I|0,g=IA>>>0>BA>>>0?g+1|0:g,I=eg(Q,0,w,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,EA=BA,I=eg(a,0,s,0),g=p,BA=I,I=eg(E,0,c,m),g=p+g|0,g=I>>>0>(BA=BA+I|0)>>>0?g+1|0:g,iA=(I=BA)+(BA=eg(o,0,r,0))|0,I=p+g|0,I=BA>>>0>iA>>>0?I+1|0:I,g=eg(i,0,w,0),I=p+I|0,I=g>>>0>(BA=g+iA|0)>>>0?I+1|0:I,iA=(g=BA)+(BA=eg(Q,0,y,0))|0,g=p+I|0,aA=g=BA>>>0>iA>>>0?g+1|0:g,lA=(I=BA=iA)- -1048576|0,nA=iA=g-((I>>>0<4293918720)-1|0)|0,g=(I=iA>>21)+IA|0,EA=g=(IA=EA=(iA=(2097151&iA)<<11|lA>>>21)+EA|0)>>>0>>0?g+1|0:g,uA=(I=IA)- -1048576|0,g=(I=(iA=DA=g-((I>>>0<4293918720)-1|0)|0)>>21)+FA|0,X=g=(DA=(2097151&iA)<<11|uA>>>21)>>>0>(U=NA=DA+NA|0)>>>0?g+1|0:g,FA=eg(U,g,470296,0),DA=p,M=IA-(g=-2097152&uA)|0,dA=I=EA-((g>>>0>IA>>>0)+iA|0)|0,g=eg(N,J,666643,0),IA=p+DA|0,IA=g>>>0>(iA=g+FA|0)>>>0?IA+1|0:IA,g=eg(M,I,654183,0),I=p+IA|0,g=g>>>0>(EA=iA=g+iA|0)>>>0?I+1|0:I,I=BA-(IA=-2097152&lA)|0,IA=(wA>>21)+(iA=aA-((IA>>>0>BA>>>0)+nA|0)|0)|0,V=nA=(BA=(2097151&wA)<<11|UA>>>21)+I|0,RA=IA=BA>>>0>nA>>>0?IA+1|0:IA,jA=QA- -1048576|0,BA=iA=rA-((QA>>>0<4293918720)-1|0)|0,I=eg(nA,IA,-997805,-1),g=p+g|0,I=(g=I>>>0>(IA=I+EA|0)>>>0?g+1|0:g)+rA|0,I=IA>>>0>(QA=IA+QA|0)>>>0?I+1|0:I,FA=(IA=QA)-(g=-2097152&jA)|0,DA=I-((g>>>0>IA>>>0)+BA|0)|0,I=eg(M,dA,470296,0),g=p,QA=(IA=I)+(I=eg(U,X,666643,0))|0,IA=p+g|0,IA=I>>>0>QA>>>0?IA+1|0:IA,g=eg(nA,RA,654183,0),I=p+IA|0,g=oA+(g>>>0>(QA=g+QA|0)>>>0?I+1|0:I)|0,rA=(IA=gA+QA|0)-(I=-2097152&YA)|0,iA=(g=IA>>>0>>0?g+1|0:g)-((I>>>0>IA>>>0)+tA|0)|0,g=eg(h,0,_,0),I=p,IA=g,g=eg(y,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,g=eg(D,0,G,0),I=p+I|0,I=g>>>0>(IA=g+IA|0)>>>0?I+1|0:I,QA=(g=IA)+(IA=eg(u,0,l,0))|0,g=p+I|0,g=IA>>>0>QA>>>0?g+1|0:g,I=eg(t,0,F,0),IA=p+g|0,IA=I>>>0>(QA=I+QA|0)>>>0?IA+1|0:IA,I=eg(e,0,k,0),g=p+IA|0,g=I>>>0>(QA=I+QA|0)>>>0?g+1|0:g,IA=eg(f,0,H,0),I=p+g|0,I=IA>>>0>(QA=IA+QA|0)>>>0?I+1|0:I,g=eg(s,0,b,0),I=p+I|0,I=g>>>0>(IA=g+QA|0)>>>0?I+1|0:I,g=IA,QA=(IA=2097151&((7&_A)<<29|TA>>>3))>>>0>(gA=QA=g+IA|0)>>>0?I+1|0:I,I=eg(D,0,_,0),g=p,EA=(IA=I)+(I=eg(h,0,Y,0))|0,IA=p+g|0,IA=I>>>0>EA>>>0?IA+1|0:IA,g=eg(u,0,G,0),I=p+IA|0,I=g>>>0>(EA=g+EA|0)>>>0?I+1|0:I,IA=eg(F,0,l,0),g=p+I|0,g=IA>>>0>(EA=IA+EA|0)>>>0?g+1|0:g,IA=eg(t,0,k,0),I=p+g|0,I=IA>>>0>(EA=IA+EA|0)>>>0?I+1|0:I,IA=eg(e,0,H,0),g=p+I|0,g=IA>>>0>(EA=IA+EA|0)>>>0?g+1|0:g,I=eg(f,0,b,0),IA=p+g|0,I=I>>>0>(g=EA=I+EA|0)>>>0?IA+1|0:IA,lA=IA=EA+(g=vA>>>6&2097151)|0,fA=IA=(aA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(uA=I- -1048576|0)>>>21,IA=(IA>>>21|0)+QA|0,nA=IA=I>>>0>(gA=I+gA|0)>>>0?IA+1|0:IA,wA=(I=gA)- -1048576|0,EA=IA=IA-((I>>>0<4293918720)-1|0)|0,I=(g=IA>>>21|0)+iA|0,oA=QA=(IA=(2097151&IA)<<11|wA>>>21)+rA|0,pA=IA=(iA=I=IA>>>0>QA>>>0?I+1|0:I)-(((I=QA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(tA=I- -1048576|0)>>>21,IA=(IA>>21)+DA|0,I=(g=IA=I>>>0>(QA=I+FA|0)>>>0?IA+1|0:IA)+hA|0,rA=(rA=g)-(((g=QA)>>>0<4293918720)-1|0)|0,ZA=g- -1048576|0,OA=(g=IA=_A=QA+KA|0)-(IA=-2097152&ZA)|0,kA=(I=QA>>>0>_A>>>0?I+1|0:I)-((QA=rA)+(g>>>0>>0)|0)|0,I=eg(K,q,-997805,-1),g=p+iA|0,UA=IA=I+oA|0,rA=I>>>0>IA>>>0?g+1|0:g,g=eg(V,RA,470296,0),I=p,IA=g,g=eg(M,dA,666643,0),I=p+I|0,I=(I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I)+nA|0,I=(g=IA+gA|0)>>>0>>0?I+1|0:I,wA=(IA=g)-(g=-2097152&wA)|0,hA=I-((g>>>0>IA>>>0)+EA|0)|0,I=eg(V,RA,666643,0),g=p+aA|0,oA=IA=I+lA|0,iA=I>>>0>IA>>>0?g+1|0:g,g=eg(u,0,_,0),I=p,IA=g,g=eg(D,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,g=eg(F,0,G,0),I=p+I|0,I=g>>>0>(IA=g+IA|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(k,0,l,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,I=eg(t,0,H,0),IA=p+g|0,IA=I>>>0>(gA=I+gA|0)>>>0?IA+1|0:IA,I=eg(e,0,b,0),g=p+IA|0,I=g=I>>>0>(gA=I+gA|0)>>>0?g+1|0:g,EA=gA=(IA=2097151&((1&SA)<<31|LA>>>1))+gA|0,gA=IA>>>0>gA>>>0?I+1|0:I,g=eg(F,0,_,0),I=p,IA=g,g=eg(u,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,nA=(g=IA)+(IA=eg(k,0,G,0))|0,g=p+I|0,g=IA>>>0>nA>>>0?g+1|0:g,I=eg(H,0,l,0),g=p+g|0,g=I>>>0>(IA=I+nA|0)>>>0?g+1|0:g,nA=(I=eg(t,0,b,0))+IA|0,IA=p+g|0,I=I>>>0>(g=nA)>>>0?IA+1|0:IA,aA=IA=nA+(g=xA>>>4&2097151)|0,xA=IA=(YA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(TA=I- -1048576|0)>>>21,IA=(IA>>>21|0)+gA|0,nA=EA=I+EA|0,SA=IA=I>>>0>EA>>>0?IA+1|0:IA,KA=(I=EA)- -1048576|0,vA=IA=IA-((I>>>0<4293918720)-1|0)|0,I=(g=IA>>>21|0)+iA|0,lA=IA=(_A=(IA=(IA=(2097151&IA)<<11|KA>>>21)>>>0>(g=gA=IA+oA|0)>>>0?I+1|0:I)-(((I=-2097152&uA)>>>0>g>>>0)+fA|0)|0)-(((I=EA=g-I|0)>>>0<4293918720)-1|0)|0,g=(g=IA>>21)+hA|0,FA=IA=(I=(2097151&IA)<<11|(NA=I- -1048576|0)>>>21)+wA|0,uA=g=I>>>0>IA>>>0?g+1|0:g,DA=(I=IA)- -1048576|0,wA=gA=g-((I>>>0<4293918720)-1|0)|0,d=CA-(I=-2097152&bA)|0,LA=IA=GA-((I>>>0>CA>>>0)+sA|0)|0,I=(g=gA>>21)+rA|0,I=(gA=(2097151&gA)<<11|DA>>>21)>>>0>(CA=gA+UA|0)>>>0?I+1|0:I,iA=(gA=eg(x,L,136657,0))+(CA-(g=-2097152&tA)|0)|0,g=p+(I-((g>>>0>CA>>>0)+pA|0)|0)|0,g=gA>>>0>iA>>>0?g+1|0:g,IA=eg(d,IA,-683901,-1),I=p+g|0,iA=gA=IA+iA|0,oA=IA=(hA=I=IA>>>0>gA>>>0?I+1|0:I)-(((I=gA)>>>0<4293918720)-1|0)|0,g=(g=IA>>21)+kA|0,CA=IA=(I=(2097151&IA)<<11|(bA=I- -1048576|0)>>>21)+OA|0,tA=g=I>>>0>IA>>>0?g+1|0:g,fA=IA=g-(((I=IA)>>>0<4293918720)-1|0)|0,UA=(2097151&IA)<<11|(GA=I- -1048576|0)>>>21,pA=IA>>21,g=eg(o,0,_,0),I=p,IA=g,g=eg(E,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,gA=(g=eg(w,0,G,0))+IA|0,IA=p+I|0,IA=g>>>0>gA>>>0?IA+1|0:IA,I=eg(y,0,l,0),g=p+IA|0,g=I>>>0>(gA=I+gA|0)>>>0?g+1|0:g,IA=eg(t,0,h,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,IA=eg(e,0,D,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,IA=eg(f,0,u,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,g=eg(c,m,k,0),IA=p+I|0,IA=g>>>0>(gA=g+gA|0)>>>0?IA+1|0:IA,I=eg(s,0,F,0),g=p+IA|0,g=I>>>0>(gA=I+gA|0)>>>0?g+1|0:g,IA=eg(r,0,H,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,IA=eg(i,0,b,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,I=HI(B+26|0),IA=2097151&((3&(IA=p))<<30|I>>>2),I=g,sA=gA=IA+gA|0,gA=I=IA>>>0>gA>>>0?I+1|0:I,I=eg(N,J,470296,0),g=p,kA=(IA=I)+(I=eg(v,P,666643,0))|0,IA=p+g|0,IA=I>>>0>kA>>>0?IA+1|0:IA,I=eg(U,X,654183,0),g=p+IA|0,g=I>>>0>(kA=I+kA|0)>>>0?g+1|0:g,I=eg(M,dA,-997805,-1),g=p+g|0,g=I>>>0>(IA=I+kA|0)>>>0?g+1|0:g,kA=(I=IA)+(IA=eg(V,RA,136657,0))|0,I=p+g|0,I=(I=IA>>>0>kA>>>0?I+1|0:I)+gA|0,I=(g=kA)>>>0>(IA=g+sA|0)>>>0?I+1|0:I,g=IA,IA=I,W=(I=sA)- -1048576|0,gA=rA=gA-((I>>>0<4293918720)-1|0)|0,rA=g,IA=(g=BA>>21)+IA|0,IA=(I=(2097151&BA)<<11|jA>>>21)>>>0>(BA=rA+I|0)>>>0?IA+1|0:IA,g=BA-(I=-2097152&W)|0,sA=eg(K,q,-683901,-1),I=(BA=IA-((I>>>0>BA>>>0)+gA|0)|0)+p|0,IA=I=sA>>>0>(kA=g+sA|0)>>>0?I+1|0:I,rA=BA-(((I=g)>>>0<4293918720)-1|0)|0,T=I- -1048576|0,IA=(g=QA>>21)+IA|0,IA=(I=(2097151&QA)<<11|ZA>>>21)>>>0>(QA=I+(sA=kA)|0)>>>0?IA+1|0:IA,sA=g=QA-(I=-2097152&T)|0,I=(QA=IA-((I>>>0>QA>>>0)+(BA=rA)|0)|0)+pA|0,j=g- -1048576|0,rA=QA-((g>>>0<4293918720)-1|0)|0,jA=(g=IA=UA=g+UA|0)-(IA=-2097152&j)|0,ZA=(sA>>>0>g>>>0?I+1|0:I)-((g>>>0>>0)+(QA=rA)|0)|0,OA=CA-(I=-2097152&GA)|0,kA=tA-((I>>>0>CA>>>0)+fA|0)|0,UA=iA-(I=-2097152&bA)|0,bA=hA-((I>>>0>iA>>>0)+oA|0)|0,g=eg(K,q,654183,0),I=p+uA|0,I=g>>>0>(IA=g+FA|0)>>>0?I+1|0:I,iA=((CA=IA)-(g=-2097152&DA)|0)+(IA=eg(x,L,-997805,-1))|0,g=p+(I-((g>>>0>CA>>>0)+wA|0)|0)|0,g=IA>>>0>iA>>>0?g+1|0:g,IA=eg(d,LA,136657,0),I=p+g|0,GA=CA=IA+iA|0,iA=IA>>>0>CA>>>0?I+1|0:I,sA=eA-(I=-2097152&mA)|0,hA=PA-((I>>>0>eA>>>0)+HA|0)|0,I=eg(v,P,-997805,-1),g=p,IA=I,I=eg(S,R,654183,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(N,J,136657,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,CA=(I=IA)+(IA=eg(U,X,-683901,-1))|0,I=p+g|0,IA=qA+(IA>>>0>CA>>>0?I+1|0:I)|0,oA=(g=CA+yA|0)-(I=-2097152&WA)|0,tA=(IA=g>>>0>>0?IA+1|0:IA)-((I>>>0>g>>>0)+JA|0)|0,I=eg(v,P,654183,0),g=p,IA=I,I=eg(S,R,470296,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,CA=(I=IA)+(IA=eg(N,J,-997805,-1))|0,I=p+g|0,g=CA+cA|0,IA=XA+(IA>>>0>CA>>>0?I+1|0:I)|0,CA=(I=eg(U,X,136657,0))+g|0,g=p+(g>>>0>>0?IA+1|0:IA)|0,g=I>>>0>CA>>>0?g+1|0:g,IA=eg(M,dA,-683901,-1),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,yA=(IA=CA)-(g=-2097152&AA)|0,eA=I-((g>>>0>IA>>>0)+VA|0)|0,g=eg(E,0,_,0),I=p,IA=g,g=eg(a,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,CA=(g=IA)+(IA=eg(o,0,G,0))|0,g=p+I|0,g=IA>>>0>CA>>>0?g+1|0:g,IA=eg(w,0,l,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,g=eg(t,0,y,0),IA=p+I|0,IA=g>>>0>(CA=g+CA|0)>>>0?IA+1|0:IA,I=eg(e,0,h,0),g=p+IA|0,g=I>>>0>(CA=I+CA|0)>>>0?g+1|0:g,IA=eg(f,0,D,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,IA=eg(c,m,F,0),g=p+I|0,g=IA>>>0>(CA=IA+CA|0)>>>0?g+1|0:g,IA=eg(s,0,u,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,g=eg(r,0,k,0),IA=p+I|0,IA=g>>>0>(CA=g+CA|0)>>>0?IA+1|0:IA,I=eg(Q,0,b,0),g=p+IA|0,g=I>>>0>(CA=I+CA|0)>>>0?g+1|0:g,IA=eg(i,0,H,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,g=(B=(n[B+28|0]|n[B+29|0]<<8|n[B+30|0]<<16|n[B+31|0]<<24)>>>7|0)>>>0>(IA=B+CA|0)>>>0?I+1|0:I,I=IA,IA=gA>>21,gA=I+(B=(2097151&gA)<<11|W>>>21)|0,I=g+IA|0,CA=gA,fA=I=B>>>0>gA>>>0?I+1|0:I,uA=(I=gA)- -1048576|0,pA=g=fA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+eA|0,gA=B=(g=(2097151&g)<<11|uA>>>21)+yA|0,rA=I=g>>>0>B>>>0?I+1|0:I,wA=(I=B)- -1048576|0,cA=g=rA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+tA|0,yA=I=(g=(2097151&g)<<11|wA>>>21)>>>0>(B=g+oA|0)>>>0?I+1|0:I,tA=(I=B)- -1048576|0,eA=g=yA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+hA|0,mA=oA=(g=(2097151&g)<<11|tA>>>21)+sA|0,HA=I=g>>>0>oA>>>0?I+1|0:I,I=eg(oA,I,-683901,-1),g=p+iA|0,oA=IA=I+GA|0,iA=I>>>0>IA>>>0?g+1|0:g,FA=B-(I=-2097152&tA)|0,GA=eA=yA-((I>>>0>B>>>0)+eA|0)|0,g=eg(K,q,470296,0)+EA|0,I=_A+p|0,I=g>>>0>>0?I+1|0:I,EA=((IA=g)-(B=-2097152&NA)|0)+(g=eg(x,L,654183,0))|0,IA=p+(I-((B>>>0>IA>>>0)+lA|0)|0)|0,I=eg(d,LA,-997805,-1),g=p+(g>>>0>EA>>>0?IA+1|0:IA)|0,g=I>>>0>(B=I+EA|0)>>>0?g+1|0:g,IA=(I=B)+(B=eg(mA,HA,136657,0))|0,I=p+g|0,I=B>>>0>IA>>>0?I+1|0:I,B=eg(FA,eA,-683901,-1),g=p+I|0,yA=g=B>>>0>(IA=B+IA|0)>>>0?g+1|0:g,hA=(I=IA)- -1048576|0,eA=B=g-((I>>>0<4293918720)-1|0)|0,I=(I=B>>21)+iA|0,EA=I=(g=(2097151&B)<<11|hA>>>21)>>>0>(B=g+oA|0)>>>0?I+1|0:I,tA=(I=B)- -1048576|0,g=(I=(iA=oA=EA-((I>>>0<4293918720)-1|0)|0)>>21)+bA|0,bA=lA=(oA=(2097151&iA)<<11|tA>>>21)+UA|0,oA=oA>>>0>lA>>>0?g+1|0:g,XA=B-(I=-2097152&tA)|0,VA=EA-((I>>>0>B>>>0)+iA|0)|0,JA=IA-(I=-2097152&hA)|0,PA=yA-((I>>>0>IA>>>0)+eA|0)|0,I=eg(K,q,666643,0),IA=p+(SA-(((g=-2097152&KA)>>>0>nA>>>0)+vA|0)|0)|0,IA=I>>>0>(B=I+(nA-g|0)|0)>>>0?IA+1|0:IA,I=eg(x,L,470296,0),g=p+IA|0,g=I>>>0>(B=I+B|0)>>>0?g+1|0:g,IA=(I=B)+(B=eg(d,LA,654183,0))|0,I=p+g|0,eA=IA,B=B>>>0>IA>>>0?I+1|0:I,nA=gA-(I=-2097152&wA)|0,iA=rA-((I>>>0>gA>>>0)+cA|0)|0,g=eg(v,P,470296,0),I=p,IA=g,g=eg(S,R,666643,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(N,J,654183,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,IA=eg(U,X,-997805,-1),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,g=eg(M,dA,136657,0),IA=p+I|0,IA=g>>>0>(gA=g+gA|0)>>>0?IA+1|0:IA,I=eg(V,RA,-683901,-1),g=p+IA|0,I=fA+(I>>>0>(gA=I+gA|0)>>>0?g+1|0:g)|0,I=(IA=gA+CA|0)>>>0>>0?I+1|0:I,g=(gA=IA)-(IA=-2097152&uA)|0,IA=I-((IA>>>0>gA>>>0)+pA|0)|0,I=(I=BA>>21)+IA|0,EA=BA=(gA=g)+(g=(2097151&BA)<<11|T>>>21)|0,cA=IA=(rA=I=g>>>0>BA>>>0?I+1|0:I)-(((I=BA)>>>0<4293918720)-1|0)|0,g=(2097151&IA)<<11|(_A=I- -1048576|0)>>>21,IA=(IA>>21)+iA|0,DA=BA=g+nA|0,sA=IA=g>>>0>BA>>>0?IA+1|0:IA,I=eg(BA,IA,-683901,-1),g=p+B|0,g=I>>>0>(IA=I+eA|0)>>>0?g+1|0:g,B=eg(mA,HA,-997805,-1),I=p+g|0,I=B>>>0>(IA=B+IA|0)>>>0?I+1|0:I,B=eg(FA,GA,136657,0),g=p+I|0,nA=IA=B+IA|0,gA=B>>>0>IA>>>0?g+1|0:g,g=eg(k,0,_,0),I=p,B=g,g=eg(F,0,Y,0),I=p+I|0,I=g>>>0>(B=B+g|0)>>>0?I+1|0:I,g=eg(H,0,G,0),IA=p+I|0,IA=g>>>0>(B=g+B|0)>>>0?IA+1|0:IA,I=eg(b,0,l,0),g=p+IA|0,I=g=I>>>0>(B=I+B|0)>>>0?g+1|0:g,CA=B=(g=MA>>>7&2097151)+B|0,B=g>>>0>B>>>0?I+1|0:I,I=eg(H,0,_,0),g=p,IA=I,I=eg(k,0,Y,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(b,0,G,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,BA=(I=IA)+(IA=2097151&((3&$)<<30|z>>>2))|0,I=g,iA=BA,tA=IA=(BA=I=IA>>>0>BA>>>0?I+1|0:I)-(((I=iA)>>>0<4293918720)-1|0)|0,g=(g=IA>>>21|0)+B|0,CA=IA=(I=(2097151&IA)<<11|(vA=I- -1048576|0)>>>21)+CA|0,fA=g=I>>>0>IA>>>0?g+1|0:g,lA=(I=IA)- -1048576|0,yA=B=g-((I>>>0<4293918720)-1|0)|0,I=(g=B>>>21|0)+YA|0,I=(B=aA+((2097151&B)<<11|lA>>>21)|0)>>>0>>0?I+1|0:I,aA=((IA=B)-(g=-2097152&TA)|0)+(B=eg(x,L,666643,0))|0,g=p+(I-((g>>>0>IA>>>0)+xA|0)|0)|0,g=B>>>0>aA>>>0?g+1|0:g,I=eg(d,LA,470296,0),g=p+g|0,g=I>>>0>(B=I+aA|0)>>>0?g+1|0:g,IA=(I=B)+(B=eg(DA,sA,136657,0))|0,I=p+g|0,I=B>>>0>IA>>>0?I+1|0:I,g=eg(mA,HA,654183,0),I=p+I|0,I=g>>>0>(B=g+IA|0)>>>0?I+1|0:I,g=eg(FA,GA,-997805,-1),IA=p+I|0,uA=B=g+B|0,eA=IA=g>>>0>B>>>0?IA+1|0:IA,wA=(I=B)- -1048576|0,aA=B=IA-((I>>>0<4293918720)-1|0)|0,g=(I=B>>21)+gA|0,gA=IA=(B=(2097151&B)<<11|wA>>>21)+nA|0,B=g=B>>>0>IA>>>0?g+1|0:g,nA=IA=g-(((I=IA)>>>0<4293918720)-1|0)|0,g=(2097151&IA)<<11|(hA=I- -1048576|0)>>>21,IA=(IA>>21)+PA|0,qA=pA=g+JA|0,pA=g>>>0>pA>>>0?IA+1|0:IA,IA=QA>>21,QA=(I=(2097151&QA)<<11|j>>>21)+(EA-(g=-2097152&_A)|0)|0,g=IA+(rA-((g>>>0>EA>>>0)+cA|0)|0)|0,rA=g=I>>>0>QA>>>0?g+1|0:g,cA=g=g-(((I=QA)>>>0<4293918720)-1|0)|0,SA=IA=g>>21,g=eg(MA=(2097151&g)<<11|(_A=I- -1048576|0)>>>21,IA,-683901,-1),I=p+B|0,I=g>>>0>(IA=g+gA|0)>>>0?I+1|0:I,JA=IA-(g=-2097152&hA)|0,PA=I-((g>>>0>IA>>>0)+nA|0)|0,I=eg(MA,SA,136657,0),g=p+eA|0,g=I>>>0>(B=I+uA|0)>>>0?g+1|0:g,YA=B-(I=-2097152&wA)|0,xA=g-((I>>>0>B>>>0)+aA|0)|0,B=(I=eg(d,LA,666643,0))+(CA-(g=-2097152&lA)|0)|0,g=p+(fA-((g>>>0>CA>>>0)+yA|0)|0)|0,g=I>>>0>B>>>0?g+1|0:g,IA=(I=B)+(B=eg(DA,sA,-997805,-1))|0,I=p+g|0,I=B>>>0>IA>>>0?I+1|0:I,B=(g=eg(mA,HA,470296,0))+IA|0,IA=p+I|0,IA=g>>>0>B>>>0?IA+1|0:IA,I=eg(FA,GA,654183,0),g=p+IA|0,fA=B=I+B|0,EA=I>>>0>B>>>0?g+1|0:g,gA=BA,g=eg(b,0,_,0),I=p,B=g,g=eg(H,0,Y,0),I=p+I|0,I=g>>>0>(B=B+g|0)>>>0?I+1|0:I,g=B,g=(B=O>>>5&2097151)>>>0>(IA=g+B|0)>>>0?I+1|0:I,B=2097151&Z,BA=eg(b,0,Y,0)+B|0,I=p,eA=B=(yA=I=B>>>0>BA>>>0?I+1|0:I)-(((I=BA)>>>0<4293918720)-1|0)|0,CA=IA,g=g+(IA=B>>>21|0)|0,aA=g=(I=(2097151&B)<<11|(lA=I- -1048576|0)>>>21)>>>0>(B=CA+I|0)>>>0?g+1|0:g,uA=(I=B)- -1048576|0,nA=g=g-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>>21|0)+gA|0,I=(g=(2097151&g)<<11|uA>>>21)>>>0>(CA=g+iA|0)>>>0?I+1|0:I,CA=(IA=eg(DA,sA,654183,0))+((gA=CA)-(g=-2097152&vA)|0)|0,g=p+(I-((16383&tA)+(g>>>0>gA>>>0)|0)|0)|0,I=eg(mA,HA,666643,0),IA=p+(IA>>>0>CA>>>0?g+1|0:g)|0,IA=I>>>0>(gA=I+CA|0)>>>0?IA+1|0:IA,g=eg(FA,GA,470296,0),I=p+IA|0,wA=gA=g+gA|0,iA=I=g>>>0>gA>>>0?I+1|0:I,hA=(I=gA)- -1048576|0,CA=g=iA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+EA|0,tA=gA=(g=(2097151&g)<<11|hA>>>21)+fA|0,g=I=g>>>0>gA>>>0?I+1|0:I,fA=(I=gA)- -1048576|0,I=(IA=(gA=EA=g-((I>>>0<4293918720)-1|0)|0)>>21)+xA|0,EA=(EA=(2097151&gA)<<11|fA>>>21)>>>0>(YA=vA=EA+YA|0)>>>0?I+1|0:I,I=eg(MA,SA,-997805,-1);g=p+g|0,g=I>>>0>(IA=I+tA|0)>>>0?g+1|0:g,xA=IA-(I=-2097152&fA)|0,vA=g-((I>>>0>IA>>>0)+gA|0)|0,I=eg(MA,SA,654183,0),g=p+iA|0,g=I>>>0>(IA=I+wA|0)>>>0?g+1|0:g,tA=IA-(I=-2097152&hA)|0,fA=g-((I>>>0>IA>>>0)+CA|0)|0,IA=(g=eg(DA,sA,470296,0))+(B-(I=-2097152&uA)|0)|0,I=p+(aA-((16383&nA)+(I>>>0>B>>>0)|0)|0)|0,I=g>>>0>IA>>>0?I+1|0:I,B=(g=eg(FA,GA,666643,0))+IA|0,IA=p+I|0,IA=g>>>0>B>>>0?IA+1|0:IA,gA=B,B=(I=eg(DA,sA,666643,0))+(BA-(g=-2097152&lA)|0)|0,g=p+(yA-((4095&eA)+(g>>>0>BA>>>0)|0)|0)|0,iA=g=I>>>0>B>>>0?g+1|0:g,eA=(I=B)- -1048576|0,CA=BA=g-((I>>>0<4293918720)-1|0)|0,IA=(I=BA>>21)+IA|0,aA=BA=(g=(2097151&BA)<<11|eA>>>21)+gA|0,gA=IA=g>>>0>BA>>>0?IA+1|0:IA,nA=(I=BA)- -1048576|0,BA=IA=IA-((I>>>0<4293918720)-1|0)|0,g=(I=IA>>21)+fA|0,IA=g=(IA=(2097151&IA)<<11|nA>>>21)>>>0>(yA=IA+tA|0)>>>0?g+1|0:g,g=eg(MA,SA,470296,0),I=p+gA|0,I=g>>>0>(aA=g+aA|0)>>>0?I+1|0:I,g=aA-(gA=-2097152&nA)|0,gA=I-((gA>>>0>aA>>>0)+BA|0)|0,nA=g,BA=(I=eg(MA,SA,666643,0))+(B-(g=-2097152&eA)|0)|0,g=p+(iA-((g>>>0>B>>>0)+CA|0)|0)|0,I=(I=(g=I>>>0>BA>>>0?g+1|0:g)>>21)+gA|0,CA=B=nA+(g=(2097151&g)<<11|(B=BA)>>>21)|0,IA=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+IA|0,gA=B=(I=(2097151&I)<<11|B>>>21)+yA|0,B=(2097151&(IA=I>>>0>(g=B)>>>0?IA+1|0:IA))<<11|g>>>21,g=(I=IA>>21)+vA|0,aA=IA=B+xA|0,IA=(g=B>>>0>(I=IA)>>>0?g+1|0:g)>>21,g=(2097151&g)<<11|I>>>21,I=IA+EA|0,uA=B=g+YA|0,g=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+PA|0,wA=B=(I=(2097151&I)<<11|B>>>21)+JA|0,I=(I=(g=I>>>0>B>>>0?g+1|0:g)>>21)+pA|0,hA=B=(g=(2097151&g)<<11|B>>>21)+qA|0,IA=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+VA|0,tA=B=(I=(2097151&I)<<11|B>>>21)+XA|0,B=(2097151&(IA=I>>>0>(g=B)>>>0?IA+1|0:IA))<<11|g>>>21,g=(I=IA>>21)+oA|0,fA=IA=B+bA|0,IA=(g=B>>>0>(I=IA)>>>0?g+1|0:g)>>21,g=(2097151&g)<<11|I>>>21,I=IA+kA|0,pA=B=g+OA|0,g=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+ZA|0,yA=B=(I=(2097151&I)<<11|B>>>21)+jA|0,I=(g=I>>>0>B>>>0?g+1|0:g)>>21,iA=(IA=(2097151&g)<<11|B>>>21)+(g=QA-(B=-2097152&_A)|0)|0,IA=(rA-((B>>>0>QA>>>0)+cA|0)|0)+I|0,eA=iA,cA=(2097151&(IA=g>>>0>(I=iA)>>>0?IA+1|0:IA))<<11|I>>>21,EA=g=IA>>21,I=2097151&BA,B=eg(cA,g,666643,0)+I|0,g=p,iA=B,B=g=I>>>0>B>>>0?g+1|0:g,C[0|A]=iA,C[A+1|0]=(255&g)<<24|iA>>>8,BA=A,g=2097151&CA,IA=eg(cA,EA,470296,0)+g|0,I=p,I=g>>>0>IA>>>0?I+1|0:I,CA=IA,QA=(2097151&(IA=B))<<11|iA>>>21,IA=I+(g=IA>>21)|0,IA=QA>>>0>(CA=CA+QA|0)>>>0?IA+1|0:IA,QA=CA,C[BA+4|0]=(2047&IA)<<21|QA>>>11,I=IA,IA=QA,C[BA+3|0]=(7&I)<<29|IA>>>3,IA=2097151&gA,gA=eg(cA,EA,654183,0)+IA|0,g=p,g=IA>>>0>gA>>>0?g+1|0:g,IA=gA,gA=(2097151&I)<<11|QA>>>21,I=(I>>21)+g|0,g=I=gA>>>0>(CA=IA+gA|0)>>>0?I+1|0:I,C[BA+6|0]=(63&I)<<26|CA>>>6,gA=0,I=nA=2097151&QA,C[BA+2|0]=31&((65535&B)<<16|iA>>>16)|I<<5,B=2097151&aA,IA=eg(cA,EA,-997805,-1)+B|0,I=p,B=I=B>>>0>IA>>>0?I+1|0:I,I=g>>21,QA=(g=(2097151&g)<<11|CA>>>21)+IA|0,IA=I+B|0,iA=QA,IA=g>>>0>QA>>>0?IA+1|0:IA,C[BA+9|0]=(511&IA)<<23|QA>>>9,I=IA,C[BA+8|0]=(1&I)<<31|QA>>>1,QA=0,B=aA=2097151&CA,C[BA+5|0]=(524287&gA)<<13|nA>>>19|B<<2,B=2097151&uA,IA=eg(cA,EA,136657,0)+B|0,g=p,g=B>>>0>IA>>>0?g+1|0:g,B=IA,g=g+(IA=I>>21)|0,CA=B=B+(I=(2097151&I)<<11|iA>>>21)|0,g=I>>>0>B>>>0?g+1|0:g,C[BA+12|0]=(4095&g)<<20|B>>>12,B=g,I=g,g=CA,C[BA+11|0]=(15&I)<<28|g>>>4,BA=0,g=nA=2097151&iA,C[A+7|0]=(16383&QA)<<18|aA>>>14|g<<7,IA=A,g=2097151&wA,QA=eg(cA,EA,-683901,-1)+g|0,I=p,I=(I=g>>>0>QA>>>0?I+1|0:I)+(g=B>>21)|0,g=I=(B=(2097151&B)<<11|CA>>>21)>>>0>(gA=QA=B+QA|0)>>>0?I+1|0:I,C[IA+14|0]=(127&I)<<25|gA>>>7,QA=0,B=iA=2097151&CA,C[IA+10|0]=(131071&BA)<<15|nA>>>17|B<<4,B=IA,I>>=21,IA=(g=(2097151&g)<<11|gA>>>21)>>>0>(CA=g+(2097151&hA)|0)>>>0?I+1|0:I,C[B+17|0]=(1023&IA)<<22|CA>>>10,I=IA,C[B+16|0]=(3&I)<<30|CA>>>2,B=EA=2097151&gA,C[A+13|0]=(1048575&QA)<<12|iA>>>20|B<<1,g=I,I>>=21,g=(IA=(2097151&g)<<11|CA>>>21)>>>0>(gA=IA+(2097151&tA)|0)>>>0?I+1|0:I,C[(B=A)+20|0]=(8191&g)<<19|gA>>>13,I=g,g=gA,C[B+19|0]=(31&I)<<27|g>>>5,g=iA=2097151&CA,C[B+15|0]=(32767&BA)<<17|EA>>>15|g<<6,g=I,I>>=21,g=(B=(2097151&g)<<11|gA>>>21)>>>0>(EA=B+(2097151&fA)|0)>>>0?I+1|0:I,C[A+21|0]=EA,I=gA,C[A+18|0]=(262143&QA)<<14|iA>>>18|I<<3,B=g,I=g,g=EA,C[A+22|0]=(255&I)<<24|g>>>8,g=I>>21,IA=(I=(2097151&I)<<11|EA>>>21)>>>0>(gA=I+(2097151&pA)|0)>>>0?g+1|0:g,C[A+25|0]=(2047&IA)<<21|gA>>>11,I=IA,IA=gA,C[A+24|0]=(7&I)<<29|IA>>>3,g=I>>21,g=(BA=(2097151&I)<<11|gA>>>21)>>>0>(CA=BA+(2097151&yA)|0)>>>0?g+1|0:g,BA=CA,I=g,C[(IA=A)+27|0]=(63&I)<<26|BA>>>6,IA=0,g=CA=2097151&gA,C[A+23|0]=31&((65535&B)<<16|EA>>>16)|g<<5,g=I,I>>=21,I=(g=(2097151&g)<<11|BA>>>21)>>>0>(QA=g+(2097151&eA)|0)>>>0?I+1|0:I,B=QA,C[A+31|0]=(131071&I)<<15|B>>>17,C[A+30|0]=(511&I)<<23|B>>>9,C[A+29|0]=(1&I)<<31|B>>>1,I=0,gA=BA&=2097151,C[A+26|0]=(524287&IA)<<13|CA>>>19|gA<<2,C[A+28|0]=(16383&I)<<18|gA>>>14|B<<7}(E,r+160|0,r+288|0,r+224|0),fI(r+288|0,64),fI(r+224|0,64),I&&(i[I>>2]=64,i[I+4>>2]=0),h=r+560|0,0}function X(A,I,g){var B,Q=0,E=0;if(g>>>0>=512)return s(0|A,0|I,0|g),A;B=A+g|0;A:if(3&(A^I))if(B>>>0<4)g=A;else if((Q=B-4|0)>>>0>>0)g=A;else for(g=A;C[0|g]=n[0|I],C[g+1|0]=n[I+1|0],C[g+2|0]=n[I+2|0],C[g+3|0]=n[I+3|0],I=I+4|0,Q>>>0>=(g=g+4|0)>>>0;);else{I:if((0|g)<1)g=A;else if(3&A)for(g=A;;){if(C[0|g]=n[0|I],I=I+1|0,B>>>0<=(g=g+1|0)>>>0)break I;if(!(3&g))break}else g=A;if(!((Q=-4&B)>>>0<64||(E=Q+-64|0)>>>0>>0))for(;i[g>>2]=i[I>>2],i[g+4>>2]=i[I+4>>2],i[g+8>>2]=i[I+8>>2],i[g+12>>2]=i[I+12>>2],i[g+16>>2]=i[I+16>>2],i[g+20>>2]=i[I+20>>2],i[g+24>>2]=i[I+24>>2],i[g+28>>2]=i[I+28>>2],i[g+32>>2]=i[I+32>>2],i[g+36>>2]=i[I+36>>2],i[g+40>>2]=i[I+40>>2],i[g+44>>2]=i[I+44>>2],i[g+48>>2]=i[I+48>>2],i[g+52>>2]=i[I+52>>2],i[g+56>>2]=i[I+56>>2],i[g+60>>2]=i[I+60>>2],I=I- -64|0,E>>>0>=(g=g- -64|0)>>>0;);if(g>>>0>=Q>>>0)break A;for(;i[g>>2]=i[I>>2],I=I+4|0,Q>>>0>(g=g+4|0)>>>0;);}if(g>>>0>>0)for(;C[0|g]=n[0|I],I=I+1|0,(0|B)!=(0|(g=g+1|0)););return A}function V(A,I,g,B){var Q,E=0,a=0,r=0,o=0,e=0,t=0,f=0;if(h=Q=h-704|0,g|B)if(E=B<<3|g>>>29,r=(f=i[(a=A)+72>>2])+(e=g<<3)|0,E=E+(o=i[a+76>>2])|0,t=r,i[a+72>>2]=r,E=r>>>0>>0?E+1|0:E,i[a+76>>2]=E,t=(e=(0|E)==(0|o)&f>>>0>t>>>0|E>>>0>>0)+i[(a=r=a- -64|0)>>2]|0,E=i[a+4>>2],E=e>>>0>t>>>0?E+1|0:E,r=(e=B>>>29|0)+t|0,i[a>>2]=r,i[a+4>>2]=r>>>0>>0?E+1|0:E,(0|(E=B))==(0|(t=0-((o=127&((7&o)<<29|f>>>3))>>>0>128)|0))&g>>>0>=(r=128-o|0)>>>0|E>>>0>t>>>0){for(a=0,E=0;C[80+(A+(e=a+o|0)|0)|0]=n[I+a|0],(0|r)!=(0|(a=a+1|0))|(0|(E=a>>>0<1?E+1|0:E))!=(0|t););if(F(A,A+80|0,Q,E=Q+640|0),I=I+r|0,!(B=B-((g>>>0>>0)+t|0)|0)&(g=g-r|0)>>>0>127|B)for(;F(A,I,Q,E),I=I+128|0,!(B=B-(g>>>0<128)|0)&(g=g-128|0)>>>0>127|B;);if(g|B)for(a=0,E=0;C[80+(A+a|0)|0]=n[I+a|0],(0|g)!=(0|(a=o=a+1|0))|(0|B)!=(0|(E=o>>>0<1?E+1|0:E)););fI(Q,704)}else for(a=g,r=(g=!B&g>>>0>1|0!=(0|B))?a:1,f=g?B:0,a=0,E=0;C[80+(A+(B=a+o|0)|0)|0]=n[I+a|0],(0|r)!=(0|(a=g=a+1|0))|(0|(E=g>>>0<1?E+1|0:E))!=(0|f););return h=Q+704|0,0}function W(A,I,g,B,Q,E,n,a){A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,n|=0,a|=0;var r,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,D=0;h=r=h-16|0,i[r+12>>2]=0,pg(a);A:{if(B){w=4&a;I:{g:{B:{for(;;){o=f;Q:{C:{for(;;){if(y=C[g+o|0],255!=(0|(t=w?LA(y):KA(y))))break C;if(!Q)break Q;if(!gg(Q,y))break B;if(!((o=o+1|0)>>>0>>0))break}A=f+1|0,i[r+12>>2]=A>>>0>>0?B:A;break g}if(s=(s<<6)+t|0,(t=e+6|0)>>>0<8)e=t;else{if(e=e-2|0,I>>>0<=c>>>0){i[r+12>>2]=o,i[8960]=68,o=1;break I}C[A+c|0]=s>>>e,c=c+1|0}if((f=o+1|0)>>>0>>0)continue}break}i[r+12>>2]=f;break g}i[r+12>>2]=o}o=0}if(!(e>>>0<=4)){A=-1;break A}}if(A=-1,!((-1<>2];;){g:{if(I>>>0<=E>>>0)i[8960]=68;else{if(61==(0|(n=C[A+E|0]))){Q=Q-1|0;break g}if(B&&gg(B,n))break g;i[8960]=28}a=-1;break I}if(E=E+1|0,i[g>>2]=E,!Q)break}return a}(g,B,r+12|0,Q,e>>>1|0)))){A=0;I:if(Q&&!((o=i[r+12>>2])>>>0>=B>>>0)){g:{for(;;){if(!gg(Q,C[g+o|0]))break g;if((0|(o=o+1|0))==(0|B))break}i[r+12>>2]=B;break I}i[r+12>>2]=o}D=c}}return I=i[r+12>>2],n?i[n>>2]=I+g:(0|I)!=(0|B)&&(i[8960]=28,A=-1),E&&(i[E>>2]=D),h=r+16|0,0|A}function T(A,I,g){var B,Q,C,E=0;h=B=h-16|0,Q=i[A+20>>2],i[A+20>>2]=0,C=i[A+4>>2],i[A+4>>2]=0,E=-26;A:{I:{g:switch(g-1|0){case 1:if(E=-32,XA(I,35621,9))break A;I=I+9|0;break I;case 0:break g;default:break A}if(E=-32,XA(I,35631,8))break A;I=I+8|0}if(!XA(I,35640,3)&&(I=bA(I+3|0,B+12|0))){if(E=-26,19!=i[B+12>>2])break A;if(!XA(I,35644,3)&&(I=bA(I+3|0,B+12|0))&&(i[A+44>>2]=i[B+12>>2],!XA(I,35648,3)&&(I=bA(I+3|0,B+12|0))&&(i[A+40>>2]=i[B+12>>2],!XA(I,35652,3)&&(I=bA(I+3|0,B+12|0))&&(g=i[B+12>>2],i[A+48>>2]=g,i[A+52>>2]=g,36==(0|(g=n[0|I]))&&(i[B+12>>2]=Q,I=36==(0|g)?I+1|0:I,!W(i[A+16>>2],Q,I,YA(I),0,B+12|0,B+8|0,3)&&(i[A+20>>2]=i[B+12>>2],I=i[B+8>>2],36==(0|(g=n[0|I]))&&(i[B+12>>2]=C,I=36==(0|g)?I+1|0:I,!W(i[A>>2],C,I,YA(I),0,B+12|0,B+8|0,3)))))))){if(i[A+4>>2]=i[B+12>>2],I=i[B+8>>2],E=oA(A))break A;return h=B+16|0,n[0|I]?-32:0}}E=-32}return h=B+16|0,E}function j(A,I){var g;for(h=g=h-192|0,H(g+144|0,I),H(g+96|0,g+144|0),H(g+96|0,g+96|0),_(g+96|0,I,g+96|0),_(g+144|0,g+144|0,g+96|0),H(g+48|0,g+144|0),_(g+96|0,g+96|0,g+48|0),H(g+48|0,g+96|0),I=1;H(g+48|0,g+48|0),5!=(0|(I=I+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),I=1;H(g+48|0,g+48|0),10!=(0|(I=I+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),I=1;H(g,g),20!=(0|(I=I+1|0)););for(_(g+48|0,g,g+48|0),I=1;H(g+48|0,g+48|0),11!=(0|(I=I+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),I=1;H(g+48|0,g+48|0),50!=(0|(I=I+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),I=1;H(g,g),100!=(0|(I=I+1|0)););for(_(g+48|0,g,g+48|0),I=1;H(g+48|0,g+48|0),51!=(0|(I=I+1|0)););for(_(g+96|0,g+48|0,g+96|0),I=1;H(g+96|0,g+96|0),6!=(0|(I=I+1|0)););_(A,g+96|0,g+144|0),h=g+192|0}function Z(A,I){var g,B,Q,E,n,a,o,e,t,f,c=0,y=0,s=0,w=0,h=0,D=0,u=0;(y=s=i[A+60>>2])|(c=i[A+56>>2])&&(s=c,C[(w=c+A|0)- -64|0]=1,!(y=(c=c+1|0)>>>0<1?y+1|0:y)&c>>>0<=15&&EA(w+65|0,0,15-s|0),C[A+80|0]=1,S(A,A- -64|0,16,0)),t=i[A+52>>2],f=i[A+48>>2],s=i[A+44>>2],u=i[A+24>>2],h=i[A+28>>2]+(u>>>26|0)|0,c=i[A+32>>2]+(h>>>26|0)|0,e=(g=(E=(-67108864|(Q=i[A+36>>2]+(c>>>26|0)|0))+((o=(a=67108863&c)+((h=(D=67108863&h)+((y=(c=(67108863&u)+((y=i[A+20>>2]+r(Q>>>26|0,5)|0)>>>26|0)|0)+((n=5+(w=67108863&y)|0)>>>26|0)|0)>>>26|0)|0)>>>26|0)|0)>>>26|0)|0)>>31)&c|(B=67108863&(u=(E>>>31|0)-1|0))&y,y=0,y=(c=w&g|B&n|e<<26)>>>0>(w=c+i[A+40>>2]|0)>>>0?1:y,xI(I,w),h=(c=(D=D&g|h&B)<<20|e>>>6)+s|0,s=0,s=c>>>0>h>>>0?1:s,c=y,y=s,y=c>>>0>(h=c+h|0)>>>0?y+1|0:y,xI(I+4|0,h),s=0,s=(c=(w=g&a|B&o)<<14|D>>>12)>>>0>(D=c+f|0)>>>0?1:s,c=y,y=s,y=c>>>0>(D=c+D|0)>>>0?y+1|0:y,xI(I+8|0,D),xI(s=I+12|0,y=y+(w=(I=(u&E|g&Q)<<8|w>>>18)+t|0)|0),fI(A,88)}function O(A,I,g,B,Q){A|=0,I|=0,g|=0,B|=0;var E=0,i=0,a=0,o=0,f=0,c=0,y=0,s=0,w=0;pg(Q|=0),i=(E=(B>>>0)/3|0)<<2,(E=r(E,-3)+B|0)&&(i=2&Q?(2|i)+(E>>>1|0)|0:i+4|0);A:{I:{g:{B:{if(I>>>0>i>>>0){if(!(4&Q)){if(a=0,!B)break g;Q=0,E=0;break B}if(a=0,!B)break g;for(Q=0,E=0;;){for(f=n[g+o|0]|f<<8,Q=Q+8|0;c=E,y=Q,s=A+E|0,w=CI(f>>>(Q=Q-6|0)&63),C[0|s]=w,E=E+1|0,Q>>>0>5;);if((0|(o=o+1|0))==(0|B))break}if(a=E,!Q)break g;s=A+E|0,w=CI(f<<12-y&63),C[0|s]=w,a=c+2|0;break g}OI(),e()}for(;;){for(f=n[g+o|0]|f<<8,Q=Q+8|0;c=E,y=Q,s=A+E|0,w=EI(f>>>(Q=Q-6|0)&63),C[0|s]=w,E=E+1|0,Q>>>0>5;);if((0|(o=o+1|0))==(0|B))break}a=E,Q&&(s=A+E|0,w=EI(f<<12-y&63),C[0|s]=w,a=c+2|0)}if((E=a)>>>0<=i>>>0){if(E>>>0>>0)break I;i=E;break A}t(35568,35587,230,35603),e()}EA(A+E|0,61,i-E|0)}return EA(A+i|0,0,(I>>>0>(g=i+1|0)>>>0?I:g)-i|0),0|A}function z(A,I,g,B){var Q=0,E=0,a=0,r=0,o=0,e=0;A:{if((Q=i[A+56>>2])|(E=i[A+60>>2])){if(e=A,o=a=16-Q|0,o=(a=(0|(r=0-((Q>>>0>16)+E|0)|0))==(0|B)&g>>>0>>0|B>>>0>>0)?g:o,(a=r=a?B:r)|o){if(C[(A+Q|0)- -64|0]=n[0|I],E=1,Q=0,1!=(0|o)|a)for(;r=E+i[A+56>>2]|0,C[(A+r|0)- -64|0]=n[I+E|0],(0|o)!=(0|(E=E+1|0))|(0|(Q=E>>>0<1?Q+1|0:Q))!=(0|a););Q=i[A+56>>2],E=i[A+60>>2]}if(r=Q+o|0,Q=E+a|0,E=r,i[e+56>>2]=E,Q=E>>>0>>0?Q+1|0:Q,i[e+60>>2]=Q,!Q&E>>>0<16)break A;S(A,A- -64|0,16,0),i[A+56>>2]=0,i[A+60>>2]=0,g=(Q=g)-(E=o)|0,B=B-((Q>>>0>>0)+a|0)|0,I=I+E|0}if(!B&g>>>0>=16|B&&(S(A,I,Q=-16&g,B),g&=15,B=0,I=I+Q|0),g|B){for(E=0,Q=0;e=E+i[A+56>>2]|0,C[(A+e|0)- -64|0]=n[I+E|0],(0|g)!=(0|(E=E+1|0))|(0|B)!=(0|(Q=E>>>0<1?Q+1|0:Q)););I=A,Q=g+i[A+56>>2]|0,A=B+i[A+60>>2]|0,i[I+56>>2]=Q,i[I+60>>2]=g>>>0>Q>>>0?A+1|0:A}}}function $(A,I){var g=0,B=0,Q=0,C=0,E=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0;A:if(A&&(2!=i[A+36>>2]||(Q=i[I>>2],n[I+8|0]<2&&!Q)?(function(A,I,g){var B,Q=0,C=0,E=0;if(h=B=h-4096|0,vg(B+3072|0),vg(B+2048|0),!(!A|!I)&&(i[B+2048>>2]=i[I>>2],i[B+2052>>2]=0,i[B+2056>>2]=i[I+4>>2],i[B+2060>>2]=0,i[B+2064>>2]=n[I+8|0],i[B+2068>>2]=0,i[B+2072>>2]=i[A+16>>2],i[B+2076>>2]=0,i[B+2080>>2]=i[A+8>>2],i[B+2084>>2]=0,i[B+2088>>2]=i[A+36>>2],i[B+2092>>2]=0,i[A+20>>2]))for(I=0;(E=127&I)||(Q=i[B+2100>>2],Q=(C=i[B+2096>>2]+1|0)>>>0<1?Q+1|0:Q,i[B+2096>>2]=C,i[B+2100>>2]=Q,vg(B),vg(B+1024|0),Y(B+3072|0,B+2048|0,B),Y(B+3072|0,B,B+1024|0)),E=i[4+(C=(B+1024|0)+(E<<3)|0)>>2],i[(Q=(I<<3)+g|0)>>2]=i[C>>2],i[Q+4>>2]=E,(I=I+1|0)>>>0>2];);h=B+4096|0}(A,I,t=i[A+4>>2]),Q=i[I>>2],B=0):(t=i[A+4>>2],B=1),c=B,!((E=!((B=n[I+8|0])|Q)<<1)>>>0>=(g=i[A+20>>2])>>>0)))for(C=i[A+24>>2],g=(Q=(r(C,i[I+4>>2])+E|0)+r(g,B)|0)+((Q>>>0)%(C>>>0)|0?-1:C-1|0)|0;;){if(f=1==((Q>>>0)%(C>>>0)|0)?Q-1|0:g,c?(o=i[A>>2],g=i[o+4>>2]+(f<<10)|0):(o=i[A>>2],g=(E<<3)+t|0),B=i[g+4>>2],y=i[g>>2],g=i[A+28>>2],i[I+12>>2]=E,B=(B>>>0)%(g>>>0)|0,e=i[I+4>>2],g=n[I+8|0]?B:e,o=i[o+4>>2],s=C,w=B,C=i[I>>2],e=(o+(r(s,g=(B=C)?w:g)<<10)|0)+(FA(A,I,y,!0&(0|g)==(0|e))<<10)|0,B=o+(f<<10)|0,g=o+(Q<<10)|0,C?Y(B,e,g):b(B,e,g),(E=E+1|0)>>>0>=a[A+20>>2])break A;Q=Q+1|0,g=f+1|0,C=i[A+24>>2]}}function AA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y=0,s=0,w=0,h=0,D=0,u=0,p=0,l=0,F=0;B=i[I+4>>2],Q=i[A+4>>2],C=i[I+8>>2],s=i[A+8>>2],E=i[I+12>>2],w=i[A+12>>2],n=i[I+16>>2],h=i[A+16>>2],a=i[I+20>>2],D=i[A+20>>2],r=i[I+24>>2],u=i[A+24>>2],o=i[I+28>>2],p=i[A+28>>2],e=i[I+32>>2],l=i[A+32>>2],t=i[I+36>>2],F=i[A+36>>2],c=(g=0-g|0)&((f=i[I>>2])^(y=i[A>>2])),i[A>>2]=c^y,y=F,F=g&(F^t),i[A+36>>2]=y^F,y=l,l=g&(l^e),i[A+32>>2]=y^l,y=p,p=g&(p^o),i[A+28>>2]=y^p,y=u,u=g&(u^r),i[A+24>>2]=y^u,y=D,D=g&(D^a),i[A+20>>2]=y^D,y=h,h=g&(h^n),i[A+16>>2]=y^h,y=w,w=g&(w^E),i[A+12>>2]=y^w,y=s,s=g&(s^C),i[A+8>>2]=y^s,y=A,A=g&(B^Q),i[y+4>>2]=A^Q,i[I+36>>2]=F^t,i[I+32>>2]=l^e,i[I+28>>2]=p^o,i[I+24>>2]=u^r,i[I+20>>2]=D^a,i[I+16>>2]=h^n,i[I+12>>2]=w^E,i[I+8>>2]=s^C,i[I+4>>2]=A^B,i[I>>2]=f^c}function IA(A,I){var g;i[A>>2]=67108863&(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24),i[A+4>>2]=(n[I+3|0]|n[I+4|0]<<8|n[I+5|0]<<16|n[I+6|0]<<24)>>>2&67108611,i[A+8>>2]=(n[I+6|0]|n[I+7|0]<<8|n[I+8|0]<<16|n[I+9|0]<<24)>>>4&67092735,i[A+12>>2]=(n[I+9|0]|n[I+10|0]<<8|n[I+11|0]<<16|n[I+12|0]<<24)>>>6&66076671,g=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,i[A+20>>2]=0,i[A+24>>2]=0,i[A+28>>2]=0,i[A+32>>2]=0,i[A+36>>2]=0,i[A+16>>2]=g>>>8&1048575,i[A+40>>2]=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,i[A+44>>2]=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,i[A+48>>2]=n[I+24|0]|n[I+25|0]<<8|n[I+26|0]<<16|n[I+27|0]<<24,I=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,C[A+80|0]=0,i[A+56>>2]=0,i[A+60>>2]=0,i[A+52>>2]=I}function gA(A,I,g){var B=0;A:if((0|A)!=(0|I)){if((I-A|0)-g>>>0<=0-(g<<1)>>>0)return X(A,I,g);if(B=3&(A^I),A>>>0>>0){if(B)B=A;else{if(3&A)for(B=A;;){if(!g)break A;if(C[0|B]=n[0|I],I=I+1|0,g=g-1|0,!(3&(B=B+1|0)))break}else B=A;if(!(g>>>0<=3))for(;i[B>>2]=i[I>>2],I=I+4|0,B=B+4|0,(g=g-4|0)>>>0>3;);}if(g)for(;C[0|B]=n[0|I],B=B+1|0,I=I+1|0,g=g-1|0;);}else{if(!B){if(A+g&3)for(;;){if(!g)break A;if(C[0|(B=(g=g-1|0)+A|0)]=n[I+g|0],!(3&B))break}if(!(g>>>0<=3))for(;i[(g=g-4|0)+A>>2]=i[I+g>>2],g>>>0>3;);}if(!g)break A;for(;C[(g=g-1|0)+A|0]=n[I+g|0],g;);}}return A}function BA(A,I){var g,B=0;h=g=h-48|0,function(A,I){var g,B,Q,C,E,n,a,o,e=0;B=i[I+28>>2],Q=i[I+24>>2],C=i[I+20>>2],E=i[I+16>>2],n=i[I+12>>2],a=i[I+8>>2],o=i[I+4>>2],e=i[I>>2],g=i[I+36>>2],I=i[I+32>>2],e=r(((B+(Q+(C+(E+(n+(a+(o+(e+(r(g,19)+16777216>>>25|0)>>26)>>25)>>26)>>25)>>26)>>25)>>26)>>25)+I>>26)+g>>25,19)+e|0,i[A>>2]=67108863&e,e=o+(e>>26)|0,i[A+4>>2]=33554431&e,e=a+(e>>25)|0,i[A+8>>2]=67108863&e,e=n+(e>>26)|0,i[A+12>>2]=33554431&e,e=E+(e>>25)|0,i[A+16>>2]=67108863&e,e=C+(e>>26)|0,i[A+20>>2]=33554431&e,e=Q+(e>>25)|0,i[A+24>>2]=67108863&e,e=B+(e>>26)|0,i[A+28>>2]=33554431&e,I=I+(e>>25)|0,i[A+32>>2]=67108863&I,i[A+36>>2]=g+(I>>26)&33554431}(g,I),I=i[g>>2],C[0|A]=I,C[A+2|0]=I>>>16,C[A+1|0]=I>>>8,B=i[g+4>>2],C[A+5|0]=B>>>14,C[A+4|0]=B>>>6,C[A+3|0]=B<<2|I>>>24,I=i[g+8>>2],C[A+8|0]=I>>>13,C[A+7|0]=I>>>5,C[A+6|0]=I<<3|B>>>22,B=i[g+12>>2],C[A+11|0]=B>>>11,C[A+10|0]=B>>>3,C[A+9|0]=B<<5|I>>>21,I=i[g+16>>2],C[A+15|0]=I>>>18,C[A+14|0]=I>>>10,C[A+13|0]=I>>>2,C[A+12|0]=I<<6|B>>>19,I=i[g+20>>2],C[A+16|0]=I,C[A+18|0]=I>>>16,C[A+17|0]=I>>>8,B=i[g+24>>2],C[A+21|0]=B>>>15,C[A+20|0]=B>>>7,C[A+19|0]=B<<1|I>>>24,I=i[g+28>>2],C[A+24|0]=I>>>13,C[A+23|0]=I>>>5,C[A+22|0]=I<<3|B>>>23,B=i[g+32>>2],C[A+27|0]=B>>>12,C[A+26|0]=B>>>4,C[A+25|0]=B<<4|I>>>21,I=i[g+36>>2],C[A+31|0]=I>>>18,C[A+30|0]=I>>>10,C[A+29|0]=I>>>2,C[A+28|0]=I<<6|B>>>20,h=g+48|0}function QA(A,I,g,B){var Q=0,E=0,i=0,a=0,r=0,o=0;A:if(g|B)for(o=A+224|0,i=A+96|0,Q=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24;;){if(a=96+(A+Q|0)|0,r=E=256-Q|0,!B&g>>>0<=E>>>0){X(a,I,g),I=g+(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)|0,C[A+352|0]=I,C[A+353|0]=I>>>8,C[A+354|0]=I>>>16,C[A+355|0]=I>>>24;break A}if(X(a,I,E),Q=(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)+E|0,C[A+352|0]=Q,C[A+353|0]=Q>>>8,C[A+354|0]=Q>>>16,C[A+355|0]=Q>>>24,iA(A,128),l(A,i),X(i,o,128),Q=(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)-128|0,C[A+352|0]=Q,C[A+353|0]=Q>>>8,C[A+354|0]=Q>>>16,C[A+355|0]=Q>>>24,I=I+E|0,!((g=(E=g)-r|0)|(B=B-(E>>>0>>0)|0)))break}return 0}function CA(A,I){var g,B=0,Q=0,E=0,i=0;for(h=g=h-464|0;Q=B<<1,i=n[I+B|0],C[Q+(g+400|0)|0]=15&i,C[(g+400|0)+(1|Q)|0]=i>>>4,32!=(0|(B=B+1|0)););for(B=0;I=((Q=(I=B)+n[0|(B=(g+400|0)+E|0)]|0)<<24)- -134217728|0,C[0|B]=Q-(I>>24&240),B=I>>28,63!=(0|(E=E+1|0)););for(C[g+463|0]=n[g+463|0]+B,zI(A),B=1;fg(g,B>>>1|0,C[(g+400|0)+B|0]),OA(g+240|0,A,g),DI(A,g+240|0),I=B>>>0<62,B=B+2|0,I;);for(JI(g+240|0,A),_I(g+120|0,g+240|0),AI(g+240|0,g+120|0),_I(g+120|0,g+240|0),AI(g+240|0,g+120|0),_I(g+120|0,g+240|0),AI(g+240|0,g+120|0),DI(A,g+240|0),B=0;fg(g,B>>>1|0,C[(g+400|0)+B|0]),OA(g+240|0,A,g),DI(A,g+240|0),I=B>>>0<62,B=B+2|0,I;);h=g+464|0}function EA(A,I,g){var B=0,Q=0,E=0,n=0;if(g&&(C[(B=A+g|0)-1|0]=I,C[0|A]=I,!(g>>>0<3||(C[B-2|0]=I,C[A+1|0]=I,C[B-3|0]=I,C[A+2|0]=I,g>>>0<7||(C[B-4|0]=I,C[A+3|0]=I,g>>>0<9||(Q=(B=0-A&3)+A|0,I=r(255&I,16843009),i[Q>>2]=I,i[(B=(g=g-B&-4)+Q|0)-4>>2]=I,g>>>0<9||(i[Q+8>>2]=I,i[Q+4>>2]=I,i[B-8>>2]=I,i[B-12>>2]=I,g>>>0<25||(i[Q+24>>2]=I,i[Q+20>>2]=I,i[Q+16>>2]=I,i[Q+12>>2]=I,i[B-16>>2]=I,i[B-20>>2]=I,i[B-24>>2]=I,i[B-28>>2]=I,(g=g-(n=4&Q|24)|0)>>>0<32))))))))for(B=I,E=I,I=Q+n|0;i[I+24>>2]=E,i[I+28>>2]=B,i[I+16>>2]=E,i[I+20>>2]=B,i[I+8>>2]=E,i[I+12>>2]=B,i[I>>2]=E,i[I+4>>2]=B,I=I+32|0,(g=g-32|0)>>>0>31;);return A}function iA(A,I){var g,B,Q,E=0,i=0;i=E=A- -64|0,B=1+(g=n[E+4|0]|n[E+5|0]<<8|n[E+6|0]<<16|n[E+7|0]<<24)|0,E=(I=I+(E=Q=n[0|E]|n[E+1|0]<<8|n[E+2|0]<<16|n[E+3|0]<<24)|0)>>>0>>0?B:g,C[0|i]=I,C[i+1|0]=I>>>8,C[i+2|0]=I>>>16,C[i+3|0]=I>>>24,C[i+4|0]=E,C[i+5|0]=E>>>8,C[i+6|0]=E>>>16,C[i+7|0]=E>>>24,I=(E=(0|E)==(0|g)&I>>>0>>0|E>>>0>>0)+(n[A+72|0]|n[A+73|0]<<8|n[A+74|0]<<16|n[A+75|0]<<24)|0,i=n[A+76|0]|n[A+77|0]<<8|n[A+78|0]<<16|n[A+79|0]<<24,E=I>>>0>>0?i+1|0:i,C[A+72|0]=I,C[A+73|0]=I>>>8,C[A+74|0]=I>>>16,C[A+75|0]=I>>>24,C[A+76|0]=E,C[A+77|0]=E>>>8,C[A+78|0]=E>>>16,C[A+79|0]=E>>>24}function nA(A,I,g,B,Q,C,E){var n,a,r,o,e=0;return h=n=h-352|0,K(n,C,E),!Q&B>>>0<=g-A>>>0|A>>>0>=g>>>0&&!(!Q&B>>>0>A-g>>>0|Q&&A>>>0>g>>>0)||(g=gA(A,g,B)),i[n+56>>2]=0,i[n+60>>2]=0,i[n+48>>2]=0,i[n+52>>2]=0,i[n+40>>2]=0,i[n+44>>2]=0,i[n+32>>2]=0,i[n+36>>2]=0,(a=!((E=(e=!Q&B>>>0>32|0!=(0|Q))?32:B)|(e=e?0:Q)))||X(n- -64|0,g,E),o=C+16|0,$I(n+32|0,n+32|0,r=E+32|0,C=r>>>0<32?e+1|0:e,o,n),lg(n+96|0,n+32|0),a||X(A,n- -64|0,E),fI(n+32|0,64),!Q&B>>>0>=33|Q&&Ag(A+E|0,C=g+E|0,(g=B)-E|0,Q-(e+(g>>>0>>0)|0)|0,o,n),fI(n,32),yg(n+96|0,A,B,Q),Fg(n+96|0,I),fI(n+96|0,256),h=n+352|0,0}function aA(A,I){i[A>>2]=1634760805,i[A+4>>2]=857760878,i[A+8>>2]=2036477234,i[A+12>>2]=1797285236,i[A+16>>2]=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,i[A+20>>2]=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,i[A+24>>2]=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,i[A+28>>2]=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,i[A+32>>2]=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,i[A+36>>2]=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,i[A+40>>2]=n[I+24|0]|n[I+25|0]<<8|n[I+26|0]<<16|n[I+27|0]<<24,i[A+44>>2]=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24}function rA(A,I,g,B,Q,C,E){var n,a,r=0,o=0;h=n=h-96|0,K(n,C,E),a=C+16|0,Vg[i[8952]](n+32|0,32,0,a,n),C=-1;A:{if(!(0|Vg[i[8946]](g,I,B,Q,n+32|0))){if(C=0,!A)break A;!Q&B>>>0<=A-I>>>0|A>>>0<=I>>>0&&!(!Q&B>>>0>I-A>>>0|Q&&A>>>0>>0)||(I=gA(A,I,B)),g=(C=!Q&B>>>0>32|0!=(0|Q))?32:B,E=C=C?0:Q,g|C?(o=X(n- -64|0,I,g),C=E,$I(n+32|0,n+32|0,r=g+32|0,C=r>>>0<32?C+1|0:C,a,n),X(A,o,g)):(C=E,$I(n+32|0,n+32|0,r=g+32|0,C=r>>>0<32?C+1|0:C,a,n)),C=0,!Q&B>>>0<33||Ag((r=A)+(A=g)|0,A+I|0,B-A|0,Q-(E+(A>>>0>B>>>0)|0)|0,a,n)}fI(n,32)}return h=n+96|0,C}function oA(A){var I=0,g=0,B=0;if(!A)return-25;if(!i[A>>2])return-1;A:{I:{if(I=-2,!(a[A+4>>2]<16)&&(i[A+8>>2]||(I=-18,!i[A+12>>2]))){if(g=i[A+20>>2],!i[A+16>>2])break I;if(I=-6,!(g>>>0<8)&&(i[A+24>>2]||(I=-20,!i[A+28>>2]))&&(i[A+32>>2]||(I=-21,!i[A+36>>2]))){if(!(g=i[A+48>>2]))return-16;if(I=-17,!(g>>>0>16777215||(I=-14,(B=i[A+44>>2])>>>0<8||(I=-15,B>>>0>2097152||(I=-14,g<<3>>>0>B>>>0))))){if(!i[A+40>>2])return-12;if(A=i[A+52>>2])break A;I=-28}}}return I}return g?-19:-6}return A>>>0>16777215?-29:0}function eA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y,s,w,h,D,u,p,l;f=i[I+4>>2],B=i[A+4>>2],c=i[I+8>>2],Q=i[A+8>>2],y=i[I+12>>2],C=i[A+12>>2],s=i[I+16>>2],E=i[A+16>>2],w=i[I+20>>2],n=i[A+20>>2],h=i[I+24>>2],a=i[A+24>>2],D=i[I+28>>2],r=i[A+28>>2],u=i[I+32>>2],o=i[A+32>>2],p=i[I+36>>2],e=i[A+36>>2],t=i[A>>2],l=i[I>>2]^t,I=0-g|0,i[A>>2]=t^l&I,i[A+36>>2]=I&(e^p)^e,i[A+32>>2]=I&(o^u)^o,i[A+28>>2]=I&(r^D)^r,i[A+24>>2]=I&(a^h)^a,i[A+20>>2]=I&(n^w)^n,i[A+16>>2]=I&(E^s)^E,i[A+12>>2]=I&(C^y)^C,i[A+8>>2]=I&(Q^c)^Q,i[A+4>>2]=I&(B^f)^B}function tA(A,I){for(var g=0,B=0,Q=0,E=0,i=0,a=0,r=0,o=0;C[A+g|0]=n[(g>>>3|0)+I|0]>>>(7&g)&1,256!=(0|(g=g+1|0)););for(;;){a=(I=a)+1|0;A:if(n[0|(i=A+I|0)]&&(g=a,Q=1,!(I>>>0>254)))for(;;){I:if(E=C[0|(B=A+g|0)])if((0|(o=(r=C[0|i])+(E<<=Q)|0))<=15)C[0|i]=o,C[0|B]=0;else{if((0|(B=r-E|0))<-15)break A;for(C[0|i]=B;;){if(!n[0|(B=A+g|0)]){C[0|B]=1;break I}if(C[0|B]=0,B=g>>>0<255,g=g+1|0,!B)break}}if(Q>>>0>5)break A;if(!((g=I+(Q=Q+1|0)|0)>>>0<256))break}if(256==(0|a))break}}function fA(A,I,g,B){var Q,C,E,n,a=0;h=Q=h+-64|0,EA(Q+8|0,0,52),a=YA(A),i[Q+20>>2]=a,i[Q+36>>2]=a,i[Q+4>>2]=a,C=k(a),i[Q+32>>2]=C,E=k(a),i[Q+16>>2]=E,n=k(a),i[Q>>2]=n;A:if(!n|!C|!E||!(a=k(a)))m(C),m(E),m(n),A=-22;else{if(A=T(Q,A,B)){m(i[Q+32>>2]),m(i[Q+16>>2]),m(i[Q>>2]),m(a);break A}A=0,I=pA(i[Q+40>>2],i[Q+44>>2],i[Q+52>>2],I,g,i[Q+16>>2],i[Q+20>>2],a,i[Q+4>>2],0,0,B),m(i[Q+32>>2]),m(i[Q+16>>2]),(I||zA(a,i[Q>>2],i[Q+4>>2]))&&(A=-35),m(a),m(i[Q>>2])}return h=Q- -64|0,A}function cA(A,I){var g,B,Q=0;h=g=h-288|0,d(B=A+40|0,I),wg(Q=A+80|0),H(g+240|0,B),_(g+192|0,g+240|0,2128),yA(g+240|0,g+240|0,Q),sA(g+192|0,g+192|0,Q),H(g+144|0,g+192|0),_(g+144|0,g+144|0,g+192|0),H(A,g+144|0),_(A,A,g+192|0),_(A,A,g+240|0),function(A,I){var g,B=0;for(h=g=h-144|0,H(g+96|0,I),H(g+48|0,g+96|0),H(g+48|0,g+48|0),_(g+48|0,I,g+48|0),_(g+96|0,g+96|0,g+48|0),H(g+96|0,g+96|0),_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),B=1;H(g+48|0,g+48|0),5!=(0|(B=B+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),B=1;H(g+48|0,g+48|0),10!=(0|(B=B+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),B=1;H(g,g),20!=(0|(B=B+1|0)););for(_(g+48|0,g,g+48|0),B=1;H(g+48|0,g+48|0),11!=(0|(B=B+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),B=1;H(g+48|0,g+48|0),50!=(0|(B=B+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),B=1;H(g,g),100!=(0|(B=B+1|0)););for(_(g+48|0,g,g+48|0),B=1;H(g+48|0,g+48|0),51!=(0|(B=B+1|0)););_(g+96|0,g+48|0,g+96|0),H(g+96|0,g+96|0),H(g+96|0,g+96|0),_(A,g+96|0,I),h=g+144|0}(A,A),_(A,A,g+144|0),_(A,A,g+240|0),H(g+96|0,A),_(g+96|0,g+96|0,g+192|0),yA(g+48|0,g+96|0,g+240|0);A:{if(!RI(g+48|0)){if(sA(g,g+96|0,g+240|0),Q=-1,!RI(g))break A;_(A,A,2176)}(0|KI(A))==(n[I+31|0]>>>7|0)&&mA(A,A),_(A+120|0,A,B),Q=0}return h=g+288|0,Q}function yA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y,s,w,h,D,u;B=i[g+4>>2],Q=i[I+4>>2],C=i[g+8>>2],E=i[I+8>>2],n=i[g+12>>2],a=i[I+12>>2],r=i[g+16>>2],o=i[I+16>>2],e=i[g+20>>2],t=i[I+20>>2],f=i[g+24>>2],c=i[I+24>>2],y=i[g+28>>2],s=i[I+28>>2],w=i[g+32>>2],h=i[I+32>>2],D=i[g+36>>2],u=i[I+36>>2],i[A>>2]=i[I>>2]-i[g>>2],i[A+36>>2]=u-D,i[A+32>>2]=h-w,i[A+28>>2]=s-y,i[A+24>>2]=c-f,i[A+20>>2]=t-e,i[A+16>>2]=o-r,i[A+12>>2]=a-n,i[A+8>>2]=E-C,i[A+4>>2]=Q-B}function sA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y,s,w,h,D,u;B=i[g+4>>2],Q=i[I+4>>2],C=i[g+8>>2],E=i[I+8>>2],n=i[g+12>>2],a=i[I+12>>2],r=i[g+16>>2],o=i[I+16>>2],e=i[g+20>>2],t=i[I+20>>2],f=i[g+24>>2],c=i[I+24>>2],y=i[g+28>>2],s=i[I+28>>2],w=i[g+32>>2],h=i[I+32>>2],D=i[g+36>>2],u=i[I+36>>2],i[A>>2]=i[g>>2]+i[I>>2],i[A+36>>2]=D+u,i[A+32>>2]=w+h,i[A+28>>2]=y+s,i[A+24>>2]=f+c,i[A+20>>2]=e+t,i[A+16>>2]=r+o,i[A+12>>2]=n+a,i[A+8>>2]=C+E,i[A+4>>2]=B+Q}function wA(A){var I,g=0,B=0,Q=0,E=0;for(C[11+(I=h-16|0)|0]=0,C[I+12|0]=0,C[I+13|0]=0,C[I+14|0]=0,i[I+8>>2]=0;;){for(Q=n[A+B|0],g=0;C[0|(E=(I+8|0)+g|0)]=n[0|E]|Q^n[(3232+(g<<5)|0)+B|0],7!=(0|(g=g+1|0)););if(31==(0|(B=B+1|0)))break}for(B=127&n[A+31|0],A=0,g=0;C[0|(Q=(I+8|0)+g|0)]=n[0|Q]|B^n[3263+(g<<5)|0],7!=(0|(g=g+1|0)););for(g=0;g=n[(I+8|0)+A|0]-1|g,7!=(0|(A=A+1|0)););return g>>>8&1}function hA(A,I){var g=0,B=0,Q=0,E=0,i=0;for(EA(X(A,1952,64)- -64|0,0,293);Q=B=(g=E<<3)+A|0,g=I+g|0,i=n[0|B]|n[B+1|0]<<8|n[B+2|0]<<16|n[B+3|0]<<24,B=(n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24)^(n[B+4|0]|n[B+5|0]<<8|n[B+6|0]<<16|n[B+7|0]<<24),g=(n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24)^i,C[0|Q]=g,C[Q+1|0]=g>>>8,C[Q+2|0]=g>>>16,C[Q+3|0]=g>>>24,C[Q+4|0]=B,C[Q+5|0]=B>>>8,C[Q+6|0]=B>>>16,C[Q+7|0]=B>>>24,8!=(0|(E=E+1|0)););}function DA(A,I,g,B,Q){var C,E=0;h=C=h+-64|0;A:{I:{if(E=!g,(g=YA(A))>>>0<128&&E){if(i[C+56>>2]=0,i[C+48>>2]=0,i[C+52>>2]=0,i[C+40>>2]=0,i[C+44>>2]=0,E=function(A){var I=0,g=0;return I=0,A&&(g=A,I=A,(1|A)>>>0<65536||(I=g)),g=I,!(A=k(I))|!(3&n[A-4|0])||EA(A,0,g),A}(g))break I}else i[8960]=28;A=-1;break A}i[C+32>>2]=0,i[C+36>>2]=0,i[C+8>>2]=E,i[C+16>>2]=E,i[C+20>>2]=g,i[C>>2]=E,i[C+12>>2]=g,i[C+24>>2]=0,i[C+28>>2]=0,i[C+4>>2]=g,T(C,A,Q)?(i[8960]=28,A=-1):(A=1,(0|I)==i[C+40>>2]&&(A=i[C+44>>2]!=(B>>>10|0))),m(E)}return h=C- -64|0,A}function uA(A,I){var g,B=0,Q=0,E=0,o=0;if(h=g=h-48|0,!((B=oA(A))||(B=-26,I-1>>>0>1||(E=i[A+44>>2],B=i[A+48>>2],i[g>>2]=0,Q=i[A+40>>2],i[g+28>>2]=B,i[g+12>>2]=-1,i[g+8>>2]=Q,B=((Q=E>>>0<(Q=B<<3)>>>0?Q:E)>>>0)/((E=B<<2)>>>0)|0,i[g+20>>2]=B,i[g+24>>2]=B<<2,i[g+16>>2]=r(B,E),B=i[A+52>>2],i[g+36>>2]=I,i[g+32>>2]=B,B=function(A,I){var g,B=0;return h=g=h-80|0,B=-25,!A|!I||(B=k(i[A+20>>2]<<3),i[A+4>>2]=B,B?(B=function(A,I){var g,B=0,Q=0;h=g=h-16|0,Q=-22;A:if(!(!A|!I)&&1024==(((B=I<<10)>>>0)/(I>>>0)|0)&&(I=k(12),i[A>>2]=I,I)){i[I>>2]=0,i[I+4>>2]=0,I=function(A,I){if(I>>>0>4294967168)A=48;else{if(!(I=function(A){var I=0,g=0,B=0,Q=0,C=0,E=0;return A>>>0>=4294967168?(i[8960]=48,0):(A=k(76+(B=A>>>0<11?16:A+11&-8)|0))?(I=A-8|0,63&A?(Q=(-8&(E=i[(C=A-4|0)>>2]))-(g=(A=(A=(A+63&-64)-8|0)-I>>>0>15?A:A- -64|0)-I|0)|0,3&E?(i[A+4>>2]=Q|1&i[A+4>>2]|2,i[4+(Q=A+Q|0)>>2]=1|i[Q+4>>2],i[C>>2]=g|1&i[C>>2]|2,i[A+4>>2]=1|i[A+4>>2],v(I,g)):(I=i[I>>2],i[A+4>>2]=Q,i[A>>2]=I+g)):A=I,3&(I=i[A+4>>2])&&((g=-8&I)>>>0<=B+16>>>0||(i[A+4>>2]=B|1&I|2,I=A+B|0,B=g-B|0,i[I+4>>2]=3|B,i[4+(g=A+g|0)>>2]=1|i[g+4>>2],v(I,B))),A+8|0):0}(I)))return 48;i[A>>2]=I,A=0}return A}(g+12|0,B),i[8960]=I;I:{if(I)i[g+12>>2]=0;else if(I=i[g+12>>2])break I;m(i[A>>2]),i[A>>2]=0;break A}i[i[A>>2]>>2]=I,i[i[A>>2]+4>>2]=I,i[i[A>>2]+8>>2]=B,Q=0}return h=g+16|0,Q}(A,i[A+16>>2]))?eI(A,i[I+56>>2]):(function(A,I,g){var B,Q=0;B=Q=h,h=Q=Q-448&-64,!A|!I||(iI(Q- -64|0,0,0,64),xI(Q+60|0,i[I+48>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+4>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+44>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+40>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,19),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,g),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+12>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+8>>2])&&(hg(Q- -64|0,g,i[I+12>>2],0),1&C[I+56|0]&&(fI(i[I+8>>2],i[I+12>>2]),i[I+12>>2]=0)),xI(Q+60|0,i[I+20>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+16>>2])&&hg(Q- -64|0,g,i[I+20>>2],0),xI(Q+60|0,i[I+28>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+24>>2])&&(hg(Q- -64|0,g,i[I+28>>2],0),2&n[I+56|0]&&(fI(i[I+24>>2],i[I+28>>2]),i[I+28>>2]=0)),xI(Q+60|0,i[I+36>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+32>>2])&&hg(Q- -64|0,g,i[I+36>>2],0),dI(Q- -64|0,A,64)),h=B}(g,I,i[A+36>>2]),fI(g- -64|0,8),function(A,I){var g,B=0,Q=0,C=0;if(h=g=h-1024|0,i[I+28>>2])for(C=A+68|0,Q=A- -64|0;xI(Q,0),xI(C,B),J(g,1024,A,72),TA(i[i[I>>2]+4>>2]+(r(i[I+24>>2],B)<<10)|0,g),xI(Q,1),J(g,1024,A,72),TA(1024+(i[i[I>>2]+4>>2]+(r(i[I+24>>2],B)<<10)|0)|0,g),(B=B+1|0)>>>0>2];);fI(g,1024),h=g+1024|0}(g,A),fI(g,72),B=0):B=-22),h=g+80|0,B}(g,A))))){if(i[g+8>>2])for(;kA(g,o),(o=o+1|0)>>>0>2];);!function(A,I){var g,B=0,Q=0;if(h=g=h-2048|0,!(!A|!I)){if(Yg(g+1024|0,(i[i[I>>2]+4>>2]+(i[I+24>>2]<<10)|0)-1024|0),a[I+28>>2]>=2)for(B=1;Q=i[I+24>>2],QI(g+1024|0,(i[i[I>>2]+4>>2]+(Q+r(B,Q)<<10)|0)-1024|0),(B=B+1|0)>>>0>2];);!function(A,I){for(var g=0,B=0;tI((g=B<<3)+A|0,i[(g=I+g|0)>>2],i[g+4>>2]),128!=(0|(B=B+1|0)););}(g,g+1024|0),J(i[A>>2],i[A+4>>2],g,1024),fI(g+1024|0,1024),fI(g,1024),eI(I,i[A+56>>2])}h=g+2048|0}(A,g),B=0}return h=g+48|0,B}function pA(A,I,g,B,Q,C,E,n,a,r,o,e){var t,f;return h=t=h+-64|0,(f=k(a))?(i[t+32>>2]=0,i[t+36>>2]=0,i[t+24>>2]=0,i[t+28>>2]=0,i[t+20>>2]=E,i[t+16>>2]=C,i[t+12>>2]=Q,i[t+8>>2]=B,i[t+4>>2]=a,i[t>>2]=f,i[t+56>>2]=0,i[t+52>>2]=g,i[t+48>>2]=g,i[t+44>>2]=I,i[t+40>>2]=A,(g=uA(t,e))?fI(f,a):!r|!o||!R(r,o,t,e)?(n&&X(n,f,a),fI(f,a),g=0):(fI(f,a),fI(r,o),g=-31),m(f)):g=-22,h=t- -64|0,g}function lA(A,I,g,B,Q,E){var i,a,o=0,e=0,t=0;return h=i=h-592|0,o=-1,function(A){var I=0,g=0,B=0,Q=0,C=0;for(I=32,g=1;C=(B=n[(I=I-1|0)+A|0])-(Q=n[I+3456|0])>>8&g|255&C,g&=65535+(B^Q)>>>8,I;);return 0!=(0|C)}(a=A+32|0)&&(wA(A)||function(A){var I=0,g=0;for(g=127&(-1^n[A+31|0]),I=30;g=-1^n[A+I|0]|g,I=I-1|0;);return 1&(((255&g)-1&236-n[0|A])>>>8^-1)}(Q)&&(wA(Q)||cA(i+128|0,Q)||(ig(i+384|0,E),V(i+384|0,A,32,0),V(i+384|0,Q,32,0),V(i+384|0,I,g,B),UI(i+384|0,i+320|0),G(i+320|0),function(A,I,g,B){var Q;h=Q=h-2272|0,tA(Q+2016|0,I),tA(Q+1760|0,B),FI(Q+480|0,g),JI(Q+320|0,g),DI(Q,Q+320|0),VA(Q+320|0,Q,Q+480|0),DI(Q+160|0,Q+320|0),FI(I=Q+640|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+800|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+960|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+1120|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+1280|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+1440|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(Q+1600|0,Q+160|0),Ug(A),wg(A+40|0),wg(A+80|0),B=255;A:{for(;;){if(!(n[(g=B)+(Q+2016|0)|0]|n[(Q+1760|0)+g|0])){if(B=g-1|0,g)continue;break A}break}if(!((0|g)<0))for(;AI(Q+320|0,A),(0|(g=C[(I=g)+(Q+2016|0)|0]))>=1?(DI(Q+160|0,Q+320|0),VA(Q+320|0,Q+160|0,(Q+480|0)+r((254&g)>>>1|0,160)|0)):(0|g)>-1||(DI(Q+160|0,Q+320|0),WA(Q+320|0,Q+160|0,(Q+480|0)+r((0-g&254)>>>1|0,160)|0)),(0|(g=C[I+(Q+1760|0)|0]))>=1?(DI(Q+160|0,Q+320|0),OA(Q+320|0,Q+160|0,r((254&g)>>>1|0,120)+2272|0)):(0|g)>-1||(DI(Q+160|0,Q+320|0),ZA(Q+320|0,Q+160|0,r((0-g&254)>>>1|0,120)+2272|0)),_I(A,Q+320|0),g=I-1|0,(0|I)>0;);}h=Q+2272|0}(i+8|0,i+320|0,i+128|0,a),nI(i+288|0,i+8|0),e=-1,t=Gg(i+288|0,A),o=((i+288|0)==(0|A)?e:t)|zA(A,i+288|0,32)))),h=i+592|0,o}function FA(A,I,g,B){var Q=0,C=0;A:if(i[I>>2])C=i[A+24>>2],Q=i[A+20>>2],B=B?i[I+12>>2]+(C+(-1^Q)|0)|0:(C-Q|0)-!i[I+12>>2]|0,C=0,3!=(0|(I=n[I+8|0]))&&(C=r(Q,I+1|0));else{if(!(Q=n[I+8|0])){B=i[I+12>>2]-1|0,C=0;break A}if(Q=r(Q,i[A+20>>2]),I=i[I+12>>2],B){B=(I+Q|0)-1|0,C=0;break A}B=Q-!I|0,C=0}return I=C+(Q=B-1|0)|0,eg(g,0,g,0),eg(B,0,p,0),function(A,I,g){var B=0,Q=0,C=0,E=0,i=0,n=0,a=0,e=0,t=0;A:{I:{g:{B:{Q:{C:{E:{i:{n:{if(Q=I){if(!(B=g))break n;break i}return D=A-r((A>>>0)/(g>>>0)|0,g)|0,u=0,void(p=0)}if(!A)break E;break C}if(!((E=B-1|0)&B))break Q;i=0-(E=(o(B)+33|0)-o(Q)|0)|0;break g}return D=0,u=Q,void(p=0)}if((B=32-o(Q)|0)>>>0<31)break B;break I}if(D=A&E,u=0,1==(0|B))break A;return g=31&(A=B?31-o(B-1^B)|0:32),void(p=(63&A)>>>0>=32?0:I>>>g|0)}E=B+1|0,i=63-B|0}if(B=I,C=31&(Q=63&E),Q>>>0>=32?(Q=0,C=B>>>C|0):(Q=B>>>C|0,C=((1<>>C),B=31&(i&=63),i>>>0>=32?(I=A<>>32-B|I<>>31)-(e=g&(n=i-((Q=Q<<1|C>>>31)+(B>>>0>>0)|0)>>31))|0,Q=Q-(a>>>0>>0)|0,I=I<<1|A>>>31,A=t|A<<1,t=1&n,E=E-1|0;);return D=C,u=Q,void(p=I<<1|A>>>31)}D=A,u=I,I=0}p=I}(I-(g=p)|0,(I>>>0>>0)-(I>>>0>>0)|0,i[A+24>>2]),p=u,D}function GA(A,I,g,B,Q,C,E,i,n,a){var r;return h=r=h-352|0,_g(r+32|0,64,n,a),lg(r+96|0,r+32|0),fI(r+32|0,64),yg(r+96|0,C,E,i),yg(r+96|0,34688,0-E&15,0),yg(r+96|0,I,g,B),yg(r+96|0,34688,0-g&15,0),tI(r+24|0,E,i),yg(r+96|0,r+24|0,8,0),tI(r+24|0,g,B),yg(r+96|0,r+24|0,8,0),Fg(r+96|0,r),fI(r+96|0,256),Q=kg(r,Q),fI(r,16),A&&(Q?(EA(A,0,g),Q=-1):(BI(A,I,g,B,n,1,a),Q=0)),h=r+352|0,Q}function kA(A,I){var g,B=0,Q=0,E=0;if(h=g=h-32|0,!(!A|!i[A+28>>2]))for(i[g+16>>2]=I,B=1;;){if(C[g+24|0]=Q,I=0,E=0,B)for(;i[g+28>>2]=0,B=i[g+28>>2],i[g+8>>2]=i[g+24>>2],i[g+12>>2]=B,i[g+20>>2]=I,B=i[g+20>>2],i[g>>2]=i[g+16>>2],i[g+4>>2]=B,$(A,g),(I=I+1|0)>>>0<(E=i[A+28>>2])>>>0;);if(B=E,4==(0|(Q=Q+1|0)))break}h=g+32|0}function _A(A,I,g,B,Q,C,E,n,a,r,o){var e;return h=e=h-336|0,_g(e+16|0,64,r,o),lg(e+80|0,e+16|0),fI(e+16|0,64),yg(e+80|0,E,n,a),yg(e+80|0,34688,0-n&15,0),BI(A,B,Q,C,r,1,o),yg(e+80|0,A,Q,C),yg(e+80|0,34688,0-Q&15,0),tI(e+8|0,n,a),yg(e+80|0,e+8|0,8,0),tI(e+8|0,Q,C),yg(e+80|0,e+8|0,8,0),Fg(e+80|0,I),fI(e+80|0,256),g&&(i[g>>2]=16,i[g+4>>2]=0),h=e+336|0,0}function HA(A,I,g,B,Q,C,E,i,n,a){var r;return h=r=h-352|0,og(r+32|0,n,a),lg(r+96|0,r+32|0),fI(r+32|0,64),yg(r+96|0,C,E,i),tI(r+24|0,E,i),yg(r+96|0,r+24|0,8,0),yg(r+96|0,I,g,B),tI(r+24|0,g,B),yg(r+96|0,r+24|0,8,0),Fg(r+96|0,r),fI(r+96|0,256),Q=kg(r,Q),fI(r,16),A&&(Q?(EA(A,0,g),Q=-1):(NI(A,I,g,B,n,a),Q=0)),h=r+352|0,Q}function YA(A){var I=0,g=0,B=0;A:{I:if(3&(I=A)){if(!n[0|A])return 0;for(;;){if(!(3&(I=I+1|0)))break I;if(!n[0|I])break}break A}for(;g=I,I=I+4|0,!((-1^(B=i[g>>2]))&B-16843009&-2139062144););if(!(255&B))return g-A|0;for(;B=n[g+1|0],g=I=g+1|0,B;);}return I-A|0}function bA(A,I){var g,B=0,Q=0,C=0,E=0,a=0;A:if(!(((g=n[0|A])-48&255)>>>0>9)){for(Q=g,B=A;;){if(E=B,C>>>0>429496729)break A;if((Q=(255&Q)-48|0)>>>0>(-1^(B=r(C,10)))>>>0)break A;if(C=B+Q|0,!(((Q=n[0|(B=E+1|0)])-48&255)>>>0<10))break}(0|A)==(0|B)|(48==(0|g)?(0|A)!=(0|E):0)||(i[I>>2]=C,a=B)}return a}function mA(A,I){var g,B,Q,C,E,n,a,r,o;g=i[I+4>>2],B=i[I+8>>2],Q=i[I+12>>2],C=i[I+16>>2],E=i[I+20>>2],n=i[I+24>>2],a=i[I+28>>2],r=i[I+32>>2],o=i[I+36>>2],i[A>>2]=0-i[I>>2],i[A+36>>2]=0-o,i[A+32>>2]=0-r,i[A+28>>2]=0-a,i[A+24>>2]=0-n,i[A+20>>2]=0-E,i[A+16>>2]=0-C,i[A+12>>2]=0-Q,i[A+8>>2]=0-B,i[A+4>>2]=0-g}function vA(A,I,g){var B=0;B=I<<8&16711680|I<<24,B|=255&(g<<8|I>>>24)|65280&(g<<24|I>>>8),I=-16777216&((255&g)<<24|I>>>8)|16711680&((16777215&g)<<8|I>>>24)|g>>>8&65280|g>>>24|0,C[0|A]=I,C[A+1|0]=I>>>8,C[A+2|0]=I>>>16,C[A+3|0]=I>>>24,I=B,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24}function UA(A,I,g){var B;B=A,g?(i[A+48>>2]=n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,g=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24):(i[A+48>>2]=0,g=0),i[B+52>>2]=g,i[A+56>>2]=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,i[A+60>>2]=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24}function SA(A,I){var g,B,Q,C,E,n,a,r,o;g=i[I+8>>2],B=i[I+12>>2],Q=i[I+16>>2],C=i[I+20>>2],E=i[I+24>>2],n=i[I+28>>2],a=i[I>>2],r=i[I+4>>2],o=i[I+36>>2],i[A+32>>2]=i[I+32>>2],i[A+36>>2]=o,i[A+24>>2]=E,i[A+28>>2]=n,i[A+16>>2]=Q,i[A+20>>2]=C,i[A+8>>2]=g,i[A+12>>2]=B,i[A>>2]=a,i[A+4>>2]=r}function NA(A,I,g,B,Q,C,E,a,r,o,e){var t;return h=t=h-48|0,i[t+8>>2]=0,i[t>>2]=0,i[t+4>>2]=0,x(t+16|0,o,e),e=n[o+16|0]|n[o+17|0]<<8|n[o+18|0]<<16|n[o+19|0]<<24,o=n[o+20|0]|n[o+21|0]<<8|n[o+22|0]<<16|n[o+23|0]<<24,i[t+4>>2]=e,i[t+8>>2]=o,function(A,I,g,B,Q,C,E,n,a,r,o){var e;h=e=h-336|0,rg(e+16|0,64,r,o),lg(e+80|0,e+16|0),fI(e+16|0,64),yg(e+80|0,E,n,a),yg(e+80|0,34704,0-n&15,0),SI(A,B,Q,C,r,1,o),yg(e+80|0,A,Q,C),yg(e+80|0,34704,0-Q&15,0),tI(e+8|0,n,a),yg(e+80|0,e+8|0,8,0),tI(e+8|0,Q,C),yg(e+80|0,e+8|0,8,0),Fg(e+80|0,I),fI(e+80|0,256),g&&(i[g>>2]=16,i[g+4>>2]=0),h=e+336|0}(A,I,g,B,Q,C,E,a,r,t,t+16|0),fI(t+16|0,32),h=t+48|0,0}function MA(A,I,g,B,Q,C,E,a,r,o){var e;return h=e=h-48|0,i[e+8>>2]=0,i[e>>2]=0,i[e+4>>2]=0,x(e+16|0,r,o),o=n[r+16|0]|n[r+17|0]<<8|n[r+18|0]<<16|n[r+19|0]<<24,r=n[r+20|0]|n[r+21|0]<<8|n[r+22|0]<<16|n[r+23|0]<<24,i[e+4>>2]=o,i[e+8>>2]=r,A=function(A,I,g,B,Q,C,E,i,n,a){var r;return h=r=h-352|0,rg(r+32|0,64,n,a),lg(r+96|0,r+32|0),fI(r+32|0,64),yg(r+96|0,C,E,i),yg(r+96|0,34704,0-E&15,0),yg(r+96|0,I,g,B),yg(r+96|0,34704,0-g&15,0),tI(r+24|0,E,i),yg(r+96|0,r+24|0,8,0),tI(r+24|0,g,B),yg(r+96|0,r+24|0,8,0),Fg(r+96|0,r),fI(r+96|0,256),Q=kg(r,Q),fI(r,16),A&&(Q?(EA(A,0,g),Q=-1):(SI(A,I,g,B,n,1,a),Q=0)),h=r+352|0,Q}(A,I,g,B,Q,C,E,a,e,e+16|0),fI(e+16|0,32),h=e+48|0,A}function dA(A){var I;return I=n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24,A=n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24,p=65280&(A<<24|I>>>8)|255&(A<<8|I>>>24)|I<<8&16711680|I<<24,-16777216&((255&A)<<24|I>>>8)|16711680&((16777215&A)<<8|I>>>24)|A>>>8&65280|A>>>24|0}function PA(A,I,g,B,Q,C,E,n,a,r,o){var e;return h=e=h-336|0,og(e+16|0,r,o),lg(e+80|0,e+16|0),fI(e+16|0,64),yg(e+80|0,E,n,a),tI(e+8|0,n,a),yg(e+80|0,e+8|0,8,0),NI(A,B,Q,C,r,o),yg(e+80|0,A,Q,C),tI(e+8|0,Q,C),yg(e+80|0,e+8|0,8,0),Fg(e+80|0,I),fI(e+80|0,256),g&&(i[g>>2]=16,i[g+4>>2]=0),h=e+336|0,0}function RA(A,I,g,B){var Q;if(h=Q=h-192|0,!(!g|(I-1&255)>>>0>=64|(B-1&255)>>>0>=64))return E[Q+130>>1]=257,C[Q+129|0]=B,C[Q+128|0]=I,WI(Q+128|4),tI(Q+128|8,0,0),EA(Q+144|0,0,48),hA(A,Q+128|0),EA(B+Q|0,0,128-B|0),QA(I=A,A=X(Q,g,B),128,0),fI(A,128),h=A+192|0,0;OI(),e()}function JA(A,I,g){i[A+48>>2]=g?n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24:0,i[A+52>>2]=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,i[A+56>>2]=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,i[A+60>>2]=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24}function xA(A,I,g,B,Q,C,E){var n;return h=n=h-16|0,A=EA(A,0,128),E>>>0<2147483649&&!(B|C)?E>>>0>8191&&Q|C?(cI(n,16),A=pA(Q,E>>>10|0,1,I,g,n,16,0,32,A,128,2)?-1:0):(i[8960]=28,A=-1):(i[8960]=22,A=-1),h=n+16|0,A}function LA(A){var I=0;return(0-(I=A+4&(A+65488>>>8^-1)&(57-A>>>8^-1)&255|((I=A-65|0)>>>8^-1)&I&(90-A>>>8^-1)&255|A+185&(A+65439>>>8^-1)&(122-A>>>8^-1)&255|63&(1+(16288^A)>>>8^-1)|62&(1+(16338^A)>>>8^-1))>>>8^-1)&1+(65470^A)>>>8&255|I}function KA(A){var I=0;return(0-(I=A+4&(A+65488>>>8^-1)&(57-A>>>8^-1)&255|((I=A-65|0)>>>8^-1)&I&(90-A>>>8^-1)&255|A+185&(A+65439>>>8^-1)&(122-A>>>8^-1)&255|63&(1+(16336^A)>>>8^-1)|62&(1+(16340^A)>>>8^-1))>>>8^-1)&1+(65470^A)>>>8&255|I}function qA(A,I){var g,B,Q=0,E=0,i=0,n=0;for(h=g=h-16|0,Q=10;n=Q,i=(I>>>0)/10|0,C[0|(E=(Q=Q-1|0)+(g+6|0)|0)]=I-r(i,10)|48,!(I>>>0<10)&&(I=i,Q););B=X(I=A,E,A=11-n|0)+A|0,C[0|B]=0,h=g+16|0}function XA(A,I,g){var B=0,Q=0,C=0;if(!g)return 0;A:if(B=n[0|A]){for(;;){if((0|(Q=n[0|I]))==(0|B)&&!(!(g=g-1|0)|!Q)){if(I=I+1|0,B=n[A+1|0],A=A+1|0,B)continue;break A}break}C=B}return(255&C)-n[0|I]|0}function VA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g),_(B,B,g+40|0),_(C=A+120|0,g+120|0,I+120|0),_(A,I+80|0,g+80|0),sA(Q,A,A),yA(A,E,B),sA(B,E,B),sA(E,Q,C),yA(C,Q,C),h=Q+48|0}function WA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g+40|0),_(B,B,g),_(C=A+120|0,g+120|0,I+120|0),_(A,I+80|0,g+80|0),sA(Q,A,A),yA(A,E,B),sA(B,E,B),yA(E,Q,C),sA(C,Q,C),h=Q+48|0}function TA(A,I){for(var g=0,B=0,Q=0,C=0;Q=(g=B<<3)+A|0,C=n[0|(g=I+g|0)]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,g=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24,i[Q>>2]=C,i[Q+4>>2]=g,128!=(0|(B=B+1|0)););}function jA(A,I,g){var B;if(i[12+(B=h-16|0)>>2]=A,i[B+8>>2]=I,I=0,i[B+4>>2]=0,(0|g)>=1)for(;i[B+4>>2]=i[B+4>>2]|n[i[B+8>>2]+I|0]^n[i[B+12>>2]+I|0],(0|g)!=(0|(I=I+1|0)););return(i[B+4>>2]-1>>>8&1)-1|0}function ZA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g+40|0),_(B,B,g),_(C=A+120|0,g+80|0,I+120|0),sA(Q,I=I+80|0,I),yA(A,E,B),sA(B,E,B),yA(E,Q,C),sA(C,Q,C),h=Q+48|0}function OA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g),_(B,B,g+40|0),_(C=A+120|0,g+80|0,I+120|0),sA(Q,I=I+80|0,I),yA(A,E,B),sA(B,E,B),sA(E,Q,C),yA(C,Q,C),h=Q+48|0}function zA(A,I,g){var B;if(i[12+(B=h-16|0)>>2]=A,i[B+8>>2]=I,I=0,C[B+7|0]=0,g)for(;C[B+7|0]=n[B+7|0]|n[i[B+8>>2]+I|0]^n[i[B+12>>2]+I|0],(0|g)!=(0|(I=I+1|0)););return(n[B+7|0]-1>>>8&1)-1|0}function $A(A,I,g){var B,Q=0,E=0;if(h=B=h-16|0,C[B+15|0]=0,E=-1,!(0|Vg[i[8950]](A,I,g))){for(;C[B+15|0]=n[A+Q|0]|n[B+15|0],32!=(0|(Q=Q+1|0)););E=0-(n[B+15|0]-1>>>8&1)|0}return h=B+16|0,E}function AI(A,I){var g,B,Q,C,E;h=B=h-48|0,H(A,I),H(g=A+80|0,E=I+40|0),function(A,I){var g,B,Q,C,E,n,a,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0,EA=0,iA=0,nA=0;E=K=(W=i[I+12>>2])<<1,n=K>>31,a=K=(O=i[I+4>>2])<<1,K=eg(E,n,K,g=K>>31),X=p,q=K,k=K=gA=i[I+8>>2],V=eg(K,z=K>>31,K,z),K=p+X|0,K=(q=q+V|0)>>>0>>0?K+1|0:K,V=q,B=q=BA=i[I+16>>2],o=q>>31,e=q=(QA=i[I>>2])<<1,X=eg(B,o,q,Q=q>>31),K=p+K|0,K=(q=V+X|0)>>>0>>0?K+1|0:K,j=q,X=i[I+28>>2],l=q=r(X,38),U=X,V=eg(q,h=q>>31,X,_=X>>31),K=p+K|0,K=(q=j+V|0)>>>0>>0?K+1|0:K,T=q,j=i[I+32>>2],Z=eg(f=q=r(j,19),c=q>>31,q=(V=i[I+24>>2])<<1,q>>31),q=p+K|0,q=Z>>>0>($=T+Z|0)>>>0?q+1|0:q,T=$,IA=i[I+36>>2],t=K=r(IA,38),C=K>>31,D=I=($=i[I+20>>2])<<1,Z=eg(K,C,I,s=I>>31),I=p+q|0,H=(K=T+Z|0)<<1,P=K=(K>>>0>>0?I+1|0:I)<<1|K>>>31,S=I=H+33554432|0,R=K=I>>>0<33554432?K+1|0:K,I=K>>26,K=(67108863&K)<<6|S>>>26,q=eg(a,g,B,o),Z=p,T=K,u=K=gA<<1,CA=W,W=eg(K,w=K>>31,W,Y=W>>31),K=p+Z|0,K=(q=W+q|0)>>>0>>0?K+1|0:K,gA=$,W=(Z=eg($,F=$>>31,e,Q))+q|0,q=p+K|0,q=W>>>0>>0?q+1|0:q,BA=W,N=K=X<<1,W=eg(f,c,K,b=K>>31),K=p+q|0,K=(X=BA+W|0)>>>0>>0?K+1|0:K,q=X,W=V,X=eg(t,C,V,y=V>>31),K=p+K|0,K=(q=q+X|0)>>>0>>0?K+1|0:K,X=q,I=I+(q=K<<1|q>>>31)|0,EA=K=T+(X<<=1)|0,K=K>>>0>>0?I+1|0:I,J=I=EA+16777216|0,I=(33554431&(K=I>>>0<16777216?K+1|0:K))<<7|I>>>25,X=K>>25,K=eg(E,n,CA,Y),q=p,T=I,I=(Z=eg(B,o,u,w))+K|0,K=p+q|0,K=I>>>0>>0?K+1|0:K,q=eg(a,g,D,s),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(Z=eg(e,Q,V,y))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,Z=j,j=eg(f,c,j,G=j>>31),K=p+I|0,K=(q=j+q|0)>>>0>>0?K+1|0:K,I=(j=eg(t,C,N,b))+q|0,q=p+K|0,I=((K=I)>>>0>>0?q+1|0:q)<<1|K>>>31,j=K<<1,K=I+X|0,K=(q=T+j|0)>>>0>>0?K+1|0:K,iA=q=(I=q)+33554432|0,X=K=q>>>0<33554432?K+1|0:K,K=-67108864&q,i[A+24>>2]=I-K,j=A,I=eg(I=r($,38),I>>31,$,F),K=p,T=I,$=eg(I=QA,q=I>>31,I,q),q=p+K|0,q=(I=T+$|0)>>>0<$>>>0?q+1|0:q,K=I,AA=I=r(V,19),m=I>>31,M=I=B<<1,I=K+(V=eg(AA,m,I,v=I>>31))|0,K=p+q|0,K=I>>>0>>0?K+1|0:K,q=eg(E,n,l,h),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(V=eg(f,c,u,w))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,V=eg(a,g,t,C),K=p+I|0,x=K=((I=q=V+q|0)>>>0>>0?K+1|0:K)<<1|I>>>31,QA=I=33554432+($=I<<1)|0,BA=q=I>>>0<33554432?K+1|0:K,I=(67108863&q)<<6|I>>>26,V=q>>26,K=eg(AA,m,D,s),q=p,nA=I,I=(O=eg(e,Q,T=O,d=T>>31))+K|0,K=p+q|0,K=I>>>0>>0?K+1|0:K,q=(O=eg(B,o,l,h))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,O=eg(f,c,E,n),K=p+I|0,K=(q=O+q|0)>>>0>>0?K+1|0:K,I=(O=eg(t,C,k,z))+q|0,q=p+K|0,I=((K=I)>>>0>>0?q+1|0:q)<<1|K>>>31,O=K<<1,K=I+V|0,K=(q=nA+O|0)>>>0>>0?K+1|0:K,O=q,(I=q+16777216|0)>>>0<16777216&&(K=K+1|0),nA=I,q=I,I=K>>25,K=(33554431&K)<<7|q>>>25,V=I,I=eg(e,Q,k,z),q=p,L=K,T=eg(a,g,T,d),K=p+q|0,K=(I=T+I|0)>>>0>>0?K+1|0:K,T=eg(AA,m,W,y),q=p+K|0,q=(I=T+I|0)>>>0>>0?q+1|0:q,T=eg(D,s,l,h),K=p+q|0,K=(I=T+I|0)>>>0>>0?K+1|0:K,q=eg(f,c,M,v),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(T=eg(t,C,E,n))+I|0,I=p+K|0,K=(K=(I=q>>>0>>0?I+1|0:I)<<1|q>>>31)+V|0,q=K=(I=L+(q<<=1)|0)>>>0>>0?K+1|0:K,T=K=I+33554432|0,V=q=K>>>0<33554432?q+1|0:q,K&=-67108864,i[j+8>>2]=I-K,I=eg(u,w,gA,F),q=p,K=(AA=eg(B,o,E,n))+I|0,I=p+q|0,I=K>>>0>>0?I+1|0:I,q=(AA=eg(a,g,W,y))+K|0,K=p+I|0,K=q>>>0>>0?K+1|0:K,I=(AA=eg(e,Q,U,_))+q|0,q=p+K|0,q=I>>>0>>0?q+1|0:q,AA=eg(t,C,Z,G),K=p+q|0,K=(K=(K=(I=AA+I|0)>>>0>>0?K+1|0:K)<<1|I>>>31)+(q=X>>26)|0,q=I=(X=(67108863&X)<<6|iA>>>26)+(I<<1)|0,I=K=I>>>0>>0?K+1|0:K,iA=K=q+16777216|0,X=I=K>>>0<16777216?I+1|0:I,I=-33554432&K,i[j+28>>2]=q-I,I=eg(e,Q,CA,Y),K=p,q=eg(a,g,k,z),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(W,y,l,h),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(z=eg(f,c,D,s))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,K=(z=eg(t,C,B,o))+q|0,q=p+I|0,I=K,K=(K>>>0>>0?q+1|0:q)<<1|K>>>31,q=I<<1,K=(I=V>>26)+K|0,K=(q=q+(V=(67108863&V)<<6|T>>>26)|0)>>>0>>0?K+1|0:K,CA=q=(I=q)+16777216|0,V=K=q>>>0<16777216?K+1|0:K,K=-33554432&q,i[j+12>>2]=I-K,z=A,I=eg(W,y,u,w),K=p,q=eg(B,o,B,o),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(E,n,D,s),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(a,g,N,b),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(j=eg(e,Q,Z,G))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,K=(IA=eg(t,C,j=IA,T=j>>31))+q|0,q=p+I|0,A=(I=K)<<1,K=(I=X>>25)+(K=(K>>>0>>0?q+1|0:q)<<1|K>>>31)|0,K=(q=A+(X=(33554431&X)<<7|iA>>>25)|0)>>>0>>0?K+1|0:K,IA=q=(I=q)+33554432|0,X=K=q>>>0<33554432?K+1|0:K,K=-67108864&q,i[z+32>>2]=I-K,K=V>>25,q=(V=(33554431&V)<<7|CA>>>25)+(H-(I=-67108864&S)|0)|0,I=K+(P-((I>>>0>H>>>0)+R|0)|0)|0,K=I=q>>>0>>0?I+1|0:I,V=I=q+33554432|0,I=((67108863&(K=I>>>0<33554432?K+1|0:K))<<6|I>>>26)+(EA=EA-(-33554432&J)|0)|0,i[z+20>>2]=I,I=-67108864&V,i[z+16>>2]=q-I,I=eg(E,n,W,y),q=p,K=(W=eg(gA,F,M,v))+I|0,I=p+q|0,I=K>>>0>>0?I+1|0:I,q=(W=eg(u,w,U,_))+K|0,K=p+I|0,K=q>>>0>>0?K+1|0:K,I=(W=eg(a,g,Z,G))+q|0,q=p+K|0,q=I>>>0>>0?q+1|0:q,W=eg(e,Q,j,T),K=p+q|0,K=(K=(K=(I=W+I|0)>>>0>>0?K+1|0:K)<<1|I>>>31)+(q=X>>26)|0,K=(I=(X=(67108863&X)<<6|IA>>>26)+(I<<1)|0)>>>0>>0?K+1|0:K,q=I,X=I,I=K,I=(K=q+16777216|0)>>>0<16777216?I+1|0:I,q=-33554432&K,i[z+36>>2]=X-q,V=O-(-33554432&nA)|0,I=(K=eg((33554431&I)<<7|K>>>25,I>>25,19,0))+($-(q=-67108864&QA)|0)|0,q=p+(x-((q>>>0>$>>>0)+BA|0)|0)|0,q=I>>>0>>0?q+1|0:q,K=I,I=q,I=((67108863&(I=(q=K+33554432|0)>>>0<33554432?I+1|0:I))<<6|q>>>26)+V|0,i[z+4>>2]=I,A=-67108864&q,i[z>>2]=K-A}(C=A+120|0,I+80|0),sA(Q=A+40|0,I,E),H(B,Q),sA(Q,g,A),yA(g,g,A),yA(A,B,Q),yA(C,C,g),h=B+48|0}function II(A){var I,g;return(A=(I=i[8943])+(g=A+3&-4)|0)>>>0<=I>>>0&&(0|g)>=1||A>>>0>Wg()<<16>>>0&&!(0|w(0|A))?(i[8960]=48,-1):(i[8943]=A,I)}function gI(A,I){var g;return h=g=h+-64|0,(I-1&255)>>>0>=64&&(OI(),e()),C[g+3|0]=1,C[g+1|0]=0,C[g+2|0]=1,C[0|g]=I,WI(4|g),tI(8|g,0,0),EA(g+16|0,0,48),hA(A,g),h=g- -64|0,0}function BI(A,I,g,B,Q,C,E){var i=0,n=0;i=B,1==(((i=(n=g+63|0)>>>0<63?i+1|0:i)>>>6|0)+(0!=(0|(i=(63&i)<<26|n>>>6)))|0)&(n=0-i|0)>>>0>>0&&(OI(),e()),SI(A,I,g,B,Q,C,E)}function QI(A,I){for(var g=0,B=0,Q=0,C=0;B=(g=Q<<3)+A|0,C=i[(g=I+g|0)>>2],g=i[B+4>>2]^i[g+4>>2],i[B>>2]=i[B>>2]^C,i[B+4>>2]=g,128!=(0|(Q=Q+1|0)););}function CI(A){var I,g;return 95&(1+(32704^A)>>>8^-1)|45&(1+(16321^A)>>>8^-1)|(I=A+65510>>>8&255)&A+65|(g=A+65484>>>8|0)&A+71&(255^I)|A+252&A+65474>>>8&(-1^g)&255}function EI(A){var I,g;return 47&(1+(16320^A)>>>8^-1)|43&(1+(16321^A)>>>8^-1)|(I=A+65510>>>8&255)&A+65|(g=A+65484>>>8|0)&A+71&(255^I)|A+252&A+65474>>>8&(-1^g)&255}function iI(A,I,g,B){var Q=0;Q=-1;A:if(!(g>>>0>64|B-1>>>0>63)){I:{if(!g||!I){if(!gI(A,255&B))break I;break A}if(RA(A,255&B,I,255&g))break A}Q=0}return Q}function nI(A,I){var g,B,Q;h=g=h-144|0,j(g+96|0,I+80|0),_(g+48|0,I,g+96|0),_(g,I+40|0,g+96|0),BA(A,g),B=A,Q=KI(g+48|0)<<7^n[A+31|0],C[B+31|0]=Q,h=g+144|0}function aI(A,I){var g,B=0;if(C[15+(g=h-16|0)|0]=0,I)for(;C[g+15|0]=n[A+B|0]|n[g+15|0],(0|(B=B+1|0))!=(0|I););return n[g+15|0]-1>>>8&1}function rI(A,I,g,B){var Q;return B=I+B|0,B=(Q=A+g|0)>>>0>>0?B+1|0:B,g=eg(A<<1&-2,1&(I=I<<1|A>>>31),g,0),A=p+B|0,p=A=(I=g+Q|0)>>>0>>0?A+1|0:A,I}function oI(A,I,g){var B,Q=0;if(B=g>>>3|0)for(g=0;vA((Q=g<<3)+A|0,i[(Q=I+Q|0)>>2],i[Q+4>>2]),(0|B)!=(0|(g=g+1|0)););}function eI(A,I){var g=0;!function(A,I){I&&((I=i[A>>2])&&fI(i[I+4>>2],i[A+16>>2]<<10),(I=i[A+4>>2])&&fI(I,i[A+20>>2]<<3))}(A,4&I),m(i[A+4>>2]),i[A+4>>2]=0,(I=i[A>>2])&&(g=i[I>>2])&&m(g),m(I),i[A>>2]=0}function tI(A,I,g){C[0|A]=I,C[A+1|0]=I>>>8,C[A+2|0]=I>>>16,C[A+3|0]=I>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24}function fI(A,I){var g;if(i[12+(g=h-16|0)>>2]=A,I)for(A=0;C[i[g+12>>2]+A|0]=0,(0|I)!=(0|(A=A+1|0)););}function cI(A,I){A|=0;var g=0,B=0,Q=0;if(I|=0)for(;B=A+g|0,Q=YI(),C[0|B]=Q,(0|(g=g+1|0))!=(0|I););}function yI(A,I,g,B,Q){var C,E;return A|=0,I|=0,g|=0,B|=0,h=C=(E=h)-128&-64,IA(C,Q|=0),z(C,I,g,B),Z(C,A),h=E,0}function sI(A){var I=0,g=0,B=0;for(I=1;I=n[0|(B=A+g|0)]+I|0,C[0|B]=I,I=I>>>8|0,4!=(0|(g=g+1|0)););}function wI(A,I,g,B,Q,C,E,i){var n,a=0;return h=n=h-32|0,a=-1,jI(n,E,i)||(a=Qg(A,I,g,B,Q,C,n),fI(n,32)),h=n+32|0,a}function hI(A,I,g,B,Q,C,E,i){var n,a=0;return h=n=h-32|0,a=-1,jI(n,E,i)||(a=Cg(A,I,g,B,Q,C,n),fI(n,32)),h=n+32|0,a}function DI(A,I){var g,B,Q;_(A,I,g=I+120|0),_(A+40|0,B=I+40|0,Q=I+80|0),_(A+80|0,Q,g),_(A+120|0,I,B)}function uI(A,I,g,B,Q,C,E){return!B&g>>>0>=16|B?hI(A,I+16|0,I,g-16|0,B-(g>>>0<16)|0,Q,C,E):-1}function pI(A,I){for(var g=0,B=0;C[0|(B=A+g|0)]=n[0|B]^n[I+g|0],8!=(0|(g=g+1|0)););}function lI(A,I,g){var B,Q;h=B=(Q=h)-384&-64,qI(B,0,0,24),sg(B,I,32,0),sg(B,g,32,0),TI(B,A,24),h=Q}function FI(A,I){var g;sA(A,g=I+40|0,I),yA(A+40|0,g,I),SA(A+80|0,I+80|0),_(A+120|0,I+120|0,2224)}function GI(A,I,g,B,Q,C,E){return I-1>>>0>63|E>>>0>64?-1:function(A,I,g,B,Q,C,E){var i,n=0;if(i=n=h,h=n=n-384&-64,!(!A|(B-1&255)>>>0>=64|(Q|C?!I:0)|E>>>0>=65|(E?!g:0)))return E?RA(n,B,g,E):gI(n,B),QA(n,I,Q,C),M(n,A,B),h=i,0;OI(),e()}(A,g,C,255&I,B,Q,255&E)}function kI(A,I,g,B,Q,C,E){return!B&g>>>0>=4294967280|B&&(OI(),e()),wI(A+16|0,A,I,g,B,Q,C,E)}function _I(A,I){var g;_(A,I,g=I+120|0),_(A+40|0,I+40|0,I=I+80|0),_(A+80|0,I,g)}function HI(A){var I;return I=n[0|A]|n[A+1|0]<<8,A=n[A+2|0],p=A>>>16|0,I|A<<16}function YI(){var A,I;return h=A=h-16|0,C[A+15|0]=0,I=0|f(1024,A+15|0,0),h=A+16|0,0|I}function bI(A,I,g,B,Q){var E;return h=E=h-416|0,function(A,I){var g,B=0,Q=0;for(h=g=h-192|0,MI(A),EA(g- -64|0,54,128),C[g+64|0]=54^n[0|I],B=1;C[0|(Q=(g- -64|0)+B|0)]=n[0|Q]^n[I+B|0],32!=(0|(B=B+1|0)););for(V(A,g- -64|0,128,0),MI(A=A+208|0),EA(g- -64|0,92,128),C[g+64|0]=92^n[0|I],B=1;C[0|(Q=(g- -64|0)+B|0)]=n[0|Q]^n[I+B|0],32!=(0|(B=B+1|0)););V(A,g- -64|0,128,0),fI(g- -64|0,128),fI(g,64),h=g+192|0}(E,Q),V(E,I,g,B),function(A,I){var g,B=0;h=g=h+-64|0,function(A,I){var g;h=g=h+-64|0,UI(A,g),V(A=A+208|0,g,64,0),UI(A,I),fI(g,64),h=g- -64|0}(A,g),B=i[g+28>>2],A=i[g+24>>2],C[I+24|0]=A,C[I+25|0]=A>>>8,C[I+26|0]=A>>>16,C[I+27|0]=A>>>24,C[I+28|0]=B,C[I+29|0]=B>>>8,C[I+30|0]=B>>>16,C[I+31|0]=B>>>24,B=i[g+20>>2],A=i[g+16>>2],C[I+16|0]=A,C[I+17|0]=A>>>8,C[I+18|0]=A>>>16,C[I+19|0]=A>>>24,C[I+20|0]=B,C[I+21|0]=B>>>8,C[I+22|0]=B>>>16,C[I+23|0]=B>>>24,B=i[g+12>>2],A=i[g+8>>2],C[I+8|0]=A,C[I+9|0]=A>>>8,C[I+10|0]=A>>>16,C[I+11|0]=A>>>24,C[I+12|0]=B,C[I+13|0]=B>>>8,C[I+14|0]=B>>>16,C[I+15|0]=B>>>24,B=i[g+4>>2],A=i[g>>2],C[0|I]=A,C[I+1|0]=A>>>8,C[I+2|0]=A>>>16,C[I+3|0]=A>>>24,C[I+4|0]=B,C[I+5|0]=B>>>8,C[I+6|0]=B>>>16,C[I+7|0]=B>>>24,h=g- -64|0}(E,A),h=E+416|0,0}function mI(A,I,g,B){var Q;return h=Q=h-208|0,MI(Q),V(Q,I,g,B),UI(Q,A),h=Q+208|0,0}function vI(A,I){var g=0;return(-1>>>(g=31&I)&A)<>>A}function UI(A,I){var g;h=g=h-704|0,function(A,I){var g,B=0;(g=i[A+72>>2]>>>3&127)>>>0<=111?X(80+(A+g|0)|0,35424,112-g|0):(X((B=A+80|0)+g|0,35424,128-g|0),F(A,B,I,I+640|0),EA(B,0,112)),oI(A+192|0,A- -64|0,16),F(A,A+80|0,I,I+640|0)}(A,g),oI(I,A,64),fI(g,704),fI(A,208),h=g+704|0}function SI(A,I,g,B,Q,C,E){1==(0|B)|B>>>0>1&&(OI(),e()),Vg[i[8957]](A,I,g,B,Q,C,E)}function NI(A,I,g,B,Q,C){1==(0|B)|B>>>0>1&&(OI(),e()),Vg[i[8956]](A,I,g,B,Q,1,0,C)}function MI(A){i[A+64>>2]=0,i[A+68>>2]=0,i[A+72>>2]=0,i[A+76>>2]=0,X(A,34720,64)}function dI(A,I,g){return g>>>0>=256&&(t(2016,2036,107,2089),e()),M(A,I,255&g)}function PI(){var A;h=A=h-16|0,C[A+15|0]=0,f(1062,A+15|0,0),h=A+16|0}function RI(A){var I;return h=I=h-32|0,BA(I,A),A=aI(I,32),h=I+32|0,A}function JI(A,I){var g;h=g=h-128|0,function(A,I){SA(A,I),SA(A+40|0,I+40|0),SA(A+80|0,I+80|0)}(g+8|0,I),AI(A,g+8|0),h=g+128|0}function xI(A,I){C[0|A]=I,C[A+1|0]=I>>>8,C[A+2|0]=I>>>16,C[A+3|0]=I>>>24}function LI(A,I,g){eA(A,I,g),eA(A+40|0,I+40|0,g),eA(A+80|0,I+80|0,g)}function KI(A){var I;return h=I=h-32|0,BA(I,A),h=I+32|0,1&C[0|I]}function qI(A,I,g,B){return 0|iI(A|=0,I|=0,g|=0,B|=0)}function XI(A){C[A+32|0]=1,C[A+33|0]=0,C[A+34|0]=0,C[A+35|0]=0}function VI(A){i[A>>2]=0,i[A+4>>2]=0,i[A+8>>2]=0,i[A+12>>2]=0}function WI(A){C[0|A]=0,C[A+1|0]=0,C[A+2|0]=0,C[A+3|0]=0}function TI(A,I,g){return 0|dI(A|=0,I|=0,g|=0)}function jI(A,I,g){return 0|function(A,I,g){var B,Q=0;return h=B=h-32|0,Q=-1,$A(B,g,I)||(Q=K(A,35552,B)),h=B+32|0,Q}(A|=0,I|=0,g|=0)}function ZI(A,I,g){return 0|$A(A|=0,I|=0,g|=0)}function OI(){var A;(A=i[9105])&&Vg[0|A](),c(),e()}function zI(A){Ug(A),wg(A+40|0),wg(A+80|0),Ug(A+120|0)}function $I(A,I,g,B,Q,C){Vg[i[8953]](A,I,g,B,Q,0,0,C)}function Ag(A,I,g,B,Q,C){Vg[i[8953]](A,I,g,B,Q,1,0,C)}function Ig(A,I){return A|=0,cI(I|=0,32),0|cg(A,I)}function gg(A,I){return A=function(A,I){var g=0,B=0;A:{if(B=255&I){if(3&A)for(;;){if(!(g=n[0|A])|(0|g)==(255&I))break A;if(!(3&(A=A+1|0)))break}I:if(!((-1^(g=i[A>>2]))&g-16843009&-2139062144))for(B=r(B,16843009);;){if((-1^(g^=B))&g-16843009&-2139062144)break I;if(g=i[A+4>>2],A=A+4|0,g-16843009&(-1^g)&-2139062144)break}for(;(B=n[0|(g=A)])&&(A=g+1|0,(0|B)!=(255&I)););return g}return YA(A)+A|0}return A}(A,I),n[0|A]==(255&I)?A:0}function Bg(A,I,g,B,Q,C){return q(A,I,g,B,Q,C,0),0}function Qg(A,I,g,B,Q,C,E){return nA(A,I,g,B,Q,C,E)}function Cg(A,I,g,B,Q,C,E){return rA(A,I,g,B,Q,C,E)}function Eg(A,I,g,B,Q,C,E){return GI(A,I,g,B,Q,C,E)}function ig(A,I){MI(A),I&&V(A,35728,34,0)}function ng(A,I,g,B,Q){return lA(A,I,g,B,Q,0)}function ag(A,I){return 0|cg(A|=0,I|=0)}function rg(A,I,g,B){Vg[i[8955]](A,I,0,g,B)}function og(A,I,g){Vg[i[8954]](A,64,0,I,g)}function eg(A,I,g,B){return function(A,I,g,B){var Q,C,E,i,n=0,a=0;return i=r(n=g>>>16|0,a=A>>>16|0),n=(65535&(a=((E=r(Q=65535&g,C=65535&A))>>>16|0)+r(a,Q)|0))+r(n,C)|0,A=(r(I,g)+i|0)+r(A,B)+(a>>>16)+(n>>>16)|0,p=A,65535&E|n<<16}(A,I,g,B)}function tg(A,I){return(255&(A^I))-1>>>31|0}function fg(A,I,g){!function(A,I,g){var B,Q;h=B=h-128|0,wg(A),wg(A+40|0),Ug(A+80|0),LI(A,I,tg(g=g-((0-(Q=(128&g)>>>7|0)&g)<<1)<<24>>24,1)),LI(A,I+120|0,tg(g,2)),LI(A,I+240|0,tg(g,3)),LI(A,I+360|0,tg(g,4)),LI(A,I+480|0,tg(g,5)),LI(A,I+600|0,tg(g,6)),LI(A,I+720|0,tg(g,7)),LI(A,I+840|0,tg(g,8)),SA(B+8|0,A+40|0),SA(B+48|0,A),mA(B+88|0,A+80|0),LI(A,B+8|0,Q),h=B+128|0}(A,r(I,960)+3488|0,g)}function cg(A,I){return 0|Vg[i[8951]](A,I)}function yg(A,I,g,B){Vg[i[8948]](A,I,g,B)}function sg(A,I,g,B){return hg(A,I,g,B)}function wg(A){i[A>>2]=1,EA(A+4|0,0,36)}function hg(A,I,g,B){return QA(A,I,g,B)}function Dg(A,I,g){return function(A,I,g){var B=0,Q=0,C=0,E=0;return B=31&(C=E=63&g),C>>>0>=32?B=-1>>>B|0:(Q=-1>>>B|0,B=(1<>>B),C=B&A,B=I&Q,Q=31&E,E>>>0>=32?(B=C<>>32-Q|B<>>0>=32?(B=-1<>>32-g|-1<>>0>=32?(g=0,A=B>>>I|0):(g=B>>>I|0,A=((1<>>I),p=g|C,A|E}(A,I,g)}function ug(A,I,g){return function(A,I,g){var B=0,Q=0,C=0,E=0,i=0;return B=31&(E=63&g),E>>>0>=32?(Q=-1<>>32-B|-1<>>0>=32?(Q=0,E=B>>>C|0):(Q=B>>>C|0,E=((1<>>C),i=Q,C=31&(B=0-g&63),B>>>0>=32?(Q=0,g=-1>>>C|0):(Q=-1>>>C|0,g=(1<>>C),A&=g,I&=Q,Q=31&B,B>>>0>=32?(g=A<>>32-Q|I<>>0<18,U=U+2|0,Y;);xI(A,g+1634760805|0),xI(A+4|0,h+B|0),xI(A+8|0,D+Q|0),xI(A+12|0,b+C|0),xI(A+16|0,u+E|0),xI(A+20|0,H+857760878|0),xI(A+24|0,p+e|0),xI(A+28|0,l+t|0),xI(A+32|0,F+f|0),xI(A+36|0,_+c|0),xI(A+40|0,I+2036477234|0),xI(A+44|0,s+i|0),xI(A+48|0,y+a|0),xI(A+52|0,w+r|0),xI(A+56|0,k+o|0),xI(A+60|0,G+1797285236|0)}(A,I,g)}function vg(A){EA(A,0,1024)}function Ug(A){EA(A,0,40)}function Sg(){return 16}function Ng(){return 32}function Mg(){return 24}function dg(){return-17}function Pg(){return 64}function Rg(){return 1}function Jg(){return 2}function xg(){return 8}function Lg(){return 0}function Kg(){return-1}function qg(){return 3}Q(I=n,1024,"InsgcmV0dXJuIE1vZHVsZS5nZXRSYW5kb21WYWx1ZSgpOyB9IgB7IGlmIChNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPT09IHVuZGVmaW5lZCkgeyB0cnkgeyB2YXIgd2luZG93XyA9ICdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ID8gd2luZG93IDogc2VsZjsgdmFyIGNyeXB0b18gPSB0eXBlb2Ygd2luZG93Xy5jcnlwdG8gIT09ICd1bmRlZmluZWQnID8gd2luZG93Xy5jcnlwdG8gOiB3aW5kb3dfLm1zQ3J5cHRvOyB2YXIgcmFuZG9tVmFsdWVzU3RhbmRhcmQgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IG5ldyBVaW50MzJBcnJheSgxKTsgY3J5cHRvXy5nZXRSYW5kb21WYWx1ZXMoYnVmKTsgcmV0dXJuIGJ1ZlswXSA+Pj4gMDsgfTsgcmFuZG9tVmFsdWVzU3RhbmRhcmQoKTsgTW9kdWxlLmdldFJhbmRvbVZhbHVlID0gcmFuZG9tVmFsdWVzU3RhbmRhcmQ7IH0gY2F0Y2ggKGUpIHsgdHJ5IHsgdmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpOyB2YXIgcmFuZG9tVmFsdWVOb2RlSlMgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IGNyeXB0b1sncmFuZG9tQnl0ZXMnXSg0KTsgcmV0dXJuIChidWZbMF0gPDwgMjQgfCBidWZbMV0gPDwgMTYgfCBidWZbMl0gPDwgOCB8IGJ1ZlszXSkgPj4+IDA7IH07IHJhbmRvbVZhbHVlTm9kZUpTKCk7IE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9IHJhbmRvbVZhbHVlTm9kZUpTOyB9IGNhdGNoIChlKSB7IHRocm93ICdObyBzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm91bmQnOyB9IH0gfSB9AExpYnNvZGl1bURSR2J1Zl9sZW4gPD0gU0laRV9NQVgAcmFuZG9tYnl0ZXMvcmFuZG9tYnl0ZXMuYwByYW5kb21ieXRlcwBTLT5idWZsZW4gPD0gQkxBS0UyQl9CTE9DS0JZVEVTAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9ibGFrZTJiLXJlZi5jAGJsYWtlMmJfZmluYWwAAAAAAAAAAAjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FtvdXRsZW4gPD0gVUlOVDhfTUFYAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9nZW5lcmljaGFzaF9ibGFrZTJiLmMAY3J5cHRvX2dlbmVyaWNoYXNoX2JsYWtlMmJfZmluYWwAAAAAAAAAtnhZ/4Vy0wC9bhX/DwpqACnAAQCY6Hn/vDyg/5lxzv8At+L+tA1I/wAAAAAAAAAAsKAO/tPJhv+eGI8Af2k1AGAMvQCn1/v/n0yA/mpl4f8e/AQAkgyu"),Q(I,2224,"WfGy/grlpv973Sr+HhTUAFKAAwAw0fMAd3lA/zLjnP8AbsUBZxuQ"),Q(I,2272,"hTuMAb3xJP/4JcMBYNw3ALdMPv/DQj0AMkykAeGkTP9MPaP/dT4fAFGRQP92QQ4AonPW/waKLgB85vT/CoqPADQawgC49EwAgY8pAb70E/97qnr/YoFEAHnVkwBWZR7/oWebAIxZQ//v5b4BQwu1AMbwif7uRbz/Q5fuABMqbP/lVXEBMkSH/xFqCQAyZwH/UAGoASOYHv8QqLkBOFno/2XS/AAp+kcAzKpP/w4u7/9QTe8AvdZL/xGN+QAmUEz/vlV1AFbkqgCc2NABw8+k/5ZCTP+v4RD/jVBiAUzb8gDGonIALtqYAJsr8f6boGj/M7ulAAIRrwBCVKAB9zoeACNBNf5F7L8ALYb1AaN73QAgbhT/NBelALrWRwDpsGAA8u82ATlZigBTAFT/iKBkAFyOeP5ofL4AtbE+//opVQCYgioBYPz2AJeXP/7vhT4AIDicAC2nvf+OhbMBg1bTALuzlv76qg7/0qNOACU0lwBjTRoA7pzV/9XA0QFJLlQAFEEpATbOTwDJg5L+qm8Y/7EhMv6rJsv/Tvd0ANHdmQCFgLIBOiwZAMknOwG9E/wAMeXSAXW7dQC1s7gBAHLbADBekwD1KTgAfQ3M/vStdwAs3SD+VOoUAPmgxgHsfur/L2Oo/qrimf9ms9gA4o16/3pCmf629YYA4+QZAdY56//YrTj/tefSAHeAnf+BX4j/bn4zAAKpt/8HgmL+RbBe/3QE4wHZ8pH/yq0fAWkBJ/8ur0UA5C86/9fgRf7POEX/EP6L/xfP1P/KFH7/X9Vg/wmwIQDIBc//8SqA/iMhwP/45cQBgRF4APtnl/8HNHD/jDhC/yji9f/ZRiX+rNYJ/0hDhgGSwNb/LCZwAES4S//OWvsAleuNALWqOgB09O8AXJ0CAGatYgDpiWABfzHLAAWblAAXlAn/03oMACKGGv/bzIgAhggp/+BTK/5VGfcAbX8A/qmIMADud9v/563VAM4S/v4Iugf/fgkHAW8qSABvNOz+YD+NAJO/f/7NTsD/DmrtAbvbTACv87v+aVmtAFUZWQGi85QAAnbR/iGeCQCLoy7/XUYoAGwqjv5v/I7/m9+QADPlp/9J/Jv/XnQM/5ig2v+c7iX/s+rP/8UAs/+apI0A4cRoAAojGf7R1PL/Yf3e/rhl5QDeEn8BpIiH/x7PjP6SYfMAgcAa/slUIf9vCk7/k1Gy/wQEGACh7tf/Bo0hADXXDv8ptdD/54udALPL3f//uXEAveKs/3FC1v/KPi3/ZkAI/06uEP6FdUT/"),Q(I,3264,"AQ=="),Q(I,3296,"JuiVj8KyJ7BFw/SJ8u+Y8NXfrAXTxjM5sTgCiG1T/AXHF2pwPU3YT7o8C3YNEGcPKiBT+iw5zMZOx/13kqwDeuz///////////////////////////////////////9/7f///////////////////////////////////////3/u////////////////////////////////////////f+3T9VwaYxJY1pz3ot753hQ="),Q(I,3487,"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"),Q(I,34460,"AQ=="),Q(I,34496,"AQ=="),Q(I,34528,"4Ot6fDtBuK4WVuP68Z/EatoJjeucMrH9hmIFFl9JuABfnJW8o1CMJLHQsVWcg+9bBERcxFgcjobYIk7d0J8RV+z///////////////////////////////////////9/7f///////////////////////////////////////3/u////////////////////////////////////////fw=="),Q(I,34720,"CMm882fmCWo7p8qEha5nuyv4lP5y82488TYdXzr1T6XRguatf1IOUR9sPiuMaAWba71B+6vZgx95IX4TGc3gWyKuKNeYL4pCzWXvI5FEN3EvO03sz/vAtbzbiYGl27XpOLVI81vCVjkZ0AW28RHxWZtPGa+kgj+SGIFt2tVeHKtCAgOjmKoH2L5vcEUBW4MSjLLkTr6FMSTitP/Vw30MVW+Je/J0Xb5ysZYWO/6x3oA1Esclpwbcm5Qmac908ZvB0krxnsFpm+TjJU84hke+77XVjIvGncEPZZysd8yhDCR1AitZbyzpLYPkpm6qhHRK1PtBvdypsFy1UxGD2oj5dqvfZu5SUT6YEDK0LW3GMag/IfuYyCcDsOQO777Hf1m/wo+oPfML4MYlpwqTR5Gn1W+CA+BRY8oGcG4OCmcpKRT8L9JGhQq3JybJJlw4IRsu7SrEWvxtLE3fs5WdEw04U95jr4tUcwplqLJ3PLsKanbmru1HLsnCgTs1ghSFLHKSZAPxTKHov6IBMEK8S2YaqJGX+NBwi0vCML5UBqNRbMcYUu/WGeiS0RCpZVUkBpnWKiBxV4U1DvS40bsycKBqEMjQ0rgWwaQZU6tBUQhsNx6Z647fTHdIJ6hIm+G1vLA0Y1rJxbMMHDnLikHjSqrYTnPjY3dPypxbo7iy1vNvLmj8su9d7oKPdGAvF0NvY6V4cqvwoRR4yITsOWQaCALHjCgeYyP6/76Q6b2C3utsUKQVecay96P5vitTcuPyeHHGnGEm6s4+J8oHwsAhx7iG0R7r4M3WfdrqeNFu7n9PffW6bxdyqmfwBqaYyKLFfWMKrg35vgSYPxEbRxwTNQtxG4R9BCP1d9sokyTHQHuryjK8vskVCr6ePEwNEJzEZx1DtkI+y77UxUwqfmX8nCl/Wez61jqrb8tfF1hHSowZRGyA"),Q(I,35568,"YjY0X3BvcyA8PSBiNjRfbGVuAHNvZGl1bS9jb2RlY3MuYwBzb2RpdW1fYmluMmJhc2U2NAAkYXJnb24yaWQAJGFyZ29uMmkAJHY9ACRtPQAsdD0ALHA9ACRhcmdvbjJpZCR2PQAkYXJnb24yaSR2PQAkYXJnb24yaWQkACRhcmdvbjJpJA=="),Q(I,35728,"U2lnRWQyNTUxOSBubyBFZDI1NTE5IGNvbGxpc2lvbnMBADEuMC4xOA=="),Q(I,35772,"UI5QAABAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAAN");var Xg,Vg=((Xg=[null,yI,function(A,I,g,B,Q){var C;return A|=0,h=C=h-16|0,yI(C,I|=0,g|=0,B|=0,Q|=0),A=kg(A,C),h=C+16|0,0|A},function(A,I){return IA(A|=0,I|=0),0},function(A,I,g,B){return z(A|=0,I|=0,g|=0,B|=0),0},function(A,I){return Z(A|=0,I|=0),0},function(A,I,g){A|=0,I|=0;var B,Q=0,E=0;if(h=B=h-336|0,Q=-1,!function(A){var I,g=0,B=0,Q=0,E=0;for(C[11+(I=h-16|0)|0]=0,C[I+12|0]=0,C[I+13|0]=0,C[I+14|0]=0,i[I+8>>2]=0;;){for(Q=n[A+B|0],g=0;C[0|(E=(I+8|0)+g|0)]=n[0|E]|Q^n[(34464+(g<<5)|0)+B|0],7!=(0|(g=g+1|0)););if(31==(0|(B=B+1|0)))break}for(B=127&n[A+31|0],A=0,g=0;C[0|(Q=(I+8|0)+g|0)]=n[0|Q]|B^n[34495+(g<<5)|0],7!=(0|(g=g+1|0)););for(g=0;g=n[(I+8|0)+A|0]-1|g,7!=(0|(A=A+1|0)););return g>>>8&1}(g|=0)){for(Q=0;C[A+Q|0]=n[I+Q|0],32!=(0|(Q=Q+1|0)););for(C[0|A]=248&n[0|A],C[A+31|0]=63&n[A+31|0]|64,d(B+288|0,g),wg(B+240|0),Ug(B+192|0),SA(B+144|0,B+288|0),wg(B+96|0),g=254,I=0;Q=I,E=g,AA(B+240|0,B+144|0,Q^=I=n[(g>>>3|0)+A|0]>>>(7&g)&1),AA(B+192|0,B+96|0,Q),g=g-1|0,yA(B+48|0,B+144|0,B+96|0),yA(B,B+240|0,B+192|0),sA(B+240|0,B+240|0,B+192|0),sA(B+192|0,B+144|0,B+96|0),_(B+96|0,B+48|0,B+240|0),_(B+192|0,B+192|0,B),H(B+48|0,B),H(B,B+240|0),sA(B+144|0,B+96|0,B+192|0),yA(B+192|0,B+96|0,B+192|0),_(B+240|0,B,B+48|0),yA(B,B,B+48|0),H(B+192|0,B+192|0),P(B+96|0,B),H(B+144|0,B+144|0),sA(B+48|0,B+48|0,B+96|0),_(B+96|0,B+288|0,B+192|0),_(B+192|0,B,B+48|0),E;);AA(B+240|0,B+144|0,I),AA(B+192|0,B+96|0,I),j(B+192|0,B+192|0),_(B+240|0,B+240|0,B+192|0),BA(A,B+240|0),Q=0}return h=B+336|0,0|Q},function(A,I){A|=0,I|=0;var g,B=0;for(h=g=h-208|0;C[A+B|0]=n[I+B|0],32!=(0|(B=B+1|0)););return C[0|A]=248&n[0|A],C[A+31|0]=63&n[A+31|0]|64,CA(g+48|0,A),function(A,I,g){var B;h=B=h-96|0,sA(B+48|0,g,I),yA(B,g,I),j(B,B),_(A,B+48|0,B),h=B+96|0}(g,g+88|0,g+128|0),BA(A,g),h=g+208|0,0},function(A,I,g,B,Q){A|=0,B|=0,Q|=0;var E,a=0;if(h=E=h-112|0,(I|=0)|(g|=0)){a=n[Q+28|0]|n[Q+29|0]<<8|n[Q+30|0]<<16|n[Q+31|0]<<24,i[E+24>>2]=n[Q+24|0]|n[Q+25|0]<<8|n[Q+26|0]<<16|n[Q+27|0]<<24,i[E+28>>2]=a,a=n[Q+20|0]|n[Q+21|0]<<8|n[Q+22|0]<<16|n[Q+23|0]<<24,i[E+16>>2]=n[Q+16|0]|n[Q+17|0]<<8|n[Q+18|0]<<16|n[Q+19|0]<<24,i[E+20>>2]=a,a=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,i[E>>2]=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,i[E+4>>2]=a,a=n[Q+12|0]|n[Q+13|0]<<8|n[Q+14|0]<<16|n[Q+15|0]<<24,i[E+8>>2]=n[Q+8|0]|n[Q+9|0]<<8|n[Q+10|0]<<16|n[Q+11|0]<<24,i[E+12>>2]=a,Q=n[0|B]|n[B+1|0]<<8|n[B+2|0]<<16|n[B+3|0]<<24,B=n[B+4|0]|n[B+5|0]<<8|n[B+6|0]<<16|n[B+7|0]<<24,i[E+104>>2]=0,i[E+108>>2]=0,i[E+96>>2]=Q,i[E+100>>2]=B;A:{if(!g&I>>>0>=64|g){for(;;){for(mg(A,E+96|0,E),Q=8,B=1;B=n[0|(a=(E+96|0)+Q|0)]+B|0,C[0|a]=B,B=B>>>8|0,16!=(0|(Q=Q+1|0)););if(A=A- -64|0,g=g-1|0,!(!(g=(I=I+-64|0)>>>0<4294967232?g+1|0:g)&I>>>0>63|g))break}if(!(I|g))break A}for(Q=0,mg(E+32|0,E+96|0,E);C[A+Q|0]=n[(E+32|0)+Q|0],(0|I)!=(0|(Q=Q+1|0)););}fI(E+32|0,64),fI(E,32)}return h=E+112|0,0},function(A,I,g,B,Q,E,a,r){A|=0,I|=0,Q|=0,E|=0,a|=0,r|=0;var o,e=0,t=0;if(h=o=h-112|0,(g|=0)|(B|=0)){for(e=n[r+28|0]|n[r+29|0]<<8|n[r+30|0]<<16|n[r+31|0]<<24,i[o+24>>2]=n[r+24|0]|n[r+25|0]<<8|n[r+26|0]<<16|n[r+27|0]<<24,i[o+28>>2]=e,e=n[r+20|0]|n[r+21|0]<<8|n[r+22|0]<<16|n[r+23|0]<<24,i[o+16>>2]=n[r+16|0]|n[r+17|0]<<8|n[r+18|0]<<16|n[r+19|0]<<24,i[o+20>>2]=e,e=n[r+4|0]|n[r+5|0]<<8|n[r+6|0]<<16|n[r+7|0]<<24,i[o>>2]=n[0|r]|n[r+1|0]<<8|n[r+2|0]<<16|n[r+3|0]<<24,i[o+4>>2]=e,e=8,t=n[r+12|0]|n[r+13|0]<<8|n[r+14|0]<<16|n[r+15|0]<<24,i[o+8>>2]=n[r+8|0]|n[r+9|0]<<8|n[r+10|0]<<16|n[r+11|0]<<24,i[o+12>>2]=t,r=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,i[o+96>>2]=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,i[o+100>>2]=r;C[(o+96|0)+e|0]=E,E=(255&a)<<24|E>>>8,a=a>>>8|0,16!=(0|(e=e+1|0)););if(!B&g>>>0>63|B)for(;;){for(e=0,mg(o+32|0,o+96|0,o);C[A+e|0]=n[(o+32|0)+e|0]^n[I+e|0],r=1,64!=(0|(e=e+1|0)););for(e=8;Q=n[0|(E=(o+96|0)+e|0)]+r|0,C[0|E]=Q,r=Q>>>8|0,16!=(0|(e=e+1|0)););if(I=I- -64|0,A=A- -64|0,B=B-1|0,!(!(B=(g=g+-64|0)>>>0<4294967232?B+1|0:B)&g>>>0>63|B))break}if(g|B)for(e=0,mg(o+32|0,o+96|0,o);C[A+e|0]=n[(o+32|0)+e|0]^n[I+e|0],(0|g)!=(0|(e=e+1|0)););fI(o+32|0,64),fI(o,32)}return h=o+112|0,0},function(A,I,g,B,Q){var C;return A|=0,B|=0,h=C=h+-64|0,(I|=0)|(g|=0)&&(aA(C,Q|=0),UA(C,B,0),U(C,A=EA(A,0,I),A,I,g),fI(C,64)),h=C- -64|0,0},function(A,I,g,B,Q){var C;return A|=0,B|=0,h=C=h+-64|0,(I|=0)|(g|=0)&&(aA(C,Q|=0),JA(C,B,0),U(C,A=EA(A,0,I),A,I,g),fI(C,64)),h=C- -64|0,0},function(A,I,g,B,Q,C,E,i){var n;return A|=0,I|=0,Q|=0,E|=0,i|=0,h=n=h-80|0,(g|=0)|(B|=0)&&(xI(n+8|0,C|=0),xI(n+12|0,E),aA(n+16|0,i),UA(n+16|0,Q,n+8|0),U(n+16|0,I,A,g,B),fI(n+16|0,64)),h=n+80|0,0},function(A,I,g,B,Q,C,E){var i;return A|=0,I|=0,Q|=0,E|=0,h=i=h-80|0,(g|=0)|(B|=0)&&(xI(i+12|0,C|=0),aA(i+16|0,E),JA(i+16|0,Q,i+12|0),U(i+16|0,I,A,g,B),fI(i+16|0,64)),h=i+80|0,0}]).grow=function(A){var I=this.length;return this.length=this.length+A,I},Xg.set=function(A,I){this[A]=I},Xg.get=function(A){return this[A]},Xg);function Wg(){return B.byteLength/65536|0}return{h:Vg,i:function(){},j:function(A,I,g,B,Q,C,E,i,n,a,r,o){return 0|PA(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,r|=0,o|=0)},k:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){if(!Q&B>>>0<4294967280)return PA(A,A+B|0,0,g,B,Q,C,E,n,a,r),I&&(Q=(A=B+16|0)>>>0<16?Q+1|0:Q,i[I>>2]=A,i[I+4>>2]=Q),0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,r|=0,o|=0)},l:function(A,I,g,B,Q,C,E,i,n,a,r,o){return 0|_A(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,r|=0,o|=0)},m:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){if(!Q&B>>>0<4294967280)return _A(A,A+B|0,0,g,B,Q,C,E,n,a,r),I&&(Q=(A=B+16|0)>>>0<16?Q+1|0:Q,i[I>>2]=A,i[I+4>>2]=Q),0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,r|=0,o|=0)},n:function(A,I,g,B,Q,C,E,i,n,a,r){return 0|HA(A|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,a|=0,r|=0)},o:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){var o=0;return o=-1,!Q&B>>>0>=16|Q&&(o=HA(A,g,B-16|0,Q-(B>>>0<16)|0,(g+B|0)-16|0,C,E,n,a,r)),I&&(i[I>>2]=o?0:B-16|0,i[I+4>>2]=o?0:Q-(B>>>0<16)|0),o}(A|=0,I|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},p:function(A,I,g,B,Q,C,E,i,n,a,r){return 0|GA(A|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,a|=0,r|=0)},q:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){var o=0;return o=-1,!Q&B>>>0>=16|Q&&(o=GA(A,g,B-16|0,Q-(B>>>0<16)|0,(g+B|0)-16|0,C,E,n,a,r)),I&&(i[I>>2]=o?0:B-16|0,i[I+4>>2]=o?0:Q-(B>>>0<16)|0),o}(A|=0,I|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},r:Ng,s:function(){return 12},t:Lg,u:Sg,v:dg,w:bg,x:Ng,y:xg,z:Lg,A:Sg,B:dg,C:bg,D:function(A,I,g,B,Q,C,E,i,n,a,r,o){return 0|NA(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,r|=0,o|=0)},E:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){if(!Q&B>>>0<4294967280)return NA(A,A+B|0,0,g,B,Q,C,E,n,a,r),I&&(Q=(A=B+16|0)>>>0<16?Q+1|0:Q,i[I>>2]=A,i[I+4>>2]=Q),0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,r|=0,o|=0)},F:function(A,I,g,B,Q,C,E,i,n,a,r){return 0|MA(A|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,a|=0,r|=0)},G:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){var o=0;return o=-1,!Q&B>>>0>=16|Q&&(o=MA(A,g,B-16|0,Q-(B>>>0<16)|0,(g+B|0)-16|0,C,E,n,a,r)),I&&(i[I>>2]=o?0:B-16|0,i[I+4>>2]=o?0:Q-(B>>>0<16)|0),o}(A|=0,I|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},H:Ng,I:Mg,J:Lg,K:Sg,L:dg,M:bg,N:Ng,O:Ng,P:function(A,I,g,B,Q){return 0|bI(A|=0,I|=0,g|=0,B|=0,Q|=0)},Q:function(A,I,g,B,Q){return 0|function(A,I,g,B,Q){var C;return h=C=h-32|0,bI(C,I,g,B,Q),I=Gg(A,C),g=zA(C,A,32),h=C+32|0,g|((0|A)==(0|C)?-1:I)}(A|=0,I|=0,g|=0,B|=0,Q|=0)},R:bg,S:Ng,T:Ng,U:Ng,V:Ng,W:Mg,X:Sg,Y:dg,Z:function(A,I,g){return 0|function(A,I,g){var B,Q=0;return h=B=h+-64|0,mI(B,g,32,0),g=i[B+28>>2],Q=i[B+24>>2],C[I+24|0]=Q,C[I+25|0]=Q>>>8,C[I+26|0]=Q>>>16,C[I+27|0]=Q>>>24,C[I+28|0]=g,C[I+29|0]=g>>>8,C[I+30|0]=g>>>16,C[I+31|0]=g>>>24,g=i[B+20>>2],Q=i[B+16>>2],C[I+16|0]=Q,C[I+17|0]=Q>>>8,C[I+18|0]=Q>>>16,C[I+19|0]=Q>>>24,C[I+20|0]=g,C[I+21|0]=g>>>8,C[I+22|0]=g>>>16,C[I+23|0]=g>>>24,g=i[B+12>>2],Q=i[B+8>>2],C[I+8|0]=Q,C[I+9|0]=Q>>>8,C[I+10|0]=Q>>>16,C[I+11|0]=Q>>>24,C[I+12|0]=g,C[I+13|0]=g>>>8,C[I+14|0]=g>>>16,C[I+15|0]=g>>>24,g=i[B+4>>2],Q=i[B>>2],C[0|I]=Q,C[I+1|0]=Q>>>8,C[I+2|0]=Q>>>16,C[I+3|0]=Q>>>24,C[I+4|0]=g,C[I+5|0]=g>>>8,C[I+6|0]=g>>>16,C[I+7|0]=g>>>24,fI(B,64),A=cg(A,I),h=B- -64|0,A}(A|=0,I|=0,g|=0)},_:Ig,$:jI,aa:function(A,I,g,B,Q,C,E){return 0|Qg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ba:function(A,I,g,B,Q,C,E,i){return 0|wI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0)},ca:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=4294967280|B&&(OI(),e()),Qg(A+16|0,A,I,g,B,Q,C)}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},da:function(A,I,g,B,Q,C,E){return 0|kI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ea:function(A,I,g,B,Q,C,E){return 0|Cg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},fa:function(A,I,g,B,Q,C,E,i){return 0|hI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0)},ga:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=16|B?Cg(A,I+16|0,I,g-16|0,B-(g>>>0<16)|0,Q,C):-1}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},ha:function(A,I,g,B,Q,C,E){return 0|uI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ia:function(A,I,g,B,Q){return 0|function(A,I,g,B,Q){var E,n=0;return h=E=h-96|0,n=-1,Ig(E+32|0,E)||(lI(E- -64|0,E+32|0,Q),n=kI(A+32|0,I,g,B,E- -64|0,Q,E),I=i[E+60>>2],g=i[E+56>>2],C[A+24|0]=g,C[A+25|0]=g>>>8,C[A+26|0]=g>>>16,C[A+27|0]=g>>>24,C[A+28|0]=I,C[A+29|0]=I>>>8,C[A+30|0]=I>>>16,C[A+31|0]=I>>>24,I=i[E+52>>2],g=i[E+48>>2],C[A+16|0]=g,C[A+17|0]=g>>>8,C[A+18|0]=g>>>16,C[A+19|0]=g>>>24,C[A+20|0]=I,C[A+21|0]=I>>>8,C[A+22|0]=I>>>16,C[A+23|0]=I>>>24,I=i[E+44>>2],g=i[E+40>>2],C[A+8|0]=g,C[A+9|0]=g>>>8,C[A+10|0]=g>>>16,C[A+11|0]=g>>>24,C[A+12|0]=I,C[A+13|0]=I>>>8,C[A+14|0]=I>>>16,C[A+15|0]=I>>>24,I=i[E+36>>2],g=i[E+32>>2],C[0|A]=g,C[A+1|0]=g>>>8,C[A+2|0]=g>>>16,C[A+3|0]=g>>>24,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24,fI(E,32),fI(E+32|0,32),fI(E- -64|0,24)),h=E+96|0,n}(A|=0,I|=0,g|=0,B|=0,Q|=0)},ja:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){var E,i=0;return h=E=h-32|0,i=-1,!B&g>>>0>=48|B&&(lI(E,I,Q),i=uI(A,I+32|0,g-32|0,B-(g>>>0<32)|0,E,I,C)),h=E+32|0,i}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},ka:function(){return 48},la:Sg,ma:Pg,na:Ng,oa:Sg,pa:Pg,qa:Ng,ra:function(){return 384},sa:function(A,I,g,B,Q,C,E){return 0|Eg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ta:qI,ua:function(A,I,g,B){return 0|sg(A|=0,I|=0,g|=0,B|=0)},va:TI,wa:bg,xa:Pg,ya:function(A,I,g,B){return 0|mI(A|=0,I|=0,g|=0,B|=0)},za:Sg,Aa:Pg,Ba:xg,Ca:Ng,Da:function(A,I,g,B,Q,a){return 0|function(A,I,g,B,Q,a){var r,o;return h=r=h-32|0,o=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,Q=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,i[r+24>>2]=0,i[r+28>>2]=0,i[r+16>>2]=o,i[r+20>>2]=Q,tI(r,g,B),i[r+8>>2]=0,i[r+12>>2]=0,I-16>>>0>=49?(i[8960]=28,A=-1):(g=r+16|0,A=I-1>>>0>63?-1:function(A,I,g,B,Q){var a,r=0;if(a=r=h,h=r=r-384&-64,!(!I|!A|(g-1&255)>>>0>=64))return function(A,I,g,B,Q){var a;if(h=a=h-192|0,!(!g|(I-1&255)>>>0>=64))return E[a+130>>1]=257,C[a+129|0]=32,C[a+128|0]=I,WI(a+128|4),tI(a+128|8,0,0),i[a+152>>2]=0,i[a+156>>2]=0,i[a+144>>2]=0,i[a+148>>2]=0,B?function(A,I){var g,B=0;B=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,C[A+32|0]=g,C[A+33|0]=g>>>8,C[A+34|0]=g>>>16,C[A+35|0]=g>>>24,C[A+36|0]=B,C[A+37|0]=B>>>8,C[A+38|0]=B>>>16,C[A+39|0]=B>>>24,B=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,I=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,C[A+40|0]=I,C[A+41|0]=I>>>8,C[A+42|0]=I>>>16,C[A+43|0]=I>>>24,C[A+44|0]=B,C[A+45|0]=B>>>8,C[A+46|0]=B>>>16,C[A+47|0]=B>>>24}(a+128|0,B):(i[a+168>>2]=0,i[a+172>>2]=0,i[a+160>>2]=0,i[a+164>>2]=0),Q?function(A,I){var g,B=0;B=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,C[A+48|0]=g,C[A+49|0]=g>>>8,C[A+50|0]=g>>>16,C[A+51|0]=g>>>24,C[A+52|0]=B,C[A+53|0]=B>>>8,C[A+54|0]=B>>>16,C[A+55|0]=B>>>24,B=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,I=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,C[A+56|0]=I,C[A+57|0]=I>>>8,C[A+58|0]=I>>>16,C[A+59|0]=I>>>24,C[A+60|0]=B,C[A+61|0]=B>>>8,C[A+62|0]=B>>>16,C[A+63|0]=B>>>24}(a+128|0,Q):(i[a+184>>2]=0,i[a+188>>2]=0,i[a+176>>2]=0,i[a+180>>2]=0),hA(A,a+128|0),EA(a+32|0,0,96),QA(I=A,A=X(a,g,32),128,0),fI(A,128),void(h=A+192|0);OI(),e()}(r,g,I,B,Q),QA(r,0,0,0),M(r,A,g),h=a,0;OI(),e()}(A,a,255&I,r,g)),h=r+32|0,A}(A|=0,I|=0,g|=0,B|=0,Q|=0,a|=0)},Ea:bg,Fa:function(A,I,g){return A|=0,Eg(I|=0,32,g|=0,32,0,0,0),0|ag(A,I)},Ga:function(A,I){return A|=0,cI(I|=0,32),0|ag(A,I)},Ha:function(A,I,g,B,Q){I|=0,g|=0,Q|=0;var E,i,a=0;if(i=a=h,h=a=a-512&-64,E=(A|=0)||I){if(A=-1,!ZI(a+96|0,B|=0,Q)){for(I=I||E,A=0,qI(a+128|0,0,0,64),sg(a+128|0,a+96|0,32,0),fI(a+96|0,32),sg(a+128|0,g,32,0),sg(a+128|0,Q,32,0),TI(a+128|0,a+32|0,64),fI(a+128|0,384);g=(a+32|0)+A|0,C[A+E|0]=n[0|g],C[A+I|0]=n[g+32|0],32!=(0|(A=A+1|0)););fI(a+32|0,64),A=0}return h=i,0|A}OI(),e()},Ia:function(A,I,g,B,Q){I|=0,g|=0,Q|=0;var E,i,a=0;if(i=a=h,h=a=a-512&-64,E=(A|=0)||I){if(A=-1,!ZI(a+96|0,B|=0,Q)){for(I=I||E,A=0,qI(a+128|0,0,0,64),sg(a+128|0,a+96|0,32,0),fI(a+96|0,32),sg(a+128|0,Q,32,0),sg(a+128|0,g,32,0),TI(a+128|0,a+32|0,64),fI(a+128|0,384);g=(a+32|0)+A|0,C[A+I|0]=n[0|g],C[A+E|0]=n[g+32|0],32!=(0|(A=A+1|0)););fI(a+32|0,64),A=0}return h=i,0|A}OI(),e()},Ja:Ng,Ka:Ng,La:Ng,Ma:Ng,Na:Rg,Oa:Jg,Pa:Jg,Qa:Sg,Ra:Kg,Sa:Lg,Ta:Kg,Ua:Sg,Va:function(){return 128},Wa:function(){return 35681},Xa:Rg,Ya:Kg,Za:function(){return 8192},_a:function(){return-2147483648},$a:Jg,ab:function(){return 67108864},bb:qg,cb:function(){return 268435456},db:function(){return 4},eb:function(){return 1073741824},fb:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r,o){switch(o-1|0){case 0:return function(A,I,g,B,Q,C,E,n,a,r){var o,e;e=I,o=EA(A,0,I),A=22;A:if(!g){if(!(!g&I>>>0<16)){if(C|a|r>>>0>2147483648)break A;if(!(!a&n>>>0<3|r>>>0<8192)){if(A=28,(0|B)==(0|o))break A;return pA(n,r>>>10|0,1,B,Q,E,16,o,e,0,0,1)?-1:0}}A=28}return i[8960]=A,-1}(A,I,g,B,Q,C,E,n,a,r);case 1:return function(A,I,g,B,Q,C,E,n,a,r){var o,e;e=I,o=EA(A,0,I),A=22;A:if(!g){if(!(!g&I>>>0<16)){if(C|a|r>>>0>2147483648)break A;if(!(!(n|a)|r>>>0<8192)){if(A=28,(0|B)==(0|o))break A;return pA(n,r>>>10|0,1,B,Q,E,16,o,e,0,0,2)?-1:0}}A=28}return i[8960]=A,-1}(A,I,g,B,Q,C,E,n,a,r)}return i[8960]=28,-1}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},gb:function(A,I,g,B,Q,C,E){return 0|xA(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},hb:function(A,I,g,B,Q,C,E,n){return 0|function(A,I,g,B,Q,C,E,n){switch(n-1|0){case 1:return xA(A,I,g,B,Q,C,E);default:OI(),e();case 0:}return function(A,I,g,B,Q,C,E){var n;return h=n=h-16|0,A=EA(A,0,128),E>>>0<2147483649&&!(B|C)?E>>>0>8191&&!C&Q>>>0>=3|0!=(0|C)?(cI(n,16),A=pA(Q,E>>>10|0,1,I,g,n,16,0,32,A,128,1)?-1:0):(i[8960]=28,A=-1):(i[8960]=22,A=-1),h=n+16|0,A}(A,I,g,B,Q,C,E)}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0)},ib:function(A,I,g,B){return 0|function(A,I,g,B){return XA(A,35681,10)?XA(A,35692,9)?(i[8960]=28,-1):function(A,I,g,B){A:{if(1==(0|B)|B>>>0>1)i[8960]=22;else{if(!(A=fA(A,I,g,1)))break A;-35==(0|A)&&(i[8960]=28)}A=-1}return A}(A,I,g,B):function(A,I,g,B){A:{if(1==(0|B)|B>>>0>1)i[8960]=22;else{if(!(A=fA(A,I,g,2)))break A;-35==(0|A)&&(i[8960]=28)}A=-1}return A}(A,I,g,B)}(A|=0,I|=0,g|=0,B|=0)},jb:function(A,I,g,B){return 0|function(A,I,g,B){return XA(A,35681,10)?XA(A,35692,9)?(i[8960]=28,-1):DA(A,I,g,B,1):DA(A,I,g,B,2)}(A|=0,I|=0,g|=0,B|=0)},kb:ag,lb:ZI,mb:Ng,nb:Ng,ob:Ng,pb:Mg,qb:Sg,rb:dg,sb:bg,tb:Qg,ub:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=4294967280|B&&(OI(),e()),nA(A+16|0,A,I,g,B,Q,C),0}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},vb:Cg,wb:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=16|B?rA(A,I+16|0,I,g-16|0,B-(g>>>0<16)|0,Q,C):-1}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},xb:bg,yb:function(A,I,g){return A|=0,g|=0,cI(I|=0,24),x(A,I,g),XI(A),g=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,I=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,C[A+44|0]=0,C[A+45|0]=0,C[A+46|0]=0,C[A+47|0]=0,C[A+48|0]=0,C[A+49|0]=0,C[A+50|0]=0,C[A+51|0]=0,C[A+36|0]=g,C[A+37|0]=g>>>8,C[A+38|0]=g>>>16,C[A+39|0]=g>>>24,C[A+40|0]=I,C[A+41|0]=I>>>8,C[A+42|0]=I>>>16,C[A+43|0]=I>>>24,0},zb:function(A,I,g){return x(A|=0,I|=0,g|=0),XI(A),g=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,I=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,C[A+44|0]=0,C[A+45|0]=0,C[A+46|0]=0,C[A+47|0]=0,C[A+48|0]=0,C[A+49|0]=0,C[A+50|0]=0,C[A+51|0]=0,C[A+36|0]=g,C[A+37|0]=g>>>8,C[A+38|0]=g>>>16,C[A+39|0]=g>>>24,C[A+40|0]=I,C[A+41|0]=I>>>8,C[A+42|0]=I>>>16,C[A+43|0]=I>>>24,0},Ab:L,Bb:function(A,I,g,B,Q,E,a,r,o,t){return 0|function(A,I,g,B,Q,E,a,r,o,t){var f,c=0;if(h=f=h-336|0,g&&(i[g>>2]=0,i[g+4>>2]=0),!E&Q>>>0<4294967279)return _g(f+16|0,64,c=A+32|0,A),lg(f+80|0,f+16|0),fI(f+16|0,64),yg(f+80|0,a,r,o),yg(f+80|0,35712,0-r&15,0),EA(f+16|0,0,64),C[f+16|0]=t,BI(f+16|0,f+16|0,64,0,c,1,A),yg(f+80|0,f+16|0,64,0),C[0|I]=n[f+16|0],BI(a=I+1|0,B,Q,E,c,2,A),yg(f+80|0,a,Q,E),yg(f+80|0,35712,15&Q,0),tI(f+8|0,r,o),yg(f+80|0,f+8|0,8,0),tI(f+8|0,Q- -64|0,E-((Q>>>0<4294967232)-1|0)|0),yg(f+80|0,f+8|0,8,0),Fg(f+80|0,I=Q+a|0),fI(f+80|0,256),pI(A+36|0,I),sI(c),(2&t||aI(c,4))&&L(A),g&&(E=(A=Q+17|0)>>>0<17?E+1|0:E,i[g>>2]=A,i[g+4>>2]=E),h=f+336|0,0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,a|=0,r|=0,o|=0,t|=0)},Cb:function(A,I,g,B,Q,E,a,r,o,t){return 0|function(A,I,g,B,Q,E,a,r,o,t){var f,c=0,y=0,s=0,w=0,D=0;h=f=h-352|0,g&&(i[g>>2]=0,i[g+4>>2]=0),B&&(C[0|B]=255),w=-1;A:{if(!(!a&E>>>0<17)){if(!(c=a-(E>>>0<17)|0)&(y=E-17|0)>>>0>=4294967279|c)break A;_g(f+32|0,64,s=A+32|0,A),lg(f+96|0,f+32|0),fI(f+32|0,64),yg(f+96|0,r,o,t),yg(f+96|0,35712,0-o&15,0),EA(f+32|0,0,64),C[f+32|0]=n[0|Q],BI(f+32|0,f+32|0,64,0,s,1,A),D=n[f+32|0],C[f+32|0]=n[0|Q],yg(f+96|0,f+32|0,64,0),yg(f+96|0,r=Q+1|0,y,c),yg(f+96|0,35712,E-1&15,0),tI(f+24|0,o,t),yg(f+96|0,f+24|0,8,0),tI(f+24|0,Q=E+47|0,a=Q>>>0<47?a+1|0:a),yg(f+96|0,f+24|0,8,0),Fg(f+96|0,f),fI(f+96|0,256),zA(f,r+y|0,16)?fI(f,16):(BI(I,r,y,c,s,2,A),pI(A+36|0,f),sI(s),(2&D||aI(s,4))&&L(A),g&&(i[g>>2]=y,i[g+4>>2]=c),w=0,B&&(C[0|B]=D))}return h=f+352|0,w}OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,a|=0,r|=0,o|=0,t|=0)},Db:function(){return 52},Eb:function(){return 17},Fb:Mg,Gb:Ng,Hb:function(){return-18},Ib:Lg,Jb:Rg,Kb:Jg,Lb:qg,Mb:xg,Nb:Sg,Ob:function(A,I,g,B,Q){return 0|function(A,I,g,B){var Q=0,C=0,E=0,i=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0;if(Q=1886610805^(E=n[0|B]|n[B+1|0]<<8|n[B+2|0]<<16|n[B+3|0]<<24),i=1936682341^(C=n[B+4|0]|n[B+5|0]<<8|n[B+6|0]<<16|n[B+7|0]<<24),a=1852142177^E,o=1819895653^C,E=1852075885^(t=n[B+8|0]|n[B+9|0]<<8|n[B+10|0]<<16|n[B+11|0]<<24),C=1685025377^(B=n[B+12|0]|n[B+13|0]<<8|n[B+14|0]<<16|n[B+15|0]<<24),t^=2037671283,r=1952801890^B,(0|(B=(I+g|0)-(y=7&g)|0))!=(0|I)){for(;e=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,f=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,c=Dg(E,C,13),s=p,w=1+(C=C+i|0)|0,i=C,h=Dg(C=Q+E|0,i=C>>>0>>0?w:i,32),w=p,r=Q=r^f,E=Dg(t^=e,Q,16),Q=a+t|0,a=o+r|0,t=o=(a=Q>>>0>>0?a+1|0:a)^p,o=Dg(E^=Q,o,21),r=p,c=Dg(C^=c,i^=s,17),D=p,i=a+i|0,a=Q,i=Dg(Q=Q+C|0,C=a>>>0>Q>>>0?i+1|0:i,32),a=p,s=Dg(c^=Q,C^=D,13),D=p,w=1+(Q=t+w|0)|0,t=Q,E=(Q=E+h|0)>>>0>>0?w:t,c=t=Q+c|0,C=E+C|0,C=Dg(t,h=Q>>>0>t>>>0?C+1|0:C,32),t=p,o=Dg(Q^=o,E^=r,16),E=a+E|0,E=(Q=Q+i|0)>>>0>>0?E+1|0:E,i=C+(a=Q^o)|0,C=(r=t)+(t=E^p)|0,t=Dg(a,t,21)^i,r=(w=i>>>0>>0?C+1|0:C)^p,a=C=h^D,C=Dg(o=c^s,C,17),E=E+a|0,o=(a=Q+o|0)>>>0>>0?E+1|0:E,E=C^a,C=o^p,Q=i^e,i=f^w,a=Dg(a,o,32),o=p,(0|B)!=(0|(I=I+8|0)););I=B}switch(B=g<<24,g=0,y-1|0){case 6:B|=n[I+6|0]<<16;case 5:B|=n[I+5|0]<<8;case 4:B|=n[I+4|0];case 3:e=(g=n[I+3|0])>>>8|0,g<<=24,B|=e;case 2:g|=(e=n[I+2|0])<<16,B|=f=e>>>16|0;case 1:g|=(e=n[I+1|0])<<8,B|=f=e>>>24|0;case 0:g=n[0|I]|g}return e=Dg(E,C,13),f=p,I=C+i|0,y=Dg(E=Q+E|0,C=E>>>0>>0?I+1|0:I,32),c=p,i=Q=B^r,Q=Dg(I=g^t,Q,16),i=i+o|0,o=a=(i=(r=I)>>>0>(I=I+a|0)>>>0?i+1|0:i)^p,a=Dg(Q^=I,a,21),t=p,e=Dg(E^=e,C^=f,17),f=p,C=i+C|0,r=I,C=Dg(I=I+E|0,E=r>>>0>I>>>0?C+1|0:C,32),i=p,e=Dg(r=I^e,E^=f,13),f=p,s=1+(I=o+c|0)|0,o=I,E=(Q=(I=Q+y|0)>>>0>>0?s:o)+E|0,E=Dg(r=o=I+r|0,o=I>>>0>o>>>0?E+1|0:E,32),y=p,a=Dg(I^=a,Q^=t,16),Q=i+Q|0,Q=(I=I+C|0)>>>0>>0?Q+1|0:Q,C=I^a,a=i=Q^p,i=Dg(C,i,21),t=p,f=o^=f,o=Dg(r^=e,o,17),e=p,Q=Q+f|0,s=I,r=Dg(I=I+r|0,Q=s>>>0>I>>>0?Q+1|0:Q,32),f=p,e=Dg(I^=o,o=Q^e,13),c=p,s=I,a=1+(I=a+y|0)|0,Q=I,B=o+(B^(Q=(I=E+C|0)>>>0>>0?a:Q))|0,g=Dg(C=E=s+(g^=I)|0,E=g>>>0>E>>>0?B+1|0:B,32),a=p,i=Dg(I^=i,B=Q^t,16),B=B+f|0,B=(Q=I)>>>0>(I=I+(255^r)|0)>>>0?B+1|0:B,Q=I^i,o=i=B^p,i=Dg(Q,i,21),t=p,r=E^=c,E=Dg(C^=e,E,17),e=p,B=B+r|0,r=I,C=Dg(I=I+C|0,B=r>>>0>I>>>0?B+1|0:B,32),r=p,f=Dg(E^=I,e^=B,13),y=p,o=1+(I=a+o|0)|0,B=I,Q=(B=(I=g+Q|0)>>>0>>0?o:B)+e|0,a=Q=I>>>0>(g=I+E|0)>>>0?Q+1|0:Q,Q=Dg(g,Q,32),o=p,i=Dg(I^=i,B^=t,16),B=B+r|0,r=I,E=(I=I+C|0)^i,i=C=(B=r>>>0>I>>>0?B+1|0:B)^p,C=Dg(E,C,21),t=p,r=a^=y,a=Dg(g^=f,a,17),e=p,B=B+r|0,r=I,r=Dg(I=I+g|0,g=r>>>0>I>>>0?B+1|0:B,32),f=p,y=Dg(a^=I,e^=g,13),c=p,B=1+(I=i+o|0)|0,g=I,Q=(B=(I=Q+E|0)>>>0>>0?B:g)+e|0,i=Q=I>>>0>(g=I+a|0)>>>0?Q+1|0:Q,Q=Dg(g,Q,32),a=p,C=Dg(I^=C,B^=t,16),B=B+f|0,o=I,E=(I=I+r|0)^C,o=C=(B=o>>>0>I>>>0?B+1|0:B)^p,C=Dg(E,C,21),t=p,r=i^=c,i=Dg(g^=y,i,17),e=p,B=B+r|0,r=I,B=Dg(I=I+g|0,g=r>>>0>I>>>0?B+1|0:B,32),r=p,e=g^=e,f=Dg(i^=I,g,13),y=p,o=1+(I=a+o|0)|0,g=I,a=E=t^(Q=(I=Q+E|0)>>>0>>0?o:g),E=Dg(g=I^C,E,16),C=a+r|0,r=g,E=Dg((g=g+B|0)^E,(B=r>>>0>g>>>0?C+1|0:C)^p,21),C=p,Q=Q+e|0,o=1+(B=B+(Q=((r=I)>>>0>(I=I+i|0)>>>0?Q+1|0:Q)^y)|0)|0,r=B,g=(I=g+(B=I^f)|0)>>>0>>0?o:r,B=Dg(B,Q,17)^I^E,Q=p^g^C,tI(A,Dg(I,g,32)^B,p^Q),0}(A|=0,I|=0,g|=0,Q|=0)},Pb:function(A){cI(A|=0,16)},Qb:function(){return 208},Rb:Pg,Sb:Ng,Tb:Ng,Ub:Pg,Vb:function(){return-65},Wb:function(A,I,g){return 0|N(A|=0,I|=0,g|=0)},Xb:function(A,I){return 0|function(A,I){var g;return h=g=h-32|0,cI(g,32),N(A,I,g),fI(g,32),h=g+32|0,0}(A|=0,I|=0)},Yb:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){var E,n;return h=E=h-16|0,n=g,g=B,Bg(A,E+8|0,gA(A- -64|0,n,B),B,Q,C),64!=i[E+8>>2]|i[E+12>>2]?(I&&(i[I>>2]=0,i[I+4>>2]=0),EA(A,0,g- -64|0),A=-1):(A=0,I&&(i[I>>2]=B- -64,i[I+4>>2]=Q-((B>>>0<4294967232)-1|0))),h=E+16|0,A}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},Zb:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){var E=0;A:{I:{if(!(!Q&B>>>0<64||(Q=Q-1|0,!(Q=(B=B+-64|0)>>>0<4294967232?Q+1|0:Q)&B>>>0>4294967231|Q))){if(!ng(g,E=g- -64|0,B,Q,C))break I;A&&EA(A,0,B)}if(g=-1,!I)break A;return i[I>>2]=0,i[I+4>>2]=0,-1}I&&(i[I>>2]=B,i[I+4>>2]=Q),g=0,A&&gA(A,E,B)}return g}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},_b:function(A,I,g,B,Q,C){return 0|Bg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},$b:function(A,I,g,B,Q){return 0|ng(A|=0,I|=0,g|=0,B|=0,Q|=0)},ac:function(A){return MI(A|=0),0},bc:function(A,I,g,B){return 0|V(A|=0,I|=0,g|=0,B|=0)},cc:function(A,I,g,B){return 0|function(A,I,g,B){var Q;return h=Q=h+-64|0,UI(A,Q),A=q(I,g,Q,64,0,B,1),h=Q- -64|0,A}(A|=0,I|=0,g|=0,B|=0)},dc:function(A,I,g){return 0|function(A,I,g){var B;return h=B=h+-64|0,UI(A,B),A=lA(I,B,64,0,g,1),h=B- -64|0,A}(A|=0,I|=0,g|=0)},ec:function(A,I){A|=0;var g,B=0;return h=g=h-256|0,B=-1,wA(I|=0)||cA(g+96|0,I)||function(A){var I;return h=I=h-160|0,function(A,I){var g,B=0;for(h=g=h-1760|0,FI(g+480|0,I),JI(g+320|0,I),DI(g,g+320|0),VA(g+320|0,g,g+480|0),DI(g+160|0,g+320|0),FI(I=g+640|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+800|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+960|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+1120|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+1280|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+1440|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(g+1600|0,g+160|0),zI(A),I=252;JI(g+320|0,A),B=I,(0|(I=C[I+34208|0]))>=1?(DI(g+160|0,g+320|0),VA(g+320|0,g+160|0,(g+480|0)+r((254&I)>>>1|0,160)|0)):(0|I)>-1||(DI(g+160|0,g+320|0),WA(g+320|0,g+160|0,(g+480|0)+r((0-I&254)>>>1|0,160)|0)),DI(A,g+320|0),I=B-1|0,B;);h=g+1760|0}(I,A),A=RI(I),h=I+160|0,A}(g+96|0)&&(wg(g),yA(g,g,I=g+136|0),wg(g+48|0),sA(g+48|0,g+48|0,I),j(g,g),_(g+48|0,g+48|0,g),BA(A,g+48|0),B=0),h=g+256|0,0|B},fc:function(A,I){A|=0;var g,B=0;return h=g=h+-64|0,mI(g,I|=0,32,0),C[0|g]=248&n[0|g],C[g+31|0]=63&n[g+31|0]|64,I=i[g+20>>2],B=i[g+16>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=I,C[A+21|0]=I>>>8,C[A+22|0]=I>>>16,C[A+23|0]=I>>>24,I=i[g+12>>2],B=i[g+8>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=I,C[A+13|0]=I>>>8,C[A+14|0]=I>>>16,C[A+15|0]=I>>>24,I=i[g+4>>2],B=i[g>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24,I=i[g+28>>2],B=i[g+24>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=I,C[A+29|0]=I>>>8,C[A+30|0]=I>>>16,C[A+31|0]=I>>>24,fI(g,64),h=g- -64|0,0},gc:YI,hc:PI,ic:function(A){var I=0,g=0;if((A|=0)>>>0>=2){for(g=(0-A>>>0)%(A>>>0)|0;(I=YI())>>>0>>0;);A=(I>>>0)%(A>>>0)|0}else A=0;return 0|A},jc:cI,kc:function(A,I,g){_g(A|=0,I|=0,1784,g|=0)},lc:Ng,mc:function(){var A=0,I=0;return(A=i[9097])&&(A=i[A+20>>2])&&(I=0|Vg[0|A]()),0|I},nc:function(A,I,g){!function(A,I,g){1==(0|g)|g>>>0>1&&(t(1796,1816,197,1842),e()),cI(A,I)}(A|=0,I|=0,g|=0)},oc:function(A,I,g,B){A|=0,g|=0;var Q=0,E=0,i=0;if(!((B|=0)>>>0>2147483646|B<<1>>>0>=(I|=0)>>>0)){if(I=0,B){for(;Q=I<<1,E=(i=n[I+g|0])>>>4|0,C[Q+A|0]=87+(E+(E+65526>>>8&217)|0),E=(1|Q)+A|0,Q=15&i,C[0|E]=22272+((Q<<8)+(Q+65526&55552)|0)>>>8,(0|B)!=(0|(I=I+1|0)););I=B<<1}else I=0;return C[I+A|0]=0,0|A}OI(),e()},pc:function(A,I,g,B,Q,E,a){A|=0,I|=0,g|=0,Q|=0,E|=0,a|=0;var r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0;A:if(B|=0){I:{g:{B:for(;;){for(o=r;;){Q:{if(!(255&((w=(65526+(y=(223&(c=n[g+o|0]))-55&255)^y+65520)>>>8|0)|(e=65526+(h=48^c)>>>8|0)))){if(e=1,!Q|255&f)break g;if(gg(Q,c))break Q;r=o;break A}if(I>>>0<=t>>>0){i[8960]=68,e=0;break g}if(r=y&w|e&h,255&f?(C[A+t|0]=r|D,t=t+1|0):D=r<<4,f^=-1,e=1,(r=o+1|0)>>>0>>0)continue B;break I}if(f=0,!((o=o+1|0)>>>0>>0))break}break}r=(A=r+1|0)>>>0>>0?B:A;break A}r=o}255&f?(i[8960]=28,s=-1,r=r-1|0,t=0):e||(t=0,s=-1)}return a?i[a>>2]=g+r:(0|B)!=(0|r)&&(i[8960]=28,s=-1),E&&(i[E>>2]=t),0|s},qc:function(A,I){var g;return A|=0,pg(I|=0),A=r(g=(A>>>0)/3|0,-3)+A|0,r(4-(3-A&0-(I>>>1&1))|0,1&(A|A>>>1))+(g<<2|1)|0},rc:O,sc:W,tc:function(){var A=0;return i[9104]?A=1:(i[9086]=0,function(){var A;h=A=h-16|0,VI(A),i[A>>2]&&(VI(A),EA(36348,0,40)),h=A+16|0}(),i[9085]=1,PI(),function(){var A=0;(0|(A=0|y(30)))>=1?i[8944]=A:A=i[8944],A>>>0<=15&&(OI(),e()),cI(36400,16)}(),i[9104]=1,A=0),0|A},uc:function(A,I,g,B,Q){A|=0,I|=0,g|=0,Q|=0;var E,a=0,r=0,o=0;h=E=h-16|0;A:{if(B|=0){if(o=-1,(a=(a=B-1|0)-(r=a&B?(g>>>0)%(B>>>0)|0:g&a)|0)>>>0>=(-1^g)>>>0)break A;if(!((g=g+a|0)>>>0>=Q>>>0))for(A&&(i[A>>2]=g+1),A=I+g|0,o=0,C[E+15|0]=0,I=B>>>0>1?B:1,B=0;Q=g=A-B|0,r=n[0|g]&n[E+15|0],g=(B^a)-1>>>24|0,C[0|Q]=r|128&g,C[E+15|0]=g|n[E+15|0],(0|I)!=(0|(B=B+1|0)););}else o=-1;return h=E+16|0,0|o}OI(),e()},vc:function(A,I,g,B){A|=0,I|=0,g|=0,B|=0;var Q,C=0,E=0,a=0,r=0,o=0;if(i[12+(Q=h-16|0)>>2]=0,B-1>>>0>>0){for(o=(C=g-1|0)+I|0,g=0,I=0;r=((128^(E=n[o-g|0]))-1&i[Q+12>>2]-1&a-1)>>>8&1,i[Q+12>>2]=i[Q+12>>2]|0-r&g,I|=r,a|=E,(0|B)!=(0|(g=g+1|0)););i[A>>2]=C-i[Q+12>>2],A=I-1|0}else A=-1;return 0|A},wc:function(){return 35762},xc:function(){return 10},yc:qg,zc:Rg,Ac:function(){return 35840},Bc:k,Cc:m}}(A)}(vA)},instantiate:function(A,I){return{then:function(I){var g=new u.Module(A);I({instance:new u.Instance(g)})}}},RuntimeError:Error};function p(A,I,g,B){switch("*"===(g=g||"i8").charAt(g.length-1)&&(g="i32"),g){case"i1":case"i8":_[A>>0]=I;break;case"i16":Y[A>>1]=I;break;case"i32":b[A>>2]=I;break;case"i64":nA=[I>>>0,(iA=I,+Math.abs(iA)>=1?iA>0?(0|Math.min(+Math.floor(iA/4294967296),4294967295))>>>0:~~+Math.ceil((iA-+(~~iA>>>0))/4294967296)>>>0:0)],b[A>>2]=nA[0],b[A+4>>2]=nA[1];break;case"float":m[A>>2]=I;break;case"double":v[A>>3]=I;break;default:IA("invalid type for setValue: "+g)}}function l(A,I,g){switch("*"===(I=I||"i8").charAt(I.length-1)&&(I="i32"),I){case"i1":case"i8":return _[A>>0];case"i16":return Y[A>>1];case"i32":case"i64":return b[A>>2];case"float":return m[A>>2];case"double":return v[A>>3];default:IA("invalid type for getValue: "+I)}return null}w=[],"object"!=typeof u&&IA("no native wasm support detected");var F=!1;function G(A,I){A||IA("Assertion failed: "+I)}var k,_,H,Y,b,m,v,U="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function S(A,I,g){for(var B=I+g,Q=I;A[Q]&&!(Q>=B);)++Q;if(Q-I>16&&A.subarray&&U)return U.decode(A.subarray(I,Q));for(var C="";I>10,56320|1023&a)}}else C+=String.fromCharCode((31&E)<<6|i)}else C+=String.fromCharCode(E)}return C}function N(A,I){return A?S(H,A,I):""}function M(A,I){return A%I>0&&(A+=I-A%I),A}function d(A){k=A,Q.HEAP8=_=new Int8Array(A),Q.HEAP16=Y=new Int16Array(A),Q.HEAP32=b=new Int32Array(A),Q.HEAPU8=H=new Uint8Array(A),Q.HEAPU16=new Uint16Array(A),Q.HEAPU32=new Uint32Array(A),Q.HEAPF32=m=new Float32Array(A),Q.HEAPF64=v=new Float64Array(A)}var P,R=Q.INITIAL_MEMORY||16777216;(D=Q.wasmMemory?Q.wasmMemory:new u.Memory({initial:R/65536,maximum:32768}))&&(k=D.buffer),R=k.byteLength,d(k);var J=[],x=[],L=[],K=[];function q(){if(Q.preRun)for("function"==typeof Q.preRun&&(Q.preRun=[Q.preRun]);Q.preRun.length;)T(Q.preRun.shift());fA(J)}function X(){fA(x)}function V(){fA(L)}function W(){if(Q.postRun)for("function"==typeof Q.postRun&&(Q.postRun=[Q.postRun]);Q.postRun.length;)j(Q.postRun.shift());fA(K)}function T(A){J.unshift(A)}function j(A){K.unshift(A)}x.push({func:function(){UA()}});var Z=0,O=null,z=null;function $(A){Z++,Q.monitorRunDependencies&&Q.monitorRunDependencies(Z)}function AA(A){if(Z--,Q.monitorRunDependencies&&Q.monitorRunDependencies(Z),0==Z&&(null!==O&&(clearInterval(O),O=null),z)){var I=z;z=null,I()}}function IA(A){throw Q.onAbort&&Q.onAbort(A),h(A+=""),F=!0,A="abort("+A+"). Build with -s ASSERTIONS=1 for more info.",new u.RuntimeError(A)}function gA(A,I){return String.prototype.startsWith?A.startsWith(I):0===A.indexOf(I)}Q.preloadedImages={},Q.preloadedAudios={};var BA="data:application/octet-stream;base64,";function QA(A){return gA(A,BA)}var CA="file://";function EA(A){return gA(A,CA)}var iA,nA,aA="<<< WASM_BINARY_FILE >>>";function rA(A){try{if(A==aA&&w)return new Uint8Array(w);var I=bA(A);if(I)return I;if(t)return t(A);throw"both async and sync fetching of the wasm failed"}catch(A){IA(A)}}function oA(){if(!w&&(i||n)){if("function"==typeof fetch&&!EA(aA))return fetch(aA,{credentials:"same-origin"}).then((function(A){if(!A.ok)throw"failed to load wasm binary file at '"+aA+"'";return A.arrayBuffer()})).catch((function(){return rA(aA)}));if(e)return new Promise((function(A,I){e(aA,(function(I){A(new Uint8Array(I))}),I)}))}return Promise.resolve().then((function(){return rA(aA)}))}function eA(){var A={a:vA};function I(A,I){var g=A.exports;Q.asm=g,P=Q.asm.h,AA()}function g(A){I(A.instance)}function B(I){return oA().then((function(I){return u.instantiate(I,A)})).then(I,(function(A){h("failed to asynchronously prepare wasm: "+A),IA(A)}))}if($(),Q.instantiateWasm)try{return Q.instantiateWasm(A,I)}catch(A){return h("Module.instantiateWasm callback failed with error: "+A),!1}return w||"function"!=typeof u.instantiateStreaming||QA(aA)||EA(aA)||"function"!=typeof fetch?B(g):fetch(aA,{credentials:"same-origin"}).then((function(I){return u.instantiateStreaming(I,A).then(g,(function(A){return h("wasm streaming compile failed: "+A),h("falling back to ArrayBuffer instantiation"),B(g)}))})),{}}QA(aA)||(aA=s(aA));var tA={1024:function(){return Q.getRandomValue()},1062:function(){if(void 0===Q.getRandomValue)try{var A="object"==typeof window?window:self,I=void 0!==A.crypto?A.crypto:A.msCrypto,g=function(){var A=new Uint32Array(1);return I.getRandomValues(A),A[0]>>>0};g(),Q.getRandomValue=g}catch(A){try{var B=require("crypto"),C=function(){var A=B.randomBytes(4);return(A[0]<<24|A[1]<<16|A[2]<<8|A[3])>>>0};C(),Q.getRandomValue=C}catch(A){throw"No secure random number generator found"}}}};function fA(A){for(;A.length>0;){var I=A.shift();if("function"!=typeof I){var g=I.func;"number"==typeof g?void 0===I.arg?P.get(g)():P.get(g)(I.arg):g(void 0===I.arg?null:I.arg)}else I(Q)}}function cA(A,I,g,B){IA("Assertion failed: "+N(A)+", at: "+[I?N(I):"unknown filename",g,B?N(B):"unknown function"])}function yA(){IA()}function sA(A,I,g){var B=GA(I,g);return tA[A].apply(null,B)}function wA(A,I,g){H.copyWithin(A,I,I+g)}function hA(){return H.length}function DA(A){try{return D.grow(A-k.byteLength+65535>>>16),d(D.buffer),1}catch(A){}}function uA(A){A>>>=0;var I=hA(),g=2147483648;if(A>g)return!1;for(var B=1;B<=4;B*=2){var Q=I*(1+.2/B);if(Q=Math.min(Q,A+100663296),DA(Math.min(g,M(Math.max(16777216,A,Q),65536))))return!0}return!1}function pA(A){return b[SA()>>2]=A,A}function lA(A){switch(A){case 30:return 16384;case 85:return 131072;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==typeof navigator&&navigator.hardwareConcurrency||1}return pA(28),-1}var FA=[];function GA(A,I){var g;for(FA.length=0,I>>=2;g=H[A++];){var B=g<105;B&&1&I&&I++,FA.push(B?v[I++>>1]:b[I]),++I}return FA}var kA=!1;function _A(A){for(var I=[],g=0;g255&&(kA&&G(!1,"Character code "+B+" ("+String.fromCharCode(B)+") at offset "+g+" not in 0x00-0xFF."),B&=255),I.push(String.fromCharCode(B))}return I.join("")}var HA="function"==typeof atob?atob:function(A){var I,g,B,Q,C,E,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="",a=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{I=i.indexOf(A.charAt(a++))<<2|(Q=i.indexOf(A.charAt(a++)))>>4,g=(15&Q)<<4|(C=i.indexOf(A.charAt(a++)))>>2,B=(3&C)<<6|(E=i.indexOf(A.charAt(a++))),n+=String.fromCharCode(I),64!==C&&(n+=String.fromCharCode(g)),64!==E&&(n+=String.fromCharCode(B))}while(a0||(q(),Z>0||(Q.setStatus?(Q.setStatus("Running..."),setTimeout((function(){setTimeout((function(){Q.setStatus("")}),1),I()}),1)):I()))}if(Q._malloc=function(){return(Q._malloc=Q.asm.Bc).apply(null,arguments)},Q._free=function(){return(Q._free=Q.asm.Cc).apply(null,arguments)},Q.setValue=p,Q.getValue=l,Q.UTF8ToString=N,z=function A(){mA||NA(),mA||(z=A)},Q.run=NA,Q.preInit)for("function"==typeof Q.preInit&&(Q.preInit=[Q.preInit]);Q.preInit.length>0;)Q.preInit.pop()();NA()}))};var g,Q=void 0!==Q?Q:{},C={};for(g in Q)Q.hasOwnProperty(g)&&(C[g]=Q[g]);var E=[],i=!1,n=!1,a=!1,r=!1;i="object"==typeof window,n="function"==typeof importScripts,a="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,r=!i&&!a&&!n;var o,e,t,f,c,y="";function s(A){return Q.locateFile?Q.locateFile(A,y):y+A}a?(y=n?require("path").dirname(y)+"/":__dirname+"/",o=function(A,I){var g=HA(A);return g?I?g:g.toString():(f||(f=require("fs")),c||(c=require("path")),A=c.normalize(A),f.readFileSync(A,I?null:"utf8"))},t=function(A){var I=o(A,!0);return I.buffer||(I=new Uint8Array(I)),F(I.buffer),I},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),E=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Q),Q.inspect=function(){return"[Emscripten Module object]"}):r?("undefined"!=typeof read&&(o=function(A){var I=HA(A);return I?GA(I):read(A)}),t=function(A){var I;return(I=HA(A))?I:"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(F("object"==typeof(I=read(A,"binary"))),I)},"undefined"!=typeof scriptArgs?E=scriptArgs:void 0!==arguments&&(E=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(i||n)&&(n?y=self.location.href:"undefined"!=typeof document&&document.currentScript&&(y=document.currentScript.src),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",o=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText}catch(I){var g=HA(A);if(g)return GA(g);throw I}},n&&(t=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}catch(I){var g=HA(A);if(g)return g;throw I}}),e=function(A,I,g){var B=new XMLHttpRequest;B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=function(){if(200==B.status||0==B.status&&B.response)I(B.response);else{var Q=HA(A);Q?I(Q.buffer):g()}},B.onerror=g,B.send(null)}),Q.print;var w,h,D=Q.printErr||void 0;for(g in C)C.hasOwnProperty(g)&&(Q[g]=C[g]);function u(A,I,g,B){switch("*"===(g=g||"i8").charAt(g.length-1)&&(g="i32"),g){case"i1":case"i8":k[A>>0]=I;break;case"i16":H[A>>1]=I;break;case"i32":Y[A>>2]=I;break;case"i64":EA=[I>>>0,(CA=I,+Math.abs(CA)>=1?CA>0?(0|Math.min(+Math.floor(CA/4294967296),4294967295))>>>0:~~+Math.ceil((CA-+(~~CA>>>0))/4294967296)>>>0:0)],Y[A>>2]=EA[0],Y[A+4>>2]=EA[1];break;case"float":b[A>>2]=I;break;case"double":m[A>>3]=I;break;default:$("invalid type for setValue: "+g)}}function p(A,I,g){switch("*"===(I=I||"i8").charAt(I.length-1)&&(I="i32"),I){case"i1":case"i8":return k[A>>0];case"i16":return H[A>>1];case"i32":case"i64":return Y[A>>2];case"float":return b[A>>2];case"double":return m[A>>3];default:$("invalid type for getValue: "+I)}return null}C=null,Q.arguments&&(E=Q.arguments),Q.thisProgram&&Q.thisProgram,Q.quit&&Q.quit,Q.wasmBinary&&(w=Q.wasmBinary),Q.noExitRuntime&&Q.noExitRuntime,"object"!=typeof WebAssembly&&$("no native wasm support detected");var l=!1;function F(A,I){A||$("Assertion failed: "+I)}var G,k,_,H,Y,b,m,v="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function U(A,I,g){for(var B=I+g,Q=I;A[Q]&&!(Q>=B);)++Q;if(Q-I>16&&A.subarray&&v)return v.decode(A.subarray(I,Q));for(var C="";I>10,56320|1023&a)}}else C+=String.fromCharCode((31&E)<<6|i)}else C+=String.fromCharCode(E)}return C}function S(A,I){return A?U(_,A,I):""}function N(A,I){return A%I>0&&(A+=I-A%I),A}function M(A){G=A,Q.HEAP8=k=new Int8Array(A),Q.HEAP16=H=new Int16Array(A),Q.HEAP32=Y=new Int32Array(A),Q.HEAPU8=_=new Uint8Array(A),Q.HEAPU16=new Uint16Array(A),Q.HEAPU32=new Uint32Array(A),Q.HEAPF32=b=new Float32Array(A),Q.HEAPF64=m=new Float64Array(A)}Q.INITIAL_MEMORY;var d,P=[],R=[],J=[],x=[];function L(){if(Q.preRun)for("function"==typeof Q.preRun&&(Q.preRun=[Q.preRun]);Q.preRun.length;)V(Q.preRun.shift());eA(P)}function K(){eA(R)}function q(){eA(J)}function X(){if(Q.postRun)for("function"==typeof Q.postRun&&(Q.postRun=[Q.postRun]);Q.postRun.length;)W(Q.postRun.shift());eA(x)}function V(A){P.unshift(A)}function W(A){x.unshift(A)}R.push({func:function(){mA()}});var T=0,j=null,Z=null;function O(A){T++,Q.monitorRunDependencies&&Q.monitorRunDependencies(T)}function z(A){if(T--,Q.monitorRunDependencies&&Q.monitorRunDependencies(T),0==T&&(null!==j&&(clearInterval(j),j=null),Z)){var I=Z;Z=null,I()}}function $(A){throw Q.onAbort&&Q.onAbort(A),D(A+=""),l=!0,A="abort("+A+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(A)}function AA(A,I){return String.prototype.startsWith?A.startsWith(I):0===A.indexOf(I)}Q.preloadedImages={},Q.preloadedAudios={};var IA="data:application/octet-stream;base64,";function gA(A){return AA(A,IA)}var BA="file://";function QA(A){return AA(A,BA)}var CA,EA,iA="data:application/octet-stream;base64,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CiASfnwgCSALfnwiEUKAgIAQfCIUQhqHfCIiQoCAgAh8IiNCGYd8IhkgGUKAgIAQfCIZQoCAgOAPg30+AgggACASIBh+IA0gDn58IAkgEH58IAwgHH58IAsgF358IBNCGod8IhMgE0KAgIAIfCITQoCAgPAPg30+AhwgACAMIBp+IAkgFX58IBAgFn58IAogD358IAsgDX58IBlCGod8IgogCkKAgIAIfCIKQoCAgPAPg30+AgwgACAQIBJ+IA0gDX58IA4gD358IAkgG358IAwgF358IAsgA6wiDX58IBNCGYd8IgsgC0KAgIAQfCILQoCAgOAPg30+AiAgACAgICFCgICA8A+DfSAeIB9CgICAYIN9IApCGYd8IgpCgICAEHwiD0IaiHw+AhQgACAKIA9CgICA4A+DfT4CECAAIA4gEH4gGCAdfnwgEiAcfnwgCSAXfnwgDCANfnwgC0Iah3wiCSAJQoCAgAh8IglCgICA8A+DfT4CJCAAICIgI0KAgIDwD4N9IBEgFEKAgIBgg30gCUIZh0ITfnwiCUKAgIAQfCIMQhqIfD4CBCAAIAkgDEKAgIDgD4N9PgIACxAAIAAzAAAgADEAAkIQhoQL8wICAn8BfgJAIAJFDQAgACACaiIDQQFrIAE6AAAgACABOgAAIAJBA0kNACADQQJrIAE6AAAgACABOgABIANBA2sgAToAACAAIAE6AAIgAkEHSQ0AIANBBGsgAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBBGsgATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQQhrIAE2AgAgAkEMayABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkEgayICQR9LDQALCyAACwkAIAAgATcAAAuCBAEDfyACQYAETwRAIAAgASACEAQaIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAvsAQESfyACKAIEIQMgASgCBCEEIAIoAgghBSABKAIIIQYgAigCDCEHIAEoAgwhCCACKAIQIQkgASgCECEKIAIoAhQhCyABKAIUIQwgAigCGCENIAEoAhghDiACKAIcIQ8gASgCHCEQIAIoAiAhESABKAIgIRIgAigCJCETIAEoAiQhFCAAIAIoAgAgASgCAGo2AgAgACATIBRqNgIkIAAgESASajYCICAAIA8gEGo2AhwgACANIA5qNgIYIAAgCyAMajYCFCAAIAkgCmo2AhAgACAHIAhqNgIMIAAgBSAGajYCCCAAIAMgBGo2AgQLGAEBf0HEnAIoAgAiAARAIAARDgALEAIAC0ABA38gACABIAFB+ABqIgIQCyAAQShqIAFBKGoiAyABQdAAaiIEEAsgAEHQAGogBCACEAsgAEH4AGogASADEAsL7AEBEn8gAigCBCEDIAEoAgQhBCACKAIIIQUgASgCCCEGIAIoAgwhByABKAIMIQggAigCECEJIAEoAhAhCiACKAIUIQsgASgCFCEMIAIoAhghDSABKAIYIQ4gAigCHCEPIAEoAhwhECACKAIgIREg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czYCFCABIAUgEHM2AhAgASAEIA9zNgIMIAEgAyANczYCCCABIAAgC3M2AgQgASAWIBdzNgIACykBAX8jAEGAAWsiAiQAIAJBCGogARDoAiAAIAJBCGoQOSACQYABaiQACzIBAX8gACABIAFB+ABqIgIQCyAAQShqIAFBKGogAUHQAGoiARALIABB0ABqIAEgAhALC68CARN/IAEoAgQhDCAAKAIEIQMgASgCCCENIAAoAgghBCABKAIMIQ4gACgCDCEFIAEoAhAhDyAAKAIQIQYgASgCFCEQIAAoAhQhByABKAIYIREgACgCGCEIIAEoAhwhEiAAKAIcIQkgASgCICETIAAoAiAhCiABKAIkIRQgACgCJCELIABBACACayICIAAoAgAiFSABKAIAc3EgFXM2AgAgACALIAsgFHMgAnFzNgIkIAAgCiAKIBNzIAJxczYCICAAIAkgCSAScyACcXM2AhwgACAIIAggEXMgAnFzNgIYIAAgByAHIBBzIAJxczYCFCAAIAYgBiAPcyACcXM2AhAgACAFIAUgDnMgAnFzNgIMIAAgBCAEIA1zIAJxczYCCCAAIAMgAyAMcyACcXM2AgQLJAEBfyMAQSBrIgEkACABIAAQLSABQSAQZSEAIAFBIGokACAAC6YEAgp/Dn4gACgCJCEEIAAoAiAhBSAAKAIcIQYgACgCGCEHIAAoAhQhAyACQhBaBEAgAC0AUEVBGHQhCCAAKAIEIglBBWytIRkgACgCCCIKQQVsrSEXIAAoAgwiC0EFbK0hFSAAKAIQIgxBBWytIRMgDK0hGiALrSEYIAqtIRYgCa0hFCAANQIAIRIDQCABKAADQQJ2Qf///x9xIAdqrSINIBh+IAEoAABB////H3EgA2qtIg4gGn58IAEoAAZBBHZB////H3EgBmqtIg8gFn58IAEoAAlBBnYgBWqtIhAgFH58IAQgCGogASgADEEIdmqtIhEgEn58IA0gFn4gDiAYfnwgDyAUfnwgECASfnwgESATfnwgDSAUfiAOIBZ+fCAPIBJ+fCAQIBN+fCARIBV+fCANIBJ+IA4gFH58IA8gE358IBAgFX58IBEgF358IA0gE34gDiASfnwgDyAVfnwgECAXfnwgESAZfnwiDUIaiEL/////D4N8Ig5CGohC/////w+DfCIPQhqIQv////8Pg3wiEEIaiEL/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aiAFIAYQDCAJQQhqIAYQESAJQdAAaiAJQQhqQggQDCAAIAMgBCAHIAgQogEgCUHQAGogACAEEAwgCUEIaiAEEBEgCUHQAGogCUEIakIIEAwgCUHQAGogARAjIAlB0ABqQYACEAkgAgRAIAJCEDcDAAsgCUHQAmokAEEACygAIAJCgICAgBBaBEAQFAALIAAgASACIANCASAEQfCXAigCABEVABoLFgAgAELAACABIAJB6JcCKAIAEREAGgsyACAAIAIEfyACKAAABUEACzYCMCAAIAEoAAA2AjQgACABKAAENgI4IAAgASgACDYCPAs9ACAAAn8gAgRAIAAgAigAADYCMCACKAAEDAELIABBADYCMEEACzYCNCAAIAEoAAA2AjggACABKAAENgI8CxkAIAAgASACIANCASAEQeSXAigCABEVABoLKAEBfyMAQRBrIgAkACAAQQA6AA9BpgggAEEPakEAEAEaIABBEGokAAtqAQN/IwBBEGsiAyQAIANBADoAD0F/IQUgACABIAJB2JcCKAIAEQMARQRAA0AgAyAAIARqLQAAIAMtAA9yOgAPIARBAWoiBEEgRw0AC0EAIAMtAA9BAWtBCHZBAXFrIQULIANBEGokACAFCxMAIAAgAUHAB2xBoBtqIAIQ5gILEAAgAEIANwIAIABCADcCCAsdACAAEDggAEEoahAdIABB0ABqEB0gAEH4AGoQOAuAAgEIfwNAIAAgAmogASACQQN2ai0AACACQQdxdkEBcToAACACQQFqIgJBgAJHDQALA0AgBCIBQQFqIQQCQCAAIAFqIgYtAABFDQAgBCECQQEhBSABQf4BSw0AA0ACQCAAIAJqIgMsAAAiB0UNACAHIAV0IgcgBiwAACIIaiIJQQ9MBEAgBiAJOgAAIANBADoAAAwBCyAIIAdrIgNBcUgNAiAGIAM6AAADQCAAIAJqIgMtAABFBEAgA0EBOgAADAILIANBADoAACACQf8BSSEDIAJBAWohAiADDQALCyAFQQVLDQEgBUEBaiIFIAFqIgJBgAJJDQALCyAEQYACRw0ACwuVAQEEfyMAQTBrIgUkACAAIAFBKGoiAyABEBMgAEEoaiIEIAMgARAWIABB0ABqIgMgACACQShqEAsgBCAEIAIQCyAAQfgAaiIGIAJB+ABqIAFB+ABqEAsgACABQdAAaiACQdAA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CSACQYAIaiQAC/ADAQJ/IwAiAyEEIANBwANrQUBxIgMkACAARSABRXJFBEAgA0FAa0EAQQBBwAAQPhogA0E8aiABKAIwEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIEEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIsEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIoEAogA0FAayADQTxqQgQQGBogA0E8akETEAogA0FAayADQTxqQgQQGBogA0E8aiACEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIMEAogA0FAayADQTxqQgQQGBoCQCABKAIIIgJFDQAgA0FAayACIAE1AgwQGBogAS0AOEEBcUUNACABKAIIIAEoAgwQCSABQQA2AgwLIANBPGogASgCFBAKIANBQGsgA0E8akIEEBgaIAEoAhAiAgRAIANBQGsgAiABNQIUEBgaCyADQTxqIAEoAhwQCiADQUBrIANBPGpCBBAYGgJAIAEoAhgiAkUNACADQUBrIAIgATUCHBAYGiABLQA4QQJxRQ0AIAEoAhggASgCHBAJIAFBADYCHAsgA0E8aiABKAIkEAogA0FAayADQTxqQgQQGBogASgCICICBEAgA0FAayACIAE1AiQQGBoLIANBQGsgAEHAABA9GgsgBCQAC68BAQN/IwBBEGsiAiQAQWohAwJAIABFIAFFcg0AIAFBCnQiBCABbkGACEcNACAAQQwQICIBNgIAIAFFDQAgAUIANwIAQYCYAiACQQxqIAQQsgEiATYCAAJAAkAgAQRAIAJBADYCDAwBCyACKAIMIgENAQsgACgCABAZIABBADYCAAwBCyAAKAIAIAE2AgAgACgCACABNgIEIAAoAgAgBDYCCEEAIQMLIAJBEGokACADC4cBAQJ/IwBB0ABrIgMkAEFnIQICQCAARSABRXINACAAIAAoAhRBA3QQICICNgIEIAJFBEBBaiECDAELIAAgACgCEBC8ASICBEAgACABKAI4EIMBDAELIAMgASAAKAIkELsBIANBQGtBCBAJIAMgABC6ASADQcgAEAlBACECCyADQdAAaiQAIAILkwEBBH8jAEEgayICJAACQCAARQ0AIAAoAhxFDQAgAiABNgIQQQEhBANAIAIgAzoAGEEAIQFBACEFIAQEQANAIAJBADYCHCACIAIpAxg3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ACAAIAEgAiADrSAErUIghoQgBSAGEGoLFwAgACABIAKtIAOtQiCGhCAEIAUQuwILFgAgACABKQAANwAwIAAgASkACDcAOAsYACAAIAEgAiADrSAErUIghoQgBSAGEGsLEwAgACABrSACrUIghoQgAxCSAgsTACAAIAEgAq0gA61CIIaEEJMCCyEAIAAgASACrSADrUIghoQgBK0gBa1CIIaEIAYgBxCUAgsfACAAIAEgAq0gA61CIIaEIAStIAWtQiCGhCAGEIwBCy0AIAAgAa0gAq1CIIaEIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChCVAgsXACAAIAEgAq0gA61CIIaEIAQgBRCzAgsSACAAIAEgAq0gA61CIIaEEDQLEgAgACABIAKtIAOtQiCGhBAlCxkAIAAgASACIAOtIAStQiCGhCAFIAYQlAELFgAgACABKQAANwAgIAAgASkACDcAKAsXACAAIAEgAq0gA61CIIaEIAQgBRC1AgsVACAAIAEgAq0gA61CIIaEIAQQtgILGQAgACABIAKtIAOtQiCGhCAEIAUgBhCVAQsXACAAIAEgAq0gA61CIIaEIAQgBRC4AgsbACAAIAEgAiADrSAErUIghoQgBSAGIAcQlgELGAAgACABIAIgA60gBK1CIIaEIAUgBhBoCxkAIAAgASACrSADrUIghoQgBCAFIAYQlwELFwAgACABIAKtIAOtQiCGhCAEIAUQuQILGwAgACABIAIgA60gBK1CIIaEIAUgBiAHEJgBCxgAIAAgASACIAOtIAStQiCGhCAFIAYQaQsVACAAIAEgAq0gA61CIIaEIAQQwAILFQAgACABIAKtIAOtQiCGhCAEEJoBCyUAIAAgASADIAStIAWtQiCGhCAGIAetIAitQiCGhCAJIAoQyQILJQAgACACIAOtIAStQiCGhCAFIAYgB60gCK1CIIaEIAkgChCcAQslACAAIAEgAiADrSAErUIghoQgBSAGrSAHrUIghoQgCSAKEMsCCycAIAAgASACIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAogCxCdAQslACAAIAEgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEM8CCyUAIAAgAiADrSAErUIghoQgBSAGIAetIAitQiCGhCAJIAoQngELJQAgACABIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChDQAgslACAAIAIgA60gBK1CIIaEIAUgBiAHrSAIrUIghoQgCSAKEJ8BCyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQ0QILJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALEKABCyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQ0gILJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALEKEBCwQAQQoLBgBBspcCCwsAIAAgASACEIICCw0AIAAgASACIAMQgwILCAAgABA1QQALCQAgACABEIgCCwsAIAAgASACEIoBCwUAQb9/CwUAQdABCywBAX8jAEFAaiIDJAAgACADECcgASADQsAAIAJBARCHASEAIANBQGskACAACy4BAX8jAEFAaiIEJAAgACAEECcgASACIARCwAAgA0EBEIkBIQAgBEFAayQAIAALewEBfwJAAkACQCADQsAAVA0AIANCQHwiA0K/////D1YNACACIAJBQGsiBSADIAQQhgFFDQEgAEUNACAAQQAgA6cQEBoLQX8hAiABRQ0BIAFCADcDAEF/DwsgAQRAIAEgAzcDAAtBACECIABFDQAgACAFIAOnEEcaCyACC3MBAX8jAEEQayIFJAAgACAFQQhqIABBQGsgAiADpyICEEcgAyAEEIgBGgJAIAUpAwhCwABSBEAgAQRAIAFCADcDAAsgAEEAIAJBQGsQEBpBfyEADAELQQAhACABRQ0AIAEgA0JAfTcDAAsgBUEQaiQAIAALbQEBfyMAQUBqIgIkACACIAFCIBA0GiACIAItAABB+AFxOgAAIAIgAi0AH0E/cUHAAHI6AB8gACACKQMQNwAQIAAgAikDCDcACCAAIAIpAwA3AAAgACACKQMYNwAYIAJBwAAQCSACQUBrJABBAAuGAQECfyMAQYACayICJABBfyEDAkAgARB1DQAgAkHgAGogARCuAQ0AIAJB4ABqEOUCRQ0AIAIQHSACIAIgAkGIAWoiARAWIAJBMGoQHSACQTBqIAJBMGogARATIAIgAhA6IAJBMGogAkEwaiACEAsgACACQTBqEC1BACEDCyACQYACaiQAIAMLLAEBfyMAQSBrIgIkACACQSAQHyAAIAEgAhCKARogAkEgEAkgAkEgaiQAQQALCAAgAEEQEB8LogcCAX8HfiADKQAAIgVC9crNg9es27fzAIUhBiAFQuHklfPW7Nm87ACFIQcgAykACCIJQu3ekfOWzNy35ACFIQUgCULzytHLp4zZsvQAhSEJIAEgASACpyIDaiADQQdxIgRrIgNHBEADQCABKQAAIQggBUENEA0hCiAFIAZ8IgVBIBANIQYgCCAJhSIJQRAQDSAHIAl8IgeFIglBFRANIQsgBSAKhSIFQREQDSEKIAUgB3wiBUEgEA0hByAFIAqFIgVBDRANIQogBSAGIAl8IgZ8IgVBIBANIAYgC4UiBkEQEA0gBiAHfCIGhSIHfCILIAdBFRANhSEJIAUgCoUiBUEREA0gBSAGfCIHhSEFIAggC4UhBiAHQSAQDSEHIAFBCGoiASADRw0ACyADIQELIAJCOIYhAgJAAkACQAJAAkACQAJAAkAgBEEBaw4HBgUEAwIBAAcLIAExAAZCMIYgAoQhAgsgATEABUIohiAChCECCyABMQAEQiCGIAKEIQILIAExAANCGIYgAoQhAgsgATEAAkIQhiAChCECCyABMQABQgiGIAKEIQILIAIgATEAAIQhAgsgBUENEA0hCCAFIAZ8IgVBIBANIQYgAiAJhSIJQRAQDSAHIAl8IgeFIglBFRANIQogBSAIhSIFQREQDSEIIAUgB3wiBUEgEA0hByAFIAiFIgVBDRANIQggBSAGIAl8IgZ8IgVBIBANIQkgBiAKhSIGQRAQDSAGIAd8IgaFIgdBFRANIQogBSAIhSIFQREQDSEIIAUgBnwiBUEgEA0hBiAFIAiFIgVBDRANIQggBSACIAcgCXwiBYV8IgJBIBANIQcgBSAKhSIFQRAQDSAGQv8BhSAFfCIFhSIGQRUQDSEJIAIgCIUiAkEREA0hCCACIAV8IgJBIBANIQUgAiAIhSICQQ0QDSEIIAIgBiAHfCIGfCICQSAQDSEHIAYgCYUiBkEQEA0gBSAGfCIFhSIGQRUQDSEJIAIgCIUiAkEREA0hCCACIAV8IgJBIBANIQUgAiAIhSICQQ0QDSEIIAIgBiAHfCIGfCICQSAQDSEHIAYgCYUiBkEQEA0gBSAGfCIFhSIGQRUQDSEJIAIgCIUiAkEREA0hCCACIAV8IgJBIBANIQUgAiAIhSICQQ0QDSEIIAAgCSAGIAd8IgaFIgdBEBANIAUgB3wiBYVBFRANIAggAiAGfIUiAiAFfCIFhSACQREQDYUgBUEgEA2FEBFBAAsEAEFuCwQAQRELBABBNAvFAwIEfwF+IwBB4AJrIggkACACBEAgAkIANwMACyADBEAgA0H/AToAAAtBfyEKAkACQCAFQhFUDQAgBUIRfSIMQu////8PWg0BIAhBIGpCwAAgAEEgaiIJIAAQNyAIQeAAaiAIQSBqECQgCEEgakHAABAJIAhB4ABqIAYgBxAMIAhB4ABqQYCXAiILQgAgB31CD4MQDCAIQSBqQQBBwAAQEBogCCAELQAAOgAgIAhBIGogCEEgakLAACAJQQEgABAwIAgtACAhBiAIIAQtAAA6ACAgCEHgAGogCEEgakLAABAMIAhB4ABqIARBAWoiBCAMEAwgCEHgAGogCyAFQgF9Qg+DEAwgCEEYaiAHEBEgCEHgAGogCEEYakIIEAwgCEEYaiAFQi98EBEgCEHgAGogCEEYakIIEAwgCEHgAGogCBAjIAhB4ABqQYACEAkgCCAEIAynakEQEEUEQCAIQRAQCQwBCyABIAQgDCAJQQIgABAwIABBJGogCBCLASAJEJIBAkAgBkECcUUEQCAJQQQQZUUNAQsgABBdCyACBEAgAiAMNwMAC0EAIQogA0UNACADIAY6AAALIAhB4AJqJAAgCg8LEBQAC/YCAQJ/IwBB0AJrIggkACACBEAgAkIANwMACyAEQu////8PVARAIAhBEGpCwAAgAEEgaiIJIAAQNyAIQdAAaiAIQRBqECQgCEEQakHAABAJIAhB0ABqIAUgBhAMIAhB0ABqQYCXAiIFQgAgBn1CD4MQDCAIQRBqQQBBwAAQEBogCCAHOgAQIAhBEGogCEEQakLAACAJQQEgABAwIAhB0ABqIAhBEGpCwAAQDCABIAgtABA6AAAgAUEBaiIBIAMgBCAJQQIgABAwIAhB0ABqIAEgBBAMIAhB0ABqIAUgBEIPgxAMIAhBCGogBhARIAhB0ABqIAhBCGpCCBAMIAhBCGogBEJAfRARIAhB0ABqIAhBCGpCCBAMIAhB0ABqIAEgBKdqIgEQIyAIQdAAakGAAhAJIABBJGogARCLASAJEJIBAkAgB0ECcUUEQCAJQQQQZUUNAQsgABBdCyACBEAgAiAEQhF8NwMACyAIQdACaiQAQQAPCxAUAAsnAQF+IAAgASACEEogABBfIAEpABAhAyAAQgA3ACwgACADNwAkQQALLQEBfiABQRgQHyAAIAEgAhBKIAAQXyABKQAQIQMgAEIANwAsIAAgAzcAJEEAC0EAIABB4ZYCQQoQIkUEQCAAIAEgAkECEI0BDwsgAEHslgJBCRAiRQRAIAAgASACQQEQjQEPC0GAmAJBHDYCAEF/Cz0AIABB4ZYCQQoQIkUEQCAAIAEgAhCfAg8LIABB7JYCQQkQIkUEQCAAIAEgAhCiAg8LQYCYAkEcNgIAQX8LMwACQAJAAkAgBUEBaw4CAgABCyAAIAEgAiADIAQQjAEPCxAUAAsgACABIAIgAyAEEKMCC0QAAkACQAJAIAdBAWsOAgABAgsgACABIAIgAyAEIAUgBhCkAg8LIAAgASACIAMgBCAFIAYQoQIPC0GAmAJBHDYCAEF/CwgAQYCAgIAECwQAQQQLCABBgICAgAELogEBBn8jAEEQayIFQQA2AgxBfyEEIAIgA0EBa0sEfyABIAJBAWsiBmohB0EAIQJBACEBQQAhBANAIAUgBSgCDCACQQAgByACay0AACIIQYABc0EBayAFKAIMQQFrIARBAWtxcUEIdkEBcSIJa3FyNgIMIAEgCXIhASAEIAhyIQQgAkEBaiICIANHDQALIAAgBiAFKAIMazYCACABQQFrBSAECwsHAEGAgIAgCwgAQYCAgIB4CwYAQYDAAAsGAEHhlgILBQBBgAELRgACQAJAIAJCgICAgBBaBEBBgJgCQRY2AgAMAQsgACABIAKnQQIQjgEiAEUNASAAQV1HDQBBgJgCQRw2AgALQX8hAAsgAAveAQEEfyMAQRBrIgUkAAJAAkAgA0UEQEF/IQcMAQsCfyADIANBAWsiBnFFBEAgAiAGcQwBCyACIANwCyEIQX8hByAGIAhrIgYgAkF/c08NASACIAZqIgIgBE8NACAABEAgACACQQFqNgIACyABIAJqIQBBACEHIAVBADoADyADQQEgA0EBSxshAUEAIQMDQCAAIANrIgIgAi0AACAFLQAPcSADIAZzQQFrQRh2IgJBgAFxcjoAACAFIAUtAA8gAnI6AA8gA0EBaiIDIAFHDQALCyAFQRBqJAAgBw8LEBQAC5EBAQJ/IABBACABpyIIEBAhB0EWIQACQCABQv////8PVg0AAkAgAUIQVA0AIAZBgICAgHhLIAMgBYRC/////w9Wcg0BIAVQIAZBgMAASXINAEEcIQAgAiAHRg0BQX9BACAFpyAGQQp2QQEgAiADpyAEQRAgByAIQQBBAEECEDMbDwtBHCEAC0GAmAIgADYCAEF/C0YAAkACQCACQoCAgIAQWgRAQYCYAkEWNgIADAELIAAgASACp0EBEI4BIgBFDQEgAEFdRw0AQYCYAkEcNgIAC0F/IQALIAALmQEBAX8jAEEQayIFJAAgAEEAQYABEBAhAAJ/IAIgA4RC/////w9YQQAgBEGBgICAeEkbRQRAQYCYAkEWNgIAQX8MAQsgA0IDWkEAIARB/z9LG0UEQEGAmAJBHDYCAEF/DAELIAVBEBAfQX9BACADpyAEQQp2QQEgASACpyAFQRBBAEEgIABBgAFBARAzGwshACAFQRBqJAAgAAuTAQECfyAAQQAgAaciCBAQIQdBFiEAAkAgAUL/////D1YNAAJAIAFCEFQNACAGQYCAgIB4SyADIAWEQv////8PVnINASAGQYDAAEkgBUIDVHINAEEcIQAgAiAHRg0BQX9BACAFpyAGQQp2QQEgAiADpyAEQRAgByAIQQBBAEEBEDMbDwtBHCEAC0GAmAIgADYCAEF/C94BAQV/IwBBMGsiAiQAAkAgABBUIgMNAEFmIQMgAUEBa0EBSw0AIAAoAiwhBCAAKAIwIQMgAkEANgIAIAAoAighBiACIAM2AhwgAkF/NgIMIAIgBjYCCCACIANBA3QiBiAEIAQgBkkbIANBAnQiBG4iAzYCFCACIANBAnQ2AhggAiADIARsNgIQIAAoAjQhAyACIAE2AiQgAiADNgIgIAIgABC9ASIDDQAgAigCCARAA0AgAiAFEL4BIAVBAWoiBSACKAIISQ0ACwsgACACEMEBQQAhAwsgAkEwaiQAIAMLowQBA38jAEEQayIEJABBYSEFAkACQAJ/AkACQCADQQFrDgIBAAQLIAFBDUkNAiAAQciWAiIDKQAANwAAIAAgAykABTcABUEMIQZBdAwBCyABQQxJDQEgAEHVlgIiAykAADcAACAAIAMoAAg2AAhBCyEGQXULIQMgAhBUIgUNASAEQQVqQRMQQSABIANqIgMgBEEFahAhIgFNDQAgACAGaiAEQQVqIAFBAWoQEiEAIAMgAWsiA0EESQ0AIAAgAWoiAUGk2vUBNgAAIARBBWogAigCLBBBIANBA2siAyAEQQVqECEiAE0NACABQQNqIARBBWogAEEBahASIQEgAyAAayIDQQRJDQAgACABaiIBQazo9QE2AAAgBEEFaiACKAIoEEEgA0EDayIDIARBBWoQISIATQ0AIAFBA2ogBEEFaiAAQQFqEBIhASADIABrIgNBBEkNACAAIAFqIgFBrOD1ATYAACAEQQVqIAIoAjAQQSADQQNrIgMgBEEFahAhIgBNDQAgAUEDaiAEQQVqIABBAWoQEiEBIAMgAGsiA0ECSQ0AIAAgAWoiAEEkOwAAIABBAWoiACADQQFrIgEgAigCECACKAIUQQMQY0UNAEFhIQUgASAAECEiAWsiA0ECSQ0BIAAgAWoiAEEkOwAAIABBAWogA0EBayACKAIAIAIoAgRBAxBjIQAgBEEQaiQAQQBBYSAAGw8LQWEhBQsgBEEQaiQAIAULOgEBfwJAQR4QAyIAQQFOBEBBwJcCIAA2AgAMAQtBwJcCKAIAIQALIABBD00EQBAUAAtBsJwCQRAQHwt3AQN/AkAgBEUNACACKAIAIQUDQAJAAkAgASAFTQRAQYCYAkHEADYCAAwBCyAAIAVqLAAAIgZBPUYEQCAEQQFrIQQMAgsgAwRAIAMgBhBDDQILQYCYAkEcNgIAC0F/IQcMAgsgAiAFQQFqIgU2AgAgBA0ACwsgBwu4AQEBf0EAIABBBGogAEHQ/wNqQQh2QX9zcUE5IABrQQh2QX9zcUH/AXEgAEHBAGsiASABQQh2QX9zcUHaACAAa0EIdkF/c3FB/wFxIABBuQFqIABBn/8DakEIdkF/c3FB+gAgAGtBCHZBf3NxQf8BcSAAQdD/AHNBAWpBCHZBf3NBP3EgAEHU/wBzQQFqQQh2QX9zQT5xcnJyciIBa0EIdkF/cyAAQb7/A3NBAWpBCHZxQf8BcSABcgu4AQEBf0EAIABBBGogAEHQ/wNqQQh2QX9zcUE5IABrQQh2QX9zcUH/AXEgAEHBAGsiASABQQh2QX9zcUHaACAAa0EIdkF/c3FB/wFxIABBuQFqIABBn/8DakEIdkF/c3FB+gAgAGtBCHZBf3NxQf8BcSAAQaD/AHNBAWpBCHZBf3NBP3EgAEHS/wBzQQFqQQh2QX9zQT5xcnJyciIBa0EIdkF/cyAAQb7/A3NBAWpBCHZxQf8BcSABcgs+AQF/IAEQZCAAQQNuIgJBAnRBAXIgAkF9bCAAaiIAQQF2IAByQQFxQQRBAyAAa0EAIAFBAXZBAXFrcWtsagv0AgELfwJAIANFDQACQAJAA0AgByEIA0ACQCACIAhqLQAAIg1B3wFxQTdrQf8BcSIOQfb/A2ogDkHw/wNqc0EIdiIPIA1BMHMiEEH2/wNqQQh2IgpyQf8BcUUEQEEBIQogBEUgC0H/AXFyDQQgBCANEEMNASAIIQcMBgsgASAJTQRAQYCYAkHEADYCAEEAIQoMBAsgDiAPcSAKIBBxciEHAkAgC0H/AXFFBEAgB0EEdCERDAELIAAgCWogByARcjoAACAJQQFqIQkLIAtBf3MhC0EBIQogCEEBaiIHIANJDQIMBAtBACELIAhBAWoiCCADSQ0ACwsgAyAHQQFqIgAgACADSRshBwwCCyAIIQcLIAtB/wFxBEBBgJgCQRw2AgBBfyEMIAdBAWshB0EAIQkMAQsgCg0AQQAhCUF/IQwLAkAgBgRAIAYgAiAHajYCAAwBCyADIAdGDQBBgJgCQRw2AgBBfyEMCyAFBEAgBSAJNgIACyAMC6EBAQN/IANB/v///wdLIANBAXQgAU9yRQRAQQAhASADBH8DQCAAIAFBAXQiBGogASACai0AACIFQQR2IgYgBkH2/wNqQQh2QdkBcWpB1wBqOgAAIAAgBEEBcmogBUEPcSIEQQh0IARB9v8DakGAsgNxakGArgFqQQh2OgAAIAFBAWoiASADRw0ACyADQQF0BSABCyAAakEAOgAAIAAPCxAUAAvZAQECfwJAIAFB/wFxIgMEQCAAQQNxBEADQCAALQAAIgJFIAIgAUH/AXFGcg0DIABBAWoiAEEDcQ0ACwsCQCAAKAIAIgJBf3MgAkGBgoQIa3FBgIGChHhxDQAgA0GBgoQIbCEDA0AgAiADcyICQX9zIAJBgYKECGtxQYCBgoR4cQ0BIAAoAgQhAiAAQQRqIQAgAkGBgoQIayACQX9zcUGAgYKEeHFFDQALCwNAIAAiAi0AACIDBEAgAkEBaiEAIAMgAUH/AXFHDQELCyACDwsgABAhIABqDwsgAAvuAQEDfyMAIgUhByAFQYAEa0FAcSIFJAAgACABIAAbIgYEQEF/IQAgBUHgAGogAyAEEGZFBEAgASAGIAEbIQFBACEAIAVBgAFqQQBBAEHAABBGGiAFQYABaiAFQeAAakIgECUaIAVB4ABqQSAQCSAFQYABaiAEQiAQJRogBUGAAWogAkIgECUaIAVBgAFqIAVBIGpBwAAQRBogBUGAAWpBgAMQCQNAIAAgAWogBUEgaiAAaiICLQAAOgAAIAAgBmogAi0AIDoAACAAQQFqIgBBIEcNAAsgBUEgakHAABAJQQAhAAsgByQAIAAPCxAUAAvuAQEDfyMAIgUhByAFQYAEa0FAcSIFJAAgACABIAAbIgYEQEF/IQAgBUHgAGogAyAEEGZFBEAgASAGIAEbIQFBACEAIAVBgAFqQQBBAEHAABBGGiAFQYABaiAFQeAAakIgECUaIAVB4ABqQSAQCSAFQYABaiACQiAQJRogBUGAAWogBEIgECUaIAVBgAFqIAVBIGpBwAAQRBogBUGAAWpBgAMQCQNAIAAgBmogBUEgaiAAaiICLQAAOgAAIAAgAWogAi0AIDoAACAAQQFqIgBBIEcNAAsgBUEgakHAABAJQQAhAAsgByQAIAAPCxAUAAsOACABQSAQHyAAIAEQZwsYACABQSAgAkIgQQBBABCUARogACABEGcLgQECAn8BfiMAQSBrIgUkACADKQAAIQcgBUIANwMYIAUgBzcDECAFIAIQESAFQgA3AwgCfyABQRBrQTFPBEBBgJgCQRw2AgBBfwwBCyAFIQMgBUEQaiEGIAFBAWtBP0sEf0F/BSAAIAQgAUH/AXEgAyAGEMYBCwshACAFQSBqJAAgAAsEAEEwC0IBAn8jAEEgayIFJABBfyEGIAJCMFoEQCAFIAEgAxCTASAAIAFBIGogAkIgfSAFIAEgBBCVASEGCyAFQSBqJAAgBguQAQECfyMAQeAAayIEJABBfyEFIARBIGogBBCZAUUEQCAEQUBrIARBIGogAxCTASAAQSBqIAEgAiAEQUBrIAMgBBCXASEFIAAgBCkDODcAGCAAIAQpAzA3ABAgACAEKQMoNwAIIAAgBCkDIDcAACAEQSAQCSAEQSBqQSAQCSAEQUBrQRgQCQsgBEHgAGokACAFCwUAQYADCycBAX9BfyEFIAJCEFoEfyAAIAFBEGogASACQhB9IAMgBBBoBSAFCwsiACACQvD///8PWgRAEBQACyAAQRBqIAAgASACIAMgBBBpCycBAX9BfyEFIAJCEFoEfyAAIAFBEGogASACQhB9IAMgBBBqBSAFCwslACACQvD///8PWgRAEBQACyAAQRBqIAAgASACIAMgBBBrGkEACwsAIAAgASACEL8CCy8AIAFCgICAgBBaBEBBACIAQYQOaiAAQZgOakHFASAAQbIOahAAAAsgACABpxAfCzMBAn8jAEEgayIDJABBfyEEIAMgAiABEKgBRQRAIABB4JUCIAMQbSEECyADQSBqJAAgBAtWAQF/IwBBQGoiAyQAIAMgAkIgEDQaIAEgAykDGDcAGCABIAMpAxA3ABAgASADKQMINwAIIAEgAykDADcAACADQcAAEAkgACABEHIhACADQUBrJAAgAAtAAQF/IwBBIGsiBCQAIAQgASACIAMQmgEaIAAgBBCAASEBIAQgAEEgEEUhAyAEQSBqJAAgA0F/IAEgACAERhtyC0MBAX8jAEFAaiICJAAgACACEMICIAEgAikDGDcAGCABIAIpAxA3ABAgASACKQMINwAIIAEgAikDADcAACACQUBrJAALNwEBfyMAQUBqIgIkACAAIAIQJyAAQdABaiIAIAJCwAAQHBogACABECcgAkHAABAJIAJBQGskAAvhAQEDfyMAQcABayICJAAgABA1IAJBQGtBNkGAARAQGiACIAEtAABBNnM6AEBBASEDA0AgAkFAayADaiIEIAQtAAAgASADai0AAHM6AAAgA0EBaiIDQSBHDQALIAAgAkFAa0KAARAcGiAAQdABaiIAEDUgAkFAa0HcAEGAARAQGiACIAEtAABB3ABzOgBAQQEhAwNAIAJBQGsgA2oiBCAELQAAIAEgA2otAABzOgAAIANBAWoiA0EgRw0ACyAAIAJBQGtCgAEQHBogAkFAa0GAARAJIAJBwAAQCSACQcABaiQAC2YBAX4gACkAACIBQjiGIAFCKIZCgICAgICAwP8Ag4QgAUIYhkKAgICAgOA/gyABQgiGQoCAgIDwH4OEhCABQgiIQoCAgPgPgyABQhiIQoCA/AeDhCABQiiIQoD+A4MgAUI4iISEhAsmAQJ/AkBBpJwCKAIAIgBFDQAgACgCFCIARQ0AIAARAQAhAQsgAQtkACAAIAFCKIZCgICAgICAwP8AgyABQjiGhCABQhiGQoCAgICA4D+DIAFCCIZCgICAgPAfg4SEIAFCCIhCgICA+A+DIAFCGIhCgID8B4OEIAFCKIhCgP4D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BiADakENEAggDXMiDSAGakESEAggBXMhBSAaQRJJIRAgGkECaiEaIBANAAsgACACQeXwwYsGahAKIABBBGogByASahAKIABBCGogCCATahAKIABBDGogESAUahAKIABBEGogCSAVahAKIABBFGogDkHuyIGZA2oQCiAAQRhqIAogG2oQCiAAQRxqIAsgHGoQCiAAQSBqIAwgHWoQCiAAQSRqIA8gHmoQCiAAQShqIAFBstqIywdqEAogAEEsaiAEIBZqEAogAEEwaiADIBdqEAogAEE0aiAGIBhqEAogAEE4aiANIBlqEAogAEE8aiAFQfTKgdkGahAKCzoBAX8jAEHgAGsiAyQAIANBMGogAiABEBMgAyACIAEQFiADIAMQOiAAIANBMGogAxALIANB4ABqJAALdgECfyMAQdABayICJAADQCAAIANqIAEgA2otAAA6AAAgA0EBaiIDQSBHDQALIAAgAC0AAEH4AXE6AAAgACAALQAfQT9xQcAAcjoAHyACQTBqIAAQdiACIAJB2ABqIAJBgAFqENwCIAAgAhAtIAJB0AFqJABBAAu9AwEMfiABNAIEIQIgATQCCCEDIAE0AgwhBCABNAIQIQUgATQCFCEGIAE0AhghByABNAIAIQsgACABNAIkQsK2B34iCCAIQoCAgAh8IghCgICA8A+DfSABNAIgQsK2B34gATQCHELCtgd+IglCgICACHwiCkIZh3wiDEKAgIAQfCINQhqIfD4CJCAAIAwgDUKAgIDgD4N9PgIgIAAgCSAKQoCAgPAPg30gB0LCtgd+IAZCwrYHfiIGQoCAgAh8IgdCGYd8IglCgICAEHwiCkIaiHw+AhwgACAJIApCgICA4A+DfT4CGCAAIAYgB0KAgIDwD4N9IAVCwrYHfiAEQsK2B34iBEKAgIAIfCIFQhmHfCIGQoCAgBB8IgdCGoh8PgIUIAAgBiAHQoCAgOAPg30+AhAgACAEIAVCgICA8A+DfSADQsK2B34gAkLCtgd+IgJCgICACHwiA0IZh3wiBEKAgIAQfCIFQhqIfD4CDCAAIAQgBUKAgIDgD4N9PgIIIAAgAiADQoCAgPAPg30gCEIZh0ITfiALQsK2B358IgJCgICAEHwiA0IaiHw+AgQgACACIANCgICA4A+DfT4CAAvcAQEFfyMAQRBrIgNBADYACyADQQA2AggDQCAAIAJqLQAAIQRBACEBA0AgA0EIaiABaiIFIAUtAAAgAUEFdEGgjQJqIAJqLQAAIARzcjoAACABQQFqIgFBB0cNAAsgAkEBaiICQR9HDQALIAAtAB9B/wBxIQJBACEAQQAhAQNAIANBCGogAWoiBCAELQAAIAIgAUEFdEG/jQJqLQAAc3I6AAAgAUEBaiIBQQdHDQALQQAhAQNAIANBCGogAGotAABBAWsgAXIhASAAQQFqIgBBB0cNAAsgAUEIdkEBcQvcBAEDfyMAQdACayIDJABBfyEEIAIQ3wJFBEBBACEEA0AgACAEaiABIARqLQAAOgAAIARBAWoiBEEgRw0ACyAAIAAtAABB+AFxOgAAIAAgAC0AH0E/cUHAAHI6AB8gA0GgAmogAhB7IANB8AFqEB0gA0HAAWoQOCADQZABaiADQaACahAsIANB4ABqEB1B/gEhAkEAIQQDQCADQfABaiADQZABaiAAIAIiBUEDdmotAAAgAkEHcXZBAXEiASAEcyIEEE4gA0HAAWogA0HgAGogBBBOIAJBAWshAiADQTBqIANBkAFqIANB4ABqEBYgAyADQfABaiADQcABahAWIANB8AFqIANB8AFqIANBwAFqEBMgA0HAAWogA0GQAWogA0HgAGoQEyADQeAAaiADQTBqIANB8AFqEAsgA0HAAWogA0HAAWogAxALIANBMGogAxAOIAMgA0HwAWoQDiADQZABaiADQeAAaiADQcABahATIANBwAFqIANB4ABqIANBwAFqEBYgA0HwAWogAyADQTBqEAsgAyADIANBMGoQFiADQcABaiADQcABahAOIANB4ABqIAMQ3gIgA0GQAWogA0GQAWoQDiADQTBqIANBMGogA0HgAGoQEyADQeAAaiADQaACaiADQcABahALIANBwAFqIAMgA0EwahALIAEhBCAFDQALIANB8AFqIANBkAFqIAEQTiADQcABaiADQeAAaiABEE4gA0HAAWogA0HAAWoQOiADQfABaiADQfABaiADQcABahALIAAgA0HwAWoQLUEAIQQLIANB0AJqJAAgBAtUAQV/QSAhAUEBIQIDQCAAIAFBAWsiAWotAAAiBCABQYAbai0AACIFa0EIdSACcSADQf8BcXIhAyAEIAVzQf//A2pBCHYgAnEhAiABDQALIANBAEcL6B4BOn4gARAPIRIg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CiAAIAtC////AIMgBEIVh3wiBkIKiDwAESAAIAZCAog8ABAgACAEQv///wCDIgdCAYYgBUIUiIQ8AA0gACAMQv///wCDIAZCFYd8IgRCDYg8ABQgACAEQgWIPAATIAAgBkL///8AgyIFQgaGIAdCD4iEPAAPIAAgDkL///8AgyAEQhWHfCIGPAAVIAAgBEIDhiAFQhKIhDwAEiAAIAZCCIg8ABYgACAPQv///wCDIAZCFYd8IgRCC4g8ABkgACAEQgOIPAAYIAAgEEL///8AgyAEQhWHfCIFQgaIPAAbIAAgBkIQiEIfgyAEQv///wCDIgRCBYaEPAAXIAAgDUL///8AgyAFQhWHfCIGQhGIPAAfIAAgBkIJiDwAHiAAIAZCAYg8AB0gACAFQv///wCDIgVCAoYgBEITiIQ8ABogACAGQgeGIAVCDoiEPAAcC1IBA38gAC0AH0F/c0H/AHEhAUEeIQIDQCABIAAgAmotAABBf3NyIQEgAkEBayIDIQIgAw0ACyABQf8BcUEBa0HsASAALQAAa3FBCHZBf3NBAXELjAQBAn8jAEHgDWsiAiQAIAJB4ANqIAEQGyACQcACaiABEE8gAiACQcACahAVIAJBwAJqIAIgAkHgA2oQGiACQaABaiACQcACahAVIAJBgAVqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBoAZqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBwAdqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJB4AhqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBgApqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBoAtqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBwAxqIAJBoAFqEBsgABCrAUH8ASEBA0AgAkHAAmogABBPAkAgASIDQaCLAmosAAAiAUEBTgRAIAJBoAFqIAJBwAJqEBUgAkHAAmogAkGgAWogAkHgA2ogAUH+AXFBAXZBoAFsahAaDAELIAFBf0oNACACQaABaiACQcACahAVIAJBwAJqIAJBoAFqIAJB4ANqQQAgAWtB/gFx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/////////3/t////////////////////////////////////////f+7///////////////////////////////////////9/7dP1XBpjEljWnPei3vneFABBnxsL/PABEIU7jAG98ST/+CXDAWDcNwC3TD7/w0I9ADJMpAHhpEz/TD2j/3U+HwBRkUD/dkEOAKJz1v8Gii4AfOb0/wqKjwA0GsIAuPRMAIGPKQG+9BP/e6p6/2KBRAB51ZMAVmUe/6FnmwCMWUP/7+W+AUMLtQDG8In+7kW8/+pxPP8l/zn/RbK2/oDQswB2Gn3+AwfW//EyTf9Vy8X/04f6/xkwZP+71bT+EVhpAFPRngEFc2IABK48/qs3bv/ZtRH/FLyqAJKcZv5X1q7/cnqbAeksqgB/CO8B1uzqAK8F2wAxaj3/BkLQ/wJqbv9R6hP/12vA/0OX7gATKmz/5VVxATJEh/8RagkAMmcB/1ABqAEjmB7/EKi5AThZ6P9l0vwAKfpHAMyqT/8OLu//UE3vAL3WS/8RjfkAJlBM/75VdQBW5KoAnNjQAcPPpP+WQkz/r+EQ/41QYgFM2/IAxqJyAC7amACbK/H+m6Bo/7IJ/P5kbtQADgWnAOnvo/8cl50BZZIK//6eRv5H+eQAWB4yAEQ6oP+/GGgBgUKB/8AyVf8Is4r/JvrJAHNQoACD5nEAfViTAFpExwD9TJ4AHP92AHH6/gBCSy4A5torAOV4ugGURCsAiHzuAbtrxf9UNfb/M3T+/zO7pQACEa8AQlSgAfc6HgAjQTX+Rey/AC2G9QGje90AIG4U/zQXpQC61kcA6bBgAPLvNgE5WYoAUwBU/4igZABcjnj+aHy+ALWxPv/6KVUAmIIqAWD89gCXlz/+74U+ACA4nAAtp73/joWzAYNW0wC7s5b++qoO/0RxFf/eujv/QgfxAUUGSABWnGz+N6dZAG002/4NsBf/xCxq/++VR/+kjH3/n60BADMp5wCRPiEAim9dAblTRQCQcy4AYZcQ/xjkGgAx2eIAcUvq/sGZDP+2MGD/Dg0aAIDD+f5FwTsAhCVR/n1qPADW8KkBpONCANKjTgAlNJcAY00aAO6c1f/VwNEBSS5UABRBKQE2zk8AyYOS/qpvGP+xITL+qybL/073dADR3ZkAhYCyATosGQDJJzsBvRP8ADHl0gF1u3UAtbO4AQBy2wAwXpMA9Sk4AH0NzP70rXcALN0g/lTqFAD5oMYB7H7q/48+3QCBWdb/N4sF/kQUv/8OzLIBI8PZAC8zzgEm9qUAzhsG/p5XJADZNJL/fXvX/1U8H/+rDQcA2vVY/vwjPAA31qD/hWU4AOAgE/6TQOoAGpGiAXJ2fQD4/PoAZV7E/8aN4v4zKrYAhwwJ/m2s0v/F7MIB8UGaADCcL/+ZQzf/2qUi/kq0swDaQkcBWHpjANS12/9cKuf/7wCaAPVNt/9eUaoBEtXYAKtdRwA0XvgAEpeh/sXRQv+u9A/+ojC3ADE98P62XcMAx+QGAcgFEf+JLe3/bJQEAFpP7f8nP03/NVLPAY4Wdv9l6BIBXBpDAAXIWP8hqIr/leFIAALRG/8s9agB3O0R/x7Taf6N7t0AgFD1/m/+DgDeX74B3wnxAJJM1P9szWj/P3WZAJBFMAAj5G8AwCHB/3DWvv5zmJcAF2ZYADNK+ADix4/+zKJl/9BhvQH1aBIA5vYe/xeURQBuWDT+4rVZ/9AvWv5yoVD/IXT4ALOYV/9FkLEBWO4a/zogcQEBTUUAO3k0/5juUwA0CMEA5yfp/8ciigDeRK0AWzny/tzSf//AB/b+lyO7AMPspQBvXc4A1PeFAZqF0f+b5woAQE4mAHr5ZAEeE2H/Plv5AfiFTQDFP6j+dApSALjscf7Uy8L/PWT8/iQFyv93W5n/gU8dAGdnq/7t12//2DVFAO/wFwDCld3/JuHeAOj/tP52UoX/OdGxAYvohQCesC7+wnMuAFj35QEcZ78A3d6v/pXrLACX5Bn+2mlnAI5V0gCVgb7/1UFe/nWG4P9SxnUAnd3cAKNlJADFciUAaKym/gu2AABRSLz/YbwQ/0UGCgDHk5H/CAlzAUHWr//ZrdEAUH+mAPflBP6nt3z/WhzM/q878P8LKfgBbCgz/5Cxw/6W+n4AiltBAXg83v/1we8AHda9/4ACGQBQmqIATdxrAerNSv82pmf/dEgJAOReL/8eyBn/I9ZZ/z2wjP9T4qP/S4KsAIAmEQBfiZj/13yfAU9dAACUUp3+w4L7/yjKTP/7fuAAnWM+/s8H4f9gRMMAjLqd/4MT5/8qgP4ANNs9/mbLSACNBwv/uqTVAB96dwCF8pEA0Pzo/1vVtv+PBPr++ddKAKUebwGrCd8A5XsiAVyCGv9Nmy0Bw4sc/zvgTgCIEfcAbHkgAE/6vf9g4/z+JvE+AD6uff+bb13/CubOAWHFKP8AMTn+QfoNABL7lv/cbdL/Ba6m/iyBvQDrI5P/JfeN/0iNBP9na/8A91oEADUsKgACHvAABDs/AFhOJABxp7QAvkfB/8eepP86CKwATSEMAEE/AwCZTSH/rP5mAeTdBP9XHv4BkilW/4rM7/5sjRH/u/KHANLQfwBELQ7+SWA+AFE8GP+qBiT/A/kaACPVbQAWgTb/FSPh/+o9OP862QYAj3xYAOx+QgDRJrf/Iu4G/66RZgBfFtMAxA+Z/i5U6P91IpIB5/pK/xuGZAFcu8P/qsZwAHgcKgDRRkMAHVEfAB2oZAGpraAAayN1AD5gO/9RDEUBh+++/9z8EgCj3Dr/iYm8/1NmbQBgBkwA6t7S/7muzQE8ntX/DfHWAKyBjABdaPIAwJz7ACt1HgDhUZ4Af+jaAOIcywDpG5f/dSsF//IOL/8hFAYAifss/hsf9f+31n3+KHmVALqe1f9ZCOMARVgA/suH4QDJrssAk0e4ABJ5Kf5eBU4A4Nbw/iQFtAD7h+cBo4rUANL5dP5YgbsAEwgx/j4OkP+fTNMA1jNSAG115P5n38v/S/wPAZpH3P8XDVsBjahg/7W2hQD6MzcA6urU/q8/ngAn8DQBnr0k/9UoVQEgtPf/E2YaAVQYYf9FFd4AlIt6/9zV6wHoy/8AeTmTAOMHmgA1FpMBSAHhAFKGMP5TPJ3/kUipACJn7wDG6S8AdBME/7hqCf+3gVMAJLDmASJnSADbooYA9SqeACCVYP6lLJAAyu9I/teWBQAqQiQBhNevAFauVv8axZz/MeiH/me2UgD9gLABmbJ6APX6CgDsGLIAiWqEACgdKQAyHpj/fGkmAOa/SwCPK6oALIMU/ywNF//t/5sBn21k/3C1GP9o3GwAN9ODAGMM1f+Yl5H/7gWfAGGbCAAhbFEAAQNnAD5tIv/6m7QAIEfD/yZGkQGfX/UAReVlAYgc8ABP4BkATm55//iofAC7gPcAApPr/k8LhABGOgwBtQij/0+Jhf8lqgv/jfNV/7Dn1//MlqT/79cn/y5XnP4Io1j/rCLoAEIsZv8bNin+7GNX/yl7qQE0cisAdYYoAJuGGgDnz1v+I4Qm/xNmff4k44X/dgNx/x0NfACYYEoBWJLO/6e/3P6iElj/tmQXAB91NABRLmoBDAIHAEVQyQHR9qwADDCNAeDTWAB04p8AemKCAEHs6gHh4gn/z+J7AVnWOwBwh1gBWvTL/zELJgGBbLoAWXAPAWUuzP9/zC3+T//d/zNJEv9/KmX/8RXKAKDjBwBpMuwATzTF/2jK0AG0DxAAZcVO/2JNywApufEBI8F8ACObF//PNcAAC32jAfmeuf8EgzAAFV1v/z155wFFyCT/uTC5/2/uFf8nMhn/Y9ej/1fUHv+kkwX/gAYjAWzfbv/CTLIASmW0APMvMACuGSv/Uq39ATZywP8oN1sA12yw/ws4BwDg6UwA0WLK/vIZfQAswV3+ywixAIewEwBwR9X/zjuwAQRDGgAOj9X+KjfQ/zxDeADBFaMAY6RzAAoUdgCc1N7+oAfZ/3L1TAF1O3sAsMJW/tUPsABOzs/+1YE7AOn7FgFgN5j/7P8P/8VZVP9dlYUArqBxAOpjqf+YdFgAkKRT/18dxv8iLw//Y3iG/wXswQD5937/k7seADLmdf9s2dv/o1Gm/0gZqf6beU//HJtZ/gd+EQCTQSEBL+r9ABozEgBpU8f/o8TmAHH4pADi/toAvdHL/6T33v7/I6UABLzzAX+zRwAl7f7/ZLrwAAU5R/5nSEn/9BJR/uXShP/uBrT/C+Wu/+PdwAERMRwAo9fE/gl2BP8z8EcAcYFt/0zw5wC8sX8AfUcsARqv8wBeqRn+G+YdAA+LdwGoqrr/rMVM//xLvACJfMQASBZg/y2X+QHckWQAQMCf/3jv4gCBspIAAMB9AOuK6gC3nZIAU8fA/7isSP9J4YAATQb6/7pBQwBo9s8AvCCK/9oY8gBDilH+7YF5/xTPlgEpxxD/BhSAAJ92BQC1EI//3CYPABdAk/5JGg0AV+Q5Acx8gAArGN8A22PHABZLFP8TG34AnT7XAG4d5gCzp/8BNvy+AN3Mtv6znkH/UZ0DAMLanwCq3wAA4Asg/ybFYgCopCUAF1gHAaS6bgBgJIYA6vLlAPp5EwDy/nD/Ay9eAQnvBv9Rhpn+1v2o/0N84AD1X0oAHB4s/gFt3P+yWVkA/CRMABjGLv9MTW8AhuqI/ydeHQC5SOr/RkSH/+dmB/5N54wApy86AZRhdv8QG+EBps6P/26y1v+0g6IAj43hAQ3aTv9ymSEBYmjMAK9ydQGnzksAysRTATpAQwCKL28BxPeA/4ng4P6ecM8AmmT/AYYlawDGgE//f9Gb/6P+uf48DvMAH9tw/h3ZQQDIDXT+ezzE/+A7uP7yWcQAexBL/pUQzgBF/jAB53Tf/9GgQQHIUGIAJcK4/pQ/IgCL8EH/2ZCE/zgmLf7HeNIAbLGm/6DeBADcfnf+pWug/1Lc+AHxr4gAkI0X/6mKVACgiU7/4nZQ/zQbhP8/YIv/mPonALybDwDoM5b+KA/o//DlCf+Jrxv/S0lhAdrUCwCHBaIBa7nVAAL5a/8o8kYA28gZABmdDQBDUlD/xPkX/5EUlQAySJIAXkyUARj7QQAfwBcAuNTJ/3vpogH3rUgAolfb/n6GWQCfCwz+pmkdAEkb5AFxeLf/QqNtAdSPC/+f56gB/4BaADkOOv5ZNAr//QijAQCR0v8KgVUBLrUbAGeIoP5+vNH/IiNvANfbGP/UC9b+ZQV2AOjFhf/fp23/7VBW/0aLXgCewb8Bmw8z/w++cwBOh8//+QobAbV96QBfrA3+qtWh/yfsiv9fXVf/voBfAH0PzgCmlp8A4w+e/86eeP8qjYAAZbJ4AZxtgwDaDiz+96jO/9RwHABwEeT/WhAlAcXebAD+z1P/CVrz//P0rAAaWHP/zXR6AL/mwQC0ZAsB2SVg/5pOnADr6h//zrKy/5XA+wC2+ocA9hZpAHzBbf8C0pX/qRGqAABgbv91CQgBMnso/8G9YwAi46AAMFBG/tMz7AAtevX+LK4IAK0l6f+eQasAekXX/1pQAv+DamD+43KHAM0xd/6wPkD/UjMR//EU8/+CDQj+gNnz/6IbAf5advEA9sb2/zcQdv/In50AoxEBAIxreQBVoXb/JgCVAJwv7gAJpqYBS2K1/zJKGQBCDy8Ai+GfAEwDjv8O7rgAC881/7fAugGrIK7/v0zdAfeq2wAZrDL+2QnpAMt+RP+3XDAAf6e3AUEx/gAQP38B/hWq/zvgf/4WMD//G06C/ijDHQD6hHD+I8uQAGipqADP/R7/aCgm/l7kWADOEID/1Dd6/98W6gDfxX8A/bW1AZFmdgDsmST/1NlI/xQmGP6KPj4AmIwEAObcY/8BFdT/lMnnAPR7Cf4Aq9IAMzol/wH/Dv/0t5H+APKmABZKhAB52CkAX8Ny/oUYl/+c4uf/9wVN//aUc/7hXFH/3lD2/qp7Wf9Kx40AHRQI/4qIRv9dS1wA3ZMx/jR+4gDlfBcALgm1AM1ANAGD/hwAl57UAINATgDOGasAAOaLAL/9bv5n96cAQCgoASql8f87S+T+fPO9/8Rcsv+CjFb/jVk4AZPGBf/L+J7+kKKNAAus4gCCKhX/AaeP/5AkJP8wWKT+qKrcAGJH1gBb0E8An0zJAaYq1v9F/wD/BoB9/74BjACSU9r/1+5IAXp/NQC9dKX/VAhC/9YD0P/VboUAw6gsAZ7nRQCiQMj+WzpoALY6u/755IgAy4ZM/mPd6QBL/tb+UEWaAECY+P7siMr/nWmZ/pWvFAAWIxP/fHnpALr6xv6E5YsAiVCu/6V9RACQypT+6+/4AIe4dgBlXhH/ekhG/kWCkgB/3vgBRX92/x5S1/68ShP/5afC/nUZQv9B6jj+1RacAJc7Xf4tHBv/un6k/yAG7wB/cmMB2zQC/2Ngpv4+vn7/bN6oAUvirgDm4scAPHXa//z4FAHWvMwAH8KG/ntFwP+prST+N2JbAN8qZv6JAWYAnVoZAO96QP/8BukABzYU/1J0rgCHJTb/D7p9AONwr/9ktOH/Ku30//St4v74EiEAq2OW/0rrMv91UiD+aqjtAM9t0AHkCboAhzyp/rNcjwD0qmj/6y18/0ZjugB1ibcA4B/XACgJZAAaEF8BRNlXAAiXFP8aZDr/sKXLATR2RgAHIP7+9P71/6eQwv99cRf/sHm1AIhU0QCKBh7/WTAcACGbDv8Z8JoAjc1tAUZzPv8UKGv+iprH/17f4v+dqyYAo7EZ/i12A/8O3hcB0b5R/3Z76AEN1WX/ezd7/hv2pQAyY0z/jNYg/2FBQ/8YDBwArlZOAUD3YACgh0MAQjfz/5PMYP8aBiH/YjNTAZnV0P8CuDb/GdoLADFD9v4SlUj/DRlIACpP1gAqBCYBG4uQ/5W7FwASpIQA9VS4/njGaP9+2mAAOHXq/w0d1v5ELwr/p5qE/pgmxgBCsln/yC6r/w1jU//Su/3/qi0qAYrRfADWoo0ADOacAGYkcP4Dk0MANNd7/+mrNv9iiT4A99on/+fa7AD3v38Aw5JUAKWwXP8T1F7/EUrjAFgomQHGkwH/zkP1/vAD2v89jdX/YbdqAMPo6/5fVpoA0TDN/nbR8f/weN8B1R2fAKN/k/8N2l0AVRhE/kYUUP+9BYwBUmH+/2Njv/+EVIX/a9p0/3B6LgBpESAAwqA//0TeJwHY/VwAsWnN/5XJwwAq4Qv/KKJzAAkHUQCl2tsAtBYA/h2S/P+Sz+EBtIdgAB+jcACxC9v/hQzB/itOMgBBcXkBO9kG/25eGAFwrG8ABw9gACRVewBHlhX/0Em8AMALpwHV9SIACeZcAKKOJ//XWhsAYmFZAF5P0wBanfAAX9x+AWaw4gAkHuD+Ix9/AOfocwFVU4IA0kn1/y+Pcv9EQcUAO0g+/7eFrf5deXb/O7FR/+pFrf/NgLEA3PQzABr00QFJ3k3/owhg/paV0wCe/ssBNn+LAKHgOwAEbRb/3iot/9CSZv/sjrsAMs31/wpKWf4wT44A3kyC/x6mPwDsDA3/Mbj0ALtxZgDaZf0AmTm2/iCWKgAZxpIB7fE4AIxEBQBbpKz/TpG6/kM0zQDbz4EBbXMRADaPOgEV+Hj/s/8eAMHsQv8B/wf//cAw/xNF2QED1gD/QGWSAd99I//rSbP/+afiAOGvCgFhojoAanCrAVSsBf+FjLL/hvWOAGFaff+6y7n/300X/8BcagAPxnP/2Zj4AKuyeP/khjUAsDbBAfr7NQDVCmQBIsdqAJcf9P6s4Ff/Du0X//1VGv9/J3T/rGhkAPsORv/U0Ir//dP6ALAxpQAPTHv/Jdqg/1yHEAEKfnL/RgXg//f5jQBEFDwB8dK9/8PZuwGXA3EAl1yuAOc+sv/bt+EAFxch/821UAA5uPj/Q7QB/1p7Xf8nAKL/YPg0/1RCjAAif+T/wooHAaZuvAAVEZsBmr7G/9ZQO/8SB48ASB3iAcfZ+QDooUcBlb7JANmvX/5xk0P/io/H/3/MAQAdtlMBzuab/7rMPAAKfVX/6GAZ//9Z9//V/q8B6MFRABwrnP4MRQgAkxj4ABLGMQCGPCMAdvYS/zFY/v7kFbr/tkFwAdsWAf8WfjT/vTUx/3AZjwAmfzf/4mWj/tCFPf+JRa4BvnaR/zxi2//ZDfX/+ogKAFT+4gDJH30B8DP7/x+Dgv8CijL/19exAd8M7v/8lTj/fFtE/0h+qv53/2QAgofo/w5PsgD6g8UAisbQAHnYi/53EiT/HcF6ABAqLf/V8OsB5r6p/8Yj5P5urUgA1t3x/ziUhwDAdU7+jV3P/49BlQAVEmL/Xyz0AWq/TQD+VQj+1m6w/0mtE/6gxMf/7VqQAMGscf/Im4j+5FrdAIkxSgGk3df/0b0F/2nsN/8qH4EBwf/sAC7ZPACKWLv/4lLs/1FFl/+OvhABDYYIAH96MP9RQJwAq/OLAO0j9gB6j8H+1HqSAF8p/wFXhE0ABNQfABEfTgAnLa3+GI7Z/18JBv/jUwYAYjuC/j4eIQAIc9MBomGA/we4F/50HKj/+IqX/2L08AC6doIAcvjr/2mtyAGgfEf/XiSkAa9Bkv/u8ar+ysbFAORHiv4t9m3/wjSeAIW7sABT/Jr+Wb3d/6pJ/ACUOn0AJEQz/ipFsf+oTFb/JmTM/yY1IwCvE2EA4e79/1FRhwDSG//+60lrAAjPcwBSf4gAVGMV/s8TiABkpGUAUNBN/4TP7f8PAw//IaZuAJxfVf8luW8Blmoj/6aXTAByV4f/n8JAAAx6H//oB2X+rXdiAJpH3P6/OTX/qOig/+AgY//anKUAl5mjANkNlAHFcVkAlRyh/s8XHgBphOP/NuZe/4WtzP9ct53/WJD8/mYhWgCfYQMAtdqb//BydwBq1jX/pb5zAZhb4f9Yaiz/0D1xAJc0fAC/G5z/bjbsAQ4epv8nf88B5cccALzkvP5knesA9tq3AWsWwf/OoF8ATO+TAM+hdQAzpgL/NHUK/kk44/+YweEAhF6I/2W/0QAga+X/xiu0AWTSdgByQ5n/F1ga/1maXAHceIz/kHLP//xz+v8izkgAioV//wiyfAFXS2EAD+Vc/vBDg/92e+P+knho/5HV/wGBu0b/23c2AAETrQAtlpQB+FNIAMvpqQGOazgA9/kmAS3yUP8e6WcAYFJGABfJbwBRJx7/obdO/8LqIf9E44z+2M50AEYb6/9okE8ApOZd/taHnACau/L+vBSD/yRtrgCfcPEABW6VASSl2gCmHRMBsi5JAF0rIP74ve0AZpuNAMldw//xi/3/D29i/2xBo/6bT77/Sa7B/vYoMP9rWAv+ymFV//3MEv9x8kIAbqDC/tASugBRFTwAvGin/3ymYf7ShY4AOPKJ/ilvggBvlzoBb9WN/7es8f8mBsT/uQd7/y4L9gD1aXcBDwKh/wjOLf8Sykr/U3xzAdSNnQBTCNH+iw/o/6w2rf4y94QA1r3VAJC4aQDf/vgA/5Pw/xe8SAAHMzYAvBm0/ty0AP9ToBQAo73z/zrRwv9XSTwAahgxAPX53AAWracAdgvD/xN+7QBunyX/O1IvALS7VgC8lNABZCWF/wdwwQCBvJz/VGqB/4XhygAO7G//KBRlAKysMf4zNkr/+7m4/12b4P+0+eAB5rKSAEg5Nv6yPrgAd81IALnv/f89D9oAxEM4/+ogqwEu2+QA0Gzq/xQ/6P+lNccBheQF/zTNawBK7oz/lpzb/u+ssv/7vd/+II7T/9oPigHxxFAAHCRi/hbqxwA97dz/9jklAI4Rjv+dPhoAK+5f/gPZBv/VGfABJ9yu/5rNMP4TDcD/9CI2/owQmwDwtQX+m8E8AKaABP8kkTj/lvDbAHgzkQBSmSoBjOySAGtc+AG9CgMAP4jyANMnGAATyqEBrRu6/9LM7/4p0aL/tv6f/6x0NADDZ97+zUU7ADUWKQHaMMIAUNLyANK8zwC7oaH+2BEBAIjhcQD6uD8A3x5i/k2oogA7Na8AE8kK/4vgwgCTwZr/1L0M/gHIrv8yhXEBXrNaAK22hwBesXEAK1nX/4j8av97hlP+BfVC/1IxJwHcAuAAYYGxAE07WQA9HZsBy6vc/1xOiwCRIbX/qRiNATeWswCLPFD/2idhAAKTa/88+EgAreYvAQZTtv8QaaL+idRR/7S4hgEn3qT/3Wn7Ae9wfQA/B2EAP2jj/5Q6DABaPOD/VNT8AE/XqAD43ccBc3kBACSseAAgorv/OWsx/5MqFQBqxisBOUpXAH7LUf+Bh8MAjB+xAN2LwgAD3tcAg0TnALFWsv58l7QAuHwmAUajEQD5+7UBKjfjAOKhLAAX7G4AM5WOAV0F7ADat2r+QxhNACj10f/eeZkApTkeAFN9PABGJlIB5Qa8AG3enf83dj//zZe6AOMhlf/+sPYB47HjACJqo/6wK08Aal9OAbnxev+5Dj0AJAHKAA2yov/3C4QAoeZcAUEBuf/UMqUBjZJA/57y2gAVpH0A1Yt6AUNHVwDLnrIBl1wrAJhvBf8nA+//2f/6/7A/R/9K9U0B+q4S/yIx4//2Lvv/miMwAX2dPf9qJE7/YeyZAIi7eP9xhqv/E9XZ/the0f/8BT0AXgPKAAMat/9Avyv/HhcVAIGNTf9meAcBwkyMALyvNP8RUZQA6FY3AeEwrACGKir/7jIvAKkS/gAUk1f/DsPv/0X3FwDu5YD/sTFwAKhi+/95R/gA8wiR/vbjmf/bqbH++4ul/wyjuf+kKKv/mZ8b/vNtW//eGHABEtbnAGudtf7DkwD/wmNo/1mMvv+xQn7+arlCADHaHwD8rp4AvE/mAe4p4ADU6ggBiAu1AKZ1U/9Ew14ALoTJAPCYWACkOUX+oOAq/zvXQ/93w43/JLR5/s8vCP+u0t8AZcVE//9SjQH6iekAYVaFARBQRQCEg58AdF1kAC2NiwCYrJ3/WitbAEeZLgAnEHD/2Yhh/9zGGf6xNTEA3liG/4APPADPwKn/wHTR/2pO0wHI1bf/Bwx6/t7LPP8hbsf++2p1AOThBAF4Ogf/3cFU/nCFGwC9yMn/i4eWAOo3sP89MkEAmGyp/9xVAf9wh+MAohq6AM9guf70iGsAXZkyAcZhlwBuC1b/j3Wu/3PUyAAFyrcA7aQK/rnvPgDseBL+Yntj/6jJwv4u6tYAv4Ux/2OpdwC+uyMBcxUt//mDSABwBnv/1jG1/qbpIgBcxWb+/eTN/wM7yQEqYi4A2yUj/6nDJgBefMEBnCvfAF9Ihf54zr8AesXv/7G7T//+LgIB+qe+AFSBEwDLcab/+R+9/kidyv/QR0n/zxhIAAoQEgHSUUz/WNDA/37za//ujXj/x3nq/4kMO/8k3Hv/lLM8/vAMHQBCAGEBJB4m/3MBXf9gZ+f/xZ47AcCk8ADKyjn/GK4wAFlNmwEqTNcA9JfpABcwUQDvfzT+44Il//h0XQF8hHYArf7AAQbrU/9ur+cB+xy2AIH5Xf5UuIAATLU+AK+AugBkNYj+bR3iAN3pOgEUY0oAABagAIYNFQAJNDf/EVmMAK8iOwBUpXf/4OLq/wdIpv97c/8BEtb2APoHRwHZ3LkA1CNM/yZ9rwC9YdIAcu4s/ym8qf4tupoAUVwWAISgwQB50GL/DVEs/8ucUgBHOhX/0HK//jImkwCa2MMAZRkSADz61//phOv/Z6+OARAOXACNH27+7vEt/5nZ7wFhqC//+VUQARyvPv85/jYA3ud+AKYtdf4SvWD/5EwyAMj0XgDGmHgBRCJF/wxBoP5lE1oAp8V4/0Q2uf8p2rwAcagwAFhpvQEaUiD/uV2kAeTw7f9CtjUAq8Vc/2sJ6QHHeJD/TjEK/22qaf9aBB//HPRx/0o6CwA+3Pb/eZrI/pDSsv9+OYEBK/oO/2VvHAEvVvH/PUaW/zVJBf8eGp4A0RpWAIrtSgCkX7wAjjwd/qJ0+P+7r6AAlxIQANFvQf7Lhif/WGwx/4MaR//dG9f+aGld/x/sH/6HANP/j39uAdRJ5QDpQ6f+wwHQ/4QR3f8z2VoAQ+sy/9/SjwCzNYIB6WrGANmt3P9w5Rj/r5pd/kfL9v8wQoX/A4jm/xfdcf7rb9UAqnhf/vvdAgAtgp7+aV7Z//I0tP7VRC3/aCYcAPSeTAChyGD/zzUN/7tDlACqNvgAd6Ky/1MUCwAqKsABkp+j/7fobwBN5RX/RzWPABtMIgD2iC//2ye2/1zgyQETjg7/Rbbx/6N29QAJbWoBqrX3/04v7v9U0rD/1WuLACcmCwBIFZYASIJFAM1Nm/6OhRUAR2+s/uIqO/+zANcBIYDxAOr8DQG4TwgAbh5J//aNvQCqz9oBSppF/4r2Mf+bIGQAfUpp/1pVPf8j5bH/Pn3B/5lWvAFJeNQA0Xv2/ofRJv+XOiwBXEXW/w4MWP/8mab//c9w/zxOU//jfG4AtGD8/zV1If6k3FL/KQEb/yakpv+kY6n+PZBG/8CmEgBr+kIAxUEyAAGzEv//aAH/K5kj/1BvqABur6gAKWkt/9sOzf+k6Yz+KwF2AOlDwwCyUp//ild6/9TuWv+QI3z+GYykAPvXLP6FRmv/ZeNQ/lypNwDXKjEAcrRV/yHoGwGs1RkAPrB7/iCFGP/hvz4AXUaZALUqaAEWv+D/yMiM//nqJQCVOY0AwzjQ//6CRv8grfD/HdzHAG5kc/+E5fkA5Onf/yXY0f6ysdH/ty2l/uBhcgCJYaj/4d6sAKUNMQHS68z//AQc/kaglwDovjT+U/hd/z7XTQGvr7P/oDJCAHkw0AA/qdH/ANLIAOC7LAFJolIACbCP/xNMwf8dO6cBGCuaABy+vgCNvIEA6OvL/+oAbf82QZ8APFjo/3n9lv786YP/xm4pAVNNR//IFjv+av3y/xUMz//tQr0AWsbKAeGsfwA1FsoAOOaEAAFWtwBtvioA80SuAW3kmgDIsXoBI6C3/7EwVf9a2qn/+JhOAMr+bgAGNCsAjmJB/z+RFgBGal0A6IprAW6zPf/TgdoB8tFcACNa2QG2j2r/dGXZ/3L63f+tzAYAPJajAEmsLP/vblD/7UyZ/qGM+QCV6OUAhR8o/66kdwBxM9YAgeQC/kAi8wBr4/T/rmrI/1SZRgEyIxAA+krY/uy9Qv+Z+Q0A5rIE/90p7gB243n/XleM/v53XABJ7/b+dVeAABPTkf+xLvwA5Vv2AUWA9//KTTYBCAsJ/5lgpgDZ1q3/hsACAQDPAAC9rmsBjIZkAJ7B8wG2ZqsA65ozAI4Fe/88qFkB2Q5c/xPWBQHTp/4ALAbK/ngS7P8Pcbj/uN+LACixd/62e1r/sKWwAPdNwgAb6ngA5wDW/zsnHgB9Y5H/lkREAY3e+ACZe9L/bn+Y/+Uh1gGH3cUAiWECAAyPzP9RKbwAc0+C/14DhACYr7v/fI0K/37As/8LZ8YAlQYtANtVuwHmErL/SLaYAAPGuP+AcOABYaHmAP5jJv86n8UAl0LbADtFj/+5cPkAd4gv/3uChACoR1//cbAoAei5rQDPXXUBRJ1s/2YFk/4xYSEAWUFv/vceo/982d0BZvrYAMauS/45NxIA4wXsAeXVrQDJbdoBMenvAB43ngEZsmoAm2+8AV5+jADXH+4BTfAQANXyGQEmR6gAzbpd/jHTjP/bALT/hnalAKCThv9uuiP/xvMqAPOSdwCG66MBBPGH/8Euwf5ntE//4QS4/vJ2ggCSh7AB6m8eAEVC1f4pYHsAeV4q/7K/w/8ugioAdVQI/+kx1v7uem0ABkdZAezTewD0DTD+d5QOAHIcVv9L7Rn/keUQ/oFkNf+Glnj+qJ0yABdIaP/gMQ4A/3sW/5e5l/+qULgBhrYUAClkZQGZIRAATJpvAVbO6v/AoKT+pXtd/wHYpP5DEa//qQs7/54pPf9JvA7/wwaJ/xaTHf8UZwP/9oLj/3oogADiLxj+IyQgAJi6t/9FyhQAw4XDAN4z9wCpq14BtwCg/0DNEgGcUw//xTr5/vtZbv8yClj+MyvYAGLyxgH1l3EAq+zCAcUfx//lUSYBKTsUAP1o5gCYXQ7/9vKS/tap8P/wZmz+oKfsAJravACW6cr/GxP6AQJHhf+vDD8BkbfGAGh4c/+C+/cAEdSn/z57hP/3ZL0Am9+YAI/FIQCbOyz/ll3wAX8DV/9fR88Bp1UB/7yYdP8KFxcAicNdATZiYQDwAKj/lLx/AIZrlwBM/asAWoTAAJIWNgDgQjb+5rrl/ye2xACU+4L/QYNs/oABoACpMaf+x/6U//sGgwC7/oH/VVI+ALIXOv/+hAUApNUnAIb8kv4lNVH/m4ZSAM2n7v9eLbT/hCihAP5vcAE2S9kAs+bdAetev/8X8zABypHL/yd2Kv91jf0A/gDeACv7MgA2qeoBUETQAJTL8/6RB4cABv4AAPy5fwBiCIH/JiNI/9Mk3AEoGlkAqEDF/gPe7/8CU9f+tJ9pADpzwgC6dGr/5ffb/4F2wQDKrrcBpqFIAMlrk/7tiEoA6eZqAWlvqABA4B4BAeUDAGaXr//C7uT//vrUALvteQBD+2ABxR4LALdfzADNWYoAQN0lAf/fHv+yMNP/8cha/6fRYP85gt0ALnLI/z24QgA3thj+brYhAKu+6P9yXh8AEt0IAC/n/gD/cFMAdg/X/60ZKP7AwR//7hWS/6vBdv9l6jX+g9RwAFnAawEI0BsAtdkP/+eV6ACM7H4AkAnH/wxPtf6Ttsr/E222/zHU4QBKo8sAr+mUABpwMwDBwQn/D4f5AJbjggDMANsBGPLNAO7Qdf8W9HAAGuUiACVQvP8mLc7+8Frh/x0DL/8q4EwAuvOnACCED/8FM30Ai4cYAAbx2wCs5YX/9tYyAOcLz/+/flMBtKOq//U4GAGypNP/AxDKAWI5dv+Ng1n+ITMYAPOVW//9NA4AI6lD/jEeWP+zGyT/pYy3ADq9lwBYHwAAS6lCAEJlx/8Y2McBecQa/w5Py/7w4lH/XhwK/1PB8P/MwYP/Xg9WANoonQAzwdEAAPKxAGa59wCebXQAJodbAN+vlQDcQgH/VjzoABlgJf/heqIB17uo/56dLgA4q6IA6PBlAXoWCQAzCRX/NRnu/9ke6P59qZQADehmAJQJJQClYY0B5IMpAN4P8//+EhEABjztAWoDcQA7hL0AXHAeAGnQ1QAwVLP/u3nn/hvYbf+i3Wv+Se/D//ofOf+Vh1n/uRdzAQOjnf8ScPoAGTm7/6FgpAAvEPMADI37/kPquP8pEqEArwZg/6CsNP4YsLf/xsFVAXx5if+XMnL/3Ms8/8/vBQEAJmv/N+5e/kaYXgDV3E0BeBFF/1Wkvv/L6lEAJjEl/j2QfACJTjH+qPcwAF+k/ABpqYcA/eSGAECmSwBRSRT/z9IKAOpqlv9eIlr//p85/tyFYwCLk7T+GBe5ACk5Hv+9YUwAQbvf/+CsJf8iPl8B55DwAE1qfv5AmFsAHWKbAOL7Nf/q0wX/kMve/6Sw3f4F5xgAs3rNACQBhv99Rpf+YeT8AKyBF/4wWtH/luBSAVSGHgDxxC4AZ3Hq/y5lef4ofPr/hy3y/gn5qP+MbIP/j6OrADKtx/9Y3o7/yF+eAI7Ao/8HdYcAb3wWAOwMQf5EJkH/467+APT1JgDwMtD/oT/6ADzR7wB6IxMADiHm/gKfcQBqFH//5M1gAInSrv601JD/WWKaASJYiwCnonABQW7FAPElqQBCOIP/CslT/oX9u/+xcC3+xPsAAMT6l//u6Nb/ltHNABzwdgBHTFMB7GNbACr6gwFgEkD/dt4jAHHWy/96d7j/QhMkAMxA+QCSWYsAhj6HAWjpZQC8VBoAMfmBANDWS//Pgk3/c6/rAKsCif+vkboBN/WH/5pWtQFkOvb/bcc8/1LMhv/XMeYBjOXA/97B+/9RiA//s5Wi/xcnHf8HX0v+v1HeAPFRWv9rMcn/9NOdAN6Mlf9B2zj+vfZa/7I7nQEw2zQAYiLXABwRu/+vqRgAXE+h/+zIwgGTj+oA5eEHAcWoDgDrMzUB/XiuAMUGqP/KdasAoxXOAHJVWv8PKQr/whNjAEE32P6iknQAMs7U/0CSHf+enoMBZKWC/6wXgf99NQn/D8ESARoxC/+1rskBh8kO/2QTlQDbYk8AKmOP/mAAMP/F+VP+aJVP/+tuiP5SgCz/QSkk/ljTCgC7ebsAYobHAKu8s/7SC+7/QnuC/jTqPQAwcRf+BlZ4/3ey9QBXgckA8o3RAMpyVQCUFqEAZ8MwABkxq/+KQ4IAtkl6/pQYggDT5ZoAIJueAFRpPQCxwgn/pllWATZTuwD5KHX/bQPX/zWSLAE/L7MAwtgD/g5UiACIsQ3/SPO6/3URff/TOtP/XU/fAFpY9f+L0W//Rt4vAAr2T//G2bIA4+ELAU5+s/8+K34AZ5QjAIEIpf718JQAPTOOAFHQhgAPiXP/03fs/5/1+P8Choj/5os6AaCk/gByVY3/Maa2/5BGVAFVtgcALjVdAAmmof83orL/Lbi8AJIcLP6pWjEAeLLxAQ57f/8H8ccBvUIy/8aPZf6984f/jRgY/kthVwB2+5oB7TacAKuSz/+DxPb/iEBxAZfoOQDw2nMAMT0b/0CBSQH8qRv/KIQKAVrJwf/8efABus4pACvGYQCRZLcAzNhQ/qyWQQD55cT+aHtJ/01oYP6CtAgAaHs5ANzK5f9m+dMAVg7o/7ZO0QDv4aQAag0g/3hJEf+GQ+kAU/61ALfscAEwQIP/8djz/0HB4gDO8WT+ZIam/+3KxQA3DVEAIHxm/yjksQB2tR8B56CG/3e7ygAAjjz/gCa9/6bJlgDPeBoBNrisAAzyzP6FQuYAIiYfAbhwUAAgM6X+v/M3ADpJkv6bp83/ZGiY/8X+z/+tE/cA7grKAO+X8gBeOyf/8B1m/wpcmv/lVNv/oYFQANBazAHw267/nmaRATWyTP80bKgBU95rANMkbQB2OjgACB0WAO2gxwCq0Z0AiUcvAI9WIADG8gIA1DCIAVysugDml2kBYL/lAIpQv/7w2IL/YisG/qjEMQD9ElsBkEl5AD2SJwE/aBj/uKVw/n7rYgBQ1WL/ezxX/1KM9QHfeK3/D8aGAc487wDn6lz/Ie4T/6VxjgGwdyYAoCum/u9baQBrPcIBGQREAA+LMwCkhGr/InQu/qhfxQCJ1BcASJw6AIlwRf6WaZr/7MmdABfUmv+IUuP+4jvd/1+VwABRdjT/ISvXAQ6TS/9ZnHn+DhJPAJPQiwGX2j7/nFgIAdK4Yv8Ur3v/ZlPlANxBdAGW+gT/XI7c/yL3Qv/M4bP+l1GXAEco7P+KPz4ABk/w/7e5tQB2MhsAP+PAAHtjOgEy4Jv/EeHf/tzgTf8OLHsBjYCvAPjUyACWO7f/k2EdAJbMtQD9JUcAkVV3AJrIugACgPn/Uxh8AA5XjwCoM/UBfJfn/9DwxQF8vrkAMDr2ABTp6AB9EmL/Df4f//Wxgv9sjiMAq33y/owMIv+loaIAzs1lAPcZIgFkkTkAJ0Y5AHbMy//yAKIApfQeAMZ04gCAb5n/jDa2ATx6D/+bOjkBNjLGAKvTHf9riqf/rWvH/22hwQBZSPL/znNZ//r+jv6xyl7/UVkyAAdpQv8Z/v/+y0AX/0/ebP8n+UsA8XwyAO+YhQDd8WkAk5diANWhef7yMYkA6SX5/iq3GwC4d+b/2SCj/9D75AGJPoP/T0AJ/l4wcQARijL+wf8WAPcSxQFDN2gAEM1f/zAlQgA3nD8BQFJK/8g1R/7vQ30AGuDeAN+JXf8e4Mr/CdyEAMYm6wFmjVYAPCtRAYgcGgDpJAj+z/KUAKSiPwAzLuD/cjBP/wmv4gDeA8H/L6Do//9daf4OKuYAGopSAdAr9AAbJyb/YtB//0CVtv8F+tEAuzwc/jEZ2v+pdM3/dxJ4AJx0k/+ENW3/DQrKAG5TpwCd24n/BgOC/zKnHv88ny//gYCd/l4DvQADpkQAU9/XAJZawgEPqEEA41Mz/82rQv82uzwBmGYt/3ea4QDw94gAZMWy/4tH3//MUhABKc4q/5zA3f/Ye/T/2tq5/7u67//8rKD/wzQWAJCutf67ZHP/006w/xsHwQCT1Wj/WskK/1B7QgEWIboAAQdj/h7OCgDl6gUANR7SAIoI3P5HN6cASOFWAXa+vAD+wWUBq/ms/16et/5dAmz/sF1M/0ljT/9KQIH+9i5BAGPxf/72l2b/LDXQ/jtm6gCar6T/WPIgAG8mAQD/tr7/c7AP/qk8gQB67fEAWkw/AD5KeP96w24AdwSyAN7y0gCCIS7+nCgpAKeScAExo2//ebDrAEzPDv8DGcYBKevVAFUk1gExXG3/yBge/qjswwCRJ3wB7MOVAFokuP9DVar/JiMa/oN8RP/vmyP/NsmkAMQWdf8xD80AGOAdAX5xkAB1FbYAy5+NAN+HTQCw5rD/vuXX/2Mltf8zFYr/Gb1Z/zEwpf6YLfcAqmzeAFDKBQAbRWf+zBaB/7T8Pv7SAVv/km7+/9uiHADf/NUBOwghAM4Q9ACB0zAAa6DQAHA70QBtTdj+IhW5//ZjOP+zixP/uR0y/1RZEwBK+mL/4SrI/8DZzf/SEKcAY4RfASvmOQD+C8v/Y7w//3fB+/5QaTYA6LW9AbdFcP/Qq6X/L220/3tTpQCSojT/mgsE/5fjWv+SiWH+Pekp/14qN/9spOwAmET+AAqMg/8Kak/+856JAEOyQv6xe8b/Dz4iAMVYKv+VX7H/mADG/5X+cf/hWqP/fdn3ABIR4ACAQnj+wBkJ/zLdzQAx1EYA6f+kAALRCQDdNNv+rOD0/144zgHyswL/H1ukAeYuiv+95twAOS89/28LnQCxW5gAHOZiAGFXfgDGWZH/p09rAPlNoAEd6eb/lhVW/jwLwQCXJST+uZbz/+TUUwGsl7QAyambAPQ86gCO6wQBQ9o8AMBxSwF088//QaybAFEenP9QSCH+Eudt/45rFf59GoT/sBA7/5bJOgDOqckA0HniACisDv+WPV7/ODmc/408kf8tbJX/7pGb/9FVH/7ADNIAY2Jd/pgQlwDhudwAjess/6CsFf5HGh//DUBd/hw4xgCxPvgBtgjxAKZllP9OUYX/gd7XAbypgf/oB2EAMXA8/9nl+wB3bIoAJxN7/oMx6wCEVJEAguaU/xlKuwAF9Tb/udvxARLC5P/xymYAaXHKAJvrTwAVCbL/nAHvAMiUPQBz99L/Md2HADq9CAEjLgkAUUEF/zSeuf99dC7/SowN/9JcrP6TF0cA2eD9/nNstP+ROjD+27EY/5z/PAGak/IA/YZXADVL5QAww97/H68y/5zSeP/QI97/EvizAQIKZf+dwvj/nsxl/2j+xf9PPgQAsqxlAWCS+/9BCpwAAoml/3QE5wDy1wEAEyMd/yuhTwA7lfYB+0KwAMghA/9Qbo7/w6ERAeQ4Qv97L5H+hASkAEOurAAZ/XIAV2FXAfrcVABgW8j/JX07ABNBdgChNPH/7awG/7C///8BQYL+377mAGX95/+SI20A+h1NATEAEwB7WpsBFlYg/9rVQQBvXX8APF2p/wh/tgARug7+/Yn2/9UZMP5M7gD/+FxG/2PgiwC4Cf8BB6TQAM2DxgFX1scAgtZfAN2V3gAXJqv+xW7VACtzjP7XsXYAYDRCAXWe7QAOQLb/Lj+u/55fvv/hzbH/KwWO/6xj1P/0u5MAHTOZ/+R0GP4eZc8AE/aW/4bnBQB9huIBTUFiAOyCIf8Fbj4ARWx//wdxFgCRFFP+wqHn/4O1PADZ0bH/5ZTU/gODuAB1sbsBHA4f/7BmUAAyVJf/fR82/xWdhf8Ts4sB4OgaACJ1qv+n/Kv/SY3O/oH6IwBIT+wB3OUU/ynKrf9jTO7/xhbg/2zGw/8kjWAB7J47/2pkVwBu4gIA4+reAJpdd/9KcKT/Q1sC/xWRIf9m1on/r+Zn/qP2pgBd93T+p+Ac/9wCOQGrzlQAe+QR/xt4dwB3C5MBtC/h/2jIuf6lAnIATU7UAC2asf8YxHn+Up22AFoQvgEMk8UAX++Y/wvrRwBWknf/rIbWADyDxACh4YEAH4J4/l/IMwBp59L/OgmU/yuo3f987Y4AxtMy/i71ZwCk+FQAmEbQ/7R1sQBGT7kA80ogAJWczwDFxKEB9TXvAA9d9v6L8DH/xFgk/6ImewCAyJ0Brkxn/62pIv7YAav/cjMRAIjkwgBuljj+avafABO4T/+WTfD/m1CiAAA1qf8dl1YARF4QAFwHbv5idZX/+U3m//0KjADWfFz+I3brAFkwOQEWNaYAuJA9/7P/wgDW+D3+O272AHkVUf6mA+QAakAa/0Xohv/y3DX+LtxVAHGV9/9hs2f/vn8LAIfRtgBfNIEBqpDO/3rIzP+oZJIAPJCV/kY8KAB6NLH/9tNl/67tCAAHM3gAEx+tAH7vnP+PvcsAxIBY/+mF4v8efa3/yWwyAHtkO//+owMB3ZS1/9aIOf7etIn/z1g2/xwh+/9D1jQB0tBkAFGqXgCRKDUA4G/n/iMc9P/ix8P+7hHmANnZpP6pnd0A2i6iAcfPo/9sc6IBDmC7/3Y8TAC4n5gA0edH/iqkuv+6mTP+3au2/6KOrQDrL8EAB4sQAV+kQP8Q3aYA28UQAIQdLP9kRXX/POtY/ihRrQBHvj3/u1idAOcLFwDtdaQA4ajf/5pydP+jmPIBGCCqAH1icf6oE0wAEZ3c/ps0BQATb6H/R1r8/61u8AAKxnn//f/w/0J70gDdwtf+eaMR/+EHYwC+MbYAcwmFAegaiv/VRIQALHd6/7NiMwCVWmoARzLm/wqZdv+xRhkApVfNADeK6gDuHmEAcZvPAGKZfwAia9v+dXKs/0y0//7yObP/3SKs/jiiMf9TA///cd29/7wZ5P4QWFn/RxzG/hYRlf/zef7/a8pj/wnODgHcL5kAa4knAWExwv+VM8X+ujoL/2sr6AHIBg7/tYVB/t3kq/97PucB4+qz/yK91P70u/kAvg1QAYJZAQDfha0ACd7G/0J/SgCn2F3/m6jGAUKRAABEZi4BrFqaANiAS/+gKDMAnhEbAXzwMQDsyrD/l3zA/ybBvgBftj0Ao5N8//+lM/8cKBH+12BOAFaR2v4fJMr/VgkFAG8pyP/tbGEAOT4sAHW4DwEt8XQAmAHc/52lvAD6D4MBPCx9/0Hc+/9LMrgANVqA/+dQwv+IgX8BFRK7/y06of9HkyIArvkL/iONHQDvRLH/c246AO6+sQFX9ab/vjH3/5JTuP+tDif/ktdoAI7feACVyJv/1M+RARC12QCtIFf//yO1AHffoQHI317/Rga6/8BDVf8yqZgAkBp7/zjzs/4URIgAJ4y8/v3QBf/Ic4cBK6zl/5xouwCX+6cANIcXAJeZSACTxWv+lJ4F/+6PzgB+mYn/WJjF/gdEpwD8n6X/7042/xg/N/8m3l4A7bcM/87M0gATJ/b+HkrnAIdsHQGzcwAAdXZ0AYQG/P+RgaEBaUONAFIl4v/u4uT/zNaB/qJ7ZP+5eeoALWznAEIIOP+EiIAArOBC/q+dvADm3+L+8ttFALgOdwFSojgAcnsUAKJnVf8x72P+nIfXAG//p/4nxNYAkCZPAfmofQCbYZz/FzTb/5YWkAAslaX/KH+3AMRN6f92gdL/qofm/9Z3xgDp8CMA/TQH/3VmMP8VzJr/s4ix/xcCAwGVgln//BGfAUY8GgCQaxEAtL48/zi2O/9uRzb/xhKB/5XgV//fFZj/iha2//qczQDsLdD/T5TyAWVG0QBnTq4AZZCs/5iI7QG/wogAcVB9AZgEjQCbljX/xHT1AO9ySf4TUhH/fH3q/yg0vwAq0p7/m4SlALIFKgFAXCj/JFVN/7LkdgCJQmD+c+JCAG7wRf6Xb1AAp67s/+Nsa/+88kH/t1H/ADnOtf8vIrX/1fCeAUdLXwCcKBj/ZtJRAKvH5P+aIikA469LABXvwwCK5V8BTMAxAHV7VwHj4YIAfT4//wLGqwD+JA3+kbrOAJT/9P8jAKYAHpbbAVzk1ABcxjz+PoXI/8kpOwB97m3/tKPuAYx6UgAJFlj/xZ0v/5leOQBYHrYAVKFVALKSfACmpgf/FdDfAJy28gCbebkAU5yu/poQdv+6U+gB3zp5/x0XWAAjfX//qgWV/qQMgv+bxB0AoWCIAAcjHQGiJfsAAy7y/wDZvAA5ruIBzukCADm7iP57vQn/yXV//7okzADnGdgAUE5pABOGgf+Uy0QAjVF9/vilyP/WkIcAlzem/ybrWwAVLpoA3/6W/yOZtP99sB0BK2Ie/9h65v/poAwAObkM/vBxB/8FCRD+GltsAG3GywAIkygAgYbk/3y6KP9yYoT+poQXAGNFLAAJ8u7/uDU7AISBZv80IPP+k9/I/3tTs/6HkMn/jSU4AZc84/9aSZwBy6y7AFCXL/9eief/JL87/+HRtf9K19X+Bnaz/5k2wQEyAOcAaJ1IAYzjmv+24hD+YOFc/3MUqv4G+k4A+Eut/zVZBv8AtHYASK0BAEAIzgGuhd8AuT6F/9YLYgDFH9AAq6f0/xbntQGW2rkA96lhAaWL9/8veJUBZ/gzADxFHP4Zs8QAfAfa/jprUQC46Zz//EokAHa8QwCNXzX/3l6l/i49NQDOO3P/L+z6/0oFIAGBmu7/aiDiAHm7Pf8DpvH+Q6qs/x3Ysv8XyfwA/W7zAMh9OQBtwGD/NHPuACZ58//JOCEAwnaCAEtgGf+qHub+Jz/9ACQt+v/7Ae8AoNRcAS3R7QDzIVf+7VTJ/9QSnf7UY3//2WIQ/ous7wCoyYL/j8Gp/+6XwQHXaCkA7z2l/gID8gAWy7H+scwWAJWB1f4fCyn/AJ95/qAZcv+iUMgAnZcLAJqGTgHYNvwAMGeFAGncxQD9qE3+NbMXABh58AH/LmD/azyH/mLN+f8/+Xf/eDvT/3K0N/5bVe0AldRNAThJMQBWxpYAXdGgAEXNtv/0WisAFCSwAHp03QAzpycB5wE//w3FhgAD0SL/hzvKAKdkTgAv30wAuTw+ALKmewGEDKH/Pa4rAMNFkAB/L78BIixOADnqNAH/Fij/9l6SAFPkgAA8TuD/AGDS/5mv7ACfFUkAtHPE/oPhagD/p4YAnwhw/3hEwv+wxMb/djCo/12pAQBwyGYBShj+ABONBP6OPj8Ag7O7/02cm/93VqQAqtCS/9CFmv+Umzr/onjo/vzVmwDxDSoAXjKDALOqcACMU5f/N3dUAYwj7/+ZLUMB7K8nADaXZ/+eKkH/xO+H/lY1ywCVYS/+2CMR/0YDRgFnJFr/KBqtALgwDQCj29n/UQYB/92qbP7p0F0AZMn5/lYkI//Rmh4B48n7/wK9p/5kOQMADYApAMVkSwCWzOv/ka47AHj4lf9VN+EActI1/sfMdwAO90oBP/uBAENolwGHglAAT1k3/3Xmnf8ZYI8A1ZEFAEXxeAGV81//cioUAINIAgCaNRT/ST5tAMRmmAApDMz/eiYLAfoKkQDPfZQA9vTe/ykgVQFw1X4AovlWAUfGf/9RCRUBYicE/8xHLQFLb4kA6jvnACAwX//MH3IBHcS1/zPxp/5dbY4AaJAtAOsMtf80cKQATP7K/64OogA965P/K0C5/ul92QDzWKf+SjEIAJzMQgB81nsAJt12AZJw7AByYrEAl1nHAFfFcAC5laEALGClAPizFP+829j+KD4NAPOOjQDl487/rMoj/3Ww4f9SbiYBKvUO/xRTYQAxqwoA8nd4ABnoPQDU8JP/BHM4/5ER7/7KEfv/+RL1/2N17wC4BLP/9u0z/yXvif+mcKb/Ubwh/7n6jv82u60A0HDJAPYr5AFouFj/1DTE/zN1bP/+dZsALlsP/1cOkP9X48wAUxpTAZ9M4wCfG9UBGJdsAHWQs/6J0VIAJp8KAHOFyQDftpwBbsRd/zk86QAFp2n/msWkAGAiuv+ThSUB3GO+AAGnVP8UkasAwsX7/l9Ohf/8+PP/4V2D/7uGxP/YmaoAFHae/owBdgBWng8BLdMp/5MBZP5xdEz/039sAWcPMADBEGYBRTNf/2uAnQCJq+kAWnyQAWqhtgCvTOwByI2s/6M6aADptDT/8P0O/6Jx/v8m74r+NC6mAPFlIf6DupwAb9A+/3xeoP8frP4AcK44/7xjG/9DivsAfTqAAZyYrv+yDPf//FSeAFLFDv6syFP/JScuAWrPpwAYvSIAg7KQAM7VBACh4tIASDNp/2Etu/9OuN//sB37AE+gVv90JbIAUk3VAVJUjf/iZdQBr1jH//Ve9wGsdm3/prm+AIO1eABX/l3/hvBJ/yD1j/+Lomf/s2IS/tnMcACT33j/NQrzAKaMlgB9UMj/Dm3b/1vaAf/8/C/+bZx0/3MxfwHMV9P/lMrZ/xpV+f8O9YYBTFmp//It5gA7Yqz/ckmE/k6bMf+eflQAMa8r/xC2VP+dZyMAaMFt/0PdmgDJrAH+CKJYAKUBHf99m+X/HprcAWfvXADcAW3/ysYBAF4CjgEkNiwA6+Ke/6r71v+5TQkAYUryANujlf/wI3b/33JY/sDHAwBqJRj/yaF2/2FZYwHgOmf/ZceT/t48YwDqGTsBNIcbAGYDW/6o2OsA5eiIAGg8gQAuqO4AJ79DAEujLwCPYWL/ONioAajp/P8jbxb/XFQrABrIVwFb/ZgAyjhGAI4ITQBQCq8B/MdMABZuUv+BAcIAC4A9AVcOkf/93r4BD0iuAFWjVv46Yyz/LRi8/hrNDwAT5dL++EPDAGNHuACaxyX/l/N5/yYzS//JVYL+LEH6ADmT8/6SKzv/WRw1ACFUGP+zMxL+vUZTAAucswFihncAnm9vAHeaSf/IP4z+LQ0N/5rAAv5RSCoALqC5/ixwBgCS15UBGrBoAEQcVwHsMpn/s4D6/s7Bv/+mXIn+NSjvANIBzP6orSMAjfMtASQybf8P8sL/4596/7Cvyv5GOUgAKN84ANCiOv+3Yl0AD28MAB4ITP+Ef/b/LfJnAEW1D/8K0R4AA7N5APHo2gF7x1j/AtLKAbyCUf9eZdABZyQtAEzBGAFfGvH/paK7ACRyjADKQgX/JTiTAJgL8wF/Vej/+ofUAbmxcQBa3Ev/RfiSADJvMgBcFlAA9CRz/qNkUv8ZwQYBfz0kAP1DHv5B7Kr/oRHX/j+vjAA3fwQAT3DpAG2gKACPUwf/QRru/9mpjP9OXr3/AJO+/5NHuv5qTX//6Z3pAYdX7f/QDewBm20k/7Rk2gC0oxIAvm4JARE/e/+ziLT/pXt7/5C8Uf5H8Gz/GXAL/+PaM/+nMur/ck9s/x8Tc/+38GMA41eP/0jZ+P9mqV8BgZWVAO6FDAHjzCMA0HMaAWYI6gBwWI8BkPkOAPCerP5kcHcAwo2Z/ig4U/95sC4AKjVM/56/mgBb0VwArQ0QAQVI4v/M/pUAULjPAGQJev52Zav//MsA/qDPNgA4SPkBOIwN/wpAa/5bZTT/4bX4AYv/hADmkREA6TgXAHcB8f/VqZf/Y2MJ/rkPv/+tZ20Brg37/7JYB/4bO0T/CiEC//hhOwAaHpIBsJMKAF95zwG8WBgAuV7+/nM3yQAYMkYAeDUGAI5CkgDk4vn/aMDeAa1E2wCiuCT/j2aJ/50LFwB9LWIA613h/jhwoP9GdPMBmfk3/4EnEQHxUPQAV0UVAV7kSf9OQkH/wuPnAD2SV/+tmxf/cHTb/tgmC/+DuoUAXtS7AGQvWwDM/q//3hLX/q1EbP/j5E//Jt3VAKPjlv4fvhIAoLMLAQpaXv/crlgAo9Pl/8eINACCX93/jLzn/otxgP91q+z+MdwU/zsUq//kbbwAFOEg/sMQrgDj/ogBhydpAJZNzv/S7uIAN9SE/u85fACqwl3/+RD3/xiXPv8KlwoAT4uy/3jyygAa29UAPn0j/5ACbP/mIVP/US3YAeA+EQDW2X0AYpmZ/7Owav6DXYr/bT4k/7J5IP94/EYA3PglAMxYZwGA3Pv/7OMHAWoxxv88OGsAY3LuANzMXgFJuwEAWZoiAE7Zpf8Ow/n/Ceb9/82H9QAa/Af/VM0bAYYCcAAlniAA51vt/7+qzP+YB94AbcAxAMGmkv/oE7X/aY40/2cQGwH9yKUAw9kE/zS9kP97m6D+V4I2/054Pf8OOCkAGSl9/1eo9QDWpUYA1KkG/9vTwv5IXaT/xSFn/yuOjQCD4awA9GkcAERE4QCIVA3/gjko/otNOABUljUANl+dAJANsf5fc7oAdRd2//Sm8f8LuocAsmrL/2HaXQAr/S0ApJgEAIt27wBgARj+65nT/6huFP8y77AAcinoAMH6NQD+oG/+iHop/2FsQwDXmBf/jNHUACq9owDKKjL/amq9/75E2f/pOnUA5dzzAcUDBAAleDb+BJyG/yQ9q/6liGT/1OgOAFquCgDYxkH/DANAAHRxc//4ZwgA530S/6AcxQAeuCMB30n5/3sULv6HOCX/rQ3lAXehIv/1PUkAzX1wAIlohgDZ9h7/7Y6PAEGfZv9spL4A23Wt/yIleP7IRVAAH3za/koboP+6msf/R8f8AGhRnwERyCcA0z3AARruWwCU2QwAO1vV/wtRt/+B5nr/csuRAXe0Qv9IirQA4JVqAHdSaP/QjCsAYgm2/81lhv8SZSYAX8Wm/8vxkwA+0JH/hfb7AAKpDgAN97gAjgf+ACTIF/9Yzd8AW4E0/xW6HgCP5NIB9+r4/+ZFH/6wuof/7s00AYtPKwARsNn+IPNDAPJv6QAsIwn/43JRAQRHDP8mab8AB3Uy/1FPEAA/REH/nSRu/03xA//iLfsBjhnOAHh70QEc/u7/BYB+/1ve1/+iD78AVvBJAIe5Uf4s8aMA1NvS/3CimwDPZXYAqEg4/8QFNABIrPL/fhad/5JgO/+ieZj+jBBfAMP+yP5SlqIAdyuR/sysTv+m4J8AaBPt//V+0P/iO9UAddnFAJhI7QDcHxf+Dlrn/7zUQAE8Zfb/VRhWAAGxbQCSUyABS7bAAHfx4AC57Rv/uGVSAeslTf/9hhMA6PZ6ADxqswDDCwwAbULrAX1xOwA9KKQAr2jwAAIvu/8yDI0Awou1/4f6aABhXN7/2ZXJ/8vxdv9Pl0MAeo7a/5X17wCKKsj+UCVh/3xwp/8kilf/gh2T//FXTv/MYRMBsdEW//fjf/5jd1P/1BnGARCzswCRTaz+WZkO/9q9pwBr6Tv/IyHz/ixwcP+hf08BzK8KACgViv5odOQAx1+J/4W+qP+SpeoBt2MnALfcNv7/3oUAott5/j/vBgDhZjb/+xL2AAQigQGHJIMAzjI7AQ9htwCr2If/ZZgr/5b7WwAmkV8AIswm/rKMU/8ZgfP/TJAlAGokGv52kKz/RLrl/2uh1f8uo0T/lar9ALsRDwDaoKX/qyP2AWANEwCly3UA1mvA//R7sQFkA2gAsvJh//tMgv/TTSoB+k9G/z/0UAFpZfYAPYg6Ae5b1QAOO2L/p1RNABGELv45r8X/uT64AExAzwCsr9D+r0olAIob0/6UfcIACllRAKjLZf8r1dEB6/U2AB4j4v8JfkYA4n1e/px1FP85+HAB5jBA/6RcpgHg1ub/JHiPADcIK//7AfUBamKlAEprav41BDb/WrKWAQN4e//0BVkBcvo9//6ZUgFNDxEAOe5aAV/f5gDsNC/+Z5Sk/3nPJAESELn/SxRKALsLZQAuMIH/Fu/S/03sgf9vTcz/PUhh/8fZ+/8q18wAhZHJ/znmkgHrZMYAkkkj/mzGFP+2T9L/UmeIAPZssAAiETz/E0py/qiqTv+d7xT/lSmoADp5HABPs4b/53mH/67RYv/zer4Aq6bNANR0MAAdbEL/ot62AQ53FQDVJ/n//t/k/7elxgCFvjAAfNBt/3evVf8J0XkBMKu9/8NHhgGI2zP/tluN/jGfSAAjdvX/cLrj/zuJHwCJLKMAcmc8/gjVlgCiCnH/wmhIANyDdP+yT1wAy/rV/l3Bvf+C/yL+1LyXAIgRFP8UZVP/1M6mAOXuSf+XSgP/qFfXAJu8hf+mgUkA8E+F/7LTUf/LSKP+wailAA6kx/4e/8wAQUhbAaZKZv/IKgD/wnHj/0IX0ADl2GT/GO8aAArpPv97CrIBGiSu/3fbxwEto74AEKgqAKY5xv8cGhoAfqXnAPtsZP895Xn/OnaKAEzPEQANInD+WRCoACXQaf8jydf/KGpl/gbvcgAoZ+L+9n9u/z+nOgCE8I4ABZ5Y/4FJnv9eWZIA5jaSAAgtrQBPqQEAc7r3AFRAgwBD4P3/z71AAJocUQEtuDb/V9Tg/wBgSf+BIesBNEJQ//uum/8EsyUA6qRd/l2v/QDGRVf/4GouAGMd0gA+vHL/LOoIAKmv9/8XbYn/5bYnAMClXv71ZdkAv1hgAMReY/9q7gv+NX7zAF4BZf8ukwIAyXx8/40M2gANpp0BMPvt/5v6fP9qlJL/tg3KABw9pwDZmAj+3IIt/8jm/wE3QVf/Xb9h/nL7DgAgaVwBGs+NABjPDf4VMjD/upR0/9Mr4QAlIqL+pNIq/0QXYP+21gj/9XWJ/0LDMgBLDFP+UIykAAmlJAHkbuMA8RFaARk01AAG3wz/i/M5AAxxSwH2t7//1b9F/+YPjgABw8T/iqsv/0A/agEQqdb/z644AVhJhf+2hYwAsQ4Z/5O4Nf8K46H/eNj0/0lN6QCd7osBO0HpAEb72AEpuJn/IMtwAJKT/QBXZW0BLFKF//SWNf9emOj/O10n/1iT3P9OUQ0BIC/8/6ATcv9dayf/dhDTAbl30f/j23/+WGns/6JuF/8kpm7/W+zd/0LqdABvE/T+CukaACC3Bv4Cv/IA2pw1/ik8Rv+o7G8Aebl+/+6Oz/83fjQA3IHQ/lDMpP9DF5D+2ihs/3/KpADLIQP/Ap4AACVgvP/AMUoAbQQAAG+nCv5b2of/y0Kt/5bC4gDJ/Qb/rmZ5AM2/bgA1wgQAUSgt/iNmj/8MbMb/EBvo//xHugGwbnIAjgN1AXFNjgATnMUBXC/8ADXoFgE2EusALiO9/+zUgQACYND+yO7H/zuvpP+SK+cAwtk0/wPfDACKNrL+VevPAOjPIgAxNDL/pnFZ/wot2P8+rRwAb6X2AHZzW/+AVDwAp5DLAFcN8wAWHuQBsXGS/4Gq5v78mYH/keErAEbnBf96aX7+VvaU/24lmv7RA1sARJE+AOQQpf833fn+stJbAFOS4v5FkroAXdJo/hAZrQDnuiYAvXqM//sNcP9pbl0A+0iqAMAX3/8YA8oB4V3kAJmTx/5tqhYA+GX2/7J8DP+y/mb+NwRBAH3WtAC3YJMALXUX/oS/+QCPsMv+iLc2/5LqsQCSZVb/LHuPASHRmADAWin+Uw99/9WsUgDXqZAAEA0iACDRZP9UEvkBxRHs/9m65gAxoLD/b3Zh/+1o6wBPO1z+RfkL/yOsSgETdkQA3nyl/7RCI/9WrvYAK0pv/36QVv/k6lsA8tUY/kUs6//ctCMACPgH/2YvXP/wzWb/cearAR+5yf/C9kb/ehG7AIZGx/+VA5b/dT9nAEFoe//UNhMBBo1YAFOG8/+INWcAqRu0ALExGABvNqcAwz3X/x8BbAE8KkYAuQOi/8KVKP/2fyb+vncm/z13CAFgodv/KsvdAbHypP/1nwoAdMQAAAVdzf6Af7MAfe32/5Wi2f9XJRT+jO7AAAkJwQBhAeIAHSYKAACIP//lSNL+JoZc/07a0AFoJFT/DAXB//KvPf+/qS4Bs5OT/3G+i/59rB8AA0v8/tckDwDBGxgB/0WV/26BdgDLXfkAiolA/iZGBgCZdN4AoUp7AMFjT/92O17/PQwrAZKxnQAuk78AEP8mAAszHwE8OmL/b8JNAZpb9ACMKJABrQr7AMvRMv5sgk4A5LRaAK4H+gAfrjwAKaseAHRjUv92wYv/u63G/tpvOAC5e9gA+Z40ADS0Xf/JCVv/OC2m/oSby/866G4ANNNZ//0AogEJV7cAkYgsAV569QBVvKsBk1zGAAAIaAAeX64A3eY0Aff36/+JrjX/IxXM/0fj1gHoUsIACzDj/6pJuP/G+/z+LHAiAINlg/9IqLsAhId9/4poYf/uuKj/82hU/4fY4v+LkO0AvImWAVA4jP9Wqaf/wk4Z/9wRtP8RDcEAdYnU/43glwAx9K8AwWOv/xNjmgH/QT7/nNI3//L0A//6DpUAnljZ/53Phv776BwALpz7/6s4uP/vM+oAjoqD/xn+8wEKycIAP2FLANLvogDAyB8BddbzABhH3v42KOj/TLdv/pAOV//WT4j/2MTUAIQbjP6DBf0AfGwT/xzXSwBM3jf+6bY/AESrv/40b97/CmlN/1Cq6wCPGFj/Led5AJSB4AE99lQA/S7b/+9MIQAxlBL+5iVFAEOGFv6Om14AH53T/tUqHv8E5Pf+/LAN/ycAH/7x9P//qi0K/v3e+QDecoQA/y8G/7SjswFUXpf/WdFS/uU0qf/V7AAB1jjk/4d3l/9wycEAU6A1/gaXQgASohEA6WFbAIMFTgG1eDX/dV8//+11uQC/foj/kHfpALc5YQEvybv/p6V3AS1kfgAVYgb+kZZf/3g2mADRYmgAj28e/riU+QDr2C4A+MqU/zlfFgDy4aMA6ffo/0erE/9n9DH/VGdd/0R59AFS4A0AKU8r//nOp//XNBX+wCAW//dvPABlSib/FltU/h0cDf/G59f+9JrIAN+J7QDThA4AX0DO/xE+9//pg3kBXRdNAM3MNP5RvYgAtNuKAY8SXgDMK4z+vK/bAG9ij/+XP6L/0zJH/hOSNQCSLVP+slLu/xCFVP/ixl3/yWEU/3h2I/9yMuf/ouWc/9MaDAByJ3P/ztSGAMXZoP90gV7+x9fb/0vf+QH9dLX/6Ndo/+SC9v+5dVYADgUIAO8dPQHtV4X/fZKJ/syo3wAuqPUAmmkWANzUof9rRRj/idq1//FUxv+CetP/jQiZ/76xdgBgWbIA/xAw/npgaf91Nuj/In5p/8xDpgDoNIr/05MMABk2BwAsD9f+M+wtAL5EgQFqk+EAHF0t/uyND/8RPaEA3HPAAOyRGP5vqKkA4Do//3+kvABS6ksB4J6GANFEbgHZptkARuGmAbvBj/8QB1j/Cs2MAHXAnAEROCYAG3xsAavXN/9f/dQAm4eo//aymf6aREoA6D1g/mmEOwAhTMcBvbCC/wloGf5Lxmb/6QFwAGzcFP9y5kYAjMKF/zmepP6SBlD/qcRhAVW3ggBGnt4BO+3q/2AZGv/or2H/C3n4/lgjwgDbtPz+SgjjAMPjSQG4bqH/MemkAYA1LwBSDnn/wb46ADCudf+EFyAAKAqGARYzGf/wC7D/bjmSAHWP7wGdZXb/NlRMAM24Ev8vBEj/TnBV/8EyQgFdEDT/CGmGAAxtSP86nPsAkCPMACygdf4ya8IAAUSl/29uogCeUyj+TNbqADrYzf+rYJP/KONyAbDj8QBG+bcBiFSL/zx69/6PCXX/sa6J/kn3jwDsuX7/Phn3/y1AOP+h9AYAIjk4AWnKUwCAk9AABmcK/0qKQf9hUGT/1q4h/zKGSv9ul4L+b1SsAFTHS/74O3D/CNiyAQm3XwDuGwj+qs3cAMPlhwBiTO3/4lsaAVLbJ//hvscB2ch5/1GzCP+MQc4Ass9X/vr8Lv9oWW4B/b2e/5DWnv+g9Tb/NbdcARXIwv+SIXEB0QH/AOtqK/+nNOgAneXdADMeGQD63RsBQZNX/097xABBxN//TCwRAVXxRADKt/n/QdTU/wkhmgFHO1AAr8I7/41ICQBkoPQA5tA4ADsZS/5QwsIAEgPI/qCfcwCEj/cBb105/zrtCwGG3of/eqNsAXsrvv/7vc7+ULZI/9D24AERPAkAoc8mAI1tWwDYD9P/iE5uAGKjaP8VUHn/rbK3AX+PBABoPFL+1hAN/2DuIQGelOb/f4E+/zP/0v8+jez+nTfg/3In9ADAvPr/5Ew1AGJUUf+tyz3+kzI3/8zrvwA0xfQAWCvT/hu/dwC855oAQlGhAFzBoAH643gAezfiALgRSACFqAr+Foec/ykZZ/8wyjoAupVR/7yG7wDrtb3+2Yu8/0owUgAu2uUAvf37ADLlDP/Tjb8BgPQZ/6nnev5WL73/hLcX/yWylv8zif0AyE4fABZpMgCCPAAAhKNb/hfnuwDAT+8AnWak/8BSFAEYtWf/8AnqAAF7pP+F6QD/yvLyADy69QDxEMf/4HSe/r99W//gVs8AeSXn/+MJxv8Pme//eejZ/ktwUgBfDDn+M9Zp/5TcYQHHYiQAnNEM/grUNADZtDf+1Kro/9gUVP+d+ocAnWN//gHOKQCVJEYBNsTJ/1d0AP7rq5YAG6PqAMqHtADQXwD+e5xdALc+SwCJ67YAzOH//9aL0v8Ccwj/HQxvADScAQD9Ffv/JaUf/gyC0wBqEjX+KmOaAA7ZPf7YC1z/yMVw/pMmxwAk/Hj+a6lNAAF7n//PS2YAo6/EACwB8AB4urD+DWJM/+188f/okrz/yGDgAMwfKQDQyA0AFeFg/6+cxAD30H4APrj0/gKrUQBVc54ANkAt/xOKcgCHR80A4y+TAdrnQgD90RwA9A+t/wYPdv4QltD/uRYy/1Zwz/9LcdcBP5Ir/wThE/7jFz7/Dv/W/i0Izf9XxZf+0lLX//X49/+A+EYA4fdXAFp4RgDV9VwADYXiAC+1BQFco2n/Bh6F/uiyPf/mlRj/EjGeAORkPf508/v/TUtcAVHbk/9Mo/7+jdX2AOglmP5hLGQAySUyAdT0OQCuq7f/+UpwAKacHgDe3WH/811J/vtlZP/Y2V3//oq7/46+NP87y7H/yF40AHNynv+lmGgBfmPi/3ad9AFryBAAwVrlAHkGWACcIF3+ffHT/w7tnf+lmhX/uOAW//oYmP9xTR8A96sX/+2xzP80iZH/wrZyAODqlQAKb2cByYEEAO6OTgA0Bij/btWl/jzP/QA+10UAYGEA/zEtygB4eRb/64swAcYtIv+2MhsBg9Jb/y42gACve2n/xo1O/kP07//1Nmf+Tiby/wJc+f77rlf/iz+QABhsG/8iZhIBIhaYAELldv4yj2MAkKmVAXYemACyCHkBCJ8SAFpl5v+BHXcARCQLAei3NwAX/2D/oSnB/z+L3gAPs/MA/2QP/1I1hwCJOZUBY/Cq/xbm5P4xtFL/PVIrAG712QDHfT0ALv00AI3F2wDTn8EAN3lp/rcUgQCpd6r/y7KL/4cotv+sDcr/QbKUAAjPKwB6NX8BSqEwAOPWgP5WC/P/ZFYHAfVEhv89KxUBmFRe/748+v7vduj/1oglAXFMa/9daGQBkM4X/26WmgHkZ7kA2jEy/odNi/+5AU4AAKGU/2Ed6f/PlJX/oKgAAFuAq/8GHBP+C2/3ACe7lv+K6JUAdT5E/z/YvP/r6iD+HTmg/xkM8QGpPL8AIION/+2fe/9exV7+dP4D/1yzYf55YVz/qnAOABWV+AD44wMAUGBtAEvASgEMWuL/oWpEAdByf/9yKv/+ShpK//ezlv55jDwAk0bI/9Yoof+hvMn/jUGH//Jz/AA+L8oAtJX//oI37QClEbr/CqnCAJxt2v9wjHv/aIDf/rGObP95Jdv/gE0S/29sFwFbwEsArvUW/wTsPv8rQJkB463+AO16hAF/Wbr/jlKA/vxUrgBas7EB89ZX/2c8ov/Qgg7/C4KLAM6B2/9e2Z3/7+bm/3Rzn/6ka18AM9oCAdh9xv+MyoD+C19E/zcJXf6umQb/zKxgAEWgbgDVJjH+G1DVAHZ9cgBGRkP/D45J/4N6uf/zFDL+gu0oANKfjAHFl0H/VJlCAMN+WgAQ7uwBdrtm/wMYhf+7ReYAOMVcAdVFXv9QiuUBzgfmAN5v5gFb6Xf/CVkHAQJiAQCUSoX/M/a0/+SxcAE6vWz/wsvt/hXRwwCTCiMBVp3iAB+ji/44B0v/Plp0ALU8qQCKotT+UacfAM1acP8hcOMAU5d1AbHgSf+ukNn/5sxP/xZN6P9yTuoA4Dl+/gkxjQDyk6UBaLaM/6eEDAF7RH8A4VcnAftsCADGwY8BeYfP/6wWRgAyRHT/Za8o//hp6QCmywcAbsXaANf+Gv6o4v0AH49gAAtnKQC3gcv+ZPdK/9V+hADSkywAx+obAZQvtQCbW54BNmmv/wJOkf5mml8AgM9//jR87P+CVEcA3fPTAJiqzwDeascAt1Re/lzIOP+KtnMBjmCSAIWI5ABhEpYAN/tCAIxmBADKZ5cAHhP4/zO4zwDKxlkAN8Xh/qlf+f9CQUT/vOp+AKbfZAFw7/QAkBfCADontgD0LBj+r0Sz/5h2mgGwooIA2XLM/q1+Tv8h3h7/JAJb/wKP8wAJ69cAA6uXARjX9f+oL6T+8ZLPAEWBtABE83EAkDVI/vstDgAXbqgARERP/25GX/6uW5D/Ic5f/4kpB/8Tu5n+I/9w/wmRuf4ynSUAC3AxAWYIvv/q86kBPFUXAEonvQB0Me8ArdXSAC6hbP+fliUAxHi5/yJiBv+Zwz7/YeZH/2Y9TAAa1Oz/pGEQAMY7kgCjF8QAOBg9ALViwQD7k+X/Yr0Y/y42zv/qUvYAt2cmAW0+zAAK8OAAkhZ1/46aeABF1CMA0GN2AXn/A/9IBsIAdRHF/30PFwCaT5kA1l7F/7k3k/8+/k7+f1KZAG5mP/9sUqH/abvUAVCKJwA8/13/SAy6ANL7HwG+p5D/5CwT/oBD6ADW+Wv+iJFW/4QusAC9u+P/0BaMANnTdAAyUbr+i/ofAB5AxgGHm2QAoM4X/rui0/8QvD8A/tAxAFVUvwDxwPL/mX6RAeqiov/mYdgBQId+AL6U3wE0ACv/HCe9AUCI7gCvxLkAYuLV/3+f9AHirzwAoOmOAbTzz/9FmFkBH2UVAJAZpP6Lv9EAWxl5ACCTBQAnunv/P3Pm/12nxv+P1dz/s5wT/xlCegDWoNn/Ai0+/2pPkv4ziWP/V2Tn/6+R6P9luAH/rgl9AFIloQEkco3/MN6O//W6mgAFrt3+P3Kb/4c3oAFQH4cAfvqzAezaLQAUHJEBEJNJAPm9hAERvcD/347G/0gUD//6Ne3+DwsSABvTcf7Vazj/rpOS/2B+MAAXwW0BJaJeAMed+f4YgLv/zTGy/l2kKv8rd+sBWLft/9rSAf9r/ioA5gpj/6IA4gDb7VsAgbLLANAyX/7O0F//979Z/m7qT/+lPfMAFHpw//b2uf5nBHsA6WPmAdtb/P/H3hb/s/Xp/9Px6gBv+sD/VVSIAGU6Mv+DrZz+dy0z/3bpEP7yWtYAXp/bAQMD6v9iTFz+UDbmAAXk5/41GN//cTh2ARSEAf+r0uwAOPGe/7pzE/8I5a4AMCwAAXJypv8GSeL/zVn0AInjSwH4rTgASnj2/ncDC/9ReMb/iHpi/5Lx3QFtwk7/3/FGAdbIqf9hvi//L2eu/2NcSP526bT/wSPp/hrlIP/e/MYAzCtH/8dUrACGZr4Ab+5h/uYo5gDjzUD+yAzhAKYZ3gBxRTP/j58YAKe4SgAd4HT+ntDpAMF0fv/UC4X/FjqMAcwkM//oHisA60a1/0A4kv6pElT/4gEN/8gysP801fX+qNFhAL9HNwAiTpwA6JA6AblKvQC6jpX+QEV//6HLk/+wl78AiOfL/qO2iQChfvv+6SBCAETPQgAeHCUAXXJgAf5c9/8sq0UAyncL/7x2MgH/U4j/R1IaAEbjAgAg63kBtSmaAEeG5f7K/yQAKZgFAJo/Sf8itnwAed2W/xrM1QEprFcAWp2S/22CFABHa8j/82a9AAHDkf4uWHUACM7jAL9u/f9tgBT+hlUz/4mxcAHYIhb/gxDQ/3mVqgByExcBplAf/3HwegDos/oARG60/tKqdwDfbKT/z0/p/xvl4v7RYlH/T0QHAIO5ZACqHaL/EaJr/zkVCwFkyLX/f0GmAaWGzABop6gAAaRPAJKHOwFGMoD/ZncN/uMGhwCijrP/oGTeABvg2wGeXcP/6o2JABAYff/uzi//YRFi/3RuDP9gc00AW+Po//j+T/9c5Qb+WMaLAM5LgQD6Tc7/jfR7AYpF3AAglwYBg6cW/+1Ep/7HvZYAo6uK/zO8Bv9fHYn+lOKzALVr0P+GH1L/l2Ut/4HK4QDgSJMAMIqX/8NAzv7t2p4Aah2J/v296f9nDxH/wmH/ALItqf7G4ZsAJzB1/4dqcwBhJrUAli9B/1OC5f72JoEAXO+a/ltjfwChbyH/7tny/4O5w//Vv57/KZbaAISpgwBZVPwBq0aA/6P4y/4BMrT/fExVAftvUABjQu//mu22/91+hf5KzGP/QZN3/2M4p/9P+JX/dJvk/+0rDv5FiQv/FvrxAVt6j//N+fMA1Bo8/zC2sAEwF7//y3mY/i1K1f8+WhL+9aPm/7lqdP9TI58ADCEC/1AiPgAQV67/rWVVAMokUf6gRcz/QOG7ADrOXgBWkC8A5Vb1AD+RvgElBScAbfsaAImT6gCieZH/kHTO/8Xouf+3voz/SQz+/4sU8v+qWu//YUK7//W1h/7eiDQA9QUz/ssvTgCYZdgASRd9AP5gIQHr0kn/K9FYAQeBbQB6aOT+qvLLAPLMh//KHOn/QQZ/AJ+QRwBkjF8ATpYNAPtrdgG2On3/ASZs/4290f8Im30BcaNb/3lPvv+G72z/TC/4AKPk7wARbwoAWJVL/9fr7wCnnxj/L5ds/2vRvADp52P+HMqU/64jiv9uGET/AkW1AGtmUgBm7QcAXCTt/92iUwE3ygb/h+qH/xj63gBBXqj+9fjS/6dsyf7/oW8AzQj+AIgNdABksIT/K9d+/7GFgv+eT5QAQ+AlAQzOFf8+Im4B7Wiv/1CEb/+OrkgAVOW0/mmzjABA+A//6YoQAPVDe/7aedT/P1/aAdWFif+PtlL/MBwLAPRyjQHRr0z/nbWW/7rlA/+knW8B572LAHfKvv/aakD/ROs//mAarP+7LwsB1xL7/1FUWQBEOoAAXnEFAVyB0P9hD1P+CRy8AO8JpAA8zZgAwKNi/7gSPADZtosAbTt4/wTA+wCp0vD/Jaxc/pTT9f+zQTQA/Q1zALmuzgFyvJX/7VqtACvHwP9YbHEANCNMAEIZlP/dBAf/l/Fy/77R6ABiMscAl5bV/xJKJAE1KAcAE4dB/xqsRQCu7VUAY18pAAM4EAAnoLH/yGra/rlEVP9buj3+Q4+N/w30pv9jcsYAx26j/8ESugB87/YBbkQWAALrLgHUPGsAaSppAQ7mmAAHBYMAjWia/9UDBgCD5KL/s2QcAed7Vf/ODt8B/WDmACaYlQFiiXoA1s0D/+KYs/8GhYkAnkWM/3Gimv+086z/G71z/48u3P/VhuH/fh1FALwriQHyRgkAWsz//+eqkwAXOBP+OH2d/zCz2v9Ptv3/JtS/ASnrfABglxwAh5S+AM35J/40YIj/1CyI/0PRg//8ghf/24AU/8aBdgBsZQsAsgWSAT4HZP+17F7+HBqkAEwWcP94Zk8AysDlAciw1wApQPT/zrhOAKctPwGgIwD/OwyO/8wJkP/bXuUBehtwAL1pbf9A0Er/+383AQLixgAsTNEAl5hN/9IXLgHJq0X/LNPnAL4l4P/1xD7/qbXe/yLTEQB38cX/5SOYARVFKP+y4qEAlLPBANvC/gEozjP/51z6AUOZqgAVlPEAqkVS/3kS5/9ccgMAuD7mAOHJV/+SYKL/tfLcAK273QHiPqr/OH7ZAXUN4/+zLO8AnY2b/5DdUwDr0dAAKhGlAftRhQB89cn+YdMY/1PWpgCaJAn/+C9/AFrbjP+h2Sb+1JM//0JUlAHPAwEA5oZZAX9Oev/gmwH/UohKALKc0P+6GTH/3gPSAeWWvv9VojT/KVSN/0l7VP5dEZYAdxMcASAW1/8cF8z/jvE0/+Q0fQAdTM8A16f6/q+k5gA3z2kBbbv1/6Es3AEpZYD/pxBeAF3Wa/92SAD+UD3q/3mvfQCLqfsAYSeT/vrEMf+ls27+30a7/xaOfQGas4r/drAqAQqumQCcXGYAqA2h/48QIAD6xbT/y6MsAVcgJAChmRT/e/wPABnjUAA8WI4AERbJAZrNTf8nPy8ACHqNAIAXtv7MJxP/BHAd/xckjP/S6nT+NTI//3mraP+g214AV1IO/ucqBQCli3/+Vk4mAII8Qv7LHi3/LsR6Afk1ov+Ij2f+19JyAOcHoP6pmCr/by32AI6Dh/+DR8z/JOILAAAc8v/hitX/9y7Y/vUDtwBs/EoBzhow/8029v/TxiT/eSMyADTYyv8mi4H+8kmUAEPnjf8qL8wATnQZAQThv/8Gk+QAOlixAHql5f/8U8n/4KdgAbG4nv/yabMB+MbwAIVCywH+JC8ALRhz/3c+/gDE4br+e42sABpVKf/ib7cA1eeXAAQ7B//uipQAQpMh/x/2jf/RjXT/aHAfAFihrABT1+b+L2+XAC0mNAGELcwAioBt/ul1hv/zvq3+8ezwAFJ/7P4o36H/brbh/3uu7wCH8pEBM9GaAJYDc/7ZpPz/N5xFAVRe///oSS0BFBPU/2DFO/5g+yEAJsdJAUCs9/91dDj/5BESAD6KZwH25aT/9HbJ/lYgn/9tIokBVdO6AArBwf56wrEAeu5m/6LaqwBs2aEBnqoiALAvmwG15Av/CJwAABBLXQDOYv8BOpojAAzzuP5DdUL/5uV7AMkqbgCG5LL+umx2/zoTmv9SqT7/co9zAe/EMv+tMMH/kwJU/5aGk/5f6EkAbeM0/r+JCgAozB7+TDRh/6TrfgD+fLwASrYVAXkdI//xHgf+VdrW/wdUlv5RG3X/oJ+Y/kIY3f/jCjwBjYdmANC9lgF1s1wAhBaI/3jHHAAVgU/+tglBANqjqQD2k8b/ayaQAU6vzf/WBfr+L1gd/6QvzP8rNwb/g4bP/nRk1gBgjEsBatyQAMMgHAGsUQX/x7M0/yVUywCqcK4ACwRbAEX0GwF1g1wAIZiv/4yZa//7hyv+V4oE/8bqk/55mFT/zWWbAZ0JGQBIahH+bJkA/73lugDBCLD/rpXRAO6CHQDp1n4BPeJmADmjBAHGbzP/LU9OAXPSCv/aCRn/novG/9NSu/5QhVMAnYHmAfOFhv8oiBAATWtP/7dVXAGxzMoAo0eT/5hFvgCsM7wB+tKs/9PycQFZWRr/QEJv/nSYKgChJxv/NlD+AGrRcwFnfGEA3eZi/x/nBgCywHj+D9nL/3yeTwBwkfcAXPowAaO1wf8lL47+kL2l/y6S8AAGS4AAKZ3I/ld51QABcewABS36AJAMUgAfbOcA4e93/6cHvf+75IT/br0iAF4szAGiNMUATrzx/jkUjQD0ki8BzmQzAH1rlP4bw00AmP1aAQePkP8zJR8AIncm/wfFdgCZvNMAlxR0/vVBNP+0/W4BL7HRAKFjEf923soAfbP8AXs2fv+ROb8AN7p5AArzigDN0+X/fZzx/pScuf/jE7z/fCkg/x8izv4ROVMAzBYl/ypgYgB3ZrgBA74cAG5S2v/IzMD/yZF2AHXMkgCEIGIBwMJ5AGqh+AHtWHwAF9QaAM2rWv/4MNgBjSXm/3zLAP6eqB7/1vgVAHC7B/9Lhe//SuPz//qTRgDWeKIApwmz/xaeEgDaTdEBYW1R//Qhs/85NDn/QazS//lH0f+Oqe4Anr2Z/67+Z/5iIQ4AjUzm/3GLNP8POtQAqNfJ//jM1wHfRKD/OZq3/i/neQBqpokAUYiKAKUrMwDniz0AOV87/nZiGf+XP+wBXr76/6m5cgEF+jr/S2lhAdffhgBxY6MBgD5wAGNqkwCjwwoAIc22ANYOrv+BJuf/NbbfAGIqn//3DSgAvNKxAQYVAP//PZT+iS2B/1kadP5+JnIA+zLy/nmGgP/M+af+pevXAMqx8wCFjT4A8IK+AW6v/wAAFJIBJdJ5/wcnggCO+lT/jcjPAAlfaP8L9K4Ahuh+AKcBe/4QwZX/6OnvAdVGcP/8dKD+8t7c/81V4wAHuToAdvc/AXRNsf8+9cj+PxIl/2s16P4y3dMAotsH/gJeKwC2Prb+oE7I/4eMqgDruOQArzWK/lA6Tf+YyQIBP8QiAAUeuACrsJoAeTvOACZjJwCsUE3+AIaXALoh8f5e/d//LHL8AGx+Of/JKA3/J+Ub/yfvFwGXeTP/mZb4AArqrv929gT+yPUmAEWh8gEQspYAcTiCAKsfaQAaWGz/MSpqAPupQgBFXZUAFDn+AKQZbwBavFr/zATFACjVMgHUYIT/WIq0/uSSfP+49vcAQXVW//1m0v7+eSQAiXMD/zwY2ACGEh0AO+JhALCORwAH0aEAvVQz/pv6SADVVOv/Ld7gAO6Uj/+qKjX/Tqd1ALoAKP99sWf/ReFCAOMHWAFLrAYAqS3jARAkRv8yAgn/i8EWAI+35/7aRTIA7DihAdWDKgCKkSz+iOUo/zE/I/89kfX/ZcAC/uincQCYaCYBebnaAHmL0/538CMAQb3Z/ruzov+gu+YAPvgO/zxOYQD/96P/4Ttb/2tHOv/xLyEBMnXsANuxP/70WrMAI8LX/71DMv8Xh4EAaL0l/7k5wgAjPuf/3PhsAAznsgCPUFsBg11l/5AnAgH/+rIABRHs/osgLgDMvCb+9XM0/79xSf6/bEX/FkX1ARfLsgCqY6oAQfhvACVsmf9AJUUAAFg+/lmUkP+/ROAB8Sc1ACnL7f+RfsL/3Sr9/xljlwBh/d8BSnMx/wavSP87sMsAfLf5AeTkYwCBDM/+qMDD/8ywEP6Y6qsATSVV/yF4h/+OwuMBH9Y6ANW7ff/oLjz/vnQq/peyE/8zPu3+zOzBAMLoPACsIp3/vRC4/mcDX/+N6ST+KRkL/xXDpgB29S0AQ9WV/58MEv+7pOMBoBkFAAxOwwErxeEAMI4p/sSbPP/fxxIBkYicAPx1qf6R4u4A7xdrAG21vP/mcDH+Sart/+e34/9Q3BQAwmt/AX/NZQAuNMUB0qsk/1gDWv84l40AYLv//ypOyAD+RkYB9H2oAMxEigF810YAZkLI/hE05AB13I/+y/h7ADgSrv+6l6T/M+jQAaDkK//5HRkBRL4/AA0AAAAA/wAAAAD1AAAAAAAA+wAAAAAAAP0AAAAA8wAAAAAHAAAAAAADAAAAAPMAAAAABQAAAAAAAAAACwAAAAAACwAAAADzAAAAAAAA/QAAAAAA/wAAAAADAAAAAPUAAAAAAAAADwAAAAAA/wAAAAD/AAAAAAcAAAAABQBBnI0CCwEBAEHAjQILAQEAQeCNAgugAeDrenw7QbiuFlbj+vGfxGraCY3rnDKx/YZiBRZfSbgAX5yVvKNQjCSx0LFVnIPvWwREXMRYHI6G2CJO3dCfEVfs////////////////////////////////////////f+3///////////////////////////////////////9/7v///////////////////////////////////////38AQaCPAgvBBQjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FsirijXmC+KQs1l7yORRDdxLztN7M/7wLW824mBpdu16Ti1SPNbwlY5GdAFtvER8VmbTxmvpII/khiBbdrVXhyrQgIDo5iqB9i+b3BFAVuDEoyy5E6+hTEk4rT/1cN9DFVviXvydF2+crGWFjv+sd6ANRLHJacG3JuUJmnPdPGbwdJK8Z7BaZvk4yVPOIZHvu+11YyLxp3BD2WcrHfMoQwkdQIrWW8s6S2D5KZuqoR0StT7Qb3cqbBctVMRg9qI+Xar32buUlE+mBAytC1txjGoPyH7mMgnA7DkDu++x39Zv8KPqD3zC+DGJacKk0eRp9VvggPgUWPKBnBuDgpnKSkU/C/SRoUKtycmySZcOCEbLu0qxFr8bSxN37OVnRMNOFPeY6+LVHMKZaiydzy7Cmp25q7tRy7JwoE7NYIUhSxykmQD8Uyh6L+iATBCvEtmGqiRl/jQcItLwjC+VAajUWzHGFLv1hnoktEQqWVVJAaZ1iogcVeFNQ70uNG7MnCgahDI0NK4FsGkGVOrQVEIbDcemeuO30x3SCeoSJvhtbywNGNaycWzDBw5y4pB40qq2E5z42N3T8qcW6O4stbzby5o/LLvXe6Cj3RgLxdDb2OleHKr8KEUeMiE7DlkGggCx4woHmMj+v++kOm9gt7rbFCkFXnGsvej+b4rU3Lj8nhxxpxhJurOPifKB8LAIce4htEe6+DN1n3a6njRbu5/T331um8Xcqpn8AammMiixX1jCq4N+b4EmD8RG0ccEzULcRuEfQQj9XfbKJMkx0B7q8oyvL7JFQq+njxMDRCcxGcdQ7ZCPsu+1MVMKn5l/Jwpf1ns+tY6q2/LXxdYR0qMGURsgABB8JUCC4UBYjY0X3BvcyA8PSBiNjRfbGVuAHNvZGl1bS9jb2RlY3MuYwBzb2RpdW1fYmluMmJhc2U2NAAkYXJnb24yaWQAJGFyZ29uMmkAJHY9ACRtPQAsdD0ALHA9ACRhcmdvbjJpZCR2PQAkYXJnb24yaSR2PQAkYXJnb24yaWQkACRhcmdvbjJpJABBkJcCCyhTaWdFZDI1NTE5IG5vIEVkMjU1MTkgY29sbGlzaW9ucwEAMS4wLjE4AEG8lwILOVCOUAAAQAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQ==";function nA(A){try{if(A==iA&&w)return new Uint8Array(w);var I=HA(A);if(I)return I;if(t)return t(A);throw"both async and sync fetching of the wasm failed"}catch(A){$(A)}}function aA(){if(!w&&(i||n)){if("function"==typeof fetch&&!QA(iA))return fetch(iA,{credentials:"same-origin"}).then((function(A){if(!A.ok)throw"failed to load wasm binary file at '"+iA+"'";return A.arrayBuffer()})).catch((function(){return nA(iA)}));if(e)return new Promise((function(A,I){e(iA,(function(I){A(new Uint8Array(I))}),I)}))}return Promise.resolve().then((function(){return nA(iA)}))}function rA(){var A={a:bA};function I(A,I){var g=A.exports;Q.asm=g,M((h=Q.asm.g).buffer),d=Q.asm.h,z()}function g(A){I(A.instance)}function B(I){return aA().then((function(I){return WebAssembly.instantiate(I,A)})).then(I,(function(A){D("failed to asynchronously prepare wasm: "+A),$(A)}))}if(O(),Q.instantiateWasm)try{return Q.instantiateWasm(A,I)}catch(A){return D("Module.instantiateWasm callback failed with error: "+A),!1}return w||"function"!=typeof WebAssembly.instantiateStreaming||gA(iA)||QA(iA)||"function"!=typeof fetch?B(g):fetch(iA,{credentials:"same-origin"}).then((function(I){return WebAssembly.instantiateStreaming(I,A).then(g,(function(A){return D("wasm streaming compile failed: "+A),D("falling back to ArrayBuffer instantiation"),B(g)}))})),{}}gA(iA)||(iA=s(iA));var oA={1024:function(){return Q.getRandomValue()},1062:function(){if(void 0===Q.getRandomValue)try{var A="object"==typeof window?window:self,I=void 0!==A.crypto?A.crypto:A.msCrypto,g=function(){var A=new Uint32Array(1);return I.getRandomValues(A),A[0]>>>0};g(),Q.getRandomValue=g}catch(A){try{var B=require("crypto"),C=function(){var A=B.randomBytes(4);return(A[0]<<24|A[1]<<16|A[2]<<8|A[3])>>>0};C(),Q.getRandomValue=C}catch(A){throw"No secure random number generator found"}}}};function eA(A){for(;A.length>0;){var I=A.shift();if("function"!=typeof I){var g=I.func;"number"==typeof g?void 0===I.arg?d.get(g)():d.get(g)(I.arg):g(void 0===I.arg?null:I.arg)}else I(Q)}}function tA(A,I,g,B){$("Assertion failed: "+S(A)+", at: "+[I?S(I):"unknown filename",g,B?S(B):"unknown function"])}function fA(){$()}function cA(A,I,g){var B=lA(I,g);return oA[A].apply(null,B)}function yA(A,I,g){_.copyWithin(A,I,I+g)}function sA(){return _.length}function wA(A){try{return h.grow(A-G.byteLength+65535>>>16),M(h.buffer),1}catch(A){}}function hA(A){A>>>=0;var I=sA(),g=2147483648;if(A>g)return!1;for(var B=1;B<=4;B*=2){var Q=I*(1+.2/B);if(Q=Math.min(Q,A+100663296),wA(Math.min(g,N(Math.max(16777216,A,Q),65536))))return!0}return!1}function DA(A){return Y[vA()>>2]=A,A}function uA(A){switch(A){case 30:return 16384;case 85:return 131072;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==typeof navigator&&navigator.hardwareConcurrency||1}return DA(28),-1}var pA=[];function lA(A,I){var g;for(pA.length=0,I>>=2;g=_[A++];){var B=g<105;B&&1&I&&I++,pA.push(B?m[I++>>1]:Y[I]),++I}return pA}var FA=!1;function GA(A){for(var I=[],g=0;g255&&(FA&&F(!1,"Character code "+B+" ("+String.fromCharCode(B)+") at offset "+g+" not in 0x00-0xFF."),B&=255),I.push(String.fromCharCode(B))}return I.join("")}var kA="function"==typeof atob?atob:function(A){var I,g,B,Q,C,E,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="",a=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{I=i.indexOf(A.charAt(a++))<<2|(Q=i.indexOf(A.charAt(a++)))>>4,g=(15&Q)<<4|(C=i.indexOf(A.charAt(a++)))>>2,B=(3&C)<<6|(E=i.indexOf(A.charAt(a++))),n+=String.fromCharCode(I),64!==C&&(n+=String.fromCharCode(g)),64!==E&&(n+=String.fromCharCode(B))}while(a0||(L(),T>0||(Q.setStatus?(Q.setStatus("Running..."),setTimeout((function(){setTimeout((function(){Q.setStatus("")}),1),I()}),1)):I()))}if(Q._malloc=function(){return(Q._malloc=Q.asm.Bc).apply(null,arguments)},Q._free=function(){return(Q._free=Q.asm.Cc).apply(null,arguments)},Q.setValue=u,Q.getValue=p,Q.UTF8ToString=S,Z=function A(){YA||UA(),YA||(Z=A)},Q.run=UA,Q.preInit)for("function"==typeof Q.preInit&&(Q.preInit=[Q.preInit]);Q.preInit.length>0;)Q.preInit.pop()();UA()})).catch((function(){return B.useBackupModule()})),I}"function"==typeof define&&define.amd?define(["exports"],I):"object"==typeof exports&&"string"!=typeof exports.nodeName?I(exports):A.libsodium=I(A.libsodium_mod||(A.commonJsStrict={}))}(this); - -}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/libsodium/dist/modules") - -},{"_process":390,"buffer":69,"crypto":81,"fs":24,"path":382}],211:[function(require,module,exports){ -(function (global){(function (){ -/** - * lodash (Custom Build) - * Build: `lodash modularize exports="npm" -o ./` - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ - -/** Used as the `TypeError` message for "Functions" methods. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** `Object#toString` result references. */ -var funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - symbolTag = '[object Symbol]'; - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - reLeadingDot = /^\./, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -/** - * Checks if `value` is a host object in IE < 9. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a host object, else `false`. - */ -function isHostObject(value) { - // Many host objects are `Object` objects that can coerce to strings - // despite having improperly defined `toString` methods. - var result = false; - if (value != null && typeof value.toString != 'function') { - try { - result = !!(value + ''); - } catch (e) {} - } - return result; -} - -/** Used for built-in method references. */ -var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** Built-in value references. */ -var Symbol = root.Symbol, - splice = arrayProto.splice; - -/* Built-in method references that are verified to be native. */ -var Map = getNative(root, 'Map'), - nativeCreate = getNative(Object, 'create'); - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; -} - -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - return this.has(key) && delete this.__data__[key]; -} - -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; -} - -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); -} - -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; -} - -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -/** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; -} - -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - return true; -} - -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; -} - -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; -} - -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; -} - -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - return getMapData(this, key)['delete'](key); -} - -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} - -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} - -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - getMapData(this, key).set(key, value); - return this; -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; - -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; -} - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value) { - return isArray(value) ? value : stringToPath(value); -} - -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = memoize(function(string) { - string = toString(string); - - var result = []; - if (reLeadingDot.test(string)) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to process. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -/** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ -function memoize(func, resolver) { - if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result); - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; -} - -// Assign cache to `_.memoize`. -memoize.Cache = MapCache; - -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8-9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; -} - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); -} - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {string} Returns the string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString(value) { - return value == null ? '' : baseToString(value); -} - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; -} - -module.exports = get; - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],212:[function(require,module,exports){ -(function (global){(function (){ -/** - * Lodash (Custom Build) - * Build: `lodash modularize exports="npm" -o ./` - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** Used to detect hot functions by number of calls within a span of milliseconds. */ -var HOT_COUNT = 800, - HOT_SPAN = 16; - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - asyncTag = '[object AsyncFunction]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - nullTag = '[object Null]', - objectTag = '[object Object]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - undefinedTag = '[object Undefined]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[objectTag] = typedArrayTags[regexpTag] = -typedArrayTags[setTag] = typedArrayTags[stringTag] = -typedArrayTags[weakMapTag] = false; - -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Detect free variable `process` from Node.js. */ -var freeProcess = moduleExports && freeGlobal.process; - -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; - - if (types) { - return types; - } - - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); - -/* Node.js helper references. */ -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -/** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} - -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -/** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} - -/** Used for built-in method references. */ -var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto.toString; - -/** Used to infer the `Object` constructor. */ -var objectCtorString = funcToString.call(Object); - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** Built-in value references. */ -var Buffer = moduleExports ? root.Buffer : undefined, - Symbol = root.Symbol, - Uint8Array = root.Uint8Array, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, - getPrototype = overArg(Object.getPrototypeOf, Object), - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - splice = arrayProto.splice, - symToStringTag = Symbol ? Symbol.toStringTag : undefined; - -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, - nativeMax = Math.max, - nativeNow = Date.now; - -/* Built-in method references that are verified to be native. */ -var Map = getNative(root, 'Map'), - nativeCreate = getNative(Object, 'create'); - -/** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ -var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; -}()); - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; -} - -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; -} - -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; -} - -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); -} - -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; -} - -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -/** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; - this.size = 0; -} - -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; -} - -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; -} - -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; -} - -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; -} - -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; -} - -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} - -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} - -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; - -/** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; -} - -/** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ -function stackClear() { - this.__data__ = new ListCache; - this.size = 0; -} - -/** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); - - this.size = data.size; - return result; -} - -/** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function stackGet(key) { - return this.__data__.get(key); -} - -/** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function stackHas(key) { - return this.__data__.has(key); -} - -/** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ -function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; -} - -// Add methods to `Stack`. -Stack.prototype.clear = stackClear; -Stack.prototype['delete'] = stackDelete; -Stack.prototype.get = stackGet; -Stack.prototype.has = stackHas; -Stack.prototype.set = stackSet; - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; -} - -/** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; -} - -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} - -/** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseFor = createBaseFor(); - -/** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); -} - -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; -} - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; -} - -/** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; -} - -/** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ -function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - stack || (stack = new Stack); - if (isObject(srcValue)) { - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, keysIn); -} - -/** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ -function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = safeGet(object, key), - srcValue = safeGet(source, key), - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue); - - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } - else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } - else { - newValue = []; - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || isFunction(objValue)) { - newValue = initCloneObject(srcValue); - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); -} - -/** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ -function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); -} - -/** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); -}; - -/** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ -function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - - buffer.copy(result); - return result; -} - -/** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ -function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; -} - -/** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ -function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); -} - -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ -function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; -} - -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); -} - -/** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; -} - -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -/** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ -function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; - - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; -} - -/** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; -} - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); -} - -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; -} - -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; -} - -/** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; -} - -/** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ -function objectToString(value) { - return nativeObjectToString.call(value); -} - -/** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ -function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; -} - -/** - * Gets the value at `key`, unless `key` is "__proto__" or "constructor". - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function safeGet(object, key) { - if (key === 'constructor' && typeof object[key] === 'function') { - return; - } - - if (key == '__proto__') { - return; - } - - return object[key]; -} - -/** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var setToString = shortOut(baseSetToString); - -/** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ -function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; -} - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -/** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ -function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); -} - -/** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ -var isBuffer = nativeIsBuffer || stubFalse; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; -} - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} - -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} - -/** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ -function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return typeof Ctor == 'function' && Ctor instanceof Ctor && - funcToString.call(Ctor) == objectCtorString; -} - -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - -/** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ -function toPlainObject(value) { - return copyObject(value, keysIn(value)); -} - -/** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ -function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); -} - -/** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var object = { - * 'a': [{ 'b': 2 }, { 'd': 4 }] - * }; - * - * var other = { - * 'a': [{ 'c': 3 }, { 'e': 5 }] - * }; - * - * _.merge(object, other); - * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } - */ -var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); -}); - -/** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ -function constant(value) { - return function() { - return value; - }; -} - -/** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ -function identity(value) { - return value; -} - -/** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example - * - * _.times(2, _.stubFalse); - * // => [false, false] - */ -function stubFalse() { - return false; -} - -module.exports = merge; - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],213:[function(require,module,exports){ -(function (global){(function (){ -/** - * lodash (Custom Build) - * Build: `lodash modularize exports="npm" -o ./` - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - symbolTag = '[object Symbol]'; - -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array ? array.length : 0, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** Built-in value references. */ -var Symbol = root.Symbol, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -/** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick. - * @returns {Object} Returns the new object. - */ -function basePick(object, props) { - object = Object(object); - return basePickBy(object, props, function(value, key) { - return key in object; - }); -} - -/** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick from. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ -function basePickBy(object, props, predicate) { - var index = -1, - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index], - value = object[key]; - - if (predicate(value, key)) { - result[key] = value; - } - } - return result; -} - -/** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ -function baseRest(func, start) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = array; - return apply(func, this, otherArgs); - }; -} - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return isArray(value) || isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -function isArguments(value) { - // Safari 8.1 makes `arguments.callee` enumerable in strict mode. - return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && - (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); -} - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -/** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ -function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); -} - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8-9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; -} - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); -} - -/** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ -var pick = baseRest(function(object, props) { - return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey)); -}); - -module.exports = pick; - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],214:[function(require,module,exports){ -(function (global){(function (){ -/** - * lodash (Custom Build) - * Build: `lodash modularize exports="npm" -o ./` - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ - -/** Used as the `TypeError` message for "Functions" methods. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991; - -/** `Object#toString` result references. */ -var funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - symbolTag = '[object Symbol]'; - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - reLeadingDot = /^\./, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -/** - * Checks if `value` is a host object in IE < 9. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a host object, else `false`. - */ -function isHostObject(value) { - // Many host objects are `Object` objects that can coerce to strings - // despite having improperly defined `toString` methods. - var result = false; - if (value != null && typeof value.toString != 'function') { - try { - result = !!(value + ''); - } catch (e) {} - } - return result; -} - -/** Used for built-in method references. */ -var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** Built-in value references. */ -var Symbol = root.Symbol, - splice = arrayProto.splice; - -/* Built-in method references that are verified to be native. */ -var Map = getNative(root, 'Map'), - nativeCreate = getNative(Object, 'create'); - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; -} - -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - return this.has(key) && delete this.__data__[key]; -} - -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; -} - -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); -} - -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; -} - -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -/** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; -} - -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - return true; -} - -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; -} - -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; -} - -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; -} - -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - return getMapData(this, key)['delete'](key); -} - -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} - -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} - -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - getMapData(this, key).set(key, value); - return this; -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - object[key] = value; - } -} - -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; -} - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; -} - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value) { - return isArray(value) ? value : stringToPath(value); -} - -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); -} - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = memoize(function(string) { - string = toString(string); - - var result = []; - if (reLeadingDot.test(string)) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to process. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -/** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ -function memoize(func, resolver) { - if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result); - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; -} - -// Assign cache to `_.memoize`. -memoize.Cache = MapCache; - -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8-9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; -} - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); -} - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {string} Returns the string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString(value) { - return value == null ? '' : baseToString(value); -} - -/** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 - */ -function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); -} - -module.exports = set; - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],215:[function(require,module,exports){ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var DataView = getNative(root, 'DataView'); - -module.exports = DataView; - -},{"./_getNative":277,"./_root":314}],216:[function(require,module,exports){ -var hashClear = require('./_hashClear'), - hashDelete = require('./_hashDelete'), - hashGet = require('./_hashGet'), - hashHas = require('./_hashHas'), - hashSet = require('./_hashSet'); - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -module.exports = Hash; - -},{"./_hashClear":285,"./_hashDelete":286,"./_hashGet":287,"./_hashHas":288,"./_hashSet":289}],217:[function(require,module,exports){ -var listCacheClear = require('./_listCacheClear'), - listCacheDelete = require('./_listCacheDelete'), - listCacheGet = require('./_listCacheGet'), - listCacheHas = require('./_listCacheHas'), - listCacheSet = require('./_listCacheSet'); - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; - -module.exports = ListCache; - -},{"./_listCacheClear":296,"./_listCacheDelete":297,"./_listCacheGet":298,"./_listCacheHas":299,"./_listCacheSet":300}],218:[function(require,module,exports){ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Map = getNative(root, 'Map'); - -module.exports = Map; - -},{"./_getNative":277,"./_root":314}],219:[function(require,module,exports){ -var mapCacheClear = require('./_mapCacheClear'), - mapCacheDelete = require('./_mapCacheDelete'), - mapCacheGet = require('./_mapCacheGet'), - mapCacheHas = require('./_mapCacheHas'), - mapCacheSet = require('./_mapCacheSet'); - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; - -module.exports = MapCache; - -},{"./_mapCacheClear":301,"./_mapCacheDelete":302,"./_mapCacheGet":303,"./_mapCacheHas":304,"./_mapCacheSet":305}],220:[function(require,module,exports){ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Promise = getNative(root, 'Promise'); - -module.exports = Promise; - -},{"./_getNative":277,"./_root":314}],221:[function(require,module,exports){ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Set = getNative(root, 'Set'); - -module.exports = Set; - -},{"./_getNative":277,"./_root":314}],222:[function(require,module,exports){ -var MapCache = require('./_MapCache'), - setCacheAdd = require('./_setCacheAdd'), - setCacheHas = require('./_setCacheHas'); - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; -SetCache.prototype.has = setCacheHas; - -module.exports = SetCache; - -},{"./_MapCache":219,"./_setCacheAdd":315,"./_setCacheHas":316}],223:[function(require,module,exports){ -var ListCache = require('./_ListCache'), - stackClear = require('./_stackClear'), - stackDelete = require('./_stackDelete'), - stackGet = require('./_stackGet'), - stackHas = require('./_stackHas'), - stackSet = require('./_stackSet'); - -/** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; -} - -// Add methods to `Stack`. -Stack.prototype.clear = stackClear; -Stack.prototype['delete'] = stackDelete; -Stack.prototype.get = stackGet; -Stack.prototype.has = stackHas; -Stack.prototype.set = stackSet; - -module.exports = Stack; - -},{"./_ListCache":217,"./_stackClear":318,"./_stackDelete":319,"./_stackGet":320,"./_stackHas":321,"./_stackSet":322}],224:[function(require,module,exports){ -var root = require('./_root'); - -/** Built-in value references. */ -var Symbol = root.Symbol; - -module.exports = Symbol; - -},{"./_root":314}],225:[function(require,module,exports){ -var root = require('./_root'); - -/** Built-in value references. */ -var Uint8Array = root.Uint8Array; - -module.exports = Uint8Array; - -},{"./_root":314}],226:[function(require,module,exports){ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var WeakMap = getNative(root, 'WeakMap'); - -module.exports = WeakMap; - -},{"./_getNative":277,"./_root":314}],227:[function(require,module,exports){ -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -module.exports = arrayFilter; - -},{}],228:[function(require,module,exports){ -var baseTimes = require('./_baseTimes'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isIndex = require('./_isIndex'), - isTypedArray = require('./isTypedArray'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; -} - -module.exports = arrayLikeKeys; - -},{"./_baseTimes":258,"./_isIndex":290,"./isArguments":337,"./isArray":338,"./isBuffer":340,"./isTypedArray":346}],229:[function(require,module,exports){ -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -module.exports = arrayMap; - -},{}],230:[function(require,module,exports){ -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -module.exports = arrayPush; - -},{}],231:[function(require,module,exports){ -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -module.exports = arrayReduce; - -},{}],232:[function(require,module,exports){ -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -module.exports = arraySome; - -},{}],233:[function(require,module,exports){ -/** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function asciiToArray(string) { - return string.split(''); -} - -module.exports = asciiToArray; - -},{}],234:[function(require,module,exports){ -/** Used to match words composed of alphanumeric characters. */ -var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - -/** - * Splits an ASCII `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ -function asciiWords(string) { - return string.match(reAsciiWord) || []; -} - -module.exports = asciiWords; - -},{}],235:[function(require,module,exports){ -var eq = require('./eq'); - -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; -} - -module.exports = assocIndexOf; - -},{"./eq":332}],236:[function(require,module,exports){ -var defineProperty = require('./_defineProperty'); - -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} - -module.exports = baseAssignValue; - -},{"./_defineProperty":269}],237:[function(require,module,exports){ -var createBaseFor = require('./_createBaseFor'); - -/** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseFor = createBaseFor(); - -module.exports = baseFor; - -},{"./_createBaseFor":265}],238:[function(require,module,exports){ -var baseFor = require('./_baseFor'), - keys = require('./keys'); - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); -} - -module.exports = baseForOwn; - -},{"./_baseFor":237,"./keys":347}],239:[function(require,module,exports){ -var castPath = require('./_castPath'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = castPath(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -module.exports = baseGet; - -},{"./_castPath":262,"./_toKey":325}],240:[function(require,module,exports){ -var arrayPush = require('./_arrayPush'), - isArray = require('./isArray'); - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); -} - -module.exports = baseGetAllKeys; - -},{"./_arrayPush":230,"./isArray":338}],241:[function(require,module,exports){ -var Symbol = require('./_Symbol'), - getRawTag = require('./_getRawTag'), - objectToString = require('./_objectToString'); - -/** `Object#toString` result references. */ -var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; - -/** Built-in value references. */ -var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - -/** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); -} - -module.exports = baseGetTag; - -},{"./_Symbol":224,"./_getRawTag":278,"./_objectToString":312}],242:[function(require,module,exports){ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); -} - -module.exports = baseHas; - -},{}],243:[function(require,module,exports){ -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -module.exports = baseHasIn; - -},{}],244:[function(require,module,exports){ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]'; - -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; -} - -module.exports = baseIsArguments; - -},{"./_baseGetTag":241,"./isObjectLike":344}],245:[function(require,module,exports){ -var baseIsEqualDeep = require('./_baseIsEqualDeep'), - isObjectLike = require('./isObjectLike'); - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -module.exports = baseIsEqual; - -},{"./_baseIsEqualDeep":246,"./isObjectLike":344}],246:[function(require,module,exports){ -var Stack = require('./_Stack'), - equalArrays = require('./_equalArrays'), - equalByTag = require('./_equalByTag'), - equalObjects = require('./_equalObjects'), - getTag = require('./_getTag'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isTypedArray = require('./isTypedArray'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = objIsArr ? arrayTag : getTag(object), - othTag = othIsArr ? arrayTag : getTag(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -module.exports = baseIsEqualDeep; - -},{"./_Stack":223,"./_equalArrays":270,"./_equalByTag":271,"./_equalObjects":272,"./_getTag":280,"./isArray":338,"./isBuffer":340,"./isTypedArray":346}],247:[function(require,module,exports){ -var Stack = require('./_Stack'), - baseIsEqual = require('./_baseIsEqual'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; -} - -module.exports = baseIsMatch; - -},{"./_Stack":223,"./_baseIsEqual":245}],248:[function(require,module,exports){ -var isFunction = require('./isFunction'), - isMasked = require('./_isMasked'), - isObject = require('./isObject'), - toSource = require('./_toSource'); - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -module.exports = baseIsNative; - -},{"./_isMasked":293,"./_toSource":326,"./isFunction":341,"./isObject":343}],249:[function(require,module,exports){ -var baseGetTag = require('./_baseGetTag'), - isLength = require('./isLength'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[objectTag] = typedArrayTags[regexpTag] = -typedArrayTags[setTag] = typedArrayTags[stringTag] = -typedArrayTags[weakMapTag] = false; - -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; -} - -module.exports = baseIsTypedArray; - -},{"./_baseGetTag":241,"./isLength":342,"./isObjectLike":344}],250:[function(require,module,exports){ -var baseMatches = require('./_baseMatches'), - baseMatchesProperty = require('./_baseMatchesProperty'), - identity = require('./identity'), - isArray = require('./isArray'), - property = require('./property'); - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); -} - -module.exports = baseIteratee; - -},{"./_baseMatches":252,"./_baseMatchesProperty":253,"./identity":336,"./isArray":338,"./property":352}],251:[function(require,module,exports){ -var isPrototype = require('./_isPrototype'), - nativeKeys = require('./_nativeKeys'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -module.exports = baseKeys; - -},{"./_isPrototype":294,"./_nativeKeys":310}],252:[function(require,module,exports){ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'), - matchesStrictComparable = require('./_matchesStrictComparable'); - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; -} - -module.exports = baseMatches; - -},{"./_baseIsMatch":247,"./_getMatchData":276,"./_matchesStrictComparable":307}],253:[function(require,module,exports){ -var baseIsEqual = require('./_baseIsEqual'), - get = require('./get'), - hasIn = require('./hasIn'), - isKey = require('./_isKey'), - isStrictComparable = require('./_isStrictComparable'), - matchesStrictComparable = require('./_matchesStrictComparable'), - toKey = require('./_toKey'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; -} - -module.exports = baseMatchesProperty; - -},{"./_baseIsEqual":245,"./_isKey":291,"./_isStrictComparable":295,"./_matchesStrictComparable":307,"./_toKey":325,"./get":333,"./hasIn":335}],254:[function(require,module,exports){ -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -module.exports = baseProperty; - -},{}],255:[function(require,module,exports){ -var baseGet = require('./_baseGet'); - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; -} - -module.exports = basePropertyDeep; - -},{"./_baseGet":239}],256:[function(require,module,exports){ -/** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; -} - -module.exports = basePropertyOf; - -},{}],257:[function(require,module,exports){ -/** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ -function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; -} - -module.exports = baseSlice; - -},{}],258:[function(require,module,exports){ -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -module.exports = baseTimes; - -},{}],259:[function(require,module,exports){ -var Symbol = require('./_Symbol'), - arrayMap = require('./_arrayMap'), - isArray = require('./isArray'), - isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -module.exports = baseToString; - -},{"./_Symbol":224,"./_arrayMap":229,"./isArray":338,"./isSymbol":345}],260:[function(require,module,exports){ -/** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} - -module.exports = baseUnary; - -},{}],261:[function(require,module,exports){ -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -module.exports = cacheHas; - -},{}],262:[function(require,module,exports){ -var isArray = require('./isArray'), - isKey = require('./_isKey'), - stringToPath = require('./_stringToPath'), - toString = require('./toString'); - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if (isArray(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString(value)); -} - -module.exports = castPath; - -},{"./_isKey":291,"./_stringToPath":324,"./isArray":338,"./toString":356}],263:[function(require,module,exports){ -var baseSlice = require('./_baseSlice'); - -/** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ -function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); -} - -module.exports = castSlice; - -},{"./_baseSlice":257}],264:[function(require,module,exports){ -var root = require('./_root'); - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -module.exports = coreJsData; - -},{"./_root":314}],265:[function(require,module,exports){ -/** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; -} - -module.exports = createBaseFor; - -},{}],266:[function(require,module,exports){ -var castSlice = require('./_castSlice'), - hasUnicode = require('./_hasUnicode'), - stringToArray = require('./_stringToArray'), - toString = require('./toString'); - -/** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ -function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; -} - -module.exports = createCaseFirst; - -},{"./_castSlice":263,"./_hasUnicode":283,"./_stringToArray":323,"./toString":356}],267:[function(require,module,exports){ -var arrayReduce = require('./_arrayReduce'), - deburr = require('./deburr'), - words = require('./words'); - -/** Used to compose unicode capture groups. */ -var rsApos = "['\u2019]"; - -/** Used to match apostrophes. */ -var reApos = RegExp(rsApos, 'g'); - -/** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ -function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; -} - -module.exports = createCompounder; - -},{"./_arrayReduce":231,"./deburr":331,"./words":358}],268:[function(require,module,exports){ -var basePropertyOf = require('./_basePropertyOf'); - -/** Used to map Latin Unicode letters to basic Latin letters. */ -var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', - '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', - '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', - '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', - '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', - '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', - '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', - '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', - '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', - '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', - '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', - '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', - '\u0134': 'J', '\u0135': 'j', - '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', - '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', - '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', - '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', - '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', - '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', - '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', - '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', - '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', - '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', - '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', - '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', - '\u0163': 't', '\u0165': 't', '\u0167': 't', - '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', - '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', - '\u0174': 'W', '\u0175': 'w', - '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', - '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', - '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', - '\u0132': 'IJ', '\u0133': 'ij', - '\u0152': 'Oe', '\u0153': 'oe', - '\u0149': "'n", '\u017f': 's' -}; - -/** - * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A - * letters to basic Latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ -var deburrLetter = basePropertyOf(deburredLetters); - -module.exports = deburrLetter; - -},{"./_basePropertyOf":256}],269:[function(require,module,exports){ -var getNative = require('./_getNative'); - -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); - -module.exports = defineProperty; - -},{"./_getNative":277}],270:[function(require,module,exports){ -var SetCache = require('./_SetCache'), - arraySome = require('./_arraySome'), - cacheHas = require('./_cacheHas'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -module.exports = equalArrays; - -},{"./_SetCache":222,"./_arraySome":232,"./_cacheHas":261}],271:[function(require,module,exports){ -var Symbol = require('./_Symbol'), - Uint8Array = require('./_Uint8Array'), - eq = require('./eq'), - equalArrays = require('./_equalArrays'), - mapToArray = require('./_mapToArray'), - setToArray = require('./_setToArray'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG; - convert || (convert = setToArray); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; +},{}],204:[function(require,module,exports){ +module.exports={ + "com.ac": true, + "net.ac": true, + "gov.ac": true, + "org.ac": true, + "mil.ac": true, + "co.ae": true, + "net.ae": true, + "gov.ae": true, + "ac.ae": true, + "sch.ae": true, + "org.ae": true, + "mil.ae": true, + "pro.ae": true, + "name.ae": true, + "com.af": true, + "edu.af": true, + "gov.af": true, + "net.af": true, + "org.af": true, + "com.al": true, + "edu.al": true, + "gov.al": true, + "mil.al": true, + "net.al": true, + "org.al": true, + "ed.ao": true, + "gv.ao": true, + "og.ao": true, + "co.ao": true, + "pb.ao": true, + "it.ao": true, + "com.ar": true, + "edu.ar": true, + "gob.ar": true, + "gov.ar": true, + "int.ar": true, + "mil.ar": true, + "net.ar": true, + "org.ar": true, + "tur.ar": true, + "gv.at": true, + "ac.at": true, + "co.at": true, + "or.at": true, + "com.au": true, + "net.au": true, + "org.au": true, + "edu.au": true, + "gov.au": true, + "csiro.au": true, + "asn.au": true, + "id.au": true, + "vic.au": true, + "sa.au": true, + "wa.au": true, + "nt.au": true, + "tas.au": true, + "qld.au": true, + "act.au": true, + "conf.au": true, + "oz.au": true, + "org.ba": true, + "net.ba": true, + "edu.ba": true, + "gov.ba": true, + "mil.ba": true, + "unsa.ba": true, + "untz.ba": true, + "unmo.ba": true, + "unbi.ba": true, + "unze.ba": true, + "co.ba": true, + "com.ba": true, + "rs.ba": true, + "co.bb": true, + "com.bb": true, + "net.bb": true, + "org.bb": true, + "gov.bb": true, + "edu.bb": true, + "info.bb": true, + "store.bb": true, + "tv.bb": true, + "biz.bb": true, + "com.bh": true, + "info.bh": true, + "cc.bh": true, + "edu.bh": true, + "biz.bh": true, + "net.bh": true, + "org.bh": true, + "gov.bh": true, + "com.bn": true, + "edu.bn": true, + "gov.bn": true, + "net.bn": true, + "org.bn": true, + "com.bo": true, + "net.bo": true, + "org.bo": true, + "tv.bo": true, + "mil.bo": true, + "int.bo": true, + "gob.bo": true, + "gov.bo": true, + "edu.bo": true, + "adm.br": true, + "adv.br": true, + "agr.br": true, + "am.br": true, + "arq.br": true, + "art.br": true, + "ato.br": true, + "b.br": true, + "bio.br": true, + "blog.br": true, + "bmd.br": true, + "cim.br": true, + "cng.br": true, + "cnt.br": true, + "com.br": true, + "coop.br": true, + "ecn.br": true, + "edu.br": true, + "eng.br": true, + "esp.br": true, + "etc.br": true, + "eti.br": true, + "far.br": true, + "flog.br": true, + "fm.br": true, + "fnd.br": true, + "fot.br": true, + "fst.br": true, + "g12.br": true, + "ggf.br": true, + "gov.br": true, + "imb.br": true, + "ind.br": true, + "inf.br": true, + "jor.br": true, + "jus.br": true, + "lel.br": true, + "mat.br": true, + "med.br": true, + "mil.br": true, + "mus.br": true, + "net.br": true, + "nom.br": true, + "not.br": true, + "ntr.br": true, + "odo.br": true, + "org.br": true, + "ppg.br": true, + "pro.br": true, + "psc.br": true, + "psi.br": true, + "qsl.br": true, + "rec.br": true, + "slg.br": true, + "srv.br": true, + "tmp.br": true, + "trd.br": true, + "tur.br": true, + "tv.br": true, + "vet.br": true, + "vlog.br": true, + "wiki.br": true, + "zlg.br": true, + "com.bs": true, + "net.bs": true, + "org.bs": true, + "edu.bs": true, + "gov.bs": true, + "om.bz": true, + "du.bz": true, + "ov.bz": true, + "et.bz": true, + "rg.bz": true, + "ab.ca": true, + "bc.ca": true, + "mb.ca": true, + "nb.ca": true, + "nf.ca": true, + "nl.ca": true, + "ns.ca": true, + "nt.ca": true, + "nu.ca": true, + "on.ca": true, + "pe.ca": true, + "qc.ca": true, + "sk.ca": true, + "yk.ca": true, + "co.ck": true, + "org.ck": true, + "edu.ck": true, + "gov.ck": true, + "net.ck": true, + "gen.ck": true, + "biz.ck": true, + "info.ck": true, + "ac.cn": true, + "com.cn": true, + "edu.cn": true, + "gov.cn": true, + "mil.cn": true, + "net.cn": true, + "org.cn": true, + "ah.cn": true, + "bj.cn": true, + "cq.cn": true, + "fj.cn": true, + "gd.cn": true, + "gs.cn": true, + "gz.cn": true, + "gx.cn": true, + "ha.cn": true, + "hb.cn": true, + "he.cn": true, + "hi.cn": true, + "hl.cn": true, + "hn.cn": true, + "jl.cn": true, + "js.cn": true, + "jx.cn": true, + "ln.cn": true, + "nm.cn": true, + "nx.cn": true, + "qh.cn": true, + "sc.cn": true, + "sd.cn": true, + "sh.cn": true, + "sn.cn": true, + "sx.cn": true, + "tj.cn": true, + "tw.cn": true, + "xj.cn": true, + "xz.cn": true, + "yn.cn": true, + "zj.cn": true, + "com.co": true, + "org.co": true, + "edu.co": true, + "gov.co": true, + "net.co": true, + "mil.co": true, + "nom.co": true, + "ac.cr": true, + "co.cr": true, + "ed.cr": true, + "fi.cr": true, + "go.cr": true, + "or.cr": true, + "sa.cr": true, + "cr": true, + "ac.cy": true, + "net.cy": true, + "gov.cy": true, + "org.cy": true, + "pro.cy": true, + "name.cy": true, + "ekloges.cy": true, + "tm.cy": true, + "ltd.cy": true, + "biz.cy": true, + "press.cy": true, + "parliament.cy": true, + "com.cy": true, + "edu.do": true, + "gob.do": true, + "gov.do": true, + "com.do": true, + "sld.do": true, + "org.do": true, + "net.do": true, + "web.do": true, + "mil.do": true, + "art.do": true, + "com.dz": true, + "org.dz": true, + "net.dz": true, + "gov.dz": true, + "edu.dz": true, + "asso.dz": true, + "pol.dz": true, + "art.dz": true, + "com.ec": true, + "info.ec": true, + "net.ec": true, + "fin.ec": true, + "med.ec": true, + "pro.ec": true, + "org.ec": true, + "edu.ec": true, + "gov.ec": true, + "mil.ec": true, + "com.eg": true, + "edu.eg": true, + "eun.eg": true, + "gov.eg": true, + "mil.eg": true, + "name.eg": true, + "net.eg": true, + "org.eg": true, + "sci.eg": true, + "com.er": true, + "edu.er": true, + "gov.er": true, + "mil.er": true, + "net.er": true, + "org.er": true, + "ind.er": true, + "rochest.er": true, + "w.er": true, + "com.es": true, + "nom.es": true, + "org.es": true, + "gob.es": true, + "edu.es": true, + "com.et": true, + "gov.et": true, + "org.et": true, + "edu.et": true, + "net.et": true, + "biz.et": true, + "name.et": true, + "info.et": true, + "ac.fj": true, + "biz.fj": true, + "com.fj": true, + "info.fj": true, + "mil.fj": true, + "name.fj": true, + "net.fj": true, + "org.fj": true, + "pro.fj": true, + "co.fk": true, + "org.fk": true, + "gov.fk": true, + "ac.fk": true, + "nom.fk": true, + "net.fk": true, + "fr": true, + "tm.fr": true, + "asso.fr": true, + "nom.fr": true, + "prd.fr": true, + "presse.fr": true, + "com.fr": true, + "gouv.fr": true, + "co.gg": true, + "net.gg": true, + "org.gg": true, + "com.gh": true, + "edu.gh": true, + "gov.gh": true, + "org.gh": true, + "mil.gh": true, + "co.gl": true, + "com.gl": true, + "edu.gl": true, + "net.gl": true, + "org.gl": true, + "com.gn": true, + "ac.gn": true, + "gov.gn": true, + "org.gn": true, + "net.gn": true, + "com.gr": true, + "edu.gr": true, + "net.gr": true, + "org.gr": true, + "gov.gr": true, + "mil.gr": true, + "com.gt": true, + "edu.gt": true, + "net.gt": true, + "gob.gt": true, + "org.gt": true, + "mil.gt": true, + "ind.gt": true, + "com.gu": true, + "net.gu": true, + "gov.gu": true, + "org.gu": true, + "edu.gu": true, + "com.hk": true, + "edu.hk": true, + "gov.hk": true, + "idv.hk": true, + "net.hk": true, + "org.hk": true, + "2000.hu": true, + "agrar.hu": true, + "bolt.hu": true, + "casino.hu": true, + "city.hu": true, + "co.hu": true, + "erotica.hu": true, + "erotika.hu": true, + "film.hu": true, + "forum.hu": true, + "games.hu": true, + "hotel.hu": true, + "info.hu": true, + "ingatlan.hu": true, + "jogasz.hu": true, + "konyvelo.hu": true, + "lakas.hu": true, + "media.hu": true, + "news.hu": true, + "org.hu": true, + "priv.hu": true, + "reklam.hu": true, + "sex.hu": true, + "shop.hu": true, + "sport.hu": true, + "suli.huv": true, + "szex.hu": true, + "tm.hu": true, + "tozsde.hu": true, + "utazas.hu": true, + "video.hu": true, + "ac.id": true, + "co.id": true, + "net.id": true, + "or.id": true, + "web.id": true, + "sch.id": true, + "mil.id": true, + "go.id": true, + "war.net.id": true, + "my.id": true, + "biz.id": true, + "ac.il": true, + "co.il": true, + "org.il": true, + "net.il": true, + "k12.il": true, + "gov.il": true, + "muni.il": true, + "idf.il": true, + "in": true, + "4fd.in": true, + "co.in": true, + "firm.in": true, + "net.in": true, + "org.in": true, + "gen.in": true, + "ind.in": true, + "ac.in": true, + "edu.in": true, + "res.in": true, + "ernet.in": true, + "gov.in": true, + "mil.in": true, + "nic.in": true, + "iq": true, + "gov.iq": true, + "edu.iq": true, + "com.iq": true, + "mil.iq": true, + "org.iq": true, + "net.iq": true, + "ir": true, + "ac.ir": true, + "co.ir": true, + "gov.ir": true, + "id.ir": true, + "net.ir": true, + "org.ir": true, + "sch.ir": true, + "dnssec.ir": true, + "gov.it": true, + "edu.it": true, + "co.je": true, + "net.je": true, + "org.je": true, + "com.jo": true, + "net.jo": true, + "gov.jo": true, + "edu.jo": true, + "org.jo": true, + "mil.jo": true, + "name.jo": true, + "sch.jo": true, + "ac.jp": true, + "ad.jp": true, + "co.jp": true, + "ed.jp": true, + "go.jp": true, + "gr.jp": true, + "lg.jp": true, + "ne.jp": true, + "or.jp": true, + "co.ke": true, + "or.ke": true, + "ne.ke": true, + "go.ke": true, + "ac.ke": true, + "sc.ke": true, + "me.ke": true, + "mobi.ke": true, + "info.ke": true, + "per.kh": true, + "com.kh": true, + "edu.kh": true, + "gov.kh": true, + "mil.kh": true, + "net.kh": true, + "org.kh": true, + "com.ki": true, + "biz.ki": true, + "de.ki": true, + "net.ki": true, + "info.ki": true, + "org.ki": true, + "gov.ki": true, + "edu.ki": true, + "mob.ki": true, + "tel.ki": true, + "km": true, + "com.km": true, + "coop.km": true, + "asso.km": true, + "nom.km": true, + "presse.km": true, + "tm.km": true, + "medecin.km": true, + "notaires.km": true, + "pharmaciens.km": true, + "veterinaire.km": true, + "edu.km": true, + "gouv.km": true, + "mil.km": true, + "net.kn": true, + "org.kn": true, + "edu.kn": true, + "gov.kn": true, + "kr": true, + "co.kr": true, + "ne.kr": true, + "or.kr": true, + "re.kr": true, + "pe.kr": true, + "go.kr": true, + "mil.kr": true, + "ac.kr": true, + "hs.kr": true, + "ms.kr": true, + "es.kr": true, + "sc.kr": true, + "kg.kr": true, + "seoul.kr": true, + "busan.kr": true, + "daegu.kr": true, + "incheon.kr": true, + "gwangju.kr": true, + "daejeon.kr": true, + "ulsan.kr": true, + "gyeonggi.kr": true, + "gangwon.kr": true, + "chungbuk.kr": true, + "chungnam.kr": true, + "jeonbuk.kr": true, + "jeonnam.kr": true, + "gyeongbuk.kr": true, + "gyeongnam.kr": true, + "jeju.kr": true, + "edu.kw": true, + "com.kw": true, + "net.kw": true, + "org.kw": true, + "gov.kw": true, + "com.ky": true, + "org.ky": true, + "net.ky": true, + "edu.ky": true, + "gov.ky": true, + "com.kz": true, + "edu.kz": true, + "gov.kz": true, + "mil.kz": true, + "net.kz": true, + "org.kz": true, + "com.lb": true, + "edu.lb": true, + "gov.lb": true, + "net.lb": true, + "org.lb": true, + "gov.lk": true, + "sch.lk": true, + "net.lk": true, + "int.lk": true, + "com.lk": true, + "org.lk": true, + "edu.lk": true, + "ngo.lk": true, + "soc.lk": true, + "web.lk": true, + "ltd.lk": true, + "assn.lk": true, + "grp.lk": true, + "hotel.lk": true, + "com.lr": true, + "edu.lr": true, + "gov.lr": true, + "org.lr": true, + "net.lr": true, + "com.lv": true, + "edu.lv": true, + "gov.lv": true, + "org.lv": true, + "mil.lv": true, + "id.lv": true, + "net.lv": true, + "asn.lv": true, + "conf.lv": true, + "com.ly": true, + "net.ly": true, + "gov.ly": true, + "plc.ly": true, + "edu.ly": true, + "sch.ly": true, + "med.ly": true, + "org.ly": true, + "id.ly": true, + "ma": true, + "net.ma": true, + "ac.ma": true, + "org.ma": true, + "gov.ma": true, + "press.ma": true, + "co.ma": true, + "tm.mc": true, + "asso.mc": true, + "co.me": true, + "net.me": true, + "org.me": true, + "edu.me": true, + "ac.me": true, + "gov.me": true, + "its.me": true, + "priv.me": true, + "org.mg": true, + "nom.mg": true, + "gov.mg": true, + "prd.mg": true, + "tm.mg": true, + "edu.mg": true, + "mil.mg": true, + "com.mg": true, + "com.mk": true, + "org.mk": true, + "net.mk": true, + "edu.mk": true, + "gov.mk": true, + "inf.mk": true, + "name.mk": true, + "pro.mk": true, + "com.ml": true, + "net.ml": true, + "org.ml": true, + "edu.ml": true, + "gov.ml": true, + "presse.ml": true, + "gov.mn": true, + "edu.mn": true, + "org.mn": true, + "com.mo": true, + "edu.mo": true, + "gov.mo": true, + "net.mo": true, + "org.mo": true, + "com.mt": true, + "org.mt": true, + "net.mt": true, + "edu.mt": true, + "gov.mt": true, + "aero.mv": true, + "biz.mv": true, + "com.mv": true, + "coop.mv": true, + "edu.mv": true, + "gov.mv": true, + "info.mv": true, + "int.mv": true, + "mil.mv": true, + "museum.mv": true, + "name.mv": true, + "net.mv": true, + "org.mv": true, + "pro.mv": true, + "ac.mw": true, + "co.mw": true, + "com.mw": true, + "coop.mw": true, + "edu.mw": true, + "gov.mw": true, + "int.mw": true, + "museum.mw": true, + "net.mw": true, + "org.mw": true, + "com.mx": true, + "net.mx": true, + "org.mx": true, + "edu.mx": true, + "gob.mx": true, + "com.my": true, + "net.my": true, + "org.my": true, + "gov.my": true, + "edu.my": true, + "sch.my": true, + "mil.my": true, + "name.my": true, + "com.nf": true, + "net.nf": true, + "arts.nf": true, + "store.nf": true, + "web.nf": true, + "firm.nf": true, + "info.nf": true, + "other.nf": true, + "per.nf": true, + "rec.nf": true, + "com.ng": true, + "org.ng": true, + "gov.ng": true, + "edu.ng": true, + "net.ng": true, + "sch.ng": true, + "name.ng": true, + "mobi.ng": true, + "biz.ng": true, + "mil.ng": true, + "gob.ni": true, + "co.ni": true, + "com.ni": true, + "ac.ni": true, + "edu.ni": true, + "org.ni": true, + "nom.ni": true, + "net.ni": true, + "mil.ni": true, + "com.np": true, + "edu.np": true, + "gov.np": true, + "org.np": true, + "mil.np": true, + "net.np": true, + "edu.nr": true, + "gov.nr": true, + "biz.nr": true, + "info.nr": true, + "net.nr": true, + "org.nr": true, + "com.nr": true, + "com.om": true, + "co.om": true, + "edu.om": true, + "ac.om": true, + "sch.om": true, + "gov.om": true, + "net.om": true, + "org.om": true, + "mil.om": true, + "museum.om": true, + "biz.om": true, + "pro.om": true, + "med.om": true, + "edu.pe": true, + "gob.pe": true, + "nom.pe": true, + "mil.pe": true, + "sld.pe": true, + "org.pe": true, + "com.pe": true, + "net.pe": true, + "com.ph": true, + "net.ph": true, + "org.ph": true, + "mil.ph": true, + "ngo.ph": true, + "i.ph": true, + "gov.ph": true, + "edu.ph": true, + "com.pk": true, + "net.pk": true, + "edu.pk": true, + "org.pk": true, + "fam.pk": true, + "biz.pk": true, + "web.pk": true, + "gov.pk": true, + "gob.pk": true, + "gok.pk": true, + "gon.pk": true, + "gop.pk": true, + "gos.pk": true, + "pwr.pl": true, + "com.pl": true, + "biz.pl": true, + "net.pl": true, + "art.pl": true, + "edu.pl": true, + "org.pl": true, + "ngo.pl": true, + "gov.pl": true, + "info.pl": true, + "mil.pl": true, + "waw.pl": true, + "warszawa.pl": true, + "wroc.pl": true, + "wroclaw.pl": true, + "krakow.pl": true, + "katowice.pl": true, + "poznan.pl": true, + "lodz.pl": true, + "gda.pl": true, + "gdansk.pl": true, + "slupsk.pl": true, + "radom.pl": true, + "szczecin.pl": true, + "lublin.pl": true, + "bialystok.pl": true, + "olsztyn.pl": true, + "torun.pl": true, + "gorzow.pl": true, + "zgora.pl": true, + "biz.pr": true, + "com.pr": true, + "edu.pr": true, + "gov.pr": true, + "info.pr": true, + "isla.pr": true, + "name.pr": true, + "net.pr": true, + "org.pr": true, + "pro.pr": true, + "est.pr": true, + "prof.pr": true, + "ac.pr": true, + "com.ps": true, + "net.ps": true, + "org.ps": true, + "edu.ps": true, + "gov.ps": true, + "plo.ps": true, + "sec.ps": true, + "co.pw": true, + "ne.pw": true, + "or.pw": true, + "ed.pw": true, + "go.pw": true, + "belau.pw": true, + "arts.ro": true, + "com.ro": true, + "firm.ro": true, + "info.ro": true, + "nom.ro": true, + "nt.ro": true, + "org.ro": true, + "rec.ro": true, + "store.ro": true, + "tm.ro": true, + "www.ro": true, + "co.rs": true, + "org.rs": true, + "edu.rs": true, + "ac.rs": true, + "gov.rs": true, + "in.rs": true, + "com.sb": true, + "net.sb": true, + "edu.sb": true, + "org.sb": true, + "gov.sb": true, + "com.sc": true, + "net.sc": true, + "edu.sc": true, + "gov.sc": true, + "org.sc": true, + "co.sh": true, + "com.sh": true, + "org.sh": true, + "gov.sh": true, + "edu.sh": true, + "net.sh": true, + "nom.sh": true, + "com.sl": true, + "net.sl": true, + "org.sl": true, + "edu.sl": true, + "gov.sl": true, + "gov.st": true, + "saotome.st": true, + "principe.st": true, + "consulado.st": true, + "embaixada.st": true, + "org.st": true, + "edu.st": true, + "net.st": true, + "com.st": true, + "store.st": true, + "mil.st": true, + "co.st": true, + "edu.sv": true, + "gob.sv": true, + "com.sv": true, + "org.sv": true, + "red.sv": true, + "co.sz": true, + "ac.sz": true, + "org.sz": true, + "com.tr": true, + "gen.tr": true, + "org.tr": true, + "biz.tr": true, + "info.tr": true, + "av.tr": true, + "dr.tr": true, + "pol.tr": true, + "bel.tr": true, + "tsk.tr": true, + "bbs.tr": true, + "k12.tr": true, + "edu.tr": true, + "name.tr": true, + "net.tr": true, + "gov.tr": true, + "web.tr": true, + "tel.tr": true, + "tv.tr": true, + "co.tt": true, + "com.tt": true, + "org.tt": true, + "net.tt": true, + "biz.tt": true, + "info.tt": true, + "pro.tt": true, + "int.tt": true, + "coop.tt": true, + "jobs.tt": true, + "mobi.tt": true, + "travel.tt": true, + "museum.tt": true, + "aero.tt": true, + "cat.tt": true, + "tel.tt": true, + "name.tt": true, + "mil.tt": true, + "edu.tt": true, + "gov.tt": true, + "edu.tw": true, + "gov.tw": true, + "mil.tw": true, + "com.tw": true, + "net.tw": true, + "org.tw": true, + "idv.tw": true, + "game.tw": true, + "ebiz.tw": true, + "club.tw": true, + "com.mu": true, + "gov.mu": true, + "net.mu": true, + "org.mu": true, + "ac.mu": true, + "co.mu": true, + "or.mu": true, + "ac.mz": true, + "co.mz": true, + "edu.mz": true, + "org.mz": true, + "gov.mz": true, + "com.na": true, + "co.na": true, + "ac.nz": true, + "co.nz": true, + "cri.nz": true, + "geek.nz": true, + "gen.nz": true, + "govt.nz": true, + "health.nz": true, + "iwi.nz": true, + "maori.nz": true, + "mil.nz": true, + "net.nz": true, + "org.nz": true, + "parliament.nz": true, + "school.nz": true, + "abo.pa": true, + "ac.pa": true, + "com.pa": true, + "edu.pa": true, + "gob.pa": true, + "ing.pa": true, + "med.pa": true, + "net.pa": true, + "nom.pa": true, + "org.pa": true, + "sld.pa": true, + "com.pt": true, + "edu.pt": true, + "gov.pt": true, + "int.pt": true, + "net.pt": true, + "nome.pt": true, + "org.pt": true, + "publ.pt": true, + "com.py": true, + "edu.py": true, + "gov.py": true, + "mil.py": true, + "net.py": true, + "org.py": true, + "com.qa": true, + "edu.qa": true, + "gov.qa": true, + "mil.qa": true, + "net.qa": true, + "org.qa": true, + "asso.re": true, + "com.re": true, + "nom.re": true, + "ac.ru": true, + "adygeya.ru": true, + "altai.ru": true, + "amur.ru": true, + "arkhangelsk.ru": true, + "astrakhan.ru": true, + "bashkiria.ru": true, + "belgorod.ru": true, + "bir.ru": true, + "bryansk.ru": true, + "buryatia.ru": true, + "cbg.ru": true, + "chel.ru": true, + "chelyabinsk.ru": true, + "chita.ru": true, + "chukotka.ru": true, + "chuvashia.ru": true, + "com.ru": true, + "dagestan.ru": true, + "e-burg.ru": true, + "edu.ru": true, + "gov.ru": true, + "grozny.ru": true, + "int.ru": true, + "irkutsk.ru": true, + "ivanovo.ru": true, + "izhevsk.ru": true, + "jar.ru": true, + "joshkar-ola.ru": true, + "kalmykia.ru": true, + "kaluga.ru": true, + "kamchatka.ru": true, + "karelia.ru": true, + "kazan.ru": true, + "kchr.ru": true, + "kemerovo.ru": true, + "khabarovsk.ru": true, + "khakassia.ru": true, + "khv.ru": true, + "kirov.ru": true, + "koenig.ru": true, + "komi.ru": true, + "kostroma.ru": true, + "kranoyarsk.ru": true, + "kuban.ru": true, + "kurgan.ru": true, + "kursk.ru": true, + "lipetsk.ru": true, + "magadan.ru": true, + "mari.ru": true, + "mari-el.ru": true, + "marine.ru": true, + "mil.ru": true, + "mordovia.ru": true, + "mosreg.ru": true, + "msk.ru": true, + "murmansk.ru": true, + "nalchik.ru": true, + "net.ru": true, + "nnov.ru": true, + "nov.ru": true, + "novosibirsk.ru": true, + "nsk.ru": true, + "omsk.ru": true, + "orenburg.ru": true, + "org.ru": true, + "oryol.ru": true, + "penza.ru": true, + "perm.ru": true, + "pp.ru": true, + "pskov.ru": true, + "ptz.ru": true, + "rnd.ru": true, + "ryazan.ru": true, + "sakhalin.ru": true, + "samara.ru": true, + "saratov.ru": true, + "simbirsk.ru": true, + "smolensk.ru": true, + "spb.ru": true, + "stavropol.ru": true, + "stv.ru": true, + "surgut.ru": true, + "tambov.ru": true, + "tatarstan.ru": true, + "tom.ru": true, + "tomsk.ru": true, + "tsaritsyn.ru": true, + "tsk.ru": true, + "tula.ru": true, + "tuva.ru": true, + "tver.ru": true, + "tyumen.ru": true, + "udm.ru": true, + "udmurtia.ru": true, + "ulan-ude.ru": true, + "vladikavkaz.ru": true, + "vladimir.ru": true, + "vladivostok.ru": true, + "volgograd.ru": true, + "vologda.ru": true, + "voronezh.ru": true, + "vrn.ru": true, + "vyatka.ru": true, + "yakutia.ru": true, + "yamal.ru": true, + "yekaterinburg.ru": true, + "yuzhno-sakhalinsk.ru": true, + "ac.rw": true, + "co.rw": true, + "com.rw": true, + "edu.rw": true, + "gouv.rw": true, + "gov.rw": true, + "int.rw": true, + "mil.rw": true, + "net.rw": true, + "com.sa": true, + "edu.sa": true, + "gov.sa": true, + "med.sa": true, + "net.sa": true, + "org.sa": true, + "pub.sa": true, + "sch.sa": true, + "com.sd": true, + "edu.sd": true, + "gov.sd": true, + "info.sd": true, + "med.sd": true, + "net.sd": true, + "org.sd": true, + "tv.sd": true, + "a.se": true, + "ac.se": true, + "b.se": true, + "bd.se": true, + "c.se": true, + "d.se": true, + "e.se": true, + "f.se": true, + "g.se": true, + "h.se": true, + "i.se": true, + "k.se": true, + "l.se": true, + "m.se": true, + "n.se": true, + "o.se": true, + "org.se": true, + "p.se": true, + "parti.se": true, + "pp.se": true, + "press.se": true, + "r.se": true, + "s.se": true, + "t.se": true, + "tm.se": true, + "u.se": true, + "w.se": true, + "x.se": true, + "y.se": true, + "z.se": true, + "com.sg": true, + "edu.sg": true, + "gov.sg": true, + "idn.sg": true, + "net.sg": true, + "org.sg": true, + "per.sg": true, + "art.sn": true, + "com.sn": true, + "edu.sn": true, + "gouv.sn": true, + "org.sn": true, + "perso.sn": true, + "univ.sn": true, + "com.sy": true, + "edu.sy": true, + "gov.sy": true, + "mil.sy": true, + "net.sy": true, + "news.sy": true, + "org.sy": true, + "ac.th": true, + "co.th": true, + "go.th": true, + "in.th": true, + "mi.th": true, + "net.th": true, + "or.th": true, + "ac.tj": true, + "biz.tj": true, + "co.tj": true, + "com.tj": true, + "edu.tj": true, + "go.tj": true, + "gov.tj": true, + "info.tj": true, + "int.tj": true, + "mil.tj": true, + "name.tj": true, + "net.tj": true, + "nic.tj": true, + "org.tj": true, + "test.tj": true, + "web.tj": true, + "agrinet.tn": true, + "com.tn": true, + "defense.tn": true, + "edunet.tn": true, + "ens.tn": true, + "fin.tn": true, + "gov.tn": true, + "ind.tn": true, + "info.tn": true, + "intl.tn": true, + "mincom.tn": true, + "nat.tn": true, + "net.tn": true, + "org.tn": true, + "perso.tn": true, + "rnrt.tn": true, + "rns.tn": true, + "rnu.tn": true, + "tourism.tn": true, + "ac.tz": true, + "co.tz": true, + "go.tz": true, + "ne.tz": true, + "or.tz": true, + "biz.ua": true, + "cherkassy.ua": true, + "chernigov.ua": true, + "chernovtsy.ua": true, + "ck.ua": true, + "cn.ua": true, + "co.ua": true, + "com.ua": true, + "crimea.ua": true, + "cv.ua": true, + "dn.ua": true, + "dnepropetrovsk.ua": true, + "donetsk.ua": true, + "dp.ua": true, + "edu.ua": true, + "gov.ua": true, + "if.ua": true, + "in.ua": true, + "ivano-frankivsk.ua": true, + "kh.ua": true, + "kharkov.ua": true, + "kherson.ua": true, + "khmelnitskiy.ua": true, + "kiev.ua": true, + "kirovograd.ua": true, + "km.ua": true, + "kr.ua": true, + "ks.ua": true, + "kv.ua": true, + "lg.ua": true, + "lugansk.ua": true, + "lutsk.ua": true, + "lviv.ua": true, + "me.ua": true, + "mk.ua": true, + "net.ua": true, + "nikolaev.ua": true, + "od.ua": true, + "odessa.ua": true, + "org.ua": true, + "pl.ua": true, + "poltava.ua": true, + "pp.ua": true, + "rovno.ua": true, + "rv.ua": true, + "sebastopol.ua": true, + "sumy.ua": true, + "te.ua": true, + "ternopil.ua": true, + "uzhgorod.ua": true, + "vinnica.ua": true, + "vn.ua": true, + "zaporizhzhe.ua": true, + "zhitomir.ua": true, + "zp.ua": true, + "zt.ua": true, + "ac.ug": true, + "co.ug": true, + "go.ug": true, + "ne.ug": true, + "or.ug": true, + "org.ug": true, + "sc.ug": true, + "ac.uk": true, + "bl.uk": true, + "british-library.uk": true, + "co.uk": true, + "cym.uk": true, + "gov.uk": true, + "govt.uk": true, + "icnet.uk": true, + "jet.uk": true, + "lea.uk": true, + "ltd.uk": true, + "me.uk": true, + "mil.uk": true, + "mod.uk": true, + "national-library-scotland.uk": true, + "nel.uk": true, + "net.uk": true, + "nhs.uk": true, + "nic.uk": true, + "nls.uk": true, + "org.uk": true, + "orgn.uk": true, + "parliament.uk": true, + "plc.uk": true, + "police.uk": true, + "sch.uk": true, + "scot.uk": true, + "soc.uk": true, + "4fd.us": true, + "dni.us": true, + "fed.us": true, + "isa.us": true, + "kids.us": true, + "nsn.us": true, + "com.uy": true, + "edu.uy": true, + "gub.uy": true, + "mil.uy": true, + "net.uy": true, + "org.uy": true, + "co.ve": true, + "com.ve": true, + "edu.ve": true, + "gob.ve": true, + "info.ve": true, + "mil.ve": true, + "net.ve": true, + "org.ve": true, + "web.ve": true, + "co.vi": true, + "com.vi": true, + "k12.vi": true, + "net.vi": true, + "org.vi": true, + "ac.vn": true, + "biz.vn": true, + "com.vn": true, + "edu.vn": true, + "gov.vn": true, + "health.vn": true, + "info.vn": true, + "int.vn": true, + "name.vn": true, + "net.vn": true, + "org.vn": true, + "pro.vn": true, + "co.ye": true, + "com.ye": true, + "gov.ye": true, + "ltd.ye": true, + "me.ye": true, + "net.ye": true, + "org.ye": true, + "plc.ye": true, + "ac.yu": true, + "co.yu": true, + "edu.yu": true, + "gov.yu": true, + "org.yu": true, + "ac.za": true, + "agric.za": true, + "alt.za": true, + "bourse.za": true, + "city.za": true, + "co.za": true, + "cybernet.za": true, + "db.za": true, + "ecape.school.za": true, + "edu.za": true, + "fs.school.za": true, + "gov.za": true, + "gp.school.za": true, + "grondar.za": true, + "iaccess.za": true, + "imt.za": true, + "inca.za": true, + "kzn.school.za": true, + "landesign.za": true, + "law.za": true, + "lp.school.za": true, + "mil.za": true, + "mpm.school.za": true, + "ncape.school.za": true, + "net.za": true, + "ngo.za": true, + "nis.za": true, + "nom.za": true, + "nw.school.za": true, + "olivetti.za": true, + "org.za": true, + "pix.za": true, + "school.za": true, + "tm.za": true, + "wcape.school.za": true, + "web.za": true, + "ac.zm": true, + "co.zm": true, + "com.zm": true, + "edu.zm": true, + "gov.zm": true, + "net.zm": true, + "org.zm": true, + "sch.zm": true } +},{}],205:[function(require,module,exports){ +const punycode = require('punycode') +const sldMap = require('./data/sldMap.json') -module.exports = equalByTag; - -},{"./_Symbol":224,"./_Uint8Array":225,"./_equalArrays":270,"./_mapToArray":306,"./_setToArray":317,"./eq":332}],272:[function(require,module,exports){ -var getAllKeys = require('./_getAllKeys'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - objProps = getAllKeys(object), - objLength = objProps.length, - othProps = getAllKeys(other), - othLength = othProps.length; +module.exports = function isValidDomain (value, opts) { + if (typeof value !== 'string') return false + if (!(opts instanceof Object)) opts = {} + value = value.toLowerCase() - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; + if (value.endsWith('.')) { + value = value.slice(0, value.length - 1) } - var result = true; - stack.set(object, other); - stack.set(other, object); - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); + if (opts.allowUnicode) { + value = punycode.toASCII(value) } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } + if (value.length > 253) { + return false } - stack['delete'](object); - stack['delete'](other); - return result; -} - -module.exports = equalObjects; - -},{"./_getAllKeys":274}],273:[function(require,module,exports){ -(function (global){(function (){ -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -module.exports = freeGlobal; - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],274:[function(require,module,exports){ -var baseGetAllKeys = require('./_baseGetAllKeys'), - getSymbols = require('./_getSymbols'), - keys = require('./keys'); - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); -} - -module.exports = getAllKeys; - -},{"./_baseGetAllKeys":240,"./_getSymbols":279,"./keys":347}],275:[function(require,module,exports){ -var isKeyable = require('./_isKeyable'); - -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} - -module.exports = getMapData; - -},{"./_isKeyable":292}],276:[function(require,module,exports){ -var isStrictComparable = require('./_isStrictComparable'), - keys = require('./keys'); - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - result[length] = [key, value, isStrictComparable(value)]; + const validChars = /^([a-z0-9-._*]+)$/g + if (!validChars.test(value)) { + return false } - return result; -} - -module.exports = getMatchData; - -},{"./_isStrictComparable":295,"./keys":347}],277:[function(require,module,exports){ -var baseIsNative = require('./_baseIsNative'), - getValue = require('./_getValue'); - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -module.exports = getNative; - -},{"./_baseIsNative":248,"./_getValue":281}],278:[function(require,module,exports){ -var Symbol = require('./_Symbol'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto.toString; - -/** Built-in value references. */ -var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - -/** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ -function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; - - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; + const sldRegex = /(.*)\.(([a-z0-9]+)(\.[a-z0-9]+))/ + const matches = value.match(sldRegex) + var tld = null + var labels = null + if (matches && matches.length > 2) { + if (sldMap[matches[2]]) { + tld = matches[2] + labels = matches[1].split('.') } } - return result; -} -module.exports = getRawTag; - -},{"./_Symbol":224}],279:[function(require,module,exports){ -var arrayFilter = require('./_arrayFilter'), - stubArray = require('./stubArray'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; + if (!labels) { + labels = value.split('.') + if (labels.length <= 1) return false -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; + tld = labels.pop() + const tldRegex = /^(?:xn--)?(?!^\d+$)[a-z0-9]+$/gi -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? stubArray : function(object) { - if (object == null) { - return []; + if (!tldRegex.test(tld)) return false } - object = Object(object); - return arrayFilter(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; - -module.exports = getSymbols; -},{"./_arrayFilter":227,"./stubArray":354}],280:[function(require,module,exports){ -var DataView = require('./_DataView'), - Map = require('./_Map'), - Promise = require('./_Promise'), - Set = require('./_Set'), - WeakMap = require('./_WeakMap'), - baseGetTag = require('./_baseGetTag'), - toSource = require('./_toSource'); + if (opts.subdomain === false && labels.length > 1) return false -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - setTag = '[object Set]', - weakMapTag = '[object WeakMap]'; + const isValid = labels.every(function (label, index) { + if (opts.wildcard && index === 0 && label === '*' && labels.length > 1) { + return true + } -var dataViewTag = '[object DataView]'; + let validLabelChars = /^([a-zA-Z0-9-_]+)$/g + if (index === labels.length - 1) { + validLabelChars = /^([a-zA-Z0-9-]+)$/g + } -/** Used to detect maps, sets, and weakmaps. */ -var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); + const doubleDashCount = (label.match(/--/g) || []).length + const xnDashCount = (label.match(/xn--/g) || []).length + if (doubleDashCount !== xnDashCount) { + return false + } -/** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -var getTag = baseGetTag; + const isValid = ( + validLabelChars.test(label) && + label.length < 64 && + !label.startsWith('-') && + !label.endsWith('-') + ) -// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. -if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = baseGetTag(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : ''; + return isValid + }) - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; + return isValid } -module.exports = getTag; +},{"./data/sldMap.json":204,"punycode":445}],206:[function(require,module,exports){ +var hasExcape = /~/ +var escapeMatcher = /~[01]/g +function escapeReplacer (m) { + switch (m) { + case '~1': return '/' + case '~0': return '~' + } + throw new Error('Invalid tilde escape: ' + m) +} -},{"./_DataView":215,"./_Map":218,"./_Promise":220,"./_Set":221,"./_WeakMap":226,"./_baseGetTag":241,"./_toSource":326}],281:[function(require,module,exports){ -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; +function untilde (str) { + if (!hasExcape.test(str)) return str + return str.replace(escapeMatcher, escapeReplacer) } -module.exports = getValue; +function setter (obj, pointer, value) { + var part + var hasNextPart -},{}],282:[function(require,module,exports){ -var castPath = require('./_castPath'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isIndex = require('./_isIndex'), - isLength = require('./isLength'), - toKey = require('./_toKey'); + if (pointer[1] === 'constructor' && pointer[2] === 'prototype') return obj + if (pointer[1] === '__proto__') return obj -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = castPath(path, object); + for (var p = 1, len = pointer.length; p < len;) { + part = untilde(pointer[p++]) + hasNextPart = len > p - var index = -1, - length = path.length, - result = false; + if (typeof obj[part] === 'undefined') { + // support setting of /- + if (Array.isArray(obj) && part === '-') { + part = obj.length + } - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; + // support nested objects/array when setting values + if (hasNextPart) { + if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = [] + else obj[part] = {} + } } - object = object[key]; - } - if (result || ++index != length) { - return result; + + if (!hasNextPart) break + obj = obj[part] } - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); + + var oldValue = obj[part] + if (value === undefined) delete obj[part] + else obj[part] = value + return oldValue } -module.exports = hasPath; +function compilePointer (pointer) { + if (typeof pointer === 'string') { + pointer = pointer.split('/') + if (pointer[0] === '') return pointer + throw new Error('Invalid JSON pointer.') + } else if (Array.isArray(pointer)) { + return pointer + } -},{"./_castPath":262,"./_isIndex":290,"./_toKey":325,"./isArguments":337,"./isArray":338,"./isLength":342}],283:[function(require,module,exports){ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; + throw new Error('Invalid JSON pointer.') +} -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; +function get (obj, pointer) { + if (typeof obj !== 'object') throw new Error('Invalid input object.') + pointer = compilePointer(pointer) + var len = pointer.length + if (len === 1) return obj -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + for (var p = 1; p < len;) { + obj = obj[untilde(pointer[p++])] + if (len === p) return obj + if (typeof obj !== 'object') return undefined + } +} -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); +function set (obj, pointer, value) { + if (typeof obj !== 'object') throw new Error('Invalid input object.') + pointer = compilePointer(pointer) + if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.') + return setter(obj, pointer, value) } -module.exports = hasUnicode; +function compile (pointer) { + var compiled = compilePointer(pointer) + return { + get: function (object) { + return get(object, compiled) + }, + set: function (object, value) { + return set(object, compiled, value) + } + } +} -},{}],284:[function(require,module,exports){ -/** Used to detect strings that need a more robust regexp to match words. */ -var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; +exports.get = get +exports.set = set +exports.compile = compile -/** - * Checks if `string` contains a word composed of Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a word is found, else `false`. - */ -function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); -} +},{}],207:[function(require,module,exports){ +/// keymage.js - Javascript keyboard bindings handling +/// http://github.com/piranha/keymage +/// +/// (c) 2012-2016 Alexander Solovyov under terms of ISC License -module.exports = hasUnicodeWord; +(function(define, undefined) { +define(function() { + var VERSION = '1.1.3'; + var isOsx = typeof navigator !== 'undefined' && + ~navigator.userAgent.indexOf('Mac OS X'); -},{}],285:[function(require,module,exports){ -var nativeCreate = require('./_nativeCreate'); + // Defining all keys + var MODPROPS = ['shiftKey', 'ctrlKey', 'altKey', 'metaKey']; + var MODS = { + 'shift': 'shift', + 'ctrl': 'ctrl', 'control': 'ctrl', + 'alt': 'alt', 'option': 'alt', + 'win': 'meta', 'cmd': 'meta', 'super': 'meta', + 'meta': 'meta', + // default modifier for os x is cmd and for others is ctrl + 'defmod': isOsx ? 'meta' : 'ctrl' + }; + var MODORDER = ['shift', 'ctrl', 'alt', 'meta']; + var MODNUMS = [16, 17, 18, 91]; -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; -} + var KEYS = { + 'backspace': 8, + 'tab': 9, + 'enter': 13, 'return': 13, + 'pause': 19, + 'caps': 20, 'capslock': 20, + 'escape': 27, 'esc': 27, + 'space': 32, + 'pgup': 33, 'pageup': 33, + 'pgdown': 34, 'pagedown': 34, + 'end': 35, + 'home': 36, + 'ins': 45, 'insert': 45, + 'del': 46, 'delete': 46, -module.exports = hashClear; + 'left': 37, + 'up': 38, + 'right': 39, + 'down': 40, -},{"./_nativeCreate":309}],286:[function(require,module,exports){ -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; -} + '*': 106, + '+': 107, 'plus': 107, + 'minus': 109, + ';': 186, + '=': 187, + ',': 188, + '-': 189, + '.': 190, + '/': 191, + '`': 192, + '[': 219, + '\\': 220, + ']': 221, + "'": 222 + }; -module.exports = hashDelete; + var i; + // numpad + for (i = 0; i < 10; i++) { + KEYS['num-' + i] = i + 95; + } + // top row 0-9 + for (i = 0; i < 10; i++) { + KEYS[i.toString()] = i + 48; + } + // f1-f24 + for (i = 1; i < 25; i++) { + KEYS['f' + i] = i + 111; + } + // alphabet + for (i = 65; i < 91; i++) { + KEYS[String.fromCharCode(i).toLowerCase()] = i; + } -},{}],287:[function(require,module,exports){ -var nativeCreate = require('./_nativeCreate'); + // Reverse key codes + var KEYREV = {}; + for (var k in KEYS) { + var val = KEYS[k]; + if (!KEYREV[val] || KEYREV[val].length < k.length) { + KEYREV[val] = k; + } + } -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; + // ----------------------- + // Actual work is done here -/** Used for built-in method references. */ -var objectProto = Object.prototype; + var currentScope = ''; + var allChains = {}; -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; + function parseKeyString(keystring) { + var bits = keystring.split(/-(?!$)/); + var button = bits[bits.length - 1]; + var key = {code: KEYS[button]}; -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; -} + if (!key.code) { + throw 'Unknown key "' + button + '" in keystring "' + + keystring + '"'; + } -module.exports = hashGet; + var mod; + for (var i = 0; i < bits.length - 1; i++) { + button = bits[i]; + mod = MODS[button]; + if (!mod) { + throw 'Unknown modifier "' + button + '" in keystring "' + + keystring + '"'; + } + key[mod] = true; + } -},{"./_nativeCreate":309}],288:[function(require,module,exports){ -var nativeCreate = require('./_nativeCreate'); + return key; + } -/** Used for built-in method references. */ -var objectProto = Object.prototype; + function stringifyKey(key) { + var s = ''; + for (var i = 0; i < MODORDER.length; i++) { + if (key[MODORDER[i]]) { + s += MODORDER[i] + '-'; + } + } + s += KEYREV[key.code]; + return s; + } -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; + function normalizeKeyChain(keychainString) { + var keychain = []; + var keys = keychainString.split(' '); -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); -} + for (var i = 0; i < keys.length; i++) { + var key = parseKeyString(keys[i]); + key = stringifyKey(key); + keychain.push(key); + } -module.exports = hashHas; + keychain.original = keychainString; + return keychain; + } -},{"./_nativeCreate":309}],289:[function(require,module,exports){ -var nativeCreate = require('./_nativeCreate'); + function eventKeyString(e) { + var key = {code: e.keyCode}; + for (var i = 0; i < MODPROPS.length; i++) { + var mod = MODPROPS[i]; + if (e[mod]) { + key[mod.slice(0, mod.length - 3)] = true; + } + } + return stringifyKey(key); + } -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; + function getNestedChains(chains, scope) { + for (var i = 0; i < scope.length; i++) { + var bit = scope[i]; -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; -} + if (bit) { + chains = chains[bit]; + } -module.exports = hashSet; + if (!chains) { + break; + } + } + return chains; + } -},{"./_nativeCreate":309}],290:[function(require,module,exports){ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; + var sequence = []; + function dispatch(e) { + // Skip all modifiers + if (~MODNUMS.indexOf(e.keyCode)) { + return; + } -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; + var seq = sequence.slice(); + seq.push(eventKeyString(e)); + var scope = currentScope.split('.'); + var matched, chains, key; -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; + for (var i = scope.length; i >= 0; i--) { + chains = getNestedChains(allChains, scope.slice(0, i)); + if (!chains) { + continue; + } + matched = true; + for (var j = 0; j < seq.length; j++) { + key = seq[j]; + if (!chains[key]) { + matched = false; + break; + } + chains = chains[key]; + } - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); -} + if (matched) { + break; + } + } -module.exports = isIndex; + var definitionScope = scope.slice(0, i).join('.'); + var preventDefault = chains.preventDefault; -},{}],291:[function(require,module,exports){ -var isArray = require('./isArray'), - isSymbol = require('./isSymbol'); + // partial match, save the sequence + if (matched && !chains.handlers) { + sequence = seq; + if (preventDefault) { + e.preventDefault(); + } + return; + } -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; + if (matched) { + for (i = 0; i < chains.handlers.length; i++) { + var handler = chains.handlers[i]; + var options = handler._keymage; -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} + var res = handler.call(options.context, e, { + shortcut: options.original, + scope: currentScope, + definitionScope: definitionScope + }); -module.exports = isKey; + if (res === false || preventDefault) { + e.preventDefault(); + } + } + } -},{"./isArray":338,"./isSymbol":345}],292:[function(require,module,exports){ -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} + // either matched or not, drop the sequence + sequence = []; + } -module.exports = isKeyable; + function getHandlers(scope, keychain, fn) { + var bits = scope.split('.'); + var chains = allChains; + bits = bits.concat(keychain); -},{}],293:[function(require,module,exports){ -var coreJsData = require('./_coreJsData'); + for (var i = 0, l = bits.length; i < l; i++) { + var bit = bits[i]; + if (!bit) continue; -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); + chains = chains[bit] || (chains[bit] = {}); + if (fn && fn._keymage.preventDefault) { + chains.preventDefault = true; + } -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} + if (i === l - 1) { + var handlers = chains.handlers || (chains.handlers = []); + return handlers; + } + } + } -module.exports = isMasked; + function assignKey(scope, keychain, fn) { + var handlers = getHandlers(scope, keychain, fn); + handlers.push(fn); + } + + function unassignKey(scope, keychain, fn) { + var handlers = getHandlers(scope, keychain); + var idx = handlers.indexOf(fn); + if (~idx) { + handlers.splice(idx, 1); + } + } + + function parsed(scope, keychain, fn, options) { + if (keychain === undefined && fn === undefined) { + return function(keychain, fn) { + return keymage(scope, keychain, fn); + }; + } -},{"./_coreJsData":264}],294:[function(require,module,exports){ -/** Used for built-in method references. */ -var objectProto = Object.prototype; + if (typeof keychain === 'function') { + options = fn; + fn = keychain; + keychain = scope; + scope = ''; + } -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + var normalized = normalizeKeyChain(keychain); - return value === proto; -} + return [scope, normalized, fn, options]; + } -module.exports = isPrototype; + // optional arguments: scope, options. + function keymage(scope, keychain, fn, options) { + var args = parsed(scope, keychain, fn, options); + fn = args[2]; + options = args[3]; + fn._keymage = options || {}; + fn._keymage.original = keychain; + assignKey.apply(null, args); -},{}],295:[function(require,module,exports){ -var isObject = require('./isObject'); + return function () { + unassignKey.apply(null, args); + }; + } -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !isObject(value); -} + keymage.unbind = function(scope, keychain, fn) { + var args = parsed(scope, keychain, fn); + unassignKey.apply(null, args); + }; -module.exports = isStrictComparable; + keymage.parse = parseKeyString; + keymage.stringify = stringifyKey; -},{"./isObject":343}],296:[function(require,module,exports){ -/** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; - this.size = 0; -} + keymage.bindings = allChains; -module.exports = listCacheClear; + keymage.setScope = function(scope) { + currentScope = scope ? scope : ''; + }; -},{}],297:[function(require,module,exports){ -var assocIndexOf = require('./_assocIndexOf'); + keymage.getScope = function() { return currentScope; }; -/** Used for built-in method references. */ -var arrayProto = Array.prototype; + keymage.pushScope = function(scope) { + currentScope = (currentScope ? currentScope + '.' : '') + scope; + return currentScope; + }; -/** Built-in value references. */ -var splice = arrayProto.splice; + keymage.popScope = function(scope) { + var i; -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); + if (!scope) { + i = currentScope.lastIndexOf('.'); + scope = currentScope.slice(i + 1); + currentScope = i == -1 ? '' : currentScope.slice(0, i); + return scope; + } - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; -} + currentScope = currentScope.replace( + new RegExp('(^|\\.)' + scope + '(\\.|$).*'), ''); + return scope; + }; -module.exports = listCacheDelete; + keymage.version = VERSION; -},{"./_assocIndexOf":235}],298:[function(require,module,exports){ -var assocIndexOf = require('./_assocIndexOf'); + window.addEventListener('keydown', dispatch, false); -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); + return keymage; +}); +})(typeof define !== 'undefined' ? define : function(factory) { + if (typeof module !== 'undefined') { + module.exports = factory(); + } else { + window.keymage = factory(); + } +}); - return index < 0 ? undefined : data[index][1]; +},{}],208:[function(require,module,exports){ +function isObject (o, allowArray) { + return o && 'object' === typeof o && (allowArray || !Array.isArray(o)) } -module.exports = listCacheGet; - -},{"./_assocIndexOf":235}],299:[function(require,module,exports){ -var assocIndexOf = require('./_assocIndexOf'); - -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; +function isBasic (b) { + return 'string' === typeof b || 'number' === typeof b } -module.exports = listCacheHas; +function get (obj, path, dft) { + if(!isObject(obj, true)) return dft + if(isBasic(path)) return obj[path] + for(var i = 0; i < path.length; i++) { + if(null == (obj = obj[path[i]])) return dft + } + return obj +} -},{"./_assocIndexOf":235}],300:[function(require,module,exports){ -var assocIndexOf = require('./_assocIndexOf'); +function isNonNegativeInteger (i) { + return Number.isInteger(i) && i >= 0 +} -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); +function set (obj, path, value) { + if(!obj) throw new Error('libnested.set: first arg must be an object') + if(isBasic(path)) return obj[path] = value + for(var i = 0; i < path.length; i++) + if(i === path.length - 1) + obj[path[i]] = value + else if(null == obj[path[i]]) + obj = (obj[path[i]] = isNonNegativeInteger(path[i+1]) ? [] : {}) + else + obj = obj[path[i]] + return value +} - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; +function each (obj, iter, includeArrays, path) { + path = path || [] + //handle array separately, so that arrays can have integer keys + if(Array.isArray(obj)) { + if(!includeArrays) return false + for(var k = 0; k < obj.length; k++) { + //loop content is duplicated, so that return works + var v = obj[k] + if(isObject(v, includeArrays)) { + if(false === each(v, iter, includeArrays, path.concat(k))) + return false + } else { + if(false === iter(v, path.concat(k))) return false + } + } } - return this; + else { + for(var k in obj) { + //loop content is duplicated, so that return works + var v = obj[k] + if(isObject(v, includeArrays)) { + if(false === each(v, iter, includeArrays, path.concat(k))) + return false + } else { + if(false === iter(v, path.concat(k))) return false + } + } + } + return true } -module.exports = listCacheSet; - -},{"./_assocIndexOf":235}],301:[function(require,module,exports){ -var Hash = require('./_Hash'), - ListCache = require('./_ListCache'), - Map = require('./_Map'); - -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; +function map (obj, iter, out, includeArrays) { + var out = out || Array.isArray(obj) ? [] : {} + each(obj, function (val, path) { + set(out, path, iter(val, path)) + }, includeArrays) + return out } -module.exports = mapCacheClear; +function paths (obj, incluedArrays) { + var out = [] + each(obj, function (_, path) { + out.push(path) + }, incluedArrays) + return out +} -},{"./_Hash":216,"./_ListCache":217,"./_Map":218}],302:[function(require,module,exports){ -var getMapData = require('./_getMapData'); +function id (e) { return e } -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; +//note, cyclic objects are not supported. +//will cause an stack overflow. +function clone (obj) { + if(!isObject(obj, true)) return obj + var _obj + _obj = Array.isArray(obj) ? [] : {} + for(var k in obj) _obj[k] = clone(obj[k]) + return _obj } -module.exports = mapCacheDelete; +exports.get = get +exports.set = set +exports.each = each +exports.map = map +exports.paths = paths +exports.clone = clone +exports.copy = clone -},{"./_getMapData":275}],303:[function(require,module,exports){ -var getMapData = require('./_getMapData'); +},{}],209:[function(require,module,exports){ +!function(e){function r(e,r){"use strict";var t,a=r.ready.then((function(){function a(){if(0!==t._sodium_init())throw new Error("libsodium was not correctly initialized.");for(var r=["crypto_aead_chacha20poly1305_decrypt","crypto_aead_chacha20poly1305_decrypt_detached","crypto_aead_chacha20poly1305_encrypt","crypto_aead_chacha20poly1305_encrypt_detached","crypto_aead_chacha20poly1305_ietf_decrypt","crypto_aead_chacha20poly1305_ietf_decrypt_detached","crypto_aead_chacha20poly1305_ietf_encrypt","crypto_aead_chacha20poly1305_ietf_encrypt_detached","crypto_aead_chacha20poly1305_ietf_keygen","crypto_aead_chacha20poly1305_keygen","crypto_aead_xchacha20poly1305_ietf_decrypt","crypto_aead_xchacha20poly1305_ietf_decrypt_detached","crypto_aead_xchacha20poly1305_ietf_encrypt","crypto_aead_xchacha20poly1305_ietf_encrypt_detached","crypto_aead_xchacha20poly1305_ietf_keygen","crypto_auth","crypto_auth_hmacsha256","crypto_auth_hmacsha256_keygen","crypto_auth_hmacsha256_verify","crypto_auth_hmacsha512","crypto_auth_hmacsha512_keygen","crypto_auth_hmacsha512_verify","crypto_auth_keygen","crypto_auth_verify","crypto_box_beforenm","crypto_box_curve25519xchacha20poly1305_keypair","crypto_box_curve25519xchacha20poly1305_seal","crypto_box_curve25519xchacha20poly1305_seal_open","crypto_box_detached","crypto_box_easy","crypto_box_easy_afternm","crypto_box_keypair","crypto_box_open_detached","crypto_box_open_easy","crypto_box_open_easy_afternm","crypto_box_seal","crypto_box_seal_open","crypto_box_seed_keypair","crypto_core_ed25519_add","crypto_core_ed25519_from_hash","crypto_core_ed25519_from_uniform","crypto_core_ed25519_is_valid_point","crypto_core_ed25519_random","crypto_core_ed25519_scalar_add","crypto_core_ed25519_scalar_complement","crypto_core_ed25519_scalar_invert","crypto_core_ed25519_scalar_mul","crypto_core_ed25519_scalar_negate","crypto_core_ed25519_scalar_random","crypto_core_ed25519_scalar_reduce","crypto_core_ed25519_scalar_sub","crypto_core_ed25519_sub","crypto_core_ristretto255_add","crypto_core_ristretto255_from_hash","crypto_core_ristretto255_is_valid_point","crypto_core_ristretto255_random","crypto_core_ristretto255_scalar_add","crypto_core_ristretto255_scalar_complement","crypto_core_ristretto255_scalar_invert","crypto_core_ristretto255_scalar_mul","crypto_core_ristretto255_scalar_negate","crypto_core_ristretto255_scalar_random","crypto_core_ristretto255_scalar_reduce","crypto_core_ristretto255_scalar_sub","crypto_core_ristretto255_sub","crypto_generichash","crypto_generichash_blake2b_salt_personal","crypto_generichash_final","crypto_generichash_init","crypto_generichash_keygen","crypto_generichash_update","crypto_hash","crypto_hash_sha256","crypto_hash_sha256_final","crypto_hash_sha256_init","crypto_hash_sha256_update","crypto_hash_sha512","crypto_hash_sha512_final","crypto_hash_sha512_init","crypto_hash_sha512_update","crypto_kdf_derive_from_key","crypto_kdf_keygen","crypto_kx_client_session_keys","crypto_kx_keypair","crypto_kx_seed_keypair","crypto_kx_server_session_keys","crypto_onetimeauth","crypto_onetimeauth_final","crypto_onetimeauth_init","crypto_onetimeauth_keygen","crypto_onetimeauth_update","crypto_onetimeauth_verify","crypto_pwhash","crypto_pwhash_scryptsalsa208sha256","crypto_pwhash_scryptsalsa208sha256_ll","crypto_pwhash_scryptsalsa208sha256_str","crypto_pwhash_scryptsalsa208sha256_str_verify","crypto_pwhash_str","crypto_pwhash_str_needs_rehash","crypto_pwhash_str_verify","crypto_scalarmult","crypto_scalarmult_base","crypto_scalarmult_ed25519","crypto_scalarmult_ed25519_base","crypto_scalarmult_ed25519_base_noclamp","crypto_scalarmult_ed25519_noclamp","crypto_scalarmult_ristretto255","crypto_scalarmult_ristretto255_base","crypto_secretbox_detached","crypto_secretbox_easy","crypto_secretbox_keygen","crypto_secretbox_open_detached","crypto_secretbox_open_easy","crypto_secretstream_xchacha20poly1305_init_pull","crypto_secretstream_xchacha20poly1305_init_push","crypto_secretstream_xchacha20poly1305_keygen","crypto_secretstream_xchacha20poly1305_pull","crypto_secretstream_xchacha20poly1305_push","crypto_secretstream_xchacha20poly1305_rekey","crypto_shorthash","crypto_shorthash_keygen","crypto_shorthash_siphashx24","crypto_sign","crypto_sign_detached","crypto_sign_ed25519_pk_to_curve25519","crypto_sign_ed25519_sk_to_curve25519","crypto_sign_ed25519_sk_to_pk","crypto_sign_ed25519_sk_to_seed","crypto_sign_final_create","crypto_sign_final_verify","crypto_sign_init","crypto_sign_keypair","crypto_sign_open","crypto_sign_seed_keypair","crypto_sign_update","crypto_sign_verify_detached","crypto_stream_chacha20","crypto_stream_chacha20_ietf_xor","crypto_stream_chacha20_ietf_xor_ic","crypto_stream_chacha20_keygen","crypto_stream_chacha20_xor","crypto_stream_chacha20_xor_ic","crypto_stream_keygen","crypto_stream_xchacha20_keygen","crypto_stream_xchacha20_xor","crypto_stream_xchacha20_xor_ic","randombytes_buf","randombytes_buf_deterministic","randombytes_close","randombytes_random","randombytes_set_implementation","randombytes_stir","randombytes_uniform","sodium_version_string"],a=[E,x,k,S,T,w,Y,B,A,K,M,I,N,L,U,O,C,R,P,G,X,D,F,V,H,q,j,z,W,J,Q,Z,$,ee,re,te,ae,_e,se,ne,ce,oe,he,pe,ye,ie,le,ue,de,ve,ge,be,fe,me,Ee,xe,ke,Se,Te,we,Ye,Be,Ae,Ke,Me,Ie,Ne,Le,Ue,Oe,Ce,Re,Pe,Ge,Xe,De,Fe,Ve,He,qe,je,ze,We,Je,Qe,Ze,$e,er,rr,tr,ar,_r,sr,nr,cr,or,hr,pr,yr,ir,lr,ur,dr,vr,gr,br,fr,mr,Er,xr,kr,Sr,Tr,wr,Yr,Br,Ar,Kr,Mr,Ir,Nr,Lr,Ur,Or,Cr,Rr,Pr,Gr,Xr,Dr,Fr,Vr,Hr,qr,jr,zr,Wr,Jr,Qr,Zr,$r,et,rt,tt,at,_t,st,nt,ct,ot,ht,pt,yt,it],_=0;_=240?(p=4,o=!0):y>=224?(p=3,o=!0):y>=192?(p=2,o=!0):y<128&&(p=1,o=!0)}while(!o);for(var i=p-(c.length-h),l=0;l>8&-39)<<8|87+(r=e[s]>>>4)+(r-10>>8&-39),_+=String.fromCharCode(255&a)+String.fromCharCode(a>>>8);return _}var c={ORIGINAL:1,ORIGINAL_NO_PADDING:3,URLSAFE:5,URLSAFE_NO_PADDING:7};function o(e){if(null==e)return c.URLSAFE_NO_PADDING;if(e!==c.ORIGINAL&&e!==c.ORIGINAL_NO_PADDING&&e!==c.URLSAFE&&e!=c.URLSAFE_NO_PADDING)throw new Error("unsupported base64 variant");return e}function h(e,r){r=o(r),e=m(_,e,"input");var a,_=[],n=0|Math.floor(e.length/3),c=e.length-3*n,h=4*n+(0!==c?0==(2&r)?4:2+(c>>>1):0),p=new l(h+1),y=u(e);return _.push(y),_.push(p.address),0===t._sodium_bin2base64(p.address,p.length,y,e.length,r)&&g(_,"conversion failed"),p.length=h,a=s(p.to_Uint8Array()),v(_),a}function p(e,r){var t=r||"uint8array";if(!y(t))throw new Error(t+" output format is not available");if(e instanceof l){if("uint8array"===t)return e.to_Uint8Array();if("text"===t)return s(e.to_Uint8Array());if("hex"===t)return n(e.to_Uint8Array());if("base64"===t)return h(e.to_Uint8Array(),c.URLSAFE_NO_PADDING);throw new Error('What is output format "'+t+'"?')}if("object"==typeof e){for(var a=Object.keys(e),_={},o=0;o>>24>>>8,o,y);var x=p(g,n);return v(c),x}function ze(e){var r=[];i(e);var a=new l(0|t._crypto_kdf_keybytes()),_=a.address;r.push(_),t._crypto_kdf_keygen(_);var s=p(a,e);return v(r),s}function We(e,r,a,_){var s=[];i(_),e=m(s,e,"clientPublicKey");var n,c=0|t._crypto_kx_publickeybytes();e.length!==c&&b(s,"invalid clientPublicKey length"),n=u(e),s.push(n),r=m(s,r,"clientSecretKey");var o,h=0|t._crypto_kx_secretkeybytes();r.length!==h&&b(s,"invalid clientSecretKey length"),o=u(r),s.push(o),a=m(s,a,"serverPublicKey");var y,d=0|t._crypto_kx_publickeybytes();a.length!==d&&b(s,"invalid serverPublicKey length"),y=u(a),s.push(y);var f=new l(0|t._crypto_kx_sessionkeybytes()),E=f.address;s.push(E);var x=new l(0|t._crypto_kx_sessionkeybytes()),k=x.address;if(s.push(k),0==(0|t._crypto_kx_client_session_keys(E,k,n,o,y))){var S=p({sharedRx:f,sharedTx:x},_);return v(s),S}g(s,"invalid usage")}function Je(e){var r=[];i(e);var a=new l(0|t._crypto_kx_publickeybytes()),_=a.address;r.push(_);var s=new l(0|t._crypto_kx_secretkeybytes()),n=s.address;if(r.push(n),0==(0|t._crypto_kx_keypair(_,n))){var c={publicKey:p(a,e),privateKey:p(s,e),keyType:"x25519"};return v(r),c}g(r,"internal error")}function Qe(e,r){var a=[];i(r),e=m(a,e,"seed");var _,s=0|t._crypto_kx_seedbytes();e.length!==s&&b(a,"invalid seed length"),_=u(e),a.push(_);var n=new l(0|t._crypto_kx_publickeybytes()),c=n.address;a.push(c);var o=new l(0|t._crypto_kx_secretkeybytes()),h=o.address;if(a.push(h),0==(0|t._crypto_kx_seed_keypair(c,h,_))){var y={publicKey:p(n,r),privateKey:p(o,r),keyType:"x25519"};return v(a),y}g(a,"internal error")}function Ze(e,r,a,_){var s=[];i(_),e=m(s,e,"serverPublicKey");var n,c=0|t._crypto_kx_publickeybytes();e.length!==c&&b(s,"invalid serverPublicKey length"),n=u(e),s.push(n),r=m(s,r,"serverSecretKey");var o,h=0|t._crypto_kx_secretkeybytes();r.length!==h&&b(s,"invalid serverSecretKey length"),o=u(r),s.push(o),a=m(s,a,"clientPublicKey");var y,d=0|t._crypto_kx_publickeybytes();a.length!==d&&b(s,"invalid clientPublicKey length"),y=u(a),s.push(y);var f=new l(0|t._crypto_kx_sessionkeybytes()),E=f.address;s.push(E);var x=new l(0|t._crypto_kx_sessionkeybytes()),k=x.address;if(s.push(k),0==(0|t._crypto_kx_server_session_keys(E,k,n,o,y))){var S=p({sharedRx:f,sharedTx:x},_);return v(s),S}g(s,"invalid usage")}function $e(e,r,a){var _=[];i(a);var s=u(e=m(_,e,"message")),n=e.length;_.push(s),r=m(_,r,"key");var c,o=0|t._crypto_onetimeauth_keybytes();r.length!==o&&b(_,"invalid key length"),c=u(r),_.push(c);var h=new l(0|t._crypto_onetimeauth_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_onetimeauth(y,s,n,0,c))){var d=p(h,a);return v(_),d}g(_,"invalid usage")}function er(e,r){var a=[];i(r),f(a,e,"state_address");var _=new l(0|t._crypto_onetimeauth_bytes()),s=_.address;if(a.push(s),0==(0|t._crypto_onetimeauth_final(e,s))){var n=(t._free(e),p(_,r));return v(a),n}g(a,"invalid usage")}function rr(e,r){var a=[];i(r);var _=null;null!=e&&(_=u(e=m(a,e,"key")),e.length,a.push(_));var s=new l(144).address;if(0==(0|t._crypto_onetimeauth_init(s,_))){var n=s;return v(a),n}g(a,"invalid usage")}function tr(e){var r=[];i(e);var a=new l(0|t._crypto_onetimeauth_keybytes()),_=a.address;r.push(_),t._crypto_onetimeauth_keygen(_);var s=p(a,e);return v(r),s}function ar(e,r,a){var _=[];i(a),f(_,e,"state_address");var s=u(r=m(_,r,"message_chunk")),n=r.length;_.push(s),0!=(0|t._crypto_onetimeauth_update(e,s,n))&&g(_,"invalid usage"),v(_)}function _r(e,r,a){var _=[];e=m(_,e,"hash");var s,n=0|t._crypto_onetimeauth_bytes();e.length!==n&&b(_,"invalid hash length"),s=u(e),_.push(s);var c=u(r=m(_,r,"message")),o=r.length;_.push(c),a=m(_,a,"key");var h,p=0|t._crypto_onetimeauth_keybytes();a.length!==p&&b(_,"invalid key length"),h=u(a),_.push(h);var y=0==(0|t._crypto_onetimeauth_verify(s,c,o,0,h));return v(_),y}function sr(e,r,a,_,s,n,c){var o=[];i(c),f(o,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&b(o,"keyLength must be an unsigned integer");var h=u(r=m(o,r,"password")),y=r.length;o.push(h),a=m(o,a,"salt");var d,E=0|t._crypto_pwhash_saltbytes();a.length!==E&&b(o,"invalid salt length"),d=u(a),o.push(d),f(o,_,"opsLimit"),("number"!=typeof _||(0|_)!==_||_<0)&&b(o,"opsLimit must be an unsigned integer"),f(o,s,"memLimit"),("number"!=typeof s||(0|s)!==s||s<0)&&b(o,"memLimit must be an unsigned integer"),f(o,n,"algorithm"),("number"!=typeof n||(0|n)!==n||n<0)&&b(o,"algorithm must be an unsigned integer");var x=new l(0|e),k=x.address;if(o.push(k),0==(0|t._crypto_pwhash(k,e,0,h,y,0,d,_,0,s,n))){var S=p(x,c);return v(o),S}g(o,"invalid usage")}function nr(e,r,a,_,s,n){var c=[];i(n),f(c,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&b(c,"keyLength must be an unsigned integer");var o=u(r=m(c,r,"password")),h=r.length;c.push(o),a=m(c,a,"salt");var y,d=0|t._crypto_pwhash_scryptsalsa208sha256_saltbytes();a.length!==d&&b(c,"invalid salt length"),y=u(a),c.push(y),f(c,_,"opsLimit"),("number"!=typeof _||(0|_)!==_||_<0)&&b(c,"opsLimit must be an unsigned integer"),f(c,s,"memLimit"),("number"!=typeof s||(0|s)!==s||s<0)&&b(c,"memLimit must be an unsigned integer");var E=new l(0|e),x=E.address;if(c.push(x),0==(0|t._crypto_pwhash_scryptsalsa208sha256(x,e,0,o,h,0,y,_,0,s))){var k=p(E,n);return v(c),k}g(c,"invalid usage")}function cr(e,r,a,_,s,n,c){var o=[];i(c);var h=u(e=m(o,e,"password")),y=e.length;o.push(h);var d=u(r=m(o,r,"salt")),E=r.length;o.push(d),f(o,a,"opsLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(o,"opsLimit must be an unsigned integer"),f(o,_,"r"),("number"!=typeof _||(0|_)!==_||_<0)&&b(o,"r must be an unsigned integer"),f(o,s,"p"),("number"!=typeof s||(0|s)!==s||s<0)&&b(o,"p must be an unsigned integer"),f(o,n,"keyLength"),("number"!=typeof n||(0|n)!==n||n<0)&&b(o,"keyLength must be an unsigned integer");var x=new l(0|n),k=x.address;if(o.push(k),0==(0|t._crypto_pwhash_scryptsalsa208sha256_ll(h,y,d,E,a,0,_,s,k,n))){var S=p(x,c);return v(o),S}g(o,"invalid usage")}function or(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"password")),c=e.length;s.push(n),f(s,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(s,"opsLimit must be an unsigned integer"),f(s,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(s,"memLimit must be an unsigned integer");var o=new l(0|t._crypto_pwhash_scryptsalsa208sha256_strbytes()).address;if(s.push(o),0==(0|t._crypto_pwhash_scryptsalsa208sha256_str(o,n,c,0,r,0,a))){var h=t.UTF8ToString(o);return v(s),h}g(s,"invalid usage")}function hr(e,r,a){var s=[];i(a),"string"!=typeof e&&b(s,"hashed_password must be a string"),e=_(e+"\0"),null!=c&&e.length-1!==c&&b(s,"invalid hashed_password length");var n=u(e),c=e.length-1;s.push(n);var o=u(r=m(s,r,"password")),h=r.length;s.push(o);var p=0==(0|t._crypto_pwhash_scryptsalsa208sha256_str_verify(n,o,h,0));return v(s),p}function pr(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"password")),c=e.length;s.push(n),f(s,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(s,"opsLimit must be an unsigned integer"),f(s,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(s,"memLimit must be an unsigned integer");var o=new l(0|t._crypto_pwhash_strbytes()).address;if(s.push(o),0==(0|t._crypto_pwhash_str(o,n,c,0,r,0,a))){var h=t.UTF8ToString(o);return v(s),h}g(s,"invalid usage")}function yr(e,r,a,s){var n=[];i(s),"string"!=typeof e&&b(n,"hashed_password must be a string"),e=_(e+"\0"),null!=o&&e.length-1!==o&&b(n,"invalid hashed_password length");var c=u(e),o=e.length-1;n.push(c),f(n,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(n,"opsLimit must be an unsigned integer"),f(n,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(n,"memLimit must be an unsigned integer");var h=0!=(0|t._crypto_pwhash_str_needs_rehash(c,r,0,a));return v(n),h}function ir(e,r,a){var s=[];i(a),"string"!=typeof e&&b(s,"hashed_password must be a string"),e=_(e+"\0"),null!=c&&e.length-1!==c&&b(s,"invalid hashed_password length");var n=u(e),c=e.length-1;s.push(n);var o=u(r=m(s,r,"password")),h=r.length;s.push(o);var p=0==(0|t._crypto_pwhash_str_verify(n,o,h,0));return v(s),p}function lr(e,r,a){var _=[];i(a),e=m(_,e,"privateKey");var s,n=0|t._crypto_scalarmult_scalarbytes();e.length!==n&&b(_,"invalid privateKey length"),s=u(e),_.push(s),r=m(_,r,"publicKey");var c,o=0|t._crypto_scalarmult_bytes();r.length!==o&&b(_,"invalid publicKey length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult(y,s,c))){var d=p(h,a);return v(_),d}g(_,"weak public key")}function ur(e,r){var a=[];i(r),e=m(a,e,"privateKey");var _,s=0|t._crypto_scalarmult_scalarbytes();e.length!==s&&b(a,"invalid privateKey length"),_=u(e),a.push(_);var n=new l(0|t._crypto_scalarmult_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_base(c,_))){var o=p(n,r);return v(a),o}g(a,"unknown error")}function dr(e,r,a){var _=[];i(a),e=m(_,e,"n");var s,n=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==n&&b(_,"invalid n length"),s=u(e),_.push(s),r=m(_,r,"p");var c,o=0|t._crypto_scalarmult_ed25519_bytes();r.length!==o&&b(_,"invalid p length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_ed25519_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult_ed25519(y,s,c))){var d=p(h,a);return v(_),d}g(_,"invalid point or scalar is 0")}function vr(e,r){var a=[];i(r),e=m(a,e,"scalar");var _,s=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==s&&b(a,"invalid scalar length"),_=u(e),a.push(_);var n=new l(0|t._crypto_scalarmult_ed25519_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_ed25519_base(c,_))){var o=p(n,r);return v(a),o}g(a,"scalar is 0")}function gr(e,r){var a=[];i(r),e=m(a,e,"scalar");var _,s=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==s&&b(a,"invalid scalar length"),_=u(e),a.push(_);var n=new l(0|t._crypto_scalarmult_ed25519_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_ed25519_base_noclamp(c,_))){var o=p(n,r);return v(a),o}g(a,"scalar is 0")}function br(e,r,a){var _=[];i(a),e=m(_,e,"n");var s,n=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==n&&b(_,"invalid n length"),s=u(e),_.push(s),r=m(_,r,"p");var c,o=0|t._crypto_scalarmult_ed25519_bytes();r.length!==o&&b(_,"invalid p length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_ed25519_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult_ed25519_noclamp(y,s,c))){var d=p(h,a);return v(_),d}g(_,"invalid point or scalar is 0")}function fr(e,r,a){var _=[];i(a),e=m(_,e,"scalar");var s,n=0|t._crypto_scalarmult_ristretto255_scalarbytes();e.length!==n&&b(_,"invalid scalar length"),s=u(e),_.push(s),r=m(_,r,"element");var c,o=0|t._crypto_scalarmult_ristretto255_bytes();r.length!==o&&b(_,"invalid element length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_ristretto255_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult_ristretto255(y,s,c))){var d=p(h,a);return v(_),d}g(_,"result is identity element")}function mr(e,r){var a=[];i(r),e=m(a,e,"scalar");var _,s=0|t._crypto_core_ristretto255_scalarbytes();e.length!==s&&b(a,"invalid scalar length"),_=u(e),a.push(_);var n=new l(0|t._crypto_core_ristretto255_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_ristretto255_base(c,_))){var o=p(n,r);return v(a),o}g(a,"scalar is 0")}function Er(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"message")),c=e.length;s.push(n),r=m(s,r,"nonce");var o,h=0|t._crypto_secretbox_noncebytes();r.length!==h&&b(s,"invalid nonce length"),o=u(r),s.push(o),a=m(s,a,"key");var y,d=0|t._crypto_secretbox_keybytes();a.length!==d&&b(s,"invalid key length"),y=u(a),s.push(y);var f=new l(0|c),E=f.address;s.push(E);var x=new l(0|t._crypto_secretbox_macbytes()),k=x.address;if(s.push(k),0==(0|t._crypto_secretbox_detached(E,k,n,c,0,o,y))){var S=p({mac:x,cipher:f},_);return v(s),S}g(s,"invalid usage")}function xr(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"message")),c=e.length;s.push(n),r=m(s,r,"nonce");var o,h=0|t._crypto_secretbox_noncebytes();r.length!==h&&b(s,"invalid nonce length"),o=u(r),s.push(o),a=m(s,a,"key");var y,d=0|t._crypto_secretbox_keybytes();a.length!==d&&b(s,"invalid key length"),y=u(a),s.push(y);var f=new l(c+t._crypto_secretbox_macbytes()|0),E=f.address;if(s.push(E),0==(0|t._crypto_secretbox_easy(E,n,c,0,o,y))){var x=p(f,_);return v(s),x}g(s,"invalid usage")}function kr(e){var r=[];i(e);var a=new l(0|t._crypto_secretbox_keybytes()),_=a.address;r.push(_),t._crypto_secretbox_keygen(_);var s=p(a,e);return v(r),s}function Sr(e,r,a,_,s){var n=[];i(s);var c=u(e=m(n,e,"ciphertext")),o=e.length;n.push(c),r=m(n,r,"mac");var h,y=0|t._crypto_secretbox_macbytes();r.length!==y&&b(n,"invalid mac length"),h=u(r),n.push(h),a=m(n,a,"nonce");var d,f=0|t._crypto_secretbox_noncebytes();a.length!==f&&b(n,"invalid nonce length"),d=u(a),n.push(d),_=m(n,_,"key");var E,x=0|t._crypto_secretbox_keybytes();_.length!==x&&b(n,"invalid key length"),E=u(_),n.push(E);var k=new l(0|o),S=k.address;if(n.push(S),0==(0|t._crypto_secretbox_open_detached(S,c,h,o,0,d,E))){var T=p(k,s);return v(n),T}g(n,"wrong secret key for the given ciphertext")}function Tr(e,r,a,_){var s=[];i(_),e=m(s,e,"ciphertext");var n,c=t._crypto_secretbox_macbytes(),o=e.length;o>>0;return v([]),r}function ht(e,r){var a=[];i(r);for(var _=t._malloc(24),s=0;s<6;s++)t.setValue(_+4*s,t.Runtime.addFunction(e[["implementation_name","random","stir","uniform","buf","close"][s]]),"i32");0!=(0|t._randombytes_set_implementation(_))&&g(a,"unsupported implementation"),v(a)}function pt(e){i(e),t._randombytes_stir()}function yt(e,r){var a=[];i(r),f(a,e,"upper_bound"),("number"!=typeof e||(0|e)!==e||e<0)&&b(a,"upper_bound must be an unsigned integer");var _=t._randombytes_uniform(e)>>>0;return v(a),_}function it(){var e=t._sodium_version_string(),r=t.UTF8ToString(e);return v([]),r}return l.prototype.to_Uint8Array=function(){var e=new Uint8Array(this.length);return e.set(t.HEAPU8.subarray(this.address,this.address+this.length)),e},e.add=function(e,r){if(!(e instanceof Uint8Array&&r instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can added");var t=e.length,a=0,_=0;if(r.length!=e.length)throw new TypeError("Arguments must have the same length");for(_=0;_>=8,a+=e[_]+r[_],e[_]=255&a},e.base64_variants=c,e.compare=function(e,r){if(!(e instanceof Uint8Array&&r instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be compared");if(e.length!==r.length)throw new TypeError("Only instances of identical length can be compared");for(var t=0,a=1,_=e.length;_-- >0;)t|=r[_]-e[_]>>8&a,a&=(r[_]^e[_])-1>>8;return t+t+a-1},e.from_base64=function(e,r){r=o(r);var a,_=[],s=new l(3*(e=m(_,e,"input")).length/4),n=u(e),c=d(4),h=d(4);return _.push(n),_.push(s.address),_.push(s.result_bin_len_p),_.push(s.b64_end_p),0!==t._sodium_base642bin(s.address,s.length,n,e.length,0,c,h,r)&&g(_,"invalid input"),t.getValue(h,"i32")-n!==e.length&&g(_,"incomplete input"),s.length=t.getValue(c,"i32"),a=s.to_Uint8Array(),v(_),a},e.from_hex=function(e){var r,a=[],_=new l((e=m(a,e,"input")).length/2),s=u(e),n=d(4);return a.push(s),a.push(_.address),a.push(_.hex_end_p),0!==t._sodium_hex2bin(_.address,_.length,s,e.length,0,0,n)&&g(a,"invalid input"),t.getValue(n,"i32")-s!==e.length&&g(a,"incomplete input"),r=_.to_Uint8Array(),v(a),r},e.from_string=_,e.increment=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be incremented");for(var r=256,t=0,a=e.length;t>=8,r+=e[t],e[t]=255&r},e.is_zero=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be checked");for(var r=0,t=0,a=e.length;t 0");var a,_=[],s=d(4),n=1,c=0,o=0|e.length,h=new l(o+r);_.push(s),_.push(h.address);for(var p=h.address,y=h.address+o+r;p>>48|o>>>32|o>>>16|o))-1>>16);return 0!==t._sodium_pad(s,h.address,e.length,r,h.length)&&g(_,"internal error"),h.length=t.getValue(s,"i32"),a=h.to_Uint8Array(),v(_),a},e.unpad=function(e,r){if(!(e instanceof Uint8Array))throw new TypeError("buffer must be a Uint8Array");if((r|=0)<=0)throw new Error("block size must be > 0");var a=[],_=u(e),s=d(4);return a.push(_),a.push(s),0!==t._sodium_unpad(s,_,e.length,r)&&g(a,"unsupported/invalid padding"),e=(e=new Uint8Array(e)).subarray(0,t.getValue(s,"i32")),v(a),e},e.ready=a,e.symbols=function(){return Object.keys(e).sort()},e.to_base64=h,e.to_hex=n,e.to_string=s,e}var t="object"==typeof e.sodium&&"function"==typeof e.sodium.onload?e.sodium.onload:null;"function"==typeof define&&define.amd?define(["exports","libsodium"],r):"object"==typeof exports&&"string"!=typeof exports.nodeName?r(exports,require("libsodium")):e.sodium=r(e.commonJsStrict={},e.libsodium),t&&e.sodium.ready.then((function(){t(e.sodium)}))}(this); + +},{"libsodium":210}],210:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__dirname){(function (){ +!function(A){function I(A){"use strict";var I;void 0===(I=A)&&(I={});var g=I;"object"!=typeof g.sodium&&("object"==typeof global?g=global:"object"==typeof window&&(g=window)),"object"==typeof g.sodium&&"number"==typeof g.sodium.totalMemory&&(I.TOTAL_MEMORY=g.sodium.totalMemory);var B=I;return I.ready=new Promise((function(A,I){(Q=B).onAbort=I,Q.print=function(A){},Q.printErr=function(A){},Q.onRuntimeInitialized=function(){try{Q._crypto_secretbox_keybytes(),A()}catch(A){I(A)}},Q.useBackupModule=function(){return new Promise((function(A,I){(Q={}).onAbort=I,Q.onRuntimeInitialized=function(){Object.keys(B).forEach((function(A){"getRandomValue"!==A&&delete B[A]})),Object.keys(Q).forEach((function(A){B[A]=Q[A]})),A()};var g,Q=void 0!==Q?Q:{},C={};for(g in Q)Q.hasOwnProperty(g)&&(C[g]=Q[g]);var E=[],i=!1,n=!1,a=!1,r=!1;i="object"==typeof window,n="function"==typeof importScripts,a="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,r=!i&&!a&&!n;var o,e,t,f,c,y="";function s(A){return Q.locateFile?Q.locateFile(A,y):y+A}a?(y=n?require("path").dirname(y)+"/":__dirname+"/",o=function(A,I){var g=bA(A);return g?I?g:g.toString():(f||(f=require("fs")),c||(c=require("path")),A=c.normalize(A),f.readFileSync(A,I?null:"utf8"))},t=function(A){var I=o(A,!0);return I.buffer||(I=new Uint8Array(I)),G(I.buffer),I},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),E=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Q),Q.inspect=function(){return"[Emscripten Module object]"}):r?("undefined"!=typeof read&&(o=function(A){var I=bA(A);return I?_A(I):read(A)}),t=function(A){var I;return(I=bA(A))?I:"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(G("object"==typeof(I=read(A,"binary"))),I)},"undefined"!=typeof scriptArgs?E=scriptArgs:void 0!==arguments&&(E=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(i||n)&&(n?y=self.location.href:"undefined"!=typeof document&&document.currentScript&&(y=document.currentScript.src),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",o=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText}catch(I){var g=bA(A);if(g)return _A(g);throw I}},n&&(t=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}catch(I){var g=bA(A);if(g)return g;throw I}}),e=function(A,I,g){var B=new XMLHttpRequest;B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=function(){if(200==B.status||0==B.status&&B.response)I(B.response);else{var Q=bA(A);Q?I(Q.buffer):g()}},B.onerror=g,B.send(null)}),Q.print;var w,h=Q.printErr||void 0;for(g in C)C.hasOwnProperty(g)&&(Q[g]=C[g]);C=null,Q.arguments&&(E=Q.arguments),Q.thisProgram&&Q.thisProgram,Q.quit&&Q.quit,Q.wasmBinary&&(w=Q.wasmBinary),Q.noExitRuntime&&Q.noExitRuntime;var D,u={Memory:function(A){this.buffer=new ArrayBuffer(65536*A.initial)},Module:function(A){},Instance:function(A,I){this.exports=function(A){for(var I,g=new Uint8Array(123),B=25;B>=0;--B)g[48+B]=52+B,g[65+B]=B,g[97+B]=26+B;function Q(A,I,B){for(var Q,C,E=0,i=I,n=B.length,a=I+(3*n>>2)-("="==B[n-2])-("="==B[n-1]);E>4,i>2),i>2]=n[0|K]|n[K+1|0]<<8|n[K+2|0]<<16|n[K+3|0]<<24,i[V+4>>2]=QA,16!=(0|(Z=Z+1|0)););for(g=X(W,A,64),K=i[(I=g)>>2],Z=i[I+4>>2],a=K,K=(QA=i[I+32>>2])+(W=i[I+128>>2])|0,I=($=i[I+36>>2])+i[I+132>>2]|0,I=K>>>0>>0?I+1|0:I,W=K,I=I+Z|0,W=I=(K=a+K|0)>>>0>>0?I+1|0:I,x=ug((Z=K)^(n[0|(K=A- -64|0)]|n[K+1|0]<<8|n[K+2|0]<<16|n[K+3|0]<<24)^-1377402159,I^(n[K+4|0]|n[K+5|0]<<8|n[K+6|0]<<16|n[K+7|0]<<24)^1359893119,32),K=I=p,I=I+1779033703|0,a=QA^(V=x-205731576|0),QA=I=V>>>0<4089235720?I+1|0:I,b=ug(a,$^I,24),m=I=p,j=K,a=x,I=I+W|0,I=(I=(x=b+Z|0)>>>0>>0?I+1|0:I)+(t=B=i[g+140>>2])|0,a=ug(a^(o=Z=(K=i[g+136>>2])+x|0),(G=x>>>0>o>>>0?I+1|0:I)^j,16),I=QA+(d=p)|0,t=ug((l=Z=V+a|0)^b,(W=V>>>0>l>>>0?I+1|0:I)^m,63),f=p,V=i[g+12>>2],Z=(b=i[g+144>>2])+($=QA=i[g+40>>2])|0,I=(T=i[g+148>>2])+(j=i[g+44>>2])|0,I=Z>>>0<$>>>0?I+1|0:I,$=Z,I=I+V|0,I=(Z=Z+i[g+8>>2]|0)>>>0<$>>>0?I+1|0:I,x=ug(Z^(n[A+72|0]|n[A+73|0]<<8|n[A+74|0]<<16|n[A+75|0]<<24)^725511199,(n[A+76|0]|n[A+77|0]<<8|n[A+78|0]<<16|n[A+79|0]<<24)^I^-1694144372,32),j=ug(r=(V=x-2067093701|0)^QA,j^(m=(QA=p)-((x>>>0<2067093701)+1150833018|0)|0),24),c=i[g+156>>2],r=j,I=I+($=p)|0,I=(I=(j=j+Z|0)>>>0>>0?I+1|0:I)+c|0,eA=ug((u=Z=j+i[g+152>>2]|0)^x,(k=j>>>0>u>>>0?I+1|0:I)^QA,16),I=m+(H=p)|0,cA=Z=V+eA|0,x=ug(r^Z,(V=V>>>0>Z>>>0?I+1|0:I)^$,63),m=p,QA=i[g+20>>2],Z=(U=i[g+160>>2])+(j=i[g+48>>2])|0,I=(iA=i[g+164>>2])+(y=i[g+52>>2])|0,$=Z,I=(I=Z>>>0>>0?I+1|0:I)+QA|0,rA=Z=Z+i[g+16>>2]|0,Z=Z>>>0<$>>>0?I+1|0:I,s=ug(rA^(n[A+80|0]|n[A+81|0]<<8|n[A+82|0]<<16|n[A+83|0]<<24)^-79577749,Z^(n[A+84|0]|n[A+85|0]<<8|n[A+86|0]<<16|n[A+87|0]<<24)^528734635,32),QA=I=p,I=I+1013904242|0,r=j^($=s-23791573|0),j=I=$>>>0<4271175723?I+1|0:I,I=ug(r,y^I,24),c=QA,Q=i[g+172>>2],r=I,e=s,s=I,rA=I+rA|0,I=(y=p)+Z|0,I=(I=s>>>0>rA>>>0?I+1|0:I)+(J=Q)|0,AA=ug(e^(F=Z=(QA=i[g+168>>2])+(s=rA)|0),(J=s>>>0>F>>>0?I+1|0:I)^c,16),I=j+(M=p)|0,y=ug(r^(_=Z=$+AA|0),(j=_>>>0<$>>>0?I+1|0:I)^y,63),c=p,s=i[g+28>>2],$=(Z=i[g+176>>2])+(D=rA=i[g+56>>2])|0,I=(yA=i[g+180>>2])+(w=i[g+60>>2])|0,I=(I=D>>>0>$>>>0?I+1|0:I)+s|0,I=(D=$)>>>0>(v=$=D+i[g+24>>2]|0)>>>0?I+1|0:I,S=ug(v^(n[A+88|0]|n[A+89|0]<<8|n[A+90|0]<<16|n[A+91|0]<<24)^327033209,I^(n[A+92|0]|n[A+93|0]<<8|n[A+94|0]<<16|n[A+95|0]<<24)^1541459225,32),s=ug(e=(r=(s=S)+1595750129|0)^rA,w^(rA=($=p)-((s>>>0<2699217167)+1521486533|0)|0),24),w=rA,Y=$,rA=i[g+188>>2],e=s,P=r,I=(D=p)+I|0,I=(I=(v=s+v|0)>>>0>>0?I+1|0:I)+(N=rA)|0,O=s=($=i[g+184>>2])+v|0,r=ug(s^S,(r=Y)^(Y=s>>>0>>0?I+1|0:I),16),I=(I=w)+(w=p)|0,v=s=P+r|0,S=D,D=I=s>>>0>>0?I+1|0:I,e=ug(e^s,S^I,63),s=p,S=m,P=x,L=_,I=m+G|0,m=o=o+x|0,I=(I=o>>>0>>0?I+1|0:I)+(N=q=i[g+196>>2])|0,_=ug((o=x=(IA=i[g+192>>2])+o|0)^r,(x=m>>>0>o>>>0?I+1|0:I)^w,32),I=(I=j)+(j=p)|0,G=I=(m=L+(G=_)|0)>>>0>>0?I+1|0:I,I=ug(P^m,I^S,24),fA=i[g+204>>2],P=I,r=_,w=o,o=I,_=w+I|0,I=(w=p)+x|0,I=(I=o>>>0>_>>>0?I+1|0:I)+(N=fA)|0,CA=x=(S=i[g+200>>2])+(o=_)|0,tA=ug(r^x,(o=o>>>0>x>>>0?I+1|0:I)^j,16),I=G+(_=p)|0,N=ug(P^(r=j=m+tA|0),(G=w)^(w=m>>>0>r>>>0?I+1|0:I),63),G=p,j=c,L=y,I=c+k|0,I=(I=(m=y+u|0)>>>0>>0?I+1|0:I)+(P=oA=i[g+212>>2])|0,u=ug((R=a)^(a=m=(x=i[g+208>>2])+(y=m)|0),(y=y>>>0>a>>>0?I+1|0:I)^d,32),I=D+(m=p)|0,j=ug(L^(c=v+u|0),(I=c>>>0>>0?I+1|0:I)^j,24),d=I,k=m,z=i[g+220>>2],L=j,R=c,I=(c=p)+y|0,I=(I=(D=a+j|0)>>>0>>0?I+1|0:I)+(P=z)|0,k=ug((D=j=(m=i[g+216>>2])+(y=D)|0)^u,(v=y>>>0>D>>>0?I+1|0:I)^k,16),I=(a=p)+d|0,aA=j=R+(y=k)|0,P=ug(L^j,(y=y>>>0>j>>>0?I+1|0:I)^c,63),c=p,d=s,L=e,I=s+J|0,I=(I=(e=e+F|0)>>>0>>0?I+1|0:I)+(u=E=i[g+228>>2])|0,e=ug((J=s=(j=i[g+224>>2])+e|0)^eA,(s=s>>>0>>0?I+1|0:I)^H,32),I=(H=p)+W|0,l=F=l+e|0,W=ug(L^F,(I=F>>>0>>0?I+1|0:I)^d,24),F=I,L=i[g+236>>2],u=W,I=(d=p)+s|0,I=(I=(J=J+W|0)>>>0>>0?I+1|0:I)+L|0,nA=ug((J=W=(BA=i[g+232>>2])+(s=J)|0)^e,(W=H)^(H=s>>>0>J>>>0?I+1|0:I),16),I=(I=F)+(F=p)|0,s=ug(u^(e=W=(s=nA)+l|0),(l=s>>>0>e>>>0?I+1|0:I)^d,63),d=p,u=f,gA=t,EA=cA,I=f+Y|0,I=(I=(cA=t+O|0)>>>0>>0?I+1|0:I)+(R=eA=i[g+244>>2])|0,f=I=(t=(W=i[g+240>>2])+(f=cA)|0)>>>0>>0?I+1|0:I,AA=ug(t^AA,I^M,32),I=(I=V)+(V=p)|0,O=M=EA+(Y=AA)|0,u=ug(gA^M,(I=Y>>>0>M>>>0?I+1|0:I)^u,24),gA=EA=p,M=I,Y=V,sA=u,I=f+EA|0,I=(I=(u=t+u|0)>>>0>>0?I+1|0:I)+(cA=i[g+252>>2])|0,u=t=(V=i[g+248>>2])+(f=u)|0,R=ug(t^AA,(R=Y)^(Y=t>>>0>>0?I+1|0:I),16),I=(I=M)+(M=p)|0,AA=ug(sA^(EA=t=(f=R)+O|0),(t=t>>>0>>0?I+1|0:I)^gA,63),gA=I=p,f=I,sA=k,I=o+eA|0,I=(I=(k=W)>>>0>(O=k+CA|0)>>>0?I+1|0:I)+f|0,O=ug(sA^(f=k=(o=O)+AA|0),(k=o>>>0>f>>>0?I+1|0:I)^a,32),I=l+(o=p)|0,e=I=(a=e+O|0)>>>0>>0?I+1|0:I,CA=AA=ug(AA^a,gA^I,24),gA=I=p,l=I,wA=AA,I=k+oA|0,I=(I=(AA=f+x|0)>>>0>>0?I+1|0:I)+l|0,CA=f=CA+(k=AA)|0,sA=ug(f^O,(l=o)^(o=f>>>0>>0?I+1|0:I),16),I=e+(l=p)|0,e=I=(f=a+sA|0)>>>0>>0?I+1|0:I,AA=ug(wA^(a=f),I^gA,63),k=p,O=N,I=iA+(f=G)|0,I=(I=(N=U+N|0)>>>0>>0?I+1|0:I)+v|0,U=I=(G=D+N|0)>>>0>>0?I+1|0:I,v=ug(G^nA,I^F,32),I=(I=t)+(t=p)|0,I=(F=(D=v)+EA|0)>>>0>>0?I+1|0:I,D=f,f=I,N=ug(O^F,D^I,24),iA=I=p,D=I,O=v,I=U+q|0,I=(I=(v=G+IA|0)>>>0>>0?I+1|0:I)+D|0,I=(G=(U=v)+N|0)>>>0>>0?I+1|0:I,U=G,D=I,nA=ug(O^G,I^t,16),I=f+(v=p)|0,EA=t=F+nA|0,N=ug(t^N,(f=t>>>0>>0?I+1|0:I)^iA,63),t=p,G=c,I=c+fA|0,I=(I=(F=S+P|0)>>>0>>0?I+1|0:I)+H|0,M=ug((S=c=F+J|0)^R,(c=c>>>0>>0?I+1|0:I)^M,32),I=w+(H=p)|0,I=r>>>0>(F=r+M|0)>>>0?I+1|0:I,r=G,G=I,r=w=ug(F^P,r^I,24),P=I=p,J=I,O=M,I=c+cA|0,I=(I=(w=(M=V)+S|0)>>>0>>0?I+1|0:I)+J|0,R=c=r+w|0,gA=ug(O^c,(M=H)^(H=c>>>0>>0?I+1|0:I),16),I=G+(J=p)|0,P=ug((S=c=F+gA|0)^r,(c=c>>>0>>0?I+1|0:I)^P,63),G=p,r=s,I=(F=d)+L|0,I=(I=(M=s+BA|0)>>>0>>0?I+1|0:I)+Y|0,w=ug((M=s=u+M|0)^tA,(s=s>>>0>>0?I+1|0:I)^_,32),I=(I=y)+(y=p)|0,_=ug(r^(Y=d=w+aA|0),(I=d>>>0>>0?I+1|0:I)^F,24),u=d=p,F=I,O=Y,Y=w,w=(I=M)+(M=Z)|0,I=s+yA|0,I=(I=w>>>0>>0?I+1|0:I)+d|0,M=s=w+(r=_)|0,w=I=s>>>0>>0?I+1|0:I,Y=ug(Y^s,I^y,16),I=(d=p)+F|0,O=ug(_^(r=y=O+(s=Y)|0),(s=r>>>0>>0?I+1|0:I)^u,63),y=p,F=t,_=S,u=Y,I=o+B|0,I=(I=(Y=K)>>>0>(S=Y+CA|0)>>>0?I+1|0:I)+t|0,S=ug(u^(t=Y=S+N|0),(o=d)^(d=t>>>0>>0?I+1|0:I),32),I=(I=c)+(c=p)|0,I=(o=S)>>>0>(Y=_+o|0)>>>0?I+1|0:I,u=_=ug((o=Y)^N,I^F,24),N=F=p,Y=I,CA=S,I=d+E|0,I=(I=(S=t+j|0)>>>0>>0?I+1|0:I)+F|0,F=t=(d=S)+_|0,tA=ug(CA^t,(S=t>>>0>>0?I+1|0:I)^c,16),I=(I=Y)+(Y=p)|0,o=t=(c=tA)+o|0,iA=ug(t^u,(_=t>>>0>>0?I+1|0:I)^N,63),c=p,N=r,I=D+(t=G)|0,I=(I=(d=U+P|0)>>>0>>0?I+1|0:I)+(u=aA=i[g+132>>2])|0,d=I=(G=(r=i[g+128>>2])+d|0)>>>0>>0?I+1|0:I,D=ug(G^sA,I^l,32),I=(I=s)+(s=p)|0,l=U=N+D|0,N=u=ug(U^P,(I=U>>>0>>0?I+1|0:I)^t,24),P=t=p,U=I,CA=D,I=d+T|0,d=D=b+G|0,I=(I=D>>>0>>0?I+1|0:I)+t|0,t=ug(CA^(D=G=D+u|0),(t=s)^(s=D>>>0>>0?I+1|0:I),16),I=(I=U)+(U=p)|0,l=G=t+l|0,fA=ug(G^N,(u=G>>>0>>0?I+1|0:I)^P,63),G=p,d=y,I=H+z|0,I=(I=(P=m+R|0)>>>0>>0?I+1|0:I)+y|0,I=(H=(N=P)+O|0)>>>0>>0?I+1|0:I,N=H,y=I,P=ug(H^nA,I^v,32),I=e+(H=p)|0,I=a>>>0>(v=a+P|0)>>>0?I+1|0:I,O=e=ug((a=v)^O,I^d,24),CA=d=p,v=I,R=a,I=y+rA|0,I=(a=$)>>>0>(e=a+N|0)>>>0?I+1|0:I,a=e,I=I+d|0,e=H,H=I=a>>>0>(y=O+a|0)>>>0?I+1|0:I,nA=ug((a=y)^P,e^I,16),I=(y=p)+v|0,O=ug((v=d=R+(e=nA)|0)^O,(I=e>>>0>v>>>0?I+1|0:I)^CA,63),d=p,N=I,P=t,R=AA,I=Q+(e=k)|0,I=(I=(t=QA)>>>0>(AA=t+AA|0)>>>0?I+1|0:I)+w|0,k=t=M+AA|0,w=ug(t^gA,(w=J)^(J=t>>>0>>0?I+1|0:I),32),I=(t=p)+f|0,CA=M=w+EA|0,e=ug(R^M,(I=M>>>0>>0?I+1|0:I)^e,24),gA=EA=p,f=I,M=t,EA=e,R=w,I=J+gA|0,I=(I=(w=e+k|0)>>>0>>0?I+1|0:I)+(AA=i[g+156>>2])|0,J=k=(t=i[g+152>>2])+w|0,e=M,M=I=k>>>0>>0?I+1|0:I,R=ug(R^k,e^I,16),I=(I=f)+(f=p)|0,e=I=(w=R)>>>0>(k=w+CA|0)>>>0?I+1|0:I,CA=ug(EA^(w=k),I^gA,63),EA=I=p,k=I,gA=v,I=S+z|0,I=(I=(v=F+m|0)>>>0>>0?I+1|0:I)+k|0,k=F=v+CA|0,P=ug(F^P,(S=U)^(U=F>>>0>>0?I+1|0:I),32),I=(F=p)+N|0,S=I=(v=gA+(S=P)|0)>>>0>>0?I+1|0:I,EA=CA=ug(CA^v,EA^I,24),gA=I=p,N=I,sA=P,I=U+q|0,I=(I=(P=k+IA|0)>>>0>>0?I+1|0:I)+N|0,I=(k=(U=P)+CA|0)>>>0>>0?I+1|0:I,U=k,N=F,F=I,CA=ug(sA^k,N^I,16),I=S+(N=p)|0,I=(k=v+CA|0)>>>0>>0?I+1|0:I,v=k,S=I,IA=ug(k^EA,I^gA,63),k=p,P=c,gA=iA,I=c+E|0,I=s+(j>>>0>(iA=j+iA|0)>>>0?I+1|0:I)|0,q=c=D+iA|0,iA=ug(c^nA,(s=y)^(y=c>>>0>>0?I+1|0:I),32),I=e+(c=p)|0,D=I=(s=w+iA|0)>>>0>>0?I+1|0:I,P=e=ug(gA^s,I^P,24),nA=I=p,w=I,I=y+aA|0,I=(I=(e=r+q|0)>>>0>>0?I+1|0:I)+w|0,q=y=P+(r=e)|0,iA=ug(y^iA,(w=y>>>0>>0?I+1|0:I)^c,16),I=D+(r=p)|0,aA=y=s+iA|0,e=ug(y^P,(s=y>>>0>>0?I+1|0:I)^nA,63),y=p,I=Q+(c=G)|0,I=H+((D=QA)>>>0>(P=D+fA|0)>>>0?I+1|0:I)|0,D=f,f=I=a>>>0>(G=a+P|0)>>>0?I+1|0:I,P=ug((a=G)^R,D^I,32),I=_+(G=p)|0,I=o>>>0>(H=o+P|0)>>>0?I+1|0:I,o=c,c=I,o=ug(H^fA,o^I,24),fA=I=p,D=I,gA=o,I=f+T|0,I=(I=(o=b)>>>0>(_=o+a|0)>>>0?I+1|0:I)+D|0,nA=f=gA+(o=_)|0,R=ug(f^P,(D=f>>>0>>0?I+1|0:I)^G,16),I=c+(o=p)|0,P=f=H+R|0,_=ug(gA^f,(G=f>>>0>>0?I+1|0:I)^fA,63),f=p,I=cA+(c=d)|0,I=M+((a=(H=V)+O|0)>>>0>>0?I+1|0:I)|0,H=I=(d=J+a|0)>>>0>>0?I+1|0:I,a=ug(d^tA,I^Y,32),I=u+(J=p)|0,Y=c,c=I=l>>>0>(M=l+a|0)>>>0?I+1|0:I,l=ug(M^O,Y^I,24),O=I=p,Y=I,gA=a,I=H+L|0,I=(I=(a=d+BA|0)>>>0>>0?I+1|0:I)+Y|0,a=ug(gA^(Y=d=a+(u=l)|0),(u=J)^(J=a>>>0>Y>>>0?I+1|0:I),16),I=c+(H=p)|0,l=ug(l^(u=d=M+a|0),(d=u>>>0>>0?I+1|0:I)^O,63),c=p,M=y,O=e,gA=a,I=F+oA|0,F=a=U+x|0,I=(I=a>>>0>>0?I+1|0:I)+y|0,e=ug(gA^(a=U=a+e|0),(y=F>>>0>a>>>0?I+1|0:I)^H,32),I=(I=G)+(G=p)|0,U=I=(H=e+P|0)>>>0>>0?I+1|0:I,P=M=ug(O^H,I^M,24),O=I=p,F=I,I=y+eA|0,I=(I=(a=(M=W)+a|0)>>>0>>0?I+1|0:I)+F|0,fA=y=P+a|0,tA=ug(y^e,(F=y>>>0>>0?I+1|0:I)^G,16),I=U+(M=p)|0,P=ug((EA=y=H+tA|0)^P,(y=y>>>0>>0?I+1|0:I)^O,63),G=p,H=f,e=_,I=w+AA|0,I=(I=(_=t+q|0)>>>0>>0?I+1|0:I)+f|0,f=I=(w=_)>>>0>(U=e+w|0)>>>0?I+1|0:I,_=ug((w=U)^CA,I^N,32),I=(I=d)+(d=p)|0,I=(a=_)>>>0>(U=a+u|0)>>>0?I+1|0:I,u=e=ug(e^(a=U),I^H,24),U=I,N=a,a=_,_=(I=w)+(w=Z)|0,I=f+yA|0,I=(I=w>>>0>_>>>0?I+1|0:I)+(H=p)|0,I=(f=(w=_)+e|0)>>>0>>0?I+1|0:I,w=f,_=I,a=ug(a^f,I^d,16),I=(e=p)+U|0,d=ug((CA=f=N+a|0)^u,(f=f>>>0>>0?I+1|0:I)^H,63),H=p,U=c,N=l,I=D+rA|0,I=(I=(u=(l=$)+nA|0)>>>0>>0?I+1|0:I)+c|0,l=D=N+u|0,c=I=D>>>0>>0?I+1|0:I,u=ug(D^iA,I^r,32),I=S+(D=p)|0,S=r=v+u|0,N=r=ug(N^r,(I=r>>>0>>0?I+1|0:I)^U,24),q=U=p,v=I,O=S,I=c+B|0,I=(I=(r=(S=K)+l|0)>>>0>>0?I+1|0:I)+U|0,I=(c=N+r|0)>>>0>>0?I+1|0:I,S=c,r=D,D=I,nA=ug(c^u,r^I,16),I=(I=v)+(v=p)|0,N=ug((c=O+(U=nA)|0)^N,(I=c>>>0>>0?I+1|0:I)^q,63),U=p,l=c,u=I,I=J+(r=k)|0,k=c=Y+IA|0,I=(I=c>>>0>>0?I+1|0:I)+(q=i[g+204>>2])|0,k=I=(c=(O=i[g+200>>2])+c|0)>>>0>>0?I+1|0:I,Y=ug(c^R,I^o,32),I=(I=s)+(s=p)|0,I=(o=Y)>>>0>(J=o+aA|0)>>>0?I+1|0:I,r=ug((o=J)^IA,I^r,24),R=aA=p,J=I,gA=o,aA=Y,I=k+R|0,I=(I=(Y=c+r|0)>>>0>>0?I+1|0:I)+(IA=i[g+164>>2])|0,Y=c=(iA=i[g+160>>2])+(k=Y)|0,aA=ug(aA^c,(o=c>>>0>>0?I+1|0:I)^s,16),I=(I=J)+(J=p)|0,r=ug(r^(gA=c=gA+(s=aA)|0),(c=c>>>0>>0?I+1|0:I)^R,63),R=I=p,s=I,sA=a,I=F+rA|0,I=(I=(a=(k=$)+fA|0)>>>0>>0?I+1|0:I)+s|0,e=ug(sA^(s=k=a+r|0),(k=a>>>0>s>>>0?I+1|0:I)^e,32),I=(F=p)+u|0,l=a=l+e|0,u=ug(r^a,(I=a>>>0>>0?I+1|0:I)^R,24),R=r=p,a=I,fA=l,sA=e,I=k+q|0,I=(I=(e=s+O|0)>>>0>>0?I+1|0:I)+r|0,l=s=e+u|0,sA=ug(sA^s,(r=F)^(F=s>>>0>>0?I+1|0:I),16),I=(r=p)+a|0,fA=ug((wA=s=fA+(k=sA)|0)^u,(s=s>>>0>>0?I+1|0:I)^R,63),k=p,I=AA+(a=G)|0,I=(I=(e=t+P|0)>>>0>>0?I+1|0:I)+_|0,e=ug((_=t=e+w|0)^nA,(t=t>>>0>>0?I+1|0:I)^v,32),I=(I=c)+(c=p)|0,w=I=e>>>0>(G=e+gA|0)>>>0?I+1|0:I,u=a=ug(G^P,I^a,24),P=I=p,v=I,a=(I=_)+(_=K)|0,I=t+B|0,I=(I=a>>>0<_>>>0?I+1|0:I)+v|0,AA=t=u+a|0,nA=ug(t^e,(v=t>>>0>>0?I+1|0:I)^c,16),I=w+(_=p)|0,R=t=G+nA|0,a=ug(t^u,(c=t>>>0>>0?I+1|0:I)^P,63),t=p,e=d,I=(G=H)+L|0,I=(I=(w=d+BA|0)>>>0>>0?I+1|0:I)+D|0,H=I=(d=w+S|0)>>>0>>0?I+1|0:I,D=ug(d^aA,I^J,32),I=(I=y)+(y=p)|0,I=(w=D)>>>0>(J=w+EA|0)>>>0?I+1|0:I,S=ug(e^(w=J),I^G,24),u=G=p,J=I,P=w,L=D,I=H+E|0,H=D=d+j|0,I=(I=D>>>0>>0?I+1|0:I)+G|0,aA=ug(L^(D=d=D+(e=S)|0),(w=H>>>0>D>>>0?I+1|0:I)^y,16),I=(I=J)+(J=p)|0,u=ug(S^(e=y=P+(G=aA)|0),(G=e>>>0>>0?I+1|0:I)^u,63),y=p,d=U,I=U+z|0,I=(I=(S=m+N|0)>>>0>>0?I+1|0:I)+o|0,I=(H=Y+S|0)>>>0>>0?I+1|0:I,Y=H,H=I,S=ug(Y^tA,I^M,32),I=(I=f)+(f=p)|0,o=d,d=I=(U=(M=S)+CA|0)>>>0>>0?I+1|0:I,N=o=ug(U^N,o^I,24),P=I=p,M=I,L=S,S=(I=Y)+(Y=W)|0,I=H+eA|0,I=(I=Y>>>0>S>>>0?I+1|0:I)+M|0,M=H=(Y=S)+o|0,o=ug(L^H,(Y=H>>>0>>0?I+1|0:I)^f,16),I=d+(H=p)|0,I=(f=U+o|0)>>>0>>0?I+1|0:I,U=f,S=I,N=ug(f^N,I^P,63),f=p,d=t,P=a,L=o,I=F+T|0,I=(I=(a=(o=b)+l|0)>>>0>>0?I+1|0:I)+t|0,t=I=a>>>0>(F=P+a|0)>>>0?I+1|0:I,o=ug(L^F,I^H,32),I=(I=G)+(G=p)|0,I=(a=o)>>>0>(H=a+e|0)>>>0?I+1|0:I,l=e=ug(P^(a=H),I^d,24),H=I,P=o,o=(I=F)+(F=Z)|0,I=t+yA|0,I=(I=o>>>0>>0?I+1|0:I)+(d=p)|0,F=t=o+e|0,o=I=t>>>0>>0?I+1|0:I,t=(G=tA=ug(P^t,I^G,16))+a|0,I=(a=p)+H|0,e=t,L=ug(H=t^l,(l=t>>>0>>0?I+1|0:I)^d,63),d=p,I=v+Q|0,I=(I=(G=QA)>>>0>(H=G+AA|0)>>>0?I+1|0:I)+(t=y)|0,v=G=H+u|0,r=ug(G^sA,(y=G>>>0>>0?I+1|0:I)^r,32),I=S+(G=p)|0,I=(H=U+r|0)>>>0>>0?I+1|0:I,U=H,S=ug(H^u,I^t,24),P=t=p,H=I,AA=U,I=y+oA|0,I=(U=x)>>>0>(v=U+v|0)>>>0?I+1|0:I,U=v,I=I+t|0,v=y=v+(u=S)|0,y=ug(y^r,(S=y>>>0>>0?I+1|0:I)^G,16),I=(U=p)+H|0,EA=t=AA+y|0,BA=ug(t^u,(G=t>>>0>>0?I+1|0:I)^P,63),H=p,P=N,I=w+IA|0,I=(I=(r=D+iA|0)>>>0>>0?I+1|0:I)+(t=f)|0,u=ug((f=D=r+N|0)^nA,(D=r>>>0>f>>>0?I+1|0:I)^_,32),I=(I=s)+(s=p)|0,N=w=(_=u)+wA|0,r=ug(P^w,(I=w>>>0<_>>>0?I+1|0:I)^t,24),w=t=p,_=I,P=r,I=D+t|0,I=(I=(r=f+r|0)>>>0>>0?I+1|0:I)+(AA=i[g+132>>2])|0,D=f=(t=i[g+128>>2])+r|0,r=I=f>>>0>>0?I+1|0:I,nA=ug(f^u,I^s,16),I=(I=_)+(_=p)|0,CA=ug(P^(f=(s=nA)+N|0),(I=f>>>0>>0?I+1|0:I)^w,63),s=p,u=f,N=I,P=y,I=cA+(w=k)|0,I=(I=(f=(y=V)+fA|0)>>>0>>0?I+1|0:I)+Y|0,M=ug((f=y=f+M|0)^aA,(k=f>>>0>>0?I+1|0:I)^J,32),I=(y=p)+c|0,I=(Y=M)>>>0>(J=Y+R|0)>>>0?I+1|0:I,w=ug((Y=J)^fA,I^w,24),gA=R=p,c=I,J=y,aA=M,I=k+R|0,I=(I=(M=f+w|0)>>>0>>0?I+1|0:I)+(fA=i[g+196>>2])|0,M=f=(y=i[g+192>>2])+(k=M)|0,aA=ug(aA^f,(R=J)^(J=f>>>0>>0?I+1|0:I),16),I=(I=c)+(c=p)|0,w=ug(w^(R=f=(k=aA)+Y|0),(f=f>>>0>>0?I+1|0:I)^gA,63),gA=I=p,k=I,I=o+q|0,I=(I=(Y=F+O|0)>>>0>>0?I+1|0:I)+k|0,I=(F=Y+w|0)>>>0>>0?I+1|0:I,Y=F,k=I,o=ug(F^P,I^U,32),I=(U=p)+N|0,u=F=u+o|0,N=ug(w^F,(I=F>>>0>>0?I+1|0:I)^gA,24),q=F=p,w=I,P=o,I=k+AA|0,I=(I=(o=t+Y|0)>>>0>>0?I+1|0:I)+F|0,O=k=o+N|0,gA=ug(P^k,(F=k>>>0>>0?I+1|0:I)^U,16),I=(I=w)+(w=p)|0,Y=k=(U=gA)+u|0,q=ug(k^N,(o=k>>>0>>0?I+1|0:I)^q,63),U=p,I=Q+(k=d)|0,I=S+((u=QA)>>>0>(N=u+L|0)>>>0?I+1|0:I)|0,v=I=(d=v+N|0)>>>0>>0?I+1|0:I,u=ug(d^nA,I^_,32),I=(I=f)+(f=p)|0,I=(_=u)>>>0>(S=_+R|0)>>>0?I+1|0:I,_=k,k=I,N=ug(S^L,_^I,24),L=I=p,_=I,P=u,I=v+rA|0,I=(I=(u=d+$|0)>>>0>>0?I+1|0:I)+_|0,_=I=(d=(v=u)+N|0)>>>0>>0?I+1|0:I,nA=ug(P^(v=d),I^f,16),I=k+(u=p)|0,R=f=S+nA|0,N=ug(f^N,(d=f>>>0>>0?I+1|0:I)^L,63),f=p,k=H,I=H+T|0,I=r+(b>>>0>(P=b+BA|0)>>>0?I+1|0:I)|0,r=c,c=I=D>>>0>(H=D+P|0)>>>0?I+1|0:I,P=ug(H^aA,r^I,32),I=l+(D=p)|0,r=k,k=I=e>>>0>(S=e+P|0)>>>0?I+1|0:I,l=e=ug(S^BA,r^I,24),r=I=p,I=c+IA|0,I=(I=(e=H+iA|0)>>>0>>0?I+1|0:I)+r|0,IA=c=l+e|0,iA=ug(c^P,(H=c>>>0>>0?I+1|0:I)^D,16),I=k+(D=p)|0,BA=c=S+iA|0,e=ug(c^l,(k=c>>>0>>0?I+1|0:I)^r,63),c=p,S=s,I=s+oA|0,I=J+((r=x)>>>0>(l=r+CA|0)>>>0?I+1|0:I)|0,a=ug((r=s=M+l|0)^tA,(s=r>>>0>>0?I+1|0:I)^a,32),I=(I=G)+(G=p)|0,P=S=ug((l=J=a+EA|0)^CA,(I=a>>>0>l>>>0?I+1|0:I)^S,24),L=J=p,M=I,I=s+cA|0,I=(I=(r=(S=V)+r|0)>>>0>>0?I+1|0:I)+J|0,J=s=P+r|0,a=ug(s^a,(S=s>>>0>>0?I+1|0:I)^G,16),I=(I=M)+(M=p)|0,CA=s=a+l|0,P=ug(s^P,(G=s>>>0>>0?I+1|0:I)^L,63),s=p,L=N,aA=a,I=F+eA|0,I=(I=(a=W)>>>0>(l=a+O|0)>>>0?I+1|0:I)+(r=f)|0,f=I=(a=l)>>>0>(F=a+N|0)>>>0?I+1|0:I,l=ug(aA^(a=F),I^M,32),I=(I=k)+(k=p)|0,N=F=(M=l)+BA|0,L=r=ug(L^F,(I=F>>>0>>0?I+1|0:I)^r,24),BA=F=p,M=I,I=f+B|0,I=(I=(a=(r=K)+a|0)>>>0>>0?I+1|0:I)+F|0,tA=f=L+a|0,aA=ug(f^l,(r=k)^(k=f>>>0>>0?I+1|0:I),16),I=(F=p)+M|0,M=f=(r=aA)+N|0,L=ug(f^L,(r=f>>>0>>0?I+1|0:I)^BA,63),f=p,N=e,I=_+z|0,_=e=m+v|0,I=(I=e>>>0>>0?I+1|0:I)+(a=c)|0,l=ug((e=v=N+e|0)^gA,(c=e>>>0<_>>>0?I+1|0:I)^w,32),I=(I=G)+(G=p)|0,v=I=(w=(v=l)+CA|0)>>>0>>0?I+1|0:I,N=a=ug(N^w,I^a,24),BA=I=p,_=I,I=c+E|0,I=(I=(a=j)>>>0>(e=a+e|0)>>>0?I+1|0:I)+_|0,_=c=N+(a=e)|0,G=ug(c^l,(a=c>>>0>>0?I+1|0:I)^G,16),I=v+(e=p)|0,I=(c=w+G|0)>>>0>>0?I+1|0:I,w=c,v=I,BA=ug(c^N,I^BA,63),c=p,l=s,O=P,I=H+yA|0,I=(I=(N=Z)>>>0>(P=N+IA|0)>>>0?I+1|0:I)+s|0,I=(H=O+(N=P)|0)>>>0>>0?I+1|0:I,N=H,s=I,P=ug(H^nA,I^u,32),I=o+(H=p)|0,o=I=(u=Y+P|0)>>>0>>0?I+1|0:I,u=ug(O^(Y=u),I^l,24),O=I=p,l=I,I=s+fA|0,I=(I=(N=y+N|0)>>>0>>0?I+1|0:I)+l|0,l=s=(IA=u)+(u=N)|0,CA=ug(s^P,(N=H)^(H=s>>>0>>0?I+1|0:I),16),I=o+(u=p)|0,I=(s=Y+CA|0)>>>0>>0?I+1|0:I,Y=s,IA=ug(s^IA,I^O,63),s=p,N=I,gA=q,I=S+(o=U)|0,I=(I=(q=J+q|0)>>>0>>0?I+1|0:I)+(O=nA=i[g+156>>2])|0,J=I=(U=(P=i[g+152>>2])+(J=q)|0)>>>0>>0?I+1|0:I,S=ug(U^iA,I^D,32),I=(I=d)+(d=p)|0,q=D=S+R|0,O=o=ug(gA^D,(I=D>>>0>>0?I+1|0:I)^o,24),R=iA=p,D=I,gA=EA=i[g+236>>2],EA=q,q=S,I=J+R|0,I=(I=(o=o+U|0)>>>0>>0?I+1|0:I)+gA|0,I=(U=(S=i[g+232>>2])+o|0)>>>0>>0?I+1|0:I,o=d,d=I,iA=ug(q^U,o^I,16),I=(J=p)+D|0,O=ug((D=o=EA+(q=iA)|0)^O,(o=o>>>0>>0?I+1|0:I)^R,63),R=I=p,q=I,EA=G,I=k+T|0,I=(I=(G=b+tA|0)>>>0>>0?I+1|0:I)+q|0,e=ug(EA^(q=b=G+O|0),(b=b>>>0>>0?I+1|0:I)^e,32),I=(G=p)+N|0,N=k=Y+e|0,T=ug(O^k,R^(I=k>>>0>>0?I+1|0:I),24),tA=k=p,Y=I,O=N,R=e,I=b+E|0,I=(I=(e=j)>>>0>(N=e+q|0)>>>0?I+1|0:I)+k|0,R=ug(R^(k=b=(e=N)+T|0),(e=e>>>0>k>>>0?I+1|0:I)^G,16),I=(I=Y)+(Y=p)|0,N=b=O+(G=R)|0,O=ug(b^T,(q=b>>>0>>0?I+1|0:I)^tA,63),G=p,b=f,EA=L,I=f+yA|0,I=a+(Z>>>0>(L=Z+L|0)>>>0?I+1|0:I)|0,u=ug((T=f=_+L|0)^CA,(f=f>>>0<_>>>0?I+1|0:I)^u,32),I=o+(_=p)|0,I=(a=D+u|0)>>>0>>0?I+1|0:I,D=a,o=b,b=I,L=a=ug(EA^a,o^I,24),CA=I=p,o=I,EA=a,tA=u,I=f+oA|0,I=(I=(a=x)>>>0>(u=a+T|0)>>>0?I+1|0:I)+o|0,L=f=L+(a=u)|0,tA=ug(tA^f,(o=f>>>0>>0?I+1|0:I)^_,16),I=b+(_=p)|0,I=(f=D+tA|0)>>>0>>0?I+1|0:I,D=f,a=I,u=ug(EA^f,I^CA,63),f=p,b=c,I=c+AA|0,I=(I=(T=t+BA|0)>>>0>>0?I+1|0:I)+H|0,I=(t=l+T|0)>>>0>>0?I+1|0:I,l=t,t=I,T=ug(l^iA,I^J,32),I=r+(c=p)|0,r=b,b=I=(H=M+T|0)>>>0>>0?I+1|0:I,r=M=ug(H^BA,r^I,24),BA=I=p,J=I,I=t+z|0,I=(I=(M=m+l|0)>>>0>>0?I+1|0:I)+J|0,l=m=r+(t=M)|0,T=ug(m^T,(M=c)^(c=t>>>0>m>>>0?I+1|0:I),16),I=b+(J=p)|0,z=m=H+T|0,M=ug(m^r,(t=m>>>0>>0?I+1|0:I)^BA,63),b=p,m=s,I=s+fA|0,I=(I=(H=y+IA|0)>>>0>>0?I+1|0:I)+d|0,I=(y=H+U|0)>>>0>>0?I+1|0:I,U=y,y=I,F=ug(U^aA,I^F,32),I=v+(s=p)|0,r=m,m=I=w>>>0>(d=w+F|0)>>>0?I+1|0:I,v=w=ug(d^IA,r^I,24),r=I=p,I=y+nA|0,I=(I=(U=U+P|0)>>>0

>>0?I+1|0:I)+r|0,H=y=U+w|0,F=ug(y^F,(w=s)^(s=y>>>0>>0?I+1|0:I),16),I=m+(U=p)|0,r=ug((w=y=d+F|0)^v,(y=y>>>0>>0?I+1|0:I)^r,63),m=p,d=f,P=F,I=f+e|0,I=(F=k+u|0)>>>0>>0?I+1|0:I,k=F,I=I+(v=i[g+164>>2])|0,v=ug(P^(F=f=F+i[g+160>>2]|0),(f=f>>>0>>0?I+1|0:I)^U,32),I=(I=t)+(t=p)|0,e=d,d=I=(k=(U=v)+z|0)>>>0>>0?I+1|0:I,e=ug(k^u,e^I,24),P=I=p,U=I,I=f+gA|0,I=(I=(F=F+S|0)>>>0>>0?I+1|0:I)+U|0,BA=ug((z=f=F+e|0)^v,(f=f>>>0>>0?I+1|0:I)^t,16),I=d+(U=p)|0,d=t=k+BA|0,u=ug(t^e,(k=t>>>0>>0?I+1|0:I)^P,63),t=p,e=M,S=w,I=o+rA|0,I=(I=(w=(M=$)+L|0)>>>0>>0?I+1|0:I)+(F=b)|0,Y=ug((v=M=e+w|0)^R,(b=w>>>0>v>>>0?I+1|0:I)^Y,32),I=(I=y)+(y=p)|0,o=F,F=I=(w=Y)>>>0>(M=S+w|0)>>>0?I+1|0:I,o=S=ug(e^M,o^I,24),e=I=p,S=Y,I=b+Q|0,I=(I=(Y=QA)>>>0>(v=Y+v|0)>>>0?I+1|0:I)+e|0,v=ug(S^(w=b=v+o|0),(Y=w>>>0>>0?I+1|0:I)^y,16),I=F+(S=p)|0,P=ug((F=b=M+v|0)^o,(M=F>>>0>>0?I+1|0:I)^e,63),b=p,L=r,I=c+cA|0,I=(o=V)>>>0>(r=o+l|0)>>>0?I+1|0:I,o=r,I=I+(y=m)|0,e=ug((r=c=L+r|0)^tA,(m=r>>>0>>0?I+1|0:I)^_,32),I=q+(c=p)|0,_=y,y=I=(o=N+e|0)>>>0>>0?I+1|0:I,l=ug(L^o,_^I,24),q=I=p,_=I,N=e,e=(I=r)+(r=W)|0,I=m+eA|0,I=(I=r>>>0>e>>>0?I+1|0:I)+_|0,_=I=(r=e)>>>0>(m=r+l|0)>>>0?I+1|0:I,L=ug(N^m,I^c,16),I=y+(r=p)|0,N=ug((c=o+L|0)^l,(I=c>>>0>>0?I+1|0:I)^q,63),y=p,e=I,I=B+(o=G)|0,I=s+((l=K)>>>0>(q=l+O|0)>>>0?I+1|0:I)|0,l=G=H+q|0,q=ug(G^T,(s=G>>>0>>0?I+1|0:I)^J,32),I=a+(G=p)|0,J=I=D>>>0>(H=D+q|0)>>>0?I+1|0:I,T=I=ug(H^O,I^o,24),D=I,o=I+l|0,I=(a=p)+s|0,I=(I=o>>>0>>0?I+1|0:I)+(IA=i[g+204>>2])|0,I=(s=o+i[g+200>>2]|0)>>>0>>0?I+1|0:I,o=G,G=I,IA=ug(s^q,o^I,16),I=J+(D=p)|0,I=(o=H+IA|0)>>>0>>0?I+1|0:I,H=o,J=I,a=ug(T^o,I^a,63),o=I=p,l=c,T=v,I=f+E|0,I=(I=(c=j)>>>0>(v=c+z|0)>>>0?I+1|0:I)+o|0,T=ug(T^(q=f=(c=v)+a|0),(f=f>>>0>>0?I+1|0:I)^S,32),I=(c=p)+e|0,S=I=(v=l+(S=T)|0)>>>0>>0?I+1|0:I,a=ug(a^v,o^I,24),l=I=p,o=I,R=a,I=f+Q|0,I=(I=(a=QA)>>>0>(e=a+q|0)>>>0?I+1|0:I)+o|0,T=ug((o=f=R+(a=e)|0)^T,(a=o>>>0>>0?I+1|0:I)^c,16),I=S+(e=p)|0,I=(f=v+T|0)>>>0>>0?I+1|0:I,v=f,S=I,f=ug(R^f,I^l,63),c=p,l=t,R=u,I=t+B|0,I=Y+((u=K)>>>0>(q=R+u|0)>>>0?I+1|0:I)|0,r=ug((u=t=w+q|0)^L,(t=t>>>0>>0?I+1|0:I)^r,32),I=J+(w=p)|0,J=I=H>>>0>(Y=H+r|0)>>>0?I+1|0:I,q=l=ug(R^(H=Y),I^l,24),z=I=p,Y=I,R=l,L=r,I=t+cA|0,I=(I=(r=V)>>>0>(l=r+u|0)>>>0?I+1|0:I)+Y|0,q=t=q+(r=l)|0,L=ug(L^t,(Y=w)^(w=t>>>0>>0?I+1|0:I),16),I=J+(Y=p)|0,I=(t=H+L|0)>>>0>>0?I+1|0:I,H=t,J=I,u=ug(R^t,I^z,63),t=p,R=P,I=eA+(r=b)|0,I=_+((l=W)>>>0>(P=l+P|0)>>>0?I+1|0:I)|0,l=ug((_=b=m+P|0)^IA,(b=m>>>0>_>>>0?I+1|0:I)^D,32),I=k+(m=p)|0,I=(D=d+l|0)>>>0>>0?I+1|0:I,d=D,k=I,I=ug(R^D,I^r,24),z=i[g+236>>2],R=I,r=_,_=I,r=r+I|0,I=(D=p)+b|0,I=(I=r>>>0<_>>>0?I+1|0:I)+z|0,r=I=(b=r+i[g+232>>2]|0)>>>0>>0?I+1|0:I,z=ug((_=b)^l,I^m,16),I=k+(l=p)|0,P=b=d+z|0,D=ug(R^b,(m=b>>>0>>0?I+1|0:I)^D,63),b=p,d=y,R=N,I=y+G|0,I=(I=(k=s+N|0)>>>0>>0?I+1|0:I)+(IA=i[g+164>>2])|0,U=ug((N=y=(s=k)+i[g+160>>2]|0)^BA,(y=y>>>0>>0?I+1|0:I)^U,32),I=M+(s=p)|0,M=d,d=I=F>>>0>(G=F+U|0)>>>0?I+1|0:I,M=F=ug(R^G,M^I,24),BA=I=p,k=I,R=U,I=y+oA|0,I=(I=(F=(U=x)+N|0)>>>0>>0?I+1|0:I)+k|0,IA=y=M+F|0,F=ug(R^y,(k=s)^(s=y>>>0>>0?I+1|0:I),16),I=d+(k=p)|0,I=(y=G+F|0)>>>0>>0?I+1|0:I,G=y,d=I,N=ug(y^M,I^BA,63),y=p,U=t,R=F,I=t+a|0,I=(I=(F=o+u|0)>>>0>>0?I+1|0:I)+(M=i[g+132>>2])|0,o=ug(R^(M=t=F+i[g+128>>2]|0),(t=t>>>0>>0?I+1|0:I)^k,32),I=(I=m)+(m=p)|0,a=U,U=I=o>>>0>(k=o+P|0)>>>0?I+1|0:I,a=ug(k^u,a^I,24),P=I=p,F=I,u=o,o=(I=M)+(M=$)|0,I=t+rA|0,I=(I=o>>>0>>0?I+1|0:I)+F|0,BA=t=o+a|0,AA=ug(u^t,(F=t>>>0>>0?I+1|0:I)^m,16),I=U+(M=p)|0,U=I=(m=k+AA|0)>>>0>>0?I+1|0:I,u=ug((k=m)^a,I^P,63),m=p,P=D,I=w+yA|0,w=o=(D=Z)+q|0,I=(I=o>>>0>>0?I+1|0:I)+(t=b)|0,a=ug((o=D=P+o|0)^T,(b=w>>>0>o>>>0?I+1|0:I)^e,32),I=d+(D=p)|0,I=(w=G+a|0)>>>0>>0?I+1|0:I,G=w,e=t,t=I,I=ug(P^w,e^I,24),P=i[g+156>>2],e=I,w=I,o=I+o|0,I=(d=p)+b|0,I=(I=o>>>0>>0?I+1|0:I)+P|0,I=o>>>0>(b=o+i[g+152>>2]|0)>>>0?I+1|0:I,o=D,D=I,q=ug((w=b)^a,o^I,16),I=t+(o=p)|0,a=d,d=I=(b=G+q|0)>>>0>>0?I+1|0:I,P=ug(e^(G=b),a^I,63),t=p,b=y,I=y+r|0,I=(I=(a=_+N|0)>>>0<_>>>0?I+1|0:I)+(e=i[g+204>>2])|0,I=(y=a+i[g+200>>2]|0)>>>0>>0?I+1|0:I,a=Y,Y=I,a=ug(y^L,a^I,32),I=S+(_=p)|0,I=(r=v+a|0)>>>0>>0?I+1|0:I,v=r,e=b,b=I,r=ug(r^N,e^I,24),e=I=p,L=r,I=I+Y|0,I=(I=(r=y+r|0)>>>0>>0?I+1|0:I)+(N=i[g+148>>2])|0,I=(y=r+i[g+144>>2]|0)>>>0>>0?I+1|0:I,Y=y,r=_,_=I,T=ug(y^a,r^I,16),I=b+(r=p)|0,I=(y=v+T|0)>>>0>>0?I+1|0:I,v=y,S=I,N=ug(L^y,e^I,63),y=p,b=c,L=f,I=c+s|0,c=a=f+IA|0,I=(I=a>>>0>>0?I+1|0:I)+(e=i[g+196>>2])|0,e=ug((a=f=a+i[g+192>>2]|0)^z,(f=a>>>0>>0?I+1|0:I)^l,32),I=J+(c=p)|0,b=ug(L^(s=H+e|0),(I=s>>>0>>0?I+1|0:I)^b,24),H=I,z=i[g+220>>2],l=b,R=s,I=(s=p)+f|0,f=a=a+b|0,I=(I=a>>>0>>0?I+1|0:I)+(L=z)|0,L=ug(b=(a=b=(J=i[g+216>>2])+a|0)^e,(e=f>>>0>a>>>0?I+1|0:I)^c,16),I=(I=H)+(H=p)|0,I=(f=L)>>>0>(b=R+f|0)>>>0?I+1|0:I,f=s,s=I,I=ug(l^b,f^I,63),O=i[g+236>>2],R=I,c=I,l=I+BA|0,I=(f=p)+F|0,I=(I=c>>>0>l>>>0?I+1|0:I)+O|0,q=ug((l=c=(F=l)+i[g+232>>2]|0)^q,(c=c>>>0>>0?I+1|0:I)^o,32),I=S+(F=p)|0,I=(o=v+q|0)>>>0>>0?I+1|0:I,v=o,S=f,f=I,I=ug(R^o,S^I,24),R=q,o=I,l=I+l|0,I=(S=p)+c|0,I=z+(o>>>0>l>>>0?I+1|0:I)|0,q=c=l+J|0,z=ug(R^c,(l=F)^(F=c>>>0>>0?I+1|0:I),16),I=f+(J=p)|0,I=(c=v+z|0)>>>0>>0?I+1|0:I,v=c,f=S,S=I,f=ug(o^c,f^I,63),c=p,R=u,I=rA+(o=m)|0,I=D+((u=(l=$)+u|0)>>>0>>0?I+1|0:I)|0,r=ug((l=m=w+u|0)^T,(m=w>>>0>m>>>0?I+1|0:I)^r,32),I=s+(D=p)|0,I=(w=b+r|0)>>>0>>0?I+1|0:I,b=w,s=I,u=o=ug(R^w,I^o,24),T=I=p,w=I,R=r,I=m+eA|0,I=(I=(o=W)>>>0>(r=o+l|0)>>>0?I+1|0:I)+w|0,BA=m=u+(o=r)|0,IA=ug(R^m,(r=D)^(D=o>>>0>m>>>0?I+1|0:I),16),I=s+(w=p)|0,l=ug((s=m=b+IA|0)^u,(o=s>>>0>>0?I+1|0:I)^T,63),b=p,m=t,I=t+E|0,I=_+((r=j)>>>0>(u=r+P|0)>>>0?I+1|0:I)|0,r=ug((_=t=Y+u|0)^L,(t=t>>>0>>0?I+1|0:I)^H,32),I=U+(H=p)|0,I=k>>>0>(Y=k+r|0)>>>0?I+1|0:I,k=Y,Y=m,m=I,u=Y=ug(k^P,Y^I,24),P=I=p,U=I,I=t+B|0,I=(I=(Y=K)>>>0>(_=Y+_|0)>>>0?I+1|0:I)+U|0,U=t=u+_|0,T=ug(t^r,(Y=H)^(H=t>>>0<_>>>0?I+1|0:I),16),I=m+(Y=p)|0,I=(t=k+T|0)>>>0>>0?I+1|0:I,k=t,_=I,u=ug(t^u,I^P,63),m=p,I=e+(t=y)|0,I=(I=(r=a+N|0)>>>0>>0?I+1|0:I)+(P=i[g+156>>2])|0,a=M,M=I=(y=r+i[g+152>>2]|0)>>>0>>0?I+1|0:I,e=ug(y^AA,a^I,32),I=d+(r=p)|0,I=(a=G+e|0)>>>0>>0?I+1|0:I,G=a,d=t,t=I,a=ug(a^N,d^I,24),N=I=p,R=a,I=M+I|0,I=(I=(a=a+y|0)>>>0>>0?I+1|0:I)+(P=i[g+204>>2])|0,L=y=a+i[g+200>>2]|0,a=ug(y^e,(M=y>>>0>>0?I+1|0:I)^r,16),I=t+(y=p)|0,I=(r=G+a|0)>>>0>>0?I+1|0:I,G=r,d=I,N=ug(R^r,N^I,63),t=p,P=a,I=F+Q|0,I=(I=(a=QA)>>>0>(e=a+q|0)>>>0?I+1|0:I)+(r=b)|0,b=F=(a=e)+l|0,e=ug(P^F,(e=y)^(y=a>>>0>F>>>0?I+1|0:I),32),I=_+(F=p)|0,I=(a=k+e|0)>>>0>>0?I+1|0:I,k=a,_=I,a=ug(a^l,I^r,24),r=I=p,l=a,I=y+I|0,I=(I=(a=a+b|0)>>>0>>0?I+1|0:I)+(P=i[g+132>>2])|0,q=b=a+i[g+128>>2]|0,AA=ug(b^e,(y=F)^(F=a>>>0>b>>>0?I+1|0:I),16),I=_+(a=p)|0,_=I=(b=k+AA|0)>>>0>>0?I+1|0:I,P=ug(l^(k=b),I^r,63),b=p,I=D+cA|0,I=(I=(r=V)>>>0>(e=r+BA|0)>>>0?I+1|0:I)+(y=m)|0,m=I=(r=e)>>>0>(D=r+u|0)>>>0?I+1|0:I,e=ug((r=D)^z,I^J,32),I=d+(J=p)|0,I=G>>>0>(D=G+e|0)>>>0?I+1|0:I,G=D,l=y,y=I,I=ug(D^u,l^I,24),u=i[g+164>>2],l=I,D=I,r=I+r|0,I=(d=p)+m|0,I=(I=r>>>0>>0?I+1|0:I)+u|0,I=(m=r+i[g+160>>2]|0)>>>0>>0?I+1|0:I,r=J,J=I,r=ug((D=m)^e,r^I,16),I=y+(e=p)|0,y=d,d=I=(m=G+r|0)>>>0>>0?I+1|0:I,m=ug(l^(G=m),y^I,63),y=p,l=t,R=N,I=t+H|0,I=(I=(u=U+N|0)>>>0>>0?I+1|0:I)+(z=i[g+196>>2])|0,N=ug((u=t=(H=u)+i[g+192>>2]|0)^IA,(t=t>>>0>>0?I+1|0:I)^w,32),I=S+(H=p)|0,w=I=(U=v+N|0)>>>0>>0?I+1|0:I,S=ug(R^U,I^l,24),z=I=p,v=I,R=S,I=t+yA|0,I=(I=(l=(S=Z)+u|0)>>>0>>0?I+1|0:I)+v|0,BA=t=R+(S=l)|0,IA=ug(t^N,(l=H)^(H=t>>>0>>0?I+1|0:I),16),I=w+(v=p)|0,I=(t=U+IA|0)>>>0>>0?I+1|0:I,U=t,l=ug(R^t,I^z,63),t=p,w=c,S=I,R=f,I=c+M|0,I=(I=(u=f+L|0)>>>0>>0?I+1|0:I)+(N=i[g+148>>2])|0,Y=ug((u=f=(c=u)+i[g+144>>2]|0)^T,(f=f>>>0>>0?I+1|0:I)^Y,32),I=o+(c=p)|0,I=s>>>0>(M=s+Y|0)>>>0?I+1|0:I,s=M,M=I,N=o=ug(R^s,I^w,24),T=I=p,w=I,L=Y,I=f+oA|0,I=(I=(o=(Y=x)+u|0)>>>0>>0?I+1|0:I)+w|0,w=f=N+o|0,z=ug(L^f,(Y=f>>>0>>0?I+1|0:I)^c,16),I=M+(c=p)|0,I=(f=s+z|0)>>>0>>0?I+1|0:I,s=f,M=I,o=ug(f^N,I^T,63),u=I=p,f=I,N=U,T=r,I=F+yA|0,F=r=(U=Z)+q|0,I=(I=r>>>0>>0?I+1|0:I)+f|0,e=ug(T^(r=U=r+o|0),(f=F>>>0>r>>>0?I+1|0:I)^e,32),I=(U=p)+S|0,S=I=(F=N+e|0)>>>0>>0?I+1|0:I,u=ug(o^F,u^I,24),q=I=p,o=I,N=e,e=(I=r)+(r=V)|0,I=f+cA|0,I=(I=r>>>0>e>>>0?I+1|0:I)+o|0,T=f=(r=e)+u|0,L=ug(N^f,(o=U)^(U=f>>>0>>0?I+1|0:I),16),I=S+(o=p)|0,I=(f=F+L|0)>>>0>>0?I+1|0:I,F=f,S=I,N=ug(f^u,I^q,63),f=p,I=eA+(r=b)|0,I=J+((e=W)>>>0>(u=e+P|0)>>>0?I+1|0:I)|0,v=ug((e=b=D+u|0)^IA,(b=e>>>0>>0?I+1|0:I)^v,32),I=M+(J=p)|0,M=I=s>>>0>(D=s+v|0)>>>0?I+1|0:I,I=ug((s=D)^P,I^r,24),P=i[g+204>>2],u=I,q=v,v=I,r=I+e|0,I=(D=p)+b|0,I=(I=r>>>0>>0?I+1|0:I)+P|0,P=b=r+i[g+200>>2]|0,q=ug(q^b,(e=J)^(J=b>>>0>>0?I+1|0:I),16),I=M+(v=p)|0,M=b=s+q|0,e=ug(u^b,(r=D)^(D=s>>>0>b>>>0?I+1|0:I),63),b=p,s=y,R=m,I=y+H|0,I=(I=(r=m+BA|0)>>>0>>0?I+1|0:I)+(u=i[g+220>>2])|0,r=ug((H=m=r+i[g+216>>2]|0)^z,(m=r>>>0>H>>>0?I+1|0:I)^c,32),I=_+(y=p)|0,_=s,s=I=(c=k+r|0)>>>0>>0?I+1|0:I,I=ug(R^c,_^I,24),z=i[g+156>>2],u=I,_=H,H=I,_=_+I|0,I=(k=p)+m|0,I=(I=H>>>0>_>>>0?I+1|0:I)+z|0,z=m=(H=_)+i[g+152>>2]|0,BA=ug(m^r,(H=m>>>0>>0?I+1|0:I)^y,16),I=s+(_=p)|0,y=ug(u^(s=m=c+BA|0),(r=k)^(k=c>>>0>s>>>0?I+1|0:I),63),c=p,m=t,I=t+Y|0,I=(I=(r=w+l|0)>>>0>>0?I+1|0:I)+(u=i[g+132>>2])|0,w=I=(t=r+i[g+128>>2]|0)>>>0>>0?I+1|0:I,a=ug(t^AA,I^a,32),I=d+(Y=p)|0,I=(r=G+a|0)>>>0>>0?I+1|0:I,G=r,u=m,m=I,r=ug(r^l,u^I,24),l=I=p,R=r,I=w+I|0,I=(I=(r=t+r|0)>>>0>>0?I+1|0:I)+(u=i[g+196>>2])|0,I=(t=r+i[g+192>>2]|0)>>>0>>0?I+1|0:I,w=t,r=Y,Y=I,a=ug(t^a,r^I,16),I=m+(t=p)|0,I=(r=G+a|0)>>>0>>0?I+1|0:I,G=r,d=I,u=ug(R^r,l^I,63),m=p,R=e,l=a,I=U+E|0,I=(I=(a=j)>>>0>(e=a+T|0)>>>0?I+1|0:I)+(r=b)|0,b=U=R+(a=e)|0,e=ug(l^U,(e=t)^(t=a>>>0>U>>>0?I+1|0:I),32),I=k+(U=p)|0,l=a=s+e|0,a=ug(R^a,(I=a>>>0>>0?I+1|0:I)^r,24),k=I,IA=i[g+148>>2],T=a,I=t+(s=p)|0,I=(I=(a=a+b|0)>>>0>>0?I+1|0:I)+(AA=IA)|0,O=ug((AA=b=(r=i[g+144>>2])+a|0)^e,(b=a>>>0>b>>>0?I+1|0:I)^U,16),I=(I=k)+(k=p)|0,I=(t=(U=O)+l|0)>>>0>>0?I+1|0:I,U=t,a=I,t=ug(T^t,I^s,63),s=p,R=y,I=(e=c)+J|0,I=(I=(l=y+P|0)>>>0>>0?I+1|0:I)+(T=i[g+236>>2])|0,o=ug((l=y=(c=l)+i[g+232>>2]|0)^L,(y=c>>>0>y>>>0?I+1|0:I)^o,32),I=d+(c=p)|0,d=I=G>>>0>(J=G+o|0)>>>0?I+1|0:I,P=e=ug(R^(G=J),I^e,24),T=I=p,J=I,R=o,I=y+rA|0,I=(I=(o=$)>>>0>(e=o+l|0)>>>0?I+1|0:I)+J|0,L=y=P+(o=e)|0,o=ug(R^y,(J=y>>>0>>0?I+1|0:I)^c,16),I=d+(e=p)|0,d=y=G+o|0,P=ug(y^P,(l=y>>>0>>0?I+1|0:I)^T,63),y=p,T=u,I=H+B|0,I=(I=(G=K)>>>0>(u=G+z|0)>>>0?I+1|0:I)+(c=m)|0,u=ug((m=G=T+(H=u)|0)^q,(G=G>>>0>>0?I+1|0:I)^v,32),I=S+(H=p)|0,S=ug(T^(v=F+u|0),(I=F>>>0>v>>>0?I+1|0:I)^c,24),F=I,z=i[g+164>>2],q=S,R=v,I=G+(c=p)|0,G=S=m+S|0,I=(I=S>>>0>>0?I+1|0:I)+(T=z)|0,S=H,H=I=(m=(v=i[g+160>>2])+G|0)>>>0>>0?I+1|0:I,iA=ug(m^u,S^I,16),I=(I=F)+(F=p)|0,S=I=(G=R+(S=iA)|0)>>>0>>0?I+1|0:I,q=ug(q^G,I^c,63),c=p,u=f,R=N,I=f+oA|0,I=Y+((N=x)>>>0>(T=R+N|0)>>>0?I+1|0:I)|0,_=ug((N=f=w+T|0)^BA,(f=f>>>0>>0?I+1|0:I)^_,32),I=D+(w=p)|0,D=I=(Y=M+_|0)>>>0>>0?I+1|0:I,T=u=ug(R^(M=Y),I^u,24),BA=I=p,Y=I,R=_,I=f+Q|0,I=(I=(u=(_=QA)+N|0)>>>0<_>>>0?I+1|0:I)+Y|0,Y=f=T+u|0,N=ug(R^f,(_=w)^(w=f>>>0>>0?I+1|0:I),16),I=D+(_=p)|0,I=(f=M+N|0)>>>0>>0?I+1|0:I,M=f,D=I,u=ug(f^T,I^BA,63),T=I=p,f=I,R=o,I=b+oA|0,b=o=x+AA|0,I=(I=o>>>0>>0?I+1|0:I)+f|0,e=ug(R^(o=x=o+u|0),(b=b>>>0>o>>>0?I+1|0:I)^e,32),I=S+(f=p)|0,oA=x=G+e|0,S=I=G>>>0>x>>>0?I+1|0:I,R=x=ug(u^x,T^I,24),I=(G=p)+b|0,I=(I=(o=o+x|0)>>>0>>0?I+1|0:I)+IA|0,T=ug((u=x=o+r|0)^e,(o=r>>>0>u>>>0?I+1|0:I)^f,16),I=(I=S)+(S=p)|0,oA=x=(b=T)+oA|0,f=ug(R^x,(b=b>>>0>x>>>0?I+1|0:I)^G,63),G=p,x=s,R=t,I=s+J|0,s=r=t+L|0,I=(I=r>>>0>>0?I+1|0:I)+(e=i[g+196>>2])|0,e=ug((r=t=r+i[g+192>>2]|0)^iA,(t=r>>>0>>0?I+1|0:I)^F,32),I=D+(s=p)|0,D=x,x=I=(F=M+e|0)>>>0>>0?I+1|0:I,R=I=ug(R^F,D^I,24),M=I,D=I+r|0,I=(J=p)+t|0,I=z+(D>>>0>>0?I+1|0:I)|0,z=t=D+v|0,L=ug(t^e,(r=s)^(s=t>>>0>>0?I+1|0:I),16),I=x+(M=p)|0,I=(t=F+L|0)>>>0>>0?I+1|0:I,F=t,r=J,J=I,r=ug(R^t,r^I,63),x=p,I=rA+(t=y)|0,I=H+((D=$)>>>0>(v=D+P|0)>>>0?I+1|0:I)|0,D=y=m+v|0,v=ug(y^N,(m=y>>>0>>0?I+1|0:I)^_,32),I=a+(y=p)|0,a=t,t=I=(H=U+v|0)>>>0>>0?I+1|0:I,a=_=ug(H^P,a^I,24),e=I=p,_=v,v=(I=D)+(D=Z)|0,I=m+yA|0,I=(I=D>>>0>v>>>0?I+1|0:I)+e|0,U=m=(D=v)+a|0,N=ug(_^m,(D=m>>>0>>0?I+1|0:I)^y,16),I=t+(v=p)|0,t=ug((P=m=H+N|0)^a,(m=m>>>0>>0?I+1|0:I)^e,63),y=p,H=c,I=c+B|0,I=w+((a=(_=K)+q|0)>>>0<_>>>0?I+1|0:I)|0,I=(c=Y+a|0)>>>0>>0?I+1|0:I,Y=c,c=I,_=ug(Y^O,I^k,32),I=l+(k=p)|0,I=(w=d+_|0)>>>0>>0?I+1|0:I,d=w,a=H,H=I,a=ug(w^q,a^I,24),l=I=p,w=I,e=_,_=(I=Y)+(Y=QA)|0,I=c+Q|0,I=(I=Y>>>0>_>>>0?I+1|0:I)+w|0,q=c=_+a|0,_=ug(e^c,(Y=k)^(k=c>>>0<_>>>0?I+1|0:I),16),I=H+(w=p)|0,I=(c=d+_|0)>>>0>>0?I+1|0:I,d=c,H=I,e=ug(c^a,I^l,63),c=p,a=r,l=_,I=o+cA|0,I=(I=(r=(_=V)+u|0)>>>0<_>>>0?I+1|0:I)+(Y=x)|0,_=o=a+r|0,x=I=o>>>0>>0?I+1|0:I,r=ug(l^o,I^w,32),I=(I=m)+(m=p)|0,o=Y,Y=I=r>>>0>(w=r+P|0)>>>0?I+1|0:I,I=ug(a^w,o^I,24),l=i[g+220>>2],a=I,P=r,o=_,_=I,r=o+I|0,I=(o=p)+x|0,I=(I=r>>>0<_>>>0?I+1|0:I)+l|0,P=ug(P^(u=x=r+i[g+216>>2]|0),(_=r>>>0>u>>>0?I+1|0:I)^m,16),I=Y+(r=p)|0,Y=I=w>>>0>(x=w+P|0)>>>0?I+1|0:I,x=ug(a^(w=x),I^o,63),m=p,R=t,I=(o=y)+s|0,y=a=t+z|0,I=(I=a>>>0>>0?I+1|0:I)+(l=i[g+204>>2])|0,S=ug((a=t=a+i[g+200>>2]|0)^T,(t=a>>>0>>0?I+1|0:I)^S,32),I=H+(y=p)|0,d=I=(s=d+S|0)>>>0>>0?I+1|0:I,l=o=ug(R^s,I^o,24),T=I=p,H=I,R=S,I=t+eA|0,I=(I=(o=(S=W)+a|0)>>>0>>0?I+1|0:I)+H|0,z=t=l+o|0,BA=ug(R^t,(H=t>>>0>>0?I+1|0:I)^y,16),I=d+(S=p)|0,I=(t=s+BA|0)>>>0>>0?I+1|0:I,s=t,d=I,t=ug(t^l,I^T,63),y=p,R=e,I=(o=c)+D|0,I=(e=e+U|0)>>>0>>0?I+1|0:I,U=e,I=I+(l=T=i[g+156>>2])|0,l=ug((e=c=(a=i[g+152>>2])+e|0)^L,(c=e>>>0>>0?I+1|0:I)^M,32),I=(I=b)+(b=p)|0,M=I=(U=l+oA|0)>>>0>>0?I+1|0:I,oA=o=ug(R^U,I^o,24),L=I=p,D=I,R=o,I=c+E|0,I=(I=(o=j)>>>0>(e=o+e|0)>>>0?I+1|0:I)+D|0,oA=c=oA+(o=e)|0,IA=ug(c^l,(D=c>>>0>>0?I+1|0:I)^b,16),I=M+(c=p)|0,I=(b=U+IA|0)>>>0>>0?I+1|0:I,U=b,M=I,l=ug(R^b,I^L,63),b=p,R=f,I=(o=G)+k|0,G=e=f+q|0,I=(I=e>>>0>>0?I+1|0:I)+(L=i[g+236>>2])|0,v=ug((e=f=e+i[g+232>>2]|0)^N,(G=e>>>0>>0?I+1|0:I)^v,32),I=J+(k=p)|0,N=f=F+v|0,f=ug(R^f,(I=f>>>0>>0?I+1|0:I)^o,24),J=I,L=i[g+132>>2],q=f,R=N,N=v,I=(F=p)+G|0,I=(I=(o=f+e|0)>>>0>>0?I+1|0:I)+L|0,I=(f=(v=i[g+128>>2])+o|0)>>>0>>0?I+1|0:I,G=f,o=k,k=I,N=ug(N^f,o^I,16),I=(I=J)+(J=p)|0,I=(f=R+(o=N)|0)>>>0>>0?I+1|0:I,o=f,f=F,F=I,q=I=ug(q^o,f^I,63),e=I,u=I+u|0,I=(f=p)+_|0,I=L+(e>>>0>u>>>0?I+1|0:I)|0,u=ug((e=_=u+v|0)^BA,(v=v>>>0>e>>>0?I+1|0:I)^S,32),I=M+(S=p)|0,I=U>>>0>(_=U+u|0)>>>0?I+1|0:I,U=_,_=f,f=I,q=_=ug(q^U,_^I,24),L=I=p,M=I,R=_,I=v+B|0,I=(I=(e=(_=K)+e|0)>>>0<_>>>0?I+1|0:I)+M|0,q=v=q+e|0,BA=ug(v^u,(M=v>>>0>>0?I+1|0:I)^S,16),I=f+(v=p)|0,I=U>>>0>(S=U+BA|0)>>>0?I+1|0:I,U=S,S=I,u=ug(R^U,I^L,63),f=p,_=m,R=x,I=m+H|0,m=e=x+z|0,I=(I=e>>>0>>0?I+1|0:I)+(L=i[g+148>>2])|0,z=ug((e=x=e+i[g+144>>2]|0)^IA,(x=m>>>0>e>>>0?I+1|0:I)^c,32),I=F+(m=p)|0,H=I=(c=o+z|0)>>>0>>0?I+1|0:I,L=I=ug(R^c,I^_,24),o=I,_=I+e|0,I=(F=p)+x|0,I=T+(o>>>0>_>>>0?I+1|0:I)|0,T=x=a+_|0,z=ug(x^z,(o=a>>>0>x>>>0?I+1|0:I)^m,16),I=H+(_=p)|0,m=ug(L^(H=x=c+z|0),(a=F)^(F=c>>>0>H>>>0?I+1|0:I),63),c=p,x=y,L=t,I=y+D|0,y=a=t+oA|0,I=(I=a>>>0>>0?I+1|0:I)+(e=i[g+164>>2])|0,e=ug((a=t=a+i[g+160>>2]|0)^N,(t=a>>>0>>0?I+1|0:I)^J,32),I=Y+(y=p)|0,Y=x,x=I=w>>>0>(J=w+e|0)>>>0?I+1|0:I,w=ug(L^J,Y^I,24),N=I=p,D=I,R=w,I=t+Q|0,I=(I=(w=QA)>>>0>(Y=w+a|0)>>>0?I+1|0:I)+D|0,oA=t=R+(w=Y)|0,L=ug(t^e,(D=t>>>0>>0?I+1|0:I)^y,16),I=x+(w=p)|0,I=(t=J+L|0)>>>0>>0?I+1|0:I,J=t,Y=I,t=ug(R^t,I^N,63),y=p,x=b,I=b+yA|0,I=k+((a=Z)>>>0>(e=a+l|0)>>>0?I+1|0:I)|0,r=ug((a=b=G+e|0)^P,(b=a>>>0>>0?I+1|0:I)^r,32),I=d+(G=p)|0,e=x,x=I=s>>>0>(k=s+r|0)>>>0?I+1|0:I,e=k=ug((s=k)^l,e^I,24),l=I=p,N=r,I=b+rA|0,I=(I=(r=(k=$)+a|0)>>>0>>0?I+1|0:I)+l|0,d=b=e+r|0,r=ug(N^b,(a=G)^(G=b>>>0>>0?I+1|0:I),16),I=x+(k=p)|0,l=ug((a=b=s+r|0)^e,(b=s>>>0>a>>>0?I+1|0:I)^l,63),x=p,s=c,N=m,P=r,I=c+M|0,I=(I=(r=m+q|0)>>>0>>0?I+1|0:I)+(e=i[g+196>>2])|0,r=ug(P^(M=m=r+i[g+192>>2]|0),(m=r>>>0>m>>>0?I+1|0:I)^k,32),I=Y+(c=p)|0,e=s,s=I=(k=J+r|0)>>>0>>0?I+1|0:I,I=ug(N^k,e^I,24),N=i[g+204>>2],e=I,Y=M,M=I,Y=Y+I|0,I=(J=p)+m|0,I=(I=Y>>>0>>0?I+1|0:I)+N|0,P=m=Y+i[g+200>>2]|0,q=ug(m^r,(M=m>>>0>>0?I+1|0:I)^c,16),I=s+(Y=p)|0,m=ug(e^(s=m=k+q|0),(k=s>>>0>>0?I+1|0:I)^J,63),c=p,J=y,N=t,R=a,I=y+o|0,I=(I=(a=t+T|0)>>>0>>0?I+1|0:I)+(e=IA=i[g+212>>2])|0,a=ug((o=t=(r=i[g+208>>2])+a|0)^BA,(t=t>>>0>>0?I+1|0:I)^v,32),I=(I=b)+(b=p)|0,e=J,J=I=(y=R+a|0)>>>0>>0?I+1|0:I,I=ug(N^y,e^I,24),N=i[g+220>>2],R=I,e=a,a=o,o=I,a=a+I|0,I=(v=p)+t|0,I=(I=a>>>0>>0?I+1|0:I)+N|0,T=t=a+i[g+216>>2]|0,a=ug(e^t,(o=t>>>0>>0?I+1|0:I)^b,16),I=J+(e=p)|0,J=b=y+a|0,b=ug(R^b,(t=v)^(v=y>>>0>b>>>0?I+1|0:I),63),t=p,R=l,I=D+E|0,I=(I=(l=j)>>>0>(N=l+oA|0)>>>0?I+1|0:I)+(y=x)|0,N=ug((x=D=R+(l=N)|0)^z,(D=D>>>0>>0?I+1|0:I)^_,32),I=S+(_=p)|0,I=U>>>0>(l=U+N|0)>>>0?I+1|0:I,U=l,l=y,y=I,l=ug(R^U,l^I,24),S=I=p,R=l,I=D+I|0,I=(I=(l=l+x|0)>>>0>>0?I+1|0:I)+(z=i[g+236>>2])|0,oA=x=(D=l)+i[g+232>>2]|0,z=ug(x^N,(D=D>>>0>x>>>0?I+1|0:I)^_,16),I=y+(_=p)|0,N=ug(R^(y=x=U+z|0),(U=U>>>0>y>>>0?I+1|0:I)^S,63),x=p,S=f,R=u,I=f+eA|0,I=G+((u=(l=W)+u|0)>>>0>>0?I+1|0:I)|0,w=ug((l=f=d+u|0)^L,(f=f>>>0>>0?I+1|0:I)^w,32),I=F+(G=p)|0,H=I=H>>>0>(d=H+w|0)>>>0?I+1|0:I,u=S=ug(R^d,I^S,24),L=I=p,F=I,R=w,I=f+cA|0,I=(I=(w=V)>>>0>(S=w+l|0)>>>0?I+1|0:I)+F|0,F=f=u+(w=S)|0,l=ug(R^f,(l=G)^(G=f>>>0>>0?I+1|0:I),16),I=H+(w=p)|0,I=(f=d+l|0)>>>0>>0?I+1|0:I,d=f,H=I,S=ug(f^u,I^L,63),u=I=p,f=I,L=a,I=M+eA|0,M=a=P+W|0,I=(I=a>>>0>>0?I+1|0:I)+f|0,e=ug(L^(a=W=a+S|0),(W=M>>>0>a>>>0?I+1|0:I)^e,32),I=U+(f=p)|0,U=I=y>>>0>(M=y+e|0)>>>0?I+1|0:I,P=I=ug(S^(y=M),u^I,24),S=I,a=I+a|0,I=(M=p)+W|0,I=IA+(a>>>0>>0?I+1|0:I)|0,u=ug((u=e)^(e=W=a+r|0),(S=r>>>0>e>>>0?I+1|0:I)^f,16),I=U+(r=p)|0,y=ug(P^(U=W=y+u|0),(a=M)^(M=y>>>0>U>>>0?I+1|0:I),63),f=p,W=c,L=m,I=c+o|0,c=a=m+T|0,I=(I=a>>>0>>0?I+1|0:I)+(P=i[g+164>>2])|0,_=ug((a=m=a+i[g+160>>2]|0)^z,(m=c>>>0>a>>>0?I+1|0:I)^_,32),I=H+(c=p)|0,I=(o=d+_|0)>>>0>>0?I+1|0:I,d=o,H=W,W=I,I=ug(L^o,H^I,24),T=i[g+196>>2],L=I,P=_,o=I,_=I+a|0,I=(H=p)+m|0,I=(I=o>>>0>_>>>0?I+1|0:I)+T|0,P=ug(P^(a=m=(o=_)+i[g+192>>2]|0),(_=c)^(c=o>>>0>a>>>0?I+1|0:I),16),I=W+(T=p)|0,I=(m=d+P|0)>>>0>>0?I+1|0:I,d=m,o=H,H=I,o=ug(L^m,o^I,63),W=p,m=t,L=b,I=t+D|0,I=(I=(_=b+oA|0)>>>0>>0?I+1|0:I)+(eA=i[g+204>>2])|0,w=ug((_=b=(t=_)+i[g+200>>2]|0)^l,(b=t>>>0>b>>>0?I+1|0:I)^w,32),I=k+(t=p)|0,I=s>>>0>(D=s+w|0)>>>0?I+1|0:I,s=D,D=m,m=I,l=D=ug(L^s,D^I,24),eA=I=p,k=I,L=D,I=b+cA|0,I=(I=(D=_+V|0)>>>0>>0?I+1|0:I)+k|0,l=ug((_=V=l+D|0)^w,(l=t)^(t=D>>>0>_>>>0?I+1|0:I),16),I=m+(k=p)|0,D=I=s>>>0>(V=s+l|0)>>>0?I+1|0:I,V=ug(L^(s=V),I^eA,63),b=p,I=G+(m=x)|0,G=w=F+N|0,I=(I=w>>>0>>0?I+1|0:I)+(eA=i[g+236>>2])|0,Y=ug((w=x=w+i[g+232>>2]|0)^q,(x=G>>>0>w>>>0?I+1|0:I)^Y,32),I=v+(G=p)|0,v=m,m=I=(F=J+Y|0)>>>0>>0?I+1|0:I,v=ug(F^N,v^I,24),q=I=p,J=I,I=x+yA|0,I=(I=(w=w+Z|0)>>>0>>0?I+1|0:I)+J|0,N=ug((J=Z=w+v|0)^Y,(N=G)^(G=w>>>0>J>>>0?I+1|0:I),16),I=m+(yA=p)|0,w=I=F>>>0>(Z=F+N|0)>>>0?I+1|0:I,x=ug(v^(F=Z),I^q,63),m=p,I=S+B|0,I=(I=(v=e+K|0)>>>0>>0?I+1|0:I)+(Y=W)|0,I=v>>>0>(K=v+o|0)>>>0?I+1|0:I,v=K,K=I,I=E+I|0,j=I=(Y=j+v|0)>>>0>>0?I+1|0:I,e=Y,Y=ug(v^N,K^yA,32),I=D+(v=p)|0,S=ug((D=K=s+Y|0)^o,(K=s>>>0>D>>>0?I+1|0:I)^W,24),I=(o=p)+j|0,I=(s=S)>>>0>(W=e+s|0)>>>0?I+1|0:I,s=W,i[g>>2]=s,i[g+4>>2]=I,Z=I,I=ug(s^Y,I^v,16),Y=W=p,i[g+120>>2]=I,i[g+124>>2]=Y,j=I,D=I+D|0,I=Y+K|0,i[g+80>>2]=D,I=D>>>0>>0?I+1|0:I,i[g+84>>2]=I,hA=g,DA=ug(S^D,I^o,63),i[hA+40>>2]=DA,i[g+44>>2]=p,K=b,o=V,I=c+b|0,I=(I=(j=a+V|0)>>>0>>0?I+1|0:I)+(D=i[g+132>>2])|0,j=I=(V=j+i[g+128>>2]|0)>>>0>>0?I+1|0:I,c=ug(V^u,I^r,32),I=w+(D=p)|0,a=K,K=I=F>>>0>(b=F+c|0)>>>0?I+1|0:I,w=ug(o^(F=b),a^I,24),I=j+(Y=p)|0,I=(b=w+V|0)>>>0>>0?I+1|0:I,V=(j=i[g+144>>2])+b|0,I=i[g+148>>2]+I|0,I=V>>>0>>0?I+1|0:I,i[g+8>>2]=V,i[g+12>>2]=I,I=ug(c^V,I^D,16),b=W=p,i[g+96>>2]=I,i[g+100>>2]=b,V=I,j=I+F|0,I=b+K|0,K=j,i[g+88>>2]=K,I=V>>>0>K>>>0?I+1|0:I,i[g+92>>2]=I,hA=g,DA=ug(w^K,I^Y,63),i[hA+48>>2]=DA,i[g+52>>2]=p,a=$,I=t+m|0,I=(I=(V=_+x|0)>>>0>>0?I+1|0:I)+(j=i[g+220>>2])|0,I=(W=V+i[g+216>>2]|0)>>>0>>0?I+1|0:I,$=W,j=W,V=a+W|0,W=I,I=I+rA|0,I=V>>>0>>0?I+1|0:I,j=V,V=I,a=j,o=x,j=ug(P^$,W^T,32),I=M+(x=p)|0,m=ug(o^(b=W=U+j|0),(W=U>>>0>b>>>0?I+1|0:I)^m,24),I=(c=p)+V|0,V=$=a+(t=m)|0,i[g+16>>2]=V,I=t>>>0>V>>>0?I+1|0:I,i[g+20>>2]=I,I=ug(V^j,I^x,16),K=p,i[g+104>>2]=I,i[g+108>>2]=K,V=I,$=I+b|0,I=W+K|0,W=$,i[g+64>>2]=W,I=V>>>0>W>>>0?I+1|0:I,i[g+68>>2]=I,hA=g,DA=ug(t^W,I^c,63),i[hA+56>>2]=DA,i[g+60>>2]=p,I=f+Q|0,I=(I=(V=y+QA|0)>>>0>>0?I+1|0:I)+G|0,QA=I=J>>>0>(V=J+V|0)>>>0?I+1|0:I,x=ug(V^l,I^k,32),I=H+(b=p)|0,K=I=d>>>0>($=d+x|0)>>>0?I+1|0:I,m=ug($^y,f^I,24),I=QA+(t=p)|0,I=V>>>0>(j=m+V|0)>>>0?I+1|0:I,V=(QA=i[g+152>>2])+j|0,I=i[g+156>>2]+I|0,I=V>>>0>>0?I+1|0:I,i[g+24>>2]=V,i[g+28>>2]=I,I=ug(x^V,I^b,16),i[g+112>>2]=I,QA=p,i[g+116>>2]=QA,V=I+$|0,I=K+QA|0,K=V,i[g+72>>2]=K,I=K>>>0<$>>>0?I+1|0:I,i[g+76>>2]=I,hA=g,DA=ug(m^K,I^t,63),i[hA+32>>2]=DA,i[g+36>>2]=p,I=i[g+68>>2]^(n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24)^Z,K=i[g+64>>2]^(n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24)^s,C[0|A]=K,C[A+1|0]=K>>>8,C[A+2|0]=K>>>16,C[A+3|0]=K>>>24,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24,Z=1;I=(K=Z<<3)+A|0,W=K=g+K|0,V=i[K>>2]^(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24),QA=i[(K=K- -64|0)>>2],K=i[K+4>>2]^i[W+4>>2]^(n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24),W=V^QA,C[0|I]=W,C[I+1|0]=W>>>8,C[I+2|0]=W>>>16,C[I+3|0]=W>>>24,C[I+4|0]=K,C[I+5|0]=K>>>8,C[I+6|0]=K>>>16,C[I+7|0]=K>>>24,8!=(0|(Z=Z+1|0)););h=g+256|0}function F(A,I,g,B){var Q=0,C=0,E=0,n=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0;for(function(A,I){for(var g=0,B=0,Q=0,C=0,E=0;C=Q=(B=g<<3)+A|0,E=dA(I+B|0),i[C>>2]=E,i[Q+4>>2]=p,16!=(0|(g=g+1|0)););}(g,I),I=X(B,A,64),o=i[g>>2],f=i[g+4>>2],B=0;;){if(Q=ug(l=i[(E=I)+32>>2],t=i[E+36>>2],14),s=p,Q=ug(l,t,18)^Q,D=p^s,C=o,o=ug(l,t,41)^Q,Q=(p^D)+f|0,Q=o>>>0>(s=C+o|0)>>>0?Q+1|0:Q,o=s,y=i[E+48>>2],o=(D=i[(f=34784+(L=B<<3)|0)>>2])+o|0,Q=i[f+4>>2]+Q|0,Q=o>>>0>>0?Q+1|0:Q,o=(f=y^((k=i[E+40>>2])^y)&l)+o|0,Q=(((C=i[E+52>>2])^(u=i[E+44>>2]))&t^C)+Q|0,Q=o>>>0>>0?Q+1|0:Q,s=(a=o)+(o=i[E+56>>2])|0,Q=i[E+60>>2]+Q|0,Q=o>>>0>s>>>0?Q+1|0:Q,f=s+(D=i[E+24>>2])|0,o=Q,Q=Q+i[E+28>>2]|0,Q=f>>>0>>0?Q+1|0:Q,D=f,c=Q,i[E+24>>2]=f,i[E+28>>2]=Q,Q=ug(F=i[E>>2],f=i[E+4>>2],28),h=p,Q=ug(F,f,34)^Q,n=p^h,h=s+(ug(F,f,39)^Q)|0,Q=o+(p^n)|0,Q=s>>>0>h>>>0?Q+1|0:Q,s=(a=F&((n=i[E+16>>2])|(r=i[E+8>>2]))|n&r)+h|0,Q=(f&((h=i[E+20>>2])|(o=i[E+12>>2]))|o&h)+Q|0,s=Q=a>>>0>(e=s)>>>0?Q+1|0:Q,i[E+56>>2]=e,i[E+60>>2]=Q,Q=ug(D,c,14),a=p,d=ug(D,c,18)^Q,a^=p,w=n,Q=((t^u)&c^u)+C|0,Q=(n=(l^k)&D^k)>>>0>(y=n+y|0)>>>0?Q+1|0:Q,C=ug(D,c,41)^d,Q=(p^a)+Q|0,Q=C>>>0>(y=C+y|0)>>>0?Q+1|0:Q,y=(a=i[(n=d=(C=(1|B)<<3)+g|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=a>>>0>y>>>0?Q+1|0:Q,y=(n=i[(C=C+34784|0)>>2])+y|0,Q=i[C+4>>2]+Q|0,n=Q=n>>>0>y>>>0?Q+1|0:Q,Q=Q+h|0,h=y=w+(C=a=y)|0,C=Q=C>>>0>y>>>0?Q+1|0:Q,i[E+16>>2]=y,i[E+20>>2]=Q,y=E,Q=ug(e,s,28),E=p,G=ug(e,s,34)^Q,H=p^E,E=(Q=a)+(a=(r|F)&e|r&F)|0,Q=((o|f)&s|o&f)+n|0,Q=E>>>0>>0?Q+1|0:Q,n=ug(e,s,39)^G,Q=(p^H)+Q|0,G=E=n+E|0,E=Q=E>>>0>>0?Q+1|0:Q,i[y+48>>2]=G,i[y+52>>2]=Q,a=y,Q=ug(h,C,14),y=p,n=ug(h,C,18)^Q,H=p^y,w=r,Q=((t^c)&C^t)+u|0,Q=(r=(D^l)&h^l)>>>0>(y=r+k|0)>>>0?Q+1|0:Q,n=ug(h,C,41)^n,Q=(p^H)+Q|0,Q=n>>>0>(y=n+y|0)>>>0?Q+1|0:Q,y=(k=i[(r=U=(n=(2|B)<<3)+g|0)>>2])+y|0,Q=i[r+4>>2]+Q|0,Q=y>>>0>>0?Q+1|0:Q,y=(r=i[(n=n+34784|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=r>>>0>y>>>0?Q+1|0:Q,y=w+(n=r=y)|0,w=o,o=Q,Q=w+Q|0,n=Q=n>>>0>y>>>0?Q+1|0:Q,i[a+8>>2]=y,i[a+12>>2]=Q,Q=ug(G,E,28),k=p,u=ug(G,E,34)^Q,k^=p,Q=((f|s)&E|f&s)+o|0,Q=(r=(H=(e|F)&G|e&F)+r|0)>>>0>>0?Q+1|0:Q,o=r,r=ug(G,E,39)^u,Q=(p^k)+Q|0,k=o=o+r|0,o=Q=o>>>0>>0?Q+1|0:Q,i[a+40>>2]=k,i[a+44>>2]=Q,r=a,Q=ug(y,n,14),a=p,u=ug(y,n,18)^Q,H=p^a,w=F,Q=(c^(C^c)&n)+t|0,Q=(a=(F=D^(h^D)&y)+l|0)>>>0>>0?Q+1|0:Q,t=a,a=ug(y,n,41)^u,Q=(p^H)+Q|0,Q=a>>>0>(t=t+a|0)>>>0?Q+1|0:Q,t=(u=i[(l=F=(a=(3|B)<<3)+g|0)>>2])+t|0,Q=i[l+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=(l=i[(a=a+34784|0)>>2])+t|0,Q=i[a+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,l=t,t=w+(a=t)|0,w=f,f=Q,Q=w+Q|0,a=Q=a>>>0>t>>>0?Q+1|0:Q,i[r>>2]=t,i[r+4>>2]=Q,Q=ug(k,o,28),u=p,H=ug(k,o,34)^Q,u^=p,Q=((E|s)&o|E&s)+f|0,Q=(l=(v=(e|G)&k|e&G)+l|0)>>>0>>0?Q+1|0:Q,f=l,l=ug(k,o,39)^H,Q=(p^u)+Q|0,Q=(f=f+l|0)>>>0>>0?Q+1|0:Q,l=f,f=Q,i[r+32>>2]=l,i[r+36>>2]=Q,Q=ug(t,a,14),u=p,H=ug(t,a,18)^Q,u^=p,w=e,Q=c+(C^(C^n)&a)|0,Q=(e=D+(h^(y^h)&t)|0)>>>0>>0?Q+1|0:Q,c=ug(t,a,41)^H,Q=(p^u)+Q|0,Q=c>>>0>(D=c+e|0)>>>0?Q+1|0:Q,D=(u=i[(e=S=(c=(4|B)<<3)+g|0)>>2])+D|0,Q=i[e+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,D=(e=i[(c=c+34784|0)>>2])+D|0,Q=i[c+4>>2]+Q|0,c=s,s=Q=e>>>0>D>>>0?Q+1|0:Q,Q=c+Q|0,c=Q=(e=D)>>>0>(D=w+e|0)>>>0?Q+1|0:Q,i[r+56>>2]=D,i[r+60>>2]=Q,Q=ug(l,f,28),u=p,H=ug(l,f,34)^Q,u^=p,Q=((E|o)&f|E&o)+s|0,Q=(e=(v=(k|G)&l|k&G)+e|0)>>>0>>0?Q+1|0:Q,s=e,e=ug(l,f,39)^H,Q=(p^u)+Q|0,u=s=s+e|0,s=Q=e>>>0>s>>>0?Q+1|0:Q,i[r+24>>2]=u,i[r+28>>2]=Q,Q=ug(D,c,14),e=p,H=ug(D,c,18)^Q,v=p^e,w=G,Q=C+(n^(n^a)&c)|0,Q=(e=h+(y^(t^y)&D)|0)>>>0>>0?Q+1|0:Q,C=ug(D,c,41)^H,Q=(p^v)+Q|0,Q=C>>>0>(h=C+e|0)>>>0?Q+1|0:Q,h=(H=i[(e=G=(C=(5|B)<<3)+g|0)>>2])+h|0,Q=i[e+4>>2]+Q|0,Q=h>>>0>>0?Q+1|0:Q,h=(e=i[(C=C+34784|0)>>2])+h|0,Q=i[C+4>>2]+Q|0,Q=e>>>0>h>>>0?Q+1|0:Q,h=w+(C=e=h)|0,w=E,E=Q,Q=w+Q|0,C=Q=C>>>0>h>>>0?Q+1|0:Q,i[r+48>>2]=h,i[r+52>>2]=Q,Q=ug(u,s,28),H=p,v=ug(u,s,34)^Q,H^=p,Q=((o|f)&s|o&f)+E|0,Q=(e=(_=(l|k)&u|l&k)+e|0)>>>0<_>>>0?Q+1|0:Q,E=e,e=ug(u,s,39)^v,Q=(p^H)+Q|0,v=E=E+e|0,E=Q=E>>>0>>0?Q+1|0:Q,i[r+16>>2]=v,i[r+20>>2]=Q,Q=ug(h,C,14),e=p,H=ug(h,C,18)^Q,_=p^e,w=k,Q=n+(a^(a^c)&C)|0,Q=(e=y+(t^(t^D)&h)|0)>>>0>>0?Q+1|0:Q,n=ug(h,C,41)^H,Q=(p^_)+Q|0,Q=n>>>0>(y=n+e|0)>>>0?Q+1|0:Q,y=(k=i[(e=R=(n=(6|B)<<3)+g|0)>>2])+y|0,Q=i[e+4>>2]+Q|0,Q=y>>>0>>0?Q+1|0:Q,y=(e=i[(n=n+34784|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=e>>>0>y>>>0?Q+1|0:Q,y=w+(n=e=y)|0,w=o,o=Q,Q=w+Q|0,n=Q=n>>>0>y>>>0?Q+1|0:Q,i[r+40>>2]=y,i[r+44>>2]=Q,Q=ug(v,E,28),k=p,H=ug(v,E,34)^Q,k^=p,Q=((f|s)&E|f&s)+o|0,Q=(e=(_=(u|l)&v|u&l)+e|0)>>>0<_>>>0?Q+1|0:Q,o=e,e=ug(v,E,39)^H,Q=(p^k)+Q|0,_=o=o+e|0,o=Q=o>>>0>>0?Q+1|0:Q,i[r+8>>2]=_,i[r+12>>2]=Q,Q=ug(y,n,14),e=p,k=ug(y,n,18)^Q,H=p^e,w=l,Q=a+(c^(C^c)&n)|0,Q=(e=t+(D^(h^D)&y)|0)>>>0>>0?Q+1|0:Q,a=ug(y,n,41)^k,Q=(p^H)+Q|0,Q=a>>>0>(t=a+e|0)>>>0?Q+1|0:Q,t=(l=i[(e=k=(a=(7|B)<<3)+g|0)>>2])+t|0,Q=i[e+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=(e=i[(a=a+34784|0)>>2])+t|0,Q=i[a+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=w+(a=e=t)|0,w=f,f=Q,Q=w+Q|0,a=Q=a>>>0>t>>>0?Q+1|0:Q,i[r+32>>2]=t,i[r+36>>2]=Q,Q=ug(_,o,28),l=p,H=ug(_,o,34)^Q,l^=p,Q=((E|s)&o|E&s)+f|0,Q=(e=(w=(u|v)&_|u&v)+e|0)>>>0>>0?Q+1|0:Q,f=e,e=ug(_,o,39)^H,Q=(p^l)+Q|0,w=f=f+e|0,f=Q=e>>>0>f>>>0?Q+1|0:Q,i[r>>2]=w,i[r+4>>2]=Q,e=r,Q=ug(t,a,14),r=p,l=ug(t,a,18)^Q,H=p^r,Q=c+(C^(C^n)&a)|0,Q=(r=D+(h^(y^h)&t)|0)>>>0>>0?Q+1|0:Q,c=ug(t,a,41)^l,Q=(p^H)+Q|0,Q=c>>>0>(D=c+r|0)>>>0?Q+1|0:Q,D=(l=i[(r=H=(c=(8|B)<<3)+g|0)>>2])+D|0,Q=i[r+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,D=(r=i[(c=c+34784|0)>>2])+D|0,Q=i[c+4>>2]+Q|0,Q=r>>>0>D>>>0?Q+1|0:Q,l=D,r=s,s=Q,Q=r+Q|0,r=Q=(c=D)>>>0>(D=c+u|0)>>>0?Q+1|0:Q,i[e+24>>2]=D,i[e+28>>2]=Q,c=e,Q=ug(w,f,28),e=p,u=ug(w,f,34)^Q,Y=p^e,e=(Q=l)+(l=(_|v)&w|_&v)|0,Q=((E|o)&f|E&o)+s|0,Q=e>>>0>>0?Q+1|0:Q,s=e,e=ug(w,f,39)^u,Q=(p^Y)+Q|0,Y=s=s+e|0,s=Q=e>>>0>s>>>0?Q+1|0:Q,i[c+56>>2]=Y,i[c+60>>2]=Q,Q=ug(D,r,14),e=p,l=ug(D,r,18)^Q,u=p^e,Q=C+(n^(n^a)&r)|0,Q=(e=h+(y^(t^y)&D)|0)>>>0>>0?Q+1|0:Q,C=ug(D,r,41)^l,Q=(p^u)+Q|0,Q=C>>>0>(h=C+e|0)>>>0?Q+1|0:Q,h=(u=i[(e=l=(C=(9|B)<<3)+g|0)>>2])+h|0,Q=i[e+4>>2]+Q|0,Q=h>>>0>>0?Q+1|0:Q,h=(e=i[(C=C+34784|0)>>2])+h|0,Q=i[C+4>>2]+Q|0,Q=e>>>0>h>>>0?Q+1|0:Q,e=E,E=Q,Q=e+Q|0,e=Q=(C=h)>>>0>(h=C+v|0)>>>0?Q+1|0:Q,i[c+16>>2]=h,i[c+20>>2]=Q,Q=ug(Y,s,28),u=p,v=ug(Y,s,34)^Q,u^=p,Q=((o|f)&s|o&f)+E|0,Q=(C=(b=(w|_)&Y|w&_)+C|0)>>>0>>0?Q+1|0:Q,E=C,C=ug(Y,s,39)^v,Q=(p^u)+Q|0,b=E=E+C|0,E=Q=E>>>0>>0?Q+1|0:Q,i[c+48>>2]=b,i[c+52>>2]=Q,Q=ug(h,e,14),C=p,u=ug(h,e,18)^Q,v=p^C,Q=n+(a^(r^a)&e)|0,Q=(C=y+(t^(t^D)&h)|0)>>>0>>0?Q+1|0:Q,n=C,C=ug(h,e,41)^u,Q=(p^v)+Q|0,Q=C>>>0>(y=n+C|0)>>>0?Q+1|0:Q,y=(u=i[(n=v=(C=(10|B)<<3)+g|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=y>>>0>>0?Q+1|0:Q,y=(n=i[(C=C+34784|0)>>2])+y|0,Q=i[C+4>>2]+Q|0,Q=n>>>0>y>>>0?Q+1|0:Q,u=y,n=o,o=Q,Q=n+Q|0,n=Q=(C=y)>>>0>(y=C+_|0)>>>0?Q+1|0:Q,i[c+8>>2]=y,i[c+12>>2]=Q,C=c,Q=ug(b,E,28),c=p,_=ug(b,E,34)^Q,N=p^c,c=(Q=u)+(u=(w|Y)&b|w&Y)|0,Q=((f|s)&E|f&s)+o|0,Q=c>>>0>>0?Q+1|0:Q,o=c,c=ug(b,E,39)^_,Q=(p^N)+Q|0,c=Q=(o=o+c|0)>>>0>>0?Q+1|0:Q,i[C+40>>2]=o,i[C+44>>2]=Q,Q=ug(y,n,14),u=p,_=ug(y,n,18)^Q,N=p^u,m=w,Q=a+(r^(r^e)&n)|0,Q=(u=t+(D^(h^D)&y)|0)>>>0>>0?Q+1|0:Q,a=ug(y,n,41)^_,Q=(p^N)+Q|0,Q=a>>>0>(t=a+u|0)>>>0?Q+1|0:Q,t=(w=i[(u=(a=(11|B)<<3)+g|0)>>2])+t|0,Q=i[u+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=(_=i[(a=a+34784|0)>>2])+t|0,Q=i[a+4>>2]+Q|0,Q=t>>>0<_>>>0?Q+1|0:Q,w=t,_=f,f=Q,Q=_+Q|0,a=Q=(a=t)>>>0>(t=m+a|0)>>>0?Q+1|0:Q,i[C>>2]=t,i[C+4>>2]=Q,_=C,Q=ug(o,c,28),C=p,N=ug(o,c,34)^Q,M=p^C,C=(Q=w)+(w=(Y|b)&o|Y&b)|0,Q=((E|s)&c|E&s)+f|0,Q=C>>>0>>0?Q+1|0:Q,f=C,C=ug(o,c,39)^N,Q=(p^M)+Q|0,C=Q=C>>>0>(f=f+C|0)>>>0?Q+1|0:Q,i[_+32>>2]=f,i[_+36>>2]=Q,w=_,Q=ug(t,a,14),_=p,N=ug(t,a,18)^Q,M=p^_,m=Y,Q=r+(e^(n^e)&a)|0,Q=(_=D+(h^(y^h)&t)|0)>>>0>>0?Q+1|0:Q,r=ug(t,a,41)^N,Q=(p^M)+Q|0,Q=r>>>0>(D=r+_|0)>>>0?Q+1|0:Q,D=(N=i[(Y=_=(r=(12|B)<<3)+g|0)>>2])+D|0,Q=i[Y+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,D=(Y=i[(r=r+34784|0)>>2])+D|0,Q=i[r+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,Y=D,D=m+(r=D)|0,m=s,s=Q,Q=m+Q|0,N=D,D=Q=r>>>0>D>>>0?Q+1|0:Q,i[w+56>>2]=N,i[w+60>>2]=Q,r=w,Q=ug(f,C,28),w=p,M=ug(f,C,34)^Q,m=p^w,w=(Q=Y)+(Y=(o|b)&f|o&b)|0,Q=((E|c)&C|E&c)+s|0,Q=w>>>0>>0?Q+1|0:Q,s=w,w=ug(f,C,39)^M,Q=(p^m)+Q|0,Y=s=s+w|0,s=Q=s>>>0>>0?Q+1|0:Q,i[r+24>>2]=Y,i[r+28>>2]=Q,w=r,Q=ug(N,D,14),r=p,M=ug(N,D,18)^Q,m=p^r,P=b,Q=e+(n^(n^a)&D)|0,Q=(r=h+(y^(t^y)&N)|0)>>>0>>0?Q+1|0:Q,e=r,r=ug(N,D,41)^M,Q=(p^m)+Q|0,Q=r>>>0>(h=e+r|0)>>>0?Q+1|0:Q,r=(r=h)+(M=i[(h=(e=(13|B)<<3)+g|0)>>2])|0,Q=i[h+4>>2]+Q|0,Q=r>>>0>>0?Q+1|0:Q,r=(b=i[(e=e+34784|0)>>2])+r|0,Q=i[e+4>>2]+Q|0,Q=r>>>0>>0?Q+1|0:Q,b=r,e=r,m=E,E=Q,Q=m+Q|0,M=r=P+r|0,r=Q=r>>>0>>0?Q+1|0:Q,i[w+48>>2]=M,i[w+52>>2]=Q,e=w,Q=ug(Y,s,28),w=p,m=ug(Y,s,34)^Q,P=p^w,w=(Q=b)+(b=(o|f)&Y|o&f)|0,Q=((C|c)&s|C&c)+E|0,Q=w>>>0>>0?Q+1|0:Q,E=w,w=ug(Y,s,39)^m,Q=(p^P)+Q|0,b=E=E+w|0,E=Q=E>>>0>>0?Q+1|0:Q,i[e+16>>2]=b,i[e+20>>2]=Q,Q=ug(M,r,14),w=p,m=ug(M,r,18)^Q,P=p^w,Q=n+(a^(a^D)&r)|0,Q=(w=y+(t^(t^N)&M)|0)>>>0>>0?Q+1|0:Q,n=ug(M,r,41)^m,Q=(p^P)+Q|0,Q=n>>>0>(y=n+w|0)>>>0?Q+1|0:Q,n=(n=y)+(P=i[(y=(w=(14|B)<<3)+g|0)>>2])|0,Q=i[y+4>>2]+Q|0,Q=n>>>0

>>0?Q+1|0:Q,n=(m=i[(w=w+34784|0)>>2])+n|0,Q=i[w+4>>2]+Q|0,P=n,w=Q=n>>>0>>0?Q+1|0:Q,Q=c+Q|0,m=n=o+n|0,o=Q=n>>>0>>0?Q+1|0:Q,i[e+40>>2]=n,i[e+44>>2]=Q,n=e,Q=ug(b,E,28),c=p,e=ug(b,E,34)^Q,J=p^c,c=(Q=P)+(P=(f|Y)&b|f&Y)|0,Q=((C|s)&E|C&s)+w|0,Q=c>>>0

>>0?Q+1|0:Q,e=ug(b,E,39)^e,Q=(p^J)+Q|0,Q=e>>>0>(c=e+c|0)>>>0?Q+1|0:Q,e=c,c=Q,i[n+8>>2]=e,i[n+12>>2]=Q,Q=ug(m,o,14),n=p,P=ug(m,o,18)^Q,J=p^n,Q=a+(D^(r^D)&o)|0,Q=(w=t+(N^(N^M)&m)|0)>>>0>>0?Q+1|0:Q,D=ug(m,o,41)^P,Q=(p^J)+Q|0,Q=(o=D+w|0)>>>0>>0?Q+1|0:Q,o=(r=i[(a=D=(t=(15|B)<<3)+g|0)>>2])+o|0,Q=i[a+4>>2]+Q|0,Q=o>>>0>>0?Q+1|0:Q,o=(a=i[(t=t+34784|0)>>2])+o|0,Q=i[t+4>>2]+Q|0,Q=o>>>0>>0?Q+1|0:Q,t=f+(a=o)|0,o=Q,Q=C+Q|0,i[(n=I)+32>>2]=t,i[n+36>>2]=t>>>0>>0?Q+1|0:Q,Q=ug(e,c,28),f=p,C=ug(e,c,34)^Q,n=p^f,Q=((E|s)&c|E&s)+o|0,s=(t=(E=a)+(a=(Y|b)&e|Y&b)|0)+(E=ug(e,c,39)^C)|0,Q=(p^n)+(a>>>0>t>>>0?Q+1|0:Q)|0,i[(f=I)>>2]=s,i[f+4>>2]=E>>>0>s>>>0?Q+1|0:Q,64==(0|B)){for(;s=g=(B=x<<3)+A|0,B=(E=i[(Q=I+B|0)>>2])+i[s>>2]|0,Q=i[s+4>>2]+i[Q+4>>2]|0,i[s>>2]=B,i[s+4>>2]=B>>>0>>0?Q+1|0:Q,8!=(0|(x=x+1|0)););break}c=((B=B+16|0)<<3)+g|0,Y=s=i[y+4>>2],Q=s>>>6|0,s=((63&s)<<26|(b=i[y>>2])>>>6)^ug(b,s,19),Q^=p,s=(C=ug(b,Y,61)^s)+(E=w=i[l>>2])|0,Q=(f=i[l+4>>2])+(p^Q)|0,Q=E>>>0>s>>>0?Q+1|0:Q,s=(o=i[(E=g+L|0)>>2])+s|0,Q=i[E+4>>2]+Q|0,s=o>>>0>(C=s)>>>0?Q+1|0:Q,o=E=i[d+4>>2],Q=E>>>7|0,E=((127&E)<<25|(t=i[d>>2])>>>7)^ug(t,E,1),Q^=p,a=C,C=ug(t,o,8)^E,Q=(p^Q)+s|0,n=E=a+C|0,E=Q=E>>>0>>0?Q+1|0:Q,i[c>>2]=n,i[c+4>>2]=Q,Q=i[(c=d)+76>>2]+o|0,C=t,o=(t=i[c+72>>2])>>>0>(C=s=C+t|0)>>>0?Q+1|0:Q,s=t=i[D+4>>2],Q=t>>>6|0,t=((63&t)<<26|(e=i[D>>2])>>>6)^ug(e,t,19),Q^=p,a=C,C=ug(e,s,61)^t,Q=(p^Q)+o|0,o=C>>>0>(a=t=a+C|0)>>>0?Q+1|0:Q,t=C=i[c+12>>2],Q=C>>>7|0,C=((127&C)<<25|(r=i[c+8>>2])>>>7)^ug(r,C,1),Q^=p,d=a,a=ug(r,t,8)^C,Q=(p^Q)+o|0,Q=(C=d+a|0)>>>0>>0?Q+1|0:Q,a=C,o=Q,i[c+128>>2]=C,i[c+132>>2]=Q,c=U,C=t,Q=ug(n,E,19),U=p,t=Q,Q=E>>>6|0,E=(E=ug(n,E,61)^t^((63&E)<<26|n>>>6))+(n=d=i[u>>2])|0,Q=(t=i[u+4>>2])+(p^Q^U)|0,Q=E>>>0>>0?Q+1|0:Q,n=E,Q=Q+C|0,r=E=E+r|0,E=E>>>0>>0?Q+1|0:Q,n=C=i[F+4>>2],Q=C>>>7|0,C=((127&C)<<25|(U=i[F>>2])>>>7)^ug(U,C,1),Q^=p,m=r,r=ug(U,n,8)^C,Q=(p^Q)+E|0,Q=(C=m+r|0)>>>0>>0?Q+1|0:Q,r=C,E=Q,i[c+128>>2]=C,i[c+132>>2]=Q,c=(Q=U)+(U=i[(C=F)+72>>2])|0,Q=i[C+76>>2]+n|0,n=Q=c>>>0>>0?Q+1|0:Q,Q=ug(a,o,19),U=p,F=c,c=Q,Q=o>>>6|0,c=ug(a,o,61)^c^((63&o)<<26|a>>>6),Q=(p^Q^U)+n|0,U=o=F+c|0,o=o>>>0>>0?Q+1|0:Q,c=n=i[C+12>>2],Q=n>>>7|0,n=((127&n)<<25|(a=i[C+8>>2])>>>7)^ug(a,n,1),Q^=p,F=ug(a,c,8)^n,Q=(p^Q)+o|0,Q=(n=F+U|0)>>>0>>0?Q+1|0:Q,F=n,o=Q,i[C+128>>2]=n,i[C+132>>2]=Q,C=S,n=c,Q=ug(r,E,19),S=p,m=a,a=Q,Q=E>>>6|0,E=(E=ug(r,E,61)^a^((63&E)<<26|r>>>6))+(a=U=i[h>>2])|0,Q=(c=i[h+4>>2])+(p^Q^S)|0,Q=E>>>0>>0?Q+1|0:Q,a=E,Q=Q+n|0,S=E=m+E|0,E=E>>>0>>0?Q+1|0:Q,a=n=i[G+4>>2],Q=n>>>7|0,n=((127&n)<<25|(r=i[G>>2])>>>7)^ug(r,n,1),Q^=p,m=S,S=ug(r,a,8)^n,Q=(p^Q)+E|0,Q=(n=m+S|0)>>>0>>0?Q+1|0:Q,S=n,E=Q,i[C+128>>2]=n,i[C+132>>2]=Q,C=(Q=r)+(r=i[(n=G)+72>>2])|0,Q=i[n+76>>2]+a|0,a=Q=C>>>0>>0?Q+1|0:Q,Q=ug(F,o,19),r=p,G=C,m=Q,Q=(C=o)>>>6|0,C=m^((63&C)<<26|F>>>6)^ug(F,C,61),Q=(p^Q^r)+a|0,o=C>>>0>(r=o=G+C|0)>>>0?Q+1|0:Q,Q=(C=a=i[n+12>>2])>>>7|0,a=((127&C)<<25|(G=i[n+8>>2])>>>7)^ug(G,C,1),Q^=p,F=r,r=ug(G,C,8)^a,Q=(p^Q)+o|0,F=a=F+r|0,o=Q=r>>>0>a>>>0?Q+1|0:Q,i[n+128>>2]=a,i[n+132>>2]=Q,n=R,a=C,Q=ug(S,E,19),R=p,C=Q,Q=E>>>6|0,C=ug(S,E,61)^C^((63&E)<<26|S>>>6),Q=(p^Q^R)+s|0,Q=(E=C+e|0)>>>0>>0?Q+1|0:Q,C=E,Q=Q+a|0,G=E=E+G|0,E=E>>>0>>0?Q+1|0:Q,Q=(C=r=i[k+4>>2])>>>7|0,r=((127&C)<<25|(a=i[k>>2])>>>7)^ug(a,C,1),Q^=p,S=G,G=ug(a,C,8)^r,Q=(p^Q)+E|0,E=Q=(r=S+G|0)>>>0>>0?Q+1|0:Q,i[n+128>>2]=r,i[n+132>>2]=Q,Q=i[(n=k)+76>>2]+C|0,a=(C=a=(G=i[n+72>>2])+a|0)>>>0>>0?Q+1|0:Q,Q=ug(F,o,19),G=p,S=C,k=Q,Q=(C=o)>>>6|0,C=k^((63&C)<<26|F>>>6)^ug(F,C,61),Q=(p^Q^G)+a|0,F=o=S+C|0,o=C>>>0>o>>>0?Q+1|0:Q,Q=(C=a=i[n+12>>2])>>>7|0,a=((127&C)<<25|(G=i[n+8>>2])>>>7)^ug(G,C,1),Q^=p,S=F,F=ug(G,C,8)^a,Q=(p^Q)+o|0,Q=(a=S+F|0)>>>0>>0?Q+1|0:Q,F=a,o=Q,i[n+128>>2]=a,i[n+132>>2]=Q,a=C,Q=ug(r,E,19),k=p,C=Q,Q=E>>>6|0,E=(E=ug(r,E,61)^C^((63&E)<<26|r>>>6))+(C=i[(n=H)+72>>2])|0,Q=i[n+76>>2]+(p^Q^k)|0,Q=E>>>0>>0?Q+1|0:Q,C=E,Q=Q+a|0,C=Q=(E=E+G|0)>>>0>>0?Q+1|0:Q,Q=ug(w,f,1),a=p,G=E,r=Q,Q=(E=f)>>>7|0,r=r^((127&E)<<25|w>>>7)^ug(w,E,8),Q=(p^Q^a)+C|0,a=E=G+r|0,E=Q=E>>>0>>0?Q+1|0:Q,i[n+128>>2]=a,i[n+132>>2]=Q,Q=i[(C=l)+76>>2]+f|0,f=n=(r=i[C+72>>2])+w|0,n=n>>>0>>0?Q+1|0:Q,Q=ug(F,o,19),r=p,w=f,f=Q,Q=o>>>6|0,f=ug(F,o,61)^f^((63&o)<<26|F>>>6),Q=(p^Q^r)+n|0,o=(r=o=w+f|0)>>>0>>0?Q+1|0:Q,f=n=i[C+12>>2],Q=n>>>7|0,n=((127&n)<<25|(F=i[C+8>>2])>>>7)^ug(F,n,1),Q^=p,w=r,r=ug(F,f,8)^n,Q=(p^Q)+o|0,Q=(n=w+r|0)>>>0>>0?Q+1|0:Q,r=n,o=Q,i[C+128>>2]=n,i[C+132>>2]=Q,n=f,Q=ug(a,E,19),G=p,C=Q,Q=E>>>6|0,E=(E=ug(a,E,61)^C^((63&E)<<26|a>>>6))+(f=i[(C=v)+72>>2])|0,Q=i[C+76>>2]+(p^Q^G)|0,Q=E>>>0>>0?Q+1|0:Q,f=E,Q=Q+n|0,f=Q=(E=E+F|0)>>>0>>0?Q+1|0:Q,Q=ug(d,t,1),n=p,w=E,a=Q,Q=(E=t)>>>7|0,a=a^((127&E)<<25|d>>>7)^ug(d,E,8),Q=(p^Q^n)+f|0,n=E=w+a|0,E=Q=E>>>0>>0?Q+1|0:Q,i[C+128>>2]=n,i[C+132>>2]=Q,f=(a=i[(C=u)+72>>2])+d|0,Q=i[C+76>>2]+t|0,t=Q=a>>>0>f>>>0?Q+1|0:Q,Q=ug(r,o,19),a=p,w=f,f=Q,Q=o>>>6|0,f=ug(r,o,61)^f^((63&o)<<26|r>>>6),Q=(p^Q^a)+t|0,o=(a=o=w+f|0)>>>0>>0?Q+1|0:Q,f=t=i[C+12>>2],Q=t>>>7|0,t=((127&t)<<25|(r=i[C+8>>2])>>>7)^ug(r,t,1),Q^=p,w=a,a=ug(r,f,8)^t,Q=(p^Q)+o|0,Q=a>>>0>(t=w+a|0)>>>0?Q+1|0:Q,a=t,o=Q,i[C+128>>2]=a,i[C+132>>2]=Q,C=f,Q=ug(n,E,19),d=p,f=Q,Q=E>>>6|0,E=(E=ug(n,E,61)^f^((63&E)<<26|n>>>6))+(f=i[(t=_)+72>>2])|0,Q=i[t+76>>2]+(p^Q^d)|0,Q=E>>>0>>0?Q+1|0:Q,f=E,Q=Q+C|0,f=Q=(E=E+r|0)>>>0>>0?Q+1|0:Q,Q=ug(U,c,1),C=p,r=E,n=Q,Q=(E=c)>>>7|0,n=n^((127&E)<<25|U>>>7)^ug(U,E,8),Q=(p^Q^C)+f|0,C=E=r+n|0,E=Q=E>>>0>>0?Q+1|0:Q,i[t+128>>2]=C,i[t+132>>2]=Q,t=(n=i[(f=h)+72>>2])+U|0,Q=i[f+76>>2]+c|0,c=Q=n>>>0>t>>>0?Q+1|0:Q,Q=ug(a,o,19),n=p,r=t,t=Q,Q=o>>>6|0,t=ug(a,o,61)^t^((63&o)<<26|a>>>6),Q=(p^Q^n)+c|0,o=(n=o=r+t|0)>>>0>>0?Q+1|0:Q,c=t=i[f+12>>2],Q=t>>>7|0,t=((127&t)<<25|(h=i[f+8>>2])>>>7)^ug(h,t,1),Q^=p,t=ug(h,c,8)^t,Q=(p^Q)+o|0,Q=t>>>0>(h=t+n|0)>>>0?Q+1|0:Q,t=h,o=Q,i[f+128>>2]=t,i[f+132>>2]=Q,h=(c=i[(f=y)+72>>2])+b|0,Q=i[f+76>>2]+Y|0,y=Q=c>>>0>h>>>0?Q+1|0:Q,Q=ug(C,E,19),c=p,a=h,n=Q,Q=E>>>6|0,h=ug(C,E,61)^n^((63&E)<<26|C>>>6),Q=(p^Q^c)+y|0,h=Q=(E=a+h|0)>>>0>>0?Q+1|0:Q,Q=ug(e,s,1),y=p,C=E,a=Q,Q=(E=s)>>>7|0,E=C+(c=a^((127&E)<<25|e>>>7)^ug(e,E,8))|0,Q=(p^Q^y)+h|0,i[f+128>>2]=E,i[f+132>>2]=E>>>0>>0?Q+1|0:Q,Q=i[(E=D)+76>>2]+s|0,s=f=(h=i[E+72>>2])+e|0,f=f>>>0>>0?Q+1|0:Q,Q=ug(t,o,19),h=p,C=Q,Q=o>>>6|0,o=ug(t,o,61)^C^((63&o)<<26|t>>>6),Q=(p^Q^h)+f|0,s=o>>>0>(y=s=o+s|0)>>>0?Q+1|0:Q,D=((127&(f=h=i[E+12>>2]))<<25|(o=i[E+8>>2])>>>7)^ug(o,f,1),Q=p^f>>>7,D=(h=ug(o,f,8)^D)+y|0,Q=(p^Q)+s|0,i[E+128>>2]=D,i[E+132>>2]=h>>>0>D>>>0?Q+1|0:Q}}function G(A){var I,g,B,Q,E,i,a,r,o,e,t,f,c,y,s,w,h,D,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0,EA=0;y=HI(A),s=n[A+2|0]|n[A+3|0]<<8|n[A+4|0]<<16|n[A+5|0]<<24,w=HI(A+5|0),h=p,IA=n[A+7|0]|n[A+8|0]<<8|n[A+9|0]<<16|n[A+10|0]<<24,gA=n[A+10|0]|n[A+11|0]<<8|n[A+12|0]<<16|n[A+13|0]<<24,D=HI(A+13|0),BA=p,M=n[A+15|0]|n[A+16|0]<<8|n[A+17|0]<<16|n[A+18|0]<<24,Z=HI(A+18|0),d=p,m=HI(A+21|0),_=n[A+23|0]|n[A+24|0]<<8|n[A+25|0]<<16|n[A+26|0]<<24,k=HI(A+26|0),l=p,AA=n[A+28|0]|n[A+29|0]<<8|n[A+30|0]<<16|n[A+31|0]<<24,q=n[A+31|0]|n[A+32|0]<<8|n[A+33|0]<<16|n[A+34|0]<<24,T=HI(A+34|0),W=p,P=n[A+36|0]|n[A+37|0]<<8|n[A+38|0]<<16|n[A+39|0]<<24,O=HI(A+39|0),J=p,Y=HI(A+42|0),G=n[A+44|0]|n[A+45|0]<<8|n[A+46|0]<<16|n[A+47|0]<<24,F=HI(A+47|0),u=2097151&((3&l)<<30|k>>>2),k=eg(I=2097151&((3&(H=p))<<30|F>>>2),0,136657,0)+u|0,l=p,l=u>>>0>k>>>0?l+1|0:l,F=eg(g=(n[A+49|0]|n[A+50|0]<<8|n[A+51|0]<<16|n[A+52|0]<<24)>>>7&2097151,0,-997805,-1),u=p+l|0,u=F>>>0>(k=F+k|0)>>>0?u+1|0:u,l=eg(B=(n[A+52|0]|n[A+53|0]<<8|n[A+54|0]<<16|n[A+55|0]<<24)>>>4&2097151,0,654183,0),F=p+u|0,F=l>>>0>(k=l+k|0)>>>0?F+1|0:F,u=k,l=HI(A+55|0),k=u+(l=eg(Q=2097151&((1&(k=p))<<31|l>>>1),0,470296,0))|0,u=p+F|0,u=l>>>0>k>>>0?u+1|0:u,F=eg(E=(n[A+57|0]|n[A+58|0]<<8|n[A+59|0]<<16|n[A+60|0]<<24)>>>6&2097151,0,666643,0),l=p+u|0,U=l=F>>>0>(k=F+k|0)>>>0?l+1|0:l,F=l,b=G>>>5&2097151,l=2097151&Y,G=eg(i=(n[A+60|0]|n[A+61|0]<<8|n[A+62|0]<<16|n[A+63|0]<<24)>>>3|0,0,-683901,-1)+l|0,u=p,Y=G,S=u=l>>>0>G>>>0?u+1|0:u,N=(u=G)- -1048576|0,L=G=S-((u>>>0<4293918720)-1|0)|0,u=G>>21,r=b=(G=(2097151&G)<<11|N>>>21)+b|0,V=l=G>>>0>b>>>0?u+1|0:u,u=eg(b,l,-683901,-1),l=p+F|0,j=H=u+k|0,v=u>>>0>H>>>0?l+1|0:l,F=_>>>5&2097151,H=eg(I,0,-997805,-1)+F|0,u=p,u=F>>>0>H>>>0?u+1|0:u,l=eg(g,0,654183,0),F=p+u|0,F=l>>>0>(H=l+H|0)>>>0?F+1|0:F,u=eg(B,0,470296,0),l=p+F|0,l=u>>>0>(H=u+H|0)>>>0?l+1|0:l,F=eg(Q,0,666643,0),u=p+l|0,F=F>>>0>(_=H=F+H|0)>>>0?u+1|0:u,u=2097151&m,H=eg(I,0,654183,0)+u|0,l=p,l=u>>>0>H>>>0?l+1|0:l,G=(u=H)+(H=eg(g,0,470296,0))|0,u=p+l|0,u=G>>>0>>0?u+1|0:u,H=eg(B,0,666643,0),l=p+u|0,b=G=H+G|0,G=l=G>>>0>>0?l+1|0:l,z=(u=b)- -1048576|0,R=H=l-((u>>>0<4293918720)-1|0)|0,F=(u=H>>>21|0)+F|0,m=F=(l=(2097151&H)<<11|z>>>21)>>>0>(_=H=l+_|0)>>>0?F+1|0:F,K=(u=_)- -1048576|0,f=k- -1048576|0,U=U-((k>>>0<4293918720)-1|0)|0,l=(u=(F=x=F-((u>>>0<4293918720)-1|0)|0)>>21)+v|0,U=(l=(k=(2097151&F)<<11|K>>>21)>>>0>(x=k+j|0)>>>0?l+1|0:l)-(((u=-2097152&f)>>>0>(k=x)>>>0)+(H=U)|0)|0,QA=(u=k-u|0)-(l=-2097152&(c=u- -1048576|0))|0,CA=U-((u>>>0>>0)+(k=U-((u>>>0<4293918720)-1|0)|0)|0)|0,l=eg(r,V,136657,0)+_|0,u=m+p|0,u=l>>>0<_>>>0?u+1|0:u,$=(_=l)-(l=-2097152&K)|0,j=u-((l>>>0>_>>>0)+F|0)|0,U=Y-(u=-2097152&N)|0,v=S-((u>>>0>Y>>>0)+L|0)|0,u=2097151&((7&J)<<29|O>>>3),F=eg(i,0,136657,0)+u|0,l=p,l=u>>>0>F>>>0?l+1|0:l,_=(u=F)+(F=eg(E,0,-683901,-1))|0,u=p+l|0,Y=_,_=F>>>0>_>>>0?u+1|0:u,u=eg(Q,0,-683901,-1),l=p,F=u,l=(u=P>>>6&2097151)>>>0>(F=F+u|0)>>>0?l+1|0:l,m=(u=eg(i,0,-997805,-1))+F|0,F=p+l|0,F=u>>>0>m>>>0?F+1|0:F,l=eg(E,0,136657,0),u=p+F|0,K=l=(N=u=l>>>0>(m=l+m|0)>>>0?u+1|0:u)-(((u=m)>>>0<4293918720)-1|0)|0,u=(2097151&l)<<11|(O=u- -1048576|0)>>>21,l=(l>>21)+_|0,S=l=u>>>0>(Y=u+Y|0)>>>0?l+1|0:l,x=(u=Y)- -1048576|0,L=l=l-((u>>>0<4293918720)-1|0)|0,u=(F=l>>21)+v|0,o=_=(l=(2097151&l)<<11|x>>>21)+U|0,X=u=l>>>0>_>>>0?u+1|0:u,l=eg(_,u,-683901,-1),u=p+j|0,EA=F=l+$|0,P=l>>>0>F>>>0?u+1|0:u,v=b,u=2097151&((7&d)<<29|Z>>>3),F=eg(I,0,470296,0)+u|0,l=p,l=u>>>0>F>>>0?l+1|0:l,u=eg(g,0,666643,0),l=p+l|0,U=F=u+F|0,F=u>>>0>F>>>0?l+1|0:l,_=M>>>6&2097151,b=eg(I,0,666643,0)+_|0,u=p,d=_=(M=u=_>>>0>b>>>0?u+1|0:u)-(((u=b)>>>0<4293918720)-1|0)|0,l=(l=_>>>21|0)+F|0,J=l=(u=(2097151&_)<<11|($=u- -1048576|0)>>>21)>>>0>(_=u+U|0)>>>0?l+1|0:l,Z=l-(((u=_)>>>0<4293918720)-1|0)|0,j=u- -1048576|0,a=Y-(u=-2097152&x)|0,e=F=S-((u>>>0>Y>>>0)+L|0)|0,u=((U=Z)>>>21|0)+G|0,u=(Y=(2097151&U)<<11|j>>>21)>>>0>(v=Y+v|0)>>>0?u+1|0:u,v=(G=eg(r,V,-997805,-1))+((Y=v)-(l=-2097152&z)|0)|0,l=p+(u-((8191&R)+(l>>>0>Y>>>0)|0)|0)|0,l=G>>>0>v>>>0?l+1|0:l,u=eg(o,X,136657,0),l=p+l|0,l=u>>>0>(G=u+v|0)>>>0?l+1|0:l,F=eg(a,F,-683901,-1),u=p+l|0,S=u=F>>>0>(G=F+G|0)>>>0?u+1|0:u,x=(u=G)- -1048576|0,L=F=S-((u>>>0<4293918720)-1|0)|0,l=(u=F>>21)+P|0,v=l=(F=(2097151&F)<<11|x>>>21)>>>0>(Y=F+EA|0)>>>0?l+1|0:l,R=(u=F=Y)- -1048576|0,u=(u=(Y=P=l-((u>>>0<4293918720)-1|0)|0)>>21)+CA|0,QA=P=(l=(2097151&Y)<<11|R>>>21)+QA|0,P=l>>>0>P>>>0?u+1|0:u,CA=F-(u=-2097152&R)|0,EA=v-((u>>>0>F>>>0)+Y|0)|0,Z=G-(u=-2097152&x)|0,z=S-((u>>>0>G>>>0)+L|0)|0,u=eg(r,V,654183,0),F=p+(J-((8191&U)+((l=-2097152&j)>>>0>_>>>0)|0)|0)|0,F=u>>>0>(G=u+(_-l|0)|0)>>>0?F+1|0:F,l=eg(o,X,-997805,-1),u=p+F|0,u=l>>>0>(G=l+G|0)>>>0?u+1|0:u,F=eg(a,e,136657,0),l=p+u|0,x=G=F+G|0,Y=F>>>0>G>>>0?l+1|0:l,R=m-(u=-2097152&O)|0,J=N-((u>>>0>m>>>0)+K|0)|0,l=2097151&((1&W)<<31|T>>>1),G=eg(B,0,-683901,-1)+l|0,u=p,u=l>>>0>G>>>0?u+1|0:u,l=eg(Q,0,136657,0),u=p+u|0,u=l>>>0>(F=l+G|0)>>>0?u+1|0:u,G=(l=F)+(F=eg(i,0,654183,0))|0,l=p+u|0,l=F>>>0>G>>>0?l+1|0:l,u=eg(E,0,-997805,-1),l=p+l|0,m=F=u+G|0,G=u>>>0>F>>>0?l+1|0:l,u=eg(g,0,-683901,-1),F=p,l=u,F=(u=q>>>4&2097151)>>>0>(l=l+u|0)>>>0?F+1|0:F,_=(u=l)+(l=eg(B,0,136657,0))|0,u=p+F|0,u=l>>>0>_>>>0?u+1|0:u,F=eg(Q,0,-997805,-1),l=p+u|0,l=F>>>0>(_=F+_|0)>>>0?l+1|0:l,F=eg(i,0,470296,0),u=p+l|0,u=F>>>0>(_=F+_|0)>>>0?u+1|0:u,F=eg(E,0,654183,0),l=p+u|0,S=l=F>>>0>(_=F+_|0)>>>0?l+1|0:l,K=(u=_)- -1048576|0,L=F=l-((u>>>0<4293918720)-1|0)|0,u=(u=F>>21)+G|0,G=F=(l=(2097151&F)<<11|K>>>21)+m|0,v=u=l>>>0>F>>>0?u+1|0:u,U=(u=F)- -1048576|0,m=F=v-((u>>>0<4293918720)-1|0)|0,l=(u=F>>21)+J|0,t=N=(F=(2097151&F)<<11|U>>>21)+R|0,q=l=F>>>0>N>>>0?l+1|0:l,u=eg(N,l,-683901,-1),F=p+Y|0,J=l=u+x|0,Y=u>>>0>l>>>0?F+1|0:F,T=G-(u=-2097152&U)|0,W=m=v-((u>>>0>G>>>0)+m|0)|0,F=(u=eg(r,V,470296,0))+(b-(l=-2097152&$)|0)|0,l=p+(M-((2047&d)+(l>>>0>b>>>0)|0)|0)|0,l=u>>>0>F>>>0?l+1|0:l,u=eg(o,X,654183,0),l=p+l|0,l=u>>>0>(F=u+F|0)>>>0?l+1|0:l,G=(u=eg(a,e,-997805,-1))+F|0,F=p+l|0,F=u>>>0>G>>>0?F+1|0:F,l=eg(N,q,136657,0),u=p+F|0,u=l>>>0>(G=l+G|0)>>>0?u+1|0:u,F=eg(T,m,-683901,-1),l=p+u|0,v=l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,d=(u=G)- -1048576|0,m=F=l-((u>>>0<4293918720)-1|0)|0,u=(u=F>>21)+Y|0,Y=u=(l=(2097151&F)<<11|d>>>21)>>>0>(F=l+J|0)>>>0?u+1|0:u,U=(u=F)- -1048576|0,l=(u=(b=J=Y-((u>>>0<4293918720)-1|0)|0)>>21)+z|0,Z=M=(J=(2097151&b)<<11|U>>>21)+Z|0,J=M>>>0>>0?l+1|0:l,z=F-(u=-2097152&U)|0,O=Y-((u>>>0>F>>>0)+b|0)|0,x=G-(u=-2097152&d)|0,N=v-((u>>>0>G>>>0)+m|0)|0,l=2097151&((1&BA)<<31|D>>>1),G=eg(r,V,666643,0)+l|0,u=p,u=l>>>0>G>>>0?u+1|0:u,F=eg(o,X,470296,0),l=p+u|0,l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,F=eg(a,e,654183,0),u=p+l|0,u=F>>>0>(G=F+G|0)>>>0?u+1|0:u,l=eg(t,q,-997805,-1),F=p+u|0,F=l>>>0>(G=l+G|0)>>>0?F+1|0:F,u=eg(T,W,136657,0),l=p+F|0,m=G=u+G|0,b=u>>>0>G>>>0?l+1|0:l,Y=_-(u=-2097152&K)|0,_=S-((u>>>0>_>>>0)+L|0)|0,u=eg(I,0,-683901,-1),l=p,F=u,l=(u=AA>>>7&2097151)>>>0>(F=F+u|0)>>>0?l+1|0:l,G=(u=eg(g,0,136657,0))+F|0,F=p+l|0,F=u>>>0>G>>>0?F+1|0:F,l=eg(B,0,-997805,-1),u=p+F|0,u=l>>>0>(G=l+G|0)>>>0?u+1|0:u,F=eg(Q,0,654183,0),l=p+u|0,l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,F=eg(i,0,666643,0),u=p+l|0,u=F>>>0>(G=F+G|0)>>>0?u+1|0:u,F=eg(E,0,470296,0),l=p+u|0,u=l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,l=H>>21,G=(H=(2097151&H)<<11|f>>>21)+(F=G)|0,F=u+l|0,L=F=G>>>0>>0?F+1|0:F,S=(u=G)- -1048576|0,v=F=F-((u>>>0<4293918720)-1|0)|0,u=(l=F>>21)+_|0,V=H=(F=(2097151&F)<<11|S>>>21)+Y|0,R=u=F>>>0>H>>>0?u+1|0:u,u=eg(H,u,-683901,-1),l=p+b|0,b=F=u+m|0,H=u>>>0>F>>>0?l+1|0:l,u=eg(o,X,666643,0),F=p,l=u,F=(u=gA>>>4&2097151)>>>0>(l=l+u|0)>>>0?F+1|0:F,_=(u=l)+(l=eg(a,e,470296,0))|0,u=p+F|0,u=l>>>0>_>>>0?u+1|0:u,F=eg(t,q,654183,0),l=p+u|0,l=F>>>0>(_=F+_|0)>>>0?l+1|0:l,u=eg(T,W,-997805,-1),l=p+l|0,l=u>>>0>(F=u+_|0)>>>0?l+1|0:l,_=(u=F)+(F=eg(V,R,136657,0))|0,u=p+l|0,m=u=F>>>0>_>>>0?u+1|0:u,M=(u=_)- -1048576|0,Y=F=m-((u>>>0<4293918720)-1|0)|0,u=(l=F>>21)+H|0,F=u=(F=(2097151&F)<<11|M>>>21)>>>0>(H=b=F+b|0)>>>0?u+1|0:u,d=(u=H)- -1048576|0,u=(l=(b=U=F-((u>>>0<4293918720)-1|0)|0)>>21)+N|0,$=K=(U=(2097151&b)<<11|d>>>21)+x|0,U=U>>>0>K>>>0?u+1|0:u,u=G-(l=-2097152&S)|0,G=L-((l>>>0>G>>>0)+v|0)|0,v=u,u=(u=k>>21)+G|0,S=u=(l=(2097151&k)<<11|c>>>21)>>>0>(G=k=v+l|0)>>>0?u+1|0:u,K=(u=G)- -1048576|0,L=k=S-((u>>>0<4293918720)-1|0)|0,N=u=k>>21,u=eg(X=(2097151&k)<<11|K>>>21,u,-683901,-1),l=p+F|0,l=u>>>0>(k=u+H|0)>>>0?l+1|0:l,j=(F=k)-(u=-2097152&d)|0,x=l-((u>>>0>F>>>0)+b|0)|0,l=eg(X,N,136657,0)+_|0,u=m+p|0,u=l>>>0<_>>>0?u+1|0:u,AA=(F=l)-(l=-2097152&M)|0,M=u-((l>>>0>F>>>0)+Y|0)|0,u=eg(a,e,666643,0),l=p,F=u,l=(u=IA>>>7&2097151)>>>0>(F=F+u|0)>>>0?l+1|0:l,k=(u=eg(t,q,470296,0))+F|0,F=p+l|0,F=u>>>0>k>>>0?F+1|0:F,l=eg(T,W,654183,0),u=p+F|0,u=l>>>0>(k=l+k|0)>>>0?u+1|0:u,l=eg(V,R,-997805,-1),u=p+u|0,Y=F=l+k|0,F=l>>>0>F>>>0?u+1|0:u,u=2097151&((3&h)<<30|w>>>2),k=eg(t,q,666643,0)+u|0,l=p,l=u>>>0>k>>>0?l+1|0:l,u=eg(T,W,470296,0),l=p+l|0,l=u>>>0>(k=u+k|0)>>>0?l+1|0:l,H=(u=k)+(k=eg(V,R,654183,0))|0,u=p+l|0,b=u=k>>>0>H>>>0?u+1|0:u,d=(u=k=H)- -1048576|0,u=(l=(_=H=b-((u>>>0<4293918720)-1|0)|0)>>21)+F|0,m=Y=(H=(2097151&_)<<11|d>>>21)+Y|0,F=u=H>>>0>Y>>>0?u+1|0:u,Y=(u=Y)- -1048576|0,u=(l=(H=v=F-((u>>>0<4293918720)-1|0)|0)>>21)+M|0,IA=q=(v=(2097151&H)<<11|Y>>>21)+AA|0,v=v>>>0>q>>>0?u+1|0:u,u=eg(X,N,-997805,-1),F=p+F|0,F=u>>>0>(l=u+m|0)>>>0?F+1|0:F,gA=l-(u=-2097152&Y)|0,BA=F-((u>>>0>l>>>0)+H|0)|0,u=eg(X,N,654183,0)+k|0,l=b+p|0,l=u>>>0>>0?l+1|0:l,AA=(F=u)-(u=-2097152&d)|0,q=l-((u>>>0>F>>>0)+_|0)|0,u=eg(T,W,666643,0),F=p,l=u,F=(u=s>>>5&2097151)>>>0>(l=l+u|0)>>>0?F+1|0:F,k=(u=l)+(l=eg(V,R,470296,0))|0,u=p+F|0,_=k,F=l>>>0>k>>>0?u+1|0:u,l=2097151&y,k=eg(V,R,666643,0)+l|0,u=p,H=k,Y=k=(m=u=l>>>0>k>>>0?u+1|0:u)-(((u=k)>>>0<4293918720)-1|0)|0,F=(l=k>>21)+F|0,b=F=(u=(2097151&k)<<11|(M=u- -1048576|0)>>>21)>>>0>(k=u+_|0)>>>0?F+1|0:F,d=(u=k)- -1048576|0,_=F=F-((u>>>0<4293918720)-1|0)|0,u=(l=F>>21)+q|0,F=u=(F=(2097151&F)<<11|d>>>21)>>>0>(R=F+AA|0)>>>0?u+1|0:u,u=eg(X,N,470296,0)+k|0,l=b+p|0,_=(l=u>>>0>>0?l+1|0:l)-(((k=-2097152&d)>>>0>(b=u)>>>0)+_|0)|0,b=u=u-k|0,k=(l=eg(X,N,666643,0))+(H-(u=-2097152&M)|0)|0,u=p+(m-((u>>>0>H>>>0)+Y|0)|0)|0,H=k,l=(l=(u=l>>>0>k>>>0?u+1|0:u)>>21)+_|0,W=k=b+(u=(2097151&u)<<11|k>>>21)|0,F=(u=(l=u>>>0>k>>>0?l+1|0:l)>>21)+F|0,_=k=(l=(2097151&l)<<11|k>>>21)+R|0,l=(F=l>>>0>(u=k)>>>0?F+1|0:F)>>21,F=(2097151&F)<<11|u>>>21,u=l+BA|0,Y=k=F+gA|0,F=(u=F>>>0>(l=k)>>>0?u+1|0:u)>>21,u=(2097151&u)<<11|l>>>21,l=F+v|0,v=k=u+IA|0,u=(u=(l=u>>>0>(F=k)>>>0?l+1|0:l)>>21)+x|0,R=F=(l=(2097151&l)<<11|F>>>21)+j|0,l=(l=(u=l>>>0>F>>>0?u+1|0:u)>>21)+U|0,N=F=(u=(2097151&u)<<11|F>>>21)+$|0,u=(l=u>>>0>F>>>0?l+1|0:l)>>21,l=(2097151&l)<<11|F>>>21,F=u+O|0,M=k=l+z|0,l=(F=l>>>0>(u=k)>>>0?F+1|0:F)>>21,F=(2097151&F)<<11|u>>>21,u=l+J|0,d=k=F+Z|0,F=(u=F>>>0>(l=k)>>>0?u+1|0:u)>>21,u=(2097151&u)<<11|l>>>21,l=F+EA|0,J=k=u+CA|0,u=(u=(l=u>>>0>(F=k)>>>0?l+1|0:l)>>21)+P|0,U=F=(l=(2097151&l)<<11|F>>>21)+QA|0,l=(u=l>>>0>F>>>0?u+1|0:u)>>21,k=(2097151&u)<<11|F>>>21,u=G-(F=-2097152&K)|0,F=(S-((F>>>0>G>>>0)+L|0)|0)+l|0,L=k=k+u|0,P=(2097151&(F=u>>>0>(l=k)>>>0?F+1|0:F))<<11|l>>>21,m=u=F>>21,l=2097151&H,F=eg(P,u,666643,0)+l|0,u=p,b=F,k=u=l>>>0>F>>>0?u+1|0:u,C[0|A]=F,C[A+1|0]=(255&u)<<24|F>>>8,u=2097151&W,F=eg(P,m,470296,0)+u|0,l=p,l=u>>>0>F>>>0?l+1|0:l,H=F,G=(2097151&(F=k))<<11|b>>>21,F=(u=F>>21)+l|0,F=G>>>0>(S=H+G|0)>>>0?F+1|0:F,G=S,C[A+4|0]=(2047&F)<<21|G>>>11,u=l=F,F=G,C[A+3|0]=(7&u)<<29|F>>>3,F=2097151&_,_=eg(P,m,654183,0)+F|0,u=p,u=F>>>0>_>>>0?u+1|0:u,F=_,_=(2097151&l)<<11|G>>>21,l=(l>>21)+u|0,l=_>>>0>(S=F+_|0)>>>0?l+1|0:l,_=S,u=l,C[A+6|0]=(63&u)<<26|_>>>6,H=0,F=31&((65535&k)<<16|b>>>16),l=b=2097151&G,C[A+2|0]=F|l<<5,F=2097151&Y,G=eg(P,m,-997805,-1)+F|0,l=p,F=l=F>>>0>G>>>0?l+1|0:l,F=(l=u>>21)+F|0,Y=G=(u=(2097151&u)<<11|_>>>21)+G|0,F=u>>>0>G>>>0?F+1|0:F,C[A+9|0]=(511&F)<<23|G>>>9,u=l=F,F=G,C[A+8|0]=(1&u)<<31|F>>>1,G=0,F=_&=2097151,C[A+5|0]=(524287&H)<<13|b>>>19|F<<2,F=2097151&v,H=eg(P,m,136657,0)+F|0,u=p,u=(u=F>>>0>H>>>0?u+1|0:u)+(F=l>>21)|0,b=H=(l=(2097151&l)<<11|Y>>>21)+H|0,u=l>>>0>H>>>0?u+1|0:u,l=H,C[A+12|0]=(4095&u)<<20|l>>>12,F=u,C[A+11|0]=(15&u)<<28|l>>>4,H=0,l=v=2097151&Y,C[A+7|0]=(16383&G)<<18|_>>>14|l<<7,u=2097151&R,G=eg(P,m,-683901,-1)+u|0,l=p,l=u>>>0>G>>>0?l+1|0:l,l=(u=F>>21)+l|0,_=G=(F=(2097151&F)<<11|b>>>21)+G|0,u=l=F>>>0>G>>>0?l+1|0:l,C[A+14|0]=(127&u)<<25|G>>>7,G=0,F=Y=2097151&b,C[A+10|0]=(131071&H)<<15|v>>>17|F<<4,l=u>>21,F=(u=(2097151&u)<<11|_>>>21)>>>0>(b=u+(2097151&N)|0)>>>0?l+1|0:l,C[A+17|0]=(1023&F)<<22|b>>>10,u=F,F=b,C[A+16|0]=(3&u)<<30|F>>>2,F=m=2097151&_,C[A+13|0]=(1048575&G)<<12|Y>>>20|F<<1,F=(2097151&u)<<11|b>>>21,u>>=21,u=F>>>0>(_=F+(2097151&M)|0)>>>0?u+1|0:u,l=_,C[A+20|0]=(8191&u)<<19|l>>>13,C[A+19|0]=(31&u)<<27|l>>>5,l=Y=2097151&b,C[A+15|0]=(32767&H)<<17|m>>>15|l<<6,k=(2097151&u)<<11|_>>>21,u=l=u>>21,k=u=k>>>0>(m=k+(2097151&d)|0)>>>0?u+1|0:u,C[A+21|0]=m,u=_,C[A+18|0]=(262143&G)<<14|Y>>>18|u<<3,u=k,C[A+22|0]=(255&u)<<24|m>>>8,F=u,u>>=21,F=(_=(H=(2097151&F)<<11|m>>>21)+(2097151&J)|0)>>>0>>0?u+1|0:u,C[(l=A)+25|0]=(2047&F)<<21|_>>>11,u=F,F=_,C[l+24|0]=(7&u)<<29|F>>>3,F=l,H=(2097151&u)<<11|_>>>21,u>>=21,l=u=H>>>0>(G=b=H+(2097151&U)|0)>>>0?u+1|0:u,C[F+27|0]=(63&u)<<26|G>>>6,H=0,u=b=2097151&_,C[F+23|0]=31&((65535&k)<<16|m>>>16)|u<<5,l=(u=l)>>21,l=(u=(2097151&u)<<11|G>>>21)>>>0>(k=u+(2097151&L)|0)>>>0?l+1|0:l,F=k,C[A+31|0]=(131071&l)<<15|F>>>17,u=l,C[A+30|0]=(511&u)<<23|F>>>9,C[A+29|0]=(1&u)<<31|F>>>1,l=0,G&=2097151,C[A+26|0]=(524287&H)<<13|b>>>19|G<<2,C[A+28|0]=(16383&l)<<18|G>>>14|F<<7}function k(A){var I,g=0,B=0,Q=0,C=0,E=0,r=0,o=0,t=0,f=0,c=0,y=0,s=0,w=0;h=I=h-16|0;A:{I:{g:{B:{Q:{C:{E:{i:{n:{a:{r:{o:{if((A|=0)>>>0<=244){if(3&(g=(E=i[8961])>>>(B=(t=A>>>0<11?16:A+11&-8)>>>3|0)|0)){A=(C=i[35892+(g=(Q=B+(1&(-1^g))|0)<<3)>>2])+8|0,(0|(B=i[C+8>>2]))!=(0|(g=g+35884|0))?(i[B+12>>2]=g,i[g+8>>2]=B):(s=35844,w=vI(-2,Q)&E,i[s>>2]=w),g=Q<<3,i[C+4>>2]=3|g,i[4+(g=g+C|0)>>2]=1|i[g+4>>2];break A}if((c=i[8963])>>>0>=t>>>0)break o;if(g){B=A=(g=(0-(A=(0-(A=2<>>12&16,B|=A=(g=g>>>A|0)>>>5&8,B|=A=(g=g>>>A|0)>>>2&4,r=i[35892+(A=(B=((B|=A=(g=g>>>A|0)>>>1&2)|(A=(g=g>>>A|0)>>>1&1))+(g>>>A|0)|0)<<3)>>2],(0|(g=i[r+8>>2]))!=(0|(A=A+35884|0))?(i[g+12>>2]=A,i[A+8>>2]=g):(E=vI(-2,B)&E,i[8961]=E),A=r+8|0,i[r+4>>2]=3|t,C=(g=B<<3)-t|0,i[4+(Q=r+t|0)>>2]=1|C,i[g+r>>2]=C,c&&(B=35884+((g=c>>>3|0)<<3)|0,r=i[8966],(g=1<>2]:(i[8961]=g|E,g=B),i[B+8>>2]=r,i[g+12>>2]=r,i[r+12>>2]=B,i[r+8>>2]=g),i[8966]=Q,i[8963]=C;break A}if(!(o=i[8962]))break o;for(B=A=(g=(o&0-o)-1|0)>>>12&16,B|=A=(g=g>>>A|0)>>>5&8,B|=A=(g=g>>>A|0)>>>2&4,g=i[36148+(((B|=A=(g=g>>>A|0)>>>1&2)|(A=(g=g>>>A|0)>>>1&1))+(g>>>A|0)<<2)>>2],C=(-8&i[g+4>>2])-t|0,B=g;(A=i[B+16>>2])||(A=i[B+20>>2]);)C=(Q=(B=(-8&i[A+4>>2])-t|0)>>>0>>0)?B:C,g=Q?A:g,B=A;if((f=g+t|0)>>>0<=g>>>0)break r;if(y=i[g+24>>2],(0|(Q=i[g+12>>2]))!=(0|g)){A=i[g+8>>2],i[A+12>>2]=Q,i[Q+8>>2]=A;break I}if(!(A=i[(B=g+20|0)>>2])){if(!(A=i[g+16>>2]))break a;B=g+16|0}for(;r=B,Q=A,(A=i[(B=A+20|0)>>2])||(B=Q+16|0,A=i[Q+16>>2]););i[r>>2]=0;break I}if(t=-1,!(A>>>0>4294967231)&&(t=-8&(A=A+11|0),f=i[8962])){E=31,C=0-t|0,t>>>0<=16777215&&(A=A>>>8|0,A<<=r=A+1048320>>>16&8,E=28+((A=((A<<=B=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|B|r)|0)<<1|t>>>A+21&1)|0);e:{t:{if(B=i[36148+(E<<2)>>2])for(A=0,g=t<<(31==(0|E)?0:25-(E>>>1|0)|0);;){if(!((r=(-8&i[B+4>>2])-t|0)>>>0>=C>>>0||(Q=B,C=r))){C=0,A=B;break t}if(r=i[B+20>>2],B=i[16+((g>>>29&4)+B|0)>>2],A=r?(0|r)==(0|B)?A:r:A,g<<=1,!B)break}else A=0;if(!(A|Q)){if(!(A=(0-(A=2<>>12&16,B|=A=(g=g>>>A|0)>>>5&8,B|=A=(g=g>>>A|0)>>>2&4,A=i[36148+(((B|=A=(g=g>>>A|0)>>>1&2)|(A=(g=g>>>A|0)>>>1&1))+(g>>>A|0)<<2)>>2]}if(!A)break e}for(;C=(B=(g=(-8&i[A+4>>2])-t|0)>>>0>>0)?g:C,Q=B?A:Q,A=(g=i[A+16>>2])||i[A+20>>2];);}if(!(!Q|i[8963]-t>>>0<=C>>>0)){if((o=Q+t|0)>>>0<=Q>>>0)break r;if(E=i[Q+24>>2],(0|Q)!=(0|(g=i[Q+12>>2]))){A=i[Q+8>>2],i[A+12>>2]=g,i[g+8>>2]=A;break g}if(!(A=i[(B=Q+20|0)>>2])){if(!(A=i[Q+16>>2]))break n;B=Q+16|0}for(;r=B,g=A,(A=i[(B=A+20|0)>>2])||(B=g+16|0,A=i[g+16>>2]););i[r>>2]=0;break g}}}if((B=i[8963])>>>0>=t>>>0){Q=i[8966],(g=B-t|0)>>>0>=16?(i[8963]=g,A=Q+t|0,i[8966]=A,i[A+4>>2]=1|g,i[B+Q>>2]=g,i[Q+4>>2]=3|t):(i[8966]=0,i[8963]=0,i[Q+4>>2]=3|B,i[4+(A=B+Q|0)>>2]=1|i[A+4>>2]),A=Q+8|0;break A}if((o=i[8964])>>>0>t>>>0){g=o-t|0,i[8964]=g,A=(B=i[8967])+t|0,i[8967]=A,i[A+4>>2]=1|g,i[B+4>>2]=3|t,A=B+8|0;break A}if(A=0,g=f=t+47|0,i[9079]?B=i[9081]:(i[9082]=-1,i[9083]=-1,i[9080]=4096,i[9081]=4096,i[9079]=I+12&-16^1431655768,i[9084]=0,i[9072]=0,B=4096),(B=(r=g+B|0)&(C=0-B|0))>>>0<=t>>>0)break A;if((Q=i[9071])&&Q>>>0<(E=(g=i[9069])+B|0)>>>0|g>>>0>=E>>>0)break A;if(4&n[36288])break C;o:{e:{if(Q=i[8967])for(A=36292;;){if(Q>>>0<(g=i[A>>2])+i[A+4>>2]>>>0&&g>>>0<=Q>>>0)break e;if(!(A=i[A+8>>2]))break}if(-1==(0|(g=II(0))))break E;if(E=B,(A=(Q=i[9080])-1|0)&g&&(E=(B-g|0)+(A+g&0-Q)|0),E>>>0<=t>>>0|E>>>0>2147483646)break E;if((Q=i[9071])&&Q>>>0<(C=(A=i[9069])+E|0)>>>0|A>>>0>=C>>>0)break E;if((0|g)!=(0|(A=II(E))))break o;break Q}if((E=C&r-o)>>>0>2147483646)break E;if((0|(g=II(E)))==(i[A>>2]+i[A+4>>2]|0))break i;A=g}if(!(-1==(0|A)|t+48>>>0<=E>>>0)){if((g=(g=i[9081])+(f-E|0)&0-g)>>>0>2147483646){g=A;break Q}if(-1!=(0|II(g))){E=g+E|0,g=A;break Q}II(0-E|0);break E}if(g=A,-1!=(0|A))break Q;break E}e()}Q=0;break I}g=0;break g}if(-1!=(0|g))break Q}i[9072]=4|i[9072]}if(B>>>0>2147483646)break B;if((g=II(B))>>>0>=(A=II(0))>>>0|-1==(0|g)|-1==(0|A))break B;if((E=A-g|0)>>>0<=t+40>>>0)break B}A=i[9069]+E|0,i[9069]=A,A>>>0>a[9070]&&(i[9070]=A);Q:{C:{E:{if(r=i[8967]){for(A=36292;;){if(((Q=i[A>>2])+(B=i[A+4>>2])|0)==(0|g))break E;if(!(A=i[A+8>>2]))break}break C}for((A=i[8965])>>>0<=g>>>0&&A||(i[8965]=g),A=0,i[9074]=E,i[9073]=g,i[8969]=-1,i[8970]=i[9079],i[9076]=0;B=35884+(Q=A<<3)|0,i[Q+35892>>2]=B,i[Q+35896>>2]=B,32!=(0|(A=A+1|0)););B=(Q=E-40|0)-(A=g+8&7?-8-g&7:0)|0,i[8964]=B,A=A+g|0,i[8967]=A,i[A+4>>2]=1|B,i[4+(g+Q|0)>>2]=40,i[8968]=i[9083];break Q}if(!(8&n[A+12|0]|g>>>0<=r>>>0|Q>>>0>r>>>0)){i[A+4>>2]=B+E,B=(A=r+8&7?-8-r&7:0)+r|0,i[8967]=B,A=(g=i[8964]+E|0)-A|0,i[8964]=A,i[B+4>>2]=1|A,i[4+(g+r|0)>>2]=40,i[8968]=i[9083];break Q}}(Q=i[8965])>>>0>g>>>0&&(i[8965]=g,Q=0),B=g+E|0,A=36292;C:{E:{i:{n:{a:{r:{for(;;){if((0|B)!=i[A>>2]){if(A=i[A+8>>2])continue;break r}break}if(!(8&n[A+12|0]))break a}for(A=36292;;){if((B=i[A>>2])>>>0<=r>>>0&&(C=B+i[A+4>>2]|0)>>>0>r>>>0)break n;A=i[A+8>>2]}}if(i[A>>2]=g,i[A+4>>2]=i[A+4>>2]+E,i[4+(f=(g+8&7?-8-g&7:0)+g|0)>>2]=3|t,B=((E=B+(B+8&7?-8-B&7:0)|0)-f|0)-t|0,o=t+f|0,(0|E)==(0|r)){i[8967]=o,A=i[8964]+B|0,i[8964]=A,i[o+4>>2]=1|A;break E}if(i[8966]==(0|E)){i[8966]=o,A=i[8963]+B|0,i[8963]=A,i[o+4>>2]=1|A,i[A+o>>2]=A;break E}if(1==(3&(A=i[E+4>>2]))){r=-8&A;a:if(A>>>0<=255){if(Q=i[E+8>>2],A=A>>>3|0,(0|(g=i[E+12>>2]))==(0|Q)){s=35844,w=i[8961]&vI(-2,A),i[s>>2]=w;break a}i[Q+12>>2]=g,i[g+8>>2]=Q}else{if(t=i[E+24>>2],(0|E)==(0|(g=i[E+12>>2])))if((C=i[(A=E+20|0)>>2])||(C=i[(A=E+16|0)>>2])){for(;Q=A,(C=i[(A=(g=C)+20|0)>>2])||(A=g+16|0,C=i[g+16>>2]););i[Q>>2]=0}else g=0;else A=i[E+8>>2],i[A+12>>2]=g,i[g+8>>2]=A;if(t){Q=i[E+28>>2];r:{if(i[(A=36148+(Q<<2)|0)>>2]==(0|E)){if(i[A>>2]=g,g)break r;s=35848,w=i[8962]&vI(-2,Q),i[s>>2]=w;break a}if(i[t+(i[t+16>>2]==(0|E)?16:20)>>2]=g,!g)break a}i[g+24>>2]=t,(A=i[E+16>>2])&&(i[g+16>>2]=A,i[A+24>>2]=g),(A=i[E+20>>2])&&(i[g+20>>2]=A,i[A+24>>2]=g)}}E=E+r|0,B=B+r|0}if(i[E+4>>2]=-2&i[E+4>>2],i[o+4>>2]=1|B,i[B+o>>2]=B,B>>>0<=255){g=35884+((A=B>>>3|0)<<3)|0,(B=i[8961])&(A=1<>2]:(i[8961]=A|B,A=g),i[g+8>>2]=o,i[A+12>>2]=o,i[o+12>>2]=g,i[o+8>>2]=A;break E}if(A=31,B>>>0<=16777215&&(A=B>>>8|0,A<<=C=A+1048320>>>16&8,A=28+((A=((A<<=Q=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|Q|C)|0)<<1|B>>>A+21&1)|0),i[o+28>>2]=A,i[o+16>>2]=0,i[o+20>>2]=0,C=36148+(A<<2)|0,(Q=i[8962])&(g=1<>>1|0)|0),g=i[C>>2];;){if(Q=g,(-8&i[g+4>>2])==(0|B))break i;if(g=A>>>29|0,A<<=1,!(g=i[16+(C=Q+(4&g)|0)>>2]))break}i[C+16>>2]=o,i[o+24>>2]=Q}else i[8962]=g|Q,i[C>>2]=o,i[o+24>>2]=C;i[o+12>>2]=o,i[o+8>>2]=o;break E}for(B=(Q=E-40|0)-(A=g+8&7?-8-g&7:0)|0,i[8964]=B,A=A+g|0,i[8967]=A,i[A+4>>2]=1|B,i[4+(g+Q|0)>>2]=40,i[8968]=i[9083],i[(B=(A=(C+(C-39&7?39-C&7:0)|0)-47|0)>>>0>>0?r:A)+4>>2]=27,A=i[9076],i[B+16>>2]=i[9075],i[B+20>>2]=A,A=i[9074],i[B+8>>2]=i[9073],i[B+12>>2]=A,i[9075]=B+8,i[9074]=E,i[9073]=g,i[9076]=0,A=B+24|0;i[A+4>>2]=7,g=A+8|0,A=A+4|0,g>>>0>>0;);if((0|B)==(0|r))break Q;if(i[B+4>>2]=-2&i[B+4>>2],C=B-r|0,i[r+4>>2]=1|C,i[B>>2]=C,C>>>0<=255){g=35884+((A=C>>>3|0)<<3)|0,(B=i[8961])&(A=1<>2]:(i[8961]=A|B,A=g),i[g+8>>2]=r,i[A+12>>2]=r,i[r+12>>2]=g,i[r+8>>2]=A;break Q}if(A=31,i[r+16>>2]=0,i[r+20>>2]=0,C>>>0<=16777215&&(A=C>>>8|0,A<<=Q=A+1048320>>>16&8,A=28+((A=((A<<=B=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|B|Q)|0)<<1|C>>>A+21&1)|0),i[r+28>>2]=A,Q=36148+(A<<2)|0,(B=i[8962])&(g=1<>>1|0)|0),g=i[Q>>2];;){if(B=g,(0|C)==(-8&i[g+4>>2]))break C;if(g=A>>>29|0,A<<=1,!(g=i[16+(Q=B+(4&g)|0)>>2]))break}i[Q+16>>2]=r,i[r+24>>2]=B}else i[8962]=g|B,i[Q>>2]=r,i[r+24>>2]=Q;i[r+12>>2]=r,i[r+8>>2]=r;break Q}A=i[Q+8>>2],i[A+12>>2]=o,i[Q+8>>2]=o,i[o+24>>2]=0,i[o+12>>2]=Q,i[o+8>>2]=A}A=f+8|0;break A}A=i[B+8>>2],i[A+12>>2]=r,i[B+8>>2]=r,i[r+24>>2]=0,i[r+12>>2]=B,i[r+8>>2]=A}if(!((A=i[8964])>>>0<=t>>>0)){g=A-t|0,i[8964]=g,A=(B=i[8967])+t|0,i[8967]=A,i[A+4>>2]=1|g,i[B+4>>2]=3|t,A=B+8|0;break A}}i[8960]=48,A=0;break A}g:if(E){B=i[Q+28>>2];B:{if(i[(A=36148+(B<<2)|0)>>2]==(0|Q)){if(i[A>>2]=g,g)break B;f=vI(-2,B)&f,i[8962]=f;break g}if(i[E+(i[E+16>>2]==(0|Q)?16:20)>>2]=g,!g)break g}i[g+24>>2]=E,(A=i[Q+16>>2])&&(i[g+16>>2]=A,i[A+24>>2]=g),(A=i[Q+20>>2])&&(i[g+20>>2]=A,i[A+24>>2]=g)}g:if(C>>>0<=15)A=C+t|0,i[Q+4>>2]=3|A,i[4+(A=A+Q|0)>>2]=1|i[A+4>>2];else if(i[Q+4>>2]=3|t,i[o+4>>2]=1|C,i[C+o>>2]=C,C>>>0<=255)g=35884+((A=C>>>3|0)<<3)|0,(B=i[8961])&(A=1<>2]:(i[8961]=A|B,A=g),i[g+8>>2]=o,i[A+12>>2]=o,i[o+12>>2]=g,i[o+8>>2]=A;else{A=31,C>>>0<=16777215&&(A=C>>>8|0,A<<=r=A+1048320>>>16&8,A=28+((A=((A<<=B=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|B|r)|0)<<1|C>>>A+21&1)|0),i[o+28>>2]=A,i[o+16>>2]=0,i[o+20>>2]=0,B=36148+(A<<2)|0;B:{if((g=1<>>1|0)|0),t=i[B>>2];;){if((-8&i[(g=t)+4>>2])==(0|C))break B;if(B=A>>>29|0,A<<=1,!(t=i[16+(B=g+(4&B)|0)>>2]))break}i[B+16>>2]=o,i[o+24>>2]=g}else i[8962]=g|f,i[B>>2]=o,i[o+24>>2]=B;i[o+12>>2]=o,i[o+8>>2]=o;break g}A=i[g+8>>2],i[A+12>>2]=o,i[g+8>>2]=o,i[o+24>>2]=0,i[o+12>>2]=g,i[o+8>>2]=A}A=Q+8|0;break A}I:if(y){B=i[g+28>>2];g:{if(i[(A=36148+(B<<2)|0)>>2]==(0|g)){if(i[A>>2]=Q,Q)break g;s=35848,w=vI(-2,B)&o,i[s>>2]=w;break I}if(i[(i[y+16>>2]==(0|g)?16:20)+y>>2]=Q,!Q)break I}i[Q+24>>2]=y,(A=i[g+16>>2])&&(i[Q+16>>2]=A,i[A+24>>2]=Q),(A=i[g+20>>2])&&(i[Q+20>>2]=A,i[A+24>>2]=Q)}C>>>0<=15?(A=C+t|0,i[g+4>>2]=3|A,i[4+(A=A+g|0)>>2]=1|i[A+4>>2]):(i[g+4>>2]=3|t,i[f+4>>2]=1|C,i[C+f>>2]=C,c&&(B=35884+((A=c>>>3|0)<<3)|0,Q=i[8966],(A=1<>2]:(i[8961]=A|E,A=B),i[B+8>>2]=Q,i[A+12>>2]=Q,i[Q+12>>2]=B,i[Q+8>>2]=A),i[8966]=f,i[8963]=C),A=g+8|0}return h=I+16|0,0|A}function _(A,I,g){var B,Q,C,E,n,a,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L,K,q,X,V,W,T,j,Z,O,z,$,AA,IA,gA,BA,QA,CA,EA=0,iA=0,nA=0,aA=0,rA=0,oA=0,eA=0,tA=0,fA=0,cA=0,yA=0,sA=0,wA=0,hA=0,DA=0,uA=0,pA=0,lA=0,FA=0,GA=0,kA=0,_A=0,HA=0,YA=0,bA=0;eA=A,B=EA=HA=i[g+4>>2],t=EA>>31,x=EA=(DA=i[I+20>>2])<<1,EA=eg(B,t,EA,H=EA>>31),nA=p,iA=EA,Q=EA=i[g>>2],C=EA>>31,f=EA=i[I+24>>2],rA=eg(Q,C,EA,E=EA>>31),EA=p+nA|0,EA=(iA=iA+rA|0)>>>0>>0?EA+1|0:EA,nA=iA,L=iA=oA=i[g+8>>2],u=iA>>31,c=iA=i[I+16>>2],iA=nA+(rA=eg(oA,u,iA,n=iA>>31))|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,K=EA=pA=i[g+12>>2],l=EA>>31,q=EA=(sA=i[I+12>>2])<<1,EA=(rA=eg(pA,l,EA,Y=EA>>31))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=EA,O=EA=uA=i[g+16>>2],k=EA>>31,y=EA=i[I+8>>2],rA=eg(uA,k,EA,a=EA>>31),EA=p+iA|0,EA=(nA=nA+rA|0)>>>0>>0?EA+1|0:EA,aA=nA,z=iA=cA=i[g+20>>2],b=iA>>31,X=iA=(fA=i[I+4>>2])<<1,nA=eg(cA,b,iA,m=iA>>31),EA=p+EA|0,EA=(iA=aA+nA|0)>>>0>>0?EA+1|0:EA,nA=iA,$=iA=yA=i[g+24>>2],V=iA>>31,s=iA=i[I>>2],rA=eg(yA,V,iA,o=iA>>31),iA=p+EA|0,iA=(nA=nA+rA|0)>>>0>>0?iA+1|0:iA,lA=i[g+28>>2],F=EA=r(lA,19),G=EA>>31,W=EA=(wA=i[I+36>>2])<<1,EA=(rA=eg(F,G,EA,v=EA>>31))+nA|0,nA=p+iA|0,nA=EA>>>0>>0?nA+1|0:nA,iA=EA,hA=i[g+32>>2],FA=EA=r(hA,19),GA=EA>>31,w=EA=i[I+32>>2],rA=eg(FA,GA,EA,e=EA>>31),EA=p+nA|0,EA=(iA=iA+rA|0)>>>0>>0?EA+1|0:EA,nA=iA,AA=i[g+36>>2],h=g=r(AA,19),D=g>>31,T=g=(I=i[I+28>>2])<<1,iA=eg(h,D,g,U=g>>31),EA=p+EA|0,tA=g=nA+iA|0,g=g>>>0>>0?EA+1|0:EA,EA=eg(c,n,B,t),iA=p,DA=eg(Q,C,rA=DA,S=rA>>31),nA=p+iA|0,nA=(EA=DA+EA|0)>>>0>>0?nA+1|0:nA,DA=sA,sA=eg(oA,u,sA,N=sA>>31),iA=p+nA|0,iA=(EA=sA+EA|0)>>>0>>0?iA+1|0:iA,nA=(sA=eg(y,a,pA,l))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,sA=fA,nA=eg(uA,k,fA,M=fA>>31),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(s,o,cA,b),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=iA,d=iA=r(yA,19),iA=nA+(wA=eg(iA,_=iA>>31,fA=wA,P=fA>>31))|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,EA=(wA=eg(w,e,F,G))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,wA=I,I=(nA=eg(FA,GA,I,R=I>>31))+EA|0,EA=p+iA|0,EA=I>>>0>>0?EA+1|0:EA,iA=eg(h,D,f,E),EA=p+EA|0,_A=I=iA+I|0,I=I>>>0>>0?EA+1|0:EA,EA=eg(B,t,q,Y),nA=p,iA=(yA=eg(Q,C,c,n))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,yA=eg(y,a,oA,u),nA=p+EA|0,nA=(iA=yA+iA|0)>>>0>>0?nA+1|0:nA,EA=(yA=eg(pA,l,X,m))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(yA=eg(s,o,uA,k))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,aA=nA,j=iA=r(cA,19),nA=eg(iA,J=iA>>31,W,v),EA=p+EA|0,EA=(iA=aA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(w,e,d,_),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,cA=eg(F,G,T,U),nA=p+EA|0,nA=(iA=cA+iA|0)>>>0>>0?nA+1|0:nA,EA=(cA=eg(FA,GA,f,E))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(cA=eg(h,D,x,H))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,cA=nA,gA=EA,yA=iA=nA+33554432|0,BA=EA=iA>>>0<33554432?EA+1|0:EA,nA=_A,_A=(67108863&EA)<<6|iA>>>26,EA=(EA>>26)+I|0,EA=(nA=nA+_A|0)>>>0<_A>>>0?EA+1|0:EA,QA=I=(_A=nA)+16777216|0,EA=g+(iA=(nA=I>>>0<16777216?EA+1|0:EA)>>25)|0,EA=(I=(nA=(33554431&nA)<<7|I>>>25)+tA|0)>>>0>>0?EA+1|0:EA,YA=I=(g=I)+33554432|0,I=EA=I>>>0<33554432?EA+1|0:EA,EA=-67108864&YA,i[eA+24>>2]=g-EA,tA=eA,g=eg(B,t,X,m),EA=p,iA=eg(Q,C,y,a),nA=p+EA|0,nA=(g=iA+g|0)>>>0>>0?nA+1|0:nA,iA=eg(s,o,oA,u),EA=p+nA|0,EA=(g=iA+g|0)>>>0>>0?EA+1|0:EA,nA=g,eA=g=r(pA,19),iA=eg(g,pA=g>>31,W,v),EA=p+EA|0,EA=(g=nA+iA|0)>>>0>>0?EA+1|0:EA,iA=g,IA=g=r(uA,19),g=iA+(nA=eg(w,e,g,Z=g>>31))|0,iA=p+EA|0,iA=g>>>0>>0?iA+1|0:iA,nA=eg(T,U,j,J),EA=p+iA|0,EA=(g=nA+g|0)>>>0>>0?EA+1|0:EA,iA=eg(f,E,d,_),nA=p+EA|0,nA=(g=iA+g|0)>>>0>>0?nA+1|0:nA,iA=eg(F,G,x,H),EA=p+nA|0,EA=(g=iA+g|0)>>>0>>0?EA+1|0:EA,iA=eg(FA,GA,c,n),EA=p+EA|0,EA=(g=iA+g|0)>>>0>>0?EA+1|0:EA,nA=eg(h,D,q,Y),iA=p+EA|0,aA=g=nA+g|0,g=g>>>0>>0?iA+1|0:iA,EA=eg(s,o,B,t),nA=p,iA=(uA=eg(Q,C,sA,M))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=iA,uA=iA=r(oA,19),iA=nA+(oA=eg(iA,kA=iA>>31,fA,P))|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,oA=eg(w,e,eA,pA),EA=p+nA|0,EA=(iA=oA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(IA,Z,wA,R),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=(oA=eg(f,E,j,J))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,oA=eg(d,_,rA,S),EA=p+iA|0,EA=(nA=oA+nA|0)>>>0>>0?EA+1|0:EA,iA=(oA=eg(c,n,F,G))+nA|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,oA=eg(FA,GA,DA,N),EA=p+nA|0,EA=(iA=oA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(h,D,y,a),EA=p+EA|0,bA=iA=nA+iA|0,oA=iA>>>0>>0?EA+1|0:EA,EA=eg(EA=r(B,19),EA>>31,W,v),iA=p,nA=eg(Q,C,s,o),iA=p+iA|0,iA=(EA=nA+EA|0)>>>0>>0?iA+1|0:iA,nA=(HA=eg(w,e,uA,kA))+EA|0,EA=p+iA|0,iA=(eA=eg(eA,pA,T,U))+nA|0,nA=p+(nA>>>0>>0?EA+1|0:EA)|0,nA=iA>>>0>>0?nA+1|0:nA,eA=eg(f,E,IA,Z),EA=p+nA|0,EA=(iA=eA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(x,H,j,J),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=(eA=eg(c,n,d,_))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,eA=eg(F,G,q,Y),EA=p+iA|0,EA=(nA=eA+nA|0)>>>0>>0?EA+1|0:EA,iA=(eA=eg(FA,GA,y,a))+nA|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,eA=eg(h,D,X,m),EA=p+nA|0,EA=(iA=eA+iA|0)>>>0>>0?EA+1|0:EA,eA=iA,HA=EA,pA=iA=iA+33554432|0,uA=EA=iA>>>0<33554432?EA+1|0:EA,kA=(67108863&EA)<<6|iA>>>26,iA=(nA=EA>>26)+oA|0,oA=EA=kA+bA|0,nA=aA,EA=EA>>>0>>0?iA+1|0:iA,CA=iA=oA+16777216|0,aA=(33554431&(EA=iA>>>0<16777216?EA+1|0:EA))<<7|iA>>>25,EA=(EA>>25)+g|0,EA=(iA=nA+aA|0)>>>0>>0?EA+1|0:EA,kA=g=iA+33554432|0,g=EA=g>>>0<33554432?EA+1|0:EA,EA=-67108864&kA,i[tA+8>>2]=iA-EA,aA=tA,EA=eg(f,E,B,t),nA=p,iA=(tA=eg(Q,C,wA,R))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=eg(L,u,rA,S),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(c,n,K,l),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,tA=eg(O,k,DA,N),nA=p+EA|0,nA=(iA=tA+iA|0)>>>0>>0?nA+1|0:nA,EA=(tA=eg(y,a,z,b))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(tA=eg(sA,M,$,V))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(s,o,tA=lA,bA=tA>>31),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(FA,GA,fA,P),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,lA=eg(h,D,w,e),nA=p+EA|0,nA=(iA=lA+iA|0)>>>0>>0?nA+1|0:nA,EA=I>>26,I=(lA=(67108863&I)<<6|YA>>>26)+iA|0,iA=EA+nA|0,EA=iA=I>>>0>>0?iA+1|0:iA,YA=I=(nA=I)+16777216|0,I=EA=I>>>0<16777216?EA+1|0:EA,EA=-33554432&YA,i[aA+28>>2]=nA-EA,lA=aA,EA=eg(y,a,B,t),iA=p,aA=eg(Q,C,DA,N),nA=p+iA|0,nA=(EA=aA+EA|0)>>>0>>0?nA+1|0:nA,aA=eg(L,u,sA,M),iA=p+nA|0,iA=(EA=aA+EA|0)>>>0>>0?iA+1|0:iA,nA=(aA=eg(s,o,K,l))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(IA,Z,fA,P),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(w,e,j,J),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,aA=eg(d,_,wA,R),nA=p+EA|0,nA=(iA=aA+iA|0)>>>0>>0?nA+1|0:nA,EA=(aA=eg(f,E,F,G))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(aA=eg(FA,GA,rA,S))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(h,D,c,n),EA=p+EA|0,aA=iA=iA+nA|0,EA=(EA=iA>>>0>>0?EA+1|0:EA)+(iA=g>>26)|0,EA=(g=aA+(nA=(67108863&g)<<6|kA>>>26)|0)>>>0>>0?EA+1|0:EA,FA=g=(iA=g)+16777216|0,g=nA=g>>>0<16777216?EA+1|0:EA,EA=-33554432&FA,i[lA+12>>2]=iA-EA,EA=eg(B,t,T,U),nA=p,iA=(aA=eg(Q,C,w,e))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=eg(f,E,L,u),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,aA=eg(K,l,x,H),nA=p+EA|0,nA=(iA=aA+iA|0)>>>0>>0?nA+1|0:nA,EA=(aA=eg(c,n,O,k))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(aA=eg(q,Y,z,b))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(y,a,$,V),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(tA,bA,X,m),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,hA=eg(s,o,aA=hA,GA=aA>>31),nA=p+EA|0,nA=(iA=hA+iA|0)>>>0>>0?nA+1|0:nA,EA=(hA=eg(h,D,W,v))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,hA=EA,EA=(EA=I>>25)+iA|0,EA=(I=hA+(nA=(33554431&I)<<7|YA>>>25)|0)>>>0>>0?EA+1|0:EA,hA=I=(iA=I)+33554432|0,I=EA=I>>>0<33554432?EA+1|0:EA,EA=-67108864&hA,i[lA+32>>2]=iA-EA,nA=iA=cA-(EA=-67108864&yA)|0,EA=(EA=gA-((EA>>>0>cA>>>0)+BA|0)|0)+(iA=g>>25)|0,EA=(g=nA+(cA=(33554431&g)<<7|FA>>>25)|0)>>>0>>0?EA+1|0:EA,(iA=g+33554432|0)>>>0<33554432&&(EA=EA+1|0),EA=(_A-(-33554432&QA)|0)+((67108863&EA)<<6|iA>>>26)|0,i[A+20>>2]=EA,EA=-67108864&iA,i[A+16>>2]=g-EA,EA=eg(w,e,B,t),nA=p,iA=(fA=eg(Q,C,fA,P))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=(fA=eg(L,u,wA,R))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,EA=(fA=eg(f,E,K,l))+nA|0,nA=p+iA|0,iA=(rA=eg(O,k,rA,S))+EA|0,EA=p+(EA>>>0>>0?nA+1|0:nA)|0,EA=iA>>>0>>0?EA+1|0:EA,nA=eg(c,n,z,b),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(DA,N,$,V),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=(rA=eg(y,a,tA,bA))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,EA=(rA=eg(aA,GA,sA,M))+nA|0,nA=p+iA|0,nA=EA>>>0>>0?nA+1|0:nA,iA=(rA=eg(s,o,AA,AA>>31))+EA|0,EA=p+nA|0,g=iA,EA=(EA=iA>>>0>>0?EA+1|0:EA)+(iA=I>>26)|0,EA=(I=g+(nA=(67108863&I)<<6|hA>>>26)|0)>>>0>>0?EA+1|0:EA,EA=(I=(g=I)+16777216|0)>>>0<16777216?EA+1|0:EA,I=-33554432&(iA=I),i[A+36>>2]=g-I,nA=oA-(-33554432&CA)|0,rA=eA-(I=-67108864&pA)|0,DA=HA-((I>>>0>eA>>>0)+uA|0)|0,EA=eg((33554431&(I=EA))<<7|iA>>>25,EA>>=25,19,0),iA=p+DA|0,EA=iA=(I=EA+rA|0)>>>0>>0?iA+1|0:iA,g=((67108863&(EA=(g=I+33554432|0)>>>0<33554432?EA+1|0:EA))<<6|(iA=g)>>>26)+nA|0,i[A+4>>2]=g,g=A,A=-67108864&iA,i[g>>2]=I-A}function H(A,I){var g,B,Q,C,E,n,a,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0;W=A,t=K=(L=i[I+12>>2])<<1,j=L,L=eg(K,E=K>>31,L,H=L>>31),X=p,K=L,g=L=i[I+16>>2],n=L>>31,D=L=(O=i[I+8>>2])<<1,V=eg(g,n,L,y=L>>31),L=p+X|0,L=(K=K+V|0)>>>0>>0?L+1|0:L,X=K,s=K=(V=i[I+20>>2])<<1,w=K>>31,a=K=(z=i[I+4>>2])<<1,q=eg(s,w,K,B=K>>31),K=p+L|0,K=(X=X+q|0)>>>0>>0?K+1|0:K,F=L=T=i[I+24>>2],f=L>>31,o=L=(BA=i[I>>2])<<1,q=eg(T,f,L,Q=L>>31),L=p+K|0,L=(X=q+X|0)>>>0>>0?L+1|0:L,Z=X,K=i[I+32>>2],h=X=r(K,19),Y=K,X=eg(X,c=X>>31,K,G=K>>31),L=p+L|0,L=(K=Z+X|0)>>>0>>0?L+1|0:L,Z=K,AA=i[I+36>>2],e=K=r(AA,38),C=K>>31,S=I=(X=i[I+28>>2])<<1,q=eg(K,C,I,b=I>>31),I=p+L|0,IA=K=Z+q|0,$=K>>>0>>0?I+1|0:I,I=eg(a,B,g,n),L=p,K=eg(D,y,j,H),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,N=V,q=eg(V,k=V>>31,o,Q),K=p+L|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(h,c,S,b),L=p+K|0,L=(I=q+I|0)>>>0>>0?L+1|0:L,K=eg(e,C,T,f),L=p+L|0,Z=I=K+I|0,QA=I>>>0>>0?L+1|0:L,I=eg(a,B,t,E),K=p,L=(O=eg(q=O,u=q>>31,q,u))+I|0,I=p+K|0,I=L>>>0>>0?I+1|0:I,K=(O=eg(o,Q,g,n))+L|0,L=p+I|0,L=K>>>0>>0?L+1|0:L,_=I=r(X,38),O=X,I=(X=eg(I,l=I>>31,X,m=X>>31))+K|0,K=p+L|0,K=I>>>0>>0?K+1|0:K,I=(L=I)+(X=eg(h,c,I=T<<1,I>>31))|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,K=eg(e,C,s,w),L=p+L|0,v=I=K+I|0,P=L=I>>>0>>0?L+1|0:L,I=L,M=L=v+33554432|0,R=I=L>>>0<33554432?I+1|0:I,L=(L=I>>26)+QA|0,QA=I=(K=(67108863&I)<<6|M>>>26)+Z|0,K=I>>>0>>0?L+1|0:L,J=I=I+16777216|0,L=(L=(K=I>>>0<16777216?K+1|0:K)>>25)+$|0,L=(I=(K=(33554431&K)<<7|I>>>25)+IA|0)>>>0>>0?L+1|0:L,K=I,I=L,Z=L=K+33554432|0,X=I=L>>>0<33554432?I+1|0:I,I=-67108864&L,i[W+24>>2]=K-I,I=eg(o,Q,q,u),L=p,z=eg(a,B,W=z,gA=W>>31),K=p+L|0,K=(I=z+I|0)>>>0>>0?K+1|0:K,L=I,z=I=r(T,19),I=L+(T=eg(I,IA=I>>31,T,f))|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,K=(T=eg(s,w,_,l))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,d=L=g<<1,T=eg(h,c,L,U=L>>31),L=p+I|0,L=(K=T+K|0)>>>0>>0?L+1|0:L,I=K,K=eg(e,C,t,E),L=p+L|0,$=I=I+K|0,T=I>>>0>>0?L+1|0:L,I=eg(s,w,z,IA),L=p,W=eg(o,Q,W,gA),K=p+L|0,K=(I=W+I|0)>>>0>>0?K+1|0:K,W=eg(g,n,_,l),L=p+K|0,L=(I=W+I|0)>>>0>>0?L+1|0:L,K=(W=eg(h,c,t,E))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,W=eg(e,C,q,u),L=p+I|0,gA=K=W+K|0,W=K>>>0>>0?L+1|0:L,I=eg(I=r(V,38),I>>31,V,k),L=p,V=I,K=eg(I=BA,K=I>>31,I,K),L=p+L|0,L=(I=V+K|0)>>>0>>0?L+1|0:L,V=eg(z,IA,d,U),K=p+L|0,K=(I=V+I|0)>>>0>>0?K+1|0:K,V=eg(t,E,_,l),L=p+K|0,L=(I=V+I|0)>>>0>>0?L+1|0:L,K=(V=eg(h,c,D,y))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,V=eg(a,B,e,C),L=p+I|0,z=K=V+K|0,IA=L=K>>>0>>0?L+1|0:L,BA=I=K+33554432|0,x=L=I>>>0<33554432?L+1|0:L,K=(I=L>>26)+W|0,W=L=(V=(67108863&L)<<6|BA>>>26)+gA|0,L=L>>>0>>0?K+1|0:K,gA=I=W+16777216|0,V=(33554431&(L=I>>>0<16777216?L+1|0:L))<<7|I>>>25,L=(L>>25)+T|0,L=(K=V+$|0)>>>0>>0?L+1|0:L,T=K=(I=K)+33554432|0,V=L=K>>>0<33554432?L+1|0:L,L=-67108864&K,i[A+8>>2]=I-L,I=eg(D,y,N,k),L=p,K=eg(g,n,t,E),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=eg(a,B,F,f),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=eg(o,Q,O,m),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=($=eg(e,C,Y,G))+I|0,I=p+L|0,L=X>>26,X=(Z=(67108863&X)<<6|Z>>>26)+K|0,K=(I=K>>>0<$>>>0?I+1|0:I)+L|0,L=K=X>>>0>>0?K+1|0:K,Z=K=(I=X)+16777216|0,X=L=K>>>0<16777216?L+1|0:L,L=-33554432&K,i[A+28>>2]=I-L,I=eg(o,Q,j,H),K=p,L=(q=eg(a,B,q,u))+I|0,I=p+K|0,I=L>>>0>>0?I+1|0:I,q=eg(F,f,_,l),K=p+I|0,K=(L=q+L|0)>>>0>>0?K+1|0:K,I=(q=eg(h,c,s,w))+L|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,K=eg(e,C,g,n),L=p+L|0,L=(L=(I=K+I|0)>>>0>>0?L+1|0:L)+(K=V>>26)|0,K=I=(V=(67108863&V)<<6|T>>>26)+I|0,I=L=I>>>0>>0?L+1|0:L,T=L=K+16777216|0,V=I=L>>>0<16777216?I+1|0:I,I=-33554432&L,i[A+12>>2]=K-I,q=A,I=eg(F,f,D,y),L=p,K=eg(g,n,g,n),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=eg(t,E,s,w),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=(j=eg(a,B,S,b))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,L=(j=eg(o,Q,Y,G))+K|0,K=p+I|0,K=L>>>0>>0?K+1|0:K,I=(AA=eg(e,C,j=AA,$=j>>31))+L|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,A=I,L=(I=X>>25)+L|0,L=(K=A+(X=(33554431&X)<<7|Z>>>25)|0)>>>0>>0?L+1|0:L,AA=K=(I=K)+33554432|0,X=L=K>>>0<33554432?L+1|0:L,L=-67108864&K,i[q+32>>2]=I-L,L=V>>25,K=(V=(33554431&V)<<7|T>>>25)+(v-(I=-67108864&M)|0)|0,I=L+(P-((I>>>0>v>>>0)+R|0)|0)|0,L=I=K>>>0>>0?I+1|0:I,V=I=K+33554432|0,I=((67108863&(L=I>>>0<33554432?L+1|0:L))<<6|I>>>26)+(QA=QA-(-33554432&J)|0)|0,i[q+20>>2]=I,I=-67108864&V,i[q+16>>2]=K-I,V=q,I=eg(t,E,F,f),K=p,L=(q=eg(N,k,d,U))+I|0,I=p+K|0,I=L>>>0>>0?I+1|0:I,K=(q=eg(D,y,O,m))+L|0,L=p+I|0,L=K>>>0>>0?L+1|0:L,I=(q=eg(a,B,Y,G))+K|0,K=p+L|0,K=I>>>0>>0?K+1|0:K,q=eg(o,Q,j,$),L=p+K|0,K=I=q+I|0,L=(I=I>>>0>>0?L+1|0:L)+(L=X>>26)|0,L=(K=(X=(67108863&X)<<6|AA>>>26)+K|0)>>>0>>0?L+1|0:L,X=K,I=L,I=(L=K+16777216|0)>>>0<16777216?I+1|0:I,K=-33554432&L,i[V+36>>2]=X-K,q=eg((33554431&I)<<7|L>>>25,I>>25,19,0),L=p+(IA-(((K=-67108864&BA)>>>0>z>>>0)+x|0)|0)|0,K=I=q+(z-K|0)|0,I=I>>>0>>0?L+1|0:L,I=(W-(-33554432&gA)|0)+((67108863&(I=(L=K+33554432|0)>>>0<33554432?I+1|0:I))<<6|L>>>26)|0,i[V+4>>2]=I,A=-67108864&L,i[V>>2]=K-A}function Y(A,I,g){var B,Q=0,C=0,E=0,n=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0;for(h=B=h-2048|0,Yg(B+1024|0,I),QI(B+1024|0,A),Yg(B,B+1024|0),QI(B,g),I=0;n=i[(Q=f=(B+1024|0)+(64|(A=F<<7))|0)>>2],e=i[(E=t=(B+1024|0)+(96|A)|0)>>2],E=i[E+4>>2],a=n,w=i[Q+4>>2],o=e,Q=A+(B+1024|0)|0,r=i[(n=(B+1024|0)+(32|A)|0)>>2],e=i[n+4>>2],o=ug(o^(l=rI(i[Q>>2],i[Q+4>>2],r,e)),(C=E)^(E=p),32),e=ug(a=(s=rI(a,w,o,C=p))^r,e^(r=p),24),P=ug((m=rI(l,a=E,e,E=p))^o,(y=p)^C,16),E=ug(e^(R=rI(s,r,P,S=p)),(N=p)^E,63),e=p,o=i[(r=(B+1024|0)+(104|A)|0)>>2],s=i[r+4>>2],H=i[(C=l=(B+1024|0)+(72|A)|0)>>2],c=i[C+4>>2],G=ug((G=o)^(k=rI(u=i[(C=o=(B+1024|0)+(8|A)|0)>>2],w=i[C+4>>2],U=i[(C=(B+1024|0)+(40|A)|0)>>2],a=i[C+4>>2])),(w=s)^(s=p),32),a=ug(c=(u=rI(H,c,G,w=p))^U,a^(U=p),24),V=ug((M=rI(k,c=s,a,s=p))^G,(J=p)^w,16),s=ug(a^(O=rI(u,U,V,j=p)),(z=p)^s,63),a=p,G=i[(k=U=(B+1024|0)+(112|A)|0)>>2],u=i[k+4>>2],v=i[(k=(B+1024|0)+(80|A)|0)>>2],D=i[k+4>>2],H=G,G=(B+1024|0)+(16|A)|0,Y=i[(b=w=(B+1024|0)+(48|A)|0)>>2],b=i[b+4>>2],H=ug(H^(d=rI(i[G>>2],i[G+4>>2],Y,b)),(c=u)^(u=p),32),b=ug(D=(c=rI(v,D,H,_=p))^Y,b^(Y=p),24),IA=ug(($=rI(d,D=u,b,u=p))^H,(AA=p)^_,16),u=ug(b^(W=rI(c,Y,IA,gA=p)),(q=p)^u,63),b=p,H=i[(Y=(B+1024|0)+(120|A)|0)>>2],_=i[Y+4>>2],BA=i[(c=d=(B+1024|0)+(88|A)|0)>>2],X=i[c+4>>2],L=ug((v=H)^(T=rI(Z=i[(c=H=(B+1024|0)+(24|A)|0)>>2],D=i[c+4>>2],x=i[(A=(B+1024|0)+(56|A)|0)>>2],c=i[A+4>>2])),(D=_)^(_=p),32),c=ug(D=(X=rI(BA,X,L,K=p))^x,c^(x=p),24),v=x,L=ug((x=rI(T,D=_,c,_=p))^L,(T=p)^K,16),_=ug(c^(X=rI(X,v,L,K=p)),(Z=p)^_,63),c=p,v=W,D=q,W=ug(L^(m=rI(m,y,s,a)),K^(y=p),32),s=ug((L=rI(v,D,W,q=p))^s,(K=p)^a,24),a=rI(a=m,y,s,m=p),y=p,i[Q>>2]=a,i[Q+4>>2]=y,Q=ug(a^W,q^y,16),a=p,i[Y>>2]=Q,i[Y+4>>2]=a,Q=rI(L,K,Q,a),a=p,i[k>>2]=Q,i[k+4>>2]=a,QA=C,CA=ug(Q^s,a^m,63),i[QA>>2]=CA,i[C+4>>2]=p,y=u,a=ug(P^(C=rI(M,J,u,b)),S^(s=p),32),Q=ug(y^(u=rI(X,Z,a,k=p)),(Q=b)^(b=p),24),C=rI(C,y=s,Q,s=p),Y=p,i[o>>2]=C,i[o+4>>2]=Y,o=ug(C^a,k^Y,16),C=p,i[t>>2]=o,i[t+4>>2]=C,t=rI(u,b,o,C),i[d>>2]=t,o=p,i[d+4>>2]=o,QA=w,CA=ug(Q^t,o^s,63),i[QA>>2]=CA,i[w+4>>2]=p,Q=rI($,AA,_,c),a=rI(R,N,C=ug(V^Q,j^(o=p),32),s=p),Q=rI(Q,w=o,t=ug(a^_,(k=p)^c,24),o=p),u=w=p,i[G>>2]=Q,i[G+4>>2]=u,Q=ug(Q^C,s^u,16),C=p,i[r>>2]=Q,i[r+4>>2]=C,Q=rI(a,k,Q,C),i[f>>2]=Q,C=f,f=p,i[C+4>>2]=f,QA=A,CA=ug(Q^t,f^o,63),i[QA>>2]=CA,i[A+4>>2]=p,C=E,Q=ug(IA^(f=rI(x,T,E,e)),gA^(t=p),32),A=ug(C^(r=rI(O,z,Q,E=p)),(A=e)^(e=p),24),f=rI(f,C=t,A,t=p),C=o=p,i[H>>2]=f,i[H+4>>2]=C,f=ug(Q^f,E^C,16),Q=p,i[U>>2]=f,i[U+4>>2]=Q,f=rI(r,e,f,Q),i[l>>2]=f,Q=p,i[l+4>>2]=Q,QA=n,CA=ug(A^f,Q^t,63),i[QA>>2]=CA,i[n+4>>2]=p,8!=(0|(F=F+1|0)););for(;F=i[768+(A=(t=I<<4)+(B+1024|0)|0)>>2],f=i[A+772>>2],a=i[(Q=A+512|0)>>2],o=i[Q+4>>2],C=F,F=i[A+256>>2],Q=i[A+260>>2],E=ug(C^(n=rI(i[A>>2],i[A+4>>2],F,Q)),(E=f)^(f=p),32),Q=ug(C=(r=rI(a,o,E,e=p))^F,Q^(F=p),24),w=F,s=ug((o=rI(n,f,Q,F=p))^E,(C=p)^e,16),F=ug(Q^(U=rI(r,w,s,a=p)),(k=p)^F,63),f=p,Q=i[A+780>>2],u=i[A+520>>2],y=i[A+524>>2],r=ug((G=i[A+776>>2])^(e=rI(w=i[(n=t=(B+1024|0)+(8|t)|0)>>2],e=i[n+4>>2],n=i[A+264>>2],E=i[A+268>>2])),(w=Q)^(Q=p),32),E=ug(w=(G=rI(u,y,r,l=p))^n,E^(n=p),24),y=G,u=ug((G=rI(e,w=Q,E,Q=p))^r,(w=p)^l,16),Q=ug(E^(Y=rI(y,n,u,b=p)),(d=p)^Q,63),n=p,E=i[A+900>>2],D=i[A+640>>2],m=i[A+644>>2],c=i[A+896>>2],e=i[A+384>>2],r=i[A+388>>2],H=ug(c^(l=rI(i[A+128>>2],i[A+132>>2],e,r)),(y=E)^(E=p),32),r=ug(y=(c=rI(D,m,H,_=p))^e,r^(e=p),24),D=c,c=ug((c=H)^(H=rI(l,y=E,r,E=p)),(y=_)^(_=p),16),E=ug(r^(y=rI(D,e,c,m=p)),(P=p)^E,63),e=p,r=i[A+908>>2],q=i[A+648>>2],j=i[A+652>>2],v=i[A+904>>2],l=i[A+392>>2],S=i[A+396>>2],N=ug(v^(R=rI(i[A+136>>2],i[A+140>>2],l,S)),(D=r)^(r=p),32),v=S=ug(D=(J=rI(q,j,N,M=p))^l,S^(l=p),24),N=ug((S=rI(R,D=r,S,r=p))^N,(R=p)^M,16),r=ug(v^(J=rI(J,l,N,M=p)),(V=p)^r,63),l=p,v=y,D=P,y=ug(N^(o=rI(o,C,Q,n)),M^(C=p),32),Q=ug((N=rI(v,D,y,P=p))^Q,(M=p)^n,24),n=rI(n=o,C,Q,o=p),C=p,i[A>>2]=n,i[A+4>>2]=C,n=ug(n^y,P^C,16),C=p,i[A+904>>2]=n,i[A+908>>2]=C,n=rI(N,M,n,C),C=p,i[A+640>>2]=n,i[A+644>>2]=C,QA=A,CA=ug(Q^n,o^C,63),i[QA+264>>2]=CA,i[A+268>>2]=p,y=E,n=rI(G,w,E,e),s=rI(J,V,o=ug(s^n,a^(E=p),32),C=p),n=rI(n,a=E,Q=ug(y^s,(Q=e)^(e=p),24),E=p),a=p,i[t>>2]=n,i[t+4>>2]=a,t=ug(n^o,C^a,16),n=p,i[A+768>>2]=t,i[A+772>>2]=n,t=rI(s,e,t,n),i[A+648>>2]=t,n=p,i[A+652>>2]=n,QA=A,CA=ug(Q^t,n^E,63),i[QA+384>>2]=CA,i[A+388>>2]=p,o=r,E=ug(u^(Q=rI(H,_,r,l)),b^(n=p),32),t=ug(o^(r=rI(U,k,E,e=p)),(C=l)^(l=p),24),Q=rI(Q,C=n,t,n=p),C=o=p,i[A+128>>2]=Q,i[A+132>>2]=C,Q=ug(Q^E,C^e,16),E=p,i[A+776>>2]=Q,i[A+780>>2]=E,Q=rI(r,l,Q,E),i[A+512>>2]=Q,E=p,i[A+516>>2]=E,QA=A,CA=ug(Q^t,n^E,63),i[QA+392>>2]=CA,i[A+396>>2]=p,t=rI(S,R,F,f),e=rI(Y,d,n=ug(c^t,m^(Q=p),32),E=p),f=rI(C=t,Q,F=ug(e^F,(r=p)^f,24),t=p),Q=p,i[A+136>>2]=f,i[A+140>>2]=Q,f=ug(n^f,E^Q,16),Q=p,i[A+896>>2]=f,i[A+900>>2]=Q,f=rI(e,r,f,Q),i[A+520>>2]=f,Q=p,i[A+524>>2]=Q,QA=A,CA=ug(f^F,Q^t,63),i[QA+256>>2]=CA,i[A+260>>2]=p,8!=(0|(I=I+1|0)););Yg(g,B),QI(g,B+1024|0),h=B+2048|0}function b(A,I,g){var B,Q=0,C=0,E=0,n=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0;for(h=B=h-2048|0,Yg(B+1024|0,I),QI(B+1024|0,A),Yg(B,B+1024|0),I=0;n=i[(Q=f=(B+1024|0)+(64|(A=F<<7))|0)>>2],e=i[(E=t=(B+1024|0)+(96|A)|0)>>2],E=i[E+4>>2],a=n,w=i[Q+4>>2],o=e,Q=A+(B+1024|0)|0,r=i[(n=(B+1024|0)+(32|A)|0)>>2],e=i[n+4>>2],o=ug(o^(l=rI(i[Q>>2],i[Q+4>>2],r,e)),(C=E)^(E=p),32),e=ug(a=(s=rI(a,w,o,C=p))^r,e^(r=p),24),P=ug((m=rI(l,a=E,e,E=p))^o,(y=p)^C,16),E=ug(e^(R=rI(s,r,P,S=p)),(N=p)^E,63),e=p,o=i[(r=(B+1024|0)+(104|A)|0)>>2],s=i[r+4>>2],H=i[(C=l=(B+1024|0)+(72|A)|0)>>2],c=i[C+4>>2],G=ug((G=o)^(k=rI(u=i[(C=o=(B+1024|0)+(8|A)|0)>>2],w=i[C+4>>2],U=i[(C=(B+1024|0)+(40|A)|0)>>2],a=i[C+4>>2])),(w=s)^(s=p),32),a=ug(c=(u=rI(H,c,G,w=p))^U,a^(U=p),24),V=ug((M=rI(k,c=s,a,s=p))^G,(J=p)^w,16),s=ug(a^(O=rI(u,U,V,j=p)),(z=p)^s,63),a=p,G=i[(k=U=(B+1024|0)+(112|A)|0)>>2],u=i[k+4>>2],v=i[(k=(B+1024|0)+(80|A)|0)>>2],D=i[k+4>>2],H=G,G=(B+1024|0)+(16|A)|0,Y=i[(b=w=(B+1024|0)+(48|A)|0)>>2],b=i[b+4>>2],H=ug(H^(d=rI(i[G>>2],i[G+4>>2],Y,b)),(c=u)^(u=p),32),b=ug(D=(c=rI(v,D,H,_=p))^Y,b^(Y=p),24),IA=ug(($=rI(d,D=u,b,u=p))^H,(AA=p)^_,16),u=ug(b^(W=rI(c,Y,IA,gA=p)),(q=p)^u,63),b=p,H=i[(Y=(B+1024|0)+(120|A)|0)>>2],_=i[Y+4>>2],BA=i[(c=d=(B+1024|0)+(88|A)|0)>>2],X=i[c+4>>2],L=ug((v=H)^(T=rI(Z=i[(c=H=(B+1024|0)+(24|A)|0)>>2],D=i[c+4>>2],x=i[(A=(B+1024|0)+(56|A)|0)>>2],c=i[A+4>>2])),(D=_)^(_=p),32),c=ug(D=(X=rI(BA,X,L,K=p))^x,c^(x=p),24),v=x,L=ug((x=rI(T,D=_,c,_=p))^L,(T=p)^K,16),_=ug(c^(X=rI(X,v,L,K=p)),(Z=p)^_,63),c=p,v=W,D=q,W=ug(L^(m=rI(m,y,s,a)),K^(y=p),32),s=ug((L=rI(v,D,W,q=p))^s,(K=p)^a,24),a=rI(a=m,y,s,m=p),y=p,i[Q>>2]=a,i[Q+4>>2]=y,Q=ug(a^W,q^y,16),a=p,i[Y>>2]=Q,i[Y+4>>2]=a,Q=rI(L,K,Q,a),a=p,i[k>>2]=Q,i[k+4>>2]=a,QA=C,CA=ug(Q^s,a^m,63),i[QA>>2]=CA,i[C+4>>2]=p,y=u,a=ug(P^(C=rI(M,J,u,b)),S^(s=p),32),Q=ug(y^(u=rI(X,Z,a,k=p)),(Q=b)^(b=p),24),C=rI(C,y=s,Q,s=p),Y=p,i[o>>2]=C,i[o+4>>2]=Y,o=ug(C^a,k^Y,16),C=p,i[t>>2]=o,i[t+4>>2]=C,t=rI(u,b,o,C),i[d>>2]=t,o=p,i[d+4>>2]=o,QA=w,CA=ug(Q^t,o^s,63),i[QA>>2]=CA,i[w+4>>2]=p,Q=rI($,AA,_,c),a=rI(R,N,C=ug(V^Q,j^(o=p),32),s=p),Q=rI(Q,w=o,t=ug(a^_,(k=p)^c,24),o=p),u=w=p,i[G>>2]=Q,i[G+4>>2]=u,Q=ug(Q^C,s^u,16),C=p,i[r>>2]=Q,i[r+4>>2]=C,Q=rI(a,k,Q,C),i[f>>2]=Q,C=f,f=p,i[C+4>>2]=f,QA=A,CA=ug(Q^t,f^o,63),i[QA>>2]=CA,i[A+4>>2]=p,C=E,Q=ug(IA^(f=rI(x,T,E,e)),gA^(t=p),32),A=ug(C^(r=rI(O,z,Q,E=p)),(A=e)^(e=p),24),f=rI(f,C=t,A,t=p),C=o=p,i[H>>2]=f,i[H+4>>2]=C,f=ug(Q^f,E^C,16),Q=p,i[U>>2]=f,i[U+4>>2]=Q,f=rI(r,e,f,Q),i[l>>2]=f,Q=p,i[l+4>>2]=Q,QA=n,CA=ug(A^f,Q^t,63),i[QA>>2]=CA,i[n+4>>2]=p,8!=(0|(F=F+1|0)););for(;F=i[768+(A=(t=I<<4)+(B+1024|0)|0)>>2],f=i[A+772>>2],a=i[(Q=A+512|0)>>2],o=i[Q+4>>2],C=F,F=i[A+256>>2],Q=i[A+260>>2],E=ug(C^(n=rI(i[A>>2],i[A+4>>2],F,Q)),(E=f)^(f=p),32),Q=ug(C=(r=rI(a,o,E,e=p))^F,Q^(F=p),24),w=F,s=ug((o=rI(n,f,Q,F=p))^E,(C=p)^e,16),F=ug(Q^(U=rI(r,w,s,a=p)),(k=p)^F,63),f=p,Q=i[A+780>>2],u=i[A+520>>2],y=i[A+524>>2],r=ug((G=i[A+776>>2])^(e=rI(w=i[(n=t=(B+1024|0)+(8|t)|0)>>2],e=i[n+4>>2],n=i[A+264>>2],E=i[A+268>>2])),(w=Q)^(Q=p),32),E=ug(w=(G=rI(u,y,r,l=p))^n,E^(n=p),24),y=G,u=ug((G=rI(e,w=Q,E,Q=p))^r,(w=p)^l,16),Q=ug(E^(Y=rI(y,n,u,b=p)),(d=p)^Q,63),n=p,E=i[A+900>>2],D=i[A+640>>2],m=i[A+644>>2],c=i[A+896>>2],e=i[A+384>>2],r=i[A+388>>2],H=ug(c^(l=rI(i[A+128>>2],i[A+132>>2],e,r)),(y=E)^(E=p),32),r=ug(y=(c=rI(D,m,H,_=p))^e,r^(e=p),24),D=c,c=ug((c=H)^(H=rI(l,y=E,r,E=p)),(y=_)^(_=p),16),E=ug(r^(y=rI(D,e,c,m=p)),(P=p)^E,63),e=p,r=i[A+908>>2],q=i[A+648>>2],j=i[A+652>>2],v=i[A+904>>2],l=i[A+392>>2],S=i[A+396>>2],N=ug(v^(R=rI(i[A+136>>2],i[A+140>>2],l,S)),(D=r)^(r=p),32),v=S=ug(D=(J=rI(q,j,N,M=p))^l,S^(l=p),24),N=ug((S=rI(R,D=r,S,r=p))^N,(R=p)^M,16),r=ug(v^(J=rI(J,l,N,M=p)),(V=p)^r,63),l=p,v=y,D=P,y=ug(N^(o=rI(o,C,Q,n)),M^(C=p),32),Q=ug((N=rI(v,D,y,P=p))^Q,(M=p)^n,24),n=rI(n=o,C,Q,o=p),C=p,i[A>>2]=n,i[A+4>>2]=C,n=ug(n^y,P^C,16),C=p,i[A+904>>2]=n,i[A+908>>2]=C,n=rI(N,M,n,C),C=p,i[A+640>>2]=n,i[A+644>>2]=C,QA=A,CA=ug(Q^n,o^C,63),i[QA+264>>2]=CA,i[A+268>>2]=p,y=E,n=rI(G,w,E,e),s=rI(J,V,o=ug(s^n,a^(E=p),32),C=p),n=rI(n,a=E,Q=ug(y^s,(Q=e)^(e=p),24),E=p),a=p,i[t>>2]=n,i[t+4>>2]=a,t=ug(n^o,C^a,16),n=p,i[A+768>>2]=t,i[A+772>>2]=n,t=rI(s,e,t,n),i[A+648>>2]=t,n=p,i[A+652>>2]=n,QA=A,CA=ug(Q^t,n^E,63),i[QA+384>>2]=CA,i[A+388>>2]=p,o=r,E=ug(u^(Q=rI(H,_,r,l)),b^(n=p),32),t=ug(o^(r=rI(U,k,E,e=p)),(C=l)^(l=p),24),Q=rI(Q,C=n,t,n=p),C=o=p,i[A+128>>2]=Q,i[A+132>>2]=C,Q=ug(Q^E,C^e,16),E=p,i[A+776>>2]=Q,i[A+780>>2]=E,Q=rI(r,l,Q,E),i[A+512>>2]=Q,E=p,i[A+516>>2]=E,QA=A,CA=ug(Q^t,n^E,63),i[QA+392>>2]=CA,i[A+396>>2]=p,t=rI(S,R,F,f),e=rI(Y,d,n=ug(c^t,m^(Q=p),32),E=p),f=rI(C=t,Q,F=ug(e^F,(r=p)^f,24),t=p),Q=p,i[A+136>>2]=f,i[A+140>>2]=Q,f=ug(n^f,E^Q,16),Q=p,i[A+896>>2]=f,i[A+900>>2]=Q,f=rI(e,r,f,Q),i[A+520>>2]=f,Q=p,i[A+524>>2]=Q,QA=A,CA=ug(f^F,Q^t,63),i[QA+256>>2]=CA,i[A+260>>2]=p,8!=(0|(I=I+1|0)););Yg(g,B),QI(g,B+1024|0),h=B+2048|0}function m(A){var I=0,g=0,B=0,Q=0,C=0,E=0,n=0,r=0,o=0;A:if(A|=0){C=(B=A-8|0)+(A=-8&(I=i[A-4>>2]))|0;I:if(!(1&I)){if(!(3&I))break A;if((B=B-(I=i[B>>2])|0)>>>0>2])))return i[8963]=A,i[C+4>>2]=-2&I,i[B+4>>2]=1|A,void(i[A+B>>2]=A)}else{if(I>>>0<=255){if(Q=i[B+8>>2],I=I>>>3|0,(0|(g=i[B+12>>2]))==(0|Q)){r=35844,o=i[8961]&vI(-2,I),i[r>>2]=o;break I}i[Q+12>>2]=g,i[g+8>>2]=Q;break I}if(n=i[B+24>>2],(0|B)==(0|(I=i[B+12>>2])))if((g=i[(Q=B+20|0)>>2])||(g=i[(Q=B+16|0)>>2])){for(;E=Q,(g=i[(Q=(I=g)+20|0)>>2])||(Q=I+16|0,g=i[I+16>>2]););i[E>>2]=0}else I=0;else g=i[B+8>>2],i[g+12>>2]=I,i[I+8>>2]=g;if(!n)break I;Q=i[B+28>>2];g:{if(i[(g=36148+(Q<<2)|0)>>2]==(0|B)){if(i[g>>2]=I,I)break g;r=35848,o=i[8962]&vI(-2,Q),i[r>>2]=o;break I}if(i[n+(i[n+16>>2]==(0|B)?16:20)>>2]=I,!I)break I}if(i[I+24>>2]=n,(g=i[B+16>>2])&&(i[I+16>>2]=g,i[g+24>>2]=I),!(g=i[B+20>>2]))break I;i[I+20>>2]=g,i[g+24>>2]=I}}if(!(B>>>0>=C>>>0)&&1&(I=i[C+4>>2])){I:{if(!(2&I)){if(i[8967]==(0|C)){if(i[8967]=B,A=i[8964]+A|0,i[8964]=A,i[B+4>>2]=1|A,i[8966]!=(0|B))break A;return i[8963]=0,void(i[8966]=0)}if(i[8966]==(0|C))return i[8966]=B,A=i[8963]+A|0,i[8963]=A,i[B+4>>2]=1|A,void(i[A+B>>2]=A);A=(-8&I)+A|0;g:if(I>>>0<=255){if(I=I>>>3|0,(0|(g=i[C+8>>2]))==(0|(Q=i[C+12>>2]))){r=35844,o=i[8961]&vI(-2,I),i[r>>2]=o;break g}i[g+12>>2]=Q,i[Q+8>>2]=g}else{if(n=i[C+24>>2],(0|C)==(0|(I=i[C+12>>2])))if((g=i[(Q=C+20|0)>>2])||(g=i[(Q=C+16|0)>>2])){for(;E=Q,(g=i[(Q=(I=g)+20|0)>>2])||(Q=I+16|0,g=i[I+16>>2]););i[E>>2]=0}else I=0;else g=i[C+8>>2],i[g+12>>2]=I,i[I+8>>2]=g;if(n){Q=i[C+28>>2];B:{if(i[(g=36148+(Q<<2)|0)>>2]==(0|C)){if(i[g>>2]=I,I)break B;r=35848,o=i[8962]&vI(-2,Q),i[r>>2]=o;break g}if(i[n+(i[n+16>>2]==(0|C)?16:20)>>2]=I,!I)break g}i[I+24>>2]=n,(g=i[C+16>>2])&&(i[I+16>>2]=g,i[g+24>>2]=I),(g=i[C+20>>2])&&(i[I+20>>2]=g,i[g+24>>2]=I)}}if(i[B+4>>2]=1|A,i[A+B>>2]=A,i[8966]!=(0|B))break I;return void(i[8963]=A)}i[C+4>>2]=-2&I,i[B+4>>2]=1|A,i[A+B>>2]=A}if(A>>>0<=255)return I=35884+((A=A>>>3|0)<<3)|0,(g=i[8961])&(A=1<>2]:(i[8961]=A|g,A=I),i[I+8>>2]=B,i[A+12>>2]=B,i[B+12>>2]=I,void(i[B+8>>2]=A);Q=31,i[B+16>>2]=0,i[B+20>>2]=0,A>>>0<=16777215&&(I=A>>>8|0,I<<=E=I+1048320>>>16&8,Q=28+((I=((I<<=Q=I+520192>>>16&4)<<(g=I+245760>>>16&2)>>>15|0)-(g|Q|E)|0)<<1|A>>>I+21&1)|0),i[B+28>>2]=Q,E=36148+(Q<<2)|0;I:{g:{if((g=i[8962])&(I=1<>>1|0)|0),I=i[E>>2];;){if(g=I,(-8&i[I+4>>2])==(0|A))break g;if(I=Q>>>29|0,Q<<=1,!(I=i[16+(E=g+(4&I)|0)>>2]))break}i[E+16>>2]=B,i[B+24>>2]=g}else i[8962]=I|g,i[E>>2]=B,i[B+24>>2]=E;i[B+12>>2]=B,i[B+8>>2]=B;break I}A=i[g+8>>2],i[A+12>>2]=B,i[g+8>>2]=B,i[B+24>>2]=0,i[B+12>>2]=g,i[B+8>>2]=A}A=i[8969]-1|0,i[8969]=A||-1}}}function v(A,I){var g,B=0,Q=0,C=0,E=0,n=0,a=0,r=0;g=A+I|0;A:{I:if(!(1&(B=i[A+4>>2]))){if(!(3&B))break A;if(I=(B=i[A>>2])+I|0,(0|(A=A-B|0))==i[8966]){if(3==(3&(B=i[g+4>>2])))return i[8963]=I,i[g+4>>2]=-2&B,i[A+4>>2]=1|I,void(i[g>>2]=I)}else{if(B>>>0<=255){if(C=i[A+8>>2],B=B>>>3|0,(0|(Q=i[A+12>>2]))==(0|C)){a=35844,r=i[8961]&vI(-2,B),i[a>>2]=r;break I}i[C+12>>2]=Q,i[Q+8>>2]=C;break I}if(n=i[A+24>>2],(0|(B=i[A+12>>2]))==(0|A))if((Q=i[(C=A+20|0)>>2])||(Q=i[(C=A+16|0)>>2])){for(;E=C,(Q=i[(C=(B=Q)+20|0)>>2])||(C=B+16|0,Q=i[B+16>>2]););i[E>>2]=0}else B=0;else Q=i[A+8>>2],i[Q+12>>2]=B,i[B+8>>2]=Q;if(!n)break I;C=i[A+28>>2];g:{if(i[(Q=36148+(C<<2)|0)>>2]==(0|A)){if(i[Q>>2]=B,B)break g;a=35848,r=i[8962]&vI(-2,C),i[a>>2]=r;break I}if(i[n+(i[n+16>>2]==(0|A)?16:20)>>2]=B,!B)break I}if(i[B+24>>2]=n,(Q=i[A+16>>2])&&(i[B+16>>2]=Q,i[Q+24>>2]=B),!(Q=i[A+20>>2]))break I;i[B+20>>2]=Q,i[Q+24>>2]=B}}I:{if(!(2&(B=i[g+4>>2]))){if(i[8967]==(0|g)){if(i[8967]=A,I=i[8964]+I|0,i[8964]=I,i[A+4>>2]=1|I,i[8966]!=(0|A))break A;return i[8963]=0,void(i[8966]=0)}if(i[8966]==(0|g))return i[8966]=A,I=i[8963]+I|0,i[8963]=I,i[A+4>>2]=1|I,void(i[A+I>>2]=I);I=(-8&B)+I|0;g:if(B>>>0<=255){if(C=i[g+8>>2],B=B>>>3|0,(0|(Q=i[g+12>>2]))==(0|C)){a=35844,r=i[8961]&vI(-2,B),i[a>>2]=r;break g}i[C+12>>2]=Q,i[Q+8>>2]=C}else{if(n=i[g+24>>2],(0|g)==(0|(B=i[g+12>>2])))if((C=i[(Q=g+20|0)>>2])||(C=i[(Q=g+16|0)>>2])){for(;E=Q,(C=i[(Q=(B=C)+20|0)>>2])||(Q=B+16|0,C=i[B+16>>2]););i[E>>2]=0}else B=0;else Q=i[g+8>>2],i[Q+12>>2]=B,i[B+8>>2]=Q;if(n){C=i[g+28>>2];B:{if(i[(Q=36148+(C<<2)|0)>>2]==(0|g)){if(i[Q>>2]=B,B)break B;a=35848,r=i[8962]&vI(-2,C),i[a>>2]=r;break g}if(i[n+(i[n+16>>2]==(0|g)?16:20)>>2]=B,!B)break g}i[B+24>>2]=n,(Q=i[g+16>>2])&&(i[B+16>>2]=Q,i[Q+24>>2]=B),(Q=i[g+20>>2])&&(i[B+20>>2]=Q,i[Q+24>>2]=B)}}if(i[A+4>>2]=1|I,i[A+I>>2]=I,i[8966]!=(0|A))break I;return void(i[8963]=I)}i[g+4>>2]=-2&B,i[A+4>>2]=1|I,i[A+I>>2]=I}if(I>>>0<=255)return B=35884+((I=I>>>3|0)<<3)|0,(Q=i[8961])&(I=1<>2]:(i[8961]=I|Q,I=B),i[B+8>>2]=A,i[I+12>>2]=A,i[A+12>>2]=B,void(i[A+8>>2]=I);C=31,i[A+16>>2]=0,i[A+20>>2]=0,I>>>0<=16777215&&(B=I>>>8|0,B<<=E=B+1048320>>>16&8,C=28+((B=((B<<=C=B+520192>>>16&4)<<(Q=B+245760>>>16&2)>>>15|0)-(Q|C|E)|0)<<1|I>>>B+21&1)|0),i[A+28>>2]=C,E=36148+(C<<2)|0;I:{if((Q=i[8962])&(B=1<>>1|0)|0),B=i[E>>2];;){if(Q=B,(-8&i[B+4>>2])==(0|I))break I;if(B=C>>>29|0,C<<=1,!(B=i[16+(E=Q+(4&B)|0)>>2]))break}i[E+16>>2]=A,i[A+24>>2]=Q}else i[8962]=B|Q,i[E>>2]=A,i[A+24>>2]=E;return i[A+12>>2]=A,void(i[A+8>>2]=A)}I=i[Q+8>>2],i[I+12>>2]=A,i[Q+8>>2]=A,i[A+24>>2]=0,i[A+12>>2]=Q,i[A+8>>2]=I}}function U(A,I,g,B,Q){var E,a,r,o,e,t,f,c,y,s,w,D,u,p,l,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0;for(h=E=h+-64|0,a=i[A+60>>2],r=i[A+56>>2],K=i[A+52>>2],x=i[A+48>>2],o=i[A+44>>2],e=i[A+40>>2],t=i[A+36>>2],f=i[A+32>>2],c=i[A+28>>2],y=i[A+24>>2],s=i[A+20>>2],w=i[A+16>>2],D=i[A+12>>2],u=i[A+8>>2],p=i[A+4>>2],l=i[A>>2];;){if(!Q&B>>>0>63|Q)k=g;else{if(_=0,k=F=EA(E,0,64),B|Q)for(;C[F+_|0]=n[I+_|0],!Q&(_=_+1|0)>>>0>>0|Q;);I=k,V=g}for(q=20,m=l,v=p,U=u,S=D,_=w,F=s,g=y,N=c,H=f,Y=t,M=e,d=a,P=r,G=K,R=x,L=o;b=_,m=Hg((_=_+m|0)^R,16),R=Hg(b^(H=m+H|0),12),b=H,H=Hg((H=m)^(m=_+R|0),8),_=Hg(R^(J=b+H|0),7),b=F,v=Hg((F=F+v|0)^G,16),G=Hg(b^(Y=v+Y|0),12),b=Y,Y=Hg((Y=v)^(v=F+G|0),8),F=Hg(G^(X=b+Y|0),7),G=g,U=Hg((g=g+U|0)^P,16),b=P=Hg(G^(M=U+M|0),12),P=Hg((G=U)^(U=g+P|0),8),g=Hg(b^(M=P+M|0),7),G=N,S=Hg((N=N+S|0)^d,16),L=G=Hg(G^(d=S+L|0),12),b=d,d=Hg((d=S)^(S=N+G|0),8),N=Hg(L^(G=b+d|0),7),b=M,M=Hg((m=F+m|0)^d,16),F=Hg((R=b+M|0)^F,12),d=Hg(M^(m=F+m|0),8),F=Hg(F^(M=R+d|0),7),H=Hg((v=g+v|0)^H,16),g=Hg((G=H+G|0)^g,12),R=Hg(H^(v=g+v|0),8),g=Hg(g^(L=G+R|0),7),H=Hg((U=N+U|0)^Y,16),N=Hg((Y=H+J|0)^N,12),G=Hg(H^(U=N+U|0),8),N=Hg(N^(H=Y+G|0),7),Y=Hg((S=_+S|0)^P,16),_=Hg((J=Y+X|0)^_,12),P=Hg(Y^(S=_+S|0),8),_=Hg(_^(Y=J+P|0),7),q=q-2|0;);if(q=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,J=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,X=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,W=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,T=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,j=n[I+24|0]|n[I+25|0]<<8|n[I+26|0]<<16|n[I+27|0]<<24,Z=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,O=n[I+32|0]|n[I+33|0]<<8|n[I+34|0]<<16|n[I+35|0]<<24,z=n[I+36|0]|n[I+37|0]<<8|n[I+38|0]<<16|n[I+39|0]<<24,$=n[I+40|0]|n[I+41|0]<<8|n[I+42|0]<<16|n[I+43|0]<<24,AA=n[I+44|0]|n[I+45|0]<<8|n[I+46|0]<<16|n[I+47|0]<<24,IA=n[I+48|0]|n[I+49|0]<<8|n[I+50|0]<<16|n[I+51|0]<<24,gA=n[I+52|0]|n[I+53|0]<<8|n[I+54|0]<<16|n[I+55|0]<<24,BA=n[I+56|0]|n[I+57|0]<<8|n[I+58|0]<<16|n[I+59|0]<<24,b=n[I+60|0]|n[I+61|0]<<8|n[I+62|0]<<16|n[I+63|0]<<24,xI(k,m+l^(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24)),xI(k+4|0,v+p^q),xI(k+8|0,U+u^J),xI(k+12|0,S+D^X),xI(k+16|0,_+w^W),xI(k+20|0,F+s^T),xI(k+24|0,g+y^j),xI(k+28|0,N+c^Z),xI(k+32|0,H+f^O),xI(k+36|0,Y+t^z),xI(k+40|0,$^M+e),xI(k+44|0,AA^L+o),xI(k+48|0,IA^R+x),xI(k+52|0,gA^G+K),xI(k+56|0,BA^P+r),xI(k+60|0,b^d+a),K=((x=(g=x)+1|0)>>>0>>0)+K|0,!Q&B>>>0<=64){if(!(!B|!Q&B>>>0>63|0!=(0|Q)))for(F=0;C[F+V|0]=n[k+F|0],(0|B)!=(0|(F=F+1|0)););i[A+52>>2]=K,i[A+48>>2]=x,h=E- -64|0;break}I=I- -64|0,g=k- -64|0,Q=Q-1|0,Q=(B=B+-64|0)>>>0<4294967232?Q+1|0:Q}}function S(A,I,g,B){var Q=0,C=0,E=0,a=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0;if(c=i[A+36>>2],a=i[A+32>>2],E=i[A+28>>2],C=i[A+24>>2],o=i[A+20>>2],!B&g>>>0>=16|B)for(H=!n[A+80|0]<<24,s=i[A+4>>2],Y=r(s,5),D=i[A+8>>2],_=r(D,5),G=i[A+12>>2],k=r(G,5),Q=i[A+16>>2],u=r(Q,5),b=Q,w=i[A>>2];Q=eg(e=((n[I+3|0]|n[I+4|0]<<8|n[I+5|0]<<16|n[I+6|0]<<24)>>>2&67108863)+C|0,0,G,0),t=p,C=(y=eg(o=(67108863&(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24))+o|0,0,b,0))+Q|0,Q=p+t|0,Q=C>>>0>>0?Q+1|0:Q,f=C,C=eg(t=((n[I+6|0]|n[I+7|0]<<8|n[I+8|0]<<16|n[I+9|0]<<24)>>>4&67108863)+E|0,0,D,0),Q=p+Q|0,Q=C>>>0>(E=f+C|0)>>>0?Q+1|0:Q,C=E,E=eg(y=((n[I+9|0]|n[I+10|0]<<8|n[I+11|0]<<16|n[I+12|0]<<24)>>>6|0)+a|0,0,s,0),Q=p+Q|0,Q=E>>>0>(a=C+E|0)>>>0?Q+1|0:Q,C=a,a=eg(h=c+H+((n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24)>>>8)|0,0,w,0),Q=p+Q|0,m=c=C+a|0,c=a>>>0>c>>>0?Q+1|0:Q,Q=eg(e,0,D,0),E=p,a=(C=eg(o,0,G,0))+Q|0,Q=p+E|0,Q=C>>>0>a>>>0?Q+1|0:Q,E=eg(t,0,s,0),Q=p+Q|0,Q=E>>>0>(a=E+a|0)>>>0?Q+1|0:Q,E=eg(y,0,w,0),Q=p+Q|0,Q=E>>>0>(a=E+a|0)>>>0?Q+1|0:Q,E=eg(h,0,u,0),Q=p+Q|0,v=a=E+a|0,a=E>>>0>a>>>0?Q+1|0:Q,Q=eg(e,0,s,0),C=p,E=(l=eg(o,0,D,0))+Q|0,Q=p+C|0,Q=E>>>0>>0?Q+1|0:Q,C=eg(t,0,w,0),Q=p+Q|0,Q=C>>>0>(E=C+E|0)>>>0?Q+1|0:Q,C=eg(y,0,u,0),Q=p+Q|0,Q=C>>>0>(E=C+E|0)>>>0?Q+1|0:Q,C=eg(h,0,k,0),Q=p+Q|0,l=E=C+E|0,E=C>>>0>E>>>0?Q+1|0:Q,Q=eg(e,0,w,0),f=p,C=(F=eg(o,0,s,0))+Q|0,Q=p+f|0,Q=C>>>0>>0?Q+1|0:Q,f=eg(t,0,u,0),Q=p+Q|0,Q=(C=f+C|0)>>>0>>0?Q+1|0:Q,f=eg(y,0,k,0),Q=p+Q|0,Q=(C=f+C|0)>>>0>>0?Q+1|0:Q,f=eg(h,0,_,0),Q=p+Q|0,Q=(C=f+C|0)>>>0>>0?Q+1|0:Q,f=C,C=Q,Q=eg(e,0,u,0),F=p,e=(o=eg(o,0,w,0))+Q|0,Q=p+F|0,Q=e>>>0>>0?Q+1|0:Q,o=eg(t,0,k,0),Q=p+Q|0,Q=(e=o+e|0)>>>0>>0?Q+1|0:Q,o=eg(y,0,_,0),Q=p+Q|0,Q=(e=o+e|0)>>>0>>0?Q+1|0:Q,o=eg(h,0,Y,0),Q=p+Q|0,Q=(e=o+e|0)>>>0>>0?Q+1|0:Q,o=e,t=(67108863&Q)<<6|e>>>26,Q=C,t=(67108863&(Q=(e=t+f|0)>>>0>>0?Q+1|0:Q))<<6|(C=e)>>>26,Q=E,Q=(C=t+l|0)>>>0>>0?Q+1|0:Q,t=C,C=(67108863&Q)<<6|C>>>26,Q=a,y=E=C+v|0,E=(67108863&(Q=C>>>0>E>>>0?Q+1|0:Q))<<6|E>>>26,Q=c,c=a=E+m|0,C=(67108863&e)+((Q=r((67108863&(Q=E>>>0>a>>>0?Q+1|0:Q))<<6|a>>>26,5)+(67108863&o)|0)>>>26|0)|0,E=67108863&t,a=67108863&y,c&=67108863,o=67108863&Q,I=I+16|0,!(B=B-(g>>>0<16)|0)&(g=g-16|0)>>>0>15|B;);i[A+20>>2]=o,i[A+36>>2]=c,i[A+32>>2]=a,i[A+28>>2]=E,i[A+24>>2]=C}function N(A,I,g){var B,Q,E,i,a=0,r=0,o=0,e=0,t=0;return h=E=h-160|0,mI(I,g,32,0),C[0|I]=248&n[0|I],C[I+31|0]=63&n[I+31|0]|64,CA(E,I),nI(A,E),r=n[(Q=g)+8|0]|n[Q+9|0]<<8|n[Q+10|0]<<16|n[Q+11|0]<<24,a=n[Q+12|0]|n[Q+13|0]<<8|n[Q+14|0]<<16|n[Q+15|0]<<24,o=n[Q+16|0]|n[Q+17|0]<<8|n[Q+18|0]<<16|n[Q+19|0]<<24,e=n[Q+20|0]|n[Q+21|0]<<8|n[Q+22|0]<<16|n[Q+23|0]<<24,t=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,g=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,B=I,i=n[Q+28|0]|n[Q+29|0]<<8|n[Q+30|0]<<16|n[Q+31|0]<<24,I=n[Q+24|0]|n[Q+25|0]<<8|n[Q+26|0]<<16|n[Q+27|0]<<24,C[B+24|0]=I,C[B+25|0]=I>>>8,C[B+26|0]=I>>>16,C[B+27|0]=I>>>24,C[B+28|0]=i,C[B+29|0]=i>>>8,C[B+30|0]=i>>>16,C[B+31|0]=i>>>24,C[B+16|0]=o,C[B+17|0]=o>>>8,C[B+18|0]=o>>>16,C[B+19|0]=o>>>24,C[B+20|0]=e,C[B+21|0]=e>>>8,C[B+22|0]=e>>>16,C[B+23|0]=e>>>24,C[B+8|0]=r,C[B+9|0]=r>>>8,C[B+10|0]=r>>>16,C[B+11|0]=r>>>24,C[B+12|0]=a,C[B+13|0]=a>>>8,C[B+14|0]=a>>>16,C[B+15|0]=a>>>24,C[0|B]=t,C[B+1|0]=t>>>8,C[B+2|0]=t>>>16,C[B+3|0]=t>>>24,C[B+4|0]=g,C[B+5|0]=g>>>8,C[B+6|0]=g>>>16,C[B+7|0]=g>>>24,o=n[(a=A)+8|0]|n[a+9|0]<<8|n[a+10|0]<<16|n[a+11|0]<<24,e=n[a+12|0]|n[a+13|0]<<8|n[a+14|0]<<16|n[a+15|0]<<24,t=n[a+16|0]|n[a+17|0]<<8|n[a+18|0]<<16|n[a+19|0]<<24,g=n[a+20|0]|n[a+21|0]<<8|n[a+22|0]<<16|n[a+23|0]<<24,I=n[0|a]|n[a+1|0]<<8|n[a+2|0]<<16|n[a+3|0]<<24,A=n[a+4|0]|n[a+5|0]<<8|n[a+6|0]<<16|n[a+7|0]<<24,r=n[a+28|0]|n[a+29|0]<<8|n[a+30|0]<<16|n[a+31|0]<<24,a=n[a+24|0]|n[a+25|0]<<8|n[a+26|0]<<16|n[a+27|0]<<24,C[B+56|0]=a,C[B+57|0]=a>>>8,C[B+58|0]=a>>>16,C[B+59|0]=a>>>24,C[B+60|0]=r,C[B+61|0]=r>>>8,C[B+62|0]=r>>>16,C[B+63|0]=r>>>24,C[B+48|0]=t,C[B+49|0]=t>>>8,C[B+50|0]=t>>>16,C[B+51|0]=t>>>24,C[B+52|0]=g,C[B+53|0]=g>>>8,C[B+54|0]=g>>>16,C[B+55|0]=g>>>24,C[B+40|0]=o,C[B+41|0]=o>>>8,C[B+42|0]=o>>>16,C[B+43|0]=o>>>24,C[B+44|0]=e,C[B+45|0]=e>>>8,C[B+46|0]=e>>>16,C[B+47|0]=e>>>24,C[B+32|0]=I,C[B+33|0]=I>>>8,C[B+34|0]=I>>>16,C[B+35|0]=I>>>24,C[B+36|0]=A,C[B+37|0]=A>>>8,C[B+38|0]=A>>>16,C[B+39|0]=A>>>24,h=E+160|0,0}function M(A,I,g){var B,Q=0,E=0,i=0;h=B=h+-64|0;A:{if(!(!g|g>>>0>=65)){if(Q=-1,!(n[A+80|0]|n[A+81|0]<<8|n[A+82|0]<<16|n[A+83|0]<<24|n[A+84|0]|n[A+85|0]<<8|n[A+86|0]<<16|n[A+87|0]<<24)){if(E=A,(Q=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)>>>0>=129){if(iA(A,128),l(A,i=A+96|0),Q=(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)-128|0,C[A+352|0]=Q,C[A+353|0]=Q>>>8,C[A+354|0]=Q>>>16,C[A+355|0]=Q>>>24,Q>>>0>=129)break A;X(i,A+224|0,Q),Q=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24}iA(E,Q),n[A+356|0]&&(C[A+88|0]=255,C[A+89|0]=255,C[A+90|0]=255,C[A+91|0]=255,C[A+92|0]=255,C[A+93|0]=255,C[A+94|0]=255,C[A+95|0]=255),C[A+80|0]=255,C[A+81|0]=255,C[A+82|0]=255,C[A+83|0]=255,C[A+84|0]=255,C[A+85|0]=255,C[A+86|0]=255,C[A+87|0]=255,EA((Q=A+96|0)+(E=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)|0,0,256-E|0),l(A,Q),tI(B,n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24,n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24),tI(8|B,n[A+8|0]|n[A+9|0]<<8|n[A+10|0]<<16|n[A+11|0]<<24,n[A+12|0]|n[A+13|0]<<8|n[A+14|0]<<16|n[A+15|0]<<24),tI(B+16|0,n[A+16|0]|n[A+17|0]<<8|n[A+18|0]<<16|n[A+19|0]<<24,n[A+20|0]|n[A+21|0]<<8|n[A+22|0]<<16|n[A+23|0]<<24),tI(B+24|0,n[A+24|0]|n[A+25|0]<<8|n[A+26|0]<<16|n[A+27|0]<<24,n[A+28|0]|n[A+29|0]<<8|n[A+30|0]<<16|n[A+31|0]<<24),tI(B+32|0,n[A+32|0]|n[A+33|0]<<8|n[A+34|0]<<16|n[A+35|0]<<24,n[A+36|0]|n[A+37|0]<<8|n[A+38|0]<<16|n[A+39|0]<<24),tI(B+40|0,n[A+40|0]|n[A+41|0]<<8|n[A+42|0]<<16|n[A+43|0]<<24,n[A+44|0]|n[A+45|0]<<8|n[A+46|0]<<16|n[A+47|0]<<24),tI(B+48|0,n[A+48|0]|n[A+49|0]<<8|n[A+50|0]<<16|n[A+51|0]<<24,n[A+52|0]|n[A+53|0]<<8|n[A+54|0]<<16|n[A+55|0]<<24),tI(B+56|0,n[A+56|0]|n[A+57|0]<<8|n[A+58|0]<<16|n[A+59|0]<<24,n[A+60|0]|n[A+61|0]<<8|n[A+62|0]<<16|n[A+63|0]<<24),X(I,B,g),fI(A,64),fI(Q,256),Q=0}return h=B- -64|0,Q}OI(),e()}t(1854,1886,306,1931),e()}function d(A,I){var g,B,Q,C,E,a,r,o,e,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0;g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,u=HI(I+4|0),t=p,h=HI(I+7|0),c=p,D=HI(I+10|0),f=p,B=HI(I+13|0),s=p,y=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,Q=HI(I+20|0),l=p,C=HI(I+23|0),E=p,a=HI(I+26|0),r=p,o=HI(I+29|0),I=f<<3|D>>>29,F=f=D<<3,D=f=f+16777216|0,f=I=f>>>0<16777216?I+1|0:I,c=I=c<<5|h>>>27,e=w=h<<5,t=I=t<<6|(h=u)>>>26,u=I=16777216+(h<<=6)|0,w=I,I=(I=(t=I>>>0<16777216?t+1|0:t)>>25)+c|0,I=(t=e+(w=(33554431&t)<<7|w>>>25)|0)>>>0>>0?I+1|0:I,(c=t+33554432|0)>>>0<33554432&&(I=I+1|0),I=(F-(-33554432&D)|0)+((67108863&I)<<6|c>>>26)|0,i[A+12>>2]=I,I=-67108864&c,i[A+8>>2]=t-I,I=0,w=y=(c=y)+16777216|0,y=I=y>>>0<16777216?1:I,F=c-(-33554432&w)|0,I=s<<2|(c=B)>>>30,s=c<<2,c=I,I=(I=f>>25)+c|0,t=I=(f=(t=s)+(s=(33554431&f)<<7|D>>>25)|0)>>>0>>0?I+1|0:I,c=I=f+33554432|0,I=((67108863&(t=I>>>0<33554432?t+1|0:t))<<6|I>>>26)+F|0,i[A+20>>2]=I,I=-67108864&c,i[A+16>>2]=f-I,s=(t=Q)<<7,I=(I=l<<7|t>>>25)+(t=y>>25)|0,I=(y=s+(c=(33554431&y)<<7|w>>>25)|0)>>>0>>0?I+1|0:I,y=t=y,c=t=t+33554432|0,t=I=t>>>0<33554432?I+1|0:I,I=-67108864&c,i[(f=A)+24>>2]=y-I,y=f,I=E<<5|(f=C)>>>27,l=f<<=5,s=f=f+16777216|0,f=I=f>>>0<16777216?I+1|0:I,I=(l-(-33554432&s)|0)+((67108863&t)<<6|c>>>26)|0,i[y+28>>2]=I,c=(t=a)<<4,t=I=r<<4|t>>>28,I=(I=f>>25)+t|0,I=(f=(w=c)+(c=(33554431&f)<<7|s>>>25)|0)>>>0>>0?I+1|0:I,f=t=f,c=t=t+33554432|0,t=I=t>>>0<33554432?I+1|0:I,I=-67108864&c,i[y+32>>2]=f-I,I=0,f=y=(y=o)<<2&33554428,I=(y=y+16777216|0)>>>0<16777216?I+1|0:I,t=(f-(33554432&y)|0)+((67108863&t)<<6|c>>>26)|0,i[A+36>>2]=t,y=eg((33554431&I)<<7|y>>>25,I>>>25|0,19,0),I=p,I=(t=y+g|0)>>>0>>0?I+1|0:I,(f=t+33554432|0)>>>0<33554432&&(I=I+1|0),I=(h-(-33554432&u)|0)+((67108863&I)<<6|f>>>26)|0,i[A+4>>2]=I,I=A,A=-67108864&f,i[I>>2]=t-A}function P(A,I){var g,B,Q,C,E,n,a,r,o,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0,G=0,k=0;l=t=i[(e=I)+4>>2],D=t>>31,F=t=i[e+8>>2],B=t>>31,w=t=i[e+12>>2],u=t>>31,G=t=i[e+16>>2],Q=t>>31,h=t=i[e+20>>2],s=t>>31,k=t=i[e+24>>2],C=t>>31,E=t=i[e>>2],n=t>>31,c=t=eg(e=i[e+36>>2],e>>31,121666,0),e=p,g=t=t+16777216|0,t=e=t>>>0<16777216?e+1|0:e,a=c-(-33554432&g)|0,f=eg(e=i[I+32>>2],e>>31,121666,0),r=p,c=eg(I=i[I+28>>2],I>>31,121666,0),e=p,y=f,o=I=c+16777216|0,f=I,I=(I=(e=I>>>0<16777216?e+1|0:e)>>25)+r|0,I=(e=y+(f=(33554431&e)<<7|f>>>25)|0)>>>0>>0?I+1|0:I,f=e,e=I,y=I=f+33554432|0,I=((67108863&(e=I>>>0<33554432?e+1|0:e))<<6|I>>>26)+a|0,i[A+36>>2]=I,I=-67108864&y,i[A+32>>2]=f-I,y=c-(-33554432&o)|0,e=eg(k,C,121666,0),k=p,c=eg(h,s,121666,0),I=p,f=e,h=e=c+16777216|0,s=e,e=(e=(I=e>>>0<16777216?I+1|0:I)>>25)+k|0,e=(I=f+(s=(33554431&I)<<7|s>>>25)|0)>>>0>>0?e+1|0:e,(f=I+33554432|0)>>>0<33554432&&(e=e+1|0),e=y+((67108863&e)<<6|f>>>26)|0,i[A+28>>2]=e,e=-67108864&f,i[A+24>>2]=I-e,h=c-(-33554432&h)|0,I=eg(G,Q,121666,0),G=p,c=eg(w,u,121666,0),e=p,y=I,w=I=c+16777216|0,u=(33554431&(e=I>>>0<16777216?e+1|0:e))<<7|I>>>25,e=(e>>25)+G|0,I=e=(f=y+u|0)>>>0>>0?e+1|0:e,I=((67108863&(I=(e=f+33554432|0)>>>0<33554432?I+1|0:I))<<6|e>>>26)+h|0,i[A+20>>2]=I,I=-67108864&e,i[A+16>>2]=f-I,w=c-(-33554432&w)|0,e=eg(F,B,121666,0),F=p,c=eg(l,D,121666,0),I=p,y=e,l=e=c+16777216|0,D=(33554431&(I=e>>>0<16777216?I+1|0:I))<<7|e>>>25,I=(I>>25)+F|0,e=I=(f=y+D|0)>>>0>>0?I+1|0:I,y=I=f+33554432|0,I=((67108863&(e=I>>>0<33554432?e+1|0:e))<<6|I>>>26)+w|0,i[A+12>>2]=I,I=-67108864&y,i[A+8>>2]=f-I,I=eg((33554431&t)<<7|g>>>25,t>>25,19,0),e=p,y=c-(-33554432&l)|0,t=eg(E,n,121666,0),e=p+e|0,e=(I=t+I|0)>>>0>>0?e+1|0:e,(t=I+33554432|0)>>>0<33554432&&(e=e+1|0),e=y+((67108863&e)<<6|t>>>26)|0,i[A+4>>2]=e,e=A,A=-67108864&t,i[e>>2]=I-A}function R(A,I,g,B){var Q,E=0,a=0;h=Q=h-16|0,E=-31;A:{I:{g:{B:switch(B-1|0){case 1:if(I>>>0<13)break I;B=n[35660]|n[35661]<<8|n[35662]<<16|n[35663]<<24,E=n[35656]|n[35657]<<8|n[35658]<<16|n[35659]<<24,C[0|A]=E,C[A+1|0]=E>>>8,C[A+2|0]=E>>>16,C[A+3|0]=E>>>24,C[A+4|0]=B,C[A+5|0]=B>>>8,C[A+6|0]=B>>>16,C[A+7|0]=B>>>24,B=n[35665]|n[35666]<<8|n[35667]<<16|n[35668]<<24,E=n[35661]|n[35662]<<8|n[35663]<<16|n[35664]<<24,C[A+5|0]=E,C[A+6|0]=E>>>8,C[A+7|0]=E>>>16,C[A+8|0]=E>>>24,C[A+9|0]=B,C[A+10|0]=B>>>8,C[A+11|0]=B>>>16,C[A+12|0]=B>>>24,a=-12,B=12;break g;case 0:break B;default:break A}if(I>>>0<12)break I;B=n[35673]|n[35674]<<8|n[35675]<<16|n[35676]<<24,E=n[35669]|n[35670]<<8|n[35671]<<16|n[35672]<<24,C[0|A]=E,C[A+1|0]=E>>>8,C[A+2|0]=E>>>16,C[A+3|0]=E>>>24,C[A+4|0]=B,C[A+5|0]=B>>>8,C[A+6|0]=B>>>16,C[A+7|0]=B>>>24,B=n[35677]|n[35678]<<8|n[35679]<<16|n[35680]<<24,C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,a=-11,B=11}if(E=oA(g))break A;if(qA(Q+5|0,19),!((E=I+a|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+B|0,Q+5|0,I+1|0),!((B=E-I|0)>>>0<4)&&(C[0|(A=A+I|0)]=36,C[A+1|0]=109,C[A+2|0]=61,C[A+3|0]=0,qA(Q+5|0,i[g+44>>2]),!((B=B-3|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+3|0,Q+5|0,I+1|0),!((B=B-I|0)>>>0<4)&&(C[0|(A=A+I|0)]=44,C[A+1|0]=116,C[A+2|0]=61,C[A+3|0]=0,qA(Q+5|0,i[g+40>>2]),!((B=B-3|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+3|0,Q+5|0,I+1|0),!((B=B-I|0)>>>0<4)&&(C[0|(A=A+I|0)]=44,C[A+1|0]=112,C[A+2|0]=61,C[A+3|0]=0,qA(Q+5|0,i[g+48>>2]),!((B=B-3|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+3|0,Q+5|0,I+1|0),!((B=B-I|0)>>>0<2)&&(C[0|(A=A+I|0)]=36,C[A+1|0]=0,O(A=A+1|0,I=B-1|0,i[g+16>>2],i[g+20>>2],3)))))))))){if(E=-31,(B=(B=I)-(I=YA(A))|0)>>>0<2)break A;return C[0|(A=A+I|0)]=36,C[A+1|0]=0,A=O(A+1|0,B-1|0,i[g>>2],i[g+4>>2],3),h=Q+16|0,A?0:-31}}E=-31}return h=Q+16|0,E}function J(A,I,g,B){var Q,E=0;Q=E=h,h=E=E-576&-64,i[E+188>>2]=0,xI(E+188|0,I);A:if(I>>>0<=64){if((0|iI(E+192|0,0,0,I))<0)break A;if((0|hg(E+192|0,E+188|0,4,0))<0)break A;if((0|hg(E+192|0,g,B,0))<0)break A;dI(E+192|0,A,I)}else if(!((0|iI(E+192|0,0,0,64))<0||(0|hg(E+192|0,E+188|0,4,0))<0||(0|hg(E+192|0,g,B,0))<0||(0|dI(E+192|0,E+112|0,64))<0)){if(g=i[E+116>>2],B=i[E+112>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24,g=i[E+124>>2],B=i[E+120>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=g,C[A+13|0]=g>>>8,C[A+14|0]=g>>>16,C[A+15|0]=g>>>24,g=i[E+140>>2],B=i[E+136>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=g,C[A+29|0]=g>>>8,C[A+30|0]=g>>>16,C[A+31|0]=g>>>24,g=i[E+132>>2],B=i[E+128>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=g,C[A+21|0]=g>>>8,C[A+22|0]=g>>>16,C[A+23|0]=g>>>24,A=A+32|0,(I=I-32|0)>>>0>=65)for(;;){if(X(E+48|0,E+112|0,64),(0|GI(E+112|0,64,E+48|0,64,0,0,0))<0)break A;if(g=i[E+116>>2],B=i[E+112>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24,g=i[E+124>>2],B=i[E+120>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=g,C[A+13|0]=g>>>8,C[A+14|0]=g>>>16,C[A+15|0]=g>>>24,g=i[E+140>>2],B=i[E+136>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=g,C[A+29|0]=g>>>8,C[A+30|0]=g>>>16,C[A+31|0]=g>>>24,g=i[E+132>>2],B=i[E+128>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=g,C[A+21|0]=g>>>8,C[A+22|0]=g>>>16,C[A+23|0]=g>>>24,A=A+32|0,!((I=I-32|0)>>>0>64))break}X(E+48|0,E+112|0,64),(0|GI(E+112|0,I,E+48|0,64,0,0,0))<0||X(A,E+112|0,I)}fI(E+192|0,384),h=Q}function x(A,I,g){var B=0,Q=0,C=0,E=0,i=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,p=0;for(C=2036477234,e=857760878,t=1634760805,E=1797285236,o=n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,B=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24,Q=n[g+8|0]|n[g+9|0]<<8|n[g+10|0]<<16|n[g+11|0]<<24,a=n[g+12|0]|n[g+13|0]<<8|n[g+14|0]<<16|n[g+15|0]<<24,c=n[g+16|0]|n[g+17|0]<<8|n[g+18|0]<<16|n[g+19|0]<<24,y=n[g+20|0]|n[g+21|0]<<8|n[g+22|0]<<16|n[g+23|0]<<24,w=n[g+24|0]|n[g+25|0]<<8|n[g+26|0]<<16|n[g+27|0]<<24,h=n[g+28|0]|n[g+29|0]<<8|n[g+30|0]<<16|n[g+31|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,f=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,i=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,I=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24;r=o,t=Hg((s=g)^(g=o+t|0),16),r=c=Hg(r^(o=t+c|0),12),c=Hg((s=t)^(t=g+c|0),8),o=Hg(r^(D=c+o|0),7),r=B,e=Hg((g=B+e|0)^f,16),r=f=Hg(r^(B=e+y|0),12),f=Hg((s=e)^(e=g+f|0),8),g=Hg(r^(y=f+B|0),7),r=Q,B=Hg((C=C+Q|0)^i,16),r=i=Hg(r^(Q=B+w|0),12),s=Hg(B^(i=C+i|0),8),C=Hg(r^(B=s+Q|0),7),E=Hg((Q=I)^(I=E+a|0),16),a=Hg((Q=E+h|0)^a,12),I=Hg(E^(u=I+a|0),8),E=Hg(a^(Q=I+Q|0),7),r=B,B=Hg((B=I)^(I=g+t|0),16),g=Hg((a=r+B|0)^g,12),I=Hg(B^(t=I+g|0),8),B=Hg(g^(w=a+I|0),7),r=Q,Q=Hg((g=C+e|0)^c,16),C=Hg((a=r+Q|0)^C,12),g=Hg(Q^(e=g+C|0),8),Q=Hg(C^(h=a+g|0),7),a=Hg((C=E+i|0)^f,16),E=Hg((i=a+D|0)^E,12),f=Hg(a^(C=C+E|0),8),a=Hg(E^(c=i+f|0),7),i=Hg((E=o+u|0)^s,16),o=Hg((y=i+y|0)^o,12),i=Hg(i^(E=E+o|0),8),o=Hg(o^(y=y+i|0),7),10!=(0|(p=p+1|0)););xI(A,t),xI(A+4|0,e),xI(A+8|0,C),xI(A+12|0,E),xI(A+16|0,g),xI(A+20|0,f),xI(A+24|0,i),xI(A+28|0,I)}function L(A){var I,g=0,B=0;h=I=h-48|0,g=n[28+(A|=0)|0]|n[A+29|0]<<8|n[A+30|0]<<16|n[A+31|0]<<24,i[I+24>>2]=n[A+24|0]|n[A+25|0]<<8|n[A+26|0]<<16|n[A+27|0]<<24,i[I+28>>2]=g,g=n[A+20|0]|n[A+21|0]<<8|n[A+22|0]<<16|n[A+23|0]<<24,i[I+16>>2]=n[A+16|0]|n[A+17|0]<<8|n[A+18|0]<<16|n[A+19|0]<<24,i[I+20>>2]=g,g=n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24,i[I>>2]=n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24,i[I+4>>2]=g,g=n[A+12|0]|n[A+13|0]<<8|n[A+14|0]<<16|n[A+15|0]<<24,i[I+8>>2]=n[A+8|0]|n[A+9|0]<<8|n[A+10|0]<<16|n[A+11|0]<<24,i[I+12>>2]=g,g=n[A+40|0]|n[A+41|0]<<8|n[A+42|0]<<16|n[A+43|0]<<24,i[I+32>>2]=n[A+36|0]|n[A+37|0]<<8|n[A+38|0]<<16|n[A+39|0]<<24,i[I+36>>2]=g,Vg[i[8957]](I,I,40,0,A+32|0,0,A),g=i[I+28>>2],B=i[I+24>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=g,C[A+29|0]=g>>>8,C[A+30|0]=g>>>16,C[A+31|0]=g>>>24,g=i[I+20>>2],B=i[I+16>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=g,C[A+21|0]=g>>>8,C[A+22|0]=g>>>16,C[A+23|0]=g>>>24,g=i[I+12>>2],B=i[I+8>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=g,C[A+13|0]=g>>>8,C[A+14|0]=g>>>16,C[A+15|0]=g>>>24,g=i[I+4>>2],B=i[I>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24,g=i[I+36>>2],B=i[I+32>>2],C[A+36|0]=B,C[A+37|0]=B>>>8,C[A+38|0]=B>>>16,C[A+39|0]=B>>>24,C[A+40|0]=g,C[A+41|0]=g>>>8,C[A+42|0]=g>>>16,C[A+43|0]=g>>>24,XI(A),h=I+48|0}function K(A,I,g){var B=0,Q=0,C=0,E=0,i=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,p=0,l=0,F=0;for(Q=2036477234,C=857760878,E=1634760805,i=1797285236,w=20,o=n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,s=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24,h=n[g+8|0]|n[g+9|0]<<8|n[g+10|0]<<16|n[g+11|0]<<24,c=n[g+12|0]|n[g+13|0]<<8|n[g+14|0]<<16|n[g+15|0]<<24,e=n[g+16|0]|n[g+17|0]<<8|n[g+18|0]<<16|n[g+19|0]<<24,a=n[g+20|0]|n[g+21|0]<<8|n[g+22|0]<<16|n[g+23|0]<<24,t=n[g+24|0]|n[g+25|0]<<8|n[g+26|0]<<16|n[g+27|0]<<24,f=n[g+28|0]|n[g+29|0]<<8|n[g+30|0]<<16|n[g+31|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,r=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,B=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,I=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24;D=B,B=Hg(E+a|0,7)^c,y=D^Hg(B+E|0,9),u=Hg(B+y|0,13)^a,c=Hg(y+u|0,18),I=Hg(C+o|0,7)^I,t=Hg(I+C|0,9)^t,o=Hg(I+t|0,13)^o,l=Hg(t+o|0,18),f=Hg(g+Q|0,7)^f,a=Hg(f+Q|0,9)^s,p=Hg(a+f|0,13)^g,F=Hg(a+p|0,18),g=Hg(i+e|0,7)^h,r=Hg(g+i|0,9)^r,e=Hg(g+r|0,13)^e,D=Hg(r+e|0,18),o=Hg((E^=c)+g|0,7)^o,s=Hg(o+E|0,9)^a,h=Hg(o+s|0,13)^g,E=Hg(s+h|0,18)^E,g=Hg((C^=l)+B|0,7)^p,r=Hg(g+C|0,9)^r,c=Hg(g+r|0,13)^B,C=Hg(r+c|0,18)^C,e=Hg((Q^=F)+I|0,7)^e,B=Hg(e+Q|0,9)^y,I=Hg(B+e|0,13)^I,Q=Hg(I+B|0,18)^Q,a=Hg((i^=D)+f|0,7)^u,t=Hg(a+i|0,9)^t,f=Hg(a+t|0,13)^f,i=Hg(t+f|0,18)^i,y=w>>>0>2,w=w-2|0,y;);return xI(A,E),xI(A+4|0,C),xI(A+8|0,Q),xI(A+12|0,i),xI(A+16|0,g),xI(A+20|0,r),xI(A+24|0,B),xI(A+28|0,I),0}function q(A,I,g,B,Q,E,a){var r,o,e,t,f,c,y,s=0;return h=r=h-560|0,ig(r+352|0,a),mI(r+288|0,E,32,0),V(r+352|0,r+320|0,32,0),V(r+352|0,g,B,Q),UI(r+352|0,r+224|0),o=n[(s=E)+32|0]|n[s+33|0]<<8|n[s+34|0]<<16|n[s+35|0]<<24,e=n[s+36|0]|n[s+37|0]<<8|n[s+38|0]<<16|n[s+39|0]<<24,t=n[s+40|0]|n[s+41|0]<<8|n[s+42|0]<<16|n[s+43|0]<<24,f=n[s+44|0]|n[s+45|0]<<8|n[s+46|0]<<16|n[s+47|0]<<24,c=n[s+48|0]|n[s+49|0]<<8|n[s+50|0]<<16|n[s+51|0]<<24,E=n[s+52|0]|n[s+53|0]<<8|n[s+54|0]<<16|n[s+55|0]<<24,y=n[s+60|0]|n[s+61|0]<<8|n[s+62|0]<<16|n[s+63|0]<<24,s=n[s+56|0]|n[s+57|0]<<8|n[s+58|0]<<16|n[s+59|0]<<24,C[A+56|0]=s,C[A+57|0]=s>>>8,C[A+58|0]=s>>>16,C[A+59|0]=s>>>24,C[A+60|0]=y,C[A+61|0]=y>>>8,C[A+62|0]=y>>>16,C[A+63|0]=y>>>24,C[A+48|0]=c,C[A+49|0]=c>>>8,C[A+50|0]=c>>>16,C[A+51|0]=c>>>24,C[A+52|0]=E,C[A+53|0]=E>>>8,C[A+54|0]=E>>>16,C[A+55|0]=E>>>24,C[A+40|0]=t,C[A+41|0]=t>>>8,C[A+42|0]=t>>>16,C[A+43|0]=t>>>24,C[A+44|0]=f,C[A+45|0]=f>>>8,C[A+46|0]=f>>>16,C[A+47|0]=f>>>24,C[0|(E=A+32|0)]=o,C[E+1|0]=o>>>8,C[E+2|0]=o>>>16,C[E+3|0]=o>>>24,C[E+4|0]=e,C[E+5|0]=e>>>8,C[E+6|0]=e>>>16,C[E+7|0]=e>>>24,G(r+224|0),CA(r,r+224|0),nI(A,r),ig(r+352|0,a),V(r+352|0,A,64,0),V(r+352|0,g,B,Q),UI(r+352|0,r+160|0),G(r+160|0),C[r+288|0]=248&n[r+288|0],C[r+319|0]=63&n[r+319|0]|64,function(A,I,g,B){var Q,E,i,a,r,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L,K,q,X,V,W,T,j,Z,O,z,$,AA,IA=0,gA=0,BA=0,QA=0,CA=0,EA=0,iA=0,nA=0,aA=0,rA=0,oA=0,eA=0,tA=0,fA=0,cA=0,yA=0,sA=0,wA=0,hA=0,DA=0,uA=0,pA=0,lA=0,FA=0,GA=0,kA=0,_A=0,HA=0,YA=0,bA=0,mA=0,vA=0,UA=0,SA=0,NA=0,MA=0,dA=0,PA=0,RA=0,JA=0,xA=0,LA=0,KA=0,qA=0,XA=0,VA=0,WA=0,TA=0,jA=0,ZA=0,OA=0;RA=HI(I),sA=n[I+2|0]|n[I+3|0]<<8|n[I+4|0]<<16|n[I+5|0]<<24,WA=HI(I+5|0),YA=p,wA=n[I+7|0]|n[I+8|0]<<8|n[I+9|0]<<16|n[I+10|0]<<24,hA=n[I+10|0]|n[I+11|0]<<8|n[I+12|0]<<16|n[I+13|0]<<24,mA=HI(I+13|0),oA=p,tA=n[I+15|0]|n[I+16|0]<<8|n[I+17|0]<<16|n[I+18|0]<<24,KA=HI(I+18|0),fA=p,bA=HI(I+21|0),iA=n[I+23|0]|n[I+24|0]<<8|n[I+25|0]<<16|n[I+26|0]<<24,aA=HI(I+26|0),QA=p,BA=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,NA=HI(g),pA=n[(I=g)+2|0]|n[I+3|0]<<8|n[I+4|0]<<16|n[I+5|0]<<24,XA=HI(I+5|0),rA=p,cA=n[I+7|0]|n[I+8|0]<<8|n[I+9|0]<<16|n[I+10|0]<<24,yA=n[I+10|0]|n[I+11|0]<<8|n[I+12|0]<<16|n[I+13|0]<<24,VA=HI(I+13|0),eA=p,CA=n[I+15|0]|n[I+16|0]<<8|n[I+17|0]<<16|n[I+18|0]<<24,qA=HI(I+18|0),gA=p,JA=HI(I+21|0),IA=n[I+23|0]|n[I+24|0]<<8|n[I+25|0]<<16|n[I+26|0]<<24,nA=HI(I+26|0),g=p,I=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,Z=HI(B),O=n[B+2|0]|n[B+3|0]<<8|n[B+4|0]<<16|n[B+5|0]<<24,z=HI(B+5|0),$=p,MA=n[B+7|0]|n[B+8|0]<<8|n[B+9|0]<<16|n[B+10|0]<<24,xA=n[B+10|0]|n[B+11|0]<<8|n[B+12|0]<<16|n[B+13|0]<<24,LA=HI(B+13|0),SA=p,vA=n[B+15|0]|n[B+16|0]<<8|n[B+17|0]<<16|n[B+18|0]<<24,TA=HI(B+18|0),_A=p,FA=HI(B+21|0),I=eg(Q=I>>>7|0,0,E=2097151&((3&QA)<<30|aA>>>2),0),EA=p,QA=I,I=eg(i=2097151&((3&g)<<30|nA>>>2),0,a=BA>>>7|0,0),g=p+EA|0,EA=BA=QA+I|0,BA=I>>>0>BA>>>0?g+1|0:g,I=eg(E,0,i,0),QA=p,IA=(g=eg(r=IA>>>5&2097151,0,a,0))+I|0,I=p+QA|0,g=I=g>>>0>IA>>>0?I+1|0:I,I=eg(Q,0,o=iA>>>5&2097151,0),g=p+g|0,iA=IA=I+IA|0,lA=g=I>>>0>IA>>>0?g+1|0:g,DA=(I=IA)- -1048576|0,uA=g=g-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+BA|0,aA=I=(g=(2097151&g)<<11|DA>>>21)>>>0>(BA=QA=g+EA|0)>>>0?I+1|0:I,GA=(I=BA)- -1048576|0,nA=EA=aA-((I>>>0<4293918720)-1|0)|0,QA=eg(Q,0,a,0),g=HA=(PA=p)-(((I=QA)>>>0<4293918720)-1|0)|0,IA=EA>>21,HA=(2097151&EA)<<11|GA>>>21,QA=I-(EA=-2097152&(dA=I- -1048576|0))|0,I=(PA-((I>>>0>>0)+g|0)|0)+IA|0,P=I=QA>>>0>(v=HA+QA|0)>>>0?I+1|0:I,EA=eg(v,I,-683901,-1),QA=p,R=I=g>>21,I=eg(S=(2097151&g)<<11|dA>>>21,I,136657,0),IA=p+QA|0,HA=g=I+EA|0,EA=I>>>0>g>>>0?IA+1|0:IA,I=eg(e=2097151&((1&eA)<<31|VA>>>1),0,E,0),g=p,IA=I,I=eg(t=yA>>>4&2097151,0,a,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(f=CA>>>6&2097151,0,o,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,m=I=0,QA=IA,IA=eg(c=2097151&JA,I,y=2097151&((7&fA)<<29|KA>>>3),0),I=p+g|0,I=IA>>>0>(QA=QA+IA|0)>>>0?I+1|0:I,IA=eg(s=2097151&((7&gA)<<29|qA>>>3),0,w=2097151&bA,0),g=p+I|0,g=IA>>>0>(QA=IA+QA|0)>>>0?g+1|0:g,I=eg(r,0,h=tA>>>6&2097151,0),IA=p+g|0,IA=I>>>0>(QA=I+QA|0)>>>0?IA+1|0:IA,g=eg(i,0,D=2097151&((1&oA)<<31|mA>>>1),0),I=p+IA|0,g=g>>>0>(IA=QA=g+QA|0)>>>0?I+1|0:I,I=eg(Q,0,u=hA>>>4&2097151,0),g=p+g|0,fA=IA=I+IA|0,QA=I>>>0>IA>>>0?g+1|0:g,I=eg(E,0,t,0),g=p,gA=(IA=I)+(I=eg(l=cA>>>7&2097151,0,a,0))|0,IA=p+g|0,IA=I>>>0>gA>>>0?IA+1|0:IA,g=eg(o,0,e,0),I=p+IA|0,I=g>>>0>(gA=g+gA|0)>>>0?I+1|0:I,IA=eg(f,0,w,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,I=eg(c,m,h,0),g=p+g|0,g=I>>>0>(IA=I+gA|0)>>>0?g+1|0:g,gA=(I=IA)+(IA=eg(y,0,s,0))|0,I=p+g|0,I=IA>>>0>gA>>>0?I+1|0:I,g=eg(r,0,D,0),IA=p+I|0,IA=g>>>0>(gA=g+gA|0)>>>0?IA+1|0:IA,g=eg(i,0,u,0),I=p+IA|0,g=g>>>0>(IA=gA=g+gA|0)>>>0?I+1|0:I,I=eg(Q,0,F=wA>>>7&2097151,0),g=p+g|0,yA=IA=I+IA|0,CA=g=I>>>0>IA>>>0?g+1|0:g,eA=(I=IA)- -1048576|0,gA=g=g-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+QA|0,g=I=(g=(2097151&g)<<11|eA>>>21)>>>0>(cA=g+fA|0)>>>0?I+1|0:I,I=I+EA|0,I=(IA=QA=cA)>>>0>(cA=IA+HA|0)>>>0?I+1|0:I,EA=(EA=g)-(((g=QA)>>>0<4293918720)-1|0)|0,oA=g- -1048576|0,tA=(g=IA=cA)-(IA=-2097152&oA)|0,fA=I-((QA=EA)+(g>>>0>>0)|0)|0,N=BA-(I=-2097152&GA)|0,J=g=aA-((I>>>0>BA>>>0)+nA|0)|0,I=eg(S,R,-997805,-1),IA=p+CA|0,IA=I>>>0>(BA=I+yA|0)>>>0?IA+1|0:IA,CA=(I=BA)+(BA=eg(v,P,136657,0))|0,I=p+IA|0,g=eg(N,g,-683901,-1),I=p+(BA>>>0>CA>>>0?I+1|0:I)|0,I=g>>>0>(IA=g+CA|0)>>>0?I+1|0:I,EA=IA-(g=-2097152&eA)|0,CA=I-((g>>>0>IA>>>0)+gA|0)|0,I=eg(E,0,l,0),IA=p,BA=(g=eg(G=2097151&((3&rA)<<30|XA>>>2),0,a,0))+I|0,I=p+IA|0,I=g>>>0>BA>>>0?I+1|0:I,IA=eg(o,0,t,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,I=eg(e,0,w,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(f,0,y,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,IA=eg(c,m,D,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,IA=eg(s,0,h,0),I=p+g|0,I=IA>>>0>(BA=IA+BA|0)>>>0?I+1|0:I,IA=eg(r,0,u,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,I=eg(i,0,F,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(Q,0,k=2097151&((3&YA)<<30|WA>>>2),0),I=p+IA|0,BA=g>>>0>(gA=BA=g+BA|0)>>>0?I+1|0:I,I=eg(E,0,G,0),g=p,IA=I,I=eg(_=pA>>>5&2097151,0,a,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,nA=(I=eg(o,0,l,0))+IA|0,IA=p+g|0,IA=I>>>0>nA>>>0?IA+1|0:IA,g=eg(t,0,w,0),I=p+IA|0,I=g>>>0>(nA=g+nA|0)>>>0?I+1|0:I,g=eg(e,0,y,0),I=p+I|0,I=g>>>0>(IA=g+nA|0)>>>0?I+1|0:I,nA=(g=IA)+(IA=eg(f,0,h,0))|0,g=p+I|0,g=IA>>>0>nA>>>0?g+1|0:g,I=eg(c,m,u,0),g=p+g|0,g=I>>>0>(IA=I+nA|0)>>>0?g+1|0:g,nA=(I=eg(s,0,D,0))+IA|0,IA=p+g|0,IA=I>>>0>nA>>>0?IA+1|0:IA,g=eg(r,0,F,0),I=p+IA|0,I=g>>>0>(nA=g+nA|0)>>>0?I+1|0:I,g=eg(i,0,k,0),I=p+I|0,g=I=g>>>0>(IA=g+nA|0)>>>0?I+1|0:I,I=eg(Q,0,H=sA>>>5&2097151,0),g=p+g|0,cA=IA=I+IA|0,XA=g=I>>>0>IA>>>0?g+1|0:g,AA=(I=IA)- -1048576|0,VA=IA=g-((I>>>0<4293918720)-1|0)|0,I=(I=IA>>21)+BA|0,yA=IA=(g=(2097151&IA)<<11|AA>>>21)+gA|0,qA=I=g>>>0>IA>>>0?I+1|0:I,WA=(I=IA)- -1048576|0,JA=IA=qA-((I>>>0<4293918720)-1|0)|0,g=(I=IA>>21)+CA|0,eA=BA=(IA=(2097151&IA)<<11|WA>>>21)+EA|0,PA=g=IA>>>0>BA>>>0?g+1|0:g,mA=(I=BA)- -1048576|0,HA=IA=g-((I>>>0<4293918720)-1|0)|0,I=(I=IA>>21)+fA|0,CA=IA=(g=(2097151&IA)<<11|mA>>>21)+tA|0,sA=IA=(GA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,aA=(2097151&IA)<<11|(bA=I- -1048576|0)>>>21,gA=IA>>21,I=eg(E,0,f,0),g=p,IA=I,I=eg(a,0,e,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(c,m,w,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,BA=(I=IA)+(IA=eg(o,0,s,0))|0,I=p+g|0,I=IA>>>0>BA>>>0?I+1|0:I,g=eg(r,0,y,0),IA=p+I|0,IA=g>>>0>(BA=g+BA|0)>>>0?IA+1|0:IA,g=eg(i,0,h,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,IA=eg(Q,0,D,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,IA=eg(S,R,-683901,-1),g=(I=g)+p|0,g=IA>>>0>(EA=BA+IA|0)>>>0?g+1|0:g,IA=EA,EA=(EA=I)-(((I=BA)>>>0<4293918720)-1|0)|0,pA=I- -1048576|0,nA=(I=IA)-(IA=-2097152&pA)|0,IA=g-((BA=EA)+(I>>>0>>0)|0)|0,I=(I=QA>>21)+IA|0,I=(g=(2097151&QA)<<11|oA>>>21)>>>0>(QA=g+nA|0)>>>0?I+1|0:I,EA=(g=QA)-(IA=-2097152&(rA=g- -1048576|0))|0,IA=(I-((g>>>0>>0)+(QA=nA=I-((g>>>0<4293918720)-1|0)|0)|0)|0)+gA|0,x=aA=EA+aA|0,L=IA=EA>>>0>aA>>>0?IA+1|0:IA,nA=eg(aA,IA,-683901,-1),EA=p,g=eg(o,0,c,m),I=p,IA=g,g=eg(a,0,f,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(E,0,s,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,IA=eg(r,0,w,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,IA=eg(i,0,y,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,I=eg(Q,0,h,0),IA=p+g|0,IA=I>>>0>(gA=I+gA|0)>>>0?IA+1|0:IA,I=(I=BA>>21)+IA|0,wA=gA=(I=(g=(2097151&BA)<<11|pA>>>21)>>>0>(BA=g+gA|0)>>>0?I+1|0:I)-(((g=BA)>>>0<4293918720)-1|0)|0,BA=g-(IA=-2097152&(UA=g- -1048576|0))|0,IA=(I-((g>>>0>>0)+gA|0)|0)+(QA>>21)|0,K=BA=(I=(2097151&QA)<<11|rA>>>21)+BA|0,q=IA=I>>>0>BA>>>0?IA+1|0:IA,g=eg(BA,IA,136657,0),I=p+EA|0,KA=IA=g+nA|0,hA=g>>>0>IA>>>0?I+1|0:I,g=eg(w,0,_,0),I=p,IA=g,g=eg(Y=2097151&NA,0,o,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,BA=(g=IA)+(IA=eg(y,0,G,0))|0,g=p+I|0,g=IA>>>0>BA>>>0?g+1|0:g,I=eg(h,0,l,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(t,0,D,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,IA=eg(e,0,u,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,IA=eg(f,0,F,0),I=p+g|0,I=IA>>>0>(BA=IA+BA|0)>>>0?I+1|0:I,IA=eg(c,m,H,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,I=eg(s,0,k,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(r,0,b=2097151&RA,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,QA=BA=(IA=(n[B+23|0]|n[B+24|0]<<8|n[B+25|0]<<16|n[B+26|0]<<24)>>>5&2097151)+BA|0,BA=IA>>>0>BA>>>0?I+1|0:I,I=eg(y,0,_,0),g=p,IA=I,I=eg(w,0,Y,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,gA=(I=eg(h,0,G,0))+IA|0,IA=p+g|0,IA=I>>>0>gA>>>0?IA+1|0:IA,g=eg(D,0,l,0),I=p+IA|0,I=g>>>0>(gA=g+gA|0)>>>0?I+1|0:I,g=eg(t,0,u,0),I=p+I|0,I=g>>>0>(IA=g+gA|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(e,0,F,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,I=eg(f,0,k,0),g=p+g|0,g=I>>>0>(IA=I+gA|0)>>>0?g+1|0:g,gA=(I=eg(c,m,b,0))+IA|0,IA=p+g|0,IA=I>>>0>gA>>>0?IA+1|0:IA,g=eg(s,0,H,0),I=p+IA|0,I=g>>>0>(gA=g+gA|0)>>>0?I+1|0:I,gA=IA=(g=2097151&FA)+gA|0,tA=IA=(oA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(YA=I- -1048576|0)>>>21,IA=(IA>>>21|0)+BA|0,rA=IA=I>>>0>(QA=I+QA|0)>>>0?IA+1|0:IA,NA=iA-(I=-2097152&DA)|0,FA=lA-((I>>>0>iA>>>0)+uA|0)|0,g=eg(E,0,r,0),I=p,IA=g,g=eg(a,0,c,m),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,BA=(g=IA)+(IA=eg(i,0,o,0))|0,g=p+I|0,g=IA>>>0>BA>>>0?g+1|0:g,I=eg(Q,0,w,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,EA=BA,I=eg(a,0,s,0),g=p,BA=I,I=eg(E,0,c,m),g=p+g|0,g=I>>>0>(BA=BA+I|0)>>>0?g+1|0:g,iA=(I=BA)+(BA=eg(o,0,r,0))|0,I=p+g|0,I=BA>>>0>iA>>>0?I+1|0:I,g=eg(i,0,w,0),I=p+I|0,I=g>>>0>(BA=g+iA|0)>>>0?I+1|0:I,iA=(g=BA)+(BA=eg(Q,0,y,0))|0,g=p+I|0,aA=g=BA>>>0>iA>>>0?g+1|0:g,lA=(I=BA=iA)- -1048576|0,nA=iA=g-((I>>>0<4293918720)-1|0)|0,g=(I=iA>>21)+IA|0,EA=g=(IA=EA=(iA=(2097151&iA)<<11|lA>>>21)+EA|0)>>>0>>0?g+1|0:g,uA=(I=IA)- -1048576|0,g=(I=(iA=DA=g-((I>>>0<4293918720)-1|0)|0)>>21)+FA|0,X=g=(DA=(2097151&iA)<<11|uA>>>21)>>>0>(U=NA=DA+NA|0)>>>0?g+1|0:g,FA=eg(U,g,470296,0),DA=p,M=IA-(g=-2097152&uA)|0,dA=I=EA-((g>>>0>IA>>>0)+iA|0)|0,g=eg(N,J,666643,0),IA=p+DA|0,IA=g>>>0>(iA=g+FA|0)>>>0?IA+1|0:IA,g=eg(M,I,654183,0),I=p+IA|0,g=g>>>0>(EA=iA=g+iA|0)>>>0?I+1|0:I,I=BA-(IA=-2097152&lA)|0,IA=(wA>>21)+(iA=aA-((IA>>>0>BA>>>0)+nA|0)|0)|0,V=nA=(BA=(2097151&wA)<<11|UA>>>21)+I|0,RA=IA=BA>>>0>nA>>>0?IA+1|0:IA,jA=QA- -1048576|0,BA=iA=rA-((QA>>>0<4293918720)-1|0)|0,I=eg(nA,IA,-997805,-1),g=p+g|0,I=(g=I>>>0>(IA=I+EA|0)>>>0?g+1|0:g)+rA|0,I=IA>>>0>(QA=IA+QA|0)>>>0?I+1|0:I,FA=(IA=QA)-(g=-2097152&jA)|0,DA=I-((g>>>0>IA>>>0)+BA|0)|0,I=eg(M,dA,470296,0),g=p,QA=(IA=I)+(I=eg(U,X,666643,0))|0,IA=p+g|0,IA=I>>>0>QA>>>0?IA+1|0:IA,g=eg(nA,RA,654183,0),I=p+IA|0,g=oA+(g>>>0>(QA=g+QA|0)>>>0?I+1|0:I)|0,rA=(IA=gA+QA|0)-(I=-2097152&YA)|0,iA=(g=IA>>>0>>0?g+1|0:g)-((I>>>0>IA>>>0)+tA|0)|0,g=eg(h,0,_,0),I=p,IA=g,g=eg(y,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,g=eg(D,0,G,0),I=p+I|0,I=g>>>0>(IA=g+IA|0)>>>0?I+1|0:I,QA=(g=IA)+(IA=eg(u,0,l,0))|0,g=p+I|0,g=IA>>>0>QA>>>0?g+1|0:g,I=eg(t,0,F,0),IA=p+g|0,IA=I>>>0>(QA=I+QA|0)>>>0?IA+1|0:IA,I=eg(e,0,k,0),g=p+IA|0,g=I>>>0>(QA=I+QA|0)>>>0?g+1|0:g,IA=eg(f,0,H,0),I=p+g|0,I=IA>>>0>(QA=IA+QA|0)>>>0?I+1|0:I,g=eg(s,0,b,0),I=p+I|0,I=g>>>0>(IA=g+QA|0)>>>0?I+1|0:I,g=IA,QA=(IA=2097151&((7&_A)<<29|TA>>>3))>>>0>(gA=QA=g+IA|0)>>>0?I+1|0:I,I=eg(D,0,_,0),g=p,EA=(IA=I)+(I=eg(h,0,Y,0))|0,IA=p+g|0,IA=I>>>0>EA>>>0?IA+1|0:IA,g=eg(u,0,G,0),I=p+IA|0,I=g>>>0>(EA=g+EA|0)>>>0?I+1|0:I,IA=eg(F,0,l,0),g=p+I|0,g=IA>>>0>(EA=IA+EA|0)>>>0?g+1|0:g,IA=eg(t,0,k,0),I=p+g|0,I=IA>>>0>(EA=IA+EA|0)>>>0?I+1|0:I,IA=eg(e,0,H,0),g=p+I|0,g=IA>>>0>(EA=IA+EA|0)>>>0?g+1|0:g,I=eg(f,0,b,0),IA=p+g|0,I=I>>>0>(g=EA=I+EA|0)>>>0?IA+1|0:IA,lA=IA=EA+(g=vA>>>6&2097151)|0,fA=IA=(aA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(uA=I- -1048576|0)>>>21,IA=(IA>>>21|0)+QA|0,nA=IA=I>>>0>(gA=I+gA|0)>>>0?IA+1|0:IA,wA=(I=gA)- -1048576|0,EA=IA=IA-((I>>>0<4293918720)-1|0)|0,I=(g=IA>>>21|0)+iA|0,oA=QA=(IA=(2097151&IA)<<11|wA>>>21)+rA|0,pA=IA=(iA=I=IA>>>0>QA>>>0?I+1|0:I)-(((I=QA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(tA=I- -1048576|0)>>>21,IA=(IA>>21)+DA|0,I=(g=IA=I>>>0>(QA=I+FA|0)>>>0?IA+1|0:IA)+hA|0,rA=(rA=g)-(((g=QA)>>>0<4293918720)-1|0)|0,ZA=g- -1048576|0,OA=(g=IA=_A=QA+KA|0)-(IA=-2097152&ZA)|0,kA=(I=QA>>>0>_A>>>0?I+1|0:I)-((QA=rA)+(g>>>0>>0)|0)|0,I=eg(K,q,-997805,-1),g=p+iA|0,UA=IA=I+oA|0,rA=I>>>0>IA>>>0?g+1|0:g,g=eg(V,RA,470296,0),I=p,IA=g,g=eg(M,dA,666643,0),I=p+I|0,I=(I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I)+nA|0,I=(g=IA+gA|0)>>>0>>0?I+1|0:I,wA=(IA=g)-(g=-2097152&wA)|0,hA=I-((g>>>0>IA>>>0)+EA|0)|0,I=eg(V,RA,666643,0),g=p+aA|0,oA=IA=I+lA|0,iA=I>>>0>IA>>>0?g+1|0:g,g=eg(u,0,_,0),I=p,IA=g,g=eg(D,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,g=eg(F,0,G,0),I=p+I|0,I=g>>>0>(IA=g+IA|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(k,0,l,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,I=eg(t,0,H,0),IA=p+g|0,IA=I>>>0>(gA=I+gA|0)>>>0?IA+1|0:IA,I=eg(e,0,b,0),g=p+IA|0,I=g=I>>>0>(gA=I+gA|0)>>>0?g+1|0:g,EA=gA=(IA=2097151&((1&SA)<<31|LA>>>1))+gA|0,gA=IA>>>0>gA>>>0?I+1|0:I,g=eg(F,0,_,0),I=p,IA=g,g=eg(u,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,nA=(g=IA)+(IA=eg(k,0,G,0))|0,g=p+I|0,g=IA>>>0>nA>>>0?g+1|0:g,I=eg(H,0,l,0),g=p+g|0,g=I>>>0>(IA=I+nA|0)>>>0?g+1|0:g,nA=(I=eg(t,0,b,0))+IA|0,IA=p+g|0,I=I>>>0>(g=nA)>>>0?IA+1|0:IA,aA=IA=nA+(g=xA>>>4&2097151)|0,xA=IA=(YA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(TA=I- -1048576|0)>>>21,IA=(IA>>>21|0)+gA|0,nA=EA=I+EA|0,SA=IA=I>>>0>EA>>>0?IA+1|0:IA,KA=(I=EA)- -1048576|0,vA=IA=IA-((I>>>0<4293918720)-1|0)|0,I=(g=IA>>>21|0)+iA|0,lA=IA=(_A=(IA=(IA=(2097151&IA)<<11|KA>>>21)>>>0>(g=gA=IA+oA|0)>>>0?I+1|0:I)-(((I=-2097152&uA)>>>0>g>>>0)+fA|0)|0)-(((I=EA=g-I|0)>>>0<4293918720)-1|0)|0,g=(g=IA>>21)+hA|0,FA=IA=(I=(2097151&IA)<<11|(NA=I- -1048576|0)>>>21)+wA|0,uA=g=I>>>0>IA>>>0?g+1|0:g,DA=(I=IA)- -1048576|0,wA=gA=g-((I>>>0<4293918720)-1|0)|0,d=CA-(I=-2097152&bA)|0,LA=IA=GA-((I>>>0>CA>>>0)+sA|0)|0,I=(g=gA>>21)+rA|0,I=(gA=(2097151&gA)<<11|DA>>>21)>>>0>(CA=gA+UA|0)>>>0?I+1|0:I,iA=(gA=eg(x,L,136657,0))+(CA-(g=-2097152&tA)|0)|0,g=p+(I-((g>>>0>CA>>>0)+pA|0)|0)|0,g=gA>>>0>iA>>>0?g+1|0:g,IA=eg(d,IA,-683901,-1),I=p+g|0,iA=gA=IA+iA|0,oA=IA=(hA=I=IA>>>0>gA>>>0?I+1|0:I)-(((I=gA)>>>0<4293918720)-1|0)|0,g=(g=IA>>21)+kA|0,CA=IA=(I=(2097151&IA)<<11|(bA=I- -1048576|0)>>>21)+OA|0,tA=g=I>>>0>IA>>>0?g+1|0:g,fA=IA=g-(((I=IA)>>>0<4293918720)-1|0)|0,UA=(2097151&IA)<<11|(GA=I- -1048576|0)>>>21,pA=IA>>21,g=eg(o,0,_,0),I=p,IA=g,g=eg(E,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,gA=(g=eg(w,0,G,0))+IA|0,IA=p+I|0,IA=g>>>0>gA>>>0?IA+1|0:IA,I=eg(y,0,l,0),g=p+IA|0,g=I>>>0>(gA=I+gA|0)>>>0?g+1|0:g,IA=eg(t,0,h,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,IA=eg(e,0,D,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,IA=eg(f,0,u,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,g=eg(c,m,k,0),IA=p+I|0,IA=g>>>0>(gA=g+gA|0)>>>0?IA+1|0:IA,I=eg(s,0,F,0),g=p+IA|0,g=I>>>0>(gA=I+gA|0)>>>0?g+1|0:g,IA=eg(r,0,H,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,IA=eg(i,0,b,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,I=HI(B+26|0),IA=2097151&((3&(IA=p))<<30|I>>>2),I=g,sA=gA=IA+gA|0,gA=I=IA>>>0>gA>>>0?I+1|0:I,I=eg(N,J,470296,0),g=p,kA=(IA=I)+(I=eg(v,P,666643,0))|0,IA=p+g|0,IA=I>>>0>kA>>>0?IA+1|0:IA,I=eg(U,X,654183,0),g=p+IA|0,g=I>>>0>(kA=I+kA|0)>>>0?g+1|0:g,I=eg(M,dA,-997805,-1),g=p+g|0,g=I>>>0>(IA=I+kA|0)>>>0?g+1|0:g,kA=(I=IA)+(IA=eg(V,RA,136657,0))|0,I=p+g|0,I=(I=IA>>>0>kA>>>0?I+1|0:I)+gA|0,I=(g=kA)>>>0>(IA=g+sA|0)>>>0?I+1|0:I,g=IA,IA=I,W=(I=sA)- -1048576|0,gA=rA=gA-((I>>>0<4293918720)-1|0)|0,rA=g,IA=(g=BA>>21)+IA|0,IA=(I=(2097151&BA)<<11|jA>>>21)>>>0>(BA=rA+I|0)>>>0?IA+1|0:IA,g=BA-(I=-2097152&W)|0,sA=eg(K,q,-683901,-1),I=(BA=IA-((I>>>0>BA>>>0)+gA|0)|0)+p|0,IA=I=sA>>>0>(kA=g+sA|0)>>>0?I+1|0:I,rA=BA-(((I=g)>>>0<4293918720)-1|0)|0,T=I- -1048576|0,IA=(g=QA>>21)+IA|0,IA=(I=(2097151&QA)<<11|ZA>>>21)>>>0>(QA=I+(sA=kA)|0)>>>0?IA+1|0:IA,sA=g=QA-(I=-2097152&T)|0,I=(QA=IA-((I>>>0>QA>>>0)+(BA=rA)|0)|0)+pA|0,j=g- -1048576|0,rA=QA-((g>>>0<4293918720)-1|0)|0,jA=(g=IA=UA=g+UA|0)-(IA=-2097152&j)|0,ZA=(sA>>>0>g>>>0?I+1|0:I)-((g>>>0>>0)+(QA=rA)|0)|0,OA=CA-(I=-2097152&GA)|0,kA=tA-((I>>>0>CA>>>0)+fA|0)|0,UA=iA-(I=-2097152&bA)|0,bA=hA-((I>>>0>iA>>>0)+oA|0)|0,g=eg(K,q,654183,0),I=p+uA|0,I=g>>>0>(IA=g+FA|0)>>>0?I+1|0:I,iA=((CA=IA)-(g=-2097152&DA)|0)+(IA=eg(x,L,-997805,-1))|0,g=p+(I-((g>>>0>CA>>>0)+wA|0)|0)|0,g=IA>>>0>iA>>>0?g+1|0:g,IA=eg(d,LA,136657,0),I=p+g|0,GA=CA=IA+iA|0,iA=IA>>>0>CA>>>0?I+1|0:I,sA=eA-(I=-2097152&mA)|0,hA=PA-((I>>>0>eA>>>0)+HA|0)|0,I=eg(v,P,-997805,-1),g=p,IA=I,I=eg(S,R,654183,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(N,J,136657,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,CA=(I=IA)+(IA=eg(U,X,-683901,-1))|0,I=p+g|0,IA=qA+(IA>>>0>CA>>>0?I+1|0:I)|0,oA=(g=CA+yA|0)-(I=-2097152&WA)|0,tA=(IA=g>>>0>>0?IA+1|0:IA)-((I>>>0>g>>>0)+JA|0)|0,I=eg(v,P,654183,0),g=p,IA=I,I=eg(S,R,470296,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,CA=(I=IA)+(IA=eg(N,J,-997805,-1))|0,I=p+g|0,g=CA+cA|0,IA=XA+(IA>>>0>CA>>>0?I+1|0:I)|0,CA=(I=eg(U,X,136657,0))+g|0,g=p+(g>>>0>>0?IA+1|0:IA)|0,g=I>>>0>CA>>>0?g+1|0:g,IA=eg(M,dA,-683901,-1),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,yA=(IA=CA)-(g=-2097152&AA)|0,eA=I-((g>>>0>IA>>>0)+VA|0)|0,g=eg(E,0,_,0),I=p,IA=g,g=eg(a,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,CA=(g=IA)+(IA=eg(o,0,G,0))|0,g=p+I|0,g=IA>>>0>CA>>>0?g+1|0:g,IA=eg(w,0,l,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,g=eg(t,0,y,0),IA=p+I|0,IA=g>>>0>(CA=g+CA|0)>>>0?IA+1|0:IA,I=eg(e,0,h,0),g=p+IA|0,g=I>>>0>(CA=I+CA|0)>>>0?g+1|0:g,IA=eg(f,0,D,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,IA=eg(c,m,F,0),g=p+I|0,g=IA>>>0>(CA=IA+CA|0)>>>0?g+1|0:g,IA=eg(s,0,u,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,g=eg(r,0,k,0),IA=p+I|0,IA=g>>>0>(CA=g+CA|0)>>>0?IA+1|0:IA,I=eg(Q,0,b,0),g=p+IA|0,g=I>>>0>(CA=I+CA|0)>>>0?g+1|0:g,IA=eg(i,0,H,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,g=(B=(n[B+28|0]|n[B+29|0]<<8|n[B+30|0]<<16|n[B+31|0]<<24)>>>7|0)>>>0>(IA=B+CA|0)>>>0?I+1|0:I,I=IA,IA=gA>>21,gA=I+(B=(2097151&gA)<<11|W>>>21)|0,I=g+IA|0,CA=gA,fA=I=B>>>0>gA>>>0?I+1|0:I,uA=(I=gA)- -1048576|0,pA=g=fA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+eA|0,gA=B=(g=(2097151&g)<<11|uA>>>21)+yA|0,rA=I=g>>>0>B>>>0?I+1|0:I,wA=(I=B)- -1048576|0,cA=g=rA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+tA|0,yA=I=(g=(2097151&g)<<11|wA>>>21)>>>0>(B=g+oA|0)>>>0?I+1|0:I,tA=(I=B)- -1048576|0,eA=g=yA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+hA|0,mA=oA=(g=(2097151&g)<<11|tA>>>21)+sA|0,HA=I=g>>>0>oA>>>0?I+1|0:I,I=eg(oA,I,-683901,-1),g=p+iA|0,oA=IA=I+GA|0,iA=I>>>0>IA>>>0?g+1|0:g,FA=B-(I=-2097152&tA)|0,GA=eA=yA-((I>>>0>B>>>0)+eA|0)|0,g=eg(K,q,470296,0)+EA|0,I=_A+p|0,I=g>>>0>>0?I+1|0:I,EA=((IA=g)-(B=-2097152&NA)|0)+(g=eg(x,L,654183,0))|0,IA=p+(I-((B>>>0>IA>>>0)+lA|0)|0)|0,I=eg(d,LA,-997805,-1),g=p+(g>>>0>EA>>>0?IA+1|0:IA)|0,g=I>>>0>(B=I+EA|0)>>>0?g+1|0:g,IA=(I=B)+(B=eg(mA,HA,136657,0))|0,I=p+g|0,I=B>>>0>IA>>>0?I+1|0:I,B=eg(FA,eA,-683901,-1),g=p+I|0,yA=g=B>>>0>(IA=B+IA|0)>>>0?g+1|0:g,hA=(I=IA)- -1048576|0,eA=B=g-((I>>>0<4293918720)-1|0)|0,I=(I=B>>21)+iA|0,EA=I=(g=(2097151&B)<<11|hA>>>21)>>>0>(B=g+oA|0)>>>0?I+1|0:I,tA=(I=B)- -1048576|0,g=(I=(iA=oA=EA-((I>>>0<4293918720)-1|0)|0)>>21)+bA|0,bA=lA=(oA=(2097151&iA)<<11|tA>>>21)+UA|0,oA=oA>>>0>lA>>>0?g+1|0:g,XA=B-(I=-2097152&tA)|0,VA=EA-((I>>>0>B>>>0)+iA|0)|0,JA=IA-(I=-2097152&hA)|0,PA=yA-((I>>>0>IA>>>0)+eA|0)|0,I=eg(K,q,666643,0),IA=p+(SA-(((g=-2097152&KA)>>>0>nA>>>0)+vA|0)|0)|0,IA=I>>>0>(B=I+(nA-g|0)|0)>>>0?IA+1|0:IA,I=eg(x,L,470296,0),g=p+IA|0,g=I>>>0>(B=I+B|0)>>>0?g+1|0:g,IA=(I=B)+(B=eg(d,LA,654183,0))|0,I=p+g|0,eA=IA,B=B>>>0>IA>>>0?I+1|0:I,nA=gA-(I=-2097152&wA)|0,iA=rA-((I>>>0>gA>>>0)+cA|0)|0,g=eg(v,P,470296,0),I=p,IA=g,g=eg(S,R,666643,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(N,J,654183,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,IA=eg(U,X,-997805,-1),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,g=eg(M,dA,136657,0),IA=p+I|0,IA=g>>>0>(gA=g+gA|0)>>>0?IA+1|0:IA,I=eg(V,RA,-683901,-1),g=p+IA|0,I=fA+(I>>>0>(gA=I+gA|0)>>>0?g+1|0:g)|0,I=(IA=gA+CA|0)>>>0>>0?I+1|0:I,g=(gA=IA)-(IA=-2097152&uA)|0,IA=I-((IA>>>0>gA>>>0)+pA|0)|0,I=(I=BA>>21)+IA|0,EA=BA=(gA=g)+(g=(2097151&BA)<<11|T>>>21)|0,cA=IA=(rA=I=g>>>0>BA>>>0?I+1|0:I)-(((I=BA)>>>0<4293918720)-1|0)|0,g=(2097151&IA)<<11|(_A=I- -1048576|0)>>>21,IA=(IA>>21)+iA|0,DA=BA=g+nA|0,sA=IA=g>>>0>BA>>>0?IA+1|0:IA,I=eg(BA,IA,-683901,-1),g=p+B|0,g=I>>>0>(IA=I+eA|0)>>>0?g+1|0:g,B=eg(mA,HA,-997805,-1),I=p+g|0,I=B>>>0>(IA=B+IA|0)>>>0?I+1|0:I,B=eg(FA,GA,136657,0),g=p+I|0,nA=IA=B+IA|0,gA=B>>>0>IA>>>0?g+1|0:g,g=eg(k,0,_,0),I=p,B=g,g=eg(F,0,Y,0),I=p+I|0,I=g>>>0>(B=B+g|0)>>>0?I+1|0:I,g=eg(H,0,G,0),IA=p+I|0,IA=g>>>0>(B=g+B|0)>>>0?IA+1|0:IA,I=eg(b,0,l,0),g=p+IA|0,I=g=I>>>0>(B=I+B|0)>>>0?g+1|0:g,CA=B=(g=MA>>>7&2097151)+B|0,B=g>>>0>B>>>0?I+1|0:I,I=eg(H,0,_,0),g=p,IA=I,I=eg(k,0,Y,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(b,0,G,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,BA=(I=IA)+(IA=2097151&((3&$)<<30|z>>>2))|0,I=g,iA=BA,tA=IA=(BA=I=IA>>>0>BA>>>0?I+1|0:I)-(((I=iA)>>>0<4293918720)-1|0)|0,g=(g=IA>>>21|0)+B|0,CA=IA=(I=(2097151&IA)<<11|(vA=I- -1048576|0)>>>21)+CA|0,fA=g=I>>>0>IA>>>0?g+1|0:g,lA=(I=IA)- -1048576|0,yA=B=g-((I>>>0<4293918720)-1|0)|0,I=(g=B>>>21|0)+YA|0,I=(B=aA+((2097151&B)<<11|lA>>>21)|0)>>>0>>0?I+1|0:I,aA=((IA=B)-(g=-2097152&TA)|0)+(B=eg(x,L,666643,0))|0,g=p+(I-((g>>>0>IA>>>0)+xA|0)|0)|0,g=B>>>0>aA>>>0?g+1|0:g,I=eg(d,LA,470296,0),g=p+g|0,g=I>>>0>(B=I+aA|0)>>>0?g+1|0:g,IA=(I=B)+(B=eg(DA,sA,136657,0))|0,I=p+g|0,I=B>>>0>IA>>>0?I+1|0:I,g=eg(mA,HA,654183,0),I=p+I|0,I=g>>>0>(B=g+IA|0)>>>0?I+1|0:I,g=eg(FA,GA,-997805,-1),IA=p+I|0,uA=B=g+B|0,eA=IA=g>>>0>B>>>0?IA+1|0:IA,wA=(I=B)- -1048576|0,aA=B=IA-((I>>>0<4293918720)-1|0)|0,g=(I=B>>21)+gA|0,gA=IA=(B=(2097151&B)<<11|wA>>>21)+nA|0,B=g=B>>>0>IA>>>0?g+1|0:g,nA=IA=g-(((I=IA)>>>0<4293918720)-1|0)|0,g=(2097151&IA)<<11|(hA=I- -1048576|0)>>>21,IA=(IA>>21)+PA|0,qA=pA=g+JA|0,pA=g>>>0>pA>>>0?IA+1|0:IA,IA=QA>>21,QA=(I=(2097151&QA)<<11|j>>>21)+(EA-(g=-2097152&_A)|0)|0,g=IA+(rA-((g>>>0>EA>>>0)+cA|0)|0)|0,rA=g=I>>>0>QA>>>0?g+1|0:g,cA=g=g-(((I=QA)>>>0<4293918720)-1|0)|0,SA=IA=g>>21,g=eg(MA=(2097151&g)<<11|(_A=I- -1048576|0)>>>21,IA,-683901,-1),I=p+B|0,I=g>>>0>(IA=g+gA|0)>>>0?I+1|0:I,JA=IA-(g=-2097152&hA)|0,PA=I-((g>>>0>IA>>>0)+nA|0)|0,I=eg(MA,SA,136657,0),g=p+eA|0,g=I>>>0>(B=I+uA|0)>>>0?g+1|0:g,YA=B-(I=-2097152&wA)|0,xA=g-((I>>>0>B>>>0)+aA|0)|0,B=(I=eg(d,LA,666643,0))+(CA-(g=-2097152&lA)|0)|0,g=p+(fA-((g>>>0>CA>>>0)+yA|0)|0)|0,g=I>>>0>B>>>0?g+1|0:g,IA=(I=B)+(B=eg(DA,sA,-997805,-1))|0,I=p+g|0,I=B>>>0>IA>>>0?I+1|0:I,B=(g=eg(mA,HA,470296,0))+IA|0,IA=p+I|0,IA=g>>>0>B>>>0?IA+1|0:IA,I=eg(FA,GA,654183,0),g=p+IA|0,fA=B=I+B|0,EA=I>>>0>B>>>0?g+1|0:g,gA=BA,g=eg(b,0,_,0),I=p,B=g,g=eg(H,0,Y,0),I=p+I|0,I=g>>>0>(B=B+g|0)>>>0?I+1|0:I,g=B,g=(B=O>>>5&2097151)>>>0>(IA=g+B|0)>>>0?I+1|0:I,B=2097151&Z,BA=eg(b,0,Y,0)+B|0,I=p,eA=B=(yA=I=B>>>0>BA>>>0?I+1|0:I)-(((I=BA)>>>0<4293918720)-1|0)|0,CA=IA,g=g+(IA=B>>>21|0)|0,aA=g=(I=(2097151&B)<<11|(lA=I- -1048576|0)>>>21)>>>0>(B=CA+I|0)>>>0?g+1|0:g,uA=(I=B)- -1048576|0,nA=g=g-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>>21|0)+gA|0,I=(g=(2097151&g)<<11|uA>>>21)>>>0>(CA=g+iA|0)>>>0?I+1|0:I,CA=(IA=eg(DA,sA,654183,0))+((gA=CA)-(g=-2097152&vA)|0)|0,g=p+(I-((16383&tA)+(g>>>0>gA>>>0)|0)|0)|0,I=eg(mA,HA,666643,0),IA=p+(IA>>>0>CA>>>0?g+1|0:g)|0,IA=I>>>0>(gA=I+CA|0)>>>0?IA+1|0:IA,g=eg(FA,GA,470296,0),I=p+IA|0,wA=gA=g+gA|0,iA=I=g>>>0>gA>>>0?I+1|0:I,hA=(I=gA)- -1048576|0,CA=g=iA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+EA|0,tA=gA=(g=(2097151&g)<<11|hA>>>21)+fA|0,g=I=g>>>0>gA>>>0?I+1|0:I,fA=(I=gA)- -1048576|0,I=(IA=(gA=EA=g-((I>>>0<4293918720)-1|0)|0)>>21)+xA|0,EA=(EA=(2097151&gA)<<11|fA>>>21)>>>0>(YA=vA=EA+YA|0)>>>0?I+1|0:I,I=eg(MA,SA,-997805,-1);g=p+g|0,g=I>>>0>(IA=I+tA|0)>>>0?g+1|0:g,xA=IA-(I=-2097152&fA)|0,vA=g-((I>>>0>IA>>>0)+gA|0)|0,I=eg(MA,SA,654183,0),g=p+iA|0,g=I>>>0>(IA=I+wA|0)>>>0?g+1|0:g,tA=IA-(I=-2097152&hA)|0,fA=g-((I>>>0>IA>>>0)+CA|0)|0,IA=(g=eg(DA,sA,470296,0))+(B-(I=-2097152&uA)|0)|0,I=p+(aA-((16383&nA)+(I>>>0>B>>>0)|0)|0)|0,I=g>>>0>IA>>>0?I+1|0:I,B=(g=eg(FA,GA,666643,0))+IA|0,IA=p+I|0,IA=g>>>0>B>>>0?IA+1|0:IA,gA=B,B=(I=eg(DA,sA,666643,0))+(BA-(g=-2097152&lA)|0)|0,g=p+(yA-((4095&eA)+(g>>>0>BA>>>0)|0)|0)|0,iA=g=I>>>0>B>>>0?g+1|0:g,eA=(I=B)- -1048576|0,CA=BA=g-((I>>>0<4293918720)-1|0)|0,IA=(I=BA>>21)+IA|0,aA=BA=(g=(2097151&BA)<<11|eA>>>21)+gA|0,gA=IA=g>>>0>BA>>>0?IA+1|0:IA,nA=(I=BA)- -1048576|0,BA=IA=IA-((I>>>0<4293918720)-1|0)|0,g=(I=IA>>21)+fA|0,IA=g=(IA=(2097151&IA)<<11|nA>>>21)>>>0>(yA=IA+tA|0)>>>0?g+1|0:g,g=eg(MA,SA,470296,0),I=p+gA|0,I=g>>>0>(aA=g+aA|0)>>>0?I+1|0:I,g=aA-(gA=-2097152&nA)|0,gA=I-((gA>>>0>aA>>>0)+BA|0)|0,nA=g,BA=(I=eg(MA,SA,666643,0))+(B-(g=-2097152&eA)|0)|0,g=p+(iA-((g>>>0>B>>>0)+CA|0)|0)|0,I=(I=(g=I>>>0>BA>>>0?g+1|0:g)>>21)+gA|0,CA=B=nA+(g=(2097151&g)<<11|(B=BA)>>>21)|0,IA=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+IA|0,gA=B=(I=(2097151&I)<<11|B>>>21)+yA|0,B=(2097151&(IA=I>>>0>(g=B)>>>0?IA+1|0:IA))<<11|g>>>21,g=(I=IA>>21)+vA|0,aA=IA=B+xA|0,IA=(g=B>>>0>(I=IA)>>>0?g+1|0:g)>>21,g=(2097151&g)<<11|I>>>21,I=IA+EA|0,uA=B=g+YA|0,g=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+PA|0,wA=B=(I=(2097151&I)<<11|B>>>21)+JA|0,I=(I=(g=I>>>0>B>>>0?g+1|0:g)>>21)+pA|0,hA=B=(g=(2097151&g)<<11|B>>>21)+qA|0,IA=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+VA|0,tA=B=(I=(2097151&I)<<11|B>>>21)+XA|0,B=(2097151&(IA=I>>>0>(g=B)>>>0?IA+1|0:IA))<<11|g>>>21,g=(I=IA>>21)+oA|0,fA=IA=B+bA|0,IA=(g=B>>>0>(I=IA)>>>0?g+1|0:g)>>21,g=(2097151&g)<<11|I>>>21,I=IA+kA|0,pA=B=g+OA|0,g=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+ZA|0,yA=B=(I=(2097151&I)<<11|B>>>21)+jA|0,I=(g=I>>>0>B>>>0?g+1|0:g)>>21,iA=(IA=(2097151&g)<<11|B>>>21)+(g=QA-(B=-2097152&_A)|0)|0,IA=(rA-((B>>>0>QA>>>0)+cA|0)|0)+I|0,eA=iA,cA=(2097151&(IA=g>>>0>(I=iA)>>>0?IA+1|0:IA))<<11|I>>>21,EA=g=IA>>21,I=2097151&BA,B=eg(cA,g,666643,0)+I|0,g=p,iA=B,B=g=I>>>0>B>>>0?g+1|0:g,C[0|A]=iA,C[A+1|0]=(255&g)<<24|iA>>>8,BA=A,g=2097151&CA,IA=eg(cA,EA,470296,0)+g|0,I=p,I=g>>>0>IA>>>0?I+1|0:I,CA=IA,QA=(2097151&(IA=B))<<11|iA>>>21,IA=I+(g=IA>>21)|0,IA=QA>>>0>(CA=CA+QA|0)>>>0?IA+1|0:IA,QA=CA,C[BA+4|0]=(2047&IA)<<21|QA>>>11,I=IA,IA=QA,C[BA+3|0]=(7&I)<<29|IA>>>3,IA=2097151&gA,gA=eg(cA,EA,654183,0)+IA|0,g=p,g=IA>>>0>gA>>>0?g+1|0:g,IA=gA,gA=(2097151&I)<<11|QA>>>21,I=(I>>21)+g|0,g=I=gA>>>0>(CA=IA+gA|0)>>>0?I+1|0:I,C[BA+6|0]=(63&I)<<26|CA>>>6,gA=0,I=nA=2097151&QA,C[BA+2|0]=31&((65535&B)<<16|iA>>>16)|I<<5,B=2097151&aA,IA=eg(cA,EA,-997805,-1)+B|0,I=p,B=I=B>>>0>IA>>>0?I+1|0:I,I=g>>21,QA=(g=(2097151&g)<<11|CA>>>21)+IA|0,IA=I+B|0,iA=QA,IA=g>>>0>QA>>>0?IA+1|0:IA,C[BA+9|0]=(511&IA)<<23|QA>>>9,I=IA,C[BA+8|0]=(1&I)<<31|QA>>>1,QA=0,B=aA=2097151&CA,C[BA+5|0]=(524287&gA)<<13|nA>>>19|B<<2,B=2097151&uA,IA=eg(cA,EA,136657,0)+B|0,g=p,g=B>>>0>IA>>>0?g+1|0:g,B=IA,g=g+(IA=I>>21)|0,CA=B=B+(I=(2097151&I)<<11|iA>>>21)|0,g=I>>>0>B>>>0?g+1|0:g,C[BA+12|0]=(4095&g)<<20|B>>>12,B=g,I=g,g=CA,C[BA+11|0]=(15&I)<<28|g>>>4,BA=0,g=nA=2097151&iA,C[A+7|0]=(16383&QA)<<18|aA>>>14|g<<7,IA=A,g=2097151&wA,QA=eg(cA,EA,-683901,-1)+g|0,I=p,I=(I=g>>>0>QA>>>0?I+1|0:I)+(g=B>>21)|0,g=I=(B=(2097151&B)<<11|CA>>>21)>>>0>(gA=QA=B+QA|0)>>>0?I+1|0:I,C[IA+14|0]=(127&I)<<25|gA>>>7,QA=0,B=iA=2097151&CA,C[IA+10|0]=(131071&BA)<<15|nA>>>17|B<<4,B=IA,I>>=21,IA=(g=(2097151&g)<<11|gA>>>21)>>>0>(CA=g+(2097151&hA)|0)>>>0?I+1|0:I,C[B+17|0]=(1023&IA)<<22|CA>>>10,I=IA,C[B+16|0]=(3&I)<<30|CA>>>2,B=EA=2097151&gA,C[A+13|0]=(1048575&QA)<<12|iA>>>20|B<<1,g=I,I>>=21,g=(IA=(2097151&g)<<11|CA>>>21)>>>0>(gA=IA+(2097151&tA)|0)>>>0?I+1|0:I,C[(B=A)+20|0]=(8191&g)<<19|gA>>>13,I=g,g=gA,C[B+19|0]=(31&I)<<27|g>>>5,g=iA=2097151&CA,C[B+15|0]=(32767&BA)<<17|EA>>>15|g<<6,g=I,I>>=21,g=(B=(2097151&g)<<11|gA>>>21)>>>0>(EA=B+(2097151&fA)|0)>>>0?I+1|0:I,C[A+21|0]=EA,I=gA,C[A+18|0]=(262143&QA)<<14|iA>>>18|I<<3,B=g,I=g,g=EA,C[A+22|0]=(255&I)<<24|g>>>8,g=I>>21,IA=(I=(2097151&I)<<11|EA>>>21)>>>0>(gA=I+(2097151&pA)|0)>>>0?g+1|0:g,C[A+25|0]=(2047&IA)<<21|gA>>>11,I=IA,IA=gA,C[A+24|0]=(7&I)<<29|IA>>>3,g=I>>21,g=(BA=(2097151&I)<<11|gA>>>21)>>>0>(CA=BA+(2097151&yA)|0)>>>0?g+1|0:g,BA=CA,I=g,C[(IA=A)+27|0]=(63&I)<<26|BA>>>6,IA=0,g=CA=2097151&gA,C[A+23|0]=31&((65535&B)<<16|EA>>>16)|g<<5,g=I,I>>=21,I=(g=(2097151&g)<<11|BA>>>21)>>>0>(QA=g+(2097151&eA)|0)>>>0?I+1|0:I,B=QA,C[A+31|0]=(131071&I)<<15|B>>>17,C[A+30|0]=(511&I)<<23|B>>>9,C[A+29|0]=(1&I)<<31|B>>>1,I=0,gA=BA&=2097151,C[A+26|0]=(524287&IA)<<13|CA>>>19|gA<<2,C[A+28|0]=(16383&I)<<18|gA>>>14|B<<7}(E,r+160|0,r+288|0,r+224|0),fI(r+288|0,64),fI(r+224|0,64),I&&(i[I>>2]=64,i[I+4>>2]=0),h=r+560|0,0}function X(A,I,g){var B,Q=0,E=0;if(g>>>0>=512)return s(0|A,0|I,0|g),A;B=A+g|0;A:if(3&(A^I))if(B>>>0<4)g=A;else if((Q=B-4|0)>>>0>>0)g=A;else for(g=A;C[0|g]=n[0|I],C[g+1|0]=n[I+1|0],C[g+2|0]=n[I+2|0],C[g+3|0]=n[I+3|0],I=I+4|0,Q>>>0>=(g=g+4|0)>>>0;);else{I:if((0|g)<1)g=A;else if(3&A)for(g=A;;){if(C[0|g]=n[0|I],I=I+1|0,B>>>0<=(g=g+1|0)>>>0)break I;if(!(3&g))break}else g=A;if(!((Q=-4&B)>>>0<64||(E=Q+-64|0)>>>0>>0))for(;i[g>>2]=i[I>>2],i[g+4>>2]=i[I+4>>2],i[g+8>>2]=i[I+8>>2],i[g+12>>2]=i[I+12>>2],i[g+16>>2]=i[I+16>>2],i[g+20>>2]=i[I+20>>2],i[g+24>>2]=i[I+24>>2],i[g+28>>2]=i[I+28>>2],i[g+32>>2]=i[I+32>>2],i[g+36>>2]=i[I+36>>2],i[g+40>>2]=i[I+40>>2],i[g+44>>2]=i[I+44>>2],i[g+48>>2]=i[I+48>>2],i[g+52>>2]=i[I+52>>2],i[g+56>>2]=i[I+56>>2],i[g+60>>2]=i[I+60>>2],I=I- -64|0,E>>>0>=(g=g- -64|0)>>>0;);if(g>>>0>=Q>>>0)break A;for(;i[g>>2]=i[I>>2],I=I+4|0,Q>>>0>(g=g+4|0)>>>0;);}if(g>>>0>>0)for(;C[0|g]=n[0|I],I=I+1|0,(0|B)!=(0|(g=g+1|0)););return A}function V(A,I,g,B){var Q,E=0,a=0,r=0,o=0,e=0,t=0,f=0;if(h=Q=h-704|0,g|B)if(E=B<<3|g>>>29,r=(f=i[(a=A)+72>>2])+(e=g<<3)|0,E=E+(o=i[a+76>>2])|0,t=r,i[a+72>>2]=r,E=r>>>0>>0?E+1|0:E,i[a+76>>2]=E,t=(e=(0|E)==(0|o)&f>>>0>t>>>0|E>>>0>>0)+i[(a=r=a- -64|0)>>2]|0,E=i[a+4>>2],E=e>>>0>t>>>0?E+1|0:E,r=(e=B>>>29|0)+t|0,i[a>>2]=r,i[a+4>>2]=r>>>0>>0?E+1|0:E,(0|(E=B))==(0|(t=0-((o=127&((7&o)<<29|f>>>3))>>>0>128)|0))&g>>>0>=(r=128-o|0)>>>0|E>>>0>t>>>0){for(a=0,E=0;C[80+(A+(e=a+o|0)|0)|0]=n[I+a|0],(0|r)!=(0|(a=a+1|0))|(0|(E=a>>>0<1?E+1|0:E))!=(0|t););if(F(A,A+80|0,Q,E=Q+640|0),I=I+r|0,!(B=B-((g>>>0>>0)+t|0)|0)&(g=g-r|0)>>>0>127|B)for(;F(A,I,Q,E),I=I+128|0,!(B=B-(g>>>0<128)|0)&(g=g-128|0)>>>0>127|B;);if(g|B)for(a=0,E=0;C[80+(A+a|0)|0]=n[I+a|0],(0|g)!=(0|(a=o=a+1|0))|(0|B)!=(0|(E=o>>>0<1?E+1|0:E)););fI(Q,704)}else for(a=g,r=(g=!B&g>>>0>1|0!=(0|B))?a:1,f=g?B:0,a=0,E=0;C[80+(A+(B=a+o|0)|0)|0]=n[I+a|0],(0|r)!=(0|(a=g=a+1|0))|(0|(E=g>>>0<1?E+1|0:E))!=(0|f););return h=Q+704|0,0}function W(A,I,g,B,Q,E,n,a){A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,n|=0,a|=0;var r,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,D=0;h=r=h-16|0,i[r+12>>2]=0,pg(a);A:{if(B){w=4&a;I:{g:{B:{for(;;){o=f;Q:{C:{for(;;){if(y=C[g+o|0],255!=(0|(t=w?LA(y):KA(y))))break C;if(!Q)break Q;if(!gg(Q,y))break B;if(!((o=o+1|0)>>>0>>0))break}A=f+1|0,i[r+12>>2]=A>>>0>>0?B:A;break g}if(s=(s<<6)+t|0,(t=e+6|0)>>>0<8)e=t;else{if(e=e-2|0,I>>>0<=c>>>0){i[r+12>>2]=o,i[8960]=68,o=1;break I}C[A+c|0]=s>>>e,c=c+1|0}if((f=o+1|0)>>>0>>0)continue}break}i[r+12>>2]=f;break g}i[r+12>>2]=o}o=0}if(!(e>>>0<=4)){A=-1;break A}}if(A=-1,!((-1<>2];;){g:{if(I>>>0<=E>>>0)i[8960]=68;else{if(61==(0|(n=C[A+E|0]))){Q=Q-1|0;break g}if(B&&gg(B,n))break g;i[8960]=28}a=-1;break I}if(E=E+1|0,i[g>>2]=E,!Q)break}return a}(g,B,r+12|0,Q,e>>>1|0)))){A=0;I:if(Q&&!((o=i[r+12>>2])>>>0>=B>>>0)){g:{for(;;){if(!gg(Q,C[g+o|0]))break g;if((0|(o=o+1|0))==(0|B))break}i[r+12>>2]=B;break I}i[r+12>>2]=o}D=c}}return I=i[r+12>>2],n?i[n>>2]=I+g:(0|I)!=(0|B)&&(i[8960]=28,A=-1),E&&(i[E>>2]=D),h=r+16|0,0|A}function T(A,I,g){var B,Q,C,E=0;h=B=h-16|0,Q=i[A+20>>2],i[A+20>>2]=0,C=i[A+4>>2],i[A+4>>2]=0,E=-26;A:{I:{g:switch(g-1|0){case 1:if(E=-32,XA(I,35621,9))break A;I=I+9|0;break I;case 0:break g;default:break A}if(E=-32,XA(I,35631,8))break A;I=I+8|0}if(!XA(I,35640,3)&&(I=bA(I+3|0,B+12|0))){if(E=-26,19!=i[B+12>>2])break A;if(!XA(I,35644,3)&&(I=bA(I+3|0,B+12|0))&&(i[A+44>>2]=i[B+12>>2],!XA(I,35648,3)&&(I=bA(I+3|0,B+12|0))&&(i[A+40>>2]=i[B+12>>2],!XA(I,35652,3)&&(I=bA(I+3|0,B+12|0))&&(g=i[B+12>>2],i[A+48>>2]=g,i[A+52>>2]=g,36==(0|(g=n[0|I]))&&(i[B+12>>2]=Q,I=36==(0|g)?I+1|0:I,!W(i[A+16>>2],Q,I,YA(I),0,B+12|0,B+8|0,3)&&(i[A+20>>2]=i[B+12>>2],I=i[B+8>>2],36==(0|(g=n[0|I]))&&(i[B+12>>2]=C,I=36==(0|g)?I+1|0:I,!W(i[A>>2],C,I,YA(I),0,B+12|0,B+8|0,3)))))))){if(i[A+4>>2]=i[B+12>>2],I=i[B+8>>2],E=oA(A))break A;return h=B+16|0,n[0|I]?-32:0}}E=-32}return h=B+16|0,E}function j(A,I){var g;for(h=g=h-192|0,H(g+144|0,I),H(g+96|0,g+144|0),H(g+96|0,g+96|0),_(g+96|0,I,g+96|0),_(g+144|0,g+144|0,g+96|0),H(g+48|0,g+144|0),_(g+96|0,g+96|0,g+48|0),H(g+48|0,g+96|0),I=1;H(g+48|0,g+48|0),5!=(0|(I=I+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),I=1;H(g+48|0,g+48|0),10!=(0|(I=I+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),I=1;H(g,g),20!=(0|(I=I+1|0)););for(_(g+48|0,g,g+48|0),I=1;H(g+48|0,g+48|0),11!=(0|(I=I+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),I=1;H(g+48|0,g+48|0),50!=(0|(I=I+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),I=1;H(g,g),100!=(0|(I=I+1|0)););for(_(g+48|0,g,g+48|0),I=1;H(g+48|0,g+48|0),51!=(0|(I=I+1|0)););for(_(g+96|0,g+48|0,g+96|0),I=1;H(g+96|0,g+96|0),6!=(0|(I=I+1|0)););_(A,g+96|0,g+144|0),h=g+192|0}function Z(A,I){var g,B,Q,E,n,a,o,e,t,f,c=0,y=0,s=0,w=0,h=0,D=0,u=0;(y=s=i[A+60>>2])|(c=i[A+56>>2])&&(s=c,C[(w=c+A|0)- -64|0]=1,!(y=(c=c+1|0)>>>0<1?y+1|0:y)&c>>>0<=15&&EA(w+65|0,0,15-s|0),C[A+80|0]=1,S(A,A- -64|0,16,0)),t=i[A+52>>2],f=i[A+48>>2],s=i[A+44>>2],u=i[A+24>>2],h=i[A+28>>2]+(u>>>26|0)|0,c=i[A+32>>2]+(h>>>26|0)|0,e=(g=(E=(-67108864|(Q=i[A+36>>2]+(c>>>26|0)|0))+((o=(a=67108863&c)+((h=(D=67108863&h)+((y=(c=(67108863&u)+((y=i[A+20>>2]+r(Q>>>26|0,5)|0)>>>26|0)|0)+((n=5+(w=67108863&y)|0)>>>26|0)|0)>>>26|0)|0)>>>26|0)|0)>>>26|0)|0)>>31)&c|(B=67108863&(u=(E>>>31|0)-1|0))&y,y=0,y=(c=w&g|B&n|e<<26)>>>0>(w=c+i[A+40>>2]|0)>>>0?1:y,xI(I,w),h=(c=(D=D&g|h&B)<<20|e>>>6)+s|0,s=0,s=c>>>0>h>>>0?1:s,c=y,y=s,y=c>>>0>(h=c+h|0)>>>0?y+1|0:y,xI(I+4|0,h),s=0,s=(c=(w=g&a|B&o)<<14|D>>>12)>>>0>(D=c+f|0)>>>0?1:s,c=y,y=s,y=c>>>0>(D=c+D|0)>>>0?y+1|0:y,xI(I+8|0,D),xI(s=I+12|0,y=y+(w=(I=(u&E|g&Q)<<8|w>>>18)+t|0)|0),fI(A,88)}function O(A,I,g,B,Q){A|=0,I|=0,g|=0,B|=0;var E=0,i=0,a=0,o=0,f=0,c=0,y=0,s=0,w=0;pg(Q|=0),i=(E=(B>>>0)/3|0)<<2,(E=r(E,-3)+B|0)&&(i=2&Q?(2|i)+(E>>>1|0)|0:i+4|0);A:{I:{g:{B:{if(I>>>0>i>>>0){if(!(4&Q)){if(a=0,!B)break g;Q=0,E=0;break B}if(a=0,!B)break g;for(Q=0,E=0;;){for(f=n[g+o|0]|f<<8,Q=Q+8|0;c=E,y=Q,s=A+E|0,w=CI(f>>>(Q=Q-6|0)&63),C[0|s]=w,E=E+1|0,Q>>>0>5;);if((0|(o=o+1|0))==(0|B))break}if(a=E,!Q)break g;s=A+E|0,w=CI(f<<12-y&63),C[0|s]=w,a=c+2|0;break g}OI(),e()}for(;;){for(f=n[g+o|0]|f<<8,Q=Q+8|0;c=E,y=Q,s=A+E|0,w=EI(f>>>(Q=Q-6|0)&63),C[0|s]=w,E=E+1|0,Q>>>0>5;);if((0|(o=o+1|0))==(0|B))break}a=E,Q&&(s=A+E|0,w=EI(f<<12-y&63),C[0|s]=w,a=c+2|0)}if((E=a)>>>0<=i>>>0){if(E>>>0>>0)break I;i=E;break A}t(35568,35587,230,35603),e()}EA(A+E|0,61,i-E|0)}return EA(A+i|0,0,(I>>>0>(g=i+1|0)>>>0?I:g)-i|0),0|A}function z(A,I,g,B){var Q=0,E=0,a=0,r=0,o=0,e=0;A:{if((Q=i[A+56>>2])|(E=i[A+60>>2])){if(e=A,o=a=16-Q|0,o=(a=(0|(r=0-((Q>>>0>16)+E|0)|0))==(0|B)&g>>>0>>0|B>>>0>>0)?g:o,(a=r=a?B:r)|o){if(C[(A+Q|0)- -64|0]=n[0|I],E=1,Q=0,1!=(0|o)|a)for(;r=E+i[A+56>>2]|0,C[(A+r|0)- -64|0]=n[I+E|0],(0|o)!=(0|(E=E+1|0))|(0|(Q=E>>>0<1?Q+1|0:Q))!=(0|a););Q=i[A+56>>2],E=i[A+60>>2]}if(r=Q+o|0,Q=E+a|0,E=r,i[e+56>>2]=E,Q=E>>>0>>0?Q+1|0:Q,i[e+60>>2]=Q,!Q&E>>>0<16)break A;S(A,A- -64|0,16,0),i[A+56>>2]=0,i[A+60>>2]=0,g=(Q=g)-(E=o)|0,B=B-((Q>>>0>>0)+a|0)|0,I=I+E|0}if(!B&g>>>0>=16|B&&(S(A,I,Q=-16&g,B),g&=15,B=0,I=I+Q|0),g|B){for(E=0,Q=0;e=E+i[A+56>>2]|0,C[(A+e|0)- -64|0]=n[I+E|0],(0|g)!=(0|(E=E+1|0))|(0|B)!=(0|(Q=E>>>0<1?Q+1|0:Q)););I=A,Q=g+i[A+56>>2]|0,A=B+i[A+60>>2]|0,i[I+56>>2]=Q,i[I+60>>2]=g>>>0>Q>>>0?A+1|0:A}}}function $(A,I){var g=0,B=0,Q=0,C=0,E=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0;A:if(A&&(2!=i[A+36>>2]||(Q=i[I>>2],n[I+8|0]<2&&!Q)?(function(A,I,g){var B,Q=0,C=0,E=0;if(h=B=h-4096|0,vg(B+3072|0),vg(B+2048|0),!(!A|!I)&&(i[B+2048>>2]=i[I>>2],i[B+2052>>2]=0,i[B+2056>>2]=i[I+4>>2],i[B+2060>>2]=0,i[B+2064>>2]=n[I+8|0],i[B+2068>>2]=0,i[B+2072>>2]=i[A+16>>2],i[B+2076>>2]=0,i[B+2080>>2]=i[A+8>>2],i[B+2084>>2]=0,i[B+2088>>2]=i[A+36>>2],i[B+2092>>2]=0,i[A+20>>2]))for(I=0;(E=127&I)||(Q=i[B+2100>>2],Q=(C=i[B+2096>>2]+1|0)>>>0<1?Q+1|0:Q,i[B+2096>>2]=C,i[B+2100>>2]=Q,vg(B),vg(B+1024|0),Y(B+3072|0,B+2048|0,B),Y(B+3072|0,B,B+1024|0)),E=i[4+(C=(B+1024|0)+(E<<3)|0)>>2],i[(Q=(I<<3)+g|0)>>2]=i[C>>2],i[Q+4>>2]=E,(I=I+1|0)>>>0>2];);h=B+4096|0}(A,I,t=i[A+4>>2]),Q=i[I>>2],B=0):(t=i[A+4>>2],B=1),c=B,!((E=!((B=n[I+8|0])|Q)<<1)>>>0>=(g=i[A+20>>2])>>>0)))for(C=i[A+24>>2],g=(Q=(r(C,i[I+4>>2])+E|0)+r(g,B)|0)+((Q>>>0)%(C>>>0)|0?-1:C-1|0)|0;;){if(f=1==((Q>>>0)%(C>>>0)|0)?Q-1|0:g,c?(o=i[A>>2],g=i[o+4>>2]+(f<<10)|0):(o=i[A>>2],g=(E<<3)+t|0),B=i[g+4>>2],y=i[g>>2],g=i[A+28>>2],i[I+12>>2]=E,B=(B>>>0)%(g>>>0)|0,e=i[I+4>>2],g=n[I+8|0]?B:e,o=i[o+4>>2],s=C,w=B,C=i[I>>2],e=(o+(r(s,g=(B=C)?w:g)<<10)|0)+(FA(A,I,y,!0&(0|g)==(0|e))<<10)|0,B=o+(f<<10)|0,g=o+(Q<<10)|0,C?Y(B,e,g):b(B,e,g),(E=E+1|0)>>>0>=a[A+20>>2])break A;Q=Q+1|0,g=f+1|0,C=i[A+24>>2]}}function AA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y=0,s=0,w=0,h=0,D=0,u=0,p=0,l=0,F=0;B=i[I+4>>2],Q=i[A+4>>2],C=i[I+8>>2],s=i[A+8>>2],E=i[I+12>>2],w=i[A+12>>2],n=i[I+16>>2],h=i[A+16>>2],a=i[I+20>>2],D=i[A+20>>2],r=i[I+24>>2],u=i[A+24>>2],o=i[I+28>>2],p=i[A+28>>2],e=i[I+32>>2],l=i[A+32>>2],t=i[I+36>>2],F=i[A+36>>2],c=(g=0-g|0)&((f=i[I>>2])^(y=i[A>>2])),i[A>>2]=c^y,y=F,F=g&(F^t),i[A+36>>2]=y^F,y=l,l=g&(l^e),i[A+32>>2]=y^l,y=p,p=g&(p^o),i[A+28>>2]=y^p,y=u,u=g&(u^r),i[A+24>>2]=y^u,y=D,D=g&(D^a),i[A+20>>2]=y^D,y=h,h=g&(h^n),i[A+16>>2]=y^h,y=w,w=g&(w^E),i[A+12>>2]=y^w,y=s,s=g&(s^C),i[A+8>>2]=y^s,y=A,A=g&(B^Q),i[y+4>>2]=A^Q,i[I+36>>2]=F^t,i[I+32>>2]=l^e,i[I+28>>2]=p^o,i[I+24>>2]=u^r,i[I+20>>2]=D^a,i[I+16>>2]=h^n,i[I+12>>2]=w^E,i[I+8>>2]=s^C,i[I+4>>2]=A^B,i[I>>2]=f^c}function IA(A,I){var g;i[A>>2]=67108863&(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24),i[A+4>>2]=(n[I+3|0]|n[I+4|0]<<8|n[I+5|0]<<16|n[I+6|0]<<24)>>>2&67108611,i[A+8>>2]=(n[I+6|0]|n[I+7|0]<<8|n[I+8|0]<<16|n[I+9|0]<<24)>>>4&67092735,i[A+12>>2]=(n[I+9|0]|n[I+10|0]<<8|n[I+11|0]<<16|n[I+12|0]<<24)>>>6&66076671,g=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,i[A+20>>2]=0,i[A+24>>2]=0,i[A+28>>2]=0,i[A+32>>2]=0,i[A+36>>2]=0,i[A+16>>2]=g>>>8&1048575,i[A+40>>2]=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,i[A+44>>2]=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,i[A+48>>2]=n[I+24|0]|n[I+25|0]<<8|n[I+26|0]<<16|n[I+27|0]<<24,I=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,C[A+80|0]=0,i[A+56>>2]=0,i[A+60>>2]=0,i[A+52>>2]=I}function gA(A,I,g){var B=0;A:if((0|A)!=(0|I)){if((I-A|0)-g>>>0<=0-(g<<1)>>>0)return X(A,I,g);if(B=3&(A^I),A>>>0>>0){if(B)B=A;else{if(3&A)for(B=A;;){if(!g)break A;if(C[0|B]=n[0|I],I=I+1|0,g=g-1|0,!(3&(B=B+1|0)))break}else B=A;if(!(g>>>0<=3))for(;i[B>>2]=i[I>>2],I=I+4|0,B=B+4|0,(g=g-4|0)>>>0>3;);}if(g)for(;C[0|B]=n[0|I],B=B+1|0,I=I+1|0,g=g-1|0;);}else{if(!B){if(A+g&3)for(;;){if(!g)break A;if(C[0|(B=(g=g-1|0)+A|0)]=n[I+g|0],!(3&B))break}if(!(g>>>0<=3))for(;i[(g=g-4|0)+A>>2]=i[I+g>>2],g>>>0>3;);}if(!g)break A;for(;C[(g=g-1|0)+A|0]=n[I+g|0],g;);}}return A}function BA(A,I){var g,B=0;h=g=h-48|0,function(A,I){var g,B,Q,C,E,n,a,o,e=0;B=i[I+28>>2],Q=i[I+24>>2],C=i[I+20>>2],E=i[I+16>>2],n=i[I+12>>2],a=i[I+8>>2],o=i[I+4>>2],e=i[I>>2],g=i[I+36>>2],I=i[I+32>>2],e=r(((B+(Q+(C+(E+(n+(a+(o+(e+(r(g,19)+16777216>>>25|0)>>26)>>25)>>26)>>25)>>26)>>25)>>26)>>25)+I>>26)+g>>25,19)+e|0,i[A>>2]=67108863&e,e=o+(e>>26)|0,i[A+4>>2]=33554431&e,e=a+(e>>25)|0,i[A+8>>2]=67108863&e,e=n+(e>>26)|0,i[A+12>>2]=33554431&e,e=E+(e>>25)|0,i[A+16>>2]=67108863&e,e=C+(e>>26)|0,i[A+20>>2]=33554431&e,e=Q+(e>>25)|0,i[A+24>>2]=67108863&e,e=B+(e>>26)|0,i[A+28>>2]=33554431&e,I=I+(e>>25)|0,i[A+32>>2]=67108863&I,i[A+36>>2]=g+(I>>26)&33554431}(g,I),I=i[g>>2],C[0|A]=I,C[A+2|0]=I>>>16,C[A+1|0]=I>>>8,B=i[g+4>>2],C[A+5|0]=B>>>14,C[A+4|0]=B>>>6,C[A+3|0]=B<<2|I>>>24,I=i[g+8>>2],C[A+8|0]=I>>>13,C[A+7|0]=I>>>5,C[A+6|0]=I<<3|B>>>22,B=i[g+12>>2],C[A+11|0]=B>>>11,C[A+10|0]=B>>>3,C[A+9|0]=B<<5|I>>>21,I=i[g+16>>2],C[A+15|0]=I>>>18,C[A+14|0]=I>>>10,C[A+13|0]=I>>>2,C[A+12|0]=I<<6|B>>>19,I=i[g+20>>2],C[A+16|0]=I,C[A+18|0]=I>>>16,C[A+17|0]=I>>>8,B=i[g+24>>2],C[A+21|0]=B>>>15,C[A+20|0]=B>>>7,C[A+19|0]=B<<1|I>>>24,I=i[g+28>>2],C[A+24|0]=I>>>13,C[A+23|0]=I>>>5,C[A+22|0]=I<<3|B>>>23,B=i[g+32>>2],C[A+27|0]=B>>>12,C[A+26|0]=B>>>4,C[A+25|0]=B<<4|I>>>21,I=i[g+36>>2],C[A+31|0]=I>>>18,C[A+30|0]=I>>>10,C[A+29|0]=I>>>2,C[A+28|0]=I<<6|B>>>20,h=g+48|0}function QA(A,I,g,B){var Q=0,E=0,i=0,a=0,r=0,o=0;A:if(g|B)for(o=A+224|0,i=A+96|0,Q=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24;;){if(a=96+(A+Q|0)|0,r=E=256-Q|0,!B&g>>>0<=E>>>0){X(a,I,g),I=g+(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)|0,C[A+352|0]=I,C[A+353|0]=I>>>8,C[A+354|0]=I>>>16,C[A+355|0]=I>>>24;break A}if(X(a,I,E),Q=(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)+E|0,C[A+352|0]=Q,C[A+353|0]=Q>>>8,C[A+354|0]=Q>>>16,C[A+355|0]=Q>>>24,iA(A,128),l(A,i),X(i,o,128),Q=(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)-128|0,C[A+352|0]=Q,C[A+353|0]=Q>>>8,C[A+354|0]=Q>>>16,C[A+355|0]=Q>>>24,I=I+E|0,!((g=(E=g)-r|0)|(B=B-(E>>>0>>0)|0)))break}return 0}function CA(A,I){var g,B=0,Q=0,E=0,i=0;for(h=g=h-464|0;Q=B<<1,i=n[I+B|0],C[Q+(g+400|0)|0]=15&i,C[(g+400|0)+(1|Q)|0]=i>>>4,32!=(0|(B=B+1|0)););for(B=0;I=((Q=(I=B)+n[0|(B=(g+400|0)+E|0)]|0)<<24)- -134217728|0,C[0|B]=Q-(I>>24&240),B=I>>28,63!=(0|(E=E+1|0)););for(C[g+463|0]=n[g+463|0]+B,zI(A),B=1;fg(g,B>>>1|0,C[(g+400|0)+B|0]),OA(g+240|0,A,g),DI(A,g+240|0),I=B>>>0<62,B=B+2|0,I;);for(JI(g+240|0,A),_I(g+120|0,g+240|0),AI(g+240|0,g+120|0),_I(g+120|0,g+240|0),AI(g+240|0,g+120|0),_I(g+120|0,g+240|0),AI(g+240|0,g+120|0),DI(A,g+240|0),B=0;fg(g,B>>>1|0,C[(g+400|0)+B|0]),OA(g+240|0,A,g),DI(A,g+240|0),I=B>>>0<62,B=B+2|0,I;);h=g+464|0}function EA(A,I,g){var B=0,Q=0,E=0,n=0;if(g&&(C[(B=A+g|0)-1|0]=I,C[0|A]=I,!(g>>>0<3||(C[B-2|0]=I,C[A+1|0]=I,C[B-3|0]=I,C[A+2|0]=I,g>>>0<7||(C[B-4|0]=I,C[A+3|0]=I,g>>>0<9||(Q=(B=0-A&3)+A|0,I=r(255&I,16843009),i[Q>>2]=I,i[(B=(g=g-B&-4)+Q|0)-4>>2]=I,g>>>0<9||(i[Q+8>>2]=I,i[Q+4>>2]=I,i[B-8>>2]=I,i[B-12>>2]=I,g>>>0<25||(i[Q+24>>2]=I,i[Q+20>>2]=I,i[Q+16>>2]=I,i[Q+12>>2]=I,i[B-16>>2]=I,i[B-20>>2]=I,i[B-24>>2]=I,i[B-28>>2]=I,(g=g-(n=4&Q|24)|0)>>>0<32))))))))for(B=I,E=I,I=Q+n|0;i[I+24>>2]=E,i[I+28>>2]=B,i[I+16>>2]=E,i[I+20>>2]=B,i[I+8>>2]=E,i[I+12>>2]=B,i[I>>2]=E,i[I+4>>2]=B,I=I+32|0,(g=g-32|0)>>>0>31;);return A}function iA(A,I){var g,B,Q,E=0,i=0;i=E=A- -64|0,B=1+(g=n[E+4|0]|n[E+5|0]<<8|n[E+6|0]<<16|n[E+7|0]<<24)|0,E=(I=I+(E=Q=n[0|E]|n[E+1|0]<<8|n[E+2|0]<<16|n[E+3|0]<<24)|0)>>>0>>0?B:g,C[0|i]=I,C[i+1|0]=I>>>8,C[i+2|0]=I>>>16,C[i+3|0]=I>>>24,C[i+4|0]=E,C[i+5|0]=E>>>8,C[i+6|0]=E>>>16,C[i+7|0]=E>>>24,I=(E=(0|E)==(0|g)&I>>>0>>0|E>>>0>>0)+(n[A+72|0]|n[A+73|0]<<8|n[A+74|0]<<16|n[A+75|0]<<24)|0,i=n[A+76|0]|n[A+77|0]<<8|n[A+78|0]<<16|n[A+79|0]<<24,E=I>>>0>>0?i+1|0:i,C[A+72|0]=I,C[A+73|0]=I>>>8,C[A+74|0]=I>>>16,C[A+75|0]=I>>>24,C[A+76|0]=E,C[A+77|0]=E>>>8,C[A+78|0]=E>>>16,C[A+79|0]=E>>>24}function nA(A,I,g,B,Q,C,E){var n,a,r,o,e=0;return h=n=h-352|0,K(n,C,E),!Q&B>>>0<=g-A>>>0|A>>>0>=g>>>0&&!(!Q&B>>>0>A-g>>>0|Q&&A>>>0>g>>>0)||(g=gA(A,g,B)),i[n+56>>2]=0,i[n+60>>2]=0,i[n+48>>2]=0,i[n+52>>2]=0,i[n+40>>2]=0,i[n+44>>2]=0,i[n+32>>2]=0,i[n+36>>2]=0,(a=!((E=(e=!Q&B>>>0>32|0!=(0|Q))?32:B)|(e=e?0:Q)))||X(n- -64|0,g,E),o=C+16|0,$I(n+32|0,n+32|0,r=E+32|0,C=r>>>0<32?e+1|0:e,o,n),lg(n+96|0,n+32|0),a||X(A,n- -64|0,E),fI(n+32|0,64),!Q&B>>>0>=33|Q&&Ag(A+E|0,C=g+E|0,(g=B)-E|0,Q-(e+(g>>>0>>0)|0)|0,o,n),fI(n,32),yg(n+96|0,A,B,Q),Fg(n+96|0,I),fI(n+96|0,256),h=n+352|0,0}function aA(A,I){i[A>>2]=1634760805,i[A+4>>2]=857760878,i[A+8>>2]=2036477234,i[A+12>>2]=1797285236,i[A+16>>2]=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,i[A+20>>2]=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,i[A+24>>2]=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,i[A+28>>2]=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,i[A+32>>2]=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,i[A+36>>2]=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,i[A+40>>2]=n[I+24|0]|n[I+25|0]<<8|n[I+26|0]<<16|n[I+27|0]<<24,i[A+44>>2]=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24}function rA(A,I,g,B,Q,C,E){var n,a,r=0,o=0;h=n=h-96|0,K(n,C,E),a=C+16|0,Vg[i[8952]](n+32|0,32,0,a,n),C=-1;A:{if(!(0|Vg[i[8946]](g,I,B,Q,n+32|0))){if(C=0,!A)break A;!Q&B>>>0<=A-I>>>0|A>>>0<=I>>>0&&!(!Q&B>>>0>I-A>>>0|Q&&A>>>0>>0)||(I=gA(A,I,B)),g=(C=!Q&B>>>0>32|0!=(0|Q))?32:B,E=C=C?0:Q,g|C?(o=X(n- -64|0,I,g),C=E,$I(n+32|0,n+32|0,r=g+32|0,C=r>>>0<32?C+1|0:C,a,n),X(A,o,g)):(C=E,$I(n+32|0,n+32|0,r=g+32|0,C=r>>>0<32?C+1|0:C,a,n)),C=0,!Q&B>>>0<33||Ag((r=A)+(A=g)|0,A+I|0,B-A|0,Q-(E+(A>>>0>B>>>0)|0)|0,a,n)}fI(n,32)}return h=n+96|0,C}function oA(A){var I=0,g=0,B=0;if(!A)return-25;if(!i[A>>2])return-1;A:{I:{if(I=-2,!(a[A+4>>2]<16)&&(i[A+8>>2]||(I=-18,!i[A+12>>2]))){if(g=i[A+20>>2],!i[A+16>>2])break I;if(I=-6,!(g>>>0<8)&&(i[A+24>>2]||(I=-20,!i[A+28>>2]))&&(i[A+32>>2]||(I=-21,!i[A+36>>2]))){if(!(g=i[A+48>>2]))return-16;if(I=-17,!(g>>>0>16777215||(I=-14,(B=i[A+44>>2])>>>0<8||(I=-15,B>>>0>2097152||(I=-14,g<<3>>>0>B>>>0))))){if(!i[A+40>>2])return-12;if(A=i[A+52>>2])break A;I=-28}}}return I}return g?-19:-6}return A>>>0>16777215?-29:0}function eA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y,s,w,h,D,u,p,l;f=i[I+4>>2],B=i[A+4>>2],c=i[I+8>>2],Q=i[A+8>>2],y=i[I+12>>2],C=i[A+12>>2],s=i[I+16>>2],E=i[A+16>>2],w=i[I+20>>2],n=i[A+20>>2],h=i[I+24>>2],a=i[A+24>>2],D=i[I+28>>2],r=i[A+28>>2],u=i[I+32>>2],o=i[A+32>>2],p=i[I+36>>2],e=i[A+36>>2],t=i[A>>2],l=i[I>>2]^t,I=0-g|0,i[A>>2]=t^l&I,i[A+36>>2]=I&(e^p)^e,i[A+32>>2]=I&(o^u)^o,i[A+28>>2]=I&(r^D)^r,i[A+24>>2]=I&(a^h)^a,i[A+20>>2]=I&(n^w)^n,i[A+16>>2]=I&(E^s)^E,i[A+12>>2]=I&(C^y)^C,i[A+8>>2]=I&(Q^c)^Q,i[A+4>>2]=I&(B^f)^B}function tA(A,I){for(var g=0,B=0,Q=0,E=0,i=0,a=0,r=0,o=0;C[A+g|0]=n[(g>>>3|0)+I|0]>>>(7&g)&1,256!=(0|(g=g+1|0)););for(;;){a=(I=a)+1|0;A:if(n[0|(i=A+I|0)]&&(g=a,Q=1,!(I>>>0>254)))for(;;){I:if(E=C[0|(B=A+g|0)])if((0|(o=(r=C[0|i])+(E<<=Q)|0))<=15)C[0|i]=o,C[0|B]=0;else{if((0|(B=r-E|0))<-15)break A;for(C[0|i]=B;;){if(!n[0|(B=A+g|0)]){C[0|B]=1;break I}if(C[0|B]=0,B=g>>>0<255,g=g+1|0,!B)break}}if(Q>>>0>5)break A;if(!((g=I+(Q=Q+1|0)|0)>>>0<256))break}if(256==(0|a))break}}function fA(A,I,g,B){var Q,C,E,n,a=0;h=Q=h+-64|0,EA(Q+8|0,0,52),a=YA(A),i[Q+20>>2]=a,i[Q+36>>2]=a,i[Q+4>>2]=a,C=k(a),i[Q+32>>2]=C,E=k(a),i[Q+16>>2]=E,n=k(a),i[Q>>2]=n;A:if(!n|!C|!E||!(a=k(a)))m(C),m(E),m(n),A=-22;else{if(A=T(Q,A,B)){m(i[Q+32>>2]),m(i[Q+16>>2]),m(i[Q>>2]),m(a);break A}A=0,I=pA(i[Q+40>>2],i[Q+44>>2],i[Q+52>>2],I,g,i[Q+16>>2],i[Q+20>>2],a,i[Q+4>>2],0,0,B),m(i[Q+32>>2]),m(i[Q+16>>2]),(I||zA(a,i[Q>>2],i[Q+4>>2]))&&(A=-35),m(a),m(i[Q>>2])}return h=Q- -64|0,A}function cA(A,I){var g,B,Q=0;h=g=h-288|0,d(B=A+40|0,I),wg(Q=A+80|0),H(g+240|0,B),_(g+192|0,g+240|0,2128),yA(g+240|0,g+240|0,Q),sA(g+192|0,g+192|0,Q),H(g+144|0,g+192|0),_(g+144|0,g+144|0,g+192|0),H(A,g+144|0),_(A,A,g+192|0),_(A,A,g+240|0),function(A,I){var g,B=0;for(h=g=h-144|0,H(g+96|0,I),H(g+48|0,g+96|0),H(g+48|0,g+48|0),_(g+48|0,I,g+48|0),_(g+96|0,g+96|0,g+48|0),H(g+96|0,g+96|0),_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),B=1;H(g+48|0,g+48|0),5!=(0|(B=B+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),B=1;H(g+48|0,g+48|0),10!=(0|(B=B+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),B=1;H(g,g),20!=(0|(B=B+1|0)););for(_(g+48|0,g,g+48|0),B=1;H(g+48|0,g+48|0),11!=(0|(B=B+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),B=1;H(g+48|0,g+48|0),50!=(0|(B=B+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),B=1;H(g,g),100!=(0|(B=B+1|0)););for(_(g+48|0,g,g+48|0),B=1;H(g+48|0,g+48|0),51!=(0|(B=B+1|0)););_(g+96|0,g+48|0,g+96|0),H(g+96|0,g+96|0),H(g+96|0,g+96|0),_(A,g+96|0,I),h=g+144|0}(A,A),_(A,A,g+144|0),_(A,A,g+240|0),H(g+96|0,A),_(g+96|0,g+96|0,g+192|0),yA(g+48|0,g+96|0,g+240|0);A:{if(!RI(g+48|0)){if(sA(g,g+96|0,g+240|0),Q=-1,!RI(g))break A;_(A,A,2176)}(0|KI(A))==(n[I+31|0]>>>7|0)&&mA(A,A),_(A+120|0,A,B),Q=0}return h=g+288|0,Q}function yA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y,s,w,h,D,u;B=i[g+4>>2],Q=i[I+4>>2],C=i[g+8>>2],E=i[I+8>>2],n=i[g+12>>2],a=i[I+12>>2],r=i[g+16>>2],o=i[I+16>>2],e=i[g+20>>2],t=i[I+20>>2],f=i[g+24>>2],c=i[I+24>>2],y=i[g+28>>2],s=i[I+28>>2],w=i[g+32>>2],h=i[I+32>>2],D=i[g+36>>2],u=i[I+36>>2],i[A>>2]=i[I>>2]-i[g>>2],i[A+36>>2]=u-D,i[A+32>>2]=h-w,i[A+28>>2]=s-y,i[A+24>>2]=c-f,i[A+20>>2]=t-e,i[A+16>>2]=o-r,i[A+12>>2]=a-n,i[A+8>>2]=E-C,i[A+4>>2]=Q-B}function sA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y,s,w,h,D,u;B=i[g+4>>2],Q=i[I+4>>2],C=i[g+8>>2],E=i[I+8>>2],n=i[g+12>>2],a=i[I+12>>2],r=i[g+16>>2],o=i[I+16>>2],e=i[g+20>>2],t=i[I+20>>2],f=i[g+24>>2],c=i[I+24>>2],y=i[g+28>>2],s=i[I+28>>2],w=i[g+32>>2],h=i[I+32>>2],D=i[g+36>>2],u=i[I+36>>2],i[A>>2]=i[g>>2]+i[I>>2],i[A+36>>2]=D+u,i[A+32>>2]=w+h,i[A+28>>2]=y+s,i[A+24>>2]=f+c,i[A+20>>2]=e+t,i[A+16>>2]=r+o,i[A+12>>2]=n+a,i[A+8>>2]=C+E,i[A+4>>2]=B+Q}function wA(A){var I,g=0,B=0,Q=0,E=0;for(C[11+(I=h-16|0)|0]=0,C[I+12|0]=0,C[I+13|0]=0,C[I+14|0]=0,i[I+8>>2]=0;;){for(Q=n[A+B|0],g=0;C[0|(E=(I+8|0)+g|0)]=n[0|E]|Q^n[(3232+(g<<5)|0)+B|0],7!=(0|(g=g+1|0)););if(31==(0|(B=B+1|0)))break}for(B=127&n[A+31|0],A=0,g=0;C[0|(Q=(I+8|0)+g|0)]=n[0|Q]|B^n[3263+(g<<5)|0],7!=(0|(g=g+1|0)););for(g=0;g=n[(I+8|0)+A|0]-1|g,7!=(0|(A=A+1|0)););return g>>>8&1}function hA(A,I){var g=0,B=0,Q=0,E=0,i=0;for(EA(X(A,1952,64)- -64|0,0,293);Q=B=(g=E<<3)+A|0,g=I+g|0,i=n[0|B]|n[B+1|0]<<8|n[B+2|0]<<16|n[B+3|0]<<24,B=(n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24)^(n[B+4|0]|n[B+5|0]<<8|n[B+6|0]<<16|n[B+7|0]<<24),g=(n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24)^i,C[0|Q]=g,C[Q+1|0]=g>>>8,C[Q+2|0]=g>>>16,C[Q+3|0]=g>>>24,C[Q+4|0]=B,C[Q+5|0]=B>>>8,C[Q+6|0]=B>>>16,C[Q+7|0]=B>>>24,8!=(0|(E=E+1|0)););}function DA(A,I,g,B,Q){var C,E=0;h=C=h+-64|0;A:{I:{if(E=!g,(g=YA(A))>>>0<128&&E){if(i[C+56>>2]=0,i[C+48>>2]=0,i[C+52>>2]=0,i[C+40>>2]=0,i[C+44>>2]=0,E=function(A){var I=0,g=0;return I=0,A&&(g=A,I=A,(1|A)>>>0<65536||(I=g)),g=I,!(A=k(I))|!(3&n[A-4|0])||EA(A,0,g),A}(g))break I}else i[8960]=28;A=-1;break A}i[C+32>>2]=0,i[C+36>>2]=0,i[C+8>>2]=E,i[C+16>>2]=E,i[C+20>>2]=g,i[C>>2]=E,i[C+12>>2]=g,i[C+24>>2]=0,i[C+28>>2]=0,i[C+4>>2]=g,T(C,A,Q)?(i[8960]=28,A=-1):(A=1,(0|I)==i[C+40>>2]&&(A=i[C+44>>2]!=(B>>>10|0))),m(E)}return h=C- -64|0,A}function uA(A,I){var g,B=0,Q=0,E=0,o=0;if(h=g=h-48|0,!((B=oA(A))||(B=-26,I-1>>>0>1||(E=i[A+44>>2],B=i[A+48>>2],i[g>>2]=0,Q=i[A+40>>2],i[g+28>>2]=B,i[g+12>>2]=-1,i[g+8>>2]=Q,B=((Q=E>>>0<(Q=B<<3)>>>0?Q:E)>>>0)/((E=B<<2)>>>0)|0,i[g+20>>2]=B,i[g+24>>2]=B<<2,i[g+16>>2]=r(B,E),B=i[A+52>>2],i[g+36>>2]=I,i[g+32>>2]=B,B=function(A,I){var g,B=0;return h=g=h-80|0,B=-25,!A|!I||(B=k(i[A+20>>2]<<3),i[A+4>>2]=B,B?(B=function(A,I){var g,B=0,Q=0;h=g=h-16|0,Q=-22;A:if(!(!A|!I)&&1024==(((B=I<<10)>>>0)/(I>>>0)|0)&&(I=k(12),i[A>>2]=I,I)){i[I>>2]=0,i[I+4>>2]=0,I=function(A,I){if(I>>>0>4294967168)A=48;else{if(!(I=function(A){var I=0,g=0,B=0,Q=0,C=0,E=0;return A>>>0>=4294967168?(i[8960]=48,0):(A=k(76+(B=A>>>0<11?16:A+11&-8)|0))?(I=A-8|0,63&A?(Q=(-8&(E=i[(C=A-4|0)>>2]))-(g=(A=(A=(A+63&-64)-8|0)-I>>>0>15?A:A- -64|0)-I|0)|0,3&E?(i[A+4>>2]=Q|1&i[A+4>>2]|2,i[4+(Q=A+Q|0)>>2]=1|i[Q+4>>2],i[C>>2]=g|1&i[C>>2]|2,i[A+4>>2]=1|i[A+4>>2],v(I,g)):(I=i[I>>2],i[A+4>>2]=Q,i[A>>2]=I+g)):A=I,3&(I=i[A+4>>2])&&((g=-8&I)>>>0<=B+16>>>0||(i[A+4>>2]=B|1&I|2,I=A+B|0,B=g-B|0,i[I+4>>2]=3|B,i[4+(g=A+g|0)>>2]=1|i[g+4>>2],v(I,B))),A+8|0):0}(I)))return 48;i[A>>2]=I,A=0}return A}(g+12|0,B),i[8960]=I;I:{if(I)i[g+12>>2]=0;else if(I=i[g+12>>2])break I;m(i[A>>2]),i[A>>2]=0;break A}i[i[A>>2]>>2]=I,i[i[A>>2]+4>>2]=I,i[i[A>>2]+8>>2]=B,Q=0}return h=g+16|0,Q}(A,i[A+16>>2]))?eI(A,i[I+56>>2]):(function(A,I,g){var B,Q=0;B=Q=h,h=Q=Q-448&-64,!A|!I||(iI(Q- -64|0,0,0,64),xI(Q+60|0,i[I+48>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+4>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+44>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+40>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,19),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,g),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+12>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+8>>2])&&(hg(Q- -64|0,g,i[I+12>>2],0),1&C[I+56|0]&&(fI(i[I+8>>2],i[I+12>>2]),i[I+12>>2]=0)),xI(Q+60|0,i[I+20>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+16>>2])&&hg(Q- -64|0,g,i[I+20>>2],0),xI(Q+60|0,i[I+28>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+24>>2])&&(hg(Q- -64|0,g,i[I+28>>2],0),2&n[I+56|0]&&(fI(i[I+24>>2],i[I+28>>2]),i[I+28>>2]=0)),xI(Q+60|0,i[I+36>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+32>>2])&&hg(Q- -64|0,g,i[I+36>>2],0),dI(Q- -64|0,A,64)),h=B}(g,I,i[A+36>>2]),fI(g- -64|0,8),function(A,I){var g,B=0,Q=0,C=0;if(h=g=h-1024|0,i[I+28>>2])for(C=A+68|0,Q=A- -64|0;xI(Q,0),xI(C,B),J(g,1024,A,72),TA(i[i[I>>2]+4>>2]+(r(i[I+24>>2],B)<<10)|0,g),xI(Q,1),J(g,1024,A,72),TA(1024+(i[i[I>>2]+4>>2]+(r(i[I+24>>2],B)<<10)|0)|0,g),(B=B+1|0)>>>0>2];);fI(g,1024),h=g+1024|0}(g,A),fI(g,72),B=0):B=-22),h=g+80|0,B}(g,A))))){if(i[g+8>>2])for(;kA(g,o),(o=o+1|0)>>>0>2];);!function(A,I){var g,B=0,Q=0;if(h=g=h-2048|0,!(!A|!I)){if(Yg(g+1024|0,(i[i[I>>2]+4>>2]+(i[I+24>>2]<<10)|0)-1024|0),a[I+28>>2]>=2)for(B=1;Q=i[I+24>>2],QI(g+1024|0,(i[i[I>>2]+4>>2]+(Q+r(B,Q)<<10)|0)-1024|0),(B=B+1|0)>>>0>2];);!function(A,I){for(var g=0,B=0;tI((g=B<<3)+A|0,i[(g=I+g|0)>>2],i[g+4>>2]),128!=(0|(B=B+1|0)););}(g,g+1024|0),J(i[A>>2],i[A+4>>2],g,1024),fI(g+1024|0,1024),fI(g,1024),eI(I,i[A+56>>2])}h=g+2048|0}(A,g),B=0}return h=g+48|0,B}function pA(A,I,g,B,Q,C,E,n,a,r,o,e){var t,f;return h=t=h+-64|0,(f=k(a))?(i[t+32>>2]=0,i[t+36>>2]=0,i[t+24>>2]=0,i[t+28>>2]=0,i[t+20>>2]=E,i[t+16>>2]=C,i[t+12>>2]=Q,i[t+8>>2]=B,i[t+4>>2]=a,i[t>>2]=f,i[t+56>>2]=0,i[t+52>>2]=g,i[t+48>>2]=g,i[t+44>>2]=I,i[t+40>>2]=A,(g=uA(t,e))?fI(f,a):!r|!o||!R(r,o,t,e)?(n&&X(n,f,a),fI(f,a),g=0):(fI(f,a),fI(r,o),g=-31),m(f)):g=-22,h=t- -64|0,g}function lA(A,I,g,B,Q,E){var i,a,o=0,e=0,t=0;return h=i=h-592|0,o=-1,function(A){var I=0,g=0,B=0,Q=0,C=0;for(I=32,g=1;C=(B=n[(I=I-1|0)+A|0])-(Q=n[I+3456|0])>>8&g|255&C,g&=65535+(B^Q)>>>8,I;);return 0!=(0|C)}(a=A+32|0)&&(wA(A)||function(A){var I=0,g=0;for(g=127&(-1^n[A+31|0]),I=30;g=-1^n[A+I|0]|g,I=I-1|0;);return 1&(((255&g)-1&236-n[0|A])>>>8^-1)}(Q)&&(wA(Q)||cA(i+128|0,Q)||(ig(i+384|0,E),V(i+384|0,A,32,0),V(i+384|0,Q,32,0),V(i+384|0,I,g,B),UI(i+384|0,i+320|0),G(i+320|0),function(A,I,g,B){var Q;h=Q=h-2272|0,tA(Q+2016|0,I),tA(Q+1760|0,B),FI(Q+480|0,g),JI(Q+320|0,g),DI(Q,Q+320|0),VA(Q+320|0,Q,Q+480|0),DI(Q+160|0,Q+320|0),FI(I=Q+640|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+800|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+960|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+1120|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+1280|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+1440|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(Q+1600|0,Q+160|0),Ug(A),wg(A+40|0),wg(A+80|0),B=255;A:{for(;;){if(!(n[(g=B)+(Q+2016|0)|0]|n[(Q+1760|0)+g|0])){if(B=g-1|0,g)continue;break A}break}if(!((0|g)<0))for(;AI(Q+320|0,A),(0|(g=C[(I=g)+(Q+2016|0)|0]))>=1?(DI(Q+160|0,Q+320|0),VA(Q+320|0,Q+160|0,(Q+480|0)+r((254&g)>>>1|0,160)|0)):(0|g)>-1||(DI(Q+160|0,Q+320|0),WA(Q+320|0,Q+160|0,(Q+480|0)+r((0-g&254)>>>1|0,160)|0)),(0|(g=C[I+(Q+1760|0)|0]))>=1?(DI(Q+160|0,Q+320|0),OA(Q+320|0,Q+160|0,r((254&g)>>>1|0,120)+2272|0)):(0|g)>-1||(DI(Q+160|0,Q+320|0),ZA(Q+320|0,Q+160|0,r((0-g&254)>>>1|0,120)+2272|0)),_I(A,Q+320|0),g=I-1|0,(0|I)>0;);}h=Q+2272|0}(i+8|0,i+320|0,i+128|0,a),nI(i+288|0,i+8|0),e=-1,t=Gg(i+288|0,A),o=((i+288|0)==(0|A)?e:t)|zA(A,i+288|0,32)))),h=i+592|0,o}function FA(A,I,g,B){var Q=0,C=0;A:if(i[I>>2])C=i[A+24>>2],Q=i[A+20>>2],B=B?i[I+12>>2]+(C+(-1^Q)|0)|0:(C-Q|0)-!i[I+12>>2]|0,C=0,3!=(0|(I=n[I+8|0]))&&(C=r(Q,I+1|0));else{if(!(Q=n[I+8|0])){B=i[I+12>>2]-1|0,C=0;break A}if(Q=r(Q,i[A+20>>2]),I=i[I+12>>2],B){B=(I+Q|0)-1|0,C=0;break A}B=Q-!I|0,C=0}return I=C+(Q=B-1|0)|0,eg(g,0,g,0),eg(B,0,p,0),function(A,I,g){var B=0,Q=0,C=0,E=0,i=0,n=0,a=0,e=0,t=0;A:{I:{g:{B:{Q:{C:{E:{i:{n:{if(Q=I){if(!(B=g))break n;break i}return D=A-r((A>>>0)/(g>>>0)|0,g)|0,u=0,void(p=0)}if(!A)break E;break C}if(!((E=B-1|0)&B))break Q;i=0-(E=(o(B)+33|0)-o(Q)|0)|0;break g}return D=0,u=Q,void(p=0)}if((B=32-o(Q)|0)>>>0<31)break B;break I}if(D=A&E,u=0,1==(0|B))break A;return g=31&(A=B?31-o(B-1^B)|0:32),void(p=(63&A)>>>0>=32?0:I>>>g|0)}E=B+1|0,i=63-B|0}if(B=I,C=31&(Q=63&E),Q>>>0>=32?(Q=0,C=B>>>C|0):(Q=B>>>C|0,C=((1<>>C),B=31&(i&=63),i>>>0>=32?(I=A<>>32-B|I<>>31)-(e=g&(n=i-((Q=Q<<1|C>>>31)+(B>>>0>>0)|0)>>31))|0,Q=Q-(a>>>0>>0)|0,I=I<<1|A>>>31,A=t|A<<1,t=1&n,E=E-1|0;);return D=C,u=Q,void(p=I<<1|A>>>31)}D=A,u=I,I=0}p=I}(I-(g=p)|0,(I>>>0>>0)-(I>>>0>>0)|0,i[A+24>>2]),p=u,D}function GA(A,I,g,B,Q,C,E,i,n,a){var r;return h=r=h-352|0,_g(r+32|0,64,n,a),lg(r+96|0,r+32|0),fI(r+32|0,64),yg(r+96|0,C,E,i),yg(r+96|0,34688,0-E&15,0),yg(r+96|0,I,g,B),yg(r+96|0,34688,0-g&15,0),tI(r+24|0,E,i),yg(r+96|0,r+24|0,8,0),tI(r+24|0,g,B),yg(r+96|0,r+24|0,8,0),Fg(r+96|0,r),fI(r+96|0,256),Q=kg(r,Q),fI(r,16),A&&(Q?(EA(A,0,g),Q=-1):(BI(A,I,g,B,n,1,a),Q=0)),h=r+352|0,Q}function kA(A,I){var g,B=0,Q=0,E=0;if(h=g=h-32|0,!(!A|!i[A+28>>2]))for(i[g+16>>2]=I,B=1;;){if(C[g+24|0]=Q,I=0,E=0,B)for(;i[g+28>>2]=0,B=i[g+28>>2],i[g+8>>2]=i[g+24>>2],i[g+12>>2]=B,i[g+20>>2]=I,B=i[g+20>>2],i[g>>2]=i[g+16>>2],i[g+4>>2]=B,$(A,g),(I=I+1|0)>>>0<(E=i[A+28>>2])>>>0;);if(B=E,4==(0|(Q=Q+1|0)))break}h=g+32|0}function _A(A,I,g,B,Q,C,E,n,a,r,o){var e;return h=e=h-336|0,_g(e+16|0,64,r,o),lg(e+80|0,e+16|0),fI(e+16|0,64),yg(e+80|0,E,n,a),yg(e+80|0,34688,0-n&15,0),BI(A,B,Q,C,r,1,o),yg(e+80|0,A,Q,C),yg(e+80|0,34688,0-Q&15,0),tI(e+8|0,n,a),yg(e+80|0,e+8|0,8,0),tI(e+8|0,Q,C),yg(e+80|0,e+8|0,8,0),Fg(e+80|0,I),fI(e+80|0,256),g&&(i[g>>2]=16,i[g+4>>2]=0),h=e+336|0,0}function HA(A,I,g,B,Q,C,E,i,n,a){var r;return h=r=h-352|0,og(r+32|0,n,a),lg(r+96|0,r+32|0),fI(r+32|0,64),yg(r+96|0,C,E,i),tI(r+24|0,E,i),yg(r+96|0,r+24|0,8,0),yg(r+96|0,I,g,B),tI(r+24|0,g,B),yg(r+96|0,r+24|0,8,0),Fg(r+96|0,r),fI(r+96|0,256),Q=kg(r,Q),fI(r,16),A&&(Q?(EA(A,0,g),Q=-1):(NI(A,I,g,B,n,a),Q=0)),h=r+352|0,Q}function YA(A){var I=0,g=0,B=0;A:{I:if(3&(I=A)){if(!n[0|A])return 0;for(;;){if(!(3&(I=I+1|0)))break I;if(!n[0|I])break}break A}for(;g=I,I=I+4|0,!((-1^(B=i[g>>2]))&B-16843009&-2139062144););if(!(255&B))return g-A|0;for(;B=n[g+1|0],g=I=g+1|0,B;);}return I-A|0}function bA(A,I){var g,B=0,Q=0,C=0,E=0,a=0;A:if(!(((g=n[0|A])-48&255)>>>0>9)){for(Q=g,B=A;;){if(E=B,C>>>0>429496729)break A;if((Q=(255&Q)-48|0)>>>0>(-1^(B=r(C,10)))>>>0)break A;if(C=B+Q|0,!(((Q=n[0|(B=E+1|0)])-48&255)>>>0<10))break}(0|A)==(0|B)|(48==(0|g)?(0|A)!=(0|E):0)||(i[I>>2]=C,a=B)}return a}function mA(A,I){var g,B,Q,C,E,n,a,r,o;g=i[I+4>>2],B=i[I+8>>2],Q=i[I+12>>2],C=i[I+16>>2],E=i[I+20>>2],n=i[I+24>>2],a=i[I+28>>2],r=i[I+32>>2],o=i[I+36>>2],i[A>>2]=0-i[I>>2],i[A+36>>2]=0-o,i[A+32>>2]=0-r,i[A+28>>2]=0-a,i[A+24>>2]=0-n,i[A+20>>2]=0-E,i[A+16>>2]=0-C,i[A+12>>2]=0-Q,i[A+8>>2]=0-B,i[A+4>>2]=0-g}function vA(A,I,g){var B=0;B=I<<8&16711680|I<<24,B|=255&(g<<8|I>>>24)|65280&(g<<24|I>>>8),I=-16777216&((255&g)<<24|I>>>8)|16711680&((16777215&g)<<8|I>>>24)|g>>>8&65280|g>>>24|0,C[0|A]=I,C[A+1|0]=I>>>8,C[A+2|0]=I>>>16,C[A+3|0]=I>>>24,I=B,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24}function UA(A,I,g){var B;B=A,g?(i[A+48>>2]=n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,g=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24):(i[A+48>>2]=0,g=0),i[B+52>>2]=g,i[A+56>>2]=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,i[A+60>>2]=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24}function SA(A,I){var g,B,Q,C,E,n,a,r,o;g=i[I+8>>2],B=i[I+12>>2],Q=i[I+16>>2],C=i[I+20>>2],E=i[I+24>>2],n=i[I+28>>2],a=i[I>>2],r=i[I+4>>2],o=i[I+36>>2],i[A+32>>2]=i[I+32>>2],i[A+36>>2]=o,i[A+24>>2]=E,i[A+28>>2]=n,i[A+16>>2]=Q,i[A+20>>2]=C,i[A+8>>2]=g,i[A+12>>2]=B,i[A>>2]=a,i[A+4>>2]=r}function NA(A,I,g,B,Q,C,E,a,r,o,e){var t;return h=t=h-48|0,i[t+8>>2]=0,i[t>>2]=0,i[t+4>>2]=0,x(t+16|0,o,e),e=n[o+16|0]|n[o+17|0]<<8|n[o+18|0]<<16|n[o+19|0]<<24,o=n[o+20|0]|n[o+21|0]<<8|n[o+22|0]<<16|n[o+23|0]<<24,i[t+4>>2]=e,i[t+8>>2]=o,function(A,I,g,B,Q,C,E,n,a,r,o){var e;h=e=h-336|0,rg(e+16|0,64,r,o),lg(e+80|0,e+16|0),fI(e+16|0,64),yg(e+80|0,E,n,a),yg(e+80|0,34704,0-n&15,0),SI(A,B,Q,C,r,1,o),yg(e+80|0,A,Q,C),yg(e+80|0,34704,0-Q&15,0),tI(e+8|0,n,a),yg(e+80|0,e+8|0,8,0),tI(e+8|0,Q,C),yg(e+80|0,e+8|0,8,0),Fg(e+80|0,I),fI(e+80|0,256),g&&(i[g>>2]=16,i[g+4>>2]=0),h=e+336|0}(A,I,g,B,Q,C,E,a,r,t,t+16|0),fI(t+16|0,32),h=t+48|0,0}function MA(A,I,g,B,Q,C,E,a,r,o){var e;return h=e=h-48|0,i[e+8>>2]=0,i[e>>2]=0,i[e+4>>2]=0,x(e+16|0,r,o),o=n[r+16|0]|n[r+17|0]<<8|n[r+18|0]<<16|n[r+19|0]<<24,r=n[r+20|0]|n[r+21|0]<<8|n[r+22|0]<<16|n[r+23|0]<<24,i[e+4>>2]=o,i[e+8>>2]=r,A=function(A,I,g,B,Q,C,E,i,n,a){var r;return h=r=h-352|0,rg(r+32|0,64,n,a),lg(r+96|0,r+32|0),fI(r+32|0,64),yg(r+96|0,C,E,i),yg(r+96|0,34704,0-E&15,0),yg(r+96|0,I,g,B),yg(r+96|0,34704,0-g&15,0),tI(r+24|0,E,i),yg(r+96|0,r+24|0,8,0),tI(r+24|0,g,B),yg(r+96|0,r+24|0,8,0),Fg(r+96|0,r),fI(r+96|0,256),Q=kg(r,Q),fI(r,16),A&&(Q?(EA(A,0,g),Q=-1):(SI(A,I,g,B,n,1,a),Q=0)),h=r+352|0,Q}(A,I,g,B,Q,C,E,a,e,e+16|0),fI(e+16|0,32),h=e+48|0,A}function dA(A){var I;return I=n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24,A=n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24,p=65280&(A<<24|I>>>8)|255&(A<<8|I>>>24)|I<<8&16711680|I<<24,-16777216&((255&A)<<24|I>>>8)|16711680&((16777215&A)<<8|I>>>24)|A>>>8&65280|A>>>24|0}function PA(A,I,g,B,Q,C,E,n,a,r,o){var e;return h=e=h-336|0,og(e+16|0,r,o),lg(e+80|0,e+16|0),fI(e+16|0,64),yg(e+80|0,E,n,a),tI(e+8|0,n,a),yg(e+80|0,e+8|0,8,0),NI(A,B,Q,C,r,o),yg(e+80|0,A,Q,C),tI(e+8|0,Q,C),yg(e+80|0,e+8|0,8,0),Fg(e+80|0,I),fI(e+80|0,256),g&&(i[g>>2]=16,i[g+4>>2]=0),h=e+336|0,0}function RA(A,I,g,B){var Q;if(h=Q=h-192|0,!(!g|(I-1&255)>>>0>=64|(B-1&255)>>>0>=64))return E[Q+130>>1]=257,C[Q+129|0]=B,C[Q+128|0]=I,WI(Q+128|4),tI(Q+128|8,0,0),EA(Q+144|0,0,48),hA(A,Q+128|0),EA(B+Q|0,0,128-B|0),QA(I=A,A=X(Q,g,B),128,0),fI(A,128),h=A+192|0,0;OI(),e()}function JA(A,I,g){i[A+48>>2]=g?n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24:0,i[A+52>>2]=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,i[A+56>>2]=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,i[A+60>>2]=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24}function xA(A,I,g,B,Q,C,E){var n;return h=n=h-16|0,A=EA(A,0,128),E>>>0<2147483649&&!(B|C)?E>>>0>8191&&Q|C?(cI(n,16),A=pA(Q,E>>>10|0,1,I,g,n,16,0,32,A,128,2)?-1:0):(i[8960]=28,A=-1):(i[8960]=22,A=-1),h=n+16|0,A}function LA(A){var I=0;return(0-(I=A+4&(A+65488>>>8^-1)&(57-A>>>8^-1)&255|((I=A-65|0)>>>8^-1)&I&(90-A>>>8^-1)&255|A+185&(A+65439>>>8^-1)&(122-A>>>8^-1)&255|63&(1+(16288^A)>>>8^-1)|62&(1+(16338^A)>>>8^-1))>>>8^-1)&1+(65470^A)>>>8&255|I}function KA(A){var I=0;return(0-(I=A+4&(A+65488>>>8^-1)&(57-A>>>8^-1)&255|((I=A-65|0)>>>8^-1)&I&(90-A>>>8^-1)&255|A+185&(A+65439>>>8^-1)&(122-A>>>8^-1)&255|63&(1+(16336^A)>>>8^-1)|62&(1+(16340^A)>>>8^-1))>>>8^-1)&1+(65470^A)>>>8&255|I}function qA(A,I){var g,B,Q=0,E=0,i=0,n=0;for(h=g=h-16|0,Q=10;n=Q,i=(I>>>0)/10|0,C[0|(E=(Q=Q-1|0)+(g+6|0)|0)]=I-r(i,10)|48,!(I>>>0<10)&&(I=i,Q););B=X(I=A,E,A=11-n|0)+A|0,C[0|B]=0,h=g+16|0}function XA(A,I,g){var B=0,Q=0,C=0;if(!g)return 0;A:if(B=n[0|A]){for(;;){if((0|(Q=n[0|I]))==(0|B)&&!(!(g=g-1|0)|!Q)){if(I=I+1|0,B=n[A+1|0],A=A+1|0,B)continue;break A}break}C=B}return(255&C)-n[0|I]|0}function VA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g),_(B,B,g+40|0),_(C=A+120|0,g+120|0,I+120|0),_(A,I+80|0,g+80|0),sA(Q,A,A),yA(A,E,B),sA(B,E,B),sA(E,Q,C),yA(C,Q,C),h=Q+48|0}function WA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g+40|0),_(B,B,g),_(C=A+120|0,g+120|0,I+120|0),_(A,I+80|0,g+80|0),sA(Q,A,A),yA(A,E,B),sA(B,E,B),yA(E,Q,C),sA(C,Q,C),h=Q+48|0}function TA(A,I){for(var g=0,B=0,Q=0,C=0;Q=(g=B<<3)+A|0,C=n[0|(g=I+g|0)]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,g=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24,i[Q>>2]=C,i[Q+4>>2]=g,128!=(0|(B=B+1|0)););}function jA(A,I,g){var B;if(i[12+(B=h-16|0)>>2]=A,i[B+8>>2]=I,I=0,i[B+4>>2]=0,(0|g)>=1)for(;i[B+4>>2]=i[B+4>>2]|n[i[B+8>>2]+I|0]^n[i[B+12>>2]+I|0],(0|g)!=(0|(I=I+1|0)););return(i[B+4>>2]-1>>>8&1)-1|0}function ZA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g+40|0),_(B,B,g),_(C=A+120|0,g+80|0,I+120|0),sA(Q,I=I+80|0,I),yA(A,E,B),sA(B,E,B),yA(E,Q,C),sA(C,Q,C),h=Q+48|0}function OA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g),_(B,B,g+40|0),_(C=A+120|0,g+80|0,I+120|0),sA(Q,I=I+80|0,I),yA(A,E,B),sA(B,E,B),sA(E,Q,C),yA(C,Q,C),h=Q+48|0}function zA(A,I,g){var B;if(i[12+(B=h-16|0)>>2]=A,i[B+8>>2]=I,I=0,C[B+7|0]=0,g)for(;C[B+7|0]=n[B+7|0]|n[i[B+8>>2]+I|0]^n[i[B+12>>2]+I|0],(0|g)!=(0|(I=I+1|0)););return(n[B+7|0]-1>>>8&1)-1|0}function $A(A,I,g){var B,Q=0,E=0;if(h=B=h-16|0,C[B+15|0]=0,E=-1,!(0|Vg[i[8950]](A,I,g))){for(;C[B+15|0]=n[A+Q|0]|n[B+15|0],32!=(0|(Q=Q+1|0)););E=0-(n[B+15|0]-1>>>8&1)|0}return h=B+16|0,E}function AI(A,I){var g,B,Q,C,E;h=B=h-48|0,H(A,I),H(g=A+80|0,E=I+40|0),function(A,I){var g,B,Q,C,E,n,a,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0,EA=0,iA=0,nA=0;E=K=(W=i[I+12>>2])<<1,n=K>>31,a=K=(O=i[I+4>>2])<<1,K=eg(E,n,K,g=K>>31),X=p,q=K,k=K=gA=i[I+8>>2],V=eg(K,z=K>>31,K,z),K=p+X|0,K=(q=q+V|0)>>>0>>0?K+1|0:K,V=q,B=q=BA=i[I+16>>2],o=q>>31,e=q=(QA=i[I>>2])<<1,X=eg(B,o,q,Q=q>>31),K=p+K|0,K=(q=V+X|0)>>>0>>0?K+1|0:K,j=q,X=i[I+28>>2],l=q=r(X,38),U=X,V=eg(q,h=q>>31,X,_=X>>31),K=p+K|0,K=(q=j+V|0)>>>0>>0?K+1|0:K,T=q,j=i[I+32>>2],Z=eg(f=q=r(j,19),c=q>>31,q=(V=i[I+24>>2])<<1,q>>31),q=p+K|0,q=Z>>>0>($=T+Z|0)>>>0?q+1|0:q,T=$,IA=i[I+36>>2],t=K=r(IA,38),C=K>>31,D=I=($=i[I+20>>2])<<1,Z=eg(K,C,I,s=I>>31),I=p+q|0,H=(K=T+Z|0)<<1,P=K=(K>>>0>>0?I+1|0:I)<<1|K>>>31,S=I=H+33554432|0,R=K=I>>>0<33554432?K+1|0:K,I=K>>26,K=(67108863&K)<<6|S>>>26,q=eg(a,g,B,o),Z=p,T=K,u=K=gA<<1,CA=W,W=eg(K,w=K>>31,W,Y=W>>31),K=p+Z|0,K=(q=W+q|0)>>>0>>0?K+1|0:K,gA=$,W=(Z=eg($,F=$>>31,e,Q))+q|0,q=p+K|0,q=W>>>0>>0?q+1|0:q,BA=W,N=K=X<<1,W=eg(f,c,K,b=K>>31),K=p+q|0,K=(X=BA+W|0)>>>0>>0?K+1|0:K,q=X,W=V,X=eg(t,C,V,y=V>>31),K=p+K|0,K=(q=q+X|0)>>>0>>0?K+1|0:K,X=q,I=I+(q=K<<1|q>>>31)|0,EA=K=T+(X<<=1)|0,K=K>>>0>>0?I+1|0:I,J=I=EA+16777216|0,I=(33554431&(K=I>>>0<16777216?K+1|0:K))<<7|I>>>25,X=K>>25,K=eg(E,n,CA,Y),q=p,T=I,I=(Z=eg(B,o,u,w))+K|0,K=p+q|0,K=I>>>0>>0?K+1|0:K,q=eg(a,g,D,s),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(Z=eg(e,Q,V,y))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,Z=j,j=eg(f,c,j,G=j>>31),K=p+I|0,K=(q=j+q|0)>>>0>>0?K+1|0:K,I=(j=eg(t,C,N,b))+q|0,q=p+K|0,I=((K=I)>>>0>>0?q+1|0:q)<<1|K>>>31,j=K<<1,K=I+X|0,K=(q=T+j|0)>>>0>>0?K+1|0:K,iA=q=(I=q)+33554432|0,X=K=q>>>0<33554432?K+1|0:K,K=-67108864&q,i[A+24>>2]=I-K,j=A,I=eg(I=r($,38),I>>31,$,F),K=p,T=I,$=eg(I=QA,q=I>>31,I,q),q=p+K|0,q=(I=T+$|0)>>>0<$>>>0?q+1|0:q,K=I,AA=I=r(V,19),m=I>>31,M=I=B<<1,I=K+(V=eg(AA,m,I,v=I>>31))|0,K=p+q|0,K=I>>>0>>0?K+1|0:K,q=eg(E,n,l,h),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(V=eg(f,c,u,w))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,V=eg(a,g,t,C),K=p+I|0,x=K=((I=q=V+q|0)>>>0>>0?K+1|0:K)<<1|I>>>31,QA=I=33554432+($=I<<1)|0,BA=q=I>>>0<33554432?K+1|0:K,I=(67108863&q)<<6|I>>>26,V=q>>26,K=eg(AA,m,D,s),q=p,nA=I,I=(O=eg(e,Q,T=O,d=T>>31))+K|0,K=p+q|0,K=I>>>0>>0?K+1|0:K,q=(O=eg(B,o,l,h))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,O=eg(f,c,E,n),K=p+I|0,K=(q=O+q|0)>>>0>>0?K+1|0:K,I=(O=eg(t,C,k,z))+q|0,q=p+K|0,I=((K=I)>>>0>>0?q+1|0:q)<<1|K>>>31,O=K<<1,K=I+V|0,K=(q=nA+O|0)>>>0>>0?K+1|0:K,O=q,(I=q+16777216|0)>>>0<16777216&&(K=K+1|0),nA=I,q=I,I=K>>25,K=(33554431&K)<<7|q>>>25,V=I,I=eg(e,Q,k,z),q=p,L=K,T=eg(a,g,T,d),K=p+q|0,K=(I=T+I|0)>>>0>>0?K+1|0:K,T=eg(AA,m,W,y),q=p+K|0,q=(I=T+I|0)>>>0>>0?q+1|0:q,T=eg(D,s,l,h),K=p+q|0,K=(I=T+I|0)>>>0>>0?K+1|0:K,q=eg(f,c,M,v),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(T=eg(t,C,E,n))+I|0,I=p+K|0,K=(K=(I=q>>>0>>0?I+1|0:I)<<1|q>>>31)+V|0,q=K=(I=L+(q<<=1)|0)>>>0>>0?K+1|0:K,T=K=I+33554432|0,V=q=K>>>0<33554432?q+1|0:q,K&=-67108864,i[j+8>>2]=I-K,I=eg(u,w,gA,F),q=p,K=(AA=eg(B,o,E,n))+I|0,I=p+q|0,I=K>>>0>>0?I+1|0:I,q=(AA=eg(a,g,W,y))+K|0,K=p+I|0,K=q>>>0>>0?K+1|0:K,I=(AA=eg(e,Q,U,_))+q|0,q=p+K|0,q=I>>>0>>0?q+1|0:q,AA=eg(t,C,Z,G),K=p+q|0,K=(K=(K=(I=AA+I|0)>>>0>>0?K+1|0:K)<<1|I>>>31)+(q=X>>26)|0,q=I=(X=(67108863&X)<<6|iA>>>26)+(I<<1)|0,I=K=I>>>0>>0?K+1|0:K,iA=K=q+16777216|0,X=I=K>>>0<16777216?I+1|0:I,I=-33554432&K,i[j+28>>2]=q-I,I=eg(e,Q,CA,Y),K=p,q=eg(a,g,k,z),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(W,y,l,h),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(z=eg(f,c,D,s))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,K=(z=eg(t,C,B,o))+q|0,q=p+I|0,I=K,K=(K>>>0>>0?q+1|0:q)<<1|K>>>31,q=I<<1,K=(I=V>>26)+K|0,K=(q=q+(V=(67108863&V)<<6|T>>>26)|0)>>>0>>0?K+1|0:K,CA=q=(I=q)+16777216|0,V=K=q>>>0<16777216?K+1|0:K,K=-33554432&q,i[j+12>>2]=I-K,z=A,I=eg(W,y,u,w),K=p,q=eg(B,o,B,o),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(E,n,D,s),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(a,g,N,b),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(j=eg(e,Q,Z,G))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,K=(IA=eg(t,C,j=IA,T=j>>31))+q|0,q=p+I|0,A=(I=K)<<1,K=(I=X>>25)+(K=(K>>>0>>0?q+1|0:q)<<1|K>>>31)|0,K=(q=A+(X=(33554431&X)<<7|iA>>>25)|0)>>>0>>0?K+1|0:K,IA=q=(I=q)+33554432|0,X=K=q>>>0<33554432?K+1|0:K,K=-67108864&q,i[z+32>>2]=I-K,K=V>>25,q=(V=(33554431&V)<<7|CA>>>25)+(H-(I=-67108864&S)|0)|0,I=K+(P-((I>>>0>H>>>0)+R|0)|0)|0,K=I=q>>>0>>0?I+1|0:I,V=I=q+33554432|0,I=((67108863&(K=I>>>0<33554432?K+1|0:K))<<6|I>>>26)+(EA=EA-(-33554432&J)|0)|0,i[z+20>>2]=I,I=-67108864&V,i[z+16>>2]=q-I,I=eg(E,n,W,y),q=p,K=(W=eg(gA,F,M,v))+I|0,I=p+q|0,I=K>>>0>>0?I+1|0:I,q=(W=eg(u,w,U,_))+K|0,K=p+I|0,K=q>>>0>>0?K+1|0:K,I=(W=eg(a,g,Z,G))+q|0,q=p+K|0,q=I>>>0>>0?q+1|0:q,W=eg(e,Q,j,T),K=p+q|0,K=(K=(K=(I=W+I|0)>>>0>>0?K+1|0:K)<<1|I>>>31)+(q=X>>26)|0,K=(I=(X=(67108863&X)<<6|IA>>>26)+(I<<1)|0)>>>0>>0?K+1|0:K,q=I,X=I,I=K,I=(K=q+16777216|0)>>>0<16777216?I+1|0:I,q=-33554432&K,i[z+36>>2]=X-q,V=O-(-33554432&nA)|0,I=(K=eg((33554431&I)<<7|K>>>25,I>>25,19,0))+($-(q=-67108864&QA)|0)|0,q=p+(x-((q>>>0>$>>>0)+BA|0)|0)|0,q=I>>>0>>0?q+1|0:q,K=I,I=q,I=((67108863&(I=(q=K+33554432|0)>>>0<33554432?I+1|0:I))<<6|q>>>26)+V|0,i[z+4>>2]=I,A=-67108864&q,i[z>>2]=K-A}(C=A+120|0,I+80|0),sA(Q=A+40|0,I,E),H(B,Q),sA(Q,g,A),yA(g,g,A),yA(A,B,Q),yA(C,C,g),h=B+48|0}function II(A){var I,g;return(A=(I=i[8943])+(g=A+3&-4)|0)>>>0<=I>>>0&&(0|g)>=1||A>>>0>Wg()<<16>>>0&&!(0|w(0|A))?(i[8960]=48,-1):(i[8943]=A,I)}function gI(A,I){var g;return h=g=h+-64|0,(I-1&255)>>>0>=64&&(OI(),e()),C[g+3|0]=1,C[g+1|0]=0,C[g+2|0]=1,C[0|g]=I,WI(4|g),tI(8|g,0,0),EA(g+16|0,0,48),hA(A,g),h=g- -64|0,0}function BI(A,I,g,B,Q,C,E){var i=0,n=0;i=B,1==(((i=(n=g+63|0)>>>0<63?i+1|0:i)>>>6|0)+(0!=(0|(i=(63&i)<<26|n>>>6)))|0)&(n=0-i|0)>>>0>>0&&(OI(),e()),SI(A,I,g,B,Q,C,E)}function QI(A,I){for(var g=0,B=0,Q=0,C=0;B=(g=Q<<3)+A|0,C=i[(g=I+g|0)>>2],g=i[B+4>>2]^i[g+4>>2],i[B>>2]=i[B>>2]^C,i[B+4>>2]=g,128!=(0|(Q=Q+1|0)););}function CI(A){var I,g;return 95&(1+(32704^A)>>>8^-1)|45&(1+(16321^A)>>>8^-1)|(I=A+65510>>>8&255)&A+65|(g=A+65484>>>8|0)&A+71&(255^I)|A+252&A+65474>>>8&(-1^g)&255}function EI(A){var I,g;return 47&(1+(16320^A)>>>8^-1)|43&(1+(16321^A)>>>8^-1)|(I=A+65510>>>8&255)&A+65|(g=A+65484>>>8|0)&A+71&(255^I)|A+252&A+65474>>>8&(-1^g)&255}function iI(A,I,g,B){var Q=0;Q=-1;A:if(!(g>>>0>64|B-1>>>0>63)){I:{if(!g||!I){if(!gI(A,255&B))break I;break A}if(RA(A,255&B,I,255&g))break A}Q=0}return Q}function nI(A,I){var g,B,Q;h=g=h-144|0,j(g+96|0,I+80|0),_(g+48|0,I,g+96|0),_(g,I+40|0,g+96|0),BA(A,g),B=A,Q=KI(g+48|0)<<7^n[A+31|0],C[B+31|0]=Q,h=g+144|0}function aI(A,I){var g,B=0;if(C[15+(g=h-16|0)|0]=0,I)for(;C[g+15|0]=n[A+B|0]|n[g+15|0],(0|(B=B+1|0))!=(0|I););return n[g+15|0]-1>>>8&1}function rI(A,I,g,B){var Q;return B=I+B|0,B=(Q=A+g|0)>>>0>>0?B+1|0:B,g=eg(A<<1&-2,1&(I=I<<1|A>>>31),g,0),A=p+B|0,p=A=(I=g+Q|0)>>>0>>0?A+1|0:A,I}function oI(A,I,g){var B,Q=0;if(B=g>>>3|0)for(g=0;vA((Q=g<<3)+A|0,i[(Q=I+Q|0)>>2],i[Q+4>>2]),(0|B)!=(0|(g=g+1|0)););}function eI(A,I){var g=0;!function(A,I){I&&((I=i[A>>2])&&fI(i[I+4>>2],i[A+16>>2]<<10),(I=i[A+4>>2])&&fI(I,i[A+20>>2]<<3))}(A,4&I),m(i[A+4>>2]),i[A+4>>2]=0,(I=i[A>>2])&&(g=i[I>>2])&&m(g),m(I),i[A>>2]=0}function tI(A,I,g){C[0|A]=I,C[A+1|0]=I>>>8,C[A+2|0]=I>>>16,C[A+3|0]=I>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24}function fI(A,I){var g;if(i[12+(g=h-16|0)>>2]=A,I)for(A=0;C[i[g+12>>2]+A|0]=0,(0|I)!=(0|(A=A+1|0)););}function cI(A,I){A|=0;var g=0,B=0,Q=0;if(I|=0)for(;B=A+g|0,Q=YI(),C[0|B]=Q,(0|(g=g+1|0))!=(0|I););}function yI(A,I,g,B,Q){var C,E;return A|=0,I|=0,g|=0,B|=0,h=C=(E=h)-128&-64,IA(C,Q|=0),z(C,I,g,B),Z(C,A),h=E,0}function sI(A){var I=0,g=0,B=0;for(I=1;I=n[0|(B=A+g|0)]+I|0,C[0|B]=I,I=I>>>8|0,4!=(0|(g=g+1|0)););}function wI(A,I,g,B,Q,C,E,i){var n,a=0;return h=n=h-32|0,a=-1,jI(n,E,i)||(a=Qg(A,I,g,B,Q,C,n),fI(n,32)),h=n+32|0,a}function hI(A,I,g,B,Q,C,E,i){var n,a=0;return h=n=h-32|0,a=-1,jI(n,E,i)||(a=Cg(A,I,g,B,Q,C,n),fI(n,32)),h=n+32|0,a}function DI(A,I){var g,B,Q;_(A,I,g=I+120|0),_(A+40|0,B=I+40|0,Q=I+80|0),_(A+80|0,Q,g),_(A+120|0,I,B)}function uI(A,I,g,B,Q,C,E){return!B&g>>>0>=16|B?hI(A,I+16|0,I,g-16|0,B-(g>>>0<16)|0,Q,C,E):-1}function pI(A,I){for(var g=0,B=0;C[0|(B=A+g|0)]=n[0|B]^n[I+g|0],8!=(0|(g=g+1|0)););}function lI(A,I,g){var B,Q;h=B=(Q=h)-384&-64,qI(B,0,0,24),sg(B,I,32,0),sg(B,g,32,0),TI(B,A,24),h=Q}function FI(A,I){var g;sA(A,g=I+40|0,I),yA(A+40|0,g,I),SA(A+80|0,I+80|0),_(A+120|0,I+120|0,2224)}function GI(A,I,g,B,Q,C,E){return I-1>>>0>63|E>>>0>64?-1:function(A,I,g,B,Q,C,E){var i,n=0;if(i=n=h,h=n=n-384&-64,!(!A|(B-1&255)>>>0>=64|(Q|C?!I:0)|E>>>0>=65|(E?!g:0)))return E?RA(n,B,g,E):gI(n,B),QA(n,I,Q,C),M(n,A,B),h=i,0;OI(),e()}(A,g,C,255&I,B,Q,255&E)}function kI(A,I,g,B,Q,C,E){return!B&g>>>0>=4294967280|B&&(OI(),e()),wI(A+16|0,A,I,g,B,Q,C,E)}function _I(A,I){var g;_(A,I,g=I+120|0),_(A+40|0,I+40|0,I=I+80|0),_(A+80|0,I,g)}function HI(A){var I;return I=n[0|A]|n[A+1|0]<<8,A=n[A+2|0],p=A>>>16|0,I|A<<16}function YI(){var A,I;return h=A=h-16|0,C[A+15|0]=0,I=0|f(1024,A+15|0,0),h=A+16|0,0|I}function bI(A,I,g,B,Q){var E;return h=E=h-416|0,function(A,I){var g,B=0,Q=0;for(h=g=h-192|0,MI(A),EA(g- -64|0,54,128),C[g+64|0]=54^n[0|I],B=1;C[0|(Q=(g- -64|0)+B|0)]=n[0|Q]^n[I+B|0],32!=(0|(B=B+1|0)););for(V(A,g- -64|0,128,0),MI(A=A+208|0),EA(g- -64|0,92,128),C[g+64|0]=92^n[0|I],B=1;C[0|(Q=(g- -64|0)+B|0)]=n[0|Q]^n[I+B|0],32!=(0|(B=B+1|0)););V(A,g- -64|0,128,0),fI(g- -64|0,128),fI(g,64),h=g+192|0}(E,Q),V(E,I,g,B),function(A,I){var g,B=0;h=g=h+-64|0,function(A,I){var g;h=g=h+-64|0,UI(A,g),V(A=A+208|0,g,64,0),UI(A,I),fI(g,64),h=g- -64|0}(A,g),B=i[g+28>>2],A=i[g+24>>2],C[I+24|0]=A,C[I+25|0]=A>>>8,C[I+26|0]=A>>>16,C[I+27|0]=A>>>24,C[I+28|0]=B,C[I+29|0]=B>>>8,C[I+30|0]=B>>>16,C[I+31|0]=B>>>24,B=i[g+20>>2],A=i[g+16>>2],C[I+16|0]=A,C[I+17|0]=A>>>8,C[I+18|0]=A>>>16,C[I+19|0]=A>>>24,C[I+20|0]=B,C[I+21|0]=B>>>8,C[I+22|0]=B>>>16,C[I+23|0]=B>>>24,B=i[g+12>>2],A=i[g+8>>2],C[I+8|0]=A,C[I+9|0]=A>>>8,C[I+10|0]=A>>>16,C[I+11|0]=A>>>24,C[I+12|0]=B,C[I+13|0]=B>>>8,C[I+14|0]=B>>>16,C[I+15|0]=B>>>24,B=i[g+4>>2],A=i[g>>2],C[0|I]=A,C[I+1|0]=A>>>8,C[I+2|0]=A>>>16,C[I+3|0]=A>>>24,C[I+4|0]=B,C[I+5|0]=B>>>8,C[I+6|0]=B>>>16,C[I+7|0]=B>>>24,h=g- -64|0}(E,A),h=E+416|0,0}function mI(A,I,g,B){var Q;return h=Q=h-208|0,MI(Q),V(Q,I,g,B),UI(Q,A),h=Q+208|0,0}function vI(A,I){var g=0;return(-1>>>(g=31&I)&A)<>>A}function UI(A,I){var g;h=g=h-704|0,function(A,I){var g,B=0;(g=i[A+72>>2]>>>3&127)>>>0<=111?X(80+(A+g|0)|0,35424,112-g|0):(X((B=A+80|0)+g|0,35424,128-g|0),F(A,B,I,I+640|0),EA(B,0,112)),oI(A+192|0,A- -64|0,16),F(A,A+80|0,I,I+640|0)}(A,g),oI(I,A,64),fI(g,704),fI(A,208),h=g+704|0}function SI(A,I,g,B,Q,C,E){1==(0|B)|B>>>0>1&&(OI(),e()),Vg[i[8957]](A,I,g,B,Q,C,E)}function NI(A,I,g,B,Q,C){1==(0|B)|B>>>0>1&&(OI(),e()),Vg[i[8956]](A,I,g,B,Q,1,0,C)}function MI(A){i[A+64>>2]=0,i[A+68>>2]=0,i[A+72>>2]=0,i[A+76>>2]=0,X(A,34720,64)}function dI(A,I,g){return g>>>0>=256&&(t(2016,2036,107,2089),e()),M(A,I,255&g)}function PI(){var A;h=A=h-16|0,C[A+15|0]=0,f(1062,A+15|0,0),h=A+16|0}function RI(A){var I;return h=I=h-32|0,BA(I,A),A=aI(I,32),h=I+32|0,A}function JI(A,I){var g;h=g=h-128|0,function(A,I){SA(A,I),SA(A+40|0,I+40|0),SA(A+80|0,I+80|0)}(g+8|0,I),AI(A,g+8|0),h=g+128|0}function xI(A,I){C[0|A]=I,C[A+1|0]=I>>>8,C[A+2|0]=I>>>16,C[A+3|0]=I>>>24}function LI(A,I,g){eA(A,I,g),eA(A+40|0,I+40|0,g),eA(A+80|0,I+80|0,g)}function KI(A){var I;return h=I=h-32|0,BA(I,A),h=I+32|0,1&C[0|I]}function qI(A,I,g,B){return 0|iI(A|=0,I|=0,g|=0,B|=0)}function XI(A){C[A+32|0]=1,C[A+33|0]=0,C[A+34|0]=0,C[A+35|0]=0}function VI(A){i[A>>2]=0,i[A+4>>2]=0,i[A+8>>2]=0,i[A+12>>2]=0}function WI(A){C[0|A]=0,C[A+1|0]=0,C[A+2|0]=0,C[A+3|0]=0}function TI(A,I,g){return 0|dI(A|=0,I|=0,g|=0)}function jI(A,I,g){return 0|function(A,I,g){var B,Q=0;return h=B=h-32|0,Q=-1,$A(B,g,I)||(Q=K(A,35552,B)),h=B+32|0,Q}(A|=0,I|=0,g|=0)}function ZI(A,I,g){return 0|$A(A|=0,I|=0,g|=0)}function OI(){var A;(A=i[9105])&&Vg[0|A](),c(),e()}function zI(A){Ug(A),wg(A+40|0),wg(A+80|0),Ug(A+120|0)}function $I(A,I,g,B,Q,C){Vg[i[8953]](A,I,g,B,Q,0,0,C)}function Ag(A,I,g,B,Q,C){Vg[i[8953]](A,I,g,B,Q,1,0,C)}function Ig(A,I){return A|=0,cI(I|=0,32),0|cg(A,I)}function gg(A,I){return A=function(A,I){var g=0,B=0;A:{if(B=255&I){if(3&A)for(;;){if(!(g=n[0|A])|(0|g)==(255&I))break A;if(!(3&(A=A+1|0)))break}I:if(!((-1^(g=i[A>>2]))&g-16843009&-2139062144))for(B=r(B,16843009);;){if((-1^(g^=B))&g-16843009&-2139062144)break I;if(g=i[A+4>>2],A=A+4|0,g-16843009&(-1^g)&-2139062144)break}for(;(B=n[0|(g=A)])&&(A=g+1|0,(0|B)!=(255&I)););return g}return YA(A)+A|0}return A}(A,I),n[0|A]==(255&I)?A:0}function Bg(A,I,g,B,Q,C){return q(A,I,g,B,Q,C,0),0}function Qg(A,I,g,B,Q,C,E){return nA(A,I,g,B,Q,C,E)}function Cg(A,I,g,B,Q,C,E){return rA(A,I,g,B,Q,C,E)}function Eg(A,I,g,B,Q,C,E){return GI(A,I,g,B,Q,C,E)}function ig(A,I){MI(A),I&&V(A,35728,34,0)}function ng(A,I,g,B,Q){return lA(A,I,g,B,Q,0)}function ag(A,I){return 0|cg(A|=0,I|=0)}function rg(A,I,g,B){Vg[i[8955]](A,I,0,g,B)}function og(A,I,g){Vg[i[8954]](A,64,0,I,g)}function eg(A,I,g,B){return function(A,I,g,B){var Q,C,E,i,n=0,a=0;return i=r(n=g>>>16|0,a=A>>>16|0),n=(65535&(a=((E=r(Q=65535&g,C=65535&A))>>>16|0)+r(a,Q)|0))+r(n,C)|0,A=(r(I,g)+i|0)+r(A,B)+(a>>>16)+(n>>>16)|0,p=A,65535&E|n<<16}(A,I,g,B)}function tg(A,I){return(255&(A^I))-1>>>31|0}function fg(A,I,g){!function(A,I,g){var B,Q;h=B=h-128|0,wg(A),wg(A+40|0),Ug(A+80|0),LI(A,I,tg(g=g-((0-(Q=(128&g)>>>7|0)&g)<<1)<<24>>24,1)),LI(A,I+120|0,tg(g,2)),LI(A,I+240|0,tg(g,3)),LI(A,I+360|0,tg(g,4)),LI(A,I+480|0,tg(g,5)),LI(A,I+600|0,tg(g,6)),LI(A,I+720|0,tg(g,7)),LI(A,I+840|0,tg(g,8)),SA(B+8|0,A+40|0),SA(B+48|0,A),mA(B+88|0,A+80|0),LI(A,B+8|0,Q),h=B+128|0}(A,r(I,960)+3488|0,g)}function cg(A,I){return 0|Vg[i[8951]](A,I)}function yg(A,I,g,B){Vg[i[8948]](A,I,g,B)}function sg(A,I,g,B){return hg(A,I,g,B)}function wg(A){i[A>>2]=1,EA(A+4|0,0,36)}function hg(A,I,g,B){return QA(A,I,g,B)}function Dg(A,I,g){return function(A,I,g){var B=0,Q=0,C=0,E=0;return B=31&(C=E=63&g),C>>>0>=32?B=-1>>>B|0:(Q=-1>>>B|0,B=(1<>>B),C=B&A,B=I&Q,Q=31&E,E>>>0>=32?(B=C<>>32-Q|B<>>0>=32?(B=-1<>>32-g|-1<>>0>=32?(g=0,A=B>>>I|0):(g=B>>>I|0,A=((1<>>I),p=g|C,A|E}(A,I,g)}function ug(A,I,g){return function(A,I,g){var B=0,Q=0,C=0,E=0,i=0;return B=31&(E=63&g),E>>>0>=32?(Q=-1<>>32-B|-1<>>0>=32?(Q=0,E=B>>>C|0):(Q=B>>>C|0,E=((1<>>C),i=Q,C=31&(B=0-g&63),B>>>0>=32?(Q=0,g=-1>>>C|0):(Q=-1>>>C|0,g=(1<>>C),A&=g,I&=Q,Q=31&B,B>>>0>=32?(g=A<>>32-Q|I<>>0<18,U=U+2|0,Y;);xI(A,g+1634760805|0),xI(A+4|0,h+B|0),xI(A+8|0,D+Q|0),xI(A+12|0,b+C|0),xI(A+16|0,u+E|0),xI(A+20|0,H+857760878|0),xI(A+24|0,p+e|0),xI(A+28|0,l+t|0),xI(A+32|0,F+f|0),xI(A+36|0,_+c|0),xI(A+40|0,I+2036477234|0),xI(A+44|0,s+i|0),xI(A+48|0,y+a|0),xI(A+52|0,w+r|0),xI(A+56|0,k+o|0),xI(A+60|0,G+1797285236|0)}(A,I,g)}function vg(A){EA(A,0,1024)}function Ug(A){EA(A,0,40)}function Sg(){return 16}function Ng(){return 32}function Mg(){return 24}function dg(){return-17}function Pg(){return 64}function Rg(){return 1}function Jg(){return 2}function xg(){return 8}function Lg(){return 0}function Kg(){return-1}function qg(){return 3}Q(I=n,1024,"InsgcmV0dXJuIE1vZHVsZS5nZXRSYW5kb21WYWx1ZSgpOyB9IgB7IGlmIChNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPT09IHVuZGVmaW5lZCkgeyB0cnkgeyB2YXIgd2luZG93XyA9ICdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ID8gd2luZG93IDogc2VsZjsgdmFyIGNyeXB0b18gPSB0eXBlb2Ygd2luZG93Xy5jcnlwdG8gIT09ICd1bmRlZmluZWQnID8gd2luZG93Xy5jcnlwdG8gOiB3aW5kb3dfLm1zQ3J5cHRvOyB2YXIgcmFuZG9tVmFsdWVzU3RhbmRhcmQgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IG5ldyBVaW50MzJBcnJheSgxKTsgY3J5cHRvXy5nZXRSYW5kb21WYWx1ZXMoYnVmKTsgcmV0dXJuIGJ1ZlswXSA+Pj4gMDsgfTsgcmFuZG9tVmFsdWVzU3RhbmRhcmQoKTsgTW9kdWxlLmdldFJhbmRvbVZhbHVlID0gcmFuZG9tVmFsdWVzU3RhbmRhcmQ7IH0gY2F0Y2ggKGUpIHsgdHJ5IHsgdmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpOyB2YXIgcmFuZG9tVmFsdWVOb2RlSlMgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IGNyeXB0b1sncmFuZG9tQnl0ZXMnXSg0KTsgcmV0dXJuIChidWZbMF0gPDwgMjQgfCBidWZbMV0gPDwgMTYgfCBidWZbMl0gPDwgOCB8IGJ1ZlszXSkgPj4+IDA7IH07IHJhbmRvbVZhbHVlTm9kZUpTKCk7IE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9IHJhbmRvbVZhbHVlTm9kZUpTOyB9IGNhdGNoIChlKSB7IHRocm93ICdObyBzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm91bmQnOyB9IH0gfSB9AExpYnNvZGl1bURSR2J1Zl9sZW4gPD0gU0laRV9NQVgAcmFuZG9tYnl0ZXMvcmFuZG9tYnl0ZXMuYwByYW5kb21ieXRlcwBTLT5idWZsZW4gPD0gQkxBS0UyQl9CTE9DS0JZVEVTAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9ibGFrZTJiLXJlZi5jAGJsYWtlMmJfZmluYWwAAAAAAAAAAAjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FtvdXRsZW4gPD0gVUlOVDhfTUFYAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9nZW5lcmljaGFzaF9ibGFrZTJiLmMAY3J5cHRvX2dlbmVyaWNoYXNoX2JsYWtlMmJfZmluYWwAAAAAAAAAtnhZ/4Vy0wC9bhX/DwpqACnAAQCY6Hn/vDyg/5lxzv8At+L+tA1I/wAAAAAAAAAAsKAO/tPJhv+eGI8Af2k1AGAMvQCn1/v/n0yA/mpl4f8e/AQAkgyu"),Q(I,2224,"WfGy/grlpv973Sr+HhTUAFKAAwAw0fMAd3lA/zLjnP8AbsUBZxuQ"),Q(I,2272,"hTuMAb3xJP/4JcMBYNw3ALdMPv/DQj0AMkykAeGkTP9MPaP/dT4fAFGRQP92QQ4AonPW/waKLgB85vT/CoqPADQawgC49EwAgY8pAb70E/97qnr/YoFEAHnVkwBWZR7/oWebAIxZQ//v5b4BQwu1AMbwif7uRbz/Q5fuABMqbP/lVXEBMkSH/xFqCQAyZwH/UAGoASOYHv8QqLkBOFno/2XS/AAp+kcAzKpP/w4u7/9QTe8AvdZL/xGN+QAmUEz/vlV1AFbkqgCc2NABw8+k/5ZCTP+v4RD/jVBiAUzb8gDGonIALtqYAJsr8f6boGj/M7ulAAIRrwBCVKAB9zoeACNBNf5F7L8ALYb1AaN73QAgbhT/NBelALrWRwDpsGAA8u82ATlZigBTAFT/iKBkAFyOeP5ofL4AtbE+//opVQCYgioBYPz2AJeXP/7vhT4AIDicAC2nvf+OhbMBg1bTALuzlv76qg7/0qNOACU0lwBjTRoA7pzV/9XA0QFJLlQAFEEpATbOTwDJg5L+qm8Y/7EhMv6rJsv/Tvd0ANHdmQCFgLIBOiwZAMknOwG9E/wAMeXSAXW7dQC1s7gBAHLbADBekwD1KTgAfQ3M/vStdwAs3SD+VOoUAPmgxgHsfur/L2Oo/qrimf9ms9gA4o16/3pCmf629YYA4+QZAdY56//YrTj/tefSAHeAnf+BX4j/bn4zAAKpt/8HgmL+RbBe/3QE4wHZ8pH/yq0fAWkBJ/8ur0UA5C86/9fgRf7POEX/EP6L/xfP1P/KFH7/X9Vg/wmwIQDIBc//8SqA/iMhwP/45cQBgRF4APtnl/8HNHD/jDhC/yji9f/ZRiX+rNYJ/0hDhgGSwNb/LCZwAES4S//OWvsAleuNALWqOgB09O8AXJ0CAGatYgDpiWABfzHLAAWblAAXlAn/03oMACKGGv/bzIgAhggp/+BTK/5VGfcAbX8A/qmIMADud9v/563VAM4S/v4Iugf/fgkHAW8qSABvNOz+YD+NAJO/f/7NTsD/DmrtAbvbTACv87v+aVmtAFUZWQGi85QAAnbR/iGeCQCLoy7/XUYoAGwqjv5v/I7/m9+QADPlp/9J/Jv/XnQM/5ig2v+c7iX/s+rP/8UAs/+apI0A4cRoAAojGf7R1PL/Yf3e/rhl5QDeEn8BpIiH/x7PjP6SYfMAgcAa/slUIf9vCk7/k1Gy/wQEGACh7tf/Bo0hADXXDv8ptdD/54udALPL3f//uXEAveKs/3FC1v/KPi3/ZkAI/06uEP6FdUT/"),Q(I,3264,"AQ=="),Q(I,3296,"JuiVj8KyJ7BFw/SJ8u+Y8NXfrAXTxjM5sTgCiG1T/AXHF2pwPU3YT7o8C3YNEGcPKiBT+iw5zMZOx/13kqwDeuz///////////////////////////////////////9/7f///////////////////////////////////////3/u////////////////////////////////////////f+3T9VwaYxJY1pz3ot753hQ="),Q(I,3487,"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"),Q(I,34460,"AQ=="),Q(I,34496,"AQ=="),Q(I,34528,"4Ot6fDtBuK4WVuP68Z/EatoJjeucMrH9hmIFFl9JuABfnJW8o1CMJLHQsVWcg+9bBERcxFgcjobYIk7d0J8RV+z///////////////////////////////////////9/7f///////////////////////////////////////3/u////////////////////////////////////////fw=="),Q(I,34720,"CMm882fmCWo7p8qEha5nuyv4lP5y82488TYdXzr1T6XRguatf1IOUR9sPiuMaAWba71B+6vZgx95IX4TGc3gWyKuKNeYL4pCzWXvI5FEN3EvO03sz/vAtbzbiYGl27XpOLVI81vCVjkZ0AW28RHxWZtPGa+kgj+SGIFt2tVeHKtCAgOjmKoH2L5vcEUBW4MSjLLkTr6FMSTitP/Vw30MVW+Je/J0Xb5ysZYWO/6x3oA1Esclpwbcm5Qmac908ZvB0krxnsFpm+TjJU84hke+77XVjIvGncEPZZysd8yhDCR1AitZbyzpLYPkpm6qhHRK1PtBvdypsFy1UxGD2oj5dqvfZu5SUT6YEDK0LW3GMag/IfuYyCcDsOQO777Hf1m/wo+oPfML4MYlpwqTR5Gn1W+CA+BRY8oGcG4OCmcpKRT8L9JGhQq3JybJJlw4IRsu7SrEWvxtLE3fs5WdEw04U95jr4tUcwplqLJ3PLsKanbmru1HLsnCgTs1ghSFLHKSZAPxTKHov6IBMEK8S2YaqJGX+NBwi0vCML5UBqNRbMcYUu/WGeiS0RCpZVUkBpnWKiBxV4U1DvS40bsycKBqEMjQ0rgWwaQZU6tBUQhsNx6Z647fTHdIJ6hIm+G1vLA0Y1rJxbMMHDnLikHjSqrYTnPjY3dPypxbo7iy1vNvLmj8su9d7oKPdGAvF0NvY6V4cqvwoRR4yITsOWQaCALHjCgeYyP6/76Q6b2C3utsUKQVecay96P5vitTcuPyeHHGnGEm6s4+J8oHwsAhx7iG0R7r4M3WfdrqeNFu7n9PffW6bxdyqmfwBqaYyKLFfWMKrg35vgSYPxEbRxwTNQtxG4R9BCP1d9sokyTHQHuryjK8vskVCr6ePEwNEJzEZx1DtkI+y77UxUwqfmX8nCl/Wez61jqrb8tfF1hHSowZRGyA"),Q(I,35568,"YjY0X3BvcyA8PSBiNjRfbGVuAHNvZGl1bS9jb2RlY3MuYwBzb2RpdW1fYmluMmJhc2U2NAAkYXJnb24yaWQAJGFyZ29uMmkAJHY9ACRtPQAsdD0ALHA9ACRhcmdvbjJpZCR2PQAkYXJnb24yaSR2PQAkYXJnb24yaWQkACRhcmdvbjJpJA=="),Q(I,35728,"U2lnRWQyNTUxOSBubyBFZDI1NTE5IGNvbGxpc2lvbnMBADEuMC4xOA=="),Q(I,35772,"UI5QAABAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAAN");var Xg,Vg=((Xg=[null,yI,function(A,I,g,B,Q){var C;return A|=0,h=C=h-16|0,yI(C,I|=0,g|=0,B|=0,Q|=0),A=kg(A,C),h=C+16|0,0|A},function(A,I){return IA(A|=0,I|=0),0},function(A,I,g,B){return z(A|=0,I|=0,g|=0,B|=0),0},function(A,I){return Z(A|=0,I|=0),0},function(A,I,g){A|=0,I|=0;var B,Q=0,E=0;if(h=B=h-336|0,Q=-1,!function(A){var I,g=0,B=0,Q=0,E=0;for(C[11+(I=h-16|0)|0]=0,C[I+12|0]=0,C[I+13|0]=0,C[I+14|0]=0,i[I+8>>2]=0;;){for(Q=n[A+B|0],g=0;C[0|(E=(I+8|0)+g|0)]=n[0|E]|Q^n[(34464+(g<<5)|0)+B|0],7!=(0|(g=g+1|0)););if(31==(0|(B=B+1|0)))break}for(B=127&n[A+31|0],A=0,g=0;C[0|(Q=(I+8|0)+g|0)]=n[0|Q]|B^n[34495+(g<<5)|0],7!=(0|(g=g+1|0)););for(g=0;g=n[(I+8|0)+A|0]-1|g,7!=(0|(A=A+1|0)););return g>>>8&1}(g|=0)){for(Q=0;C[A+Q|0]=n[I+Q|0],32!=(0|(Q=Q+1|0)););for(C[0|A]=248&n[0|A],C[A+31|0]=63&n[A+31|0]|64,d(B+288|0,g),wg(B+240|0),Ug(B+192|0),SA(B+144|0,B+288|0),wg(B+96|0),g=254,I=0;Q=I,E=g,AA(B+240|0,B+144|0,Q^=I=n[(g>>>3|0)+A|0]>>>(7&g)&1),AA(B+192|0,B+96|0,Q),g=g-1|0,yA(B+48|0,B+144|0,B+96|0),yA(B,B+240|0,B+192|0),sA(B+240|0,B+240|0,B+192|0),sA(B+192|0,B+144|0,B+96|0),_(B+96|0,B+48|0,B+240|0),_(B+192|0,B+192|0,B),H(B+48|0,B),H(B,B+240|0),sA(B+144|0,B+96|0,B+192|0),yA(B+192|0,B+96|0,B+192|0),_(B+240|0,B,B+48|0),yA(B,B,B+48|0),H(B+192|0,B+192|0),P(B+96|0,B),H(B+144|0,B+144|0),sA(B+48|0,B+48|0,B+96|0),_(B+96|0,B+288|0,B+192|0),_(B+192|0,B,B+48|0),E;);AA(B+240|0,B+144|0,I),AA(B+192|0,B+96|0,I),j(B+192|0,B+192|0),_(B+240|0,B+240|0,B+192|0),BA(A,B+240|0),Q=0}return h=B+336|0,0|Q},function(A,I){A|=0,I|=0;var g,B=0;for(h=g=h-208|0;C[A+B|0]=n[I+B|0],32!=(0|(B=B+1|0)););return C[0|A]=248&n[0|A],C[A+31|0]=63&n[A+31|0]|64,CA(g+48|0,A),function(A,I,g){var B;h=B=h-96|0,sA(B+48|0,g,I),yA(B,g,I),j(B,B),_(A,B+48|0,B),h=B+96|0}(g,g+88|0,g+128|0),BA(A,g),h=g+208|0,0},function(A,I,g,B,Q){A|=0,B|=0,Q|=0;var E,a=0;if(h=E=h-112|0,(I|=0)|(g|=0)){a=n[Q+28|0]|n[Q+29|0]<<8|n[Q+30|0]<<16|n[Q+31|0]<<24,i[E+24>>2]=n[Q+24|0]|n[Q+25|0]<<8|n[Q+26|0]<<16|n[Q+27|0]<<24,i[E+28>>2]=a,a=n[Q+20|0]|n[Q+21|0]<<8|n[Q+22|0]<<16|n[Q+23|0]<<24,i[E+16>>2]=n[Q+16|0]|n[Q+17|0]<<8|n[Q+18|0]<<16|n[Q+19|0]<<24,i[E+20>>2]=a,a=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,i[E>>2]=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,i[E+4>>2]=a,a=n[Q+12|0]|n[Q+13|0]<<8|n[Q+14|0]<<16|n[Q+15|0]<<24,i[E+8>>2]=n[Q+8|0]|n[Q+9|0]<<8|n[Q+10|0]<<16|n[Q+11|0]<<24,i[E+12>>2]=a,Q=n[0|B]|n[B+1|0]<<8|n[B+2|0]<<16|n[B+3|0]<<24,B=n[B+4|0]|n[B+5|0]<<8|n[B+6|0]<<16|n[B+7|0]<<24,i[E+104>>2]=0,i[E+108>>2]=0,i[E+96>>2]=Q,i[E+100>>2]=B;A:{if(!g&I>>>0>=64|g){for(;;){for(mg(A,E+96|0,E),Q=8,B=1;B=n[0|(a=(E+96|0)+Q|0)]+B|0,C[0|a]=B,B=B>>>8|0,16!=(0|(Q=Q+1|0)););if(A=A- -64|0,g=g-1|0,!(!(g=(I=I+-64|0)>>>0<4294967232?g+1|0:g)&I>>>0>63|g))break}if(!(I|g))break A}for(Q=0,mg(E+32|0,E+96|0,E);C[A+Q|0]=n[(E+32|0)+Q|0],(0|I)!=(0|(Q=Q+1|0)););}fI(E+32|0,64),fI(E,32)}return h=E+112|0,0},function(A,I,g,B,Q,E,a,r){A|=0,I|=0,Q|=0,E|=0,a|=0,r|=0;var o,e=0,t=0;if(h=o=h-112|0,(g|=0)|(B|=0)){for(e=n[r+28|0]|n[r+29|0]<<8|n[r+30|0]<<16|n[r+31|0]<<24,i[o+24>>2]=n[r+24|0]|n[r+25|0]<<8|n[r+26|0]<<16|n[r+27|0]<<24,i[o+28>>2]=e,e=n[r+20|0]|n[r+21|0]<<8|n[r+22|0]<<16|n[r+23|0]<<24,i[o+16>>2]=n[r+16|0]|n[r+17|0]<<8|n[r+18|0]<<16|n[r+19|0]<<24,i[o+20>>2]=e,e=n[r+4|0]|n[r+5|0]<<8|n[r+6|0]<<16|n[r+7|0]<<24,i[o>>2]=n[0|r]|n[r+1|0]<<8|n[r+2|0]<<16|n[r+3|0]<<24,i[o+4>>2]=e,e=8,t=n[r+12|0]|n[r+13|0]<<8|n[r+14|0]<<16|n[r+15|0]<<24,i[o+8>>2]=n[r+8|0]|n[r+9|0]<<8|n[r+10|0]<<16|n[r+11|0]<<24,i[o+12>>2]=t,r=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,i[o+96>>2]=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,i[o+100>>2]=r;C[(o+96|0)+e|0]=E,E=(255&a)<<24|E>>>8,a=a>>>8|0,16!=(0|(e=e+1|0)););if(!B&g>>>0>63|B)for(;;){for(e=0,mg(o+32|0,o+96|0,o);C[A+e|0]=n[(o+32|0)+e|0]^n[I+e|0],r=1,64!=(0|(e=e+1|0)););for(e=8;Q=n[0|(E=(o+96|0)+e|0)]+r|0,C[0|E]=Q,r=Q>>>8|0,16!=(0|(e=e+1|0)););if(I=I- -64|0,A=A- -64|0,B=B-1|0,!(!(B=(g=g+-64|0)>>>0<4294967232?B+1|0:B)&g>>>0>63|B))break}if(g|B)for(e=0,mg(o+32|0,o+96|0,o);C[A+e|0]=n[(o+32|0)+e|0]^n[I+e|0],(0|g)!=(0|(e=e+1|0)););fI(o+32|0,64),fI(o,32)}return h=o+112|0,0},function(A,I,g,B,Q){var C;return A|=0,B|=0,h=C=h+-64|0,(I|=0)|(g|=0)&&(aA(C,Q|=0),UA(C,B,0),U(C,A=EA(A,0,I),A,I,g),fI(C,64)),h=C- -64|0,0},function(A,I,g,B,Q){var C;return A|=0,B|=0,h=C=h+-64|0,(I|=0)|(g|=0)&&(aA(C,Q|=0),JA(C,B,0),U(C,A=EA(A,0,I),A,I,g),fI(C,64)),h=C- -64|0,0},function(A,I,g,B,Q,C,E,i){var n;return A|=0,I|=0,Q|=0,E|=0,i|=0,h=n=h-80|0,(g|=0)|(B|=0)&&(xI(n+8|0,C|=0),xI(n+12|0,E),aA(n+16|0,i),UA(n+16|0,Q,n+8|0),U(n+16|0,I,A,g,B),fI(n+16|0,64)),h=n+80|0,0},function(A,I,g,B,Q,C,E){var i;return A|=0,I|=0,Q|=0,E|=0,h=i=h-80|0,(g|=0)|(B|=0)&&(xI(i+12|0,C|=0),aA(i+16|0,E),JA(i+16|0,Q,i+12|0),U(i+16|0,I,A,g,B),fI(i+16|0,64)),h=i+80|0,0}]).grow=function(A){var I=this.length;return this.length=this.length+A,I},Xg.set=function(A,I){this[A]=I},Xg.get=function(A){return this[A]},Xg);function Wg(){return B.byteLength/65536|0}return{h:Vg,i:function(){},j:function(A,I,g,B,Q,C,E,i,n,a,r,o){return 0|PA(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,r|=0,o|=0)},k:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){if(!Q&B>>>0<4294967280)return PA(A,A+B|0,0,g,B,Q,C,E,n,a,r),I&&(Q=(A=B+16|0)>>>0<16?Q+1|0:Q,i[I>>2]=A,i[I+4>>2]=Q),0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,r|=0,o|=0)},l:function(A,I,g,B,Q,C,E,i,n,a,r,o){return 0|_A(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,r|=0,o|=0)},m:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){if(!Q&B>>>0<4294967280)return _A(A,A+B|0,0,g,B,Q,C,E,n,a,r),I&&(Q=(A=B+16|0)>>>0<16?Q+1|0:Q,i[I>>2]=A,i[I+4>>2]=Q),0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,r|=0,o|=0)},n:function(A,I,g,B,Q,C,E,i,n,a,r){return 0|HA(A|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,a|=0,r|=0)},o:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){var o=0;return o=-1,!Q&B>>>0>=16|Q&&(o=HA(A,g,B-16|0,Q-(B>>>0<16)|0,(g+B|0)-16|0,C,E,n,a,r)),I&&(i[I>>2]=o?0:B-16|0,i[I+4>>2]=o?0:Q-(B>>>0<16)|0),o}(A|=0,I|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},p:function(A,I,g,B,Q,C,E,i,n,a,r){return 0|GA(A|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,a|=0,r|=0)},q:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){var o=0;return o=-1,!Q&B>>>0>=16|Q&&(o=GA(A,g,B-16|0,Q-(B>>>0<16)|0,(g+B|0)-16|0,C,E,n,a,r)),I&&(i[I>>2]=o?0:B-16|0,i[I+4>>2]=o?0:Q-(B>>>0<16)|0),o}(A|=0,I|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},r:Ng,s:function(){return 12},t:Lg,u:Sg,v:dg,w:bg,x:Ng,y:xg,z:Lg,A:Sg,B:dg,C:bg,D:function(A,I,g,B,Q,C,E,i,n,a,r,o){return 0|NA(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,r|=0,o|=0)},E:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){if(!Q&B>>>0<4294967280)return NA(A,A+B|0,0,g,B,Q,C,E,n,a,r),I&&(Q=(A=B+16|0)>>>0<16?Q+1|0:Q,i[I>>2]=A,i[I+4>>2]=Q),0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,r|=0,o|=0)},F:function(A,I,g,B,Q,C,E,i,n,a,r){return 0|MA(A|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,a|=0,r|=0)},G:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){var o=0;return o=-1,!Q&B>>>0>=16|Q&&(o=MA(A,g,B-16|0,Q-(B>>>0<16)|0,(g+B|0)-16|0,C,E,n,a,r)),I&&(i[I>>2]=o?0:B-16|0,i[I+4>>2]=o?0:Q-(B>>>0<16)|0),o}(A|=0,I|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},H:Ng,I:Mg,J:Lg,K:Sg,L:dg,M:bg,N:Ng,O:Ng,P:function(A,I,g,B,Q){return 0|bI(A|=0,I|=0,g|=0,B|=0,Q|=0)},Q:function(A,I,g,B,Q){return 0|function(A,I,g,B,Q){var C;return h=C=h-32|0,bI(C,I,g,B,Q),I=Gg(A,C),g=zA(C,A,32),h=C+32|0,g|((0|A)==(0|C)?-1:I)}(A|=0,I|=0,g|=0,B|=0,Q|=0)},R:bg,S:Ng,T:Ng,U:Ng,V:Ng,W:Mg,X:Sg,Y:dg,Z:function(A,I,g){return 0|function(A,I,g){var B,Q=0;return h=B=h+-64|0,mI(B,g,32,0),g=i[B+28>>2],Q=i[B+24>>2],C[I+24|0]=Q,C[I+25|0]=Q>>>8,C[I+26|0]=Q>>>16,C[I+27|0]=Q>>>24,C[I+28|0]=g,C[I+29|0]=g>>>8,C[I+30|0]=g>>>16,C[I+31|0]=g>>>24,g=i[B+20>>2],Q=i[B+16>>2],C[I+16|0]=Q,C[I+17|0]=Q>>>8,C[I+18|0]=Q>>>16,C[I+19|0]=Q>>>24,C[I+20|0]=g,C[I+21|0]=g>>>8,C[I+22|0]=g>>>16,C[I+23|0]=g>>>24,g=i[B+12>>2],Q=i[B+8>>2],C[I+8|0]=Q,C[I+9|0]=Q>>>8,C[I+10|0]=Q>>>16,C[I+11|0]=Q>>>24,C[I+12|0]=g,C[I+13|0]=g>>>8,C[I+14|0]=g>>>16,C[I+15|0]=g>>>24,g=i[B+4>>2],Q=i[B>>2],C[0|I]=Q,C[I+1|0]=Q>>>8,C[I+2|0]=Q>>>16,C[I+3|0]=Q>>>24,C[I+4|0]=g,C[I+5|0]=g>>>8,C[I+6|0]=g>>>16,C[I+7|0]=g>>>24,fI(B,64),A=cg(A,I),h=B- -64|0,A}(A|=0,I|=0,g|=0)},_:Ig,$:jI,aa:function(A,I,g,B,Q,C,E){return 0|Qg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ba:function(A,I,g,B,Q,C,E,i){return 0|wI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0)},ca:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=4294967280|B&&(OI(),e()),Qg(A+16|0,A,I,g,B,Q,C)}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},da:function(A,I,g,B,Q,C,E){return 0|kI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ea:function(A,I,g,B,Q,C,E){return 0|Cg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},fa:function(A,I,g,B,Q,C,E,i){return 0|hI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0)},ga:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=16|B?Cg(A,I+16|0,I,g-16|0,B-(g>>>0<16)|0,Q,C):-1}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},ha:function(A,I,g,B,Q,C,E){return 0|uI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ia:function(A,I,g,B,Q){return 0|function(A,I,g,B,Q){var E,n=0;return h=E=h-96|0,n=-1,Ig(E+32|0,E)||(lI(E- -64|0,E+32|0,Q),n=kI(A+32|0,I,g,B,E- -64|0,Q,E),I=i[E+60>>2],g=i[E+56>>2],C[A+24|0]=g,C[A+25|0]=g>>>8,C[A+26|0]=g>>>16,C[A+27|0]=g>>>24,C[A+28|0]=I,C[A+29|0]=I>>>8,C[A+30|0]=I>>>16,C[A+31|0]=I>>>24,I=i[E+52>>2],g=i[E+48>>2],C[A+16|0]=g,C[A+17|0]=g>>>8,C[A+18|0]=g>>>16,C[A+19|0]=g>>>24,C[A+20|0]=I,C[A+21|0]=I>>>8,C[A+22|0]=I>>>16,C[A+23|0]=I>>>24,I=i[E+44>>2],g=i[E+40>>2],C[A+8|0]=g,C[A+9|0]=g>>>8,C[A+10|0]=g>>>16,C[A+11|0]=g>>>24,C[A+12|0]=I,C[A+13|0]=I>>>8,C[A+14|0]=I>>>16,C[A+15|0]=I>>>24,I=i[E+36>>2],g=i[E+32>>2],C[0|A]=g,C[A+1|0]=g>>>8,C[A+2|0]=g>>>16,C[A+3|0]=g>>>24,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24,fI(E,32),fI(E+32|0,32),fI(E- -64|0,24)),h=E+96|0,n}(A|=0,I|=0,g|=0,B|=0,Q|=0)},ja:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){var E,i=0;return h=E=h-32|0,i=-1,!B&g>>>0>=48|B&&(lI(E,I,Q),i=uI(A,I+32|0,g-32|0,B-(g>>>0<32)|0,E,I,C)),h=E+32|0,i}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},ka:function(){return 48},la:Sg,ma:Pg,na:Ng,oa:Sg,pa:Pg,qa:Ng,ra:function(){return 384},sa:function(A,I,g,B,Q,C,E){return 0|Eg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ta:qI,ua:function(A,I,g,B){return 0|sg(A|=0,I|=0,g|=0,B|=0)},va:TI,wa:bg,xa:Pg,ya:function(A,I,g,B){return 0|mI(A|=0,I|=0,g|=0,B|=0)},za:Sg,Aa:Pg,Ba:xg,Ca:Ng,Da:function(A,I,g,B,Q,a){return 0|function(A,I,g,B,Q,a){var r,o;return h=r=h-32|0,o=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,Q=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,i[r+24>>2]=0,i[r+28>>2]=0,i[r+16>>2]=o,i[r+20>>2]=Q,tI(r,g,B),i[r+8>>2]=0,i[r+12>>2]=0,I-16>>>0>=49?(i[8960]=28,A=-1):(g=r+16|0,A=I-1>>>0>63?-1:function(A,I,g,B,Q){var a,r=0;if(a=r=h,h=r=r-384&-64,!(!I|!A|(g-1&255)>>>0>=64))return function(A,I,g,B,Q){var a;if(h=a=h-192|0,!(!g|(I-1&255)>>>0>=64))return E[a+130>>1]=257,C[a+129|0]=32,C[a+128|0]=I,WI(a+128|4),tI(a+128|8,0,0),i[a+152>>2]=0,i[a+156>>2]=0,i[a+144>>2]=0,i[a+148>>2]=0,B?function(A,I){var g,B=0;B=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,C[A+32|0]=g,C[A+33|0]=g>>>8,C[A+34|0]=g>>>16,C[A+35|0]=g>>>24,C[A+36|0]=B,C[A+37|0]=B>>>8,C[A+38|0]=B>>>16,C[A+39|0]=B>>>24,B=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,I=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,C[A+40|0]=I,C[A+41|0]=I>>>8,C[A+42|0]=I>>>16,C[A+43|0]=I>>>24,C[A+44|0]=B,C[A+45|0]=B>>>8,C[A+46|0]=B>>>16,C[A+47|0]=B>>>24}(a+128|0,B):(i[a+168>>2]=0,i[a+172>>2]=0,i[a+160>>2]=0,i[a+164>>2]=0),Q?function(A,I){var g,B=0;B=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,C[A+48|0]=g,C[A+49|0]=g>>>8,C[A+50|0]=g>>>16,C[A+51|0]=g>>>24,C[A+52|0]=B,C[A+53|0]=B>>>8,C[A+54|0]=B>>>16,C[A+55|0]=B>>>24,B=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,I=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,C[A+56|0]=I,C[A+57|0]=I>>>8,C[A+58|0]=I>>>16,C[A+59|0]=I>>>24,C[A+60|0]=B,C[A+61|0]=B>>>8,C[A+62|0]=B>>>16,C[A+63|0]=B>>>24}(a+128|0,Q):(i[a+184>>2]=0,i[a+188>>2]=0,i[a+176>>2]=0,i[a+180>>2]=0),hA(A,a+128|0),EA(a+32|0,0,96),QA(I=A,A=X(a,g,32),128,0),fI(A,128),void(h=A+192|0);OI(),e()}(r,g,I,B,Q),QA(r,0,0,0),M(r,A,g),h=a,0;OI(),e()}(A,a,255&I,r,g)),h=r+32|0,A}(A|=0,I|=0,g|=0,B|=0,Q|=0,a|=0)},Ea:bg,Fa:function(A,I,g){return A|=0,Eg(I|=0,32,g|=0,32,0,0,0),0|ag(A,I)},Ga:function(A,I){return A|=0,cI(I|=0,32),0|ag(A,I)},Ha:function(A,I,g,B,Q){I|=0,g|=0,Q|=0;var E,i,a=0;if(i=a=h,h=a=a-512&-64,E=(A|=0)||I){if(A=-1,!ZI(a+96|0,B|=0,Q)){for(I=I||E,A=0,qI(a+128|0,0,0,64),sg(a+128|0,a+96|0,32,0),fI(a+96|0,32),sg(a+128|0,g,32,0),sg(a+128|0,Q,32,0),TI(a+128|0,a+32|0,64),fI(a+128|0,384);g=(a+32|0)+A|0,C[A+E|0]=n[0|g],C[A+I|0]=n[g+32|0],32!=(0|(A=A+1|0)););fI(a+32|0,64),A=0}return h=i,0|A}OI(),e()},Ia:function(A,I,g,B,Q){I|=0,g|=0,Q|=0;var E,i,a=0;if(i=a=h,h=a=a-512&-64,E=(A|=0)||I){if(A=-1,!ZI(a+96|0,B|=0,Q)){for(I=I||E,A=0,qI(a+128|0,0,0,64),sg(a+128|0,a+96|0,32,0),fI(a+96|0,32),sg(a+128|0,Q,32,0),sg(a+128|0,g,32,0),TI(a+128|0,a+32|0,64),fI(a+128|0,384);g=(a+32|0)+A|0,C[A+I|0]=n[0|g],C[A+E|0]=n[g+32|0],32!=(0|(A=A+1|0)););fI(a+32|0,64),A=0}return h=i,0|A}OI(),e()},Ja:Ng,Ka:Ng,La:Ng,Ma:Ng,Na:Rg,Oa:Jg,Pa:Jg,Qa:Sg,Ra:Kg,Sa:Lg,Ta:Kg,Ua:Sg,Va:function(){return 128},Wa:function(){return 35681},Xa:Rg,Ya:Kg,Za:function(){return 8192},_a:function(){return-2147483648},$a:Jg,ab:function(){return 67108864},bb:qg,cb:function(){return 268435456},db:function(){return 4},eb:function(){return 1073741824},fb:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r,o){switch(o-1|0){case 0:return function(A,I,g,B,Q,C,E,n,a,r){var o,e;e=I,o=EA(A,0,I),A=22;A:if(!g){if(!(!g&I>>>0<16)){if(C|a|r>>>0>2147483648)break A;if(!(!a&n>>>0<3|r>>>0<8192)){if(A=28,(0|B)==(0|o))break A;return pA(n,r>>>10|0,1,B,Q,E,16,o,e,0,0,1)?-1:0}}A=28}return i[8960]=A,-1}(A,I,g,B,Q,C,E,n,a,r);case 1:return function(A,I,g,B,Q,C,E,n,a,r){var o,e;e=I,o=EA(A,0,I),A=22;A:if(!g){if(!(!g&I>>>0<16)){if(C|a|r>>>0>2147483648)break A;if(!(!(n|a)|r>>>0<8192)){if(A=28,(0|B)==(0|o))break A;return pA(n,r>>>10|0,1,B,Q,E,16,o,e,0,0,2)?-1:0}}A=28}return i[8960]=A,-1}(A,I,g,B,Q,C,E,n,a,r)}return i[8960]=28,-1}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},gb:function(A,I,g,B,Q,C,E){return 0|xA(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},hb:function(A,I,g,B,Q,C,E,n){return 0|function(A,I,g,B,Q,C,E,n){switch(n-1|0){case 1:return xA(A,I,g,B,Q,C,E);default:OI(),e();case 0:}return function(A,I,g,B,Q,C,E){var n;return h=n=h-16|0,A=EA(A,0,128),E>>>0<2147483649&&!(B|C)?E>>>0>8191&&!C&Q>>>0>=3|0!=(0|C)?(cI(n,16),A=pA(Q,E>>>10|0,1,I,g,n,16,0,32,A,128,1)?-1:0):(i[8960]=28,A=-1):(i[8960]=22,A=-1),h=n+16|0,A}(A,I,g,B,Q,C,E)}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0)},ib:function(A,I,g,B){return 0|function(A,I,g,B){return XA(A,35681,10)?XA(A,35692,9)?(i[8960]=28,-1):function(A,I,g,B){A:{if(1==(0|B)|B>>>0>1)i[8960]=22;else{if(!(A=fA(A,I,g,1)))break A;-35==(0|A)&&(i[8960]=28)}A=-1}return A}(A,I,g,B):function(A,I,g,B){A:{if(1==(0|B)|B>>>0>1)i[8960]=22;else{if(!(A=fA(A,I,g,2)))break A;-35==(0|A)&&(i[8960]=28)}A=-1}return A}(A,I,g,B)}(A|=0,I|=0,g|=0,B|=0)},jb:function(A,I,g,B){return 0|function(A,I,g,B){return XA(A,35681,10)?XA(A,35692,9)?(i[8960]=28,-1):DA(A,I,g,B,1):DA(A,I,g,B,2)}(A|=0,I|=0,g|=0,B|=0)},kb:ag,lb:ZI,mb:Ng,nb:Ng,ob:Ng,pb:Mg,qb:Sg,rb:dg,sb:bg,tb:Qg,ub:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=4294967280|B&&(OI(),e()),nA(A+16|0,A,I,g,B,Q,C),0}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},vb:Cg,wb:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=16|B?rA(A,I+16|0,I,g-16|0,B-(g>>>0<16)|0,Q,C):-1}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},xb:bg,yb:function(A,I,g){return A|=0,g|=0,cI(I|=0,24),x(A,I,g),XI(A),g=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,I=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,C[A+44|0]=0,C[A+45|0]=0,C[A+46|0]=0,C[A+47|0]=0,C[A+48|0]=0,C[A+49|0]=0,C[A+50|0]=0,C[A+51|0]=0,C[A+36|0]=g,C[A+37|0]=g>>>8,C[A+38|0]=g>>>16,C[A+39|0]=g>>>24,C[A+40|0]=I,C[A+41|0]=I>>>8,C[A+42|0]=I>>>16,C[A+43|0]=I>>>24,0},zb:function(A,I,g){return x(A|=0,I|=0,g|=0),XI(A),g=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,I=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,C[A+44|0]=0,C[A+45|0]=0,C[A+46|0]=0,C[A+47|0]=0,C[A+48|0]=0,C[A+49|0]=0,C[A+50|0]=0,C[A+51|0]=0,C[A+36|0]=g,C[A+37|0]=g>>>8,C[A+38|0]=g>>>16,C[A+39|0]=g>>>24,C[A+40|0]=I,C[A+41|0]=I>>>8,C[A+42|0]=I>>>16,C[A+43|0]=I>>>24,0},Ab:L,Bb:function(A,I,g,B,Q,E,a,r,o,t){return 0|function(A,I,g,B,Q,E,a,r,o,t){var f,c=0;if(h=f=h-336|0,g&&(i[g>>2]=0,i[g+4>>2]=0),!E&Q>>>0<4294967279)return _g(f+16|0,64,c=A+32|0,A),lg(f+80|0,f+16|0),fI(f+16|0,64),yg(f+80|0,a,r,o),yg(f+80|0,35712,0-r&15,0),EA(f+16|0,0,64),C[f+16|0]=t,BI(f+16|0,f+16|0,64,0,c,1,A),yg(f+80|0,f+16|0,64,0),C[0|I]=n[f+16|0],BI(a=I+1|0,B,Q,E,c,2,A),yg(f+80|0,a,Q,E),yg(f+80|0,35712,15&Q,0),tI(f+8|0,r,o),yg(f+80|0,f+8|0,8,0),tI(f+8|0,Q- -64|0,E-((Q>>>0<4294967232)-1|0)|0),yg(f+80|0,f+8|0,8,0),Fg(f+80|0,I=Q+a|0),fI(f+80|0,256),pI(A+36|0,I),sI(c),(2&t||aI(c,4))&&L(A),g&&(E=(A=Q+17|0)>>>0<17?E+1|0:E,i[g>>2]=A,i[g+4>>2]=E),h=f+336|0,0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,a|=0,r|=0,o|=0,t|=0)},Cb:function(A,I,g,B,Q,E,a,r,o,t){return 0|function(A,I,g,B,Q,E,a,r,o,t){var f,c=0,y=0,s=0,w=0,D=0;h=f=h-352|0,g&&(i[g>>2]=0,i[g+4>>2]=0),B&&(C[0|B]=255),w=-1;A:{if(!(!a&E>>>0<17)){if(!(c=a-(E>>>0<17)|0)&(y=E-17|0)>>>0>=4294967279|c)break A;_g(f+32|0,64,s=A+32|0,A),lg(f+96|0,f+32|0),fI(f+32|0,64),yg(f+96|0,r,o,t),yg(f+96|0,35712,0-o&15,0),EA(f+32|0,0,64),C[f+32|0]=n[0|Q],BI(f+32|0,f+32|0,64,0,s,1,A),D=n[f+32|0],C[f+32|0]=n[0|Q],yg(f+96|0,f+32|0,64,0),yg(f+96|0,r=Q+1|0,y,c),yg(f+96|0,35712,E-1&15,0),tI(f+24|0,o,t),yg(f+96|0,f+24|0,8,0),tI(f+24|0,Q=E+47|0,a=Q>>>0<47?a+1|0:a),yg(f+96|0,f+24|0,8,0),Fg(f+96|0,f),fI(f+96|0,256),zA(f,r+y|0,16)?fI(f,16):(BI(I,r,y,c,s,2,A),pI(A+36|0,f),sI(s),(2&D||aI(s,4))&&L(A),g&&(i[g>>2]=y,i[g+4>>2]=c),w=0,B&&(C[0|B]=D))}return h=f+352|0,w}OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,a|=0,r|=0,o|=0,t|=0)},Db:function(){return 52},Eb:function(){return 17},Fb:Mg,Gb:Ng,Hb:function(){return-18},Ib:Lg,Jb:Rg,Kb:Jg,Lb:qg,Mb:xg,Nb:Sg,Ob:function(A,I,g,B,Q){return 0|function(A,I,g,B){var Q=0,C=0,E=0,i=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0;if(Q=1886610805^(E=n[0|B]|n[B+1|0]<<8|n[B+2|0]<<16|n[B+3|0]<<24),i=1936682341^(C=n[B+4|0]|n[B+5|0]<<8|n[B+6|0]<<16|n[B+7|0]<<24),a=1852142177^E,o=1819895653^C,E=1852075885^(t=n[B+8|0]|n[B+9|0]<<8|n[B+10|0]<<16|n[B+11|0]<<24),C=1685025377^(B=n[B+12|0]|n[B+13|0]<<8|n[B+14|0]<<16|n[B+15|0]<<24),t^=2037671283,r=1952801890^B,(0|(B=(I+g|0)-(y=7&g)|0))!=(0|I)){for(;e=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,f=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,c=Dg(E,C,13),s=p,w=1+(C=C+i|0)|0,i=C,h=Dg(C=Q+E|0,i=C>>>0>>0?w:i,32),w=p,r=Q=r^f,E=Dg(t^=e,Q,16),Q=a+t|0,a=o+r|0,t=o=(a=Q>>>0>>0?a+1|0:a)^p,o=Dg(E^=Q,o,21),r=p,c=Dg(C^=c,i^=s,17),D=p,i=a+i|0,a=Q,i=Dg(Q=Q+C|0,C=a>>>0>Q>>>0?i+1|0:i,32),a=p,s=Dg(c^=Q,C^=D,13),D=p,w=1+(Q=t+w|0)|0,t=Q,E=(Q=E+h|0)>>>0>>0?w:t,c=t=Q+c|0,C=E+C|0,C=Dg(t,h=Q>>>0>t>>>0?C+1|0:C,32),t=p,o=Dg(Q^=o,E^=r,16),E=a+E|0,E=(Q=Q+i|0)>>>0>>0?E+1|0:E,i=C+(a=Q^o)|0,C=(r=t)+(t=E^p)|0,t=Dg(a,t,21)^i,r=(w=i>>>0>>0?C+1|0:C)^p,a=C=h^D,C=Dg(o=c^s,C,17),E=E+a|0,o=(a=Q+o|0)>>>0>>0?E+1|0:E,E=C^a,C=o^p,Q=i^e,i=f^w,a=Dg(a,o,32),o=p,(0|B)!=(0|(I=I+8|0)););I=B}switch(B=g<<24,g=0,y-1|0){case 6:B|=n[I+6|0]<<16;case 5:B|=n[I+5|0]<<8;case 4:B|=n[I+4|0];case 3:e=(g=n[I+3|0])>>>8|0,g<<=24,B|=e;case 2:g|=(e=n[I+2|0])<<16,B|=f=e>>>16|0;case 1:g|=(e=n[I+1|0])<<8,B|=f=e>>>24|0;case 0:g=n[0|I]|g}return e=Dg(E,C,13),f=p,I=C+i|0,y=Dg(E=Q+E|0,C=E>>>0>>0?I+1|0:I,32),c=p,i=Q=B^r,Q=Dg(I=g^t,Q,16),i=i+o|0,o=a=(i=(r=I)>>>0>(I=I+a|0)>>>0?i+1|0:i)^p,a=Dg(Q^=I,a,21),t=p,e=Dg(E^=e,C^=f,17),f=p,C=i+C|0,r=I,C=Dg(I=I+E|0,E=r>>>0>I>>>0?C+1|0:C,32),i=p,e=Dg(r=I^e,E^=f,13),f=p,s=1+(I=o+c|0)|0,o=I,E=(Q=(I=Q+y|0)>>>0>>0?s:o)+E|0,E=Dg(r=o=I+r|0,o=I>>>0>o>>>0?E+1|0:E,32),y=p,a=Dg(I^=a,Q^=t,16),Q=i+Q|0,Q=(I=I+C|0)>>>0>>0?Q+1|0:Q,C=I^a,a=i=Q^p,i=Dg(C,i,21),t=p,f=o^=f,o=Dg(r^=e,o,17),e=p,Q=Q+f|0,s=I,r=Dg(I=I+r|0,Q=s>>>0>I>>>0?Q+1|0:Q,32),f=p,e=Dg(I^=o,o=Q^e,13),c=p,s=I,a=1+(I=a+y|0)|0,Q=I,B=o+(B^(Q=(I=E+C|0)>>>0>>0?a:Q))|0,g=Dg(C=E=s+(g^=I)|0,E=g>>>0>E>>>0?B+1|0:B,32),a=p,i=Dg(I^=i,B=Q^t,16),B=B+f|0,B=(Q=I)>>>0>(I=I+(255^r)|0)>>>0?B+1|0:B,Q=I^i,o=i=B^p,i=Dg(Q,i,21),t=p,r=E^=c,E=Dg(C^=e,E,17),e=p,B=B+r|0,r=I,C=Dg(I=I+C|0,B=r>>>0>I>>>0?B+1|0:B,32),r=p,f=Dg(E^=I,e^=B,13),y=p,o=1+(I=a+o|0)|0,B=I,Q=(B=(I=g+Q|0)>>>0>>0?o:B)+e|0,a=Q=I>>>0>(g=I+E|0)>>>0?Q+1|0:Q,Q=Dg(g,Q,32),o=p,i=Dg(I^=i,B^=t,16),B=B+r|0,r=I,E=(I=I+C|0)^i,i=C=(B=r>>>0>I>>>0?B+1|0:B)^p,C=Dg(E,C,21),t=p,r=a^=y,a=Dg(g^=f,a,17),e=p,B=B+r|0,r=I,r=Dg(I=I+g|0,g=r>>>0>I>>>0?B+1|0:B,32),f=p,y=Dg(a^=I,e^=g,13),c=p,B=1+(I=i+o|0)|0,g=I,Q=(B=(I=Q+E|0)>>>0>>0?B:g)+e|0,i=Q=I>>>0>(g=I+a|0)>>>0?Q+1|0:Q,Q=Dg(g,Q,32),a=p,C=Dg(I^=C,B^=t,16),B=B+f|0,o=I,E=(I=I+r|0)^C,o=C=(B=o>>>0>I>>>0?B+1|0:B)^p,C=Dg(E,C,21),t=p,r=i^=c,i=Dg(g^=y,i,17),e=p,B=B+r|0,r=I,B=Dg(I=I+g|0,g=r>>>0>I>>>0?B+1|0:B,32),r=p,e=g^=e,f=Dg(i^=I,g,13),y=p,o=1+(I=a+o|0)|0,g=I,a=E=t^(Q=(I=Q+E|0)>>>0>>0?o:g),E=Dg(g=I^C,E,16),C=a+r|0,r=g,E=Dg((g=g+B|0)^E,(B=r>>>0>g>>>0?C+1|0:C)^p,21),C=p,Q=Q+e|0,o=1+(B=B+(Q=((r=I)>>>0>(I=I+i|0)>>>0?Q+1|0:Q)^y)|0)|0,r=B,g=(I=g+(B=I^f)|0)>>>0>>0?o:r,B=Dg(B,Q,17)^I^E,Q=p^g^C,tI(A,Dg(I,g,32)^B,p^Q),0}(A|=0,I|=0,g|=0,Q|=0)},Pb:function(A){cI(A|=0,16)},Qb:function(){return 208},Rb:Pg,Sb:Ng,Tb:Ng,Ub:Pg,Vb:function(){return-65},Wb:function(A,I,g){return 0|N(A|=0,I|=0,g|=0)},Xb:function(A,I){return 0|function(A,I){var g;return h=g=h-32|0,cI(g,32),N(A,I,g),fI(g,32),h=g+32|0,0}(A|=0,I|=0)},Yb:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){var E,n;return h=E=h-16|0,n=g,g=B,Bg(A,E+8|0,gA(A- -64|0,n,B),B,Q,C),64!=i[E+8>>2]|i[E+12>>2]?(I&&(i[I>>2]=0,i[I+4>>2]=0),EA(A,0,g- -64|0),A=-1):(A=0,I&&(i[I>>2]=B- -64,i[I+4>>2]=Q-((B>>>0<4294967232)-1|0))),h=E+16|0,A}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},Zb:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){var E=0;A:{I:{if(!(!Q&B>>>0<64||(Q=Q-1|0,!(Q=(B=B+-64|0)>>>0<4294967232?Q+1|0:Q)&B>>>0>4294967231|Q))){if(!ng(g,E=g- -64|0,B,Q,C))break I;A&&EA(A,0,B)}if(g=-1,!I)break A;return i[I>>2]=0,i[I+4>>2]=0,-1}I&&(i[I>>2]=B,i[I+4>>2]=Q),g=0,A&&gA(A,E,B)}return g}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},_b:function(A,I,g,B,Q,C){return 0|Bg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},$b:function(A,I,g,B,Q){return 0|ng(A|=0,I|=0,g|=0,B|=0,Q|=0)},ac:function(A){return MI(A|=0),0},bc:function(A,I,g,B){return 0|V(A|=0,I|=0,g|=0,B|=0)},cc:function(A,I,g,B){return 0|function(A,I,g,B){var Q;return h=Q=h+-64|0,UI(A,Q),A=q(I,g,Q,64,0,B,1),h=Q- -64|0,A}(A|=0,I|=0,g|=0,B|=0)},dc:function(A,I,g){return 0|function(A,I,g){var B;return h=B=h+-64|0,UI(A,B),A=lA(I,B,64,0,g,1),h=B- -64|0,A}(A|=0,I|=0,g|=0)},ec:function(A,I){A|=0;var g,B=0;return h=g=h-256|0,B=-1,wA(I|=0)||cA(g+96|0,I)||function(A){var I;return h=I=h-160|0,function(A,I){var g,B=0;for(h=g=h-1760|0,FI(g+480|0,I),JI(g+320|0,I),DI(g,g+320|0),VA(g+320|0,g,g+480|0),DI(g+160|0,g+320|0),FI(I=g+640|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+800|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+960|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+1120|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+1280|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+1440|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(g+1600|0,g+160|0),zI(A),I=252;JI(g+320|0,A),B=I,(0|(I=C[I+34208|0]))>=1?(DI(g+160|0,g+320|0),VA(g+320|0,g+160|0,(g+480|0)+r((254&I)>>>1|0,160)|0)):(0|I)>-1||(DI(g+160|0,g+320|0),WA(g+320|0,g+160|0,(g+480|0)+r((0-I&254)>>>1|0,160)|0)),DI(A,g+320|0),I=B-1|0,B;);h=g+1760|0}(I,A),A=RI(I),h=I+160|0,A}(g+96|0)&&(wg(g),yA(g,g,I=g+136|0),wg(g+48|0),sA(g+48|0,g+48|0,I),j(g,g),_(g+48|0,g+48|0,g),BA(A,g+48|0),B=0),h=g+256|0,0|B},fc:function(A,I){A|=0;var g,B=0;return h=g=h+-64|0,mI(g,I|=0,32,0),C[0|g]=248&n[0|g],C[g+31|0]=63&n[g+31|0]|64,I=i[g+20>>2],B=i[g+16>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=I,C[A+21|0]=I>>>8,C[A+22|0]=I>>>16,C[A+23|0]=I>>>24,I=i[g+12>>2],B=i[g+8>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=I,C[A+13|0]=I>>>8,C[A+14|0]=I>>>16,C[A+15|0]=I>>>24,I=i[g+4>>2],B=i[g>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24,I=i[g+28>>2],B=i[g+24>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=I,C[A+29|0]=I>>>8,C[A+30|0]=I>>>16,C[A+31|0]=I>>>24,fI(g,64),h=g- -64|0,0},gc:YI,hc:PI,ic:function(A){var I=0,g=0;if((A|=0)>>>0>=2){for(g=(0-A>>>0)%(A>>>0)|0;(I=YI())>>>0>>0;);A=(I>>>0)%(A>>>0)|0}else A=0;return 0|A},jc:cI,kc:function(A,I,g){_g(A|=0,I|=0,1784,g|=0)},lc:Ng,mc:function(){var A=0,I=0;return(A=i[9097])&&(A=i[A+20>>2])&&(I=0|Vg[0|A]()),0|I},nc:function(A,I,g){!function(A,I,g){1==(0|g)|g>>>0>1&&(t(1796,1816,197,1842),e()),cI(A,I)}(A|=0,I|=0,g|=0)},oc:function(A,I,g,B){A|=0,g|=0;var Q=0,E=0,i=0;if(!((B|=0)>>>0>2147483646|B<<1>>>0>=(I|=0)>>>0)){if(I=0,B){for(;Q=I<<1,E=(i=n[I+g|0])>>>4|0,C[Q+A|0]=87+(E+(E+65526>>>8&217)|0),E=(1|Q)+A|0,Q=15&i,C[0|E]=22272+((Q<<8)+(Q+65526&55552)|0)>>>8,(0|B)!=(0|(I=I+1|0)););I=B<<1}else I=0;return C[I+A|0]=0,0|A}OI(),e()},pc:function(A,I,g,B,Q,E,a){A|=0,I|=0,g|=0,Q|=0,E|=0,a|=0;var r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0;A:if(B|=0){I:{g:{B:for(;;){for(o=r;;){Q:{if(!(255&((w=(65526+(y=(223&(c=n[g+o|0]))-55&255)^y+65520)>>>8|0)|(e=65526+(h=48^c)>>>8|0)))){if(e=1,!Q|255&f)break g;if(gg(Q,c))break Q;r=o;break A}if(I>>>0<=t>>>0){i[8960]=68,e=0;break g}if(r=y&w|e&h,255&f?(C[A+t|0]=r|D,t=t+1|0):D=r<<4,f^=-1,e=1,(r=o+1|0)>>>0>>0)continue B;break I}if(f=0,!((o=o+1|0)>>>0>>0))break}break}r=(A=r+1|0)>>>0>>0?B:A;break A}r=o}255&f?(i[8960]=28,s=-1,r=r-1|0,t=0):e||(t=0,s=-1)}return a?i[a>>2]=g+r:(0|B)!=(0|r)&&(i[8960]=28,s=-1),E&&(i[E>>2]=t),0|s},qc:function(A,I){var g;return A|=0,pg(I|=0),A=r(g=(A>>>0)/3|0,-3)+A|0,r(4-(3-A&0-(I>>>1&1))|0,1&(A|A>>>1))+(g<<2|1)|0},rc:O,sc:W,tc:function(){var A=0;return i[9104]?A=1:(i[9086]=0,function(){var A;h=A=h-16|0,VI(A),i[A>>2]&&(VI(A),EA(36348,0,40)),h=A+16|0}(),i[9085]=1,PI(),function(){var A=0;(0|(A=0|y(30)))>=1?i[8944]=A:A=i[8944],A>>>0<=15&&(OI(),e()),cI(36400,16)}(),i[9104]=1,A=0),0|A},uc:function(A,I,g,B,Q){A|=0,I|=0,g|=0,Q|=0;var E,a=0,r=0,o=0;h=E=h-16|0;A:{if(B|=0){if(o=-1,(a=(a=B-1|0)-(r=a&B?(g>>>0)%(B>>>0)|0:g&a)|0)>>>0>=(-1^g)>>>0)break A;if(!((g=g+a|0)>>>0>=Q>>>0))for(A&&(i[A>>2]=g+1),A=I+g|0,o=0,C[E+15|0]=0,I=B>>>0>1?B:1,B=0;Q=g=A-B|0,r=n[0|g]&n[E+15|0],g=(B^a)-1>>>24|0,C[0|Q]=r|128&g,C[E+15|0]=g|n[E+15|0],(0|I)!=(0|(B=B+1|0)););}else o=-1;return h=E+16|0,0|o}OI(),e()},vc:function(A,I,g,B){A|=0,I|=0,g|=0,B|=0;var Q,C=0,E=0,a=0,r=0,o=0;if(i[12+(Q=h-16|0)>>2]=0,B-1>>>0>>0){for(o=(C=g-1|0)+I|0,g=0,I=0;r=((128^(E=n[o-g|0]))-1&i[Q+12>>2]-1&a-1)>>>8&1,i[Q+12>>2]=i[Q+12>>2]|0-r&g,I|=r,a|=E,(0|B)!=(0|(g=g+1|0)););i[A>>2]=C-i[Q+12>>2],A=I-1|0}else A=-1;return 0|A},wc:function(){return 35762},xc:function(){return 10},yc:qg,zc:Rg,Ac:function(){return 35840},Bc:k,Cc:m}}(A)}(vA)},instantiate:function(A,I){return{then:function(I){var g=new u.Module(A);I({instance:new u.Instance(g)})}}},RuntimeError:Error};function p(A,I,g,B){switch("*"===(g=g||"i8").charAt(g.length-1)&&(g="i32"),g){case"i1":case"i8":_[A>>0]=I;break;case"i16":Y[A>>1]=I;break;case"i32":b[A>>2]=I;break;case"i64":nA=[I>>>0,(iA=I,+Math.abs(iA)>=1?iA>0?(0|Math.min(+Math.floor(iA/4294967296),4294967295))>>>0:~~+Math.ceil((iA-+(~~iA>>>0))/4294967296)>>>0:0)],b[A>>2]=nA[0],b[A+4>>2]=nA[1];break;case"float":m[A>>2]=I;break;case"double":v[A>>3]=I;break;default:IA("invalid type for setValue: "+g)}}function l(A,I,g){switch("*"===(I=I||"i8").charAt(I.length-1)&&(I="i32"),I){case"i1":case"i8":return _[A>>0];case"i16":return Y[A>>1];case"i32":case"i64":return b[A>>2];case"float":return m[A>>2];case"double":return v[A>>3];default:IA("invalid type for getValue: "+I)}return null}w=[],"object"!=typeof u&&IA("no native wasm support detected");var F=!1;function G(A,I){A||IA("Assertion failed: "+I)}var k,_,H,Y,b,m,v,U="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function S(A,I,g){for(var B=I+g,Q=I;A[Q]&&!(Q>=B);)++Q;if(Q-I>16&&A.subarray&&U)return U.decode(A.subarray(I,Q));for(var C="";I>10,56320|1023&a)}}else C+=String.fromCharCode((31&E)<<6|i)}else C+=String.fromCharCode(E)}return C}function N(A,I){return A?S(H,A,I):""}function M(A,I){return A%I>0&&(A+=I-A%I),A}function d(A){k=A,Q.HEAP8=_=new Int8Array(A),Q.HEAP16=Y=new Int16Array(A),Q.HEAP32=b=new Int32Array(A),Q.HEAPU8=H=new Uint8Array(A),Q.HEAPU16=new Uint16Array(A),Q.HEAPU32=new Uint32Array(A),Q.HEAPF32=m=new Float32Array(A),Q.HEAPF64=v=new Float64Array(A)}var P,R=Q.INITIAL_MEMORY||16777216;(D=Q.wasmMemory?Q.wasmMemory:new u.Memory({initial:R/65536,maximum:32768}))&&(k=D.buffer),R=k.byteLength,d(k);var J=[],x=[],L=[],K=[];function q(){if(Q.preRun)for("function"==typeof Q.preRun&&(Q.preRun=[Q.preRun]);Q.preRun.length;)T(Q.preRun.shift());fA(J)}function X(){fA(x)}function V(){fA(L)}function W(){if(Q.postRun)for("function"==typeof Q.postRun&&(Q.postRun=[Q.postRun]);Q.postRun.length;)j(Q.postRun.shift());fA(K)}function T(A){J.unshift(A)}function j(A){K.unshift(A)}x.push({func:function(){UA()}});var Z=0,O=null,z=null;function $(A){Z++,Q.monitorRunDependencies&&Q.monitorRunDependencies(Z)}function AA(A){if(Z--,Q.monitorRunDependencies&&Q.monitorRunDependencies(Z),0==Z&&(null!==O&&(clearInterval(O),O=null),z)){var I=z;z=null,I()}}function IA(A){throw Q.onAbort&&Q.onAbort(A),h(A+=""),F=!0,A="abort("+A+"). Build with -s ASSERTIONS=1 for more info.",new u.RuntimeError(A)}function gA(A,I){return String.prototype.startsWith?A.startsWith(I):0===A.indexOf(I)}Q.preloadedImages={},Q.preloadedAudios={};var BA="data:application/octet-stream;base64,";function QA(A){return gA(A,BA)}var CA="file://";function EA(A){return gA(A,CA)}var iA,nA,aA="<<< WASM_BINARY_FILE >>>";function rA(A){try{if(A==aA&&w)return new Uint8Array(w);var I=bA(A);if(I)return I;if(t)return t(A);throw"both async and sync fetching of the wasm failed"}catch(A){IA(A)}}function oA(){if(!w&&(i||n)){if("function"==typeof fetch&&!EA(aA))return fetch(aA,{credentials:"same-origin"}).then((function(A){if(!A.ok)throw"failed to load wasm binary file at '"+aA+"'";return A.arrayBuffer()})).catch((function(){return rA(aA)}));if(e)return new Promise((function(A,I){e(aA,(function(I){A(new Uint8Array(I))}),I)}))}return Promise.resolve().then((function(){return rA(aA)}))}function eA(){var A={a:vA};function I(A,I){var g=A.exports;Q.asm=g,P=Q.asm.h,AA()}function g(A){I(A.instance)}function B(I){return oA().then((function(I){return u.instantiate(I,A)})).then(I,(function(A){h("failed to asynchronously prepare wasm: "+A),IA(A)}))}if($(),Q.instantiateWasm)try{return Q.instantiateWasm(A,I)}catch(A){return h("Module.instantiateWasm callback failed with error: "+A),!1}return w||"function"!=typeof u.instantiateStreaming||QA(aA)||EA(aA)||"function"!=typeof fetch?B(g):fetch(aA,{credentials:"same-origin"}).then((function(I){return u.instantiateStreaming(I,A).then(g,(function(A){return h("wasm streaming compile failed: "+A),h("falling back to ArrayBuffer instantiation"),B(g)}))})),{}}QA(aA)||(aA=s(aA));var tA={1024:function(){return Q.getRandomValue()},1062:function(){if(void 0===Q.getRandomValue)try{var A="object"==typeof window?window:self,I=void 0!==A.crypto?A.crypto:A.msCrypto,g=function(){var A=new Uint32Array(1);return I.getRandomValues(A),A[0]>>>0};g(),Q.getRandomValue=g}catch(A){try{var B=require("crypto"),C=function(){var A=B.randomBytes(4);return(A[0]<<24|A[1]<<16|A[2]<<8|A[3])>>>0};C(),Q.getRandomValue=C}catch(A){throw"No secure random number generator found"}}}};function fA(A){for(;A.length>0;){var I=A.shift();if("function"!=typeof I){var g=I.func;"number"==typeof g?void 0===I.arg?P.get(g)():P.get(g)(I.arg):g(void 0===I.arg?null:I.arg)}else I(Q)}}function cA(A,I,g,B){IA("Assertion failed: "+N(A)+", at: "+[I?N(I):"unknown filename",g,B?N(B):"unknown function"])}function yA(){IA()}function sA(A,I,g){var B=GA(I,g);return tA[A].apply(null,B)}function wA(A,I,g){H.copyWithin(A,I,I+g)}function hA(){return H.length}function DA(A){try{return D.grow(A-k.byteLength+65535>>>16),d(D.buffer),1}catch(A){}}function uA(A){A>>>=0;var I=hA(),g=2147483648;if(A>g)return!1;for(var B=1;B<=4;B*=2){var Q=I*(1+.2/B);if(Q=Math.min(Q,A+100663296),DA(Math.min(g,M(Math.max(16777216,A,Q),65536))))return!0}return!1}function pA(A){return b[SA()>>2]=A,A}function lA(A){switch(A){case 30:return 16384;case 85:return 131072;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==typeof navigator&&navigator.hardwareConcurrency||1}return pA(28),-1}var FA=[];function GA(A,I){var g;for(FA.length=0,I>>=2;g=H[A++];){var B=g<105;B&&1&I&&I++,FA.push(B?v[I++>>1]:b[I]),++I}return FA}var kA=!1;function _A(A){for(var I=[],g=0;g255&&(kA&&G(!1,"Character code "+B+" ("+String.fromCharCode(B)+") at offset "+g+" not in 0x00-0xFF."),B&=255),I.push(String.fromCharCode(B))}return I.join("")}var HA="function"==typeof atob?atob:function(A){var I,g,B,Q,C,E,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="",a=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{I=i.indexOf(A.charAt(a++))<<2|(Q=i.indexOf(A.charAt(a++)))>>4,g=(15&Q)<<4|(C=i.indexOf(A.charAt(a++)))>>2,B=(3&C)<<6|(E=i.indexOf(A.charAt(a++))),n+=String.fromCharCode(I),64!==C&&(n+=String.fromCharCode(g)),64!==E&&(n+=String.fromCharCode(B))}while(a0||(q(),Z>0||(Q.setStatus?(Q.setStatus("Running..."),setTimeout((function(){setTimeout((function(){Q.setStatus("")}),1),I()}),1)):I()))}if(Q._malloc=function(){return(Q._malloc=Q.asm.Bc).apply(null,arguments)},Q._free=function(){return(Q._free=Q.asm.Cc).apply(null,arguments)},Q.setValue=p,Q.getValue=l,Q.UTF8ToString=N,z=function A(){mA||NA(),mA||(z=A)},Q.run=NA,Q.preInit)for("function"==typeof Q.preInit&&(Q.preInit=[Q.preInit]);Q.preInit.length>0;)Q.preInit.pop()();NA()}))};var g,Q=void 0!==Q?Q:{},C={};for(g in Q)Q.hasOwnProperty(g)&&(C[g]=Q[g]);var E=[],i=!1,n=!1,a=!1,r=!1;i="object"==typeof window,n="function"==typeof importScripts,a="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,r=!i&&!a&&!n;var o,e,t,f,c,y="";function s(A){return Q.locateFile?Q.locateFile(A,y):y+A}a?(y=n?require("path").dirname(y)+"/":__dirname+"/",o=function(A,I){var g=HA(A);return g?I?g:g.toString():(f||(f=require("fs")),c||(c=require("path")),A=c.normalize(A),f.readFileSync(A,I?null:"utf8"))},t=function(A){var I=o(A,!0);return I.buffer||(I=new Uint8Array(I)),F(I.buffer),I},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),E=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Q),Q.inspect=function(){return"[Emscripten Module object]"}):r?("undefined"!=typeof read&&(o=function(A){var I=HA(A);return I?GA(I):read(A)}),t=function(A){var I;return(I=HA(A))?I:"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(F("object"==typeof(I=read(A,"binary"))),I)},"undefined"!=typeof scriptArgs?E=scriptArgs:void 0!==arguments&&(E=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(i||n)&&(n?y=self.location.href:"undefined"!=typeof document&&document.currentScript&&(y=document.currentScript.src),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",o=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText}catch(I){var g=HA(A);if(g)return GA(g);throw I}},n&&(t=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}catch(I){var g=HA(A);if(g)return g;throw I}}),e=function(A,I,g){var B=new XMLHttpRequest;B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=function(){if(200==B.status||0==B.status&&B.response)I(B.response);else{var Q=HA(A);Q?I(Q.buffer):g()}},B.onerror=g,B.send(null)}),Q.print;var w,h,D=Q.printErr||void 0;for(g in C)C.hasOwnProperty(g)&&(Q[g]=C[g]);function u(A,I,g,B){switch("*"===(g=g||"i8").charAt(g.length-1)&&(g="i32"),g){case"i1":case"i8":k[A>>0]=I;break;case"i16":H[A>>1]=I;break;case"i32":Y[A>>2]=I;break;case"i64":EA=[I>>>0,(CA=I,+Math.abs(CA)>=1?CA>0?(0|Math.min(+Math.floor(CA/4294967296),4294967295))>>>0:~~+Math.ceil((CA-+(~~CA>>>0))/4294967296)>>>0:0)],Y[A>>2]=EA[0],Y[A+4>>2]=EA[1];break;case"float":b[A>>2]=I;break;case"double":m[A>>3]=I;break;default:$("invalid type for setValue: "+g)}}function p(A,I,g){switch("*"===(I=I||"i8").charAt(I.length-1)&&(I="i32"),I){case"i1":case"i8":return k[A>>0];case"i16":return H[A>>1];case"i32":case"i64":return Y[A>>2];case"float":return b[A>>2];case"double":return m[A>>3];default:$("invalid type for getValue: "+I)}return null}C=null,Q.arguments&&(E=Q.arguments),Q.thisProgram&&Q.thisProgram,Q.quit&&Q.quit,Q.wasmBinary&&(w=Q.wasmBinary),Q.noExitRuntime&&Q.noExitRuntime,"object"!=typeof WebAssembly&&$("no native wasm support detected");var l=!1;function F(A,I){A||$("Assertion failed: "+I)}var G,k,_,H,Y,b,m,v="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function U(A,I,g){for(var B=I+g,Q=I;A[Q]&&!(Q>=B);)++Q;if(Q-I>16&&A.subarray&&v)return v.decode(A.subarray(I,Q));for(var C="";I>10,56320|1023&a)}}else C+=String.fromCharCode((31&E)<<6|i)}else C+=String.fromCharCode(E)}return C}function S(A,I){return A?U(_,A,I):""}function N(A,I){return A%I>0&&(A+=I-A%I),A}function M(A){G=A,Q.HEAP8=k=new Int8Array(A),Q.HEAP16=H=new Int16Array(A),Q.HEAP32=Y=new Int32Array(A),Q.HEAPU8=_=new Uint8Array(A),Q.HEAPU16=new Uint16Array(A),Q.HEAPU32=new Uint32Array(A),Q.HEAPF32=b=new Float32Array(A),Q.HEAPF64=m=new Float64Array(A)}Q.INITIAL_MEMORY;var d,P=[],R=[],J=[],x=[];function L(){if(Q.preRun)for("function"==typeof Q.preRun&&(Q.preRun=[Q.preRun]);Q.preRun.length;)V(Q.preRun.shift());eA(P)}function K(){eA(R)}function q(){eA(J)}function X(){if(Q.postRun)for("function"==typeof Q.postRun&&(Q.postRun=[Q.postRun]);Q.postRun.length;)W(Q.postRun.shift());eA(x)}function V(A){P.unshift(A)}function W(A){x.unshift(A)}R.push({func:function(){mA()}});var T=0,j=null,Z=null;function O(A){T++,Q.monitorRunDependencies&&Q.monitorRunDependencies(T)}function z(A){if(T--,Q.monitorRunDependencies&&Q.monitorRunDependencies(T),0==T&&(null!==j&&(clearInterval(j),j=null),Z)){var I=Z;Z=null,I()}}function $(A){throw Q.onAbort&&Q.onAbort(A),D(A+=""),l=!0,A="abort("+A+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(A)}function AA(A,I){return String.prototype.startsWith?A.startsWith(I):0===A.indexOf(I)}Q.preloadedImages={},Q.preloadedAudios={};var IA="data:application/octet-stream;base64,";function gA(A){return AA(A,IA)}var BA="file://";function QA(A){return AA(A,BA)}var CA,EA,iA="data:application/octet-stream;base64,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CiASfnwgCSALfnwiEUKAgIAQfCIUQhqHfCIiQoCAgAh8IiNCGYd8IhkgGUKAgIAQfCIZQoCAgOAPg30+AgggACASIBh+IA0gDn58IAkgEH58IAwgHH58IAsgF358IBNCGod8IhMgE0KAgIAIfCITQoCAgPAPg30+AhwgACAMIBp+IAkgFX58IBAgFn58IAogD358IAsgDX58IBlCGod8IgogCkKAgIAIfCIKQoCAgPAPg30+AgwgACAQIBJ+IA0gDX58IA4gD358IAkgG358IAwgF358IAsgA6wiDX58IBNCGYd8IgsgC0KAgIAQfCILQoCAgOAPg30+AiAgACAgICFCgICA8A+DfSAeIB9CgICAYIN9IApCGYd8IgpCgICAEHwiD0IaiHw+AhQgACAKIA9CgICA4A+DfT4CECAAIA4gEH4gGCAdfnwgEiAcfnwgCSAXfnwgDCANfnwgC0Iah3wiCSAJQoCAgAh8IglCgICA8A+DfT4CJCAAICIgI0KAgIDwD4N9IBEgFEKAgIBgg30gCUIZh0ITfnwiCUKAgIAQfCIMQhqIfD4CBCAAIAkgDEKAgIDgD4N9PgIACxAAIAAzAAAgADEAAkIQhoQL8wICAn8BfgJAIAJFDQAgACACaiIDQQFrIAE6AAAgACABOgAAIAJBA0kNACADQQJrIAE6AAAgACABOgABIANBA2sgAToAACAAIAE6AAIgAkEHSQ0AIANBBGsgAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBBGsgATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQQhrIAE2AgAgAkEMayABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkEgayICQR9LDQALCyAACwkAIAAgATcAAAuCBAEDfyACQYAETwRAIAAgASACEAQaIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAvsAQESfyACKAIEIQMgASgCBCEEIAIoAgghBSABKAIIIQYgAigCDCEHIAEoAgwhCCACKAIQIQkgASgCECEKIAIoAhQhCyABKAIUIQwgAigCGCENIAEoAhghDiACKAIcIQ8gASgCHCEQIAIoAiAhESABKAIgIRIgAigCJCETIAEoAiQhFCAAIAIoAgAgASgCAGo2AgAgACATIBRqNgIkIAAgESASajYCICAAIA8gEGo2AhwgACANIA5qNgIYIAAgCyAMajYCFCAAIAkgCmo2AhAgACAHIAhqNgIMIAAgBSAGajYCCCAAIAMgBGo2AgQLGAEBf0HEnAIoAgAiAARAIAARDgALEAIAC0ABA38gACABIAFB+ABqIgIQCyAAQShqIAFBKGoiAyABQdAAaiIEEAsgAEHQAGogBCACEAsgAEH4AGogASADEAsL7AEBEn8gAigCBCEDIAEoAgQhBCACKAIIIQUgASgCCCEGIAIoAgwhByABKAIMIQggAigCECEJIAEoAhAhCiACKAIUIQsgASgCFCEMIAIoAhghDSABKAIYIQ4gAigCHCEPIAEoAhwhECACKAIgIREg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czYCFCABIAUgEHM2AhAgASAEIA9zNgIMIAEgAyANczYCCCABIAAgC3M2AgQgASAWIBdzNgIACykBAX8jAEGAAWsiAiQAIAJBCGogARDoAiAAIAJBCGoQOSACQYABaiQACzIBAX8gACABIAFB+ABqIgIQCyAAQShqIAFBKGogAUHQAGoiARALIABB0ABqIAEgAhALC68CARN/IAEoAgQhDCAAKAIEIQMgASgCCCENIAAoAgghBCABKAIMIQ4gACgCDCEFIAEoAhAhDyAAKAIQIQYgASgCFCEQIAAoAhQhByABKAIYIREgACgCGCEIIAEoAhwhEiAAKAIcIQkgASgCICETIAAoAiAhCiABKAIkIRQgACgCJCELIABBACACayICIAAoAgAiFSABKAIAc3EgFXM2AgAgACALIAsgFHMgAnFzNgIkIAAgCiAKIBNzIAJxczYCICAAIAkgCSAScyACcXM2AhwgACAIIAggEXMgAnFzNgIYIAAgByAHIBBzIAJxczYCFCAAIAYgBiAPcyACcXM2AhAgACAFIAUgDnMgAnFzNgIMIAAgBCAEIA1zIAJxczYCCCAAIAMgAyAMcyACcXM2AgQLJAEBfyMAQSBrIgEkACABIAAQLSABQSAQZSEAIAFBIGokACAAC6YEAgp/Dn4gACgCJCEEIAAoAiAhBSAAKAIcIQYgACgCGCEHIAAoAhQhAyACQhBaBEAgAC0AUEVBGHQhCCAAKAIEIglBBWytIRkgACgCCCIKQQVsrSEXIAAoAgwiC0EFbK0hFSAAKAIQIgxBBWytIRMgDK0hGiALrSEYIAqtIRYgCa0hFCAANQIAIRIDQCABKAADQQJ2Qf///x9xIAdqrSINIBh+IAEoAABB////H3EgA2qtIg4gGn58IAEoAAZBBHZB////H3EgBmqtIg8gFn58IAEoAAlBBnYgBWqtIhAgFH58IAQgCGogASgADEEIdmqtIhEgEn58IA0gFn4gDiAYfnwgDyAUfnwgECASfnwgESATfnwgDSAUfiAOIBZ+fCAPIBJ+fCAQIBN+fCARIBV+fCANIBJ+IA4gFH58IA8gE358IBAgFX58IBEgF358IA0gE34gDiASfnwgDyAVfnwgECAXfnwgESAZfnwiDUIaiEL/////D4N8Ig5CGohC/////w+DfCIPQhqIQv////8Pg3wiEEIaiEL/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aiAFIAYQDCAJQQhqIAYQESAJQdAAaiAJQQhqQggQDCAAIAMgBCAHIAgQogEgCUHQAGogACAEEAwgCUEIaiAEEBEgCUHQAGogCUEIakIIEAwgCUHQAGogARAjIAlB0ABqQYACEAkgAgRAIAJCEDcDAAsgCUHQAmokAEEACygAIAJCgICAgBBaBEAQFAALIAAgASACIANCASAEQfCXAigCABEVABoLFgAgAELAACABIAJB6JcCKAIAEREAGgsyACAAIAIEfyACKAAABUEACzYCMCAAIAEoAAA2AjQgACABKAAENgI4IAAgASgACDYCPAs9ACAAAn8gAgRAIAAgAigAADYCMCACKAAEDAELIABBADYCMEEACzYCNCAAIAEoAAA2AjggACABKAAENgI8CxkAIAAgASACIANCASAEQeSXAigCABEVABoLKAEBfyMAQRBrIgAkACAAQQA6AA9BpgggAEEPakEAEAEaIABBEGokAAtqAQN/IwBBEGsiAyQAIANBADoAD0F/IQUgACABIAJB2JcCKAIAEQMARQRAA0AgAyAAIARqLQAAIAMtAA9yOgAPIARBAWoiBEEgRw0AC0EAIAMtAA9BAWtBCHZBAXFrIQULIANBEGokACAFCxMAIAAgAUHAB2xBoBtqIAIQ5gILEAAgAEIANwIAIABCADcCCAsdACAAEDggAEEoahAdIABB0ABqEB0gAEH4AGoQOAuAAgEIfwNAIAAgAmogASACQQN2ai0AACACQQdxdkEBcToAACACQQFqIgJBgAJHDQALA0AgBCIBQQFqIQQCQCAAIAFqIgYtAABFDQAgBCECQQEhBSABQf4BSw0AA0ACQCAAIAJqIgMsAAAiB0UNACAHIAV0IgcgBiwAACIIaiIJQQ9MBEAgBiAJOgAAIANBADoAAAwBCyAIIAdrIgNBcUgNAiAGIAM6AAADQCAAIAJqIgMtAABFBEAgA0EBOgAADAILIANBADoAACACQf8BSSEDIAJBAWohAiADDQALCyAFQQVLDQEgBUEBaiIFIAFqIgJBgAJJDQALCyAEQYACRw0ACwuVAQEEfyMAQTBrIgUkACAAIAFBKGoiAyABEBMgAEEoaiIEIAMgARAWIABB0ABqIgMgACACQShqEAsgBCAEIAIQCyAAQfgAaiIGIAJB+ABqIAFB+ABqEAsgACABQdAAaiACQdAA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CSACQYAIaiQAC/ADAQJ/IwAiAyEEIANBwANrQUBxIgMkACAARSABRXJFBEAgA0FAa0EAQQBBwAAQPhogA0E8aiABKAIwEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIEEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIsEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIoEAogA0FAayADQTxqQgQQGBogA0E8akETEAogA0FAayADQTxqQgQQGBogA0E8aiACEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIMEAogA0FAayADQTxqQgQQGBoCQCABKAIIIgJFDQAgA0FAayACIAE1AgwQGBogAS0AOEEBcUUNACABKAIIIAEoAgwQCSABQQA2AgwLIANBPGogASgCFBAKIANBQGsgA0E8akIEEBgaIAEoAhAiAgRAIANBQGsgAiABNQIUEBgaCyADQTxqIAEoAhwQCiADQUBrIANBPGpCBBAYGgJAIAEoAhgiAkUNACADQUBrIAIgATUCHBAYGiABLQA4QQJxRQ0AIAEoAhggASgCHBAJIAFBADYCHAsgA0E8aiABKAIkEAogA0FAayADQTxqQgQQGBogASgCICICBEAgA0FAayACIAE1AiQQGBoLIANBQGsgAEHAABA9GgsgBCQAC68BAQN/IwBBEGsiAiQAQWohAwJAIABFIAFFcg0AIAFBCnQiBCABbkGACEcNACAAQQwQICIBNgIAIAFFDQAgAUIANwIAQYCYAiACQQxqIAQQsgEiATYCAAJAAkAgAQRAIAJBADYCDAwBCyACKAIMIgENAQsgACgCABAZIABBADYCAAwBCyAAKAIAIAE2AgAgACgCACABNgIEIAAoAgAgBDYCCEEAIQMLIAJBEGokACADC4cBAQJ/IwBB0ABrIgMkAEFnIQICQCAARSABRXINACAAIAAoAhRBA3QQICICNgIEIAJFBEBBaiECDAELIAAgACgCEBC8ASICBEAgACABKAI4EIMBDAELIAMgASAAKAIkELsBIANBQGtBCBAJIAMgABC6ASADQcgAEAlBACECCyADQdAAaiQAIAILkwEBBH8jAEEgayICJAACQCAARQ0AIAAoAhxFDQAgAiABNgIQQQEhBANAIAIgAzoAGEEAIQFBACEFIAQEQANAIAJBADYCHCACIAIpAxg3AwggAiABNgIUIAIgAikDEDcDACAAIAIQxQEgAUEBaiIBIAAoAhwiBUkNAAsLIAUhBCADQQFqIgNBBEcNAAsLIAJBIGokAAs5AAJAIAFFDQAgACgCACIBBEAgASgCBCAAKAIQQQp0EAkLIAAoAgQiAUUNACABIAAoAhRBA3QQCQsLKAECfwNAIAAgAkEDdCIDaiABIANqKQMAEBEgAkEBaiICQYABRw0ACwu8AQEDfyMAQYAQayICJAAgAEUgAUVyRQRAIAJBgAhqIAEoAgAoAgQgASgCGEEKdGpBgAhrECogASgCHEECTwRAQQEhAwNAIAJBgAhqIAEoAgAoAgQgASgCGCIEIAMgBGxqQQp0akGACGsQLiADQQFqIgMgASgCHEkNAAsLIAIgAkGACGoQwAEgACgCACAAKAIEIAJBgAgQViACQYAIakGACBAJIAJBgAgQCSABIAAoAjgQgwELIAJBgBBqJAALjQ0CEX8QfiMAQYAQayIDJAAgA0GACGogARAqIANBgAhqIAAQLiADIANBgAhqECpBACEBA0AgA0GACGogBEEHdCIAQcAAcmoiBSkDACADQYAIaiAAQeAAcmoiBikDACADQYAIaiAAaiIHKQMAIANBgAhqIABBIHJqIggpAwAiGBAHIhSFQSAQBiIVEAciFiAYhUEYEAYhGCAYIBYgFSAUIBgQByIXhUEQEAYiGhAHIiGFQT8QBiEYIANBgAhqIABByAByaiIJKQMAIANBgAhqIABB6AByaiIKKQMAIANBgAhqIABBCHJqIgspAwAgA0GACGogAEEocmoiDCkDACIUEAciFYVBIBAGIhYQByIbIBSFQRgQBiEUIBQgGyAWIBUgFBAHIhuFQRAQBiIiEAciI4VBPxAGIRQgA0GACGogAEHQAHJqIg0pAwAgA0GACGogAEHwAHJqIg4pAwAgA0GACGogAEEQcmoiDykDACADQYAIaiAAQTByaiIQKQMAIhUQByIWhUEgEAYiHBAHIh0gFYVBGBAGIRUgFSAdIBwgFiAVEAciHYVBEBAGIhwQByIehUE/EAYhFSADQYAIaiAAQdgAcmoiESkDACADQYAIaiAAQfgAcmoiEikDACADQYAIaiAAQRhyaiITKQMAIANBgAhqIABBOHJqIgApAwAiFhAHIh+FQSAQBiIZEAciICAWhUEYEAYhFiAWICAgGSAfIBYQByIfhUEQEAYiGRAHIiCFQT8QBiEWIAcgFyAUEAciFyAUIB4gFyAZhUEgEAYiFxAHIh6FQRgQBiIUEAciGTcDACASIBcgGYVBEBAGIhc3AwAgDSAeIBcQByIXNwMAIAwgFCAXhUE/EAY3AwAgCyAbIBUQByIUIBUgICAUIBqFQSAQBiIUEAciF4VBGBAGIhUQByIaNwMAIAYgFCAahUEQEAYiFDcDACARIBcgFBAHIhQ3AwAgECAUIBWFQT8QBjcDACAPIB0gFhAHIhQgFiAhIBQgIoVBIBAGIhQQByIVhUEYEAYiFhAHIhc3AwAgCiAUIBeFQRAQBiIUNwMAIAUgFSAUEAciFDcDACAAIBQgFoVBPxAGNwMAIBMgHyAYEAciFCAYICMgFCAchUEgEAYiFBAHIhWFQRgQBiIYEAciFjcDACAOIBQgFoVBEBAGIhQ3AwAgCSAVIBQQByIUNwMAIAggFCAYhUE/EAY3AwAgBEEBaiIEQQhHDQALA0AgAUEEdCIEIANBgAhqaiIAIgVBgARqKQMAIAApA4AGIAApAwAgACkDgAIiGBAHIhSFQSAQBiIVEAciFiAYhUEYEAYhGCAYIBYgFSAUIBgQByIXhUEQEAYiGhAHIiGFQT8QBiEYIAApA4gEIAApA4gGIANBgAhqIARBCHJqIgQpAwAgACkDiAIiFBAHIhWFQSAQBiIWEAciGyAUhUEYEAYhFCAUIBsgFiAVIBQQByIbhUEQEAYiIhAHIiOFQT8QBiEUIAApA4AFIAApA4AHIAApA4ABIAApA4ADIhUQByIWhUEgEAYiHBAHIh0gFYVBGBAGIRUgFSAdIBwgFiAVEAciHYVBEBAGIhwQByIehUE/EAYhFSAAKQOIBSAAKQOIByAAKQOIASAAKQOIAyIWEAciH4VBIBAGIhkQByIgIBaFQRgQBiEWIBYgICAZIB8gFhAHIh+FQRAQBiIZEAciIIVBPxAGIRYgACAXIBQQByIXIBQgHiAXIBmFQSAQBiIXEAciHoVBGBAGIhQQByIZNwMAIAAgFyAZhUEQEAYiFzcDiAcgACAeIBcQByIXNwOABSAAIBQgF4VBPxAGNwOIAiAEIBsgFRAHIhQgFSAgIBQgGoVBIBAGIhQQByIXhUEYEAYiFRAHIho3AwAgACAUIBqFQRAQBiIUNwOABiAAIBcgFBAHIhQ3A4gFIAAgFCAVhUE/EAY3A4ADIAAgHSAWEAciFCAWICEgFCAihUEgEAYiFBAHIhWFQRgQBiIWEAciFzcDgAEgACAUIBeFQRAQBiIUNwOIBiAFIBUgFBAHIhQ3A4AEIAAgFCAWhUE/EAY3A4gDIAAgHyAYEAciFCAYICMgFCAchUEgEAYiFBAHIhWFQRgQBiIYEAciFjcDiAEgACAUIBaFQRAQBiIUNwOAByAAIBUgFBAHIhQ3A4gEIAAgFCAYhUE/EAY3A4ACIAFBAWoiAUEIRw0ACyACIAMQKiACIANBgAhqEC4gA0GAEGokAAvMAQICfwF+An4gASgCAEUEQCABLQAIIgRFBEAgASgCDEEBayEDQgAMAgsgACgCFCAEbCEEIAEoAgwhASADBEAgASAEakEBayEDQgAMAgsgBCABRWshA0IADAELIAAoAhQhBCAAKAIYIQUCfyADBEAgASgCDCAFIARBf3NqagwBCyAFIARrIAEoAgxFawshA0IAIAEtAAgiAUEDRg0AGiAEIAFBAWpsrQshBiAGIANBAWutfCADrSACrSIGIAZ+QiCIfkIgiH0gADUCGIKnC/MBAQJ/IwBBgCBrIgMkACADQYAYahA8IANBgBBqEDwCQCAARSABRXINACADIAE1AgA3A4AQIAMgATUCBDcDiBAgAyABMQAINwOQECADIAA1AhA3A5gQIAMgADUCCDcDoBAgAyAANQIkNwOoECAAKAIURQ0AQQAhAQNAIAFB/wBxIgRFBEAgAyADKQOwEEIBfDcDsBAgAxA8IANBgAhqEDwgA0GAGGogA0GAEGogAxBVIANBgBhqIAMgA0GACGoQVQsgAiABQQN0aiADQYAIaiAEQQN0aikDADcDACABQQFqIgEgACgCFEkNAAsLIANBgCBqJAALjgMCC38CfgJAIABFDQACfwJAIAAoAiRBAkcNACABKAIAIgJFBEAgAS0ACEECSQ0BCyAAKAIEIQlBAQwBCyAAIAEgACgCBCIJEMQBIAEoAgAhAkEACyEKIAIgAS0ACCIDckVBAXQiBiAAKAIUIgJPDQBBfyAAKAIYIgRBAWsgBiAEIAEoAgRsaiACIANsaiICIARwGyACaiEDA0AgAkEBayADIAIgBHBBAUYbIQMCfyAKRQRAIAAoAgAhByAJIAZBA3RqDAELIAAoAgAiBygCBCADQQp0agsiBSgCBCEIIAUoAgAhCyAAKAIcIQwgASAGNgIMIAcoAgQiBSAEIAggDHCtIg0gDSABNQIEIg0gAS0ACBsgASgCACIIGyIOp2xBCnRqIAAgASALIA0gDlEQwwFBCnRqIQQgBSADQQp0aiEHIAUgAkEKdGohBQJAIAgEQCAHIAQgBRBVDAELIAcgBCAFEMIBCyAGQQFqIgYgACgCFE8NASACQQFqIQIgA0EBaiEDIAAoAhghBAwACwALC1kBAn8jACIFIQYgBUGAA2tBQHEiBSQAIAFFIABFIAJBAWtB/wFxQcAAT3JyRQRAIAUgAiABIAMgBBDIASAFQQBCABAyGiAFIAAgAhBYGiAGJABBAA8LEBQAC4ABAQJ/IwAiBiEHIAZBgANrQUBxIgYkACAARSADQQFrQf8BcUHAAE9yQQAgAUUgBFAbciAFQcEATyACRUEAIAUbcnJFBEACQCAFBEAgBiADIAIgBRCEARoMAQsgBiADEIUBGgsgBiABIAQQMhogBiAAIAMQWBogByQAQQAPCxAUAAvqAQEBfyMAQcABayIFJAAgAkUgAUEBa0H/AXFBwABPckUEQCAFQYECOwGCASAFQSA6AIEBIAUgAToAgAEgBUGAAWpBBHIQWiAFQYABakEIckIAEBEgBUIANwOYASAFQgA3A5ABAkAgAwRAIAVBgAFqIAMQ4AEMAQsgBUIANwOoASAFQgA3A6ABCwJAIAQEQCAFQYABaiAEENUBDAELIAVCADcDuAEgBUIANwOwAQsgACAFQYABahBbIAVBIGpBAEHgABAQGiAAIAUgAkEgEBIiAEKAARAyGiAAQYABEAkgAEHAAWokAA8LEBQACxEAIAAgAa0gAq1CIIaEEL0CCxIAIAAgASACrSADrUIghoQQHAsVACAAIAEgAq0gA61CIIaEIAQQhgELFwAgACABIAIgA60gBK1CIIaEIAUQiAELFwAgACABIAIgA60gBK1CIIaEIAUQhAILFwAgACABIAIgA60gBK1CIIaEIAUQhQILFQAgACABIAKtIAOtQiCGhCAEEIoCCyUAIAAgASACIAMgBCAFrSAGrUIghoQgByAIrSAJrUIghoQQjgILJQAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCRCPAgsXACAAIAEgAq0gA61CIIaEIAQgBRC6AgsYACAAIAEgAiADrSAErUIghoQgBSAGEGoLFwAgACABIAKtIAOtQiCGhCAEIAUQuwILFgAgACABKQAANwAwIAAgASkACDcAOAsYACAAIAEgAiADrSAErUIghoQgBSAGEGsLEwAgACABrSACrUIghoQgAxCSAgsTACAAIAEgAq0gA61CIIaEEJMCCyEAIAAgASACrSADrUIghoQgBK0gBa1CIIaEIAYgBxCUAgsfACAAIAEgAq0gA61CIIaEIAStIAWtQiCGhCAGEIwBCy0AIAAgAa0gAq1CIIaEIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChCVAgsXACAAIAEgAq0gA61CIIaEIAQgBRCzAgsSACAAIAEgAq0gA61CIIaEEDQLEgAgACABIAKtIAOtQiCGhBAlCxkAIAAgASACIAOtIAStQiCGhCAFIAYQlAELFgAgACABKQAANwAgIAAgASkACDcAKAsXACAAIAEgAq0gA61CIIaEIAQgBRC1AgsVACAAIAEgAq0gA61CIIaEIAQQtgILGQAgACABIAKtIAOtQiCGhCAEIAUgBhCVAQsXACAAIAEgAq0gA61CIIaEIAQgBRC4AgsbACAAIAEgAiADrSAErUIghoQgBSAGIAcQlgELGAAgACABIAIgA60gBK1CIIaEIAUgBhBoCxkAIAAgASACrSADrUIghoQgBCAFIAYQlwELFwAgACABIAKtIAOtQiCGhCAEIAUQuQILGwAgACABIAIgA60gBK1CIIaEIAUgBiAHEJgBCxgAIAAgASACIAOtIAStQiCGhCAFIAYQaQsVACAAIAEgAq0gA61CIIaEIAQQwAILFQAgACABIAKtIAOtQiCGhCAEEJoBCyUAIAAgASADIAStIAWtQiCGhCAGIAetIAitQiCGhCAJIAoQyQILJQAgACACIAOtIAStQiCGhCAFIAYgB60gCK1CIIaEIAkgChCcAQslACAAIAEgAiADrSAErUIghoQgBSAGrSAHrUIghoQgCSAKEMsCCycAIAAgASACIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAogCxCdAQslACAAIAEgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEM8CCyUAIAAgAiADrSAErUIghoQgBSAGIAetIAitQiCGhCAJIAoQngELJQAgACABIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChDQAgslACAAIAIgA60gBK1CIIaEIAUgBiAHrSAIrUIghoQgCSAKEJ8BCyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQ0QILJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALEKABCyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQ0gILJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALEKEBCwQAQQoLBgBBspcCCwsAIAAgASACEIICCw0AIAAgASACIAMQgwILCAAgABA1QQALCQAgACABEIgCCwsAIAAgASACEIoBCwUAQb9/CwUAQdABCywBAX8jAEFAaiIDJAAgACADECcgASADQsAAIAJBARCHASEAIANBQGskACAACy4BAX8jAEFAaiIEJAAgACAEECcgASACIARCwAAgA0EBEIkBIQAgBEFAayQAIAALewEBfwJAAkACQCADQsAAVA0AIANCQHwiA0K/////D1YNACACIAJBQGsiBSADIAQQhgFFDQEgAEUNACAAQQAgA6cQEBoLQX8hAiABRQ0BIAFCADcDAEF/DwsgAQRAIAEgAzcDAAtBACECIABFDQAgACAFIAOnEEcaCyACC3MBAX8jAEEQayIFJAAgACAFQQhqIABBQGsgAiADpyICEEcgAyAEEIgBGgJAIAUpAwhCwABSBEAgAQRAIAFCADcDAAsgAEEAIAJBQGsQEBpBfyEADAELQQAhACABRQ0AIAEgA0JAfTcDAAsgBUEQaiQAIAALbQEBfyMAQUBqIgIkACACIAFCIBA0GiACIAItAABB+AFxOgAAIAIgAi0AH0E/cUHAAHI6AB8gACACKQMQNwAQIAAgAikDCDcACCAAIAIpAwA3AAAgACACKQMYNwAYIAJBwAAQCSACQUBrJABBAAuGAQECfyMAQYACayICJABBfyEDAkAgARB1DQAgAkHgAGogARCuAQ0AIAJB4ABqEOUCRQ0AIAIQHSACIAIgAkGIAWoiARAWIAJBMGoQHSACQTBqIAJBMGogARATIAIgAhA6IAJBMGogAkEwaiACEAsgACACQTBqEC1BACEDCyACQYACaiQAIAMLLAEBfyMAQSBrIgIkACACQSAQHyAAIAEg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ASACQhB9IAMgBBBqBSAFCwslACACQvD///8PWgRAEBQACyAAQRBqIAAgASACIAMgBBBrGkEACwsAIAAgASACEL8CCy8AIAFCgICAgBBaBEBBACIAQYQOaiAAQZgOakHFASAAQbIOahAAAAsgACABpxAfCzMBAn8jAEEgayIDJABBfyEEIAMgAiABEKgBRQRAIABB4JUCIAMQbSEECyADQSBqJAAgBAtWAQF/IwBBQGoiAyQAIAMgAkIgEDQaIAEgAykDGDcAGCABIAMpAxA3ABAgASADKQMINwAIIAEgAykDADcAACADQcAAEAkgACABEHIhACADQUBrJAAgAAtAAQF/IwBBIGsiBCQAIAQgASACIAMQmgEaIAAgBBCAASEBIAQgAEEgEEUhAyAEQSBqJAAgA0F/IAEgACAERhtyC0MBAX8jAEFAaiICJAAgACACEMICIAEgAikDGDcAGCABIAIpAxA3ABAgASACKQMINwAIIAEgAikDADcAACACQUBrJAALNwEBfyMAQUBqIgIkACAAIAIQJyAAQdABaiIAIAJCwAAQHBogACABECcgAkHAABAJIAJBQGskAAvhAQEDfyMAQcABayICJAAgABA1IAJBQGtBNkGAARAQGiACIAEtAABBNnM6AEBBASEDA0AgAkFAayADaiIEIAQtAAAgASADai0AAHM6AAAgA0EBaiIDQSBHDQALIAAgAkFAa0KAARAcGiAAQdABaiIAEDUgAkFAa0HcAEGAARAQGiACIAEtAABB3ABzOgBAQQEhAwNAIAJBQGsgA2oiBCAELQAAIAEgA2otAABzOgAAIANBAWoiA0EgRw0ACyAAIAJBQGtCgAEQHBogAkFAa0GAARAJIAJBwAAQCSACQcABaiQAC2YBAX4gACkAACIBQjiGIAFCKIZCgICAgICAwP8Ag4QgAUIYhkKAgICAgOA/gyABQgiGQoCAgIDwH4OEhCABQgiIQoCAgPgPgyABQhiIQoCA/AeDhCABQiiIQoD+A4MgAUI4iISEhAsmAQJ/AkBBpJwCKAIAIgBFDQAgACgCFCIARQ0AIAARAQAhAQsgAQtkACAAIAFCKIZCgICAgICAwP8AgyABQjiGhCABQhiGQoCAgICA4D+DIAFCCIZCgICAgPAfg4SEIAFCCIhCgICA+A+DIAFCGIhCgID8B4OEIAFCKIhCgP4DgyABQjiIhISENwAAC4YBAQJ/AkAgACgCSEEDdkH/AHEiAkHvAE0EQCAAIAJqQdAAakHglAJB8AAgAmsQEhoMAQsgAEHQAGoiAyACakHglAJBgAEgAmsQEhogACADIAEgAUGABWoQSCADQQBB8AAQEBoLIABBwAFqIABBQGtBEBCbASAAIABB0ABqIAEgAUGABWoQSAsoAQJ/A0AgACACQQN0IgNqIAEgA2oQxAI3AwAgAkEBaiICQRBHDQALC0UBAX9BfyEIIANCEFoEQCAAIAIgA0IQfSACIAOnakEQayAEIAUgBiAHEJwBIQgLIAEEQCABQgAgA0IQfSAIGzcDAAsgCAv/AQEBfyMAQeACayIIJAAgCEEgakLAACAGIAcQcCAIQeAAaiAIQSBqECQgCEEgakHAABAJIAhB4ABqIAQgBRAMIAhB4ABqQZCPAiIEQgAgBX1CD4MQDCAIQeAAaiABIAIQDCAIQeAAaiAEQgAgAn1CD4MQDCAIQRhqIAUQESAIQeAAaiAIQRhqQggQDCAIQRhqIAIQESAIQeAAaiAIQRhqQggQDCAIQeAAaiAIECMgCEHgAGpBgAIQCSAIIAMQOyEDIAhBEBAJAkAgAEUNACADBEAgAEEAIAKnEBAaQX8hAwwBCyAAIAEgAiAGQQEgBxBvQQAhAwsgCEHgAmokACADCz0AIANC8P///w9UBEAgACAAIAOnakEAIAIgAyAEIAUgBiAHEJ0BGiABBEAgASADQhB8NwMAC0EADwsQFAAL2gEBAX8jAEHQAmsiCSQAIAlBEGpCwAAgByAIEHAgCUHQAGogCUEQahAkIAlBEGpBwAAQCSAJQdAAaiAFIAYQDCAJQdAAakGQjwIiBUIAIAZ9Qg+DEAwgACADIAQgB0EBIAgQbyAJQdAAaiAAIAQQDCAJQdAAaiAFQgAgBH1CD4MQDCAJQQhqIAYQESAJQdAAaiAJQQhqQggQDCAJQQhqIAQQESAJQdAAaiAJQQhqQggQDCAJQdAAaiABECMgCUHQAGpBgAIQCSACBEAgAkIQNwMACyAJQdACaiQACw4AIAAgAa1B+A0gAhA3CwQAQQwLRQEBf0F/IQggA0IQWgRAIAAgAiADQhB9IAIgA6dqQRBrIAQgBSAGIAcQngEhCAsgAQRAIAFCACADQhB9IAgbNwMACyAIC0UBAX9BfyEIIANCEFoEQCAAIAIgA0IQfSACIAOnakEQayAEIAUgBiAHEJ8BIQgLIAEEQCABQgAgA0IQfSAIGzcDAAsgCAs9ACADQvD///8PVARAIAAgACADp2pBACACIAMgBCAFIAYgBxCgARogAQRAIAEgA0IQfDcDAAtBAA8LEBQACz0AIANC8P///w9UBEAgACAAIAOnakEAIAIgAyAEIAUgBiAHEKEBGiABBEAgASADQhB8NwMAC0EADwsQFAALVwEBfyMAQdAAayIGJAAgAlBFBEAgBkEMaiAEEAogBkEQaiAFEEwgBkEQaiADIAZBDGoQpAEgBkEQaiABIAAgAhBLIAZBEGpBwAAQCQsgBkHQAGokAEEAC2UBAX8jAEHQAGsiBiQAIAJQRQRAIAZBCGogBKcQCiAGQQxqIARCIIinEAogBkEQaiAFEEwgBkEQaiADIAZBCGoQpQEgBkEQaiABIAAgAhBLIAZBEGpBwAAQCQsgBkHQAGokAEEAC0YBAX8jAEFAaiIEJAAgAVBFBEAgBCADEEwgBCACQQAQpAEgBCAAQQAgAacQECIAIAAgARBLIARBwAAQCQsgBEFAayQAQQALKgECfyAAQQJPBH9BACAAayAAcCEBA0AQcyICIAFJDQALIAIgAHAFIAELC0YBAX8jAEFAaiIEJAAgAVBFBEAgBCADEEwgBCACQQAQpQEgBCAAQQAgAacQECIAIAAgARBLIARBwAAQCQsgBEFAayQAQQALNQBBwJwCKAIABH9BAQVB+JsCQQA2AgAQ6gJB9JsCQQE2AgAQpwEQpwJBwJwCQQE2AgBBAAsL7QIBAn8jAEHwAGsiByQAIAJQRQRAIAcgBSkAGDcDGCAHIAUpABA3AxAgByAFKQAANwMAQQghBiAHIAUpAAg3AwggByADKQAANwNgA0AgB0HgAGogBmogBDwAACAEQgiIIQQgBkEBaiIGQRBHDQALIAJCP1YEQANAQQAhBiAHQSBqIAdB4ABqIAcQTQNAIAAgBmogB0EgaiAGai0AACABIAZqLQAAczoAAEEBIQUgBkEBaiIGQcAARw0AC0EIIQYDQCAHQeAAaiAGaiIDIAUgAy0AAGoiAzoAACADQQh2IQUgBkEBaiIGQRBHDQALIAFBQGshASAAQUBrIQAgAkJAfCICQj9WDQALCyACUEUEQEEAIQYgB0EgaiAHQeAAaiAHEE0gAqchAwNAIAAgBmogB0EgaiAGai0AACABIAZqLQAAczoAACAGQQFqIgYgA0cNAAsLIAdBIGpBwAAQCSAHQSAQCQsgB0HwAGokAEEAC5ECAgJ/AX4jAEHwAGsiBCQAIAFQRQRAIAQgAykAGDcDGCAEIAMpABA3AxAgBCADKQAANwMAIAQgAykACDcDCCACKQAAIQYgBEIANwNoIAQgBjcDYAJAIAFCwABaBEADQCAAIARB4ABqIAQQTUEIIQNBASECA0AgBEHgAGogA2oiBSACIAUtAABqIgI6AAAgAkEIdiECIANBAWoiA0EQRw0ACyAAQUBrIQAgAUJAfCIBQj9WDQALIAFQDQELQQAhAyAEQSBqIARB4ABqIAQQTSABpyECA0AgACADaiAEQSBqIANqLQAAOgAAIANBAWoiAyACRw0ACwsgBEEgakHAABAJIARBIBAJCyAEQfAAaiQAQQALmgYBIX8gAigAACESIAIoAAQhEyACKAAIIRQgAigADCEVIAIoABAhFiACKAAUIRcgAigAGCEYIAIoABwhGUHl8MGLBiECIBIhByATIQggFCERIBUhCUHuyIGZAyEOIAEoAAAiGyEKIAEoAAQiHCELIAEoAAgiHSEMIAEoAAwiHiEPQbLaiMsHIQEgFiEEQfTKgdkGIQUgGSENIBghBiAXIQMDQCACIANqQQcQCCAJcyIJIAJqQQkQCCAMcyIMIAlqQQ0QCCADcyIfIAxqQRIQCCEgIAcgDmpBBxAIIA9zIgMgDmpBCRAIIAZzIhAgA2pBDRAIIAdzIgcgEGpBEhAIIQ8gASAKakEHEAggDXMiDSABakEJEAggCHMiCCANakENEAggCnMiCiAIakESEAghISAEIAVqQQcQCCARcyIGIAVqQQkQCCALcyILIAZqQQ0QCCAEcyIiIAtqQRIQCCEjIAYgAiAgcyICakEHEAggB3MiByACakEJEAggCHMiCCAHakENEAggBnMiESAIakESEAggAnMhAiAOIA9zIgQgCWpBBxAIIApzIgogBGpBCRAIIAtzIgsgCmpBDRAIIAlzIgkgC2pBEhAIIARzIQ4gASAhcyIBIANqQQcQCCAicyIEIAFqQQkQCCAMcyIMIARqQQ0QCCADcyIPIAxqQRIQCCABcyEBIAUgI3MiBSANakEHEAggH3MiAyAFakEJEAggEHMiBiADakENEAggDXMiDSAGakESEAggBXMhBSAaQRJJIRAgGkECaiEaIBANAAsgACACQeXwwYsGahAKIABBBGogByASahAKIABBCGogCCATahAKIABBDGogESAUahAKIABBEGogCSAVahAKIABBFGogDkHuyIGZA2oQCiAAQRhqIAogG2oQCiAAQRxqIAsgHGoQCiAAQSBqIAwgHWoQCiAAQSRqIA8gHmoQCiAAQShqIAFBstqIywdqEAogAEEsaiAEIBZqEAogAEEwaiADIBdqEAogAEE0aiAGIBhqEAogAEE4aiANIBlqEAogAEE8aiAFQfTKgdkGahAKCzoBAX8jAEHgAGsiAyQAIANBMGogAiABEBMgAyACIAEQFiADIAMQOiAAIANBMGogAxALIANB4ABqJAALdgECfyMAQdABayICJAADQCAAIANqIAEgA2otAAA6AAAgA0EBaiIDQSBHDQALIAAgAC0AAEH4AXE6AAAgACAALQAfQT9xQcAAcjoAHyACQTBqIAAQdiACIAJB2ABqIAJBgAFqENwCIAAgAhAtIAJB0AFqJABBAAu9AwEMfiABNAIEIQIgATQCCCEDIAE0AgwhBCABNAIQIQUgATQCFCEGIAE0AhghByABNAIAIQsgACABNAIkQsK2B34iCCAIQoCAgAh8IghCgICA8A+DfSABNAIgQsK2B34gATQCHELCtgd+IglCgICACHwiCkIZh3wiDEKAgIAQfCINQhqIfD4CJCAAIAwgDUKAgIDgD4N9PgIgIAAgCSAKQoCAgPAPg30gB0LCtgd+IAZCwrYHfiIGQoCAgAh8IgdCGYd8IglCgICAEHwiCkIaiHw+AhwgACAJIApCgICA4A+DfT4CGCAAIAYgB0KAgIDwD4N9IAVCwrYHfiAEQsK2B34iBEKAgIAIfCIFQhmHfCIGQoCAgBB8IgdCGoh8PgIUIAAgBiAHQoCAgOAPg30+AhAgACAEIAVCgICA8A+DfSADQsK2B34gAkLCtgd+IgJCgICACHwiA0IZh3wiBEKAgIAQfCIFQhqIfD4CDCAAIAQgBUKAgIDgD4N9PgIIIAAgAiADQoCAgPAPg30gCEIZh0ITfiALQsK2B358IgJCgICAEHwiA0IaiHw+AgQgACACIANCgICA4A+DfT4CAAvcAQEFfyMAQRBrIgNBADYACyADQQA2AggDQCAAIAJqLQAAIQRBACEBA0AgA0EIaiABaiIFIAUtAAAgAUEFdEGgjQJqIAJqLQAAIARzcjoAACABQQFqIgFBB0cNAAsgAkEBaiICQR9HDQALIAAtAB9B/wBxIQJBACEAQQAhAQNAIANBCGogAWoiBCAELQAAIAIgAUEFdEG/jQJqLQAAc3I6AAAgAUEBaiIBQQdHDQALQQAhAQNAIANBCGogAGotAABBAWsgAXIhASAAQQFqIgBBB0cNAAsgAUEIdkEBcQvcBAEDfyMAQdACayIDJABBfyEEIAIQ3wJFBEBBACEEA0AgACAEaiABIARqLQAAOgAAIARBAWoiBEEgRw0ACyAAIAAtAABB+AFxOgAAIAAgAC0AH0E/cUHAAHI6AB8gA0GgAmogAhB7IANB8AFqEB0gA0HAAWoQOCADQZABaiADQaACahAsIANB4ABqEB1B/gEhAkEAIQQDQCADQfABaiADQZABaiAAIAIiBUEDdmotAAAgAkEHcXZBAXEiASAEcyIEEE4gA0HAAWogA0HgAGogBBBOIAJBAWshAiADQTBqIANBkAFqIANB4ABqEBYgAyADQfABaiADQcABahAWIANB8AFqIANB8AFqIANBwAFqEBMgA0HAAWogA0GQAWogA0HgAGoQEyADQeAAaiADQTBqIANB8AFqEAsgA0HAAWogA0HAAWogAxALIANBMGogAxAOIAMgA0HwAWoQDiADQZABaiADQeAAaiADQcABahATIANBwAFqIANB4ABqIANBwAFqEBYgA0HwAWogAyADQTBqEAsgAyADIANBMGoQFiADQcABaiADQcABahAOIANB4ABqIAMQ3gIgA0GQAWogA0GQAWoQDiADQTBqIANBMGogA0HgAGoQEyADQeAAaiADQaACaiADQcABahALIANBwAFqIAMgA0EwahALIAEhBCAFDQALIANB8AFqIANBkAFqIAEQTiADQcABaiADQeAAaiABEE4gA0HAAWogA0HAAWoQOiADQfABaiADQfABaiADQcABahALIAAgA0HwAWoQLUEAIQQLIANB0AJqJAAgBAtUAQV/QSAhAUEBIQIDQCAAIAFBAWsiAWotAAAiBCABQYAbai0AACIFa0EIdSACcSADQf8BcXIhAyAEIAVzQf//A2pBCHYgAnEhAiABDQALIANBAEcL6B4BOn4gARAPIRIg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CiAAIAtC////AIMgBEIVh3wiBkIKiDwAESAAIAZCAog8ABAgACAEQv///wCDIgdCAYYgBUIUiIQ8AA0gACAMQv///wCDIAZCFYd8IgRCDYg8ABQgACAEQgWIPAATIAAgBkL///8AgyIFQgaGIAdCD4iEPAAPIAAgDkL///8AgyAEQhWHfCIGPAAVIAAgBEIDhiAFQhKIhDwAEiAAIAZCCIg8ABYgACAPQv///wCDIAZCFYd8IgRCC4g8ABkgACAEQgOIPAAYIAAgEEL///8AgyAEQhWHfCIFQgaIPAAbIAAgBkIQiEIfgyAEQv///wCDIgRCBYaEPAAXIAAgDUL///8AgyAFQhWHfCIGQhGIPAAfIAAgBkIJiDwAHiAAIAZCAYg8AB0gACAFQv///wCDIgVCAoYgBEITiIQ8ABogACAGQgeGIAVCDoiEPAAcC1IBA38gAC0AH0F/c0H/AHEhAUEeIQIDQCABIAAgAmotAABBf3NyIQEgAkEBayIDIQIgAw0ACyABQf8BcUEBa0HsASAALQAAa3FBCHZBf3NBAXELjAQBAn8jAEHgDWsiAiQAIAJB4ANqIAEQGyACQcACaiABEE8gAiACQcACahAVIAJBwAJqIAIgAkHgA2oQGiACQaABaiACQcACahAVIAJBgAVqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBoAZqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBwAdqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJB4AhqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBgApqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBoAtqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBwAxqIAJBoAFqEBsgABCrAUH8ASEBA0AgAkHAAmogABBPAkAgASIDQaCLAmosAAAiAUEBTgRAIAJBoAFqIAJBwAJqEBUgAkHAAmogAkGgAWogAkHgA2ogAUH+AXFBAXZBoAFsahAaDAELIAFBf0oNACACQaABaiACQcACahAVIAJBwAJqIAJBoAFqIAJB4ANqQQAgAWtB/gFx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/////////3/t////////////////////////////////////////f+7///////////////////////////////////////9/7dP1XBpjEljWnPei3vneFABBnxsL/PABEIU7jAG98ST/+CXDAWDcNwC3TD7/w0I9ADJMpAHhpEz/TD2j/3U+HwBRkUD/dkEOAKJz1v8Gii4AfOb0/wqKjwA0GsIAuPRMAIGPKQG+9BP/e6p6/2KBRAB51ZMAVmUe/6FnmwCMWUP/7+W+AUMLtQDG8In+7kW8/+pxPP8l/zn/RbK2/oDQswB2Gn3+AwfW//EyTf9Vy8X/04f6/xkwZP+71bT+EVhpAFPRngEFc2IABK48/qs3bv/ZtRH/FLyqAJKcZv5X1q7/cnqbAeksqgB/CO8B1uzqAK8F2wAxaj3/BkLQ/wJqbv9R6hP/12vA/0OX7gATKmz/5VVxATJEh/8RagkAMmcB/1ABqAEjmB7/EKi5AThZ6P9l0vwAKfpHAMyqT/8OLu//UE3vAL3WS/8RjfkAJlBM/75VdQBW5KoAnNjQAcPPpP+WQkz/r+EQ/41QYgFM2/IAxqJyAC7amACbK/H+m6Bo/7IJ/P5kbtQADgWnAOnvo/8cl50BZZIK//6eRv5H+eQAWB4yAEQ6oP+/GGgBgUKB/8AyVf8Is4r/JvrJAHNQoACD5nEAfViTAFpExwD9TJ4AHP92AHH6/gBCSy4A5torAOV4ugGURCsAiHzuAbtrxf9UNfb/M3T+/zO7pQACEa8AQlSgAfc6HgAjQTX+Rey/AC2G9QGje90AIG4U/zQXpQC61kcA6bBgAPLvNgE5WYoAUwBU/4igZABcjnj+aHy+ALWxPv/6KVUAmIIqAWD89gCXlz/+74U+ACA4nAAtp73/joWzAYNW0wC7s5b++qoO/0RxFf/eujv/QgfxAUUGSABWnGz+N6dZAG002/4NsBf/xCxq/++VR/+kjH3/n60BADMp5wCRPiEAim9dAblTRQCQcy4AYZcQ/xjkGgAx2eIAcUvq/sGZDP+2MGD/Dg0aAIDD+f5FwTsAhCVR/n1qPADW8KkBpONCANKjTgAlNJcAY00aAO6c1f/VwNEBSS5UABRBKQE2zk8AyYOS/qpvGP+xITL+qybL/073dADR3ZkAhYCyATosGQDJJzsBvRP8ADHl0gF1u3UAtbO4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ANW7ff/oLjz/vnQq/peyE/8zPu3+zOzBAMLoPACsIp3/vRC4/mcDX/+N6ST+KRkL/xXDpgB29S0AQ9WV/58MEv+7pOMBoBkFAAxOwwErxeEAMI4p/sSbPP/fxxIBkYicAPx1qf6R4u4A7xdrAG21vP/mcDH+Sart/+e34/9Q3BQAwmt/AX/NZQAuNMUB0qsk/1gDWv84l40AYLv//ypOyAD+RkYB9H2oAMxEigF810YAZkLI/hE05AB13I/+y/h7ADgSrv+6l6T/M+jQAaDkK//5HRkBRL4/AA0AAAAA/wAAAAD1AAAAAAAA+wAAAAAAAP0AAAAA8wAAAAAHAAAAAAADAAAAAPMAAAAABQAAAAAAAAAACwAAAAAACwAAAADzAAAAAAAA/QAAAAAA/wAAAAADAAAAAPUAAAAAAAAADwAAAAAA/wAAAAD/AAAAAAcAAAAABQBBnI0CCwEBAEHAjQILAQEAQeCNAgugAeDrenw7QbiuFlbj+vGfxGraCY3rnDKx/YZiBRZfSbgAX5yVvKNQjCSx0LFVnIPvWwREXMRYHI6G2CJO3dCfEVfs////////////////////////////////////////f+3///////////////////////////////////////9/7v///////////////////////////////////////38AQaCPAgvBBQjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FsirijXmC+KQs1l7yORRDdxLztN7M/7wLW824mBpdu16Ti1SPNbwlY5GdAFtvER8VmbTxmvpII/khiBbdrVXhyrQgIDo5iqB9i+b3BFAVuDEoyy5E6+hTEk4rT/1cN9DFVviXvydF2+crGWFjv+sd6ANRLHJacG3JuUJmnPdPGbwdJK8Z7BaZvk4yVPOIZHvu+11YyLxp3BD2WcrHfMoQwkdQIrWW8s6S2D5KZuqoR0StT7Qb3cqbBctVMRg9qI+Xar32buUlE+mBAytC1txjGoPyH7mMgnA7DkDu++x39Zv8KPqD3zC+DGJacKk0eRp9VvggPgUWPKBnBuDgpnKSkU/C/SRoUKtycmySZcOCEbLu0qxFr8bSxN37OVnRMNOFPeY6+LVHMKZaiydzy7Cmp25q7tRy7JwoE7NYIUhSxykmQD8Uyh6L+iATBCvEtmGqiRl/jQcItLwjC+VAajUWzHGFLv1hnoktEQqWVVJAaZ1iogcVeFNQ70uNG7MnCgahDI0NK4FsGkGVOrQVEIbDcemeuO30x3SCeoSJvhtbywNGNaycWzDBw5y4pB40qq2E5z42N3T8qcW6O4stbzby5o/LLvXe6Cj3RgLxdDb2OleHKr8KEUeMiE7DlkGggCx4woHmMj+v++kOm9gt7rbFCkFXnGsvej+b4rU3Lj8nhxxpxhJurOPifKB8LAIce4htEe6+DN1n3a6njRbu5/T331um8Xcqpn8AammMiixX1jCq4N+b4EmD8RG0ccEzULcRuEfQQj9XfbKJMkx0B7q8oyvL7JFQq+njxMDRCcxGcdQ7ZCPsu+1MVMKn5l/Jwpf1ns+tY6q2/LXxdYR0qMGURsgABB8JUCC4UBYjY0X3BvcyA8PSBiNjRfbGVuAHNvZGl1bS9jb2RlY3MuYwBzb2RpdW1fYmluMmJhc2U2NAAkYXJnb24yaWQAJGFyZ29uMmkAJHY9ACRtPQAsdD0ALHA9ACRhcmdvbjJpZCR2PQAkYXJnb24yaSR2PQAkYXJnb24yaWQkACRhcmdvbjJpJABBkJcCCyhTaWdFZDI1NTE5IG5vIEVkMjU1MTkgY29sbGlzaW9ucwEAMS4wLjE4AEG8lwILOVCOUAAAQAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQ==";function nA(A){try{if(A==iA&&w)return new Uint8Array(w);var I=HA(A);if(I)return I;if(t)return t(A);throw"both async and sync fetching of the wasm failed"}catch(A){$(A)}}function aA(){if(!w&&(i||n)){if("function"==typeof fetch&&!QA(iA))return fetch(iA,{credentials:"same-origin"}).then((function(A){if(!A.ok)throw"failed to load wasm binary file at '"+iA+"'";return A.arrayBuffer()})).catch((function(){return nA(iA)}));if(e)return new Promise((function(A,I){e(iA,(function(I){A(new Uint8Array(I))}),I)}))}return Promise.resolve().then((function(){return nA(iA)}))}function rA(){var A={a:bA};function I(A,I){var g=A.exports;Q.asm=g,M((h=Q.asm.g).buffer),d=Q.asm.h,z()}function g(A){I(A.instance)}function B(I){return aA().then((function(I){return WebAssembly.instantiate(I,A)})).then(I,(function(A){D("failed to asynchronously prepare wasm: "+A),$(A)}))}if(O(),Q.instantiateWasm)try{return Q.instantiateWasm(A,I)}catch(A){return D("Module.instantiateWasm callback failed with error: "+A),!1}return w||"function"!=typeof WebAssembly.instantiateStreaming||gA(iA)||QA(iA)||"function"!=typeof fetch?B(g):fetch(iA,{credentials:"same-origin"}).then((function(I){return WebAssembly.instantiateStreaming(I,A).then(g,(function(A){return D("wasm streaming compile failed: "+A),D("falling back to ArrayBuffer instantiation"),B(g)}))})),{}}gA(iA)||(iA=s(iA));var oA={1024:function(){return Q.getRandomValue()},1062:function(){if(void 0===Q.getRandomValue)try{var A="object"==typeof window?window:self,I=void 0!==A.crypto?A.crypto:A.msCrypto,g=function(){var A=new Uint32Array(1);return I.getRandomValues(A),A[0]>>>0};g(),Q.getRandomValue=g}catch(A){try{var B=require("crypto"),C=function(){var A=B.randomBytes(4);return(A[0]<<24|A[1]<<16|A[2]<<8|A[3])>>>0};C(),Q.getRandomValue=C}catch(A){throw"No secure random number generator found"}}}};function eA(A){for(;A.length>0;){var I=A.shift();if("function"!=typeof I){var g=I.func;"number"==typeof g?void 0===I.arg?d.get(g)():d.get(g)(I.arg):g(void 0===I.arg?null:I.arg)}else I(Q)}}function tA(A,I,g,B){$("Assertion failed: "+S(A)+", at: "+[I?S(I):"unknown filename",g,B?S(B):"unknown function"])}function fA(){$()}function cA(A,I,g){var B=lA(I,g);return oA[A].apply(null,B)}function yA(A,I,g){_.copyWithin(A,I,I+g)}function sA(){return _.length}function wA(A){try{return h.grow(A-G.byteLength+65535>>>16),M(h.buffer),1}catch(A){}}function hA(A){A>>>=0;var I=sA(),g=2147483648;if(A>g)return!1;for(var B=1;B<=4;B*=2){var Q=I*(1+.2/B);if(Q=Math.min(Q,A+100663296),wA(Math.min(g,N(Math.max(16777216,A,Q),65536))))return!0}return!1}function DA(A){return Y[vA()>>2]=A,A}function uA(A){switch(A){case 30:return 16384;case 85:return 131072;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==typeof navigator&&navigator.hardwareConcurrency||1}return DA(28),-1}var pA=[];function lA(A,I){var g;for(pA.length=0,I>>=2;g=_[A++];){var B=g<105;B&&1&I&&I++,pA.push(B?m[I++>>1]:Y[I]),++I}return pA}var FA=!1;function GA(A){for(var I=[],g=0;g255&&(FA&&F(!1,"Character code "+B+" ("+String.fromCharCode(B)+") at offset "+g+" not in 0x00-0xFF."),B&=255),I.push(String.fromCharCode(B))}return I.join("")}var kA="function"==typeof atob?atob:function(A){var I,g,B,Q,C,E,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="",a=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{I=i.indexOf(A.charAt(a++))<<2|(Q=i.indexOf(A.charAt(a++)))>>4,g=(15&Q)<<4|(C=i.indexOf(A.charAt(a++)))>>2,B=(3&C)<<6|(E=i.indexOf(A.charAt(a++))),n+=String.fromCharCode(I),64!==C&&(n+=String.fromCharCode(g)),64!==E&&(n+=String.fromCharCode(B))}while(a0||(L(),T>0||(Q.setStatus?(Q.setStatus("Running..."),setTimeout((function(){setTimeout((function(){Q.setStatus("")}),1),I()}),1)):I()))}if(Q._malloc=function(){return(Q._malloc=Q.asm.Bc).apply(null,arguments)},Q._free=function(){return(Q._free=Q.asm.Cc).apply(null,arguments)},Q.setValue=u,Q.getValue=p,Q.UTF8ToString=S,Z=function A(){YA||UA(),YA||(Z=A)},Q.run=UA,Q.preInit)for("function"==typeof Q.preInit&&(Q.preInit=[Q.preInit]);Q.preInit.length>0;)Q.preInit.pop()();UA()})).catch((function(){return B.useBackupModule()})),I}"function"==typeof define&&define.amd?define(["exports"],I):"object"==typeof exports&&"string"!=typeof exports.nodeName?I(exports):A.libsodium=I(A.libsodium_mod||(A.commonJsStrict={}))}(this); +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/libsodium/dist/modules") +},{"_process":390,"buffer":69,"crypto":81,"fs":24,"path":382}],211:[function(require,module,exports){ +(function (global){(function (){ /** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} -module.exports = mapCacheGet; +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; -},{"./_getMapData":275}],304:[function(require,module,exports){ -var getMapData = require('./_getMapData'); +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; -module.exports = mapCacheHas; +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; -},{"./_getMapData":275}],305:[function(require,module,exports){ -var getMapData = require('./_getMapData'); +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; /** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ -function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; -} +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; -module.exports = mapCacheSet; +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; -},{"./_getMapData":275}],306:[function(require,module,exports){ -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; -module.exports = mapToArray; +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); -},{}],307:[function(require,module,exports){ /** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. + * Gets the value at `key` of `object`. * * @private + * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. + * @returns {*} Returns the property value. */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; +function getValue(object, key) { + return object == null ? undefined : object[key]; } -module.exports = matchesStrictComparable; - -},{}],308:[function(require,module,exports){ -var memoize = require('./memoize'); - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - /** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * Checks if `value` is a host object in IE < 9. * * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. */ -function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } return result; } -module.exports = memoizeCapped; - -},{"./memoize":351}],309:[function(require,module,exports){ -var getNative = require('./_getNative'); - -/* Built-in method references that are verified to be native. */ -var nativeCreate = getNative(Object, 'create'); - -module.exports = nativeCreate; - -},{"./_getNative":277}],310:[function(require,module,exports){ -var overArg = require('./_overArg'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = overArg(Object.keys, Object); - -module.exports = nativeKeys; - -},{"./_overArg":313}],311:[function(require,module,exports){ -var freeGlobal = require('./_freeGlobal'); - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Detect free variable `process` from Node.js. */ -var freeProcess = moduleExports && freeGlobal.process; - -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; - - if (types) { - return types; - } +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; }()); -module.exports = nodeUtil; +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; -},{"./_freeGlobal":273}],312:[function(require,module,exports){ -/** Used for built-in method references. */ -var objectProto = Object.prototype; +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ -var nativeObjectToString = objectProto.toString; +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** Built-in value references. */ +var Symbol = root.Symbol, + splice = arrayProto.splice; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; /** - * Converts `value` to a string using `Object.prototype.toString`. + * Creates a hash object. * * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. + * @constructor + * @param {Array} [entries] The key-value pairs to cache. */ -function objectToString(value) { - return nativeObjectToString.call(value); -} +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; -module.exports = objectToString; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} -},{}],313:[function(require,module,exports){ /** - * Creates a unary function that invokes `func` with its argument transformed. + * Removes all key-value entries from the hash. * * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. + * @name clear + * @memberOf Hash */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; } -module.exports = overArg; - -},{}],314:[function(require,module,exports){ -var freeGlobal = require('./_freeGlobal'); - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -module.exports = root; - -},{"./_freeGlobal":273}],315:[function(require,module,exports){ -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - /** - * Adds `value` to the array cache. + * Removes `key` and its value from the hash. * * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; } -module.exports = setCacheAdd; +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} -},{}],316:[function(require,module,exports){ /** - * Checks if `value` is in the array cache. + * Checks if a hash value for `key` exists. * * @private * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ -function setCacheHas(value) { - return this.__data__.has(value); +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); } -module.exports = setCacheHas; +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; -},{}],317:[function(require,module,exports){ /** - * Converts `set` to an array of its values. + * Creates an list cache object. * * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. + * @constructor + * @param {Array} [entries] The key-value pairs to cache. */ -function setToArray(set) { +function ListCache(entries) { var index = -1, - result = Array(set.size); + length = entries ? entries.length : 0; - set.forEach(function(value) { - result[++index] = value; - }); - return result; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } } -module.exports = setToArray; - -},{}],318:[function(require,module,exports){ -var ListCache = require('./_ListCache'); - /** - * Removes all key-value entries from the stack. + * Removes all key-value entries from the list cache. * * @private * @name clear - * @memberOf Stack + * @memberOf ListCache */ -function stackClear() { - this.__data__ = new ListCache; - this.size = 0; +function listCacheClear() { + this.__data__ = []; } -module.exports = stackClear; - -},{"./_ListCache":217}],319:[function(require,module,exports){ /** - * Removes `key` and its value from the stack. + * Removes `key` and its value from the list cache. * * @private * @name delete - * @memberOf Stack + * @memberOf ListCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ -function stackDelete(key) { +function listCacheDelete(key) { var data = this.__data__, - result = data['delete'](key); + index = assocIndexOf(data, key); - this.size = data.size; - return result; + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; } -module.exports = stackDelete; - -},{}],320:[function(require,module,exports){ /** - * Gets the stack value for `key`. + * Gets the list cache value for `key`. * * @private * @name get - * @memberOf Stack + * @memberOf ListCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ -function stackGet(key) { - return this.__data__.get(key); -} +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); -module.exports = stackGet; + return index < 0 ? undefined : data[index][1]; +} -},{}],321:[function(require,module,exports){ /** - * Checks if a stack value for `key` exists. + * Checks if a list cache value for `key` exists. * * @private * @name has - * @memberOf Stack + * @memberOf ListCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ -function stackHas(key) { - return this.__data__.has(key); +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; } -module.exports = stackHas; - -},{}],322:[function(require,module,exports){ -var ListCache = require('./_ListCache'), - Map = require('./_Map'), - MapCache = require('./_MapCache'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - /** - * Sets the stack `key` to `value`. + * Sets the list cache `key` to `value`. * * @private * @name set - * @memberOf Stack + * @memberOf ListCache * @param {string} key The key of the value to set. * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. + * @returns {Object} Returns the list cache instance. */ -function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; } - data.set(key, value); - this.size = data.size; return this; } -module.exports = stackSet; - -},{"./_ListCache":217,"./_Map":218,"./_MapCache":219}],323:[function(require,module,exports){ -var asciiToArray = require('./_asciiToArray'), - hasUnicode = require('./_hasUnicode'), - unicodeToArray = require('./_unicodeToArray'); +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; /** - * Converts `string` to an array. + * Creates a map cache object to store key-value pairs. * * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. + * @constructor + * @param {Array} [entries] The key-value pairs to cache. */ -function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); -} - -module.exports = stringToArray; - -},{"./_asciiToArray":233,"./_hasUnicode":283,"./_unicodeToArray":327}],324:[function(require,module,exports){ -var memoizeCapped = require('./_memoizeCapped'); - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} /** - * Converts `string` to a property path array. + * Removes all key-value entries from the map. * * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. + * @name clear + * @memberOf MapCache */ -var stringToPath = memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -module.exports = stringToPath; - -},{"./_memoizeCapped":308}],325:[function(require,module,exports){ -var isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} /** - * Converts `value` to a string key if it's not a string or symbol. + * Removes `key` and its value from the map. * * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); } -module.exports = toKey; - -},{"./isSymbol":345}],326:[function(require,module,exports){ -/** Used for built-in method references. */ -var funcProto = Function.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - /** - * Converts `func` to its source code. + * Gets the map value for `key`. * * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; +function mapCacheGet(key) { + return getMapData(this, key).get(key); } -module.exports = toSource; - -},{}],327:[function(require,module,exports){ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - /** - * Converts a Unicode `string` to an array. + * Checks if a map value for `key` exists. * * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ -function unicodeToArray(string) { - return string.match(reUnicode) || []; +function mapCacheHas(key) { + return getMapData(this, key).has(key); } -module.exports = unicodeToArray; - -},{}],328:[function(require,module,exports){ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - -/** Used to compose unicode capture groups. */ -var rsApos = "['\u2019]", - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', - rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', - rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} -/** Used to match complex or compound words. */ -var reUnicodeWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', - rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, - rsUpper + '+' + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji -].join('|'), 'g'); +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; /** - * Splits a Unicode `string` into an array of its words. + * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. */ -function unicodeWords(string) { - return string.match(reUnicodeWord) || []; +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; } -module.exports = unicodeWords; - -},{}],329:[function(require,module,exports){ -var capitalize = require('./capitalize'), - createCompounder = require('./_createCompounder'); - /** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' + * The base implementation of `_.get` without support for default values. * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. */ -var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); -}); +function baseGet(object, path) { + path = isKey(path, object) ? [path] : castPath(path); -module.exports = camelCase; + var index = 0, + length = path.length; -},{"./_createCompounder":267,"./capitalize":330}],330:[function(require,module,exports){ -var toString = require('./toString'), - upperFirst = require('./upperFirst'); + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example + * The base implementation of `_.isNative` without bad shim checks. * - * _.capitalize('FRED'); - * // => 'Fred' + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. */ -function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); } -module.exports = capitalize; - -},{"./toString":356,"./upperFirst":357}],331:[function(require,module,exports){ -var deburrLetter = require('./_deburrLetter'), - toString = require('./toString'); - -/** Used to match Latin Unicode letters (excluding mathematical operators). */ -var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - -/** Used to compose unicode character classes. */ -var rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange; - -/** Used to compose unicode capture groups. */ -var rsCombo = '[' + rsComboRange + ']'; - /** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. */ -var reComboMark = RegExp(rsCombo, 'g'); +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} /** - * Deburrs `string` by converting - * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) - * letters to basic Latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example + * Casts `value` to a path array if it's not one. * - * _.deburr('déjà vu'); - * // => 'deja vu' + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. */ -function deburr(string) { - string = toString(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); +function castPath(value) { + return isArray(value) ? value : stringToPath(value); } -module.exports = deburr; - -},{"./_deburrLetter":268,"./toString":356}],332:[function(require,module,exports){ /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false + * Gets the data for `map`. * - * _.eq(NaN, NaN); - * // => true + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. */ -function eq(value, other) { - return value === other || (value !== value && other !== other); +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; } -module.exports = eq; - -},{}],333:[function(require,module,exports){ -var baseGet = require('./_baseGet'); - /** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. + * Gets the native function at `key` of `object`. * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object + * @private * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; } -module.exports = get; - -},{"./_baseGet":239}],334:[function(require,module,exports){ -var baseHas = require('./_baseHas'), - hasPath = require('./_hasPath'); - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true + * Checks if `value` is a property name and not a property path. * - * _.has(other, 'a'); - * // => false + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ -function has(object, path) { - return object != null && hasPath(object, path, baseHas); +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); } -module.exports = has; - -},{"./_baseHas":242,"./_hasPath":282}],335:[function(require,module,exports){ -var baseHasIn = require('./_baseHasIn'), - hasPath = require('./_hasPath'); - /** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true + * Checks if `value` is suitable for use as unique object key. * - * _.hasIn(object, 'b'); - * // => false + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ -function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); } -module.exports = hasIn; - -},{"./_baseHasIn":243,"./_hasPath":282}],336:[function(require,module,exports){ /** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; + * Checks if `func` has its source masked. * - * console.log(_.identity(object) === object); - * // => true + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ -function identity(value) { - return value; +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); } -module.exports = identity; - -},{}],337:[function(require,module,exports){ -var baseIsArguments = require('./_baseIsArguments'), - isObjectLike = require('./isObjectLike'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function(string) { + string = toString(string); -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true + * Converts `value` to a string key if it's not a string or symbol. * - * _.isArguments([1, 2, 3]); - * // => false + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. */ -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} -module.exports = isArguments; +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} -},{"./_baseIsArguments":244,"./isObjectLike":344}],338:[function(require,module,exports){ /** - * Checks if `value` is classified as an `Array` object. + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. * * @static * @memberOf _ * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. * @example * - * _.isArray([1, 2, 3]); - * // => true + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; * - * _.isArray(document.body.children); - * // => false + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] * - * _.isArray('abc'); - * // => false + * values(other); + * // => [3, 4] * - * _.isArray(_.noop); - * // => false + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; */ -var isArray = Array.isArray; +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; -module.exports = isArray; + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} -},{}],339:[function(require,module,exports){ -var isFunction = require('./isFunction'), - isLength = require('./isLength'); +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * - * _.isArrayLike([1, 2, 3]); + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); * // => true * - * _.isArrayLike(document.body.children); - * // => true + * _.eq(object, other); + * // => false * - * _.isArrayLike('abc'); + * _.eq('a', 'a'); * // => true * - * _.isArrayLike(_.noop); + * _.eq('a', Object('a')); * // => false + * + * _.eq(NaN, NaN); + * // => true */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); +function eq(value, other) { + return value === other || (value !== value && other !== other); } -module.exports = isArrayLike; - -},{"./isFunction":341,"./isLength":342}],340:[function(require,module,exports){ -var root = require('./_root'), - stubFalse = require('./stubFalse'); - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Built-in value references. */ -var Buffer = moduleExports ? root.Buffer : undefined; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - /** - * Checks if `value` is a buffer. + * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ - * @since 4.3.0 + * @since 0.1.0 * @category Lang * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * - * _.isBuffer(new Buffer(2)); + * _.isArray([1, 2, 3]); * // => true * - * _.isBuffer(new Uint8Array(2)); + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); * // => false */ -var isBuffer = nativeIsBuffer || stubFalse; - -module.exports = isBuffer; - -},{"./_root":314,"./stubFalse":355}],341:[function(require,module,exports){ -var baseGetTag = require('./_baseGetTag'), - isObject = require('./isObject'); - -/** `Object#toString` result references. */ -var asyncTag = '[object AsyncFunction]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; +var isArray = Array.isArray; /** * Checks if `value` is classified as a `Function` object. @@ -40914,55 +31436,12 @@ var asyncTag = '[object AsyncFunction]', * // => false */ function isFunction(value) { - if (!isObject(value)) { - return false; - } // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; -} - -module.exports = isFunction; - -},{"./_baseGetTag":241,"./isObject":343}],342:[function(require,module,exports){ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; } -module.exports = isLength; - -},{}],343:[function(require,module,exports){ /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) @@ -40990,12 +31469,9 @@ module.exports = isLength; */ function isObject(value) { var type = typeof value; - return value != null && (type == 'object' || type == 'function'); + return !!value && (type == 'object' || type == 'function'); } -module.exports = isObject; - -},{}],344:[function(require,module,exports){ /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". @@ -41021,18 +31497,9 @@ module.exports = isObject; * // => false */ function isObjectLike(value) { - return value != null && typeof value == 'object'; + return !!value && typeof value == 'object'; } -module.exports = isObjectLike; - -},{}],345:[function(require,module,exports){ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - /** * Checks if `value` is classified as a `Symbol` primitive or object. * @@ -41050,43821 +31517,46465 @@ var symbolTag = '[object Symbol]'; * _.isSymbol('abc'); * // => false */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); -} - -module.exports = isSymbol; - -},{"./_baseGetTag":241,"./isObjectLike":344}],346:[function(require,module,exports){ -var baseIsTypedArray = require('./_baseIsTypedArray'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - -module.exports = isTypedArray; - -},{"./_baseIsTypedArray":249,"./_baseUnary":260,"./_nodeUtil":311}],347:[function(require,module,exports){ -var arrayLikeKeys = require('./_arrayLikeKeys'), - baseKeys = require('./_baseKeys'), - isArrayLike = require('./isArrayLike'); - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); -} - -module.exports = keys; - -},{"./_arrayLikeKeys":228,"./_baseKeys":251,"./isArrayLike":339}],348:[function(require,module,exports){ -(function (global){(function (){ -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.17.21'; - - /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200; - - /** Error message constants. */ - var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', - FUNC_ERROR_TEXT = 'Expected a function', - INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; - - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__lodash_hash_undefined__'; - - /** Used as the maximum memoize cache size. */ - var MAX_MEMOIZE_SIZE = 500; - - /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__'; - - /** Used to compose bitmasks for cloning. */ - var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - - /** Used to compose bitmasks for value comparisons. */ - var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - - /** Used to compose bitmasks for function metadata. */ - var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_BOUND_FLAG = 4, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256, - WRAP_FLIP_FLAG = 512; - - /** Used as default options for `_.truncate`. */ - var DEFAULT_TRUNC_LENGTH = 30, - DEFAULT_TRUNC_OMISSION = '...'; - - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 800, - HOT_SPAN = 16; - - /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2, - LAZY_WHILE_FLAG = 3; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991, - MAX_INTEGER = 1.7976931348623157e+308, - NAN = 0 / 0; - - /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - - /** Used to associate wrap methods with their bit flags. */ - var wrapFlags = [ - ['ary', WRAP_ARY_FLAG], - ['bind', WRAP_BIND_FLAG], - ['bindKey', WRAP_BIND_KEY_FLAG], - ['curry', WRAP_CURRY_FLAG], - ['curryRight', WRAP_CURRY_RIGHT_FLAG], - ['flip', WRAP_FLIP_FLAG], - ['partial', WRAP_PARTIAL_FLAG], - ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], - ['rearg', WRAP_REARG_FLAG] - ]; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - asyncTag = '[object AsyncFunction]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - domExcTag = '[object DOMException]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - nullTag = '[object Null]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - undefinedTag = '[object Undefined]', - weakMapTag = '[object WeakMap]', - weakSetTag = '[object WeakSet]'; - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - /** Used to match empty string literals in compiled template source. */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - - /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, - reUnescapedHtml = /[&<>"']/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to match template delimiters. */ - var reEscape = /<%-([\s\S]+?)%>/g, - reEvaluate = /<%([\s\S]+?)%>/g, - reInterpolate = /<%=([\s\S]+?)%>/g; - - /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); - - /** Used to match leading whitespace. */ - var reTrimStart = /^\s+/; - - /** Used to match a single whitespace character. */ - var reWhitespace = /\s/; - - /** Used to match wrap detail comments. */ - var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, - reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, - reSplitDetails = /,? & /; - - /** Used to match words composed of alphanumeric characters. */ - var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - - /** - * Used to validate the `validate` option in `_.template` variable. - * - * Forbids characters which could potentially change the meaning of the function argument definition: - * - "()," (modification of function parameters) - * - "=" (default value) - * - "[]{}" (destructuring of function parameters) - * - "/" (beginning of a comment) - * - whitespace - */ - var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; - - /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g; - - /** - * Used to match - * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). - */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - - /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; - - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** Used to match Latin Unicode letters (excluding mathematical operators). */ - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - - /** Used to ensure capturing order of template delimiters. */ - var reNoMatch = /($^)/; - - /** Used to match unescaped characters in compiled string literals. */ - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - - /** Used to compose unicode capture groups. */ - var rsApos = "['\u2019]", - rsAstral = '[' + rsAstralRange + ']', - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; - - /** Used to compose unicode regexes. */ - var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', - rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', - rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - - /** Used to match apostrophes. */ - var reApos = RegExp(rsApos, 'g'); - - /** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ - var reComboMark = RegExp(rsCombo, 'g'); - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - - /** Used to match complex or compound words. */ - var reUnicodeWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', - rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, - rsUpper + '+' + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji - ].join('|'), 'g'); - - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - - /** Used to detect strings that need a more robust regexp to match words. */ - var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - - /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', - 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', - 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', - 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', - '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' - ]; +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} - /** Used to make template sourceURLs easier to identify. */ - var templateCounter = -1; +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = - typedArrayTags[errorTag] = typedArrayTags[funcTag] = - typedArrayTags[mapTag] = typedArrayTags[numberTag] = - typedArrayTags[objectTag] = typedArrayTags[regexpTag] = - typedArrayTags[setTag] = typedArrayTags[stringTag] = - typedArrayTags[weakMapTag] = false; +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} - /** Used to identify `toStringTag` values supported by `_.clone`. */ - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = - cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = - cloneableTags[boolTag] = cloneableTags[dateTag] = - cloneableTags[float32Tag] = cloneableTags[float64Tag] = - cloneableTags[int8Tag] = cloneableTags[int16Tag] = - cloneableTags[int32Tag] = cloneableTags[mapTag] = - cloneableTags[numberTag] = cloneableTags[objectTag] = - cloneableTags[regexpTag] = cloneableTags[setTag] = - cloneableTags[stringTag] = cloneableTags[symbolTag] = - cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = - cloneableTags[weakMapTag] = false; +module.exports = get; - /** Used to map Latin Unicode letters to basic Latin letters. */ - var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', - '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', - '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', - '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', - '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', - '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', - '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', - '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', - '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', - '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', - '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', - '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', - '\u0134': 'J', '\u0135': 'j', - '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', - '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', - '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', - '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', - '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', - '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', - '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', - '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', - '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', - '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', - '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', - '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', - '\u0163': 't', '\u0165': 't', '\u0167': 't', - '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', - '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', - '\u0174': 'W', '\u0175': 'w', - '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', - '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', - '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', - '\u0132': 'IJ', '\u0133': 'ij', - '\u0152': 'Oe', '\u0153': 'oe', - '\u0149': "'n", '\u017f': 's' - }; +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],212:[function(require,module,exports){ +(function (global){(function (){ +/** + * Lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; - /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" - }; +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; - /** Used to escape characters for inclusion in compiled string literals. */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat, - freeParseInt = parseInt; +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]'; - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; - /** Detect free variable `process` from Node.js. */ - var freeProcess = moduleExports && freeGlobal.process; +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - /** Used to access faster Node.js helpers. */ - var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - if (types) { - return types; - } +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} - }()); +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - /* Node.js helper references. */ - var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, - nodeIsDate = nodeUtil && nodeUtil.isDate, - nodeIsMap = nodeUtil && nodeUtil.isMap, - nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, - nodeIsSet = nodeUtil && nodeUtil.isSet, - nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - /*--------------------------------------------------------------------------*/ +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; - /** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array == null ? 0 : array.length; +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); + if (types) { + return types; } - return accumulator; - } - - /** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); - /** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEachRight(array, iteratee) { - var length = array == null ? 0 : array.length; +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); } + return func.apply(thisArg, args); +} - /** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ - function arrayEvery(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; + while (++index < n) { + result[index] = iteratee(index); } + return result; +} - /** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; - } +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} - /** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && baseIndexOf(array, value, 0) > -1; - } +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; - /** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; - } +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); - /** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined, + Symbol = root.Symbol, + Uint8Array = root.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; - /** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array == null ? 0 : array.length; - if (initAccum && length) { - accumulator = array[--length]; +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeMax = Math.max, + nativeNow = Date.now; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); + if (objectCreate) { + return objectCreate(proto); } - return accumulator; - } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); - /** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); } +} - /** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - var asciiSize = baseProperty('length'); +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} - /** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function asciiToArray(string) { - return string.split(''); - } +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} - /** - * Splits an ASCII `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function asciiWords(string) { - return string.match(reAsciiWord) || []; +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} - /** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = key; - return false; - } - }); - return result; - } +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +} - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; - /** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - return value === value - ? strictIndexOf(array, value, fromIndex) - : baseFindIndex(array, baseIsNaN, fromIndex); +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); } +} - /** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; - } +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); - /** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ - function baseIsNaN(value) { - return value !== value; + if (index < 0) { + return false; } - - /** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ - function baseMean(array, iteratee) { - var length = array == null ? 0 : array.length; - return length ? (baseSum(array, iteratee) / length) : NAN; + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); } + --this.size; + return true; +} - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); - /** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; - } + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; } + return this; +} - /** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ - function baseSortBy(array, comparer) { - var length = array.length; +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); } +} - /** - * The base implementation of `_.sum` and `_.sumBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ - function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : (result + current); - } - } - return result; - } +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} - /** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ - function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); - } +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; - /** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ - function baseTrim(string) { - return string - ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; - } + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} - /** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function(value) { - return func(value); - }; - } +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; +} - /** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function cacheHas(cache, key) { - return cache.has(key); - } +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache; + this.size = 0; +} - /** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } + this.size = data.size; + return result; +} - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); } + data.set(key, value); + this.size = data.size; + return this; +} - /** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ - function countHolders(array, placeholder) { - var length = array.length, - result = 0; +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; - while (length--) { - if (array[length] === placeholder) { - ++result; - } +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); } - return result; } + return result; +} - /** - * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A - * letters to basic Latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ - var deburrLetter = basePropertyOf(deburredLetters); +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - var escapeHtmlChar = basePropertyOf(htmlEscapes); +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} - /** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } } + return -1; +} - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key]; +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; } +} - /** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ - function hasUnicode(string) { - return reHasUnicode.test(string); - } +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); - /** - * Checks if `string` contains a word composed of Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a word is found, else `false`. - */ - function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} - /** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ - function iteratorToArray(iterator) { - var data, - result = []; +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} - /** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ - function mapToArray(map) { - var index = -1, - result = Array(map.size); +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); } + var isProto = isPrototype(object), + result = []; - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } } + return result; +} - /** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + stack || (stack = new Stack); + if (isObject(srcValue)) { + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; + if (newValue === undefined) { + newValue = srcValue; } + assignMergeValue(object, key, newValue); } - return result; - } + }, keysIn); +} - /** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ - function setToArray(set) { - var index = -1, - result = Array(set.size); +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); - set.forEach(function(value) { - result[++index] = value; - }); - return result; + if (stacked) { + assignMergeValue(object, key, stacked); + return; } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; - /** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ - function setToPairs(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; - } + var isCommon = newValue === undefined; - /** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); - while (++index < length) { - if (array[index] === value) { - return index; + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; } } - return -1; - } - - /** - * A specialized version of `_.lastIndexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictLastIndexOf(array, value, fromIndex) { - var index = fromIndex + 1; - while (index--) { - if (array[index] === value) { - return index; + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); } } - return index; - } - - /** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ - function stringSize(string) { - return hasUnicode(string) - ? unicodeSize(string) - : asciiSize(string); + else { + isCommon = false; + } } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); } + assignMergeValue(object, key, newValue); +} - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ - function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; - } +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); +} - /** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - var unescapeHtmlChar = basePropertyOf(htmlUnescapes); +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); +}; - /** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - /** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } + buffer.copy(result); + return result; +} - /** - * Splits a Unicode `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function unicodeWords(string) { - return string.match(reUnicodeWord) || []; - } +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; +} - /*--------------------------------------------------------------------------*/ +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} - /** - * Create a new pristine `lodash` function using the `context` object. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Util - * @param {Object} [context=root] The context object. - * @returns {Function} Returns a new `lodash` function. - * @example - * - * _.mixin({ 'foo': _.constant('foo') }); - * - * var lodash = _.runInContext(); - * lodash.mixin({ 'bar': lodash.constant('bar') }); - * - * _.isFunction(_.foo); - * // => true - * _.isFunction(_.bar); - * // => false - * - * lodash.isFunction(lodash.foo); - * // => false - * lodash.isFunction(lodash.bar); - * // => true - * - * // Create a suped-up `defer` in Node.js. - * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; - */ - var runInContext = (function runInContext(context) { - context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; - /** Built-in constructor references. */ - var Array = context.Array, - Date = context.Date, - Error = context.Error, - Function = context.Function, - Math = context.Math, - Object = context.Object, - RegExp = context.RegExp, - String = context.String, - TypeError = context.TypeError; + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); - /** Used to detect overreaching core-js shims. */ - var coreJsData = context['__core-js_shared__']; + var index = -1, + length = props.length; - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; + while (++index < length) { + var key = props[index]; - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; - /** Used to generate unique IDs. */ - var idCounter = 0; + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; +} - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; - }()); +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString = objectProto.toString; + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; - /** Used to infer the `Object` constructor. */ - var objectCtorString = funcToString.call(Object); + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} - /** Built-in value references. */ - var Buffer = moduleExports ? context.Buffer : undefined, - Symbol = context.Symbol, - Uint8Array = context.Uint8Array, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, - getPrototype = overArg(Object.getPrototypeOf, Object), - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - splice = arrayProto.splice, - spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, - symIterator = Symbol ? Symbol.iterator : undefined, - symToStringTag = Symbol ? Symbol.toStringTag : undefined; +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} - var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} - }()); +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} - /** Mocked built-ins. */ - var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, - ctxNow = Date && Date.now !== root.Date.now && Date.now, - ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeFloor = Math.floor, - nativeGetSymbols = Object.getOwnPropertySymbols, - nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, - nativeIsFinite = context.isFinite, - nativeJoin = arrayProto.join, - nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max, - nativeMin = Math.min, - nativeNow = Date.now, - nativeParseInt = context.parseInt, - nativeRandom = Math.random, - nativeReverse = arrayProto.reverse; + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} - /* Built-in method references that are verified to be native. */ - var DataView = getNative(context, 'DataView'), - Map = getNative(context, 'Map'), - Promise = getNative(context, 'Promise'), - Set = getNative(context, 'Set'), - WeakMap = getNative(context, 'WeakMap'), - nativeCreate = getNative(Object, 'create'); + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} - /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap; +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; +} - /** Used to lookup unminified function names. */ - var realNames = {}; +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; - /** Used to detect maps, sets, and weakmaps. */ - var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; +} - /*------------------------------------------------------------------------*/ +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array and iteratees accept only - * one argument. The heuristic for whether a section qualifies for shortcut - * fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, '__wrapped__')) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; +} + +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); } + } + return result; +} - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ - var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; - }()); +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} - /** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ - function baseLodash() { - // No operation performed. - } +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; + while (++index < length) { + array[index] = args[start + index]; } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; +} - /** - * By default, the template delimiters used by lodash are like those in - * embedded Ruby (ERB) as well as ES2015 template strings. Change the - * following template settings to use alternative delimiters. - * - * @static - * @memberOf _ - * @type {Object} - */ - lodash.templateSettings = { +/** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'escape': reEscape, + if (key == '__proto__') { + return; + } - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'evaluate': reEvaluate, + return object[key]; +} - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'interpolate': reInterpolate, +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = shortOut(baseSetToString); - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type {string} - */ - 'variable': '', +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type {Object} - */ - 'imports': { + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type {Function} - */ - '_': lodash + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; } - }; + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} - // Ensure wrappers are instances of `baseLodash`. - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} - /*------------------------------------------------------------------------*/ +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; - /** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; - /** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; - } +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} - /** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; - } +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} - /** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} - if (!isArr || (!isRight && arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} - outer: - while (length-- && resIndex < takeCount) { - index += dir; +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - var iterIndex = -1, - value = array[index]; +/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { + return copyObject(value, keysIn(value)); +} - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +} - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; - } +/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ +var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); +}); - // Ensure `LazyWrapper` is an instance of `baseLodash`. - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} - /*------------------------------------------------------------------------*/ +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} - /** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } +module.exports = merge; - /** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; - } +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],213:[function(require,module,exports){ +(function (global){(function (){ +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ - /** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; - } +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; - /** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; - } +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; - /** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function hashHas(key) { - var data = this.__data__; - return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); - } +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - /** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ - function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; - } +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - // Add methods to `Hash`. - Hash.prototype.clear = hashClear; - Hash.prototype['delete'] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); - /*------------------------------------------------------------------------*/ +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} - /** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array ? array.length : 0, + result = Array(length); - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} - /** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ - function listCacheClear() { - this.__data__ = []; - this.size = 0; - } +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; - /** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; - } +/** Used for built-in method references. */ +var objectProto = Object.prototype; - /** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - return index < 0 ? undefined : data[index][1]; - } +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; - /** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } +/** Built-in value references. */ +var Symbol = root.Symbol, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; - /** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ - function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; - if (index < 0) { - ++this.size; - data.push([key, value]); +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); } else { - data[index][1] = value; + arrayPush(result, value); } - return this; + } else if (!isStrict) { + result[result.length] = value; } + } + return result; +} - // Add methods to `ListCache`. - ListCache.prototype.clear = listCacheClear; - ListCache.prototype['delete'] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property identifiers to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, props) { + object = Object(object); + return basePickBy(object, props, function(value, key) { + return key in object; + }); +} - /*------------------------------------------------------------------------*/ +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property identifiers to pick from. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, props, predicate) { + var index = -1, + length = props.length, + result = {}; - /** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; + while (++index < length) { + var key = props[index], + value = object[key]; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } + if (predicate(value, key)) { + result[key] = value; } + } + return result; +} - /** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ - function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; - } +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); - /** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; + while (++index < length) { + array[index] = args[start + index]; } - - /** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function mapCacheGet(key) { - return getMapData(this, key).get(key); + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; } + otherArgs[start] = array; + return apply(func, this, otherArgs); + }; +} - /** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} - /** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ - function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; - } +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); +} - // Add methods to `MapCache`. - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype['delete'] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; - /*------------------------------------------------------------------------*/ +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} - /** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ - function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } - } +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} - /** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; - } +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} - /** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ - function setCacheHas(value) { - return this.__data__.has(value); - } +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} - // Add methods to `SetCache`. - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} - /*------------------------------------------------------------------------*/ +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [props] The property identifiers to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = baseRest(function(object, props) { + return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey)); +}); - /** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; - } +module.exports = pick; - /** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ - function stackClear() { - this.__data__ = new ListCache; - this.size = 0; - } +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],214:[function(require,module,exports){ +(function (global){(function (){ +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ - /** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; - this.size = data.size; - return result; - } +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; - /** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function stackGet(key) { - return this.__data__.get(key); - } +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; - /** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function stackHas(key) { - return this.__data__.has(key); - } +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; - /** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ - function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; - } +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - // Add methods to `Stack`. - Stack.prototype.clear = stackClear; - Stack.prototype['delete'] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - /*------------------------------------------------------------------------*/ +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; - /** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; - } +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; - /** - * A specialized version of `_.sample` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. - */ - function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined; - } +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - /** - * A specialized version of `_.sampleSize` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); - } +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - /** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); - /** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} - /** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; - } +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; - /** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; - } +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; - /** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); - /** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssignIn(object, source) { - return object && copyObject(source, keysIn(source), object); - } +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } - } +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - /** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths to pick. - * @returns {Array} Returns the picked elements. - */ - function baseAt(object, paths) { - var index = -1, - length = paths.length, - result = Array(length), - skip = object == null; +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; - while (++index < length) { - result[index] = skip ? undefined : get(object, paths[index]); - } - return result; - } +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); - /** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; - } +/** Built-in value references. */ +var Symbol = root.Symbol, + splice = arrayProto.splice; - /** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : initCloneObject(value); - if (!isDeep) { - return isFlat - ? copySymbolsIn(value, baseAssignIn(result, value)) - : copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; - if (isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} - var keysFunc = isFull - ? (isFlat ? getAllKeysIn : getAllKeys) - : (isFlat ? keysIn : keys); +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} - var props = isArr ? undefined : keysFunc(value); - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; - } +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} - /** - * The base implementation of `_.conforms` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - */ - function baseConforms(source) { - var props = keys(source); - return function(object) { - return baseConformsTo(object, source, props); - }; - } +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} - /** - * The base implementation of `_.conformsTo` which accepts `props` to check. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - */ - function baseConformsTo(object, source, props) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length], - predicate = source[key], - value = object[key]; +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} - if ((value === undefined && !(key in object)) || !predicate(value)) { - return false; - } - } - return true; - } +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} - /** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; - /** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ - function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee == null ? value : iteratee(value); + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; - } +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); - /** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEachRight = createBaseEach(baseForOwnRight, true); + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; + return index < 0 ? undefined : data[index][1]; +} - while (++index < length) { - var value = array[index], - current = iteratee(value); +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} - if (current != null && (computed === undefined - ? (current === current && !isSymbol(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; - } +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); - /** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ - function baseFill(array, value, start, end) { - var length = array.length; + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; - } +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} - predicate || (predicate = isFlattenable); - result || (result = []); +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} - /** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseForRight = createBaseFor(true); +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} - /** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); - } +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + object[key] = value; + } +} + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; } + } + return -1; +} - /** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ - function baseGet(object, path) { - path = castPath(path, object); +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} - var index = 0, - length = path.length; +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = isKey(path, object) ? [path] : castPath(path); - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; - } + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; - /** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); - } + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; - /** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; +} - /** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; - } +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} - /** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); - } +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value) { + return isArray(value) ? value : stringToPath(value); +} - /** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHasIn(object, key) { - return object != null && key in Object(object); - } +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} - /** - * The base implementation of `_.inRange` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ - function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); - } +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} - /** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ - function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && + (typeof value == 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length); +} - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} - var index = -1, - seen = caches[0]; +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} - outer: - while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} - value = (comparator || value !== 0) ? value : 0; - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function(string) { + string = toString(string); - /** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ - function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; - } + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); - /** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ - function baseInvoke(object, path, args) { - path = castPath(path, object); - object = parent(object, path); - var func = object == null ? object : object[toKey(last(path))]; - return func == null ? undefined : apply(func, object, args); - } +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; - } +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} - /** - * The base implementation of `_.isArrayBuffer` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - */ - function baseIsArrayBuffer(value) { - return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; - } +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; - /** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ - function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag; + if (cache.has(key)) { + return cache.get(key); } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); - } +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = objIsArr ? arrayTag : getTag(object), - othTag = othIsArr ? arrayTag : getTag(other); +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); - } +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} - /** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ - function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; - } +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} - /** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; +/** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ +function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); +} - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; +module.exports = set; - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; - } +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],215:[function(require,module,exports){ +var getNative = require('./_getNative'), + root = require('./_root'); - /** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'); - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } +module.exports = DataView; - /** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ - function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag; - } +},{"./_getNative":277,"./_root":314}],216:[function(require,module,exports){ +var hashClear = require('./_hashClear'), + hashDelete = require('./_hashDelete'), + hashGet = require('./_hashGet'), + hashHas = require('./_hashHas'), + hashSet = require('./_hashSet'); - /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ - function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; - } +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); - } +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; - /** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; - } +module.exports = Hash; - /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; +},{"./_hashClear":285,"./_hashDelete":286,"./_hashGet":287,"./_hashHas":288,"./_hashSet":289}],217:[function(require,module,exports){ +var listCacheClear = require('./_listCacheClear'), + listCacheDelete = require('./_listCacheDelete'), + listCacheGet = require('./_listCacheGet'), + listCacheHas = require('./_listCacheHas'), + listCacheSet = require('./_listCacheSet'); - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; - /** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other; - } + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } +module.exports = ListCache; - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } +},{"./_listCacheClear":296,"./_listCacheDelete":297,"./_listCacheGet":298,"./_listCacheHas":299,"./_listCacheSet":300}],218:[function(require,module,exports){ +var getNative = require('./_getNative'), + root = require('./_root'); - /** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; - } +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); - /** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - stack || (stack = new Stack); - if (isObject(srcValue)) { - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) - : undefined; +module.exports = Map; - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, keysIn); - } +},{"./_getNative":277,"./_root":314}],219:[function(require,module,exports){ +var mapCacheClear = require('./_mapCacheClear'), + mapCacheDelete = require('./_mapCacheDelete'), + mapCacheGet = require('./_mapCacheGet'), + mapCacheHas = require('./_mapCacheHas'), + mapCacheSet = require('./_mapCacheSet'); - /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = safeGet(object, key), - srcValue = safeGet(source, key), - stacked = stack.get(srcValue); +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} - var isCommon = newValue === undefined; +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue); +module.exports = MapCache; - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } - else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } - else { - newValue = []; - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || isFunction(objValue)) { - newValue = initCloneObject(srcValue); - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); - } +},{"./_mapCacheClear":301,"./_mapCacheDelete":302,"./_mapCacheGet":303,"./_mapCacheHas":304,"./_mapCacheSet":305}],220:[function(require,module,exports){ +var getNative = require('./_getNative'), + root = require('./_root'); - /** - * The base implementation of `_.nth` which doesn't coerce arguments. - * - * @private - * @param {Array} array The array to query. - * @param {number} n The index of the element to return. - * @returns {*} Returns the nth element of `array`. - */ - function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined; - } +/* Built-in method references that are verified to be native. */ +var Promise = getNative(root, 'Promise'); - /** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ - function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = arrayMap(iteratees, function(iteratee) { - if (isArray(iteratee)) { - return function(value) { - return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); - } - } - return iteratee; - }); - } else { - iteratees = [identity]; - } +module.exports = Promise; - var index = -1; - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); +},{"./_getNative":277,"./_root":314}],221:[function(require,module,exports){ +var getNative = require('./_getNative'), + root = require('./_root'); - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); +/* Built-in method references that are verified to be native. */ +var Set = getNative(root, 'Set'); - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); - } +module.exports = Set; - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, paths) { - return basePickBy(object, paths, function(value, path) { - return hasIn(object, path); - }); - } +},{"./_getNative":277,"./_root":314}],222:[function(require,module,exports){ +var MapCache = require('./_MapCache'), + setCacheAdd = require('./_setCacheAdd'), + setCacheHas = require('./_setCacheHas'); - /** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ - function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; - while (++index < length) { - var path = paths[index], - value = baseGet(object, path); + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} - if (predicate(value, path)) { - baseSet(result, castPath(path, object), value); - } - } - return result; - } +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; - /** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; - } +module.exports = SetCache; - /** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - */ - function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; +},{"./_MapCache":219,"./_setCacheAdd":315,"./_setCacheHas":316}],223:[function(require,module,exports){ +var ListCache = require('./_ListCache'), + stackClear = require('./_stackClear'), + stackDelete = require('./_stackDelete'), + stackGet = require('./_stackGet'), + stackHas = require('./_stackHas'), + stackSet = require('./_stackSet'); - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; +} - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; - } +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; - /** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; +module.exports = Stack; + +},{"./_ListCache":217,"./_stackClear":318,"./_stackDelete":319,"./_stackGet":320,"./_stackHas":321,"./_stackSet":322}],224:[function(require,module,exports){ +var root = require('./_root'); + +/** Built-in value references. */ +var Symbol = root.Symbol; - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } else { - baseUnset(array, index); - } - } - } - return array; - } +module.exports = Symbol; - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } +},{"./_root":314}],225:[function(require,module,exports){ +var root = require('./_root'); - /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); +/** Built-in value references. */ +var Uint8Array = root.Uint8Array; - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } +module.exports = Uint8Array; - /** - * The base implementation of `_.repeat` which doesn't coerce arguments. - * - * @private - * @param {string} string The string to repeat. - * @param {number} n The number of times to repeat the string. - * @returns {string} Returns the repeated string. - */ - function baseRepeat(string, n) { - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); +},{"./_root":314}],226:[function(require,module,exports){ +var getNative = require('./_getNative'), + root = require('./_root'); - return result; - } +/* Built-in method references that are verified to be native. */ +var WeakMap = getNative(root, 'WeakMap'); - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } +module.exports = WeakMap; - /** - * The base implementation of `_.sample`. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - */ - function baseSample(collection) { - return arraySample(values(collection)); - } +},{"./_getNative":277,"./_root":314}],227:[function(require,module,exports){ +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; - /** - * The base implementation of `_.sampleSize` without param guards. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function baseSampleSize(collection, n) { - var array = values(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; } + } + return result; +} - /** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = castPath(path, object); +module.exports = arrayFilter; - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; +},{}],228:[function(require,module,exports){ +var baseTimes = require('./_baseTimes'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isBuffer = require('./isBuffer'), + isIndex = require('./_isIndex'), + isTypedArray = require('./isTypedArray'); - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; +/** Used for built-in method references. */ +var objectProto = Object.prototype; - if (key === '__proto__' || key === 'constructor' || key === 'prototype') { - return object; - } +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); } + } + return result; +} - /** - * The base implementation of `setData` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; +module.exports = arrayLikeKeys; - /** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); - }; +},{"./_baseTimes":258,"./_isIndex":290,"./isArguments":337,"./isArray":338,"./isBuffer":340,"./isTypedArray":346}],229:[function(require,module,exports){ +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); - /** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function baseShuffle(collection) { - return shuffleSelf(values(collection)); - } + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; +module.exports = arrayMap; - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; +},{}],230:[function(require,module,exports){ +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; +module.exports = arrayPush; - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } +},{}],231:[function(require,module,exports){ +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; - /** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array == null ? low : array.length; + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; +module.exports = arrayReduce; - if (computed !== null && !isSymbol(computed) && - (retHighest ? (computed <= value) : (computed < value))) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); +},{}],232:[function(require,module,exports){ +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; } + } + return false; +} - /** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndexBy(array, value, iteratee, retHighest) { - var low = 0, - high = array == null ? 0 : array.length; - if (high === 0) { - return 0; - } +module.exports = arraySome; - value = iteratee(value); - var valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; +},{}],233:[function(require,module,exports){ +/** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function asciiToArray(string) { + return string.split(''); +} - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); +module.exports = asciiToArray; - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); +},{}],234:[function(require,module,exports){ +/** Used to match words composed of alphanumeric characters. */ +var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + +/** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ +function asciiWords(string) { + return string.match(reAsciiWord) || []; +} + +module.exports = asciiWords; + +},{}],235:[function(require,module,exports){ +var eq = require('./eq'); + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; } + } + return -1; +} - /** - * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; +module.exports = assocIndexOf; - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; +},{"./eq":332}],236:[function(require,module,exports){ +var defineProperty = require('./_defineProperty'); - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; - } +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} - /** - * The base implementation of `_.toNumber` which doesn't ensure correct - * conversions of binary, hexadecimal, or octal string values. - * - * @private - * @param {*} value The value to process. - * @returns {number} Returns the number. - */ - function baseToNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; - } +module.exports = baseAssignValue; - /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } +},{"./_defineProperty":269}],237:[function(require,module,exports){ +var createBaseFor = require('./_createBaseFor'); - /** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; +module.exports = baseFor; - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } +},{"./_createBaseFor":265}],238:[function(require,module,exports){ +var baseFor = require('./_baseFor'), + keys = require('./keys'); - /** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The property path to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ - function baseUnset(object, path) { - path = castPath(path, object); - object = parent(object, path); - return object == null || delete object[toKey(last(path))]; - } +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); +} - /** - * The base implementation of `_.update`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to update. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); - } +module.exports = baseForOwn; - /** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; +},{"./_baseFor":237,"./keys":347}],239:[function(require,module,exports){ +var castPath = require('./_castPath'), + toKey = require('./_toKey'); - while ((fromRight ? index-- : ++index < length) && - predicate(array[index], index, array)) {} +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = castPath(path, object); - return isDrop - ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); - } + var index = 0, + length = path.length; - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} - /** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ - function baseXor(arrays, iteratee, comparator) { - var length = arrays.length; - if (length < 2) { - return length ? baseUniq(arrays[0]) : []; - } - var index = -1, - result = Array(length); +module.exports = baseGet; - while (++index < length) { - var array = arrays[index], - othIndex = -1; +},{"./_castPath":262,"./_toKey":325}],240:[function(require,module,exports){ +var arrayPush = require('./_arrayPush'), + isArray = require('./isArray'); - while (++othIndex < length) { - if (othIndex != index) { - result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); - } - } - } - return baseUniq(baseFlatten(result, 1), iteratee, comparator); - } +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +} - /** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ - function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; +module.exports = baseGetAllKeys; - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; - } +},{"./_arrayPush":230,"./isArray":338}],241:[function(require,module,exports){ +var Symbol = require('./_Symbol'), + getRawTag = require('./_getRawTag'), + objectToString = require('./_objectToString'); - /** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; - /** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ - function castFunction(value) { - return typeof value == 'function' ? value : identity; - } +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - /** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ - function castPath(value, object) { - if (isArray(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString(value)); - } +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} - /** - * A `baseRest` alias which can be replaced with `identity` by module - * replacement plugins. - * - * @private - * @type {Function} - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - var castRest = baseRest; +module.exports = baseGetTag; - /** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); - } +},{"./_Symbol":224,"./_getRawTag":278,"./_objectToString":312}],242:[function(require,module,exports){ +/** Used for built-in method references. */ +var objectProto = Object.prototype; - /** - * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). - * - * @private - * @param {number|Object} id The timer id or timeout object of the timer to clear. - */ - var clearTimeout = ctxClearTimeout || function(id) { - return root.clearTimeout(id); - }; +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - /** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); +} - buffer.copy(result); - return result; - } +module.exports = baseHas; - /** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; - } +},{}],243:[function(require,module,exports){ +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} - /** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } +module.exports = baseHasIn; + +},{}],244:[function(require,module,exports){ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} - /** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ - function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; - } +module.exports = baseIsArguments; - /** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ - function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; - } +},{"./_baseGetTag":241,"./isObjectLike":344}],245:[function(require,module,exports){ +var baseIsEqualDeep = require('./_baseIsEqualDeep'), + isObjectLike = require('./isObjectLike'); - /** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); +module.exports = baseIsEqual; - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other); +},{"./_baseIsEqualDeep":246,"./isObjectLike":344}],246:[function(require,module,exports){ +var Stack = require('./_Stack'), + equalArrays = require('./_equalArrays'), + equalByTag = require('./_equalByTag'), + equalObjects = require('./_equalObjects'), + getTag = require('./_getTag'), + isArray = require('./isArray'), + isBuffer = require('./isBuffer'), + isTypedArray = require('./isTypedArray'); - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; - } +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; - /** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; - } +/** Used for built-in method references. */ +var objectProto = Object.prototype; - /** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; - } +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); - /** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); +module.exports = baseIsEqualDeep; - var index = -1, - length = props.length; +},{"./_Stack":223,"./_equalArrays":270,"./_equalByTag":271,"./_equalObjects":272,"./_getTag":280,"./isArray":338,"./isBuffer":340,"./isTypedArray":346}],247:[function(require,module,exports){ +var Stack = require('./_Stack'), + baseIsEqual = require('./_baseIsEqual'); - while (++index < length) { - var key = props[index]; +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; - /** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } } + } + return true; +} - /** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn(source), object); - } +module.exports = baseIsMatch; - /** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ - function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; +},{"./_Stack":223,"./_baseIsEqual":245}],248:[function(require,module,exports){ +var isFunction = require('./isFunction'), + isMasked = require('./_isMasked'), + isObject = require('./isObject'), + toSource = require('./_toSource'); - return func(collection, setter, getIteratee(iteratee, 2), accumulator); - }; - } +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; +module.exports = baseIsNative; - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } +},{"./_isMasked":293,"./_toSource":326,"./isFunction":341,"./isObject":343}],249:[function(require,module,exports){ +var baseGetTag = require('./_baseGetTag'), + isLength = require('./isLength'), + isObjectLike = require('./isObjectLike'); - /** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; - /** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); +module.exports = baseIsTypedArray; - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); +},{"./_baseGetTag":241,"./isLength":342,"./isObjectLike":344}],250:[function(require,module,exports){ +var baseMatches = require('./_baseMatches'), + baseMatchesProperty = require('./_baseMatchesProperty'), + identity = require('./identity'), + isArray = require('./isArray'), + property = require('./property'); - return chr[methodName]() + trailing; - }; - } +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); +} - /** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ - function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; - } +module.exports = baseIteratee; - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); +},{"./_baseMatches":252,"./_baseMatchesProperty":253,"./identity":336,"./isArray":338,"./property":352}],251:[function(require,module,exports){ +var isPrototype = require('./_isPrototype'), + nativeKeys = require('./_nativeKeys'); - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); } + } + return result; +} - /** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); +module.exports = baseKeys; - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); +},{"./_isPrototype":294,"./_nativeKeys":310}],252:[function(require,module,exports){ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'), + matchesStrictComparable = require('./_matchesStrictComparable'); - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; +} - length -= holders.length; - if (length < arity) { - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; - } +module.exports = baseMatches; - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = getIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; - } +},{"./_baseIsMatch":247,"./_getMatchData":276,"./_matchesStrictComparable":307}],253:[function(require,module,exports){ +var baseIsEqual = require('./_baseIsEqual'), + get = require('./get'), + hasIn = require('./hasIn'), + isKey = require('./_isKey'), + isStrictComparable = require('./_isStrictComparable'), + matchesStrictComparable = require('./_matchesStrictComparable'), + toKey = require('./_toKey'); - /** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ - function createFlow(fromRight) { - return flatRest(function(funcs) { - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; +} - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; +module.exports = baseMatchesProperty; - if (data && isLaziable(data[0]) && - data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && - !data[4].length && data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) - ? wrapper[funcName]() - : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; +},{"./_baseIsEqual":245,"./_isKey":291,"./_isStrictComparable":295,"./_matchesStrictComparable":307,"./_toKey":325,"./get":333,"./hasIn":335}],254:[function(require,module,exports){ +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} - if (wrapper && args.length == 1 && isArray(value)) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; +module.exports = baseProperty; - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }); - } +},{}],255:[function(require,module,exports){ +var baseGet = require('./_baseGet'); - /** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & WRAP_ARY_FLAG, - isBind = bitmask & WRAP_BIND_FLAG, - isBindKey = bitmask & WRAP_BIND_KEY_FLAG, - isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), - isFlip = bitmask & WRAP_FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtor(func); +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; +} - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; +module.exports = basePropertyDeep; - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, thisArg, - args, newHolders, argPos, ary, arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; +},{"./_baseGet":239}],256:[function(require,module,exports){ +/** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; +} - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } +module.exports = basePropertyOf; - /** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ - function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; - } +},{}],257:[function(require,module,exports){ +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; - /** - * Creates a function that performs a mathematical operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @param {number} [defaultValue] The value used for `undefined` arguments. - * @returns {Function} Returns the new mathematical operation function. - */ - function createMathOperation(operator, defaultValue) { - return function(value, other) { - var result; - if (value === undefined && other === undefined) { - return defaultValue; - } - if (value !== undefined) { - result = value; - } - if (other !== undefined) { - if (result === undefined) { - return other; - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; - } + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; - /** - * Creates a function like `_.over`. - * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new over function. - */ - function createOver(arrayFunc) { - return flatRest(function(iteratees) { - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - return baseRest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); - } + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} - /** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. - * - * @private - * @param {number} length The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. - */ - function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars); +module.exports = baseSlice; - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); - return hasUnicode(chars) - ? castSlice(stringToArray(result), 0, length).join('') - : result.slice(0, length); - } +},{}],258:[function(require,module,exports){ +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +module.exports = baseTimes; - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } +},{}],259:[function(require,module,exports){ +var Symbol = require('./_Symbol'), + arrayMap = require('./_arrayMap'), + isArray = require('./isArray'), + isSymbol = require('./isSymbol'); - /** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; - /** - * Creates a function that performs a relational operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new relational operation function. - */ - function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; - } +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; - /** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & WRAP_CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} - bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); +module.exports = baseToString; - if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { - bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; +},{"./_Symbol":224,"./_arrayMap":229,"./isArray":338,"./isSymbol":345}],260:[function(require,module,exports){ +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return setWrapToString(result, func, bitmask); - } +module.exports = baseUnary; - /** - * Creates a function like `_.round`. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ - function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); - if (precision && nativeIsFinite(number)) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); +},{}],261:[function(require,module,exports){ +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; - } +module.exports = cacheHas; - /** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ - var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); - }; +},{}],262:[function(require,module,exports){ +var isArray = require('./isArray'), + isKey = require('./_isKey'), + stringToPath = require('./_stringToPath'), + toString = require('./toString'); - /** - * Creates a `_.toPairs` or `_.toPairsIn` function. - * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. - */ - function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); - } - if (tag == setTag) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; - } +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); +} - /** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; +module.exports = castPath; - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; +},{"./_isKey":291,"./_stringToPath":324,"./isArray":338,"./toString":356}],263:[function(require,module,exports){ +var baseSlice = require('./_baseSlice'); - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); +/** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ +function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); +} - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; +module.exports = castSlice; - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] === undefined - ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); +},{"./_baseSlice":257}],264:[function(require,module,exports){ +var root = require('./_root'); - if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { - bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == WRAP_BIND_FLAG) { - var result = createBind(func, bitmask, thisArg); - } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { - result = createCurry(func, bitmask, arity); - } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { - result = createPartial(func, bitmask, thisArg, partials); - } else { - result = createHybrid.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result, newData), func, bitmask); - } +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; - /** - * Used by `_.defaults` to customize its `_.assignIn` use to assign properties - * of source objects to the destination object for all destination properties - * that resolve to `undefined`. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ - function customDefaultsAssignIn(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; - } +module.exports = coreJsData; - /** - * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source - * objects into destination objects that are passed thru. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. - */ - function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); - stack['delete'](srcValue); +},{"./_root":314}],265:[function(require,module,exports){ +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; } - return objValue; } + return object; + }; +} - /** - * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain - * objects. - * - * @private - * @param {*} value The value to inspect. - * @param {string} key The key of the property to inspect. - * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. - */ - function customOmitClone(value) { - return isPlainObject(value) ? undefined : value; - } +module.exports = createBaseFor; - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; +},{}],266:[function(require,module,exports){ +var castSlice = require('./_castSlice'), + hasUnicode = require('./_hasUnicode'), + stringToArray = require('./_stringToArray'), + toString = require('./toString'); - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; +/** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ +function createCaseFirst(methodName) { + return function(string) { + string = toString(string); - stack.set(array, other); - stack.set(other, array); + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; - } + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; + return chr[methodName]() + trailing; + }; +} - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; +module.exports = createCaseFirst; - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); +},{"./_castSlice":263,"./_hasUnicode":283,"./_stringToArray":323,"./toString":356}],267:[function(require,module,exports){ +var arrayReduce = require('./_arrayReduce'), + deburr = require('./deburr'), + words = require('./words'); - case errorTag: - return object.name == other.name && object.message == other.message; +/** Used to compose unicode capture groups. */ +var rsApos = "['\u2019]"; - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); +/** Used to match apostrophes. */ +var reApos = RegExp(rsApos, 'g'); - case mapTag: - var convert = mapToArray; +/** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ +function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; +} - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG; - convert || (convert = setToArray); +module.exports = createCompounder; - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= COMPARE_UNORDERED_FLAG; +},{"./_arrayReduce":231,"./deburr":331,"./words":358}],268:[function(require,module,exports){ +var basePropertyOf = require('./_basePropertyOf'); - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; +/** Used to map Latin Unicode letters to basic Latin letters. */ +var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' +}; - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; - } +/** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ +var deburrLetter = basePropertyOf(deburredLetters); - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - objProps = getAllKeys(object), - objLength = objProps.length, - othProps = getAllKeys(other), - othLength = othProps.length; +module.exports = deburrLetter; - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } +},{"./_basePropertyOf":256}],269:[function(require,module,exports){ +var getNative = require('./_getNative'); + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +module.exports = defineProperty; + +},{"./_getNative":277}],270:[function(require,module,exports){ +var SetCache = require('./_SetCache'), + arraySome = require('./_arraySome'), + cacheHas = require('./_cacheHas'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; } - var result = true; - stack.set(object, other); - stack.set(other, object); + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; +module.exports = equalArrays; - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; +},{"./_SetCache":222,"./_arraySome":232,"./_cacheHas":261}],271:[function(require,module,exports){ +var Symbol = require('./_Symbol'), + Uint8Array = require('./_Uint8Array'), + eq = require('./eq'), + equalArrays = require('./_equalArrays'), + mapToArray = require('./_mapToArray'), + setToArray = require('./_setToArray'); - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; } - stack['delete'](object); - stack['delete'](other); - return result; - } + object = object.buffer; + other = other.buffer; - /** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); - } + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; - /** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); - } + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); - /** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); - } + case errorTag: + return object.name == other.name && object.message == other.message; - /** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); - /** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ - function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; + case mapTag: + var convert = mapToArray; - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); return result; - } - /** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ - function getHolder(func) { - var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; - return object.placeholder; - } + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} - /** - * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, - * this function returns the custom method, otherwise it returns `baseIteratee`. - * If arguments are provided, the chosen function is invoked with them and - * its result is returned. - * - * @private - * @param {*} [value] The value to convert to an iteratee. - * @param {number} [arity] The arity of the created iteratee. - * @returns {Function} Returns the chosen function or its result. - */ - function getIteratee() { - var result = lodash.iteratee || iteratee; - result = result === iteratee ? baseIteratee : result; - return arguments.length ? result(arguments[0], arguments[1]) : result; - } +module.exports = equalByTag; - /** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ - function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; - } +},{"./_Symbol":224,"./_Uint8Array":225,"./_equalArrays":270,"./_mapToArray":306,"./_setToArray":317,"./eq":332}],272:[function(require,module,exports){ +var getAllKeys = require('./_getAllKeys'); - /** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ - function getMatchData(object) { - var result = keys(object), - length = result.length; +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; - while (length--) { - var key = result[length], - value = object[key]; +/** Used for built-in method references. */ +var objectProto = Object.prototype; - result[length] = [key, value, isStrictComparable(value)]; - } - return result; - } +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); - /** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ - function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; } + } + stack['delete'](object); + stack['delete'](other); + return result; +} - /** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbols = !nativeGetSymbols ? stubArray : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return arrayFilter(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); - }; +module.exports = equalObjects; - /** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; - }; +},{"./_getAllKeys":274}],273:[function(require,module,exports){ +(function (global){(function (){ +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - /** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - var getTag = baseGetTag; +module.exports = freeGlobal; - // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. - if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = baseGetTag(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : ''; +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],274:[function(require,module,exports){ +var baseGetAllKeys = require('./_baseGetAllKeys'), + getSymbols = require('./_getSymbols'), + keys = require('./keys'); - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; - } +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); +} - /** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length; +module.exports = getAllKeys; - while (++index < length) { - var data = transforms[index], - size = data.size; +},{"./_baseGetAllKeys":240,"./_getSymbols":279,"./keys":347}],275:[function(require,module,exports){ +var isKeyable = require('./_isKeyable'); - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; - } +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} - /** - * Extracts wrapper details from the `source` body comment. - * - * @private - * @param {string} source The source to inspect. - * @returns {Array} Returns the wrapper details. - */ - function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; - } +module.exports = getMapData; - /** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ - function hasPath(object, path, hasFunc) { - path = castPath(path, object); +},{"./_isKeyable":292}],276:[function(require,module,exports){ +var isStrictComparable = require('./_isStrictComparable'), + keys = require('./keys'); - var index = -1, - length = path.length, - result = false; +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = keys(object), + length = result.length; - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); - } + while (length--) { + var key = result[length], + value = object[key]; - /** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ - function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); + result[length] = [key, value, isStrictComparable(value)]; + } + return result; +} - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } +module.exports = getMatchData; - /** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; - } +},{"./_isStrictComparable":295,"./keys":347}],277:[function(require,module,exports){ +var baseIsNative = require('./_baseIsNative'), + getValue = require('./_getValue'); - /** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} - case boolTag: - case dateTag: - return new Ctor(+object); +module.exports = getNative; - case dataViewTag: - return cloneDataView(object, isDeep); +},{"./_baseIsNative":248,"./_getValue":281}],278:[function(require,module,exports){ +var Symbol = require('./_Symbol'); - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return cloneTypedArray(object, isDeep); +/** Used for built-in method references. */ +var objectProto = Object.prototype; - case mapTag: - return new Ctor; +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - case numberTag: - case stringTag: - return new Ctor(object); +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; - case regexpTag: - return cloneRegExp(object); +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - case setTag: - return new Ctor; +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; - case symbolTag: - return cloneSymbol(object); - } - } + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} - /** - * Inserts wrapper `details` in a comment at the top of the `source` body. - * - * @private - * @param {string} source The source to modify. - * @returns {Array} details The details to insert. - * @returns {string} Returns the modified source. - */ - function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; - details = details.join(length > 2 ? ', ' : ' '); - return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; } + } + return result; +} - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return isArray(value) || isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); - } +module.exports = getRawTag; - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; +},{"./_Symbol":224}],279:[function(require,module,exports){ +var arrayFilter = require('./_arrayFilter'), + stubArray = require('./stubArray'); - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); - } +/** Used for built-in method references. */ +var objectProto = Object.prototype; - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; - } +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; - /** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ - function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); - } +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; - /** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ - function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); - } +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; - /** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ - function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; +module.exports = getSymbols; - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } +},{"./_arrayFilter":227,"./stubArray":354}],280:[function(require,module,exports){ +var DataView = require('./_DataView'), + Map = require('./_Map'), + Promise = require('./_Promise'), + Set = require('./_Set'), + WeakMap = require('./_WeakMap'), + baseGetTag = require('./_baseGetTag'), + toSource = require('./_toSource'); - /** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ - function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); - } +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; - /** - * Checks if `func` is capable of being masked. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `func` is maskable, else `false`. - */ - var isMaskable = coreJsData ? isFunction : stubFalse; +var dataViewTag = '[object DataView]'; - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); - return value === proto; - } +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; - /** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ - function isStrictComparable(value) { - return value === value && !isObject(value); - } +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; - /** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } } + return result; + }; +} - /** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ - function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); +module.exports = getTag; - var cache = result.cache; - return result; - } +},{"./_DataView":215,"./_Map":218,"./_Promise":220,"./_Set":221,"./_WeakMap":226,"./_baseGetTag":241,"./_toSource":326}],281:[function(require,module,exports){ +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} - /** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ - function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); +module.exports = getValue; - var isCombo = - ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || - ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || - ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); +},{}],282:[function(require,module,exports){ +var castPath = require('./_castPath'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isIndex = require('./_isIndex'), + isLength = require('./isLength'), + toKey = require('./_toKey'); - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & WRAP_BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } - // Use source `ary` if it's smaller. - if (srcBitmask & WRAP_ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = castPath(path, object); - return data; - } + var index = -1, + length = path.length, + result = false; - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); +} - /** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ - function objectToString(value) { - return nativeObjectToString.call(value); - } +module.exports = hasPath; - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); +},{"./_castPath":262,"./_isIndex":290,"./_toKey":325,"./isArguments":337,"./isArray":338,"./isLength":342}],283:[function(require,module,exports){ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; - } +module.exports = hasUnicode; - /** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ - function parent(object, path) { - return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); - } +},{}],284:[function(require,module,exports){ +/** Used to detect strings that need a more robust regexp to match words. */ +var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - /** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ - function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); +/** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ +function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); +} - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; - } +module.exports = hasUnicodeWord; - /** - * Gets the value at `key`, unless `key` is "__proto__" or "constructor". - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function safeGet(object, key) { - if (key === 'constructor' && typeof object[key] === 'function') { - return; - } +},{}],285:[function(require,module,exports){ +var nativeCreate = require('./_nativeCreate'); - if (key == '__proto__') { - return; - } +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} - return object[key]; - } +module.exports = hashClear; - /** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var setData = shortOut(baseSetData); +},{"./_nativeCreate":309}],286:[function(require,module,exports){ +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} - /** - * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @returns {number|Object} Returns the timer id or timeout object. - */ - var setTimeout = ctxSetTimeout || function(func, wait) { - return root.setTimeout(func, wait); - }; +module.exports = hashDelete; - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = shortOut(baseSetToString); +},{}],287:[function(require,module,exports){ +var nativeCreate = require('./_nativeCreate'); - /** - * Sets the `toString` method of `wrapper` to mimic the source of `reference` - * with wrapper details in a comment at the top of the source body. - * - * @private - * @param {Function} wrapper The function to modify. - * @param {Function} reference The reference function. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Function} Returns `wrapper`. - */ - function setWrapToString(wrapper, reference, bitmask) { - var source = (reference + ''); - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); - } +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; - /** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ - function shortOut(func) { - var count = 0, - lastCalled = 0; +/** Used for built-in method references. */ +var objectProto = Object.prototype; - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; - } +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} - /** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ - function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; +module.exports = hashGet; - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; +},{"./_nativeCreate":309}],288:[function(require,module,exports){ +var nativeCreate = require('./_nativeCreate'); - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; - } +/** Used for built-in method references. */ +var objectProto = Object.prototype; - /** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ - var stringToPath = memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; - }); +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - /** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ - function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +} - /** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ - function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; - } +module.exports = hashHas; - /** - * Updates wrapper `details` based on `bitmask` flags. - * - * @private - * @returns {Array} details The details to modify. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Array} Returns `details`. - */ - function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value = '_.' + pair[0]; - if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); - } +},{"./_nativeCreate":309}],289:[function(require,module,exports){ +var nativeCreate = require('./_nativeCreate'); - /** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; - } +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; - /*------------------------------------------------------------------------*/ +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} - /** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ - function chunk(array, size, guard) { - if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { - size = 1; - } else { - size = nativeMax(toInteger(size), 0); - } - var length = array == null ? 0 : array.length; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); +module.exports = hashSet; - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; - } +},{"./_nativeCreate":309}],290:[function(require,module,exports){ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; - } +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); - } +module.exports = isIndex; - /** - * Creates an array of `array` values not included in the other given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * **Note:** Unlike `_.pullAll`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ - var difference = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) - : []; - }); +},{}],291:[function(require,module,exports){ +var isArray = require('./isArray'), + isSymbol = require('./isSymbol'); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; - /** - * This method is like `_.difference` except that it accepts `iteratee` which - * is invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * **Note:** Unlike `_.pullAllBy`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2] - * - * // The `_.property` iteratee shorthand. - * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var differenceBy = baseRest(function(array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) - : []; - }); +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} - /** - * This method is like `_.difference` except that it accepts `comparator` - * which is invoked to compare elements of `array` to `values`. The order and - * references of result values are determined by the first array. The comparator - * is invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.pullAllWith`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * - * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); - * // => [{ 'x': 2, 'y': 1 }] - */ - var differenceWith = baseRest(function(array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) - : []; - }); +module.exports = isKey; - /** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function drop(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); - } +},{"./isArray":338,"./isSymbol":345}],292:[function(require,module,exports){ +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} - /** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function dropRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); - } +module.exports = isKeyable; - /** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.dropRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney'] - * - * // The `_.matches` iteratee shorthand. - * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropRightWhile(users, ['active', false]); - * // => objects for ['barney'] - * - * // The `_.property` iteratee shorthand. - * _.dropRightWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true, true) - : []; - } +},{}],293:[function(require,module,exports){ +var coreJsData = require('./_coreJsData'); - /** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true) - : []; - } +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); - /** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ - function fill(array, value, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); - } +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, getIteratee(predicate, 3), index); - } +module.exports = isMasked; - /** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ - function findLastIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex(array, getIteratee(predicate, 3), index, true); - } +},{"./_coreJsData":264}],294:[function(require,module,exports){ +/** Used for built-in method references. */ +var objectProto = Object.prototype; - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, 1) : []; - } +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, INFINITY) : []; - } + return value === proto; +} - /** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ - function flattenDepth(array, depth) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); - } +module.exports = isPrototype; - /** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['a', 1], ['b', 2]]); - * // => { 'a': 1, 'b': 2 } - */ - function fromPairs(pairs) { - var index = -1, - length = pairs == null ? 0 : pairs.length, - result = {}; +},{}],295:[function(require,module,exports){ +var isObject = require('./isObject'); + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; - } +module.exports = isStrictComparable; - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return (array && array.length) ? array[0] : undefined; - } +},{"./isObject":343}],296:[function(require,module,exports){ +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); - } +module.exports = listCacheClear; - /** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ - function initial(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 0, -1) : []; - } +},{}],297:[function(require,module,exports){ +var assocIndexOf = require('./_assocIndexOf'); - /** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ - var intersection = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped) - : []; - }); +/** Used for built-in method references. */ +var arrayProto = Array.prototype; - /** - * This method is like `_.intersection` except that it accepts `iteratee` - * which is invoked for each element of each `arrays` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [2.1] - * - * // The `_.property` iteratee shorthand. - * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }] - */ - var intersectionBy = baseRest(function(arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); +/** Built-in value references. */ +var splice = arrayProto.splice; - if (iteratee === last(mapped)) { - iteratee = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, getIteratee(iteratee, 2)) - : []; - }); +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); - /** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. The order and references - * of result values are determined by the first array. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ - var intersectionWith = baseRest(function(arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} - comparator = typeof comparator == 'function' ? comparator : undefined; - if (comparator) { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, undefined, comparator) - : []; - }); +module.exports = listCacheDelete; - /** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ - function join(array, separator) { - return array == null ? '' : nativeJoin.call(array, separator); - } +},{"./_assocIndexOf":235}],298:[function(require,module,exports){ +var assocIndexOf = require('./_assocIndexOf'); - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; - } +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); - /** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ - function lastIndexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); - } - return value === value - ? strictLastIndexOf(array, value, index) - : baseFindIndex(array, baseIsNaN, index, true); - } + return index < 0 ? undefined : data[index][1]; +} - /** - * Gets the element at index `n` of `array`. If `n` is negative, the nth - * element from the end is returned. - * - * @static - * @memberOf _ - * @since 4.11.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=0] The index of the element to return. - * @returns {*} Returns the nth element of `array`. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * - * _.nth(array, 1); - * // => 'b' - * - * _.nth(array, -2); - * // => 'c'; - */ - function nth(array, n) { - return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; - } +module.exports = listCacheGet; - /** - * Removes all given values from `array` using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` - * to remove elements from an array by predicate. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...*} [values] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pull(array, 'a', 'c'); - * console.log(array); - * // => ['b', 'b'] - */ - var pull = baseRest(pullAll); +},{"./_assocIndexOf":235}],299:[function(require,module,exports){ +var assocIndexOf = require('./_assocIndexOf'); - /** - * This method is like `_.pull` except that it accepts an array of values to remove. - * - * **Note:** Unlike `_.difference`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pullAll(array, ['a', 'c']); - * console.log(array); - * // => ['b', 'b'] - */ - function pullAll(array, values) { - return (array && array.length && values && values.length) - ? basePullAll(array, values) - : array; - } +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} - /** - * This method is like `_.pullAll` except that it accepts `iteratee` which is - * invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The iteratee is invoked with one argument: (value). - * - * **Note:** Unlike `_.differenceBy`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; - * - * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); - * console.log(array); - * // => [{ 'x': 2 }] - */ - function pullAllBy(array, values, iteratee) { - return (array && array.length && values && values.length) - ? basePullAll(array, values, getIteratee(iteratee, 2)) - : array; - } +module.exports = listCacheHas; - /** - * This method is like `_.pullAll` except that it accepts `comparator` which - * is invoked to compare elements of `array` to `values`. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.differenceWith`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; - * - * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); - * console.log(array); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] - */ - function pullAllWith(array, values, comparator) { - return (array && array.length && values && values.length) - ? basePullAll(array, values, undefined, comparator) - : array; - } +},{"./_assocIndexOf":235}],300:[function(require,module,exports){ +var assocIndexOf = require('./_assocIndexOf'); - /** - * Removes elements from `array` corresponding to `indexes` and returns an - * array of removed elements. - * - * **Note:** Unlike `_.at`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...(number|number[])} [indexes] The indexes of elements to remove. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * var pulled = _.pullAt(array, [1, 3]); - * - * console.log(array); - * // => ['a', 'c'] - * - * console.log(pulled); - * // => ['b', 'd'] - */ - var pullAt = flatRest(function(array, indexes) { - var length = array == null ? 0 : array.length, - result = baseAt(array, indexes); +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); - basePullAt(array, arrayMap(indexes, function(index) { - return isIndex(index, length) ? +index : index; - }).sort(compareAscending)); + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} - return result; - }); +module.exports = listCacheSet; + +},{"./_assocIndexOf":235}],301:[function(require,module,exports){ +var Hash = require('./_Hash'), + ListCache = require('./_ListCache'), + Map = require('./_Map'); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} - /** - * Removes all elements from `array` that `predicate` returns truthy for - * and returns an array of the removed elements. The predicate is invoked - * with three arguments: (value, index, array). - * - * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` - * to pull elements from an array by value. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4]; - * var evens = _.remove(array, function(n) { - * return n % 2 == 0; - * }); - * - * console.log(array); - * // => [1, 3] - * - * console.log(evens); - * // => [2, 4] - */ - function remove(array, predicate) { - var result = []; - if (!(array && array.length)) { - return result; - } - var index = -1, - indexes = [], - length = array.length; +module.exports = mapCacheClear; - predicate = getIteratee(predicate, 3); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result; - } +},{"./_Hash":216,"./_ListCache":217,"./_Map":218}],302:[function(require,module,exports){ +var getMapData = require('./_getMapData'); - /** - * Reverses `array` so that the first element becomes the last, the second - * element becomes the second to last, and so on. - * - * **Note:** This method mutates `array` and is based on - * [`Array#reverse`](https://mdn.io/Array/reverse). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.reverse(array); - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function reverse(array) { - return array == null ? array : nativeReverse.call(array); - } +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } - else { - start = start == null ? 0 : toInteger(start); - end = end === undefined ? length : toInteger(end); - } - return baseSlice(array, start, end); - } +module.exports = mapCacheDelete; - /** - * Uses a binary search to determine the lowest index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedIndex([30, 50], 40); - * // => 1 - */ - function sortedIndex(array, value) { - return baseSortedIndex(array, value); - } +},{"./_getMapData":275}],303:[function(require,module,exports){ +var getMapData = require('./_getMapData'); - /** - * This method is like `_.sortedIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); - * // => 0 - */ - function sortedIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); - } +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} - /** - * This method is like `_.indexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedIndexOf([4, 5, 5, 5, 6], 5); - * // => 1 - */ - function sortedIndexOf(array, value) { - var length = array == null ? 0 : array.length; - if (length) { - var index = baseSortedIndex(array, value); - if (index < length && eq(array[index], value)) { - return index; - } - } - return -1; - } +module.exports = mapCacheGet; - /** - * This method is like `_.sortedIndex` except that it returns the highest - * index at which `value` should be inserted into `array` in order to - * maintain its sort order. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedLastIndex([4, 5, 5, 5, 6], 5); - * // => 4 - */ - function sortedLastIndex(array, value) { - return baseSortedIndex(array, value, true); - } +},{"./_getMapData":275}],304:[function(require,module,exports){ +var getMapData = require('./_getMapData'); - /** - * This method is like `_.sortedLastIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 1 - * - * // The `_.property` iteratee shorthand. - * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); - * // => 1 - */ - function sortedLastIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); - } +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} - /** - * This method is like `_.lastIndexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); - * // => 3 - */ - function sortedLastIndexOf(array, value) { - var length = array == null ? 0 : array.length; - if (length) { - var index = baseSortedIndex(array, value, true) - 1; - if (eq(array[index], value)) { - return index; - } - } - return -1; - } +module.exports = mapCacheHas; - /** - * This method is like `_.uniq` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniq([1, 1, 2]); - * // => [1, 2] - */ - function sortedUniq(array) { - return (array && array.length) - ? baseSortedUniq(array) - : []; - } +},{"./_getMapData":275}],305:[function(require,module,exports){ +var getMapData = require('./_getMapData'); - /** - * This method is like `_.uniqBy` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); - * // => [1.1, 2.3] - */ - function sortedUniqBy(array, iteratee) { - return (array && array.length) - ? baseSortedUniq(array, getIteratee(iteratee, 2)) - : []; - } +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; - /** - * Gets all but the first element of `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.tail([1, 2, 3]); - * // => [2, 3] - */ - function tail(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 1, length) : []; - } + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} - /** - * Creates a slice of `array` with `n` elements taken from the beginning. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.take([1, 2, 3]); - * // => [1] - * - * _.take([1, 2, 3], 2); - * // => [1, 2] - * - * _.take([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.take([1, 2, 3], 0); - * // => [] - */ - function take(array, n, guard) { - if (!(array && array.length)) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, 0, n < 0 ? 0 : n); - } +module.exports = mapCacheSet; - /** - * Creates a slice of `array` with `n` elements taken from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.takeRight([1, 2, 3]); - * // => [3] - * - * _.takeRight([1, 2, 3], 2); - * // => [2, 3] - * - * _.takeRight([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.takeRight([1, 2, 3], 0); - * // => [] - */ - function takeRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, n < 0 ? 0 : n, length); - } +},{"./_getMapData":275}],306:[function(require,module,exports){ +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); - /** - * Creates a slice of `array` with elements taken from the end. Elements are - * taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.takeRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeRightWhile(users, ['active', false]); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.takeRightWhile(users, 'active'); - * // => [] - */ - function takeRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), false, true) - : []; - } + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} - /** - * Creates a slice of `array` with elements taken from the beginning. Elements - * are taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.takeWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matches` iteratee shorthand. - * _.takeWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeWhile(users, ['active', false]); - * // => objects for ['barney', 'fred'] - * - * // The `_.property` iteratee shorthand. - * _.takeWhile(users, 'active'); - * // => [] - */ - function takeWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3)) - : []; +module.exports = mapToArray; + +},{}],307:[function(require,module,exports){ +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} - /** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ - var union = baseRest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); - }); +module.exports = matchesStrictComparable; - /** - * This method is like `_.union` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which uniqueness is computed. Result values are chosen from the first - * array in which the value occurs. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.unionBy([2.1], [1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - var unionBy = baseRest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); - }); +},{}],308:[function(require,module,exports){ +var memoize = require('./memoize'); - /** - * This method is like `_.union` except that it accepts `comparator` which - * is invoked to compare elements of `arrays`. Result values are chosen from - * the first array in which the value occurs. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.unionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var unionWith = baseRest(function(arrays) { - var comparator = last(arrays); - comparator = typeof comparator == 'function' ? comparator : undefined; - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); - }); +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; - /** - * Creates a duplicate-free version of an array, using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons, in which only the first occurrence of each element - * is kept. The order of result values is determined by the order they occur - * in the array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniq([2, 1, 2]); - * // => [2, 1] - */ - function uniq(array) { - return (array && array.length) ? baseUniq(array) : []; +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); } + return key; + }); - /** - * This method is like `_.uniq` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * uniqueness is computed. The order of result values is determined by the - * order they occur in the array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniqBy([2.1, 1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniqBy(array, iteratee) { - return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; - } + var cache = result.cache; + return result; +} - /** - * This method is like `_.uniq` except that it accepts `comparator` which - * is invoked to compare elements of `array`. The order of result values is - * determined by the order they occur in the array.The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.uniqWith(objects, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] - */ - function uniqWith(array, comparator) { - comparator = typeof comparator == 'function' ? comparator : undefined; - return (array && array.length) ? baseUniq(array, undefined, comparator) : []; - } +module.exports = memoizeCapped; - /** - * This method is like `_.zip` except that it accepts an array of grouped - * elements and creates an array regrouping the elements to their pre-zip - * configuration. - * - * @static - * @memberOf _ - * @since 1.2.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - * - * _.unzip(zipped); - * // => [['a', 'b'], [1, 2], [true, false]] - */ - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var length = 0; - array = arrayFilter(array, function(group) { - if (isArrayLikeObject(group)) { - length = nativeMax(group.length, length); - return true; - } - }); - return baseTimes(length, function(index) { - return arrayMap(array, baseProperty(index)); - }); - } +},{"./memoize":351}],309:[function(require,module,exports){ +var getNative = require('./_getNative'); - /** - * This method is like `_.unzip` except that it accepts `iteratee` to specify - * how regrouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @param {Function} [iteratee=_.identity] The function to combine - * regrouped values. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip([1, 2], [10, 20], [100, 200]); - * // => [[1, 10, 100], [2, 20, 200]] - * - * _.unzipWith(zipped, _.add); - * // => [3, 30, 300] - */ - function unzipWith(array, iteratee) { - if (!(array && array.length)) { - return []; - } - var result = unzip(array); - if (iteratee == null) { - return result; - } - return arrayMap(result, function(group) { - return apply(iteratee, undefined, group); - }); - } +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); - /** - * Creates an array excluding all given values using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.pull`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...*} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.xor - * @example - * - * _.without([2, 1, 2, 3], 1, 2); - * // => [3] - */ - var without = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, values) - : []; - }); +module.exports = nativeCreate; - /** - * Creates an array of unique values that is the - * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) - * of the given arrays. The order of result values is determined by the order - * they occur in the arrays. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.without - * @example - * - * _.xor([2, 1], [2, 3]); - * // => [1, 3] - */ - var xor = baseRest(function(arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)); - }); +},{"./_getNative":277}],310:[function(require,module,exports){ +var overArg = require('./_overArg'); - /** - * This method is like `_.xor` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which by which they're compared. The order of result values is determined - * by the order they occur in the arrays. The iteratee is invoked with one - * argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2, 3.4] - * - * // The `_.property` iteratee shorthand. - * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var xorBy = baseRest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); - }); +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); - /** - * This method is like `_.xor` except that it accepts `comparator` which is - * invoked to compare elements of `arrays`. The order of result values is - * determined by the order they occur in the arrays. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.xorWith(objects, others, _.isEqual); - * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var xorWith = baseRest(function(arrays) { - var comparator = last(arrays); - comparator = typeof comparator == 'function' ? comparator : undefined; - return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); - }); +module.exports = nativeKeys; - /** - * Creates an array of grouped elements, the first of which contains the - * first elements of the given arrays, the second of which contains the - * second elements of the given arrays, and so on. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - */ - var zip = baseRest(unzip); +},{"./_overArg":313}],311:[function(require,module,exports){ +var freeGlobal = require('./_freeGlobal'); - /** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ - function zipObject(props, values) { - return baseZipObject(props || [], values || [], assignValue); - } +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - /** - * This method is like `_.zipObject` except that it supports property paths. - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); - * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } - */ - function zipObjectDeep(props, values) { - return baseZipObject(props || [], values || [], baseSet); +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; } - /** - * This method is like `_.zip` except that it accepts `iteratee` to specify - * how grouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @param {Function} [iteratee=_.identity] The function to combine - * grouped values. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { - * return a + b + c; - * }); - * // => [111, 222] - */ - var zipWith = baseRest(function(arrays) { - var length = arrays.length, - iteratee = length > 1 ? arrays[length - 1] : undefined; + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); - iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; - return unzipWith(arrays, iteratee); - }); +module.exports = nodeUtil; - /*------------------------------------------------------------------------*/ +},{"./_freeGlobal":273}],312:[function(require,module,exports){ +/** Used for built-in method references. */ +var objectProto = Object.prototype; - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } +module.exports = objectToString; - /** - * This method is the wrapper version of `_.at`. - * - * @name at - * @memberOf _ - * @since 1.0.0 - * @category Seq - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _(object).at(['a[0].b.c', 'a[1]']).value(); - * // => [3, 4] - */ - var wrapperAt = flatRest(function(paths) { - var length = paths.length, - start = length ? paths[0] : 0, - value = this.__wrapped__, - interceptor = function(object) { return baseAt(object, paths); }; +},{}],313:[function(require,module,exports){ +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} - if (length > 1 || this.__actions__.length || - !(value instanceof LazyWrapper) || !isIndex(start)) { - return this.thru(interceptor); - } - value = value.slice(start, +start + (length ? 1 : 0)); - value.__actions__.push({ - 'func': thru, - 'args': [interceptor], - 'thisArg': undefined - }); - return new LodashWrapper(value, this.__chain__).thru(function(array) { - if (length && !array.length) { - array.push(undefined); - } - return array; - }); - }); +module.exports = overArg; - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } +},{}],314:[function(require,module,exports){ +var freeGlobal = require('./_freeGlobal'); - /** - * Executes the chain sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - /** - * Gets the next value on a wrapped object following the - * [iterator protocol](https://mdn.io/iteration_protocols#iterator). - * - * @name next - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the next iterator value. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped.next(); - * // => { 'done': false, 'value': 1 } - * - * wrapped.next(); - * // => { 'done': false, 'value': 2 } - * - * wrapped.next(); - * // => { 'done': true, 'value': undefined } - */ - function wrapperNext() { - if (this.__values__ === undefined) { - this.__values__ = toArray(this.value()); - } - var done = this.__index__ >= this.__values__.length, - value = done ? undefined : this.__values__[this.__index__++]; +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); - return { 'done': done, 'value': value }; - } +module.exports = root; - /** - * Enables the wrapper to be iterable. - * - * @name Symbol.iterator - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the wrapper object. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped[Symbol.iterator]() === wrapped; - * // => true - * - * Array.from(wrapped); - * // => [1, 2] - */ - function wrapperToIterator() { - return this; - } +},{"./_freeGlobal":273}],315:[function(require,module,exports){ +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; - /** - * Creates a clone of the chain sequence planting `value` as the wrapped value. - * - * @name plant - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @param {*} value The value to plant. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2]).map(square); - * var other = wrapped.plant([3, 4]); - * - * other.value(); - * // => [9, 16] - * - * wrapped.value(); - * // => [1, 4] - */ - function wrapperPlant(value) { - var result, - parent = this; +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent); - clone.__index__ = 0; - clone.__values__ = undefined; - if (result) { - previous.__wrapped__ = clone; - } else { - result = clone; - } - var previous = clone; - parent = parent.__wrapped__; - } - previous.__wrapped__ = value; - return result; - } +module.exports = setCacheAdd; - /** - * This method is the wrapper version of `_.reverse`. - * - * **Note:** This method mutates the wrapped array. - * - * @name reverse - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2, 3]; - * - * _(array).reverse().value() - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function wrapperReverse() { - var value = this.__wrapped__; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - 'func': thru, - 'args': [reverse], - 'thisArg': undefined - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } +},{}],316:[function(require,module,exports){ +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } +module.exports = setCacheHas; - /*------------------------------------------------------------------------*/ +},{}],317:[function(require,module,exports){ +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the number of times the key was returned by `iteratee`. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - ++result[key]; - } else { - baseAssignValue(result, key, 1); - } - }); + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } +module.exports = setToArray; + +},{}],318:[function(require,module,exports){ +var ListCache = require('./_ListCache'); + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache; + this.size = 0; +} - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, getIteratee(predicate, 3)); - } +module.exports = stackClear; - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex); +},{"./_ListCache":217}],319:[function(require,module,exports){ +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); - /** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=collection.length-1] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ - var findLast = createFind(findLastIndex); + this.size = data.size; + return result; +} - /** - * Creates a flattened array of values by running each element in `collection` - * thru `iteratee` and flattening the mapped results. The iteratee is invoked - * with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); - } +module.exports = stackDelete; - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDeep([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY); - } +},{}],320:[function(require,module,exports){ +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDepth([1, 2], duplicate, 2); - * // => [[1, 1], [2, 2]] - */ - function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); - } +module.exports = stackGet; - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, getIteratee(iteratee, 3)); - } +},{}],321:[function(require,module,exports){ +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} - /** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEach - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `2` then `1`. - */ - function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, getIteratee(iteratee, 3)); - } +module.exports = stackHas; - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } - }); +},{}],322:[function(require,module,exports){ +var ListCache = require('./_ListCache'), + Map = require('./_Map'), + MapCache = require('./_MapCache'); - /** - * Checks if `value` is in `collection`. If `collection` is a string, it's - * checked for a substring of `value`, otherwise - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'a': 1, 'b': 2 }, 1); - * // => true - * - * _.includes('abcd', 'bc'); - * // => true - */ - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) - ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) - : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} - /** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `path` is a function, it's invoked - * for, and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke each method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invokeMap([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - var invokeMap = baseRest(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - result = isArrayLike(collection) ? Array(collection.length) : []; +module.exports = stackSet; - baseEach(collection, function(value) { - result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); - }); - return result; - }); +},{"./_ListCache":217,"./_Map":218,"./_MapCache":219}],323:[function(require,module,exports){ +var asciiToArray = require('./_asciiToArray'), + hasUnicode = require('./_hasUnicode'), + unicodeToArray = require('./_unicodeToArray'); - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ - var keyBy = createAggregator(function(result, value, key) { - baseAssignValue(result, key, value); - }); +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); +} + +module.exports = stringToArray; + +},{"./_asciiToArray":233,"./_hasUnicode":283,"./_unicodeToArray":327}],324:[function(require,module,exports){ +var memoizeCapped = require('./_memoizeCapped'); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +module.exports = stringToPath; + +},{"./_memoizeCapped":308}],325:[function(require,module,exports){ +var isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, getIteratee(iteratee, 3)); - } +module.exports = toKey; - /** - * This method is like `_.sortBy` except that it allows specifying the sort - * orders of the iteratees to sort by. If `orders` is unspecified, all values - * are sorted in ascending order. Otherwise, specify an order of "desc" for - * descending or "asc" for ascending sort order of corresponding values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] - * The iteratees to sort by. - * @param {string[]} [orders] The sort orders of `iteratees`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 34 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 36 } - * ]; - * - * // Sort by `user` in ascending order and by `age` in descending order. - * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - */ - function orderBy(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - orders = guard ? undefined : orders; - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseOrderBy(collection, iteratees, orders); - } +},{"./isSymbol":345}],326:[function(require,module,exports){ +/** Used for built-in method references. */ +var funcProto = Function.prototype; - /** - * Creates an array of elements split into two groups, the first of which - * contains elements `predicate` returns truthy for, the second of which - * contains elements `predicate` returns falsey for. The predicate is - * invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the array of grouped elements. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true }, - * { 'user': 'pebbles', 'age': 1, 'active': false } - * ]; - * - * _.partition(users, function(o) { return o.active; }); - * // => objects for [['fred'], ['barney', 'pebbles']] - * - * // The `_.matches` iteratee shorthand. - * _.partition(users, { 'age': 1, 'active': false }); - * // => objects for [['pebbles'], ['barney', 'fred']] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.partition(users, ['active', false]); - * // => objects for [['barney', 'pebbles'], ['fred']] - * - * // The `_.property` iteratee shorthand. - * _.partition(users, 'active'); - * // => objects for [['fred'], ['barney', 'pebbles']] - */ - var partition = createAggregator(function(result, value, key) { - result[key ? 0 : 1].push(value); - }, function() { return [[], []]; }); +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, - initAccum = arguments.length < 3; +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); - } +module.exports = toSource; - /** - * This method is like `_.reduce` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduce - * @example - * - * var array = [[0, 1], [2, 3], [4, 5]]; - * - * _.reduceRight(array, function(flattened, other) { - * return flattened.concat(other); - * }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - function reduceRight(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduceRight : baseReduce, - initAccum = arguments.length < 3; +},{}],327:[function(require,module,exports){ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); - } +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; - /** - * The opposite of `_.filter`; this method returns the elements of `collection` - * that `predicate` does **not** return truthy for. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.filter - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true } - * ]; - * - * _.reject(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.reject(users, { 'age': 40, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.reject(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.reject(users, 'active'); - * // => objects for ['barney'] - */ - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, negate(getIteratee(predicate, 3))); - } +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - /** - * Gets a random element from `collection`. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - */ - function sample(collection) { - var func = isArray(collection) ? arraySample : baseSample; - return func(collection); - } +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - /** - * Gets `n` random elements at unique keys from `collection` up to the - * size of `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @param {number} [n=1] The number of elements to sample. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the random elements. - * @example - * - * _.sampleSize([1, 2, 3], 2); - * // => [3, 1] - * - * _.sampleSize([1, 2, 3], 4); - * // => [2, 3, 1] - */ - function sampleSize(collection, n, guard) { - if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - var func = isArray(collection) ? arraySampleSize : baseSampleSize; - return func(collection, n); - } +/** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function unicodeToArray(string) { + return string.match(reUnicode) || []; +} - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } +module.exports = unicodeToArray; - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - return isString(collection) ? stringSize(collection) : collection.length; - } - var tag = getTag(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return baseKeys(collection).length; - } +},{}],328:[function(require,module,exports){ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } +/** Used to compose unicode capture groups. */ +var rsApos = "['\u2019]", + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; + +/** Used to match complex or compound words. */ +var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji +].join('|'), 'g'); + +/** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ +function unicodeWords(string) { + return string.match(reUnicodeWord) || []; +} + +module.exports = unicodeWords; - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 30 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] - */ - var sortBy = baseRest(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []); - }); +},{}],329:[function(require,module,exports){ +var capitalize = require('./capitalize'), + createCompounder = require('./_createCompounder'); - /*------------------------------------------------------------------------*/ +/** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ +var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); +}); - /** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ - var now = ctxNow || function() { - return root.Date.now(); - }; +module.exports = camelCase; - /*------------------------------------------------------------------------*/ +},{"./_createCompounder":267,"./capitalize":330}],330:[function(require,module,exports){ +var toString = require('./toString'), + upperFirst = require('./upperFirst'); - /** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => Logs 'done saving!' after the two async saves have completed. - */ - function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } +/** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ +function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); +} - /** - * Creates a function that invokes `func`, with up to `n` arguments, - * ignoring any additional arguments. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ - function ary(func, n, guard) { - n = guard ? undefined : n; - n = (func && n == null) ? func.length : n; - return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); - } +module.exports = capitalize; - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } +},{"./toString":356,"./upperFirst":357}],331:[function(require,module,exports){ +var deburrLetter = require('./_deburrLetter'), + toString = require('./toString'); - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = baseRest(function(func, thisArg, partials) { - var bitmask = WRAP_BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(func, bitmask, thisArg, partials, holders); - }); +/** Used to match Latin Unicode letters (excluding mathematical operators). */ +var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - /** - * Creates a function that invokes the method at `object[key]` with `partials` - * prepended to the arguments it receives. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. See - * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Function - * @param {Object} object The object to invoke the method on. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // Bound with placeholders. - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ - var bindKey = baseRest(function(object, key, partials) { - var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(key, bitmask, object, partials, holders); - }); +/** Used to compose unicode character classes. */ +var rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange; - /** - * Creates a function that accepts arguments of `func` and either invokes - * `func` returning its result, if at least `arity` number of arguments have - * been provided, or returns a function that accepts the remaining `func` - * arguments, and so on. The arity of `func` may be specified if `func.length` - * is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ - function curry(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curry.placeholder; - return result; - } +/** Used to compose unicode capture groups. */ +var rsCombo = '[' + rsComboRange + ']'; - /** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ - function curryRight(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curryRight.placeholder; - return result; - } +/** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ +var reComboMark = RegExp(rsCombo, 'g'); - /** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ - function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; +/** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ +function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); +} - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } +module.exports = deburr; + +},{"./_deburrLetter":268,"./toString":356}],332:[function(require,module,exports){ +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; +module.exports = eq; - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } +},{}],333:[function(require,module,exports){ +var baseGet = require('./_baseGet'); - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - timeWaiting = wait - timeSinceLastCall; +module.exports = get; - return maxing - ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) - : timeWaiting; - } +},{"./_baseGet":239}],334:[function(require,module,exports){ +var baseHas = require('./_baseHas'), + hasPath = require('./_hasPath'); - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && hasPath(object, path, baseHas); +} - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } +module.exports = has; - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } +},{"./_baseHas":242,"./_hasPath":282}],335:[function(require,module,exports){ +var baseHasIn = require('./_baseHasIn'), + hasPath = require('./_hasPath'); - function trailingEdge(time) { - timerId = undefined; +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); +} - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } +module.exports = hasIn; - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } +},{"./_baseHasIn":243,"./_hasPath":282}],336:[function(require,module,exports){ +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } +module.exports = identity; - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); +},{}],337:[function(require,module,exports){ +var baseIsArguments = require('./_baseIsArguments'), + isObjectLike = require('./isObjectLike'); - lastArgs = arguments; - lastThis = this; - lastCallTime = time; +/** Used for built-in method references. */ +var objectProto = Object.prototype; - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - clearTimeout(timerId); - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; - /** - * Creates a function that invokes `func` with arguments reversed. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to flip arguments for. - * @returns {Function} Returns the new flipped function. - * @example - * - * var flipped = _.flip(function() { - * return _.toArray(arguments); - * }); - * - * flipped('a', 'b', 'c', 'd'); - * // => ['d', 'c', 'b', 'a'] - */ - function flip(func) { - return createWrap(func, WRAP_FLIP_FLAG); - } +module.exports = isArguments; - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `clear`, `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ - function memoize(func, resolver) { - if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; +},{"./_baseIsArguments":244,"./isObjectLike":344}],338:[function(require,module,exports){ +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result) || cache; - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; - } +module.exports = isArray; - // Expose `MapCache`. - memoize.Cache = MapCache; +},{}],339:[function(require,module,exports){ +var isFunction = require('./isFunction'), + isLength = require('./isLength'); - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - var args = arguments; - switch (args.length) { - case 0: return !predicate.call(this); - case 1: return !predicate.call(this, args[0]); - case 2: return !predicate.call(this, args[0], args[1]); - case 3: return !predicate.call(this, args[0], args[1], args[2]); - } - return !predicate.apply(this, args); - }; - } +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // => `createApplication` is invoked once - */ - function once(func) { - return before(2, func); - } +module.exports = isArrayLike; - /** - * Creates a function that invokes `func` with its arguments transformed. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Function - * @param {Function} func The function to wrap. - * @param {...(Function|Function[])} [transforms=[_.identity]] - * The argument transforms. - * @returns {Function} Returns the new function. - * @example - * - * function doubled(n) { - * return n * 2; - * } - * - * function square(n) { - * return n * n; - * } - * - * var func = _.overArgs(function(x, y) { - * return [x, y]; - * }, [square, doubled]); - * - * func(9, 3); - * // => [81, 6] - * - * func(10, 5); - * // => [100, 10] - */ - var overArgs = castRest(function(func, transforms) { - transforms = (transforms.length == 1 && isArray(transforms[0])) - ? arrayMap(transforms[0], baseUnary(getIteratee())) - : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); +},{"./isFunction":341,"./isLength":342}],340:[function(require,module,exports){ +var root = require('./_root'), + stubFalse = require('./stubFalse'); - var funcsLength = transforms.length; - return baseRest(function(args) { - var index = -1, - length = nativeMin(args.length, funcsLength); +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - while (++index < length) { - args[index] = transforms[index].call(this, args[index]); - } - return apply(func, this, args); - }); - }); +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - /** - * Creates a function that invokes `func` with `partials` prepended to the - * arguments it receives. This method is like `_.bind` except it does **not** - * alter the `this` binding. - * - * The `_.partial.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 0.2.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var sayHelloTo = _.partial(greet, 'hello'); - * sayHelloTo('fred'); - * // => 'hello fred' - * - * // Partially applied with placeholders. - * var greetFred = _.partial(greet, _, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - */ - var partial = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partial)); - return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); - }); +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; - /** - * This method is like `_.partial` except that partially applied arguments - * are appended to the arguments it receives. - * - * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var greetFred = _.partialRight(greet, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - * - * // Partially applied with placeholders. - * var sayHelloTo = _.partialRight(greet, 'hello', _); - * sayHelloTo('fred'); - * // => 'hello fred' - */ - var partialRight = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partialRight)); - return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); - }); +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined; - /** - * Creates a function that invokes `func` with arguments arranged according - * to the specified `indexes` where the argument value at the first index is - * provided as the first argument, the argument value at the second index is - * provided as the second argument, and so on. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to rearrange arguments for. - * @param {...(number|number[])} indexes The arranged argument indexes. - * @returns {Function} Returns the new function. - * @example - * - * var rearged = _.rearg(function(a, b, c) { - * return [a, b, c]; - * }, [2, 0, 1]); - * - * rearged('b', 'c', 'a') - * // => ['a', 'b', 'c'] - */ - var rearg = flatRest(function(func, indexes) { - return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); - }); +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - /** - * Creates a function that invokes `func` with the `this` binding of the - * created function and arguments from `start` and beyond provided as - * an array. - * - * **Note:** This method is based on the - * [rest parameter](https://mdn.io/rest_parameters). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.rest(function(what, names) { - * return what + ' ' + _.initial(names).join(', ') + - * (_.size(names) > 1 ? ', & ' : '') + _.last(names); - * }); - * - * say('hello', 'fred', 'barney', 'pebbles'); - * // => 'hello fred, barney, & pebbles' - */ - function rest(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start === undefined ? start : toInteger(start); - return baseRest(func, start); - } +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; - /** - * Creates a function that invokes `func` with the `this` binding of the - * create function and an array of arguments much like - * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). - * - * **Note:** This method is based on the - * [spread operator](https://mdn.io/spread_operator). - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Function - * @param {Function} func The function to spread arguments over. - * @param {number} [start=0] The start position of the spread. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.spread(function(who, what) { - * return who + ' says ' + what; - * }); - * - * say(['fred', 'hello']); - * // => 'fred says hello' - * - * var numbers = Promise.all([ - * Promise.resolve(40), - * Promise.resolve(36) - * ]); - * - * numbers.then(_.spread(function(x, y) { - * return x + y; - * })); - * // => a Promise of 76 - */ - function spread(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start == null ? 0 : nativeMax(toInteger(start), 0); - return baseRest(function(args) { - var array = args[start], - otherArgs = castSlice(args, 0, start); +module.exports = isBuffer; - if (array) { - arrayPush(otherArgs, array); - } - return apply(func, this, otherArgs); - }); - } +},{"./_root":314,"./stubFalse":355}],341:[function(require,module,exports){ +var baseGetTag = require('./_baseGetTag'), + isObject = require('./isObject'); - /** - * Creates a throttled function that only invokes `func` at most once per - * every `wait` milliseconds. The throttled function comes with a `cancel` - * method to cancel delayed `func` invocations and a `flush` method to - * immediately invoke them. Provide `options` to indicate whether `func` - * should be invoked on the leading and/or trailing edge of the `wait` - * timeout. The `func` is invoked with the last arguments provided to the - * throttled function. Subsequent calls to the throttled function return the - * result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the throttled function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.throttle` and `_.debounce`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to throttle. - * @param {number} [wait=0] The number of milliseconds to throttle invocations to. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=true] - * Specify invoking on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // Avoid excessively updating the position while scrolling. - * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); - * - * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. - * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); - * jQuery(element).on('click', throttled); - * - * // Cancel the trailing throttled invocation. - * jQuery(window).on('popstate', throttled.cancel); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - 'leading': leading, - 'maxWait': wait, - 'trailing': trailing - }); - } +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} - /** - * Creates a function that accepts up to one argument, ignoring any - * additional arguments. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.unary(parseInt)); - * // => [6, 8, 10] - */ - function unary(func) { - return ary(func, 1); - } +module.exports = isFunction; - /** - * Creates a function that provides `value` to `wrapper` as its first - * argument. Any additional arguments provided to the function are appended - * to those provided to the `wrapper`. The wrapper is invoked with the `this` - * binding of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {*} value The value to wrap. - * @param {Function} [wrapper=identity] The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var p = _.wrap(_.escape, function(func, text) { - * return '

' + func(text) + '

'; - * }); - * - * p('fred, barney, & pebbles'); - * // => '

fred, barney, & pebbles

' - */ - function wrap(value, wrapper) { - return partial(castFunction(wrapper), value); - } +},{"./_baseGetTag":241,"./isObject":343}],342:[function(require,module,exports){ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; - /*------------------------------------------------------------------------*/ +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} - /** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ - function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; - } +module.exports = isLength; + +},{}],343:[function(require,module,exports){ +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +module.exports = isObject; + +},{}],344:[function(require,module,exports){ +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG); - } +module.exports = isObjectLike; - /** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ - function cloneWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); - } +},{}],345:[function(require,module,exports){ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); - /** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ - function cloneDeep(value) { - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); - } +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; - /** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ - function cloneDeepWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); - } +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} - /** - * Checks if `object` conforms to `source` by invoking the predicate - * properties of `source` with the corresponding property values of `object`. - * - * **Note:** This method is equivalent to `_.conforms` when `source` is - * partially applied. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); - * // => true - * - * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); - * // => false - */ - function conformsTo(object, source) { - return source == null || baseConformsTo(object, source, keys(source)); - } +module.exports = isSymbol; - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } +},{"./_baseGetTag":241,"./isObjectLike":344}],346:[function(require,module,exports){ +var baseIsTypedArray = require('./_baseIsTypedArray'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); - /** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - * @see _.lt - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ - var gt = createRelationalOperation(baseGt); +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - /** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to - * `other`, else `false`. - * @see _.lte - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ - var gte = createRelationalOperation(function(value, other) { - return value >= other; - }); +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; +module.exports = isTypedArray; - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; +},{"./_baseIsTypedArray":249,"./_baseUnary":260,"./_nodeUtil":311}],347:[function(require,module,exports){ +var arrayLikeKeys = require('./_arrayLikeKeys'), + baseKeys = require('./_baseKeys'), + isArrayLike = require('./isArrayLike'); - /** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ - var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } +module.exports = keys; - /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } +},{"./_arrayLikeKeys":228,"./_baseKeys":251,"./isArrayLike":339}],348:[function(require,module,exports){ +(function (global){(function (){ +/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && baseGetTag(value) == boolTag); - } + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = nativeIsBuffer || stubFalse; + /** Used as the semantic version number. */ + var VERSION = '4.17.21'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + /** Error message constants. */ + var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', + FUNC_ERROR_TEXT = 'Expected a function', + INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; - /** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ - function isElement(value) { - return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); - } + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || - isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; - } + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are compared by strict equality, i.e. `===`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; - /** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ - function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; - } + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; - /** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ - function isError(value) { - if (!isObjectLike(value)) { - return false; - } - var tag = baseGetTag(value); - return tag == errorTag || tag == domExcTag || - (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); - } + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; - } + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; - /** - * Checks if `value` is an integer. - * - * **Note:** This method is based on - * [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ - function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); - } + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - /** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ - var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] + ]; - /** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. - * - * **Note:** This method is equivalent to `_.matches` when `source` is - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.isMatch(object, { 'b': 2 }); - * // => true - * - * _.isMatch(object, { 'b': 1 }); - * // => false - */ - function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); - } + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + domExcTag = '[object DOMException]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reUnescapedHtml = /[&<>"']/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - /** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ - function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch(object, source, getMatchData(source), customizer); - } + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - /** - * Checks if `value` is a pristine native function. - * - * **Note:** This method can't reliably detect native functions in the presence - * of the core-js package because core-js circumvents this kind of detection. - * Despite multiple requests, the core-js maintainer has made it clear: any - * attempt to fix the detection will be obstructed. As a result, we're left - * with little choice but to throw an error. Unfortunately, this also affects - * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), - * which rely on core-js. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ - function isNative(value) { - if (isMaskable(value)) { - throw new Error(CORE_ERROR_TEXT); - } - return baseIsNative(value); - } + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } + /** Used to match leading whitespace. */ + var reTrimStart = /^\s+/; - /** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ - function isNil(value) { - return value == null; - } + /** Used to match a single whitespace character. */ + var reWhitespace = /\s/; - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && baseGetTag(value) == numberTag); - } + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, + reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; - /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ - function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return typeof Ctor == 'function' && Ctor instanceof Ctor && - funcToString.call(Ctor) == objectCtorString; - } + /** Used to match words composed of alphanumeric characters. */ + var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + /** + * Used to validate the `validate` option in `_.template` variable. + * + * Forbids characters which could potentially change the meaning of the function argument definition: + * - "()," (modification of function parameters) + * - "=" (default value) + * - "[]{}" (destructuring of function parameters) + * - "/" (beginning of a comment) + * - whitespace + */ + var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; - /** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on - * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ - function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; - } + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; - /** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ - var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + /** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); - } + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); - } + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; - /** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ - function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; - } + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; - /** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ - function isWeakSet(value) { - return isObjectLike(value) && baseGetTag(value) == weakSetTag; - } + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; - /** - * Checks if `value` is less than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - * @see _.gt - * @example - * - * _.lt(1, 3); - * // => true - * - * _.lt(3, 3); - * // => false - * - * _.lt(3, 1); - * // => false - */ - var lt = createRelationalOperation(baseLt); + /** Used to match Latin Unicode letters (excluding mathematical operators). */ + var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + + /** Used to compose unicode capture groups. */ + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; - /** - * Checks if `value` is less than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than or equal to - * `other`, else `false`. - * @see _.gte - * @example - * - * _.lte(1, 3); - * // => true - * - * _.lte(3, 3); - * // => true - * - * _.lte(3, 1); - * // => false - */ - var lte = createRelationalOperation(function(value, other) { - return value <= other; - }); + /** Used to compose unicode regexes. */ + var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value); - } - if (symIterator && value[symIterator]) { - return iteratorToArray(value[symIterator]()); - } - var tag = getTag(value), - func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + /** Used to match apostrophes. */ + var reApos = RegExp(rsApos, 'g'); - return func(value); - } + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); - /** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; + /** Used to match complex or compound words. */ + var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji + ].join('|'), 'g'); - return result === result ? (remainder ? result - remainder : result) : 0; - } + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - /** - * Converts `value` to an integer suitable for use as the length of an - * array-like object. - * - * **Note:** This method is based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toLength(3.2); - * // => 3 - * - * _.toLength(Number.MIN_VALUE); - * // => 0 - * - * _.toLength(Infinity); - * // => 4294967295 - * - * _.toLength('3.2'); - * // => 3 - */ - function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; - } + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); - } + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', + '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' + ]; - /** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; - /** - * Converts `value` to a safe integer. A safe integer can be compared and - * represented correctly. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toSafeInteger(3.2); - * // => 3 - * - * _.toSafeInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toSafeInteger(Infinity); - * // => 9007199254740991 - * - * _.toSafeInteger('3.2'); - * // => 3 - */ - function toSafeInteger(value) { - return value - ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) - : (value === 0 ? value : 0); - } + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value); - } + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = + cloneableTags[boolTag] = cloneableTags[dateTag] = + cloneableTags[float32Tag] = cloneableTags[float64Tag] = + cloneableTags[int8Tag] = cloneableTags[int16Tag] = + cloneableTags[int32Tag] = cloneableTags[mapTag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[setTag] = + cloneableTags[stringTag] = cloneableTags[symbolTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; - /*------------------------------------------------------------------------*/ + /** Used to map Latin Unicode letters to basic Latin letters. */ + var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' + }; - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ - var assign = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } - }); + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; - /** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; - /** - * This method is like `_.assign` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignInWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); - }); + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; - /** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Array} Returns the picked values. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - */ - var at = flatRest(baseAt); + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties == null ? result : baseAssign(result, properties); - } + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var defaults = baseRest(function(object, sources) { - object = Object(object); + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - length = 1; - } + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - while (++index < length) { - var source = sources[index]; - var props = keysIn(source); - var propsIndex = -1; - var propsLength = props.length; + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; - if (value === undefined || - (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; } - return object; - }); + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); - /** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); - * // => { 'a': { 'b': 2, 'c': 3 } } - */ - var defaultsDeep = baseRest(function(args) { - args.push(undefined, customDefaultsMerge); - return apply(mergeWith, undefined, args); - }); + /* Node.js helper references. */ + var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, + nodeIsDate = nodeUtil && nodeUtil.isDate, + nodeIsMap = nodeUtil && nodeUtil.isMap, + nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, + nodeIsSet = nodeUtil && nodeUtil.isSet, + nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - /** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ - function findKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); + /*--------------------------------------------------------------------------*/ + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); } + return func.apply(thisArg, args); + } - /** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ - function findLastKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); } + return accumulator; + } - /** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ - function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, getIteratee(iteratee, 3), keysIn); + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } } + return array; + } - /** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ - function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, getIteratee(iteratee, 3), keysIn); + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } } + return true; + } - /** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forOwn(object, iteratee) { - return object && baseForOwn(object, getIteratee(iteratee, 3)); + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } } + return result; + } - /** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ - function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, getIteratee(iteratee, 3)); + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } } + return false; + } - /** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functionsIn - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ - function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); } + return result; + } - /** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functions - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ - function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; } + return array; + } - /** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ - function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); } + return accumulator; + } - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasPath(object, path, baseHas); + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); } + return accumulator; + } - /** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } } + return false; + } - /** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ - var invert = createInverter(function(result, value, key) { - if (value != null && - typeof value.toString != 'function') { - value = nativeObjectToString.call(value); + /** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + var asciiSize = baseProperty('length'); + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function asciiWords(string) { + return string.match(reAsciiWord) || []; + } + + /** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; } + }); + return result; + } - result[value] = key; - }, constant(identity)); + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); - /** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ - var invertBy = createInverter(function(result, value, key) { - if (value != null && - typeof value.toString != 'function') { - value = nativeObjectToString.call(value); + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; } + } + return -1; + } - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; } - }, getIteratee); + } + return -1; + } + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + /** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ + function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } - /** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ - var invoke = baseRest(baseInvoke); + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + array.sort(comparer); + while (length--) { + array[length] = array[length].value; } + return array; + } - /** - * The opposite of `_.mapValues`; this method creates an object with the - * same values as `object` and keys generated by running each own enumerable - * string keyed property of `object` thru `iteratee`. The iteratee is invoked - * with three arguments: (value, key, object). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapValues - * @example - * - * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { - * return key + value; - * }); - * // => { 'a1': 1, 'b2': 2 } - */ - function mapKeys(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); + /** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; - baseForOwn(object, function(value, key, object) { - baseAssignValue(result, iteratee(value, key, object), value); - }); - return result; + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } } + return result; + } - /** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ - function mapValues(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); - baseForOwn(object, function(value, key, object) { - baseAssignValue(result, key, iteratee(value, key, object)); - }); - return result; + while (++index < n) { + result[index] = iteratee(index); } + return result; + } - /** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var object = { - * 'a': [{ 'b': 2 }, { 'd': 4 }] - * }; - * - * var other = { - * 'a': [{ 'c': 3 }, { 'e': 5 }] - * }; - * - * _.merge(object, other); - * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } - */ - var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; }); + } - /** - * This method is like `_.merge` except that it accepts `customizer` which - * is invoked to produce the merged values of the destination and source - * properties. If `customizer` returns `undefined`, merging is handled by the - * method instead. The `customizer` is invoked with six arguments: - * (objValue, srcValue, key, object, source, stack). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * if (_.isArray(objValue)) { - * return objValue.concat(srcValue); - * } - * } - * - * var object = { 'a': [1], 'b': [2] }; - * var other = { 'a': [3], 'b': [4] }; - * - * _.mergeWith(object, other, customizer); - * // => { 'a': [1, 3], 'b': [2, 4] } - */ - var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { - baseMerge(object, source, srcIndex, customizer); - }); + /** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ + function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; + } - /** - * The opposite of `_.pick`; this method creates an object composed of the - * own and inherited enumerable property paths of `object` that are not omitted. - * - * **Note:** This method is considerably slower than `_.pick`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to omit. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omit(object, ['a', 'c']); - * // => { 'b': '2' } - */ - var omit = flatRest(function(object, paths) { - var result = {}; - if (object == null) { - return result; - } - var isDeep = false; - paths = arrayMap(paths, function(path) { - path = castPath(path, object); - isDeep || (isDeep = path.length > 1); - return path; - }); - copyObject(object, getAllKeysIn(object), result); - if (isDeep) { - result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); - } - var length = paths.length; - while (length--) { - baseUnset(result, paths[length]); - } - return result; + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; }); + } - /** - * The opposite of `_.pickBy`; this method creates an object composed of - * the own and inherited enumerable string keyed properties of `object` that - * `predicate` doesn't return truthy for. The predicate is invoked with two - * arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omitBy(object, _.isNumber); - * // => { 'b': '2' } - */ - function omitBy(object, predicate) { - return pickBy(object, negate(getIteratee(predicate))); - } + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = flatRest(function(object, paths) { - return object == null ? {} : basePick(object, paths); - }); + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; - /** - * Creates an object composed of the `object` properties `predicate` returns - * truthy for. The predicate is invoked with two arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pickBy(object, _.isNumber); - * // => { 'a': 1, 'c': 3 } - */ - function pickBy(object, predicate) { - if (object == null) { - return {}; - } - var props = arrayMap(getAllKeysIn(object), function(prop) { - return [prop]; - }); - predicate = getIteratee(predicate); - return basePickBy(object, props, function(value, path) { - return predicate(value, path[0]); - }); - } + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - path = castPath(path, object); + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; - var index = -1, - length = path.length; + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } - // Ensure the loop is entered when path is empty. - if (!length) { - length = 1; - object = undefined; - } - while (++index < length) { - var value = object == null ? undefined : object[toKey(path[index])]; - if (value === undefined) { - index = length; - value = defaultValue; - } - object = isFunction(value) ? value.call(object) : value; + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; } - return object; } + return result; + } - /** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 - */ - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); - } + /** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + var deburrLetter = basePropertyOf(deburredLetters); - /** - * This method is like `_.set` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.setWith(object, '[0][1]', 'a', Object); - * // => { '0': { '1': 'a' } } - */ - function setWith(object, path, value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseSet(object, path, value, customizer); - } + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); - /** - * Creates an array of own enumerable string keyed-value pairs for `object` - * which can be consumed by `_.fromPairs`. If `object` is a map or set, its - * entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entries - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairs(new Foo); - * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) - */ - var toPairs = createToPairs(keys); + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } - /** - * Creates an array of own and inherited enumerable string keyed-value pairs - * for `object` which can be consumed by `_.fromPairs`. If `object` is a map - * or set, its entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entriesIn - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairsIn(new Foo); - * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) - */ - var toPairsIn = createToPairs(keysIn); + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } - /** - * An alternative to `_.reduce`; this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own - * enumerable string keyed properties thru `iteratee`, with each invocation - * potentially mutating the `accumulator` object. If `accumulator` is not - * provided, a new object with the same `[[Prototype]]` will be used. The - * iteratee is invoked with four arguments: (accumulator, value, key, object). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @returns {*} Returns the accumulated value. - * @example - * - * _.transform([2, 3, 4], function(result, n) { - * result.push(n *= n); - * return n % 2 == 0; - * }, []); - * // => [4, 9] - * - * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } - */ - function transform(object, iteratee, accumulator) { - var isArr = isArray(object), - isArrLike = isArr || isBuffer(object) || isTypedArray(object); + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } - iteratee = getIteratee(iteratee, 4); - if (accumulator == null) { - var Ctor = object && object.constructor; - if (isArrLike) { - accumulator = isArr ? new Ctor : []; - } - else if (isObject(object)) { - accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; - } - else { - accumulator = {}; - } - } - (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { - return iteratee(accumulator, value, index, object); - }); - return accumulator; - } + /** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ + function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); + } - /** - * Removes the property at `path` of `object`. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 7 } }] }; - * _.unset(object, 'a[0].b.c'); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - * - * _.unset(object, ['a', '0', 'b', 'c']); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - */ - function unset(object, path) { - return object == null ? true : baseUnset(object, path); - } + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; - /** - * This method is like `_.set` except that accepts `updater` to produce the - * value to set. Use `_.updateWith` to customize `path` creation. The `updater` - * is invoked with one argument: (value). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.update(object, 'a[0].b.c', function(n) { return n * n; }); - * console.log(object.a[0].b.c); - * // => 9 - * - * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); - * console.log(object.x[0].y.z); - * // => 0 - */ - function update(object, path, updater) { - return object == null ? object : baseUpdate(object, path, castFunction(updater)); + while (!(data = iterator.next()).done) { + result.push(data.value); } + return result; + } - /** - * This method is like `_.update` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.updateWith(object, '[0][1]', _.constant('a'), Object); - * // => { '0': { '1': 'a' } } - */ - function updateWith(object, path, updater, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); - } + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object == null ? [] : baseValues(object, keys(object)); - } + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } - /** - * Creates an array of the own and inherited enumerable string keyed property - * values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.valuesIn(new Foo); - * // => [1, 2, 3] (iteration order is not guaranteed) - */ - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)); + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } } + return result; + } - /*------------------------------------------------------------------------*/ + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + /** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ + function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; + } + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; - /** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ - function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; + while (++index < length) { + if (array[index] === value) { + return index; } - return baseClamp(toNumber(number), lower, upper); } + return -1; + } - /** - * Checks if `n` is between `start` and up to, but not including, `end`. If - * `end` is not specified, it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @since 3.3.0 - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @see _.range, _.rangeRight - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ - function inRange(number, start, end) { - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; } - number = toNumber(number); - return baseInRange(number, start, end); } + return index; + } - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); - } + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); + } - /*------------------------------------------------------------------------*/ + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } - /** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ - var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); - }); + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedEndIndex(string) { + var index = string.length; - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; + } - /** - * Deburrs `string` by converting - * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) - * letters to basic Latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ - function deburr(string) { - string = toString(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + /** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; } + return result; + } - /** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search up to. - * @returns {boolean} Returns `true` if `string` ends with `target`, - * else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ - function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } - var length = string.length; - position = position === undefined - ? length - : baseClamp(toInteger(position), 0, length); + /** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function unicodeWords(string) { + return string.match(reUnicodeWord) || []; + } - var end = position; - position -= target.length; - return position >= 0 && string.slice(position, end) == target; - } + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + var runInContext = (function runInContext(context) { + context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); + + /** Built-in constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = context['__core-js_shared__']; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); /** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } + var nativeObjectToString = objectProto.toString; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, + symIterator = Symbol ? Symbol.iterator : undefined, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** Mocked built-ins. */ + var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, + ctxNow = Date && Date.now !== root.Date.now && Date.now, + ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = Date.now, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(context, 'DataView'), + Map = getNative(context, 'Map'), + Promise = getNative(context, 'Promise'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /*------------------------------------------------------------------------*/ /** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ - function escapeRegExp(string) { - string = toString(string); - return (string && reHasRegExpChar.test(string)) - ? string.replace(reRegExpChar, '\\$&') - : string; - } - - /** - * Converts `string` to - * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. * - * _.kebabCase('fooBar'); - * // => 'foo-bar' + * In addition to lodash methods, wrappers have `Array` and `String` methods. * - * _.kebabCase('__FOO_BAR__'); - * // => 'foo-bar' - */ - var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); - }); - - /** - * Converts `string`, as space separated words, to lower case. + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the lower cased string. - * @example + * The wrapper `String` methods are: + * `replace` and `split` * - * _.lowerCase('--Foo-Bar--'); - * // => 'foo bar' + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` * - * _.lowerCase('fooBar'); - * // => 'foo bar' + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` * - * _.lowerCase('__FOO_BAR__'); - * // => 'foo bar' - */ - var lowerCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + word.toLowerCase(); - }); - - /** - * Converts the first character of `string` to lower case. + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. * @example * - * _.lowerFirst('Fred'); - * // => 'fred' + * function square(n) { + * return n * n; + * } * - * _.lowerFirst('FRED'); - * // => 'fRED' - */ - var lowerFirst = createCaseFirst('toLowerCase'); - - /** - * Pads `string` on the left and right sides if it's shorter than `length`. - * Padding characters are truncated if they can't be evenly divided by `length`. + * var wrapped = _([1, 2, 3]); * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 * - * _.pad('abc', 8); - * // => ' abc ' + * // Returns a wrapped value. + * var squares = wrapped.map(square); * - * _.pad('abc', 8, '_-'); - * // => '_-abc_-_' + * _.isArray(squares); + * // => false * - * _.pad('abc', 3); - * // => 'abc' + * _.isArray(squares.value()); + * // => true */ - function pad(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - if (!length || strLength >= length) { - return string; + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } } - var mid = (length - strLength) / 2; - return ( - createPadding(nativeFloor(mid), chars) + - string + - createPadding(nativeCeil(mid), chars) - ); + return new LodashWrapper(value); } /** - * Pads `string` on the right side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padEnd('abc', 6); - * // => 'abc ' - * - * _.padEnd('abc', 6, '_-'); - * // => 'abc_-_' + * The base implementation of `_.create` without support for assigning + * properties to the created object. * - * _.padEnd('abc', 3); - * // => 'abc' + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. */ - function padEnd(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (string + createPadding(length - strLength, chars)) - : string; - } + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); /** - * Pads `string` on the left side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padStart('abc', 6); - * // => ' abc' - * - * _.padStart('abc', 6, '_-'); - * // => '_-_abc' + * The function whose prototype chain sequence wrappers inherit from. * - * _.padStart('abc', 3); - * // => 'abc' + * @private */ - function padStart(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (createPadding(length - strLength, chars) + string) - : string; + function baseLodash() { + // No operation performed. } /** - * Converts `string` to an integer of the specified radix. If `radix` is - * `undefined` or `0`, a `radix` of `10` is used unless `value` is a - * hexadecimal, in which case a `radix` of `16` is used. - * - * **Note:** This method aligns with the - * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category String - * @param {string} string The string to convert. - * @param {number} [radix=10] The radix to interpret `value` by. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {number} Returns the converted integer. - * @example - * - * _.parseInt('08'); - * // => 8 + * The base constructor for creating `lodash` wrapper objects. * - * _.map(['6', '08', '10'], _.parseInt); - * // => [6, 8, 10] + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. */ - function parseInt(string, radix, guard) { - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; } /** - * Repeats the given string `n` times. + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB) as well as ES2015 template strings. Change the + * following template settings to use alternative delimiters. * * @static * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to repeat. - * @param {number} [n=1] The number of times to repeat the string. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {string} Returns the repeated string. - * @example - * - * _.repeat('*', 3); - * // => '***' - * - * _.repeat('abc', 2); - * // => 'abcabc' - * - * _.repeat('abc', 0); - * // => '' + * @type {Object} */ - function repeat(string, n, guard) { - if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - return baseRepeat(toString(string), n); - } + lodash.templateSettings = { - /** - * Replaces matches for `pattern` in `string` with `replacement`. - * - * **Note:** This method is based on - * [`String#replace`](https://mdn.io/String/replace). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to modify. - * @param {RegExp|string} pattern The pattern to replace. - * @param {Function|string} replacement The match replacement. - * @returns {string} Returns the modified string. - * @example - * - * _.replace('Hi Fred', 'Fred', 'Barney'); - * // => 'Hi Barney' - */ - function replace() { - var args = arguments, - string = toString(args[0]); + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, - return args.length < 3 ? string : string.replace(args[1], args[2]); - } + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, - /** - * Converts `string` to - * [snake case](https://en.wikipedia.org/wiki/Snake_case). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the snake cased string. - * @example - * - * _.snakeCase('Foo Bar'); - * // => 'foo_bar' - * - * _.snakeCase('fooBar'); - * // => 'foo_bar' - * - * _.snakeCase('--FOO-BAR--'); - * // => 'foo_bar' - */ - var snakeCase = createCompounder(function(result, word, index) { - return result + (index ? '_' : '') + word.toLowerCase(); - }); + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, - /** - * Splits `string` by `separator`. - * - * **Note:** This method is based on - * [`String#split`](https://mdn.io/String/split). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to split. - * @param {RegExp|string} separator The separator pattern to split by. - * @param {number} [limit] The length to truncate results to. - * @returns {Array} Returns the string segments. - * @example - * - * _.split('a-b-c', '-', 2); - * // => ['a', 'b'] - */ - function split(string, separator, limit) { - if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { - separator = limit = undefined; - } - limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; - if (!limit) { - return []; - } - string = toString(string); - if (string && ( - typeof separator == 'string' || - (separator != null && !isRegExp(separator)) - )) { - separator = baseToString(separator); - if (!separator && hasUnicode(string)) { - return castSlice(stringToArray(string), 0, limit); - } + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash } - return string.split(separator, limit); - } + }; + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ /** - * Converts `string` to - * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). - * - * @static - * @memberOf _ - * @since 3.1.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the start cased string. - * @example - * - * _.startCase('--foo-bar--'); - * // => 'Foo Bar' - * - * _.startCase('fooBar'); - * // => 'Foo Bar' + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. * - * _.startCase('__FOO_BAR__'); - * // => 'FOO BAR' + * @private + * @constructor + * @param {*} value The value to wrap. */ - var startCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + upperFirst(word); - }); + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } /** - * Checks if `string` starts with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=0] The position to search from. - * @returns {boolean} Returns `true` if `string` starts with `target`, - * else `false`. - * @example - * - * _.startsWith('abc', 'a'); - * // => true - * - * _.startsWith('abc', 'b'); - * // => false + * Creates a clone of the lazy wrapper object. * - * _.startsWith('abc', 'b', 1); - * // => true + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. */ - function startsWith(string, target, position) { - string = toString(string); - position = position == null - ? 0 - : baseClamp(toInteger(position), 0, string.length); - - target = baseToString(target); - return string.slice(position, position + target.length) == target; + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; } /** - * Creates a compiled template function that can interpolate data properties - * in "interpolate" delimiters, HTML-escape interpolated data properties in - * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data - * properties may be accessed as free variables in the template. If a setting - * object is given, it takes precedence over `_.templateSettings` values. - * - * **Note:** In the development build `_.template` utilizes - * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) - * for easier debugging. - * - * For more information on precompiling templates see - * [lodash's custom builds documentation](https://lodash.com/custom-builds). - * - * For more information on Chrome extension sandboxes see - * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The template string. - * @param {Object} [options={}] The options object. - * @param {RegExp} [options.escape=_.templateSettings.escape] - * The HTML "escape" delimiter. - * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] - * The "evaluate" delimiter. - * @param {Object} [options.imports=_.templateSettings.imports] - * An object to import into the template as free variables. - * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] - * The "interpolate" delimiter. - * @param {string} [options.sourceURL='lodash.templateSources[n]'] - * The sourceURL of the compiled template. - * @param {string} [options.variable='obj'] - * The data object variable name. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the compiled template function. - * @example - * - * // Use the "interpolate" delimiter to create a compiled template. - * var compiled = _.template('hello <%= user %>!'); - * compiled({ 'user': 'fred' }); - * // => 'hello fred!' - * - * // Use the HTML "escape" delimiter to escape data property values. - * var compiled = _.template('<%- value %>'); - * compiled({ 'value': '