<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def replace_local_did_metadata(self, loc_did: str, metadata: dict) -> DIDInfo: """ Replace the metadata associated with a local DID. Raise WalletState if wallet is closed, AbsentRecord for no such local DID. :param loc_did: local DID of interest :param metadata: new metadata to store :return: DIDInfo for local DID after write """


        LOGGER.debug('Wallet.replace_local_did_metadata >>> loc_did: %s, metadata: %s', loc_did, metadata)

        old = await self.get_local_did(loc_did)  # raises exceptions if applicable
        now = int(time())
        loc_did_metadata = {**(metadata or {}), 'since': (old.metadata or {}).get('since', now), 'modified': now}
        try:
            await did.set_did_metadata(self.handle, loc_did, json.dumps(loc_did_metadata))
        except IndyError as x_indy:
            LOGGER.debug('Wallet.replace_local_did_metadata <!< indy-sdk raised error %s', x_indy.error_code)
            raise

        rv = await self.get_local_did(loc_did)
        LOGGER.debug('Wallet.replace_local_did_metadata <<< %s', rv)
        return rv