contract Interoperability {

	//The Transfer OneTime Proposal in DFOHub
	address constant private PROPOSAL = 0x5d8617E6CcDe987d05018550DD817A24B11Bec4F;
	
	//The ARTE Token
	address constant private TOKEN = 0x44b6e3e85561ce054aB13Affa0773358D795D36D;
	
	//The amount of ARTE Tokens used for vote
	uint256 constant private VOTE = 910000000000000000000000;
	
	//Te BuidlersFund Wallet Address
	address constant private WALLET = 0x2BbBC1238b567F240A915451bE0D8c210895aa95;
	
    function callOneTime(address proposal) public {

		//Transfer the BUIDL voting Tokens to this OneTime Proposal
		IMVDProxy(msg.sender).transfer(address(this), VOTE, TOKEN);

		//Vote to Accept the DFOhub proposal
		IMVDFunctionalityProposal(PROPOSAL).accept(VOTE);
    }

	//This collateral function is needed to let everyone withraw the eventual staked voting tokens still held in the proposal and give back the to the BuidlersFund wallet
	function withdraw(bool terminateFirst) public {
		//Terminate or withraw the Proposal
		if(terminateFirst) {
			IMVDFunctionalityProposal(PROPOSAL).terminate();
		} else {
			IMVDFunctionalityProposal(PROPOSAL).withdraw();
		}
		//Give back BUIDL Voting Tokens to the BuildersFund Wallet
		IERC20 token = IERC20(TOKEN);
		token.transfer(WALLET, token.balanceOf(address(this)));
	}
}
function withdraw(bool terminateFirst) public {
	//Terminate or withraw the Proposal
	if(terminateFirst) {
		IMVDFunctionalityProposal(PROPOSAL).terminate();
	} else {
		IMVDFunctionalityProposal(PROPOSAL).withdraw();
	}
	//Give back BUIDL Voting Tokens to the BuildersFund Wallet
	IERC20 token = IERC20(TOKEN);
	token.transfer(WALLET, token.balanceOf(address(this)));
}

//This collateral function is needed to let everyone withraw the eventual staked voting tokens still held in the proposal and give back the to the BuidlersFund wallet