text:
fix mypy version check

AMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSSUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUSAMONGUS

@DetachHead TODO: rebase onto upstream to get mypy fixes needed for this pr to work properly.

repo: DetachHead/pydantic


text:
🛑 Deuchnord.fr is down

In 1dcda0c, Deuchnord.fr (https://deuchnord.fr) was down:

HTTP code: 403
Response time: 982 ms

Resolved: Deuchnord.fr is back up in 7f30fe6.

source: gharchive/issue

repo: Deuchnord/uptime

license: MIT

license_type: permissive

license_source: github-api


text:
What am I doing wrong?

Hi Dev1an,
Your Swift-Atem package look amazing but I just cannot get it working.  I must be doing something wrong as the control software will connect to my Atem Mini and so will your NodeJS Atem package.
My code is very simple:
        let controller = try? Controller(ipAddress: "192.168.68.240") { connection in
            connection.when { (connected: Config.InitiationComplete) in
                print(connected)
                print("Type a number and press <enter> to change the current preview")
            }
            connection.whenDisconnected = {
                print("Disconnected")
            }
        }

        controller?.send(message: Do.ChangeProgramBus(to:VideoSource.input(2)))

I keep getting the following in the output:
channel active
👹 Not sending because connectionstate is nil
🛑 Shutting down connection [IPv4]192.168.68.240:9910
channel inactive
Disconnected
lost connection due to channel inactive

I guess the issues here is the fact that the logging isn't really telling me anything.  Is there a way to enable full logging that might give me a clue why this isn't working?
Thanks,
Simon

Can you try to send your message after you receive ‘Config.InitiationComplete’

Thank you Damiaan,
I don't get the Config.InitiationComplete message.
I'm starting to think it's somehow environmental in my XCode project (as
the NodeJS app works with no issues).  It seems to be shutting down the
channel immediately.  I have enabled outbound & inbound networking for my
app's sandbox but that has no effect.
These are the messages I get from the app:
channel active
🛑 Shutting down connection [IPv4]192.168.68.240:9910
http://192.168.68.240:9910
channel inactive
Disconnected
lost connection due to channel inactive
The IP is definitely correct for my switcher.  I just can't get it to
connect!
Best regards,
Simon
On Thu, 15 Jul 2021 at 18:49, Damiaan Dufaux @.***>
wrote:

Can you try to send your message after you receive
‘Config.InitiationComplete’?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/Dev1an/Swift-Atem/issues/20#issuecomment-880894884,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADE3TDUOVE2W6NLG7G7IFL3TX4NTHANCNFSM5AN457FA
.

Hmm okay. There are definitely still some problems with how the library handles errors. What version are you using? Can you try using the ‘development’ branch?

Thanks Damiaan,
Interesting.  I switched to the development branch and it all started
working!  This package is awesome by the way.  You have saved me a massive
amount of time.
Best regards,
Simon
On Thu, 15 Jul 2021 at 20:33, Damiaan Dufaux @.***>
wrote:

Hmm okay. There are definitely still some problems with how the library
handles errors. What version are you using? Can you try using the
‘development’ branch?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/Dev1an/Swift-Atem/issues/20#issuecomment-880958631,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADE3TDUK3SY5Y573EFZ7Y2LTX4ZX7ANCNFSM5AN457FA
.

Nice to hear! I will work on a tagged (more stable) release in august with up to date documentation.
May I ask what you are using the library for?

That's good news indeed.
I work for Salesforce and we are currently building an experience to run in
our Innovation Centers.  I am using your swift library to control the Atem
switchers so we can automate our displays.  I have a simple macOS app that
acts as a broker and receives websocket messages from our servers.  Once an
atem command is received it can switch the video display!  Should look cool
when finished.
I have a couple of quick questions if that's ok?
Firstly, does Swift-Atem support calling macros on the Atem?  I can see
anything obvious in the API but I'm new to Atems so perhaps I'm missing
something.  This would be extremely helpful.
Also, what's your recommendation for reconnecting if the Atem is lost for
some reason.  I wrote a simple watchdog scheduler to monitor the connection
state but it seems to crash with too many files open after a while.  Is
there some resource clean up I should be doing if the connection fails?
Thanks again for your help and the great library.
Best regards,
Simon
On Mon, 19 Jul 2021 at 21:15, Damiaan Dufaux @.***>
wrote:

Nice to hear! I will work on a tagged (more stable) release in august with
up to date documentation.
May I ask what you are using the library for?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/Dev1an/Swift-Atem/issues/20#issuecomment-882829860,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADE3TDX2WAGK6VGPBRKDXLDTYSBVFANCNFSM5AN457FA
.

You can send any command you want to the ATEM using this library (as is illustrated by Adam Tow's excellent mixeffect.app). But for now you need to implement the serialising and parsing of most of the commands yourself, because I've had no time to implement them yet.
Macros
For the macros you are in luck because you can simple use the code from #10 already.
When you implement other command yourself, please feel free to submit pull requests with their implementation, I will merge them when I have time.
Connection handling

I wrote a simple watchdog scheduler to monitor the connection state

Where do you get the connection state from? For now (in the dev branch), you should handle connection errors using these closures of ControllerConnection:

whenDisconnected: (() -> Void)
whenError: (Error) -> Void

These closure properties will probably become methods like func when<M>((M) -> Void) in a future release.

If you still encounter issues using these API's please open separate issues for them (or comment on the pull requests) so that we can solve them in a structured manner.


text:
activate the initial route

We've got the first route '/' working on localhost:3000 (passing list-devstars tests)

deleting this as there were mistakes in the tests. Please resend this now that the tests have been updated. @jock-dalby

source: gharchive/pull-request

authors: george-fg jock-dalby

repo: DevBook/DevBook

license: mit

license_source: bigquery


text:
feat(Progress): add percentageTextPlacement percentageTextColor api

[x] 新增进度条的文字说明位置设置
[x] 新增进度条的文字说明颜色设置

设置进度条的文字说明位置

设置进度条的文字说明颜色

@Lonely-shang 你提的PR非常专业，不仅增加了特性，而且添加了中英文文档、单元测试，PR的描述也有截图，必须点赞👍

authors: Lonely-shang kagol

repo: DevCloudFE/vue-devui


text:
añadido un nuevo titulo

Descripción
¿Que ha cambiado?
Se añade un nuevo titulo

[x ] Frontend
[ ] Backend
[ ] Configuración del Server

Como puedo Probar los Cambios?
Revisar el footer

Revisado

revisado

authors: DevEdisonPerdomo IngEdisonperdomo

repo: DevEdisonPerdomo/invie-github


text:
How to use dxTabs and dxTabPanel with html templates?

Can I use the dxTabs or dxTabPanel with separate HTML template file as the content of each tab? In the following example, I have a user.html, comment.html and find.html as the source for each tab?
Each tab URL should take a query parameter like the userid. For example user.html?userid=200

If your tab templates are static, you can just create corresponding Angular 2 components with the 'templateUrl' property specified. Then, put them into each tab template. You can find an example here.
As I see, you want to pass a request parameter such as userid. That means you need to handle this request by your server-side code and return the corresponding template. If the userid value becomes available only at runtime, you'll need to process the template dynamically. You can find some info about this here. Generally, all these tasks are not related to the DevExtreme components and are solved the same way in a pure Angular 2 app.

authors: dxbykov varghesep

repo: DevExpress/devextreme-angular


text:
PayPal logging issue

I'm hitting an issue with logging in to Paypal:
import { Selector } from 'testcafe';

fixture('This is a demo to test multi-windows').page('www.change.org');

test.only('Log in to Paypal', async t => {
  await t
    .navigateTo('/p/the-world-send-matt-damon-to-mars-to-recover-opportunity/sponsors/new')
    .expect(Selector(`a[href*="/psf/share?source_location="]`))
    .ok()
    .typeText(Selector('input[name=amount]'), '123', { replace: true, speed: 0.3 });

  const emailAddressInput = Selector('[data-testid="input_email"]').filterVisible();
  const confirmationEmailInput = Selector('[data-testid="input_confirmation_email"]').filterVisible();
  await t
    .click(Selector(`[data-testid="payment-option-button-paypal"]`))
    .expect(Selector('.iframe-form-element').exists)
    .notOk()
    .typeText(emailAddressInput, 'email@email.com')
    .typeText(confirmationEmailInput, 'email@email.com')
    .typeText(Selector('[data-testid="input_first_name"]'), 'Some')
    .typeText(Selector('[data-testid="input_last_name"]'), 'User');

  const payWithPaypalButton = Selector('[data-funding-source="paypal"]');
  await t
    .switchToIframe(Selector('[data-testid="paypal-button"] iframe'))
    .expect(payWithPaypalButton.with({ visibilityCheck: true }).exists)
    .ok()
    .hover(payWithPaypalButton)
    .click(payWithPaypalButton)
    .switchToMainWindow()
    .expect(Selector('.form-error').find('p').visible)
    .notOk();

  // PayPal Login Window
  await t
    .typeText(Selector('#email'), 'email@email.com')
    .click(Selector('#btnNext'))
    .typeText(Selector('#password'), 'password')
    .click(Selector('#btnLogin'));
});

Resulting in:
This is a demo to test multi-windows
 ✖ Log in to Paypal (screenshots: /**/screenshots/test-1/_errors/1.png)

   1) The element that matches the specified selector is not visible.

      Browser: Chrome 81.0.4044.129 / macOS 10.15.4
      Screenshot: /**/screenshots/test-1/_errors/1.png

         31 |    .expect(Selector('.form-error').find('p').visible)
         32 |    .notOk();
         33 |
         34 |  // PayPal Login Window
         35 |  await t
       > 36 |    .typeText(Selector('#email'), 'email@email.com')
         37 |    .click(Selector('#btnNext'))
         38 |    .typeText(Selector('#password'), 'password')
         39 |    .click(Selector('#btnLogin'));
         40 |});
         41 |

         at <anonymous> (/**/tests/demo/test.js:36:6)

 1/1 failed (42s)

Screenshot:

UPDATE:
If I log out the current URL, it returns the URL for our Sponsor page... however when running our Facebook share tests, the Facebook URL is correctly logged out. My assumption is (and going with the screenshot provided), that the PayPal window is still loading... but never actually completes (despite waiting x mins).
Originally posted by @rob4629 in https://github.com/DevExpress/testcafe/issues/912#issuecomment-621516177

Is there any documentation for this new option (--allow-multiple-windows)?  I am trying to open a few/several windows and bouncing between them.  Then closing those windows to end the testing correctly.

@ambeecher It's still in Alpha phase, so I imagine documentation will be updated with the release of v1.8.5.
In the meantime, you can check #912 for further information

Hi Rob,
Thank you for your response.
I have seen #912.  There are tests in the ticket but what I’m trying to do is a bit more detailed.
I need to be able to open 5 to 9 windows and change focus from one window to another.
I have tried to use browser keystrokes tried to change browser windows/tabs.
I use ‘ctrl+1’ or 2,3,4,5,6,7,8 and 9 depending which screen I need to be on.
The t.pressKey(‘ctrl+5’) command doesn’t work…which I’m trying to figure out why it fails.
Also, I want to be able to delete/exit a window when I’m done with the window… ‘ctrl+w’ actually works by hand but not when sent from t.pressKey() command.
Any insight in to how I can get many windows up and bounce from one window to another window would be appreciated?
Thank you,
Alex Beecher
From: Rob Cooper [mailto:notifications@github.com]
Sent: Wednesday, May 13, 2020 8:49 AM
To: DevExpress/testcafe testcafe@noreply.github.com
Cc: Beecher (US), Alex alex.beecher@boeing.com; Mention mention@noreply.github.com
Subject: Re: [DevExpress/testcafe] PayPal logging issue (#5033)
@ambeecherhttps://github.com/ambeecher It's still in Alpha phase, so I imagine documentation will be updated with the release of v1.8.5.
In the meantime, you can check #912https://github.com/DevExpress/testcafe/issues/912 for further information
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/DevExpress/testcafe/issues/5033#issuecomment-628040919, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AJPG4N22QFYO4WGLZ25S6TDRRKXL5ANCNFSM4MVJIVVA.

I'm not sure if what you're asking for is currently available... however you might want to follow #5034 or create a new issue for t.pressKey() commands not working as expected.

Could this PayPal window issue be related to #5325 ?

Hi @rob4629
We cannot say something definitely because we don't know the cause of the problem. We will update this thread once we have any results.

It looks like the WindowId isn't being set for the child window:

I have some time to investigate this issue... could you point me towards the code responsible for setting the code responsible for setting this, please?

Hello @rob4629 ,
Thank you for your help.
Here is the code where we process window opening and set the child window ID: https://github.com/DevExpress/testcafe-hammerhead/blob/master/src/client/sandbox/child-window/index.ts
Since we don't know for sure how PayPal opens the login window, you will need to check each of the possible approaches:

click on a link with the targt=blank attribute
call the window.open method
submit a form to a new window

Here are links to corresponding methods for each approach:

handleClickOnLinkOrArea
handleWindowOpen
_handleFormSubmitting

Hey @AlexKamaev, I see you've self assigned this. I've created a simple project to test the PayPal issue, and I'm going through the codebase. If I can help you with it, then please let me know.
I'll continue investigating it in the meantime

@rob4629 Thank you for your sample. I'm working on this issue, but it turned out to be more complex than I expected, so I cannot give any estimate at the moment. I will let you know if I need any additional information. Thank you for your input.

@rob4629
I created a draft version of the PR with the fix for the described issue. Please check it: https://github.com/DevExpress/testcafe/pull/5710
The cause of the issue is that the Paypal button is in the iframe element, so a new child window with the login form is opened as a child of iframe. I could reproduce the issue in a local example, however, my local example cannot cover all possible scenarios, so additional testing on your side will be really appreciated.
Testing on my side does not work every time. It looks like that for some reason Paypal's iframe is not loaded sometimes. Moreover, in some cases, Paypal requires a captcha to continue the test.
Please share your results with us.

That's great news! I'll check the PR out now, and get back to you. I have a couple of different scenarios I can test, so hopefully that will give us a good idea of whether the solution works.

Using your PR, my test scenarios are now working. I'm going to spend some time running through additional tests to verify though. Do you also want me to review the PR?

@rob4629 I'm happy to hear that in most cases the PR solves the issue. I need some additional time to make final changes and test it one more time. We will really appreciate it if you can test it too. Thank you.
If you want to review the PR, you are welcome to do so.

Hello, having the same issue here, trying to access a window opened by an iframe.
How can I test #5710 locally to see if my problem resolves with that PR?
Thanks in advance!

Steps I took:
> git clone git@github.com:AlexKamaev/testcafe.git
> cd testcafe
> npm install
> npx gulp build
> npm link
> cd <your test directory>
> npm link testcafe
> testcafe chrome <args>

Alternatively, if you have issues with com:AlexKamaev/testcafe, just checkout the latest testcafe code and manually copy the code changes over, then continue from step 3

Yes, thanks @rob4629, with this PR #5710 the window opened by iframe gets focus.
My application has another complexity that is out of the scope of this PR.
It open a new window with window.open, and then tries to keep track or any URL changes from that opened window to run some code. This does not seem to be working, will see how and can solve that.

👋🏻 Hey, I know this has been closed, but I'm having an issue running our tests using either 1.10.0-rc2 or 1.10.0-rc.4. Any test that interacts with PayPal, hangs once the test has finished (and doesn't move on to the next test).
Any suggestions on what the issue might be?

authors: AlexKamaev aleks-pro ambeecher gabriel-godoy miherlosev rob4629

repo: DevExpress/testcafe


text:
Implement fixture.httpAuth and test.httpAuth

Add API for HTTP basic and NTLM authenticaion

Closing in favor of #955


text:
Typescript compilation fails because "files" property in tsconfig.json appears to be ignored

What is your Test Scenario?
I enable importing *.graphql files as strings in my app via webpack's raw-loader, and tell TS to consider these imports to be strings via a declaration file:
assets.d.ts
declare module "*.graphql" {
  const content: string;
  export default content;
}

I then tell the TS compiler about this declaration file via the files property in tsconfig.json:
tsconfig.json
{
  ...
  "files": ["./types/assets.d.ts"]
}

Finally, I provide the path to this tsconfig.json via runner.tsConfigPath(tsConfigPath).
What is the Current behavior?
Testcafe fails to compile the TypeScript test:
/Users/eric/my-repo/libs/account/data-access/src/__mock-api__/schema.ts (1, 38): Cannot find module '../schema.graphql' or its corresponding type declarations.

    at Function._reportErrors (/Users/eric/my-repo/node_modules/testcafe/lib/compiler/test-file/formats/typescript/compiler.js:41:15)
    at TypeScriptTestFileCompiler._compileFilesToCache (/Users/eric/my-repo/node_modules/testcafe/lib/compiler/test-file/formats/typescript/compiler.js:58:40)
    at TypeScriptTestFileCompiler._precompileCode (/Users/eric/my-repo/node_modules/testcafe/lib/compiler/test-file/formats/typescript/compiler.js:79:18)
    at TypeScriptTestFileCompiler._compileCodeForTestFiles (/Users/eric/my-repo/node_modules/testcafe/lib/compiler/test-file/api-based.js:86:29)
    at /Users/eric/my-repo/node_modules/testcafe/lib/compiler/test-file/formats/typescript/compiler.js:46:26
    at Compiler._precompileFiles (/Users/eric/my-repo/node_modules/testcafe/lib/compiler/index.js:47:33)
    at Function.all (<anonymous>:null:null)
    at Compiler._compileTestFiles (/Users/eric/my-repo/node_modules/testcafe/lib/compiler/index.js:72:9)
    at Compiler.getTests (/Users/eric/my-repo/node_modules/testcafe/lib/compiler/index.js:84:34)
    at LiveModeBootstrapper._getTests (/Users/eric/my-repo/node_modules/testcafe/lib/runner/bootstrapper.js:129:21)
    at Function.all (<anonymous>:null:null)
    at LiveModeBootstrapper._bootstrapParallel (/Users/eric/my-repo/node_modules/testcafe/lib/runner/bootstrapper.js:226:38)
    at LiveModeBootstrapper.createRunnableConfiguration (/Users/eric/my-repo/node_modules/testcafe/lib/runner/bootstrapper.js:254:69)

What is the Expected behavior?
TS compiles without error
Your Environment details:

testcafe version: 1.9.4
node.js version: 14.11.0
command-line arguments: Let me know if there is a way to output this. I'm running the tests via a JS script that uses createTestCafe
browser name and version: N/A
platform and version: N/A

Hi,
In the upcoming 1.10.0 version, we plan to release the Custom Compiler Options feature, which should allow you to implement your scenario. Here is corresponding issue and PR. Once the 1.10.0 version is released, can you check if it solves the issue? Otherwise, we would appreciate if you send us a working example reproducing the problem.

Are you sure that will fix it? My concern is that the files property in tsconfig.json is not part of the compilerOptions object property -- it's a top-level property. Perhaps your naming the feature "compiler options" doesn't mean that it is only going to consider the compilerOptions property in tsconfig, but the naming makes me nervous :)

Yes, the "Compiler Options" is the name of the CLI parameter and the runner method: https://devexpress.github.io/testcafe/documentation/guides/concepts/typescript-and-coffeescript.html#customize-compiler-options
You can try it with the latest 1.10.0 RC version, (1.10.0-rc.7) available on npm.

Will this Compiler Options feature handle custom "paths" mappings in tsconfig.json files as well? Specifically will it address  #4144?

Hi @thansber
No. The 'Compiler Options' feature will not handle custom path mappings. You can use any workaround from the #4144 issue.

authors: SergeyShurygin ericbiewener miherlosev thansber


text:
Assertion takes longer than necessary

What is your Scenario?
Assertion that the download icon is no longer visible when the download is complete.
What is the Current behavior?
Assertion continues to wait for the element to disappear for ~10 seconds after the element is no longer visible.
What is the Expected behavior?
Assertion shouldn't wait that long.
What is your public website URL? (or attach your complete example)
Details in T1100414.
What is your TestCafe test code?
T1100414.
Your complete configuration file
No response
Your complete test report
No response
Screenshots
No response
Steps to Reproduce

Take the test from T1100414.
Run it: testcafe chrome test.js -e.

TestCafe version
1.19.0
Node.js version
16.14.2
Command-line arguments
testcafe chrome test.js -e
Browser name(s) and version(s)
Chome 103
Platform(s) and version(s)
Windows 10
Other
No response

I researched this issue deeper and came to the conclusion that this behavior was expected. To check the visibility of an element we need to find this element in the DOM. In this case, the element being checked isn't just hidden; it is removed from the DOM. It means that it's impossible to find the element in the DOM, however, testcafe tries to find one and that is why it takes longer than necessary. The time is taken not by the assertion but by the Selector. To resolve this you can check Selector for exists instead of visible. For a smarter decision, you can check for exists at first and then for visible.
const selector = Selector("selector");
await t.expect(selector.exists || selector.visible).notOk();


text:
Update README.md

updates to the readme to contain up-to-date info

Codecov Report

Merging #62 into master will not change coverage.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##           master      #62   +/-   ##
=======================================
  Coverage   90.97%   90.97%
=======================================
  Files           2        2
  Lines         133      133
=======================================
  Hits          121      121
  Misses         12       12

Impacted Files
Coverage Δ

service/models.py
91.66% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 8bf064b...b05ea18. Read the comment docs.

authors: codecov-io savannahmccoy

repo: DevOps-Promo/promotions


text:
LEGAL USER
NETGLOBE
NG.HOME.NET
ART By LAR

LAR

ARTIST

repo: DevTips/Artists-Theme

license: unlicense


text:
Fixed a regression where Linux theme is not properly detected

Pull request type

Please check the type of change your PR introduces:

[X] Bugfix
[ ] New feature or enhancement
[ ] UI change (please include screenshot!)
[ ] Code style update (formatting, renaming)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] Documentation content changes
[ ] Internationalization and localization
[ ] Other (please describe):

What is the current behavior?

Issue Number: #1381
What is the new behavior?
Use DBus to retrieve the org.freedesktop.appearance parameter to detect the theme on Linux Mint, Ubuntu, Fedora.
Other information

Quality check
Before creating this PR:

[X] Did you follow the code style guideline as described in CONTRIBUTING.md
[X] Did you build the app and test your changes?
[X] Did you check for accessibility? On Windows, you can use Accessibility Insights for this.
[ ] Did you verify that the change work in Release build configuration
[ ] Did you verify that all unit tests pass
[ ] If necessary and if possible, did you verify your changes on:

[ ] Windows
[ ] macOS
[X] Linux

Looks good to me. On Fedora, the app now follows dark mode again, but the titlebar remains light:

Which I guess is to expected since GTK itself still doesn't know about the dark mode preference...

@CodedOre Thanks for testing then I will skip the testing on my side.
Making the title bar dark should be possible, too.

Looking through the docs, I think setting the gtk-application-prefer-dark-theme property should work?
Though I haven't tried that yet.

@CodedOre Yes this works, tested on fedora 40 with:
var application = Gtk.Application.New("org.gir.core", Gio.ApplicationFlags.FlagsNone);
application.OnActivate += (sender, args) =>
{
    var window = Gtk.ApplicationWindow.New((Gtk.Application) sender);
    window.Title = "Gtk4 Window";
    window.SetDefaultSize(300, 300);
    window.GetSettings().GtkApplicationPreferDarkTheme = true;
    window.Show();
};

return application.RunWithSynchronizationContext(null);

So setting GtkApplicationPreferDarkTheme  to true looks to be the right thing to do.

I think Gtk.Settings.GtkApplicationPreferDarkTheme should not be used as a fallback decider for the preferred theming mode. This is implied by the linked docs of @CodedOre, too.
I think it is more meant as an "application level setting" defining the developers preference of either a dark or light theme. E.g. in GNOME there are apps, which use a dark theme, even if the user chooses to have a light theme. This is the case for media related apps like video players. I think those apps set this setting to indicate that they prefer a dark theme over the user choise.
And If your code detects, the user wants to use a dark theme you set this property to  true to adhere to the users wish resulting in a dark titlebar.

@veler Are you aware that the dbus call might fail regularly in case of old distributions (API not available). In those cases you would not check the GTK theme currently.

Hey everyone! Thank you all for your feedback, it's super helpful :)
I think I updated the PR according to your suggestions. I'm struggling at setting up a Fedora somehow. I wouldn't mind if one of you could try it. On my side, I tested on Mint and Ubuntu.

Alright, I finally got Fedora to work!
The title bar now follows the theme of DevToys. However, DevToys does not detect the system's theme. userThemePreference on line 179 is 0, so it fallback on checking the theme name, which is just "adwaita", whether it's dark or not.
I'm happy to take suggestions, otherwise I kind of happy with the current state too. I know it's not perfect but it's not a blocking issue.

Which edition of Fedora did you install?
Because the Settings portal, like the other XDG desktop portals, depend on a implementation in the desktop to provide the information.
Gnome and Elementary have implemented the new portal, as well as KDE (partially at least).
But some like Cinnamon or Xfce might not provide the preference yet, so there a fallback to the theme name would be used.

I did just check with my Fedora desktop (to be precise, Fedora Silverblue with the Gnome desktop), and it does work fine and is indeed using the portal.

@veler you could double check if you use "D-Spy" to execute the call to the portal interface manually like I showed in the screenshot.
Perhaps you really have some variant / version which does not have this feature available?

Hey there,
Thanks for your comments :)
I made a virtual machine of Fedora Workstation 40 using the ISO from the Fedora website.
If I'm not wrong, @badcel , I'm getting the same result than you in D-Bus. This is in my Fedora, currently set to Dark mode.

Am I understanding correctly it finds "1" ? Also, when I switch the theme to Default, then the value is "0".

The values from the settings portal looks right to me. If you look at the portal documentation, the value 1 stands for dark mode, while 0 for "no preference". The reason Gnome sets "no preference" instead of "prefer light" on the default setting is that some apps on default would prefer to be dark (like image viewers), while most apps use light as default.

So, I so notice that as of now, on the default setting the app uses the fallback. So, this could be improved by calling the fallback if the DBus call returns an error (like when it did not find the portal).

authors: CodedOre badcel veler

repo: DevToys-app/DevToys


text:
[Feature]: Add indicator for theme selection

Context / Background / How This Idea Came To Fruition
I noticed a strange selection on the top right of the website and didn't expect it to be a theme switcher
Problem / Opportunity
Improve UX by showing the theme selector as an actual theme selector.
Proposed Solution / How It Can Be Improved
Add Sun/Moon Icon like on the Figma design
Current:

Improved:

Testing the changes
Visual verification
Additional Information
No response

I can take care of it.

Hey, @remiroyc are you working on this one? if not can I take this up?

authors: andriishupta remiroyc shindeajinkya

repo: Developer-DAO/developer-dao-dot-com


text:
What about Ruby? 💎

devastated that Ruby isn't in the language list!
Is there anything I can do to help make that happen?

+1 for Ruby support

Anything in specific you guys are proposing? 😄
So far we've tried to consolidate languages used to as few as possible just to keep it simple and accessible for the community :-)
Also it works well since we've got free hosting on Vercel. Keeping to javascript it easy that way ❤
LMK if you've got any specific proposals, otherwise I'm thinking to close this issue to keep a tidy work list

I would just like to be able to create an avatar with a pixelated Ruby icon. Ruby has to be more popular than Brainfuck and some of the other languages (what is Chicken?) on the list! I'm just asking for Ruby to show up in this dropdown list:

Official icon: https://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Ruby_logo.svg/2048px-Ruby_logo.svg.png
A pixelated version of that would be great.
I don't understand why it would affect hosting, but I also don't know how the language list is was chosen.

@mculp Right, gotcha. The traits of the NFT's were chosen by Nader back in September when he launched the original genesis NFTs.
As they are part of the original smart contract they cannot be changed. While we could add more languages etc down the line, for the time being it doesn't make sense as we're only allowing minting an Avatar NFT of the same token ID and traits as the original.
Hope that make sense.
Closing for now, feel free to open later on if we look into expanding the scope of the avatar project to include new traits :-)

authors: kaxel mculp rasmuscnielsen

repo: Developer-DAO/pixel-avatars

license: ISC


text:
[REFACTOR] SelectManitteeVC를 MVVM으로 리팩토링했습니다.

🌁 Background

SelectManitteeVC를 MVVM으로 리팩토링했습니다.
다음 Step으로 넘어가는 로직을 ViewModel에서 관리하도록 구현했습니다.
👩💻 Contents

SelectManittee는 서버와 연동되는 부분 + UserDefault 내부에 값을 사용하는 부분이 없기 때문에 Usecase가 없습니다.
ViewModel없이 MVC 형태로 구현할까 하다가 Step과 roomId는 ViewModel에서 관리하는 것이 맞다고 생각이 들어서 ViewModel를 만들게 되었습니다.
ViewModel은 viewDidLoad, swapView, confirmButtonDidTap이라는 세 가지 이벤트를 통해서 ViewController로부터 이벤트를 받습니다.
viewDidLoad 이벤트가 발생하면 Step를 설정합니다. 초기 Step으로 설정되는 메서드가 호출되고 해당 타입은 currentType으로 방출됩니다.
swapView 이벤트가 발생하면 다음 Step으로 설정되는 메서드가 호출되고 해당 타입을 currentType으로 방출됩니다.
두 가지 이벤트는 Merge 오퍼레이터를 사용해서 묶어뒀기 때문에 둘 중 하나만 이벤트를 방출해도 currentType에 값이 설정됩니다.
confirmButtonDidTap 이벤트가 발생하면 ViewModel이 가지고 있던 roomId를 보냅니다.
위의 이벤트를 다이어그램으로 나타내면 이러합니다.

✅ Testing

방을 만들어서 테스트하시거나 원래 있던 방에서 코드를 수정해서 해당 뷰를 띄울 수도 있습니다.
귀찮으시다면 스크린샷을 참고해주시면 됩니다.🙇♂
📱 Screenshot

https://github.com/DeveloperAcademy-POSTECH/MC2-Team5-Firefighter/assets/55099365/59d2e77b-6a83-404b-9fb5-c4fbffa72845
📣 Related Issue

close #566

늦었지만 확인했습니다!
덕분에 오퍼레이터를 더 잘 사용할 수 있을 것 같은 자신감이 생겼습니다
감사합니다 🙇♂

authors: MMMIIIN YoonAh-dev


text:
Feature/whatwhywhen

.

Pull Request Test Coverage Report for Build 794526733

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 90.15%

Totals

Change from base Build 794493894:
0.0%

Covered Lines:
2615

Relevant Lines:
2876

💛  - Coveralls

Pull Request Test Coverage Report for Build 794526733
Warning: This coverage report may be inaccurate.
This pull request's base commit is no longer the HEAD commit of its target branch. This means it includes changes from outside the original pull request, including, potentially, unrelated coverage changes.

For more information on this, see Tracking coverage changes with pull request builds.
To avoid this issue with future PRs, see these Recommended CI Configurations.
For a quick fix, rebase this PR at GitHub. Your next report should be accurate.

Details

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 90.15%

Totals

Change from base Build 794493894:
0.0%

Covered Lines:
2615

Relevant Lines:
2876

💛  - Coveralls

repo: DeveloperMetrics/DevOpsMetrics


text:
Client request limit reached

Hi,
I am an iOS app developer. My iOS app starts to show the error(Client request limit reached) though I haven't used the app for a few hours. A number of my app's users also report the same issues to me.
Can you check your API to make sure that it is working properly?
Regards,
Yunhe

The issue is resolved.

repo: DeviantArt/DeviantArt-API


text:
chore(release): prepare for sspi v0.14.1

sspi -> 0.14.1

thanks!

authors: CBenoit elmarco

repo: Devolutions/sspi-rs


text:
update react/socket dependencies

"react/socket-client": "0.5."
react/socket 0.5.

The latest on socket is now 0.7.2 and socket-client got merged into it at some point, so socket-client can now go away as a dependency.

authors: mcordingley nopolabs

repo: Devristo/phpws


text:
I24ssx: remove setting .VMAX for stages

When the pmac stages are turned off because they are moved (either from lab or from other facility), the ME14E stages PVs need to re-initialised.
Currently the .VMAX field of the motor stages is also manually set to 20. This PV however is read-only in ophyd_async.
Setting of .VMAX should be removed after checking with controls that:

like most IOCs the last value set to PVs is saved and will still be there after turning it on and off
The current value for .VMAX is 20 (otherwise resetting .VELO to 20 will cause problems)

Looks like without resetting at initlialisation, the .VMAX value is 5
(.venv) ws275 mx_bluesky $ caget ME14E-MO-CHIP-01:Y.VELO
ME14E-MO-CHIP-01:Y.VELO        20
(.venv) ws275 mx_bluesky $ caget ME14E-MO-CHIP-01:Y.VMAX
ME14E-MO-CHIP-01:Y.VMAX        5

After a chat with controls, it seems that while the value for VELO is saved and still there after a reboot, the value for VMAX goes back to it's default value. This can lead to the inconsistency shown in the comment above.
The default for VMAX will be updated by controls so that there's no more need to manually set it.


text:
🛑 LMS Hamburg is down

In c71e6b8, LMS Hamburg (https://lms.lernen.hamburg) was down:

HTTP code: 0
Response time: 0 ms

Resolved: LMS Hamburg is back up in 014735f.

Resolved: LMS Hamburg is back up in 014735f.

repo: DianaHaidarbaigi/LuisenGym


text:
News-Teaser mit Bild, Teaser-Text und Link

Hallo zusammen,
ich bin mal so frei und öffne hier ein Issue, da ich mir nicht sicher bin ob ich die Funktionsweise der API richtig verstanden habe.
Ich möchte auf einer Seite "News Übersicht" eine Liste aller vorhandenen News ausgeben lassen, inkl. Überschrift, Bild, Teaser-Text und Link zu der jeweiligen Detail-Seite.
Dazu habe ich mehrere News angelegt, ein Modul "Nachrichtenliste" erstellt und die entsprechenden Nachrichtenarchive als Quelle ausgewählt.
Im Contao Frontend werden diese auch korrekt angezeigt.
Über die API (/api/module?id=3) bekomme ich aber nur den HTML Inhalt des Newsteasers, jedoch nicht die einzelnen Bestandteile als JSON Objekte.
Ist meine Herangehensweise dazu falsch? Muss ich das irgendwie anders aufsetzen, damit ich die Newsteaser der einzelnen News bekomme?
Danke für die Hilfe

Hi,
im aktuellsten Master sollte das inzwischen gehen. Versuch mal, die Installation per
composer require dieschittigs/contao-content-api:dev-master

authors: saibotd the-unknown

repo: DieSchittigs/contao-content-api-bundle


text:
🛑 ZL2ROR Repeater is down

In f0356a4, ZL2ROR Repeater (https://zl2ror.dvnz.nz) was down:

HTTP code: 0
Response time: 0 ms

Resolved: ZL2ROR Repeater is back up in 8b13a85 after 9 minutes.

repo: DigitalVoiceNZ/upptime


text:
🛑 Quote API is down

In a15ce76, Quote API (https://dikaardnt.com/api/maker/quote) was down:

HTTP code: 502
Response time: 100 ms

Resolved: Quote API is back up in af63007 after 2 days, 13 hours, 37 minutes.

repo: DikaArdnt/upptimeku


text:
Generated lineups are not in sequence by projection

I use:
lineup_generator = optimizer.optimize_lineups(lineups)
for lineup in lineup_generator:
...
And noticed that generated lineups are not in sequence by projected points.
It might look like this:
270.234
269.782
270.145
269.401
What might be the reason for that?
On one hand, its not difficult to sort them after all of them generated. But could it be an indication of a bug? Although the number of lineups I will need already given in the parameter 'lineups' I might stop the 'for' loop earlier and end up with not the best set of lineups.
Or is it internal thing in the Pulp solver? Maybe it runs several threads and sometimes returns worse lineup first and better lineup after?

Are you using randomness in your lineup generator?  When I have randomness turned off the lineups are in sequence by projected points and the top lineup matches what I would get with a simple, excel-based solver.

No randomness.
I also just figured that I can't sort generated lineups because the method above is used for late swap, so the sequence is important, otherwise contest entries will not match and such lineups might be rejected.

Optimize_lineups method returns lineups in the same order as list of passed lineups. This method takes each lineup from list, lock players with started games and optimize lineup like in optimize method. So projection for lineup depends on how many players have running games(locked). It's impossible to get the most optimal lineup before regenerating all the lineups. So if projections ordering is important you should get all lineups and after that sort it.

Yes, but in this specific case there is no locked players. All games are in the future. Which means that every new generated lineup must be worse than previous (or equal).

In this case all lineups should be ordered, maybe it's a bug with detection of players with running games. You can check players that counted as players with running games   with this code: players = [player for player in optimizer if player.is_game_started]

It seems the problem is in the way the game start time compared to start time:
Latest code has this:
time_now = datetime.now().replace(tzinfo=timezone(get_timezone()))
While I think it must be like that:
time_now = datetime.now(starts_at.tzinfo).replace(tzinfo=timezone('US/Eastern'))

authors: DimaKudosh kpm1988 utahman

repo: DimaKudosh/pydfs-lineup-optimizer


text:
🛑 Timeline Cache (Social) is down

In 4e04e36, Timeline Cache (Social) ($URL_SCHEDULER_JOBS/health/timeline/social) was down:

HTTP code: 404
Response time: 2 ms

Resolved: Timeline Cache (Social) is back up in 1b57239.


text:
🛑 mirror is down

In f369c43, mirror ($LAMBDA_MONIT_SERVER_URL?server=mirror) was down:

HTTP code: 502
Response time: 29 ms

Resolved: mirror is back up in ca1482c after 9 minutes.


text:
🛑 API - Debank Gas Price Dict is down

In 78b4e06, API - Debank Gas Price Dict ($DEBANK_GAS_PRICE_DICT_API_URL) was down:

HTTP code: 429
Response time: 345 ms

Resolved: API - Debank Gas Price Dict is back up in 28fde97.

repo: DimensionDev/status


text:
⚠ API - Lens has degraded performance

In 821d7cc, API - Lens ($LENS_API_URL) experienced degraded performance:

HTTP code: 503
Response time: 359 ms

Resolved: API - Lens performance has improved in 75a5af9 after 6 minutes.


text:
Added Dodo code translations

Added some missing strings too. Minor text fixes for better understandable words.

I noticed a wrong translation that I can find a way to correct. Probably because Italian has different words for Orange the color and Orange the fruit. Italian has a big and sometime strange lexicon.🙄😅
I know it's a very secondary problem but maybe there's a way to have two different translation for the same word based of where the word is used in the app?

Well, this is not possible as we are translating stings that came directly from API. So the translation key can't be modified by us. Sorry :/

LGTM, thank you!

Thank you @TheVaan for changing the renamed string. I missed it!
For the "orange" problem I understood now how it works. I'll try to bypass the problem with a unique translation for both words. It exist in Italian but it's a rather "old way" word.

authors: MrOgeid TheVaan

repo: Dimillian/ACHNBrowserUI


text:
Remove lag in Overworld C2

When completing a few dungeons, Overworld C2 becomes laggy because of multiple Cephas being handled.
Instead of being hidden, those entities should just be removed, but a full map model handling would be required to do so.

Potentially fixed in d6fb1fb

repo: Dinopony/alundra-randomizer


text:
[FUNCTION] spam by @username

sup, great soft! please add spammer on the user base (@username)

already implemented


text:
Idea for Diorite Launcher

So I have no idea if this is the route you'd be willing to take, but I have no other way of contributing because I suck at Java, so this is my best shot.
I know how to make basic GUI Apps with Electron (Node.js), so while it wouldn't be Java (at first at least, it could eventually become Java instead of JavaScript/HTML/CSS), it would be something extremely easy to make and maintain (No idea how hard it is to make a GUI Java app though, so it might actually be easier).
Initially all it would have to do is run a shell command to launch the jar file (which I assume is how the client will be distributed, correct me if I'm wrong), and a basic page to edit the configs. The last three points on the Project.md file is where I see it becoming a little more involved to create, but should still be easy enough to accomplish.
I'd love to see this project become a reality as quick as possible, and I can think of no other way for me to help that happen other than contributing (I saw donations as another option, to give more incentive, but I don't have money to donate). But as I previously mentioned, I'm terrible at Java (I need step by step instructions to get anything done :P). I completely understand if this is not the route you want to go, and wish to have a fully Java environment, this was just the easiest way I saw that would allow me to contribute in a manner that isn't just correcting small grammatical errors :P

This can be a good thing for client, but for now client don't exist, and I would prefer to use Java anyway.
Launcher for server is a different things, main idea it to download dependencies, plugins etc, you know, most of servers use only CLI, so launcher graphic mode will be optional for server, and it must be in Java to provide access to all diorite plugins and Thier classes.
So this isn't good idea for now, also (for client) I want to create small native launcher that will download Java first, so it will be better to keep rest of stuff in Java to minimalize size.

Alright fair enough. I guess I'll just have to learn Java if I want to contribute then.

repo: Diorite/Diorite


text:
called Option::unwrap() on a None value

Problem
use super::*;

#[derive(Props)]
pub struct DropdownMenuProps<'children> {
    dropdown_content: Element<'children>,
    controller_open: Element<'children>,
    controller_closed: Element<'children>,
}

pub fn DropdownMenu<'children>(cx: Scope<'children, DropdownMenuProps<'children>>) -> Element {
    let open = use_state(cx, || false);
    let onclick = |_| open.set(!open.get());

    cx.render(rsx!(
        div { class: "DropdownMenu",
            div { class: "controller-content", onclick: onclick,
                if *open.get() {
                    &cx.props.controller_open
                } else {
                    &cx.props.controller_closed
                }
            }
            div { class: "dropdown-content",
                open.get().then_some(()).and_then(|_| cx.props.dropdown_content.as_ref())
            }
        }
    ))
}

panicked at 'called `Option::unwrap()` on a `None` value', /home/niedzwiedz/.cargo/git/checkouts/dioxus-1e619ce595d3799d/6acec6f/packages/core/src/diff.rs:213:57

above component crashes after I toggle it 3 times.
Steps To Reproduce
dioxus = { git = "https://github.com/DioxusLabs/dioxus", rev = "c97f43146d17abca049f77a616ae6b116d90ca34" }
dioxus-web = { git = "https://github.com/DioxusLabs/dioxus", rev = "c97f43146d17abca049f77a616ae6b116d90ca34" }

discord thread:
https://discord.com/channels/899851952891002890/899851952891002893/1108757735522177147

Could you post the props you pass into the element in the example where it crashes?
I tested this code and could not reproduce the issue:
use dioxus::prelude::*;

fn main() {
    dioxus_web::launch(app);
}

fn app(cx: Scope) -> Element {
    let dynamic = String::from("testing");
    cx.render(rsx!(DropdownMenu {
        dropdown_content: render! {
            div { "Hello, world! {dynamic}" }
        },
        controller_open: render! {
            div { "Close {dynamic}" }
        },
        controller_closed: render! {
            div { "Open {dynamic}" }
        },
    }))
}

#[derive(Props)]
pub struct DropdownMenuProps<'children> {
    dropdown_content: Element<'children>,
    controller_open: Element<'children>,
    controller_closed: Element<'children>,
}

pub fn DropdownMenu<'children>(cx: Scope<'children, DropdownMenuProps<'children>>) -> Element {
    let open = use_state(cx, || false);
    let onclick = |_| open.set(!open.get());

    cx.render(rsx!(
        div { class: "DropdownMenu",
            div { class: "controller-content", onclick: onclick,
                if *open.get() {
                    &cx.props.controller_open
                } else {
                    &cx.props.controller_closed
                }
            }
            div { class: "dropdown-content",
                open.get().then(|| cx.props.dropdown_content.as_ref())
            }
        }
    ))
}

https://github.com/Niedzwiedzw/dioxus-crash-borrow-mut
I created a repo that showcases the exact scenario... I needed to recreate it cause the original contains some SECRET stuff :D but this is the same scenario and it's somewhat minimal @Demonthos

I have a guess what is happening here:

When components are diffed the prop of the new component is taken
If a component is reused between renders, the component has no props the second time it is used which causes the panic

hmm so is it a bug or am I doing something against the rules?

hmm so is it a bug or am I doing something against the rules?

This is an unintended consequence of the rule that you cannot use an element twice in rsx (in your example they end up getting used twice: Once in the first render, and once in the second render). I would consider it a bug.
One possible solution is to wrap the props in Rc to keep the reference alive longer so that if you reuse a prop multiple times, the reference will stay alive until the last use is dropped.

hmmm but am I not returning a closure which creates a new element every time?

by the way, if you scroll down, there is another panic - something about borrowing some value while it is already borrowed. not sure which one causes the other, but the error didn't occur without using shared state right?

hmmm but am I not returning a closure which creates a new element every time?

You do in the parent component (CounterDropdown), but when the child component (DropdownMenu) reruns by itself because of the open hook updating, the elements in the props are the same as the elements used in the initial render with a component that has had it's props .taken

by the way, if you scroll down, there is another panic - something about borrowing some value while it is already borrowed. not sure which one causes the other, but the error didn't occur without using shared state right?

That is pretty normal with rust/WASM panics. It is the same bug

use std::{
    collections::hash_map::DefaultHasher,
    hash::{Hash, Hasher},
};

use dioxus::prelude::*;
use tracing::debug;

fn calculate_hash<T: Hash>(t: &T) -> u64 {
    let mut s = DefaultHasher::new();
    t.hash(&mut s);
    s.finish()
}

/// dioxus has a limitation:  components cannot be reused... this works around that
pub fn frag<'scope, Props, Builder, ScopeProps>(
    cx: Scope<'scope, ScopeProps>,
    props: Props,
    builder: Builder,
) -> Element<'scope>
where
    Props: Hash,
    Builder: Fn(Props) -> LazyNodes<'scope, 'scope>,
{
    let hash = calculate_hash(&props);
    debug!(
        "[{}] -> [{}]: fragment is redrawing",
        std::any::type_name::<ScopeProps>(),
        std::any::type_name::<Props>()
    );

    cx.render(rsx! {
        Fragment {
            key: "{hash}",
            builder(props)
        }
    })
}

so I wrote this as a workaround, could someone please double check me? are there any downsides to doing it this way?

authors: Demonthos Niedzwiedzw

repo: DioxusLabs/dioxus


text:
🛑 TSU is down

In f77de94, TSU (https://TSU.DLCDevelopment.repl.co) was down:

HTTP code: 0
Response time: 0 ms

Resolved: TSU is back up in a17b866.

repo: Discord-Development-Centre/status


text:
Optional service scope creation in Interaction framework

I am currently busy converting my commands to interactions, but I am having one issue with using the interaction framework.
I have found the problem for me is that it is creating a new service scope when executing the interaction handler.
protected async Task<IResult> RunAsync(IInteractionContext context, object[] args, IServiceProvider services)
{
    switch (RunMode)
    {
        case RunMode.Sync:
            {
                using var scope = services?.CreateScope(); // here
                return await ExecuteInternalAsync(context, args, scope?.ServiceProvider ?? EmptyServiceProvider.Instance).ConfigureAwait(false);
            }
        case RunMode.Async:
            _ = Task.Run(async () =>
            {
                using var scope = services?.CreateScope(); // and here
                await ExecuteInternalAsync(context, args, scope?.ServiceProvider ?? EmptyServiceProvider.Instance).ConfigureAwait(false);
            });
            break;
        default:
            throw new InvalidOperationException($"RunMode {RunMode} is not supported.");
    }

    return ExecuteResult.FromSuccess();
}

This would clear out any state that I have given it prior to executing the interaction,
in my case I am creating a service scope to provide a context to all commands (for guild config, language, etc).
Is there any chance we can make the services.CreateScope in this snippet optional?

cc @Cenngo

authors: kuru-rin quinchs


text:
🛑 Shadow Does Streams is down

In 4e2d15a, Shadow Does Streams (https://stream.everythingbagel.me) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Shadow Does Streams is back up in e6f7f21 after 1 day, 4 hours, 51 minutes.

repo: DismalShadowX/upptime


text:
need for better dev versioning

the dev versioning scheme of fast chess right now seems to be the latest minor version + compile date, which makes it impossible to differentiate between dev builds. maybe we could instead use the git sha like stockfish? or use latest commit date instead of compile date?

nvm, seems git sha is already available https://github.com/Disservin/fast-chess/blob/master/src/cli/cli.hpp#L78

repo: Disservin/fast-chess


text:
[default] Lack of modal backdrop

Current behavior
Lack of modal backdrop entering "My account" from sidebar menu
Expected behavior
Modal backdrop should be visible
Steps to reproduce the issue
Visit: https://demo.storefrontcloud.io as a guest
Click on the menu
Click "My account"
Additional information

Should be:

I'm sorry to tell 😬 that the fix provided seems to "work" only when not logged in but when user are logged in, the submenu links all break by opening the login modal and consequently breaking the toggle of overlay and closing of sidebar.
This problem rise up because of this behavior:

clicking on the my account link trigger the modal open and sets state.overlay to true (although it still doesn't show the modal to frontend)
then the click propagation also triggers the closing of the menu by setting again the state.overlay to false but still not showing anything to frontend
when state.overlay eventually has his own fixed state, modal opens and menu closes but at that point overlay already "knows" that must not show itself

We should find a place, possibly the right one, where checking if a modal is triggered and a overlay is already shown, to not hide it. This should prevent any other similar bug.

@qiqqq @filrak can You guys Please help in here? We should have this fixed before 1.8

@pkarw I actually have developed a different solution during the hackathon, which I didn't push since is not very clean in my opinion (and there was also the other solution pending); I will when I get back at the pc so you guys can check if it's valid

Perfect :) Thank You @francescosalvi

authors: francescosalvi lorenaramonda pkarw vue-kacper

repo: DivanteLtd/vue-storefront