//Create a contract boogie harness for each respective contract parsed through here.
        private void createContractBoogieHarness(ContractDefinition contract)
        {
            //create the contract harness name
            string contractHarnessName = "BoogieEntry_" + contract.Name;

            //input boogie variables
            List <BoogieVariable> inputParameters = new List <BoogieVariable>();
            //output boogie variables
            List <BoogieVariable> outputParameters = new List <BoogieVariable>();

            //Generate the harness procedure declaration.
            BoogieProcedure harnessProcedureDeclaration = new BoogieProcedure(contractHarnessName, inputParameters, outputParameters);

            classTranslatorContext.getProgram.AddBoogieDeclaration(harnessProcedureDeclaration);

            List <BoogieVariable> localVariables = Conversion_Utility_Tool.CollectLocalVars(new List <ContractDefinition>()
            {
                contract
            }, classTranslatorContext);
            BoogieStmtList harnessBody = new BoogieStmtList();

            //add dynamic type assumptions to harness body and generate constructor call fallback.
            harnessBody.AddStatement(BuildDynamicTypeAssumptions(contract));
            GenerateConstructorCall(contract).ForEach(x => harnessBody.AddStatement(x));

            //create a boogie implementation type that represents a harness with the above parameters
            BoogieImplementation harnessImpl = new BoogieImplementation(contractHarnessName, inputParameters, outputParameters, localVariables, harnessBody);

            //add the implementation as a declaration to the Boogie Program
            classTranslatorContext.getProgram.AddBoogieDeclaration(harnessImpl);
        }