Building Large Scale Systems and Products with Python

George Nychis 

Overview

At the beginning of Soroco’s journey, we had to answer a question that many engineering organizations have had to answer before.

What programming language were we going to use when building and scaling our products?

The reason that each organization needs to answer the question on their own is that every product’s goals, needs, and constraints are different. However, even with our own goals in mind (which we will explain), no language we could pick would be perfect. We would want to make a decision knowing each language’s potential and shortcomings. We would plan to overcome the key shortcomings to make our technology.

Here are the kinds of typical scenarios that we have encountered and the challenges we face when automating or discovering transactions in a live enterprise environment:

  1. The automated or discovered work needs to closely match what teams were already doing on the ground. That is, use the same applications, the same data, and most-often follow the same steps. Therefore, a transaction in this context is determined by the steps taken by teams which manually execute the work. And this means that the right comparator set for scale and performance is the manual work that teams execute today to get the work done. Consequently, this almost always means dealing with highly legacy (including mainframes!) and varying enterprise applications, up to 80% of which typically do not have any API interface.
  2. Each transaction typically involves accessing approximately 7500 data fields in 71 screens, executing 216 steps, and context switching between 15-890 times between enterprise applications, and takes anywhere between 5-20 minutes to execute a single transaction.
  3. Data being pulled from multiple heterogenous enterprise applications – on average each instance involves gathering data from 5-20+ applications of which 40% tend to be legacy.
  4. Reading a diverse set of complex documents (e.g. invoices, legal documents, etc.) that requires complex NLP processing to extract structure from documents as well as compare, in near real-time, the semantic similarity of multiple documents. On average each process involves reading 15 different documents.
  5. Each automated transaction needs to have the same fidelity as humans, if not better, in terms of error rates, throughput, and reliability while being more scalable.
  6. Extremely high diversity in the set of processes, their steps, and the industries that they are executed in. For example, in this post alone, the data is based on 7 different industries and nearly 20 different functions.

Hence, nearly 7 years ago when we sought out to finalize our decision on a programming language, we were designing and developing our automation and process discovery products. Our automation product was to be capable of handling billions of transactions a year for a single business process. Our process discovery product would need to be able to process billions of data points to discover millions of processes. Both would be distributed systems and deployed globally. The challenges in automating or discovering processes is that these are all running a live enterprise and feature the following issues:

  • In 2020, Soroco achieved the scale we planned for when making these decisions. Within the past 12 months, Soroco’s Scout product has discovered over 1.3 million process transactions covering up to about 12 million hours of manual work.
  • In 2020, Soroco’s automation systems have processed over 1.2 billion enterprise transactions across multiple clients to bring our customers savings and scale to the extent of over 2M hours.

Note, however, most of these automated systems ran in sync with people’s working timings and on working days. This is because typically the automation execution is triggered by an incoming email, document, or an event that populates data in an enterprise system. Furthermore, our ability to ‘scale’ more transactions per second is significantly rate-limited by the delays and slowness of legacy enterprise apps that are not built for an automated layer of software running on top. Therefore, our point is not about merely optimizing for number of transactions per second. There are many systems where Python has been optimized for this metric alone. We cannot control for this metric in an enterprise automation setting built on top of legacy systems. Rather, our point is about ensuring high-fidelity and scalable execution of automation systems in the enterprise while also meeting enterprise standards of safety and reliability.

Therefore, we needed to be able to architect and design our technology carefully. Though we think of picking a programming language to meet this kind of scale as a technical decision, it is important to keep in mind that scaling technology also means being able to scale the engineering team who builds it. The easier the product is to develop, and its code is to read, deploy, secure and maintain…then the better the technology’s development could scale.

In this blog post, we will describe why Soroco chose Python and what we did to ensure we could develop reliably, at scale, and securely. Many of these properties were not ‘out of the box’ with Python 7 years ago. This was at a time when it was far from the most popular language, still considered ‘slow’ and a ‘scripting language.’ Python was far from being considered a language for building large scale systems. All of that has changed today, and in this blog post we will provide guidance in all of the following dimensions which helped us build products with Python.

  • Predicted Growth of Python: Why we picked Python to make it easier to scale our engineering team, despite many of its limitations. The global education system provided hints that Python would be one of the most widely used and known languages in a few years from when we started.
  • PEP484 and Enforcing Typing: How we overcame the downsides of being non-statically typed (e.g., more potential errors in runtime) by supporting the growth of Python’s PEP484 for ‘gradual typing’ while it was still in development. Developing an early PyCharm plugin that enforced it (before mypy was complete), and even interacted with Guido Van Rossum on this journey!
  • Linting and Styling: Unlike languages like Golang which now ship with linters and styling built in, Python does not. We have continually and carefully picked linters and styling libraries to ensure our development looks similar.
  • Automated Pipelines, Testing, and Security Checks: Having build pipelines from the beginning allow us to enforce our linters and to run various security checks. These checks have helped us identify various potential runtime and security issues before release.
  • Packaging, Dependencies, and Hosting: To build at scale, it has always been important that we enforce proper packages, model dependencies, and importantly host the packages so that our build systems can easily pull them.
  • Choices of Libraries for Scalable Processing: How we carefully chose libraries. systems, and packages for processing at scale. In particular, the use of Pandas, numpy, and a few key others have played critical roles.

In each section we will share what libraries we have chosen that have helped us scale to where we are today. Soroco’s products handle billions of transactions for single business processes (built on Python), and our process discovery processes handles billions of data points to find patterns in the workplace.

The Growth of Python and Scaling an Engineering Team

When picking from a set of programming languages that would fit our product needs in building distributed systems, we considered C++, C#, Java, Python and were aware of Golang and Rust as up and coming languages. There were many trade-offs at that time in 2014. C++, C#, and Java were well-established object-oriented languages that were all statically typed and had significant tooling built around them like well-established IDEs (e.g., Visual Code and Eclipse). Python was growing for its simplicity, and was well known as being duck typed, often functional in design, and lacked a lot of tooling like a predominant IDE.

We loved the simplicity of Python and the growing ecosystem around it but feared at scale its duck typing might lead to more errors missed in development and longer development time from confusion over parameter types, variable types, and return types. We were also concerned about the source code (or compiled form) sitting open on our production systems, and lack of consistency in our development from lacking a predominant (and powerful) IDE with the language.

Despite these things, we believed that Python was going to be a major language in the next 5 years and that the community was focused on overcoming a number of these shortcomings for developing systems at scale. Looking at the diagram below which shows the popularity of languages by searches for tutorials on Google, in 2014 and 2015 it was not yet clear Python would pass the giants in systems building: Java, C/C++, and C#. In fact, in 2015 Java was still dominating and Python, C/C++, and C# were all similar in popularity. Today, Python has passed all of these languages in popularity.

growth-of-python-language

There were a few indicators for us that Python might take this kind of lead in popularity many years later. First, was rapid developments and improvements in Python 3 vs. the legacy but widely used Python 2. Whereas, we felt other leaders were stagnating in quality-of-life features to make development simple, Python was more simple development with significant improvements in exception handling, asynchronous support, and optional typing through PEP484, which we will later discuss.

When thinking about the engineering team we would recruit, we also looked to the educational system to see what was being taught. In 2014-2015 we found that many major Computer Science programs were now teaching Python as the first programming language. It was an indicator that when these millions of CS students graduated a few years later, they would be another influence in the industry by building tools and systems in Python. After all, it was the language they would know best.

To a lesser degree, but still important, web programming was also growing in its use of Python with the popularity of the Django and Flask. This was also a signal that web applications may also be built heavily in Python in the future, which has in fact grown. For Soroco, that meant we could use both Python for our distributed systems and web applications alike (though, C# and ASP.NET were also attractive for these same reasons).

When considering everything mentioned, we believed Python would be the major language in a few years and therefore chose it as our predominant language. Though it took major efforts to deal with Python’s shortcomings early on. Most engineers we go to recruit now desire programming in Python, simplifying our recruiting and scaling our engineering team.

Python + Typing for Scaling Development (PEP484)

One strong belief that we had when selecting Python was that we needed to enforce typing with our development. Particularly that local variables, function parameters, class variables, return values, etc. should all be typed and that tooling should detect likely runtime errors during development. When beginning our journey with Python, we noticed the Python Enhancement Proposal (PEP) 484 — Type Hints was under development and had Guido van Rossum’s direct involvement. Though titled Type Hints and optional in use, where part of your code could be typed and part not, we believed that we could enforce types in our code.

Before we get to how to enforce types with Python, we will first look at what exactly PEP484 provides in the language. Without PEP484, you might write code with the following style:

# Traditional example in Python 3.
def duplicate_string(to_duplicate, number_of_times):
 return to_duplicate * number_of_times

my_str = "la"

# Outputs "lalala"
print(duplicate_string("la", 3))

Considering the traditional example above, it may not be hard after sitting down for a few minutes to figure out the expected parameter types and variable types. However, with thousands of lines of code split across multiple files and packages we believed having to infer types would hinder development and lead to mistakes.

With PEP484, types were now optional and that same block of code could be written as follows, which is far more explicit for a developer to understand the types of the variables for usage purposes and avoiding mistakes:

# Example leveraging Type Hints with PEP484.
def duplicate_string(to_duplicate: str, number_of_times: int) -> str:
 return to_duplicate * number_of_times

my_str: str = "la"

# Outputs "lalala"
print(duplicate_string("la", 3))

We found this to be a significant improvement while maintaining the simplicity of the Python language.

However, at Soroco we did not want type “hints”, nor did we want it to be optional. We wanted to enforce it. Else, we risked part of our code being difficult to use. The best way to ensure it would be to enforce it.

Enforcing typing was not so easy at the time. PyCharm, the major Python IDE at the time did not have such functionality. In early 2015 and 2016 we therefore built a plugin with PyCharm that enforced typing. It would throw errors when our engineers would not specify a type in local variables, function parameters, return values, or class variables. We knew we could not keep up the maintenance of the plugin over time, but it was a great stop gap. Next, we turned to the general Python community for a solution.

This is where the development of mypy was important to our future in enforcing typing as well. Again, still in development at the time but Jukka Lehtosalo, a major contributor to PEP484, was working on mypy as a command line tool that could parse through a directory of code with a strict option to throw errors if the code did not comply with PEP484 or provide a hint. At this point, Wolfgang Richter, Soroco’s Head of Infrastructure and Security raised an issue with mypy for enforcing typing.

Neither Wolf or I ever expected that Guido van Rossum himself would comment on the issue giving us direction. After sharing a little bit of excitement in the small comment, it further reinforced our direction that the founder of Python was paying close enough attention to the importance of typing it.

With PEP484 and mypy we had a clear path forward for Python with typing enforced. This has been critical for scaling our development where our modules and how to use them are easy to develop and use. Today, mypy has great support directly in VS Code for enforcing and throwing errors when types are not specified during development. As we will later discuss as well, mypy is part of our standard build pipelines to further enforce (and double check) all of our code is typed when committed.

Finally, we had the benefits of statically typed languages like C/C#/C++/Java while maintaining what we believe is the simplicity of Python and its libraries. Later to be directly supported in modern IDEs for Python (like PyCharm and VS Code).

Linting and Styling with Python to Normalize Development

Scaling our development of Python also meant standardizing linting and styling. The options available for this grew significantly between 2015 and 2021 with the growth of the language. We share the choices that we have made in styling and linters to ensure we develop similarly and follow common standards

For formatting, we use black and for sorting imports we use isort. In particular, we find black to be a very strong project for enforcing PEP8, the standard style format for Python. Though we spent time trying to decide what parameters we should use as defaults, we ultimately concluded on using black’s default parameters in full. Though seemingly simple, we also believe in standardizing the sorting of imports which is where isort is important.

Linting also plays a critical role in standardizing and scaling our development. We have used bandit as a mandatory  linter since beginning our use of Python. The mypy project was built by the OpenStack community to find very common security issues in Python code. We use flake8 to maintain good syntax, formatting, and styling in our code. Inside of flake8 is pycodestyle as well. A much debated setting in flake8 for us was the 88 character line length. We have gone back and forth between 88 and 120 characters. As already discussed in depth, mypy is a critical linter for Soroco, since Soroco enforces the use of PEP484 in its code to get the benefits of static typing in Python.

For documenting functions, classes, and other objects we have found Google-style docstrings to be continually updated to support more modern updates in the language. An example of this styling from the Napolean project, with PEP484 annotations is as follows:

def function_with_pep484_type_annotations(param1: int, param2: str) ->
bool:
 """Example function with PEP 484 type annotations.

 Args:
 param1 (int): The first parameter.
 param2 (str): The second parameter.

 Returns:
 The return value. True for success, False otherwise.
 """

Though periodically discussed, we have not enforced an IDE. Our development team predominantly uses PyCharm, VS Code, and a handful of powerful text editors (Vim, EMACS, etc). Overall, as long as the code passes through our linting and automated pipeline checks then we ultimately do not mind what code editor our developers use. What comes out of the development lifecycle is more important to us than micromanaging the development down to a particular IDE.

Automated Pipelines, Testing, and Security

With linting, styling, and security checks in place, it is important to build a pipeline that enforces running all of them. This will always catch errors and issues when a developer’s local build environment is different and may have forgotten to make a remote change.

With these general development checks, the package’s test cases should also be run. Though there are many options for testing, pytest continues to be one of the most full-featured testing frameworks for Python and for these reasons we use it. It is important to put these testing steps directly into the pipelines to build up a proper CI/CD pipeline.

There are many options for building automated pipelines. Early in Soroco, most of our CI runners were run on-premises with Gitlab runners. More recently, Soroco has moved to Azure DevOps with a mix of runners on-premises and in the cloud. Many of our ML projects that use GPUs run on-premises CI pipelines with internal servers that have GPUs. Other cloud-based CI services also continue to grow (e.g., Circle CI and Travis). Another on-premises option that would still work well for Python would be Jenkins.

As mentioned previously, security checks for Python are important and bandit continues to be a strong choice for checking for common issues. More recently, Soroco has begun to leverage Snyk due to their tracking of known vulnerabilities with open-source packages. With such a rich ecosystem of third-party libraries available in Python that our developers use, this has been a growing need to enforce.

Securing Soroco’s intellectual property when shipping Python code was another security concern of ours. Though compiling the code would obfuscate it, parts of the code could be easily swapped out and decompiled easily. Because securing Python code in itself is a major challenge, we built and open sourced a package for encrypting Python packages where the loader is modified to verify and decrypt it on load. This work is available on Soroco’s GitHub under our PYCE project.

Packaging, Dependencies, and Hosting

Managing Python-built systems at scale is improved significantly by ensuring that projects are properly Python packages and dependencies across them are maintained and modeled. While it may be tempting to ‘move fast’ and add dependencies without version pinning, adding dependencies without versions just like in any other language can be extremely dangerous. When packaging and deploying without pinning versions, the exact package can vary by environment and will lead to different behavior on different systems. Even more dangerous, without pinning we have even found packages change their software license and can risk pulling an undesirable license into the code.

# Avoid adding dependencies without pinned versions like this..
install_requires = ['bandit', 'mypy']

# Always pin version numbers to dependencies like this...
install_requires = ['bandit==1.7.0', 'mypy==0.812']

With a large enough product built on Python with multiple repositories and packages, you will want to host them in a private package repository that is reachable by your deployment pipelines. Historically, it was common to host a basic pypi server. Now, many secure cloud-based solutions are available. For example, Azure Artifacts provide private repository support with significant tooling, security, and maintenance functionality built into it. Another popular solution would be Artifactory. If you still prefer to host your packages on-premises we suggest looking at Sonatype’s Nexus which can mirror pypi and host your private packages. Nexus also has strong support for hosting container images as well. Overall, we would suggest using a cloud-based service if possible which will simplify some of your continuous deployment. However, making on-premises systems accessible via the Internet will also work well if secured properly.

When packaging your Python-based projects, be sure to properly use tags when releasing and configure your build pipelines to read tags to take additional automated steps on release By checking for tags on build, you can easily automate connecting a tag to a release process into your private package repository.

If you enjoy reading this article and want to work on similar problems, apply here and come work with us!

Performance and Scalable Processing in Python

Up until now, we have focused primarily on the development and release cycle. As final guidance in this blog post, we will share what we have learned about performance and scalable processing in Python. In particular, how we carefully select libraries and how we use them to be able to process billions of transactions and data points across our automation and process discovery products.

The most important part is benchmarking. There are many ways to benchmark Python code. In particular, pytest-benchmark, cProfile, and pycallgraph. However, something as simple as using %%time in a Jupyter Notebook and comparing the use of different calls is simple and powerful. A significant portion of Soroco’s code for the purpose of data analysis is first built in Juypter notebooks with data sets where we prototype and benchmark the code.

For data manipulation and data analysis, Pandas is widely used in Soroco and extremely efficient at large data manipulation. This is because of the efficient libraries it uses (e.g., numpy), which have many functions that are performance sensitive written in C. If these libraries are used properly, you will find that the performance you get even with heavy IO operations (where many people “think” Python is slow) will actually be quite fast. The following guide is great on IO operations and Pandas.

One area that I consistently find myself guiding our engineering team in code reviews or when collaborating on large data projects, is that simply using these libraries for periodic operations is not going to get the performance we may need. For example, getting Pandas to construct a DataFrame and then creating a Python loop that iterates over the rows will cause orders of magnitude of additional time as opposed to properly vectorizing and performing your operations. A rule of thumb that I follow is to never manually loop over any rows or columns in DataFrames. The following blog post (credit to the author, Sofia) has a great example on the speed differences. Without getting into depth of the actual operations, the author’s results show the massive performance differences between looping to perform operations vs. properly vectorized operations.

MethodologyAverage single
run time
Marginal performance
improvement
Crude Looping645 ms
Looping with iterrow()166 ms3.9x
Looping with apply()90.6 ms1.8x
Vectorization with Pandas series1.62 ms55.9x
Vectorization with NumPy arrays0.37 ms4.4x

Another common set of operations in Python when doing data analysis and processing are string operations. Again, it is important to use built in methods to the Pandas framework instead of standard Python calls. Doing so will have orders of magnitude of difference. Another great reference is the Python Data Science Handbook chapter on working with strings. As the author has written:

Nearly all Python’s built-in string methods are mirrored by a Pandas vectorized string method. Here is a list of Pandas str methods that mirror Python string methods:

One of Soroco’s engineers, Suraj, demonstrated the speed difference in a talk he gave internally as shown below. Using the most direct way to perform manipulations in a library like Pandas can yield an order of magnitude better time performance compared to an apply with Python’s standard regex library. Again, note how even the most basic benchmark with %%time and Jupyter can go a long way to understanding performance of your code!
A few final suggestions when writing code in Pandas. Avoid chained assignment like df[mask][column] = value and instead use df.loc[mask, column] = value. Create copies of DataFrames using .copy() where required. Check where Pandas may be triggering garbage collection, which may cause a slowdown.

The libraries you should always check for fast implementations of algorithms or functions would be: Pandasnumpyscikit-learnSpark mllib, and scipy. Outside the scope of this blog post would be Soroco’s use of more tensor-based libraries like TensorFlow and PyTorch, like when and where we use them.

Conclusions

There are many different things you should consider when picking a predominant programming language. Throughout this blog post we shared various dimensions that are important to building large scale products with Python. Everything from development to performance. Building large systems with Python is very doable today. Though there have been challenges throughout the past, this blog post has shown ways to adopt optional parts of the language (e.g., PEP484) to ensure better development. The language itself and the tolling around it continues to rapidly improve. Finally, though Soroco is predominantly building its systems in Python, Soroco still has portions of its product built in Golang and C++ as well. Ultimately, do what is best for the product but always keep in mind development and maintenance. Make it easy to develop, deploy, and maintain.

If you enjoy reading this article and want to work on similar problems, apply here and come work with us!

Like this article? Spread the word 

Share on facebook
Share on twitter
Share on linkedin
Share on reddit
Share on mix
Share on email

356 Responses

  1. This is really interesting, You’re a very skilled blogger.
    I have joined your rss feed and look forward to seeking more of your great post.
    Also, I have shared your website in my social networks! oy (Kenneth)

  2. This is really interesting, You’re a very skilled blogger.

    I have joined your rss feed and look forward to seeking more of your great post.
    Also, I have shared your website in my social networks! oy (Kenneth)

  3. I’ve been exploring for a bit for any high-quality
    articles or weblog posts on this kind of space . Exploring in Yahoo I ultimately stumbled upon this site.
    Studying this information So i’m satisfied to express that I
    have a very just right uncanny feeling I discovered exactly what I
    needed. I such a lot surely will make sure to do not put out of your mind this
    site and provides it a glance on a continuing basis.

  4. This is really interesting, You are a very skilled blogger.
    I have joined your rss feed and look forward to seeking more of your wonderful
    post. Also, I’ve shared your site in my social networks!

  5. First off I want to say awesome blog! I had a quick
    question that I’d like to ask if you do not mind. I was curious to know
    how you center yourself and clear your mind before writing.

    I have had difficulty clearing my thoughts in getting my thoughts out.
    I do enjoy writing however it just seems like the first 10 to 15 minutes are generally lost simply just trying to figure out how to begin.
    Any ideas or tips? Appreciate it! ug; writeablog.net,

  6. First off I want to say awesome blog! I had a quick
    question that I’d like to ask if you do not mind.
    I was curious to know how you center yourself and clear your mind before writing.
    I have had difficulty clearing my thoughts
    in getting my thoughts out. I do enjoy writing however it just seems
    like the first 10 to 15 minutes are generally lost simply just trying to figure out how
    to begin. Any ideas or tips? Appreciate it! ug; writeablog.net,

  7. hey there and thank you for your information – I’ve definitely picked up something new
    from right here. I did however expertise several technical points using
    this web site, as I experienced to reload the site many times previous to I could get
    it to load properly. I had been wondering if your hosting is OK?
    Not that I am complaining, but slow loading instances times will
    sometimes affect your placement in google and could damage your high quality score if advertising and
    marketing with Adwords. Anyway I am adding this RSS to my email and
    could look out for a lot more of your respective fascinating content.
    Ensure that you update this again soon. uo (https://postheaven.net)

  8. hey there and thank you for your information – I’ve definitely picked up something new from right here.
    I did however expertise several technical points using
    this web site, as I experienced to reload the site many times previous to I could get it to load properly.
    I had been wondering if your hosting is OK? Not that I
    am complaining, but slow loading instances times will sometimes affect your
    placement in google and could damage your high quality score if
    advertising and marketing with Adwords. Anyway I am adding this RSS to my email and could look out for a lot more of your respective fascinating content.
    Ensure that you update this again soon. uo (https://postheaven.net)

  9. I was curious if you ever considered changing the structure of your blog?
    Its very well written; I love what youve got
    to say. But maybe you could a little more in the way of content so people could connect with
    it better. Youve got an awful lot of text for only having one or
    2 images. Maybe you could space it out better? nc (http://www.bonanza.com)

  10. I was curious if you ever considered changing the structure of your blog?
    Its very well written; I love what youve got to say. But maybe you could
    a little more in the way of content so people could connect with it better.
    Youve got an awful lot of text for only having one or 2 images.

    Maybe you could space it out better? nc (http://www.bonanza.com)

  11. You really make it seem so easy together with your presentation but I to find this matter to be really one thing which I feel I would by no means understand. It sort of feels too complex and very broad for me. I am taking a look ahead for your subsequent put up, I will attempt to get the hang of it!

  12. Oh my goodness! Impressive article dude! Thank
    you so much, However I am experiencing problems with your RSS.
    I don’t understand why I cannot join it. Is there anyone else having
    identical RSS problems? Anybody who knows the answer will you kindly
    respond? Thanx!! rf (godotengine.org)

  13. Oh my goodness! Impressive article dude! Thank you so much, However
    I am experiencing problems with your RSS. I don’t understand
    why I cannot join it. Is there anyone else having identical RSS problems?
    Anybody who knows the answer will you kindly respond?
    Thanx!! rf (godotengine.org)

  14. I do not know if it’s just me or if everybody else encountering problems with your site.

    It seems like some of the written text within your posts are running off the screen. Can someone else
    please provide feedback and let me know if this is happening to them
    too? This may be a problem with my browser because I’ve had this happen before.
    Thanks jo [Phil]

  15. I do not know if it’s just me or if everybody else encountering problems with your site.
    It seems like some of the written text within your posts are running off the screen. Can someone else please provide
    feedback and let me know if this is happening to them too?
    This may be a problem with my browser because I’ve had this happen before.
    Thanks jo [Phil]

  16. We are a bunch of volunteers and starting a brand new scheme in our community.
    Your web site provided us with valuable information to work
    on. You’ve performed an impressive job and
    our entire group shall be grateful to you. nk (Milton)

  17. We are a bunch of volunteers and starting a brand new scheme
    in our community. Your web site provided us with valuable
    information to work on. You’ve performed an impressive job
    and our entire group shall be grateful to you. nk (Milton)

  18. A motivating discussion is worth comment. I believe that you ought to publish more
    about this issue, it may not be a taboo matter but typically people don’t speak about such issues.

    To the next! Cheers!! vn – Maira,

  19. A motivating discussion is worth comment. I believe that you ought to
    publish more about this issue, it may not be a taboo matter but typically people don’t speak about such issues.
    To the next! Cheers!! vn – Maira,

  20. Hi! I could have sworn I’ve visited this blog before but after looking at some of the articles I realized it’s new to me.
    Regardless, I’m certainly happy I came across it and I’ll be bookmarking it and
    checking back frequently! cq (http://qooh.me)

  21. Hi! I could have sworn I’ve visited this blog before but
    after looking at some of the articles I realized it’s new to me.

    Regardless, I’m certainly happy I came across it and I’ll be bookmarking it and checking back frequently! cq (http://qooh.me)

  22. [url=http://sildenafilcitrat.com/]generic sildenafil paypal[/url] [url=http://acsildenafil.com/]sildenafil gel india[/url] [url=http://vxtadalafil.com/]best tadalafil prices[/url] [url=http://propranolol.online/]innopran xl 120 mg[/url] [url=http://wellbutrin.quest/]wellbutrin 100mg price[/url] [url=http://tadacip.quest/]buy tadacip 20[/url] [url=http://buycialistablet.com/]cialis uk prescription[/url] [url=http://sildenafilgenerictb.com/]sildenafil best price uk[/url] [url=http://iveromectinforsale.online/]buy stromectol[/url] [url=http://priligy.quest/]dapoxetine tablets online in india[/url]

  23. [url=http://tviagra.com/]brand viagra from canada[/url] [url=http://viagradepo.com/]compare generic viagra prices[/url] [url=http://sildenafilol.com/]cost of sildenafil in mexico[/url] [url=http://ivermectinm.com/]ivermectin 1 cream 45gm[/url] [url=http://bestviagratablets.com/]cost of generic viagra[/url] [url=http://cialisub.com/]buy cialis 10mg uk[/url] [url=http://priligy.quest/]priligy uk price[/url] [url=http://brandnewviagra.com/]where can you buy viagra uk[/url] [url=http://cialisot.com/]cialis 5mg cost[/url] [url=http://viagrabuyb.com/]viagra soft online[/url]

  24. [url=http://nicialis.com/]generic cialis online usa[/url] [url=http://iveromectinforhumans.online/]ivermectin nz[/url] [url=http://trental.online/]trental generic[/url] [url=http://sildenafilcitrat.com/]sildenafil from mexico[/url] [url=http://zofran.online/]how much is zofran cost[/url] [url=http://propranolol.online/]propranolol 160 mg tablets[/url] [url=http://ivermectinm.com/]ivermectin new zealand[/url] [url=http://sildenafilgenerictb.com/]generic sildenafil 20 mg cost[/url] [url=http://brandnewviagra.com/]best place buy viagra online[/url] [url=http://iveromectinforsale.online/]ivermectin australia[/url]

  25. [url=http://sertraline.quest/]zoloft.com[/url] [url=http://tviagra.com/]buy generic viagra online usa[/url] [url=http://buyiveromectin.com/]ivermectin generic[/url] [url=http://nicialis.com/]cialis daily coupon[/url] [url=http://iveromectinforhumans.online/]how to get ivermectin[/url] [url=http://cialistb.com/]cialis 1000 mg[/url] [url=http://genericialis.com/]cialis viagra online[/url] [url=http://sildenafilol.com/]sildenafil 88[/url] [url=http://tadalafilvip.com/]how much is tadalafil 5mg[/url] [url=http://tizanidine.quest/]tizanidine 4mg online[/url]

  26. [url=http://tadalafilnd.com/]tadalafil 40 mg from india[/url] [url=http://tadalafilvip.com/]usa tadalafil[/url] [url=http://iveromectinforhumans.com/]ivermectin uk[/url] [url=http://generiviagra.com/]discount viagra online[/url] [url=http://diclofenac.quest/]voltaren cream coupon[/url] [url=http://buygenericcialis.quest/]cialis 5 mg tablet generic[/url] [url=http://canadatadalafil.com/]online generic tadalafil[/url] [url=http://buyiverpill.com/]where to buy ivermectin[/url] [url=http://trimox.online/]amoxicillin 750 us[/url] [url=http://zofran.online/]zofran medication over the counter[/url]

  27. [url=http://cialisot.com/]how to buy generic cialis online[/url] [url=http://iveromectinforsale.online/]ivermectin stromectol[/url] [url=http://singulair.quest/]singulair.com[/url] [url=http://cialisub.com/]where to get cialis prescription[/url] [url=http://axsildenafil.com/]sildenafil tablets 100mg[/url]

  28. [url=http://ivermectinforsale2021.online/]buy ivermectin cream for humans[/url] [url=http://sildenafilcitratetbs.com/]sildenafil for sale usa[/url] [url=http://ivermectinvi.com/]stromectol south africa[/url] [url=http://iveromectinforsale.com/]stromectol generic[/url] [url=http://cialisot.com/]cheapest generic cialis overnight shipping[/url] [url=http://ivermectinxs.com/]ivermectin 3mg dose[/url] [url=http://tenormin.quest/]tenormin price in india[/url] [url=http://sildenafilvb.com/]where to buy sildenafil uk[/url] [url=http://trental.online/]trental generic[/url] [url=http://tadalafildiscounttabs.com/]tadalafil online cost[/url]

  29. [url=http://wellbutrin.quest/]wellbutrin canadian pharmacy[/url] [url=http://sildenafilsmart.com/]canadian prices for sildenafil[/url] [url=http://cialisdtablets.com/]cost cialis 5 mg[/url] [url=http://rxivermectin.online/]ivermectin 24 mg[/url] [url=http://iveromectinforsale.com/]stromectol ivermectin tablets[/url]

  30. [url=http://iveromectinforhumans.online/]stromectol oral[/url] [url=http://buyiveromectin.com/]stromectol tablets for humans for sale[/url] [url=http://viagrafm.com/]order viagra online paypal[/url] [url=http://sildenafilnoprescription.com/]sildenafil tablets online in india[/url] [url=http://zanaflex.quest/]tizanidine caps[/url] [url=http://ivermectinforsale.online/]ivermectin malaria[/url] [url=http://viagrabuyb.com/]100 mg viagra[/url] [url=http://antabuse.quest/]antabuse prescription online[/url] [url=http://advair.quest/]advair prescription cost[/url] [url=http://propranolol.online/]propranolol 80 mg[/url]

  31. First off I want to say fantastic blog! I had a quick question that I’d like to ask if
    you do not mind. I was curious to know how you center yourself and clear your thoughts prior to writing.

    I have had trouble clearing my mind in getting my
    thoughts out. I truly do enjoy writing but it just seems like the first 10 to 15 minutes
    are generally wasted simply just trying to figure out how to begin.
    Any ideas or hints? Many thanks!

  32. [url=http://ivermectin.red/]stromectol price usa[/url] [url=http://genericviagra.quest/]viagra 100 mg coupon[/url] [url=http://buyevermectin.com/]stromectol online[/url] [url=http://trazodone.online/]trazodone 150 mg[/url] [url=http://cheapviagra.online/]can you buy generic viagra in canada[/url]

  33. [url=http://trazodone.online/]trazodone 300 mg tablet[/url] [url=http://buygenericviagra.quest/]buy viagra 500mg[/url] [url=http://orderviagra.quest/]viagra 100 price india[/url] [url=http://hydroxychloroquine.sale/]plaquenil 200mg tablets[/url] [url=http://sildenafil.men/]sildenafil 12.5 mg[/url] [url=http://sildenafil.delivery/]sildenafil 50 mg mexico[/url] [url=http://buyhydroxychloroquine.quest/]hydroxychloroquine 2[/url] [url=http://robaxin.quest/]where to buy robaxin[/url] [url=http://buyantibiotics.quest/]suprax over the counter[/url] [url=http://ivermectin.icu/]stromectol covid 19[/url]

  34. [url=http://fildena.quest/]cheap fildena[/url] [url=http://ivermectin.golf/]ivermectin 50 mg[/url] [url=http://elimite.quest/]elimite 5 cream[/url] [url=http://ciprofloxacin.online/]medicine ciprofloxacin 500mg[/url] [url=http://cialis.eus/]cialis daily use coupon[/url] [url=http://silagra.online/]buy silagra 100[/url] [url=http://prednisone.monster/]prednisone online for sale[/url] [url=http://iverpill.com/]stromectol[/url] [url=http://buycheapcialis.quest/]cialis 100mg price[/url] [url=http://ivermectin.gen.in/]ivermectin cream[/url]

  35. [url=http://ivermectin.digital/]ivermectin lotion 0.5[/url] [url=http://cheapcialis.quest/]cialis online usa[/url] [url=http://hydroxychloroquine.fun/]plaquenil oct[/url] [url=http://ivermectin.mobi/]stromectol cream[/url] [url=http://sildenafil.monster/]over the counter generic sildenafil[/url]

  36. [url=http://strattera.online/]strattera price south africa[/url] [url=http://cialis.how/]cialis 2.5 mg price india[/url] [url=http://cheapviagra.quest/]how much is viagra uk[/url] [url=http://ivermectin.codes/]ivermectin 200 mcg[/url] [url=http://ivermectin.onl/]ivermectin 500mg[/url] [url=http://sildenafil.delivery/]price generic sildenafil[/url] [url=http://hydroxychloroquine.live/]generic for plaquenil[/url] [url=http://ivermectinpills.quest/]where to buy ivermectin[/url] [url=http://lisinopril.quest/]lisinopril 40 mg tablet[/url] [url=http://orderviagra.online/]rx viagra[/url]

  37. [url=http://hydroxychloroquine.monster/]plaquenil 500[/url] [url=http://lisinopril.quest/]buy lisinopril online[/url] [url=http://tadalafil.monster/]buy tadalafil no rx[/url] [url=http://ivermectin.sbs/]stromectol medicine[/url] [url=http://sildenafil.onl/]cost of sildenafil in canada[/url] [url=http://ivermectin.promo/]stromectol covid[/url] [url=http://cheapcialis.quest/]generic cialis online pharmacy canada[/url] [url=http://ivermectin.red/]stromectol tablets uk[/url] [url=http://buylisinopril.quest/]generic lisinopril 5 mg[/url] [url=http://strattera.online/]strattera online purchase[/url]

  38. [url=http://buygenericviagra.quest/]viagra gel tabs[/url] [url=http://ivermectin.party/]stromectol ebay[/url] [url=http://cheapcialis.quest/]best generic cialis[/url] [url=http://ivermectin.golf/]stromectol cream[/url] [url=http://albendazole.online/]albendazole 200mg[/url]

  39. [url=http://onlinecialisx.com/]cialis india purchase[/url] [url=http://buytadalafl.com/]tadalafil tablets 20 mg cost[/url] [url=http://cephalexinbuy.online/]keflex brand name[/url] [url=http://tadalafilgmed.com/]tadalafil 10mg india[/url] [url=http://tadalafil.live/]tadalafil 20mg price comparison[/url]

  40. [url=http://tadalafilgmed.com/]tadalafil online price[/url] [url=http://bactrim.monster/]bactrim ds tablets online[/url] [url=http://viagra.pet/]viagra online prescription canada[/url] [url=http://onlinedrugstore.quest/]online pharmacy in germany[/url] [url=http://prednisolone.monster/]prednisolone 25mg[/url] [url=http://sildenafilorder.com/]sildenafil 100mg price in india[/url] [url=http://ivermectin.pink/]stromectol cream[/url] [url=http://cleocin.quest/]cleocin antibiotics[/url] [url=http://accutane.monster/]where to get accutane without prescription[/url] [url=http://lipitor.monster/]lipitor 40 mg price australia[/url]

  41. [url=http://ventolin.monster/]ventolin inhaler non prescription[/url] [url=http://buylexapro.online/]lexapro tablets price[/url] [url=http://cialis.pet/]buy generic cialis online[/url] [url=http://onlinecialisx.com/]cialis daily price[/url] [url=http://viagrabluetabs.com/]can i buy viagra[/url] [url=http://viagrageneric.monster/]buy female viagra[/url] [url=http://ivermectin.builders/]buy ivermectin canada[/url] [url=http://prednisolone.monster/]prednisolone over the counter australia[/url] [url=http://ivermectin.media/]stromectol canada[/url] [url=http://ivermectin.support/]stromectol for humans[/url]

  42. [url=http://viagraebuy.com/]legal viagra online[/url] [url=http://malegra.online/]malegra 100 cheap[/url] [url=http://cialis.pet/]generic cialis uk[/url] [url=http://cleocin.quest/]cleocin 159 mg[/url] [url=http://buysildenafil.online/]cheapest sildenafil online[/url]

  43. [url=http://sildenafil.click/]sildenafil 110 mg capsule[/url] [url=http://sildenafilcitra.com/]sildenafil online[/url] [url=http://viagrageneric.monster/]viagra website[/url] [url=http://sildenafilorem.com/]sildenafil fast shipping[/url] [url=http://cialisty.com/]buy generic cialis online[/url] [url=http://triamterene.quest/]triamterene 37.5 mg tab[/url] [url=http://cialiseddrug.com/]buy generic cialis online canada[/url] [url=http://brandnewviagra.online/]generic viagra capsules[/url] [url=http://tadalafilzrem.com/]tadalafil from mexico[/url] [url=http://orangecialis.com/]generic cialis discount[/url]

  44. [url=http://ivermectin.rodeo/]ivermectin in india[/url] [url=http://cleocinbuy.online/]clindamycin 300 mg rx[/url] [url=http://allopurinolbuy.online/]allopurinol tablets[/url] [url=http://ivermectin.network/]ivermectin price[/url] [url=http://hydrochlorothiazide.monster/]zestoretic 20[/url] [url=http://ivermectin.loan/]ivermectin price[/url] [url=http://bactrim.monster/]order bactrim[/url] [url=http://ventolin.monster/]ventolin 200[/url] [url=http://tetracycline.monster/]antibiotic tetracycline[/url] [url=http://zovirax.quest/]zovirax cream price canada[/url]

  45. [url=http://buylexapro.online/]buy lexapro online without prescription[/url] [url=http://ivermectin.network/]ivermectin 50 mg[/url] [url=http://sildenafilorem.com/]sildenafil 200mg online[/url] [url=http://tadalafil.tech/]buy 40 mg tadalafil online[/url] [url=http://onlinepharmacy.quest/]online pharmacy delivery delhi[/url]

  46. [url=http://prednisolone.monster/]prednisolone 25mg price[/url] [url=http://viagra.pet/]viagra in europe[/url] [url=http://hydrochlorothiazide.monster/]hydrochlorothiazide 12.5 capsule[/url] [url=http://tadalafil.boutique/]tadalafil cheap uk[/url] [url=http://buycialisgenericpills.com/]cialis cost australia[/url] [url=http://sildenafil.boutique/]best rx prices for sildenafil[/url] [url=http://tadalafil.men/]tadalafil 5mg tablets india[/url] [url=http://buyaccutane.online/]buy accutane cream[/url] [url=http://ivermectin.media/]buy ivermectin pills[/url] [url=http://ventolin.monster/]ventolin uk prescription[/url]

  47. It is perfect time to make some plans for the future and it is time to be happy.
    I’ve read this post and if I could I want to suggest you few interesting things or tips.
    Perhaps you could write next articles referring to
    this article. I wish to read even more things about it!

  48. Pretty section of content. I just stumbled upon your weblog and in accession capital
    to assert that I get actually enjoyed account your blog
    posts. Anyway I will be subscribing to your
    augment and even I achievement you access consistently quickly.

  49. I’ll right away clutch your rss as I can not find your e-mail subscription link or newsletter service.
    Do you have any? Please let me recognise so that I may just subscribe.
    Thanks.

  50. [url=http://cialisbestprice.online/]best price for cialis 2.5 mg[/url] [url=http://sildenafilbuy.online/]sildenafil 100 mg lowest price[/url] [url=http://tadalafilcialis.online/]cialis online pharmacy paypal[/url] [url=http://buycialisonline.quest/]purchase cialis in usa[/url] [url=http://cheapgenericviagra.online/]where can i purchase viagra over the counter[/url]

  51. [url=http://canadacialis.quest/]cialis for women online[/url] [url=http://noprescriptionviagra.quest/]mexico viagra pills[/url] [url=http://modafinil.quest/]provigil drug[/url] [url=http://buycialispills.online/]order cialis canadian pharmacy[/url] [url=http://tadalafil20mg.online/]best pharmacy buy tadalafil[/url]

  52. [url=http://ivermex.online/]cost of ivermectin 1% cream[/url] [url=http://orderiveromectin.online/]stromectol nz[/url] [url=http://buycialisonline.quest/]how to order cialis from canada[/url] [url=http://cialispharmacy.online/]discount cialis pill[/url] [url=http://buycheapcialisonline.quest/]how to get cialis prescription australia[/url] [url=http://cialiscanada.quest/]cialis us pharmacy[/url] [url=http://cialisbestprice.online/]cialis fast delivery usa[/url] [url=http://cialistablets.online/]generic cialis usa[/url] [url=http://canadacialis.quest/]cialis for sale in usa[/url] [url=http://ivermex.com/]ivermectin lice oral[/url]

  53. [url=http://nonprescriptionviagra.quest/]how to buy viagra online in india[/url] [url=http://cialiscanada.quest/]cialis canada online pharmacy no prescription[/url] [url=http://onlinecialis.online/]generic 5mg cialis[/url] [url=http://ivertabs.com/]stromectol pills[/url] [url=http://sildenafil50mg.online/]sildenafil 100mg discount[/url] [url=http://iverm.online/]ivermectin 6mg tablet for lice[/url] [url=http://viagraoverthecounter.online/]buy viagra 100mg online uk[/url] [url=http://fluoxetine.monster/]where can i get fluoxetine[/url] [url=http://orderiveromectin.online/]ivermectin 3[/url] [url=http://tadalafilpills.quest/]order tadalafil[/url]

  54. [url=http://cialispill.online/]buy soft cialis[/url] [url=http://buygenericviagraonline.online/]online pharmacy viagra prescription[/url] [url=http://ivermectinforhumans.monster/]ivermectin online[/url] [url=http://tadalafilpills.quest/]tadalafil generic cost[/url] [url=http://cialistablets.online/]discount cialis generic[/url] [url=http://buycialispills.online/]cialis daily cost[/url] [url=http://orderiveromectin.online/]buy ivermectin for humans australia[/url] [url=http://ivermectinonline.quest/]stromectol online[/url] [url=http://orderviagraonline.quest/]where to buy viagra over the counter in usa[/url] [url=http://fluoxetine.monster/]fluoxetine tablets 60 mg[/url]

  55. [url=http://buyivermectin.monster/]ivermectin topical[/url] [url=http://ivermectincv.quest/]ivermectin 3mg tablets price[/url] [url=http://wellbutrin.online/]wellbutrin 20 mg[/url] [url=http://cialisbestprice.online/]buy cialis black online[/url] [url=http://prozac.monster/]prozac brand[/url]

  56. Wow, superb weblog layout! How lengthy have you ever been running a blog for? you make blogging look easy. The whole glance of your web site is excellent, let alone the content!

  57. [url=http://cialispharmacy.online/]cialis 40mg australia[/url] [url=http://realviagra.quest/]can i buy viagra over the counter uk[/url] [url=http://sildenafil50mg.quest/]where can i get sildenafil with no prescription[/url] [url=http://fluoxetine.monster/]fluoxetine cost nz[/url] [url=http://tadalafilgeneric.quest/]tadalafil[/url] [url=http://otcivermectin.online/]ivermectin cost uk[/url] [url=http://orderiveromectin.quest/]stromectol generic[/url] [url=http://wellbutrin.online/]wellbutrin xl generic[/url] [url=http://cialisfromcanada.online/]cialis prescription usa[/url] [url=http://amitriptyline.monster/]amitriptyline pharmacy[/url]

  58. [url=http://viagrawithoutadoctor.quest/]viagra tablets[/url] [url=http://fluoxetine.quest/]fluoxetine 10 mg tablet uk[/url] [url=http://escitalopram.quest/]generic lexapro cost[/url] [url=http://levitravardenafil.online/]levitra cost canada[/url] [url=http://buyingviagra.quest/]blue pill viagra[/url] [url=http://costofviagra.quest/]can i buy viagra without prescription[/url] [url=http://furosemidelasix.online/]lasix 240 mg[/url] [url=http://paxil.online/]paroxetine pills 40 mg[/url] [url=http://modafinilprovigil.online/]modafinil medication[/url] [url=http://disulfiram.quest/]antabuse ordering[/url]

  59. Interesting blog! Is your theme custom made or did you download it from somewhere? A design like yours with a few simple adjustements would really make my blog jump out. Please let me know where you got your theme. Many thanks

Leave a Reply

Your email address will not be published. Required fields are marked *

Content Explorer

356 Responses

  1. This is really interesting, You’re a very skilled blogger.
    I have joined your rss feed and look forward to seeking more of your great post.
    Also, I have shared your website in my social networks! oy (Kenneth)

  2. This is really interesting, You’re a very skilled blogger.

    I have joined your rss feed and look forward to seeking more of your great post.
    Also, I have shared your website in my social networks! oy (Kenneth)

  3. I’ve been exploring for a bit for any high-quality
    articles or weblog posts on this kind of space . Exploring in Yahoo I ultimately stumbled upon this site.
    Studying this information So i’m satisfied to express that I
    have a very just right uncanny feeling I discovered exactly what I
    needed. I such a lot surely will make sure to do not put out of your mind this
    site and provides it a glance on a continuing basis.

  4. This is really interesting, You are a very skilled blogger.
    I have joined your rss feed and look forward to seeking more of your wonderful
    post. Also, I’ve shared your site in my social networks!

  5. First off I want to say awesome blog! I had a quick
    question that I’d like to ask if you do not mind. I was curious to know
    how you center yourself and clear your mind before writing.

    I have had difficulty clearing my thoughts in getting my thoughts out.
    I do enjoy writing however it just seems like the first 10 to 15 minutes are generally lost simply just trying to figure out how to begin.
    Any ideas or tips? Appreciate it! ug; writeablog.net,

  6. First off I want to say awesome blog! I had a quick
    question that I’d like to ask if you do not mind.
    I was curious to know how you center yourself and clear your mind before writing.
    I have had difficulty clearing my thoughts
    in getting my thoughts out. I do enjoy writing however it just seems
    like the first 10 to 15 minutes are generally lost simply just trying to figure out how
    to begin. Any ideas or tips? Appreciate it! ug; writeablog.net,

  7. hey there and thank you for your information – I’ve definitely picked up something new
    from right here. I did however expertise several technical points using
    this web site, as I experienced to reload the site many times previous to I could get
    it to load properly. I had been wondering if your hosting is OK?
    Not that I am complaining, but slow loading instances times will
    sometimes affect your placement in google and could damage your high quality score if advertising and
    marketing with Adwords. Anyway I am adding this RSS to my email and
    could look out for a lot more of your respective fascinating content.
    Ensure that you update this again soon. uo (https://postheaven.net)

  8. hey there and thank you for your information – I’ve definitely picked up something new from right here.
    I did however expertise several technical points using
    this web site, as I experienced to reload the site many times previous to I could get it to load properly.
    I had been wondering if your hosting is OK? Not that I
    am complaining, but slow loading instances times will sometimes affect your
    placement in google and could damage your high quality score if
    advertising and marketing with Adwords. Anyway I am adding this RSS to my email and could look out for a lot more of your respective fascinating content.
    Ensure that you update this again soon. uo (https://postheaven.net)

  9. I was curious if you ever considered changing the structure of your blog?
    Its very well written; I love what youve got
    to say. But maybe you could a little more in the way of content so people could connect with
    it better. Youve got an awful lot of text for only having one or
    2 images. Maybe you could space it out better? nc (http://www.bonanza.com)

  10. I was curious if you ever considered changing the structure of your blog?
    Its very well written; I love what youve got to say. But maybe you could
    a little more in the way of content so people could connect with it better.
    Youve got an awful lot of text for only having one or 2 images.

    Maybe you could space it out better? nc (http://www.bonanza.com)

  11. You really make it seem so easy together with your presentation but I to find this matter to be really one thing which I feel I would by no means understand. It sort of feels too complex and very broad for me. I am taking a look ahead for your subsequent put up, I will attempt to get the hang of it!

  12. Oh my goodness! Impressive article dude! Thank
    you so much, However I am experiencing problems with your RSS.
    I don’t understand why I cannot join it. Is there anyone else having
    identical RSS problems? Anybody who knows the answer will you kindly
    respond? Thanx!! rf (godotengine.org)

  13. Oh my goodness! Impressive article dude! Thank you so much, However
    I am experiencing problems with your RSS. I don’t understand
    why I cannot join it. Is there anyone else having identical RSS problems?
    Anybody who knows the answer will you kindly respond?
    Thanx!! rf (godotengine.org)

  14. I do not know if it’s just me or if everybody else encountering problems with your site.

    It seems like some of the written text within your posts are running off the screen. Can someone else
    please provide feedback and let me know if this is happening to them
    too? This may be a problem with my browser because I’ve had this happen before.
    Thanks jo [Phil]

  15. I do not know if it’s just me or if everybody else encountering problems with your site.
    It seems like some of the written text within your posts are running off the screen. Can someone else please provide
    feedback and let me know if this is happening to them too?
    This may be a problem with my browser because I’ve had this happen before.
    Thanks jo [Phil]

  16. We are a bunch of volunteers and starting a brand new scheme in our community.
    Your web site provided us with valuable information to work
    on. You’ve performed an impressive job and
    our entire group shall be grateful to you. nk (Milton)

  17. We are a bunch of volunteers and starting a brand new scheme
    in our community. Your web site provided us with valuable
    information to work on. You’ve performed an impressive job
    and our entire group shall be grateful to you. nk (Milton)

  18. A motivating discussion is worth comment. I believe that you ought to publish more
    about this issue, it may not be a taboo matter but typically people don’t speak about such issues.

    To the next! Cheers!! vn – Maira,

  19. A motivating discussion is worth comment. I believe that you ought to
    publish more about this issue, it may not be a taboo matter but typically people don’t speak about such issues.
    To the next! Cheers!! vn – Maira,

  20. Hi! I could have sworn I’ve visited this blog before but after looking at some of the articles I realized it’s new to me.
    Regardless, I’m certainly happy I came across it and I’ll be bookmarking it and
    checking back frequently! cq (http://qooh.me)

  21. Hi! I could have sworn I’ve visited this blog before but
    after looking at some of the articles I realized it’s new to me.

    Regardless, I’m certainly happy I came across it and I’ll be bookmarking it and checking back frequently! cq (http://qooh.me)