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