anchor.diff:          else
             Result:= 'False';
         end;
  +
  +    avrDict:
  +      begin
  +        Result:= '{';
  +        for i:= 0 to V.Len-1 do
  +          Result+= '"'+V.Items[i].KeyName+'":'+AppVariantItemToString(V.Items[i])+',';
  +        Result+= '}';
  +      end;
  +
  +    avrTuple:
  +      begin
  +        Result:= '(';
  +        for i:= 0 to V.Len-1 do
  +          Result+= AppVariantItemToString(V.Items[i])+',';
  +        Result+= ')';
  +      end;
  +
       else
         raise Exception.Create('Unhandled type in AppVariantToString');
     end;
  
positive.code:   if Result<>'' then
      SetLength(Result, Length(Result)-1);
  end;
  *)
  
  initialization
    InitDirs;
  
negative.code:   end;
  end;
  
  function AppVariantItemToString(const V: TAppVariantItem): string;
  begin
    case V.Typ of
      avdBool:
        begin
          if V.Bool then
            Result:= 'True'
          else
            Result:= 'False';
        end;
  
      avdInt:
        Result:= IntToStr(V.Int);
  
      avdRect:
        Result:= Format('(%d,%d,%d,%d)', [V.Rect.Left, V.Rect.Top, V.Rect.Right, V.Rect.Bottom]);
  
      avdStr:
        Result:= SStringToPythonString(V.Str);
  
      else
        raise Exception.Create('Unhandled type in AppVariantItemToString');
    end;
  end;
  
  function AppVariantToString(const V: TAppVariant): string;
  var
    i: integer;
  begin
    case V.Typ of
      avrNil:
        raise Exception.Create('Nil value in AppVariantToString');
  
      avrInt:
        Result:= IntToStr(V.Int);
  
      avrStr:
        Result:= SStringToPythonString(V.Str);
  
      avrBool:
        begin
          if V.Bool then
  