text:
Sector focus – changes in consumer spending and attitudes?
Posted December 10, 2019 by Tony Groom
It will be interesting to see the analysis of consumer spending once the Christmas and peak holiday buying season is over.
Data throughout the year has indicated that people are less willing to splash out on so-called "big ticket" items, whether online or on the High Street.
Whether this is being caused by a change in attitudes to consumption or to increasing worries about job security and income is not yet clear. Consumption assumes spending on basic needs and then discretionary spending on goods and services including leisure.
Influences on consumer spending
Clearly, consumers' confidence in their current and future financial situations are a key driver in the willingness to spend at least in the short term.
It is influenced in part by the changing costs of expenditure on such things as housing, fuel, food, clothing and travel costs, which are monitored annually by the Consumer Price Index (CPI), where the weighted average of prices of a basket of consumer goods and services indicates the level of and changes to the rate of inflation in the economy.
This has left less for discretionary spending.
An indicator of spending on capital goods is this year's fall in the purchases of new cars, attributed by the Society of Motor Manufacturers and Traders to weak business and consumer confidence, economic uncertainty and confusion over diesel and clean air zones.
There has also been a reduction in consumer spending on both the High Street and online which has contributed to the closures of High Street retailers, and reduced profits of online retailers such as Asos, whose profits were reportedly down 68% in the year up to October, altbough Asos attributed this to IT problems in its warehouses.
A study by the card machine provider Paymentsense at the start of the year predicted that over half (56%) of UK consumers were planning or considering cutting their spending over the coming year by cutting back on purchases of goods like new clothes (31%), sweets, crisps, cake and chocolate (27%), and switching to less expensive toiletries (18%). This was closely followed by spending less on jewellery and holidays which require a flight (both 17%).
This is not surprising given that research by KPMG and the Recruitment and Employment Confederation (REC) showed that the number of permanent job appointments fell in November as growth in the demand for staff fell to a 10-year low.
Employment in the manufacturing sector also fell for the eighth month in a row and the pace of job losses was the steepest since September 2012 according to the latest IHS Markit/Cips monthly snapshot.
It would be interesting to see how many people (mainly women) have lost their jobs in the ongoing carnage in High Street Retail.
At the same time, the Office for National Statistics (ONS) has reported that average household financial debt had risen 9% to £9,400 in the two years to March 2018. The biennial study showed that personal loans accounted for £35bn of total household debts, £32bn is from student loans, £25bn is hire purchase, and £22bn is on credit cards, while the remainder includes £3bn of overdrafts. Much of this, it has been argued, is due to increased living costs, such as rent, council tax and other bills.
It is fairly certain, therefore, that worries about the future and job insecurity are influencing consumer spending currently.
Having said all this, however, the recent Black Friday sales saw an average 7% increase in sales compared to last year.
This could be seen as a change in consumer spending to waiting to buy until prices are, allegedly, reduced.
It will take more than a year to determine whether a longer-term change in consumer spending habits is taking place, however, there are other factors at play.
Concern for the environment and global warming have risen to the top of the agenda, in particular for younger consumers, which has encouraged people to think twice about buying fast fashion and disposable and other plastic items.
Buying second-hand has been re-branded as "pre-loved chic" and the demand for longer-lasting household products such as fridges, washing machines and the like has prompted the EU to regulate that manufactures must stock spare parts for ten years for such items.
Then there have been the movements encouraging people to buy from local independent retailers as well as the rise of local groups specialising in helping people to repair household items such as small kitchen appliances.
Guy Moreve, CMO of Paymentsense, said "…. our study reveals that instead of aspirational health or lifestyle goals many UK consumers are increasingly concerned about just keeping up as living costs climb more quickly than salaries.
"Another growing trend is ethical consumption, and over 2018 we saw increased awareness and attention to environmentally friendly lifestyle habits such as veganism and sustainable fashion. We feel that this coming year will see continued movement in this area, as more people adopt ethical attitudes."
Time will tell whether the "shop till you drop" love affair is finally over and there is a sustained change in consumer spending.
Tags: Consumer Spending
Update – sacked Small Business Commissioner speaks out
Posted December 5, 2019 by Tony Groom
The now-ex Small Business Commissioner, Paul Uppal, has accused the Government of thwarting attempts to help SMEs tackle the late payment scourge.
Mr Uppal has reportedly blamed Whitehall for pushing him out of a role which, he says, is under-resourced and ignored by government.
He said that his office was met with "radio silence" from civil servants and ministers over his approach to the job and that his budget was too small to tackle the "huge task" of getting big companies to pay small businesses on time.
He also revealed a little more detail about the reason for his sacking, which was "a disagreement over an alleged conflict of interest related to an unpaid, interim advisory role in another government-backed small business scheme".
The Times, is the only national broadsheet to cover the story, although it has been picked up by the online publication smallbusiness.co.uk.
It seems that The Times is becoming the champion of SMEs, carrying another article on the same day about a poll from the Chartered Institute of Procurement & Supply (CIPS) that found that almost one in six businesses said most payments are settled late. Malcolm Harrison, chief executive of CIPS, said there was a "rotten culture" of late payment. The organisation has been calling for big businesses that are slow to settle invoices to be barred from public sector work.
Another poll out this week from Xero, the online accountancy platform, revealed that a quarter of small business owners believe their company will go bust within 5 years, with 54% warning that late payments posed a risk to their firm.
The FSB (Federation of Small Businesses) has repeatedly said that late payment is the cause of an estimated 50,000 small businesses go under each year because of "pernicious" late payment. This figure might be questioned given that there were 17,454 formal company insolvencies in 2018 however I accept a liberal interpretation to allow for sole traders and companies ceasing to trade.
Does the Government care about or understand the pressures on SMEs?
According to research from the Department for Business, Energy & Industrial Strategy, at the start of 2018 a massive 99.9% of the 5.7 million businesses in the UK are small or medium-size businesses (SMEs). Of these only 0.6% of businesses in the UK are classed at medium-sized businesses.
This arguably makes SMEs an essential contributor to the economy and the provision of jobs.
Yet there has been no word on the appointment of a replacement for Mr Uppal, since I reported in my blog on November 19 the Government's statement: "An open recruitment campaign to appoint a new Small Business Commissioner will get started immediately."
Allegedly Fiona Dickie, the Deputy Pubs Code Adjudicator, was to provide oversight in the Small Business Commissioner role until early November, pending the appointment of an interim commissioner.
However, there has been a deafening silence from her, the General Election notwithstanding.
It has to be asked why an unpaid, voluntary advisory role for Mr Uppal was deemed to be a conflict of interest with his official position?
I have asked previously and I repeat my question: has the Government been successfully lobbied by some large corporates to roll back this initiative? Was he becoming too successful?
Tags: late payments, small business commissioner, SMEs
December Key Indicator: Cars v Public Transport
Environmentalists advocate the use of public transport instead of cars as this will reduce carbon emissions and help combat climate change.
Achieving this is not only about changing people's attitudes but will involve a significant shift in government strategy and investment to make public transport as convenient as cars.
This is an issue for urban and rural locations outside London, which has a relatively high usage of public transport and arguably offers an excellent network buses, tubes and trains that make it very convenient for the public.
Arguably, efforts to reduce car use in London have been helped by the introduction of the congestion charge and both the Low Emission and Ultra Low Emission Zones (LEZ). Indeed, other cities, such as Bristol, are said to be considering similar restrictions.
It is certainly the case that New Car Registrations have been falling drastically in the last two years.
According to figures published by Autoexpress, the UK's new-car market suffered a significant decline in October 2019, with 6.7 per cent fewer registrations than in October 2018.
But I do not believe this is due to changing attitudes or any improvement of public transport infrastructure, but instead think it is down to the congestion of cars clogging up roads and falling consumer confidence as reflected by a drop in spending on capital items.
The Urban Transport Group research is claiming that significant shifts "are changing the face of transport and travel in city regions" as reported by Citymetric. As one example, it reports that more people now commute into central Birmingham by rail than car, with growth in rail use also appearing in other locations including Huddersfield (by 91 per cent), Coventry (by 143 per cent) and Newton-le- Willows (by 120 per cent).
However, the picture of changing travel patterns is much more mixed and nuanced than the above would suggest and one of the most comprehensive analysis of travel patterns is the annual Government publication, the National Travel Survey (NTS).
Its most recent annual report published in November and covering the year to the end of 2018 says: "The average number of yearly trips made by people living in England have increased each year from 2015 to 2018. The 986 trips people made on average in 2018 was the highest since 2009."
However, it also finds that the increase is mostly accounted for by an increase in walking trips and also that between 2002 and 2018, average trips, distance and time have decreased. Cycling trips have also increased by 50% between 2002 and 2015, it finds.
It also finds that the proportion of households without a car has fallen from 48% in 1971 (based on the Census) to 24% in 2018 while the proportion of households with more than one car increased over this period, from 8% to 35%.
Nevertheless, as the report points out, the devil is in the detail, of which there is a great deal: "the many factors [for the change] might include changing demographic patterns, changing patterns of trips, and the impact of new technologies influencing the demand for travel, for example the increase in online social networking, the capability for home working and online shopping.
On public transport, however, the picture is mixed with an increase in rail trips and distances per person and a decrease in local bus use.
Surprisingly, commuting trips have also decreased in recent years which the survey suggests is due to workers travelling to work on fewer days per week, a growth in trip-chaining (where people combine two or more trips for differing purposes), a growth in the number of workers who do not have a fixed usual workplace and a growth in working from home, and part-time and self-employment.
Is it time to rethink public transport provision?
Both rail and bus transport were deregulated in the mid-1990s, leading to such services being contracted out to private providers.
Arguably, particularly with bus services, this has led to a massive decline in rural bus services because the provider companies are businesses and not interested in uneconomic, loss-making routes. As local authorities have been ever more cash strapped, many have had to reduce or cancel subsidised, loss-making rural routes, leaving rural dwellers and businesses with little option but to use their cars.
According to Better Transport, the campaigning group, "Since 2009, well over 3,000 local authority supported bus services have been cut or reduced".
However, reasons given by respondents in the NTS for not using public transport more include:
Rising ticket prices;
Poor customer service;
Rush hour inconvenience;
Delays and unreliability.
Clearly, it is time to revisit public transport infrastructure if we are to reduce car usage and combat climate change.
Tags: environmental change, public transport
Do High Street banks care about their customers?
Posted November 28, 2019 by Tony Groom
High Street banks rely on providing a service to customers yet too often it seems that customers are the last thing banks care about.
Of course, banking is also a business and therefore subject to the pressures and responsibilities of any business to remain compliant and profitable.
However, I would argue that their existence is entirely down to the loyalty of their customers. Yet, customer loyalty is being stretched by the seemingly endless IT problems and closure of branches and ATMs that inconvenience customers, particularly SMEs in rural areas.
Most recently, TSB, encountered yet another IT failure, just a year after the mammoth meltdown which cost it an estimated £366m. To compound the distress for customers, it has just announced that it intends to close another 86 branches, cutting up to 400 jobs over the course of next year.
IT failures have not been confined to TSB, however, and in 2018, the Financial Conduct Authority (FCA), said the number of incidents reported to it had increased by 187% in the past year, 65% of which were from high street banks.
This has prompted a committee of MPs to call for faster action in resolving complaints and awarding compensation, along with more decisive regulatory action, calling the current situation unacceptable.
According to the consumer organisation Which? "Banks and building societies closed a total of 3,312 branches in between January 2015 and August 2019, with an average of 55 closing each month".
Which? has been tracking the closures and its breakdown shows 1,094 for the RBS Group (NatWest, Royal Bank of Scotland and Ulster Bank) and 569 for the Lloyds Group (Lloyds Bank, Halifax and Bank of Scotland) while it estimates that Barclays has closed approaching 500, although the bank has declined to share figures with Which?
In addition, the organisation has found that 5,000 free-to-use ATMs had been lost between January 2018 and May 2019, the vast majority in rural and more deprived areas.
But it has not only been IT failures and branch closures that have arguably reduced trust in banking.
Only last month, Barclays announced its debit card holders would be able to deposit money but not withdraw cash from a post office counter from January 2020 as a cost saving measure to save £7 million. Following a huge outcry that situation was quickly reversed.
Nevertheless, it was an indication of the general attitudes of the traditional High Street banks given the number of branches and even ATMs that have been disappearing from villages and towns throughout the UK, on the tenuous argument that customers prefer to bank online. And despite the well-known unreliability of internet connections in such locations.
It all adds up to a massive headache for anyone who lives or works outside of a main city location.
So it is with some scepticism and a few hollow laughs that we note the latest Government initiative, a SME Financial Charter, to which, approximately 20 banks and financial service providers have signed up.
The charter is aimed to support SMEs through Brexit and signatories make five pledges:
We're open for business and ready to lend;
We'll help you prepare for Brexit and beyond;
We'll support your application and signpost other options if needed;
We'll treat you fairly at all times;
We'll work with the government-owned British Business Bank to support SMEs.
The charter is voluntary and clearly limited in scope.
It would have been more to the point if it had been an ongoing pledge, not confined to helping SMEs with Brexit and its aftermath, and if it had been given some regulatory teeth to encourage High Street banks to offer a real service to SMEs and other customers.
Tags: customer service, High Street banks
Fair treatment of employees is a cornerstone for improving productivity
Improving productivity is a concern for all businesses but it is harder to achieve if employees do not believe they are receiving fair treatment.
As I have said in many previous blogs, a motivated workforce is more likely to go the extra mile if they feel valued as people, this means managers treating them with respect, listening to them, showing consideration to them, recognising their contribution, rewarding their contribution and protecting them from inappropriate behaviour by others at work. In summary treating them with respect and showing them that their effort is valued.
Recognition can simply be saying "thank you" for a job well done, it is not just about money.
However, money can become an issue when there is a clear disparity in pay. While discrimination is illegal and applies to any disparity of remuneration on grounds of gender, race, religion or ethnicity, this is not about legislating for staff motivation.
To be motivated staff need to feel they are treated equally which means people doing the same job expecting the same pay and other benefits albeit they will acknowledge any adjustment to pay scales based on valid reasons such as experience, length of service, sickness record, additional responsibilities or other factors. The key is that the reasons for any difference in pay are legal, explicit and understood by everyone.
Two years ago, in April 2017, the government made some efforts to address unequal pay treatment with the introduction of mandatory gender pay gap reporting (GPGR) for both the private and public sectors employing 250-plus people.
It then launched an inquiry into whether organisations should also be required to report on the pay differentials between people from different ethnic backgrounds, although as yet no decision has been reached largely, it is argued, because ethnicity is a very complex subject.
GPGR is regulated by the Equality and Human Rights Commission, and while it can take businesses to court for non-compliance and obtain an order to force them to, it has no enforcement powers beyond "naming and shaming" them.
So recent reports on the situation two years on are not encouraging reading.
The BBC cited figures from the ONS (Office for National Statistics) for the year to April 2019, saying that the gender pay gap for full-time workers rose to 8.9% – up from 8.6% the previous year.
Quoted in the article is TUC general secretary Frances O'Grady: "Government must pick up the pace. It's clear that publishing gender pay gaps isn't enough on its own. Companies must also be legally required to explain how they'll close them."
Andy Haldane, a member of the Bank of England's Monetary Policy Committee, has recently said that the GPGR obligation should be widened to include SMEs with 30 or more employees, something that was dismissed by FSB chairman Mike Cherry because there would be a number of practical difficulties in businesses with such small work forces.
The BoE (Bank of England) has also recently analysed its data and found that ethnic minorities in the UK earn around 10% less than white workers. Andy Haldane said the gap is "strikingly" persistent, having narrowed far less the than the pay disparity between genders over the past 25 years.
But fair treatment extends beyond disparities on pay. It is also about such issues as bullying and harassment and again, recent findings show some concerns.
According to a CityAM report investigations by Business in the Community found that as many as a quarter of all ethnic minority employees at British businesses are having to put up with bullying and harassment, despite 97% of businesses having a zero tolerance policy to bullying and harassment.
A study by Equileap, which researches corporate gender equality, has found that almost six out of 10 global companies do not have an anti-sexual harassment policy.
Clearly, there is a long way to go before there is fair treatment for all workers, but if businesses want to survive and prosper in a difficult global and domestic economic climate, amid skills shortages and the uncertainties of Brexit, they would be well advised to put it much higher up their agenda than it seems many currently do.
Tags: fair treatment of employees, gender pay gap, productivity
After several high profile business failures – Is corporate governance robust enough?
Research by a provider of audit, tax and consulting services has found that only 21% of board members think corporate governance is critical for a business to achieve success.
The findings by RSM also revealed that 96 per cent of company Board members it surveyed expected to see an increase in the number of criminal prosecutions of those senior executives and organisations implicated for poor risk management.
The issue of corporate governance has been under review by the FRC (Financial Reporting Council) for some time following high-profile collapses of businesses like BHS, Patisserie Valerie, Carillion and most recently Thomas Cook.
In its most recent annual report, the FRC found that that "audit quality is still not consistently reaching the necessary high standards expected".
More than a year ago, a review of the FRC itself led by Sir John Kingman proposed the establishment of a new regulator, the Audit, Reporting and Governance Authority, but this was not acted upon by the Government before business was suspended pending the outcome of the forthcoming general election.
Concerns about corporate governance have also been raised by a Government committee, the business, energy and industrial strategy select committee which has called on ministers to move faster to reform the audit profession, strengthen corporate governance and curb executive pay.
Among its findings were that "too often, audit teams appear prepared to accept what management tells them rather than questioning its plausibility and drawing on specialists to form their own view".
Corporate Governance refers to the way in which companies are governed and to what purpose. It identifies who has power and accountability, and who makes decisions. It is meant to take account of the interests of not only the business but its shareholders and stakeholders.
In July 2018, the FRC revised its corporate governance code, which was to apply to the accounting periods beginning on or after 1 January 2019.
According to the FRC the new code was designed to focus "on the application of the Principles [Code] and reporting on outcomes achieved. For the Code's Provisions, companies should disclose how they have complied with these or provide an explanation appropriate to their individual circumstances."
Clearly, more robust measures are going to be needed if the RSM research findings are any indication of the attitudes of business directors to the idea of responsible corporate governance.
Interestingly the IoD (Institute of Directors) yesterday launched what it called its manifesto for the next government to restore trust in corporate Britain. It included a proposal for a new Public Service Corporation to restore trust in the outsourcing sector, reforms to the regulation of auditors and replacing the FRC with a new, stronger Audit, Reporting and Governance Authority.
Changing corporate behaviour is a challenge, especially when it is so entrenched, but there is nothing like the threat of criminal proceedings to focus a board of directors given that in law they are collectively responsible for the decisions, behaviour and actions of any one director. The role of non-execs is key.
Tags: auditors, business failure, corporate governance
Small Business Commissioner Paul Uppal sacked– is this down to his success in holding large companies to account?
In a worrying development the Government has sacked Paul Uppal, the Small Business Commissioner, over what it called a "conflict of interest".
Even more worryingly, the only news outlet to report on the development was The Times, on October 12.
It reports that "the business department felt his involvement in establishing a bank redress scheme was a conflict of interest".
So far, apart from the report in The Times, there has been a deafening silence on this development.
Mr Uppal's role as a mediator of payment disputes between small and large companies was established in 2016.
His dismissal came just a few days after the Government had announced that Mr Uppal's role was to be expanded to having a seat on the Compliance Board of the Prompt Payment Code, which it was intending also to strengthen.
The Government said: "Fiona Dickie, the Deputy Pubs Code Adjudicator, will provide oversight in the Small Business Commissioner role until early November, pending the appointment of an interim commissioner.
"An open recruitment campaign to appoint a new Small Business Commissioner will get started immediately."
Has the Small Business Commissioner been too successful?
It was announced in December 2018 that in the first year of the Commissioner's existence unpaid invoices worth £2.1 million to small businesses across the UK have been recovered. Subsequently that amount had reached £3.5 million.
Mr Uppal also began the practice of naming and shaming those large businesses that were failing to meet the terms of the Prompt Payment Code and of actually removing some of them from its lists.
They included Holland & Barrett, Jordans & Ryvita, BHP Billiton, DHL and GKN, G4S, Bupa Insurance and Zurich Insurance.
Clearly, there is a need for government intervention on behalf of SMEs when payments are withheld by larger customers.
A study by FinTech firm Previse shows that small suppliers are paid an average of 30 days later than the largest firms. And a separate survey by Hitachi Capital Business Finance found the proportion of SMEs that were taking legal action chasing late payments from clients had grown from 31% to 40% over the past year with more than 60% of SMEs affected by late payments.
IPSE (Association of Independent Professionals and the Self-Employment) Deputy Director of Policy, Andy Chamberlain, said: ""Late payment is still the scourge of the self-employed. In fact, IPSE research has found the average freelancer spends 20 days a year chasing clients who have failed to pay them on time."
Mike Cherry, the chairman of the FSB (Federation of Small Businesses), said: "We've made some genuine progress on the late payments front since the Small Business Commissioner first took office back in 2017…. This is a disappointing development, one that will put the brakes on our efforts to date.
He added: "The appointment process needs to be efficient and thorough .. We can't delay further action to tackle this crisis, especially in such an uncertain climate."
Notwithstanding that we are in the run-up to a General Election, when all Government business is suspended there are a number of questions in need of answers on this situation and on the future of both the Small Business Commissioner and the Late Payment Code.
So, the question I would ask is has the Government been successfully lobbied by some large corporates to roll back this initiative. Was it becoming too successful?
Why was Mr Uppal sacked and was it really his involvement in establishing a bank redress scheme that was claimed to be a conflict of interest?
Have UK's SMEs been consigned to limbo?
Tags: late payments, Small Business Commission
Withdrawal of credit insurance exposes suppliers to greater risks
While it is true that running a business is always challenging the withdrawal of credit insurance is adding to the cash flow pressure on supply chains and in particular on retailers.
Trade credit insurance protects suppliers by minimising the financial impact if a customer fails to pay for goods and services.
The withdrawal of credit insurance is normally based on a company's credit rating that in turn is adjusted based on disclosed accounts, county court claims, statements by directors and adherence to payment terms as information that is increasingly being provided by suppliers.
For more than a year, the retail sector has been in the spotlight due to the high profile restructuring of several large chains and there would seem to be little sign of this abating, according to recent reports highlighting the latest move, by Paris-based insurer Euler Hermes, which reduced the credit cover it provides to Iceland's suppliers over the summer.
Euler Hermes is not the only insurer to have taken steps to reduce its exposure. Atradius has also been following the same path, removing cover last year from Debenhams.
According to the most recent figures produced by the ABI (Association of British Insurers) in the first quarter of 2019 the number of insurance claims made so far by UK businesses facing bad debts had reached its highest level in ten years.
It said that there were 5,114 new trade credit insurance claims made, up 6% on the previous quarter and that the value of claims paid was £48 million, up £1 million on the previous quarter. The average payment was £9,000.
So, it is perhaps not surprising that insurers are continuing to take steps to mitigate their exposure as insolvencies continue to climb in the face of political and economic uncertainty.
But the inevitable consequence is that the risk is being pushed back to suppliers, who in turn are reducing the amount of credit they extend to their customers. This is impacting on suppliers and their ability to maintain sales volumes to bigger customers.
For many suppliers with weaker balance sheets or who depend on a few large customers this can leave them taking the credit risk and often means waiting longer for payment.
Should SME suppliers continue to supply a customer if credit insurance is withdrawn?
It is all very well to advise SMEs to ensure they have a broad spread of customers perhaps with no one representing more than ten percent of the sales ledger, but opportunities need to be grabbed and growth is often achieved by taking some risks. It is a brave company that forgoes the benefit of having large and profitable customers. Despite this it is imperative to avoid being caught up in a domino insolvency if a key customer fails.
Growing a business takes time, forethought, planning and access to capital, none of which is available in abundance in the current uncertain national and global economic climate.
So, is there any way suppliers can protect themselves?
One route is to start to demand payment upfront, which may mean re-negotiating supply agreements, although it is debatable whether customers will oblige, which could then force the supplier into seeking help from the Late Payments Commissioner.
Another route could be to protect at least some of their revenue by using factoring or invoice discounting services. Both services tend to offer non-recourse facilities as a form of insurance to protect against approved but unpaid invoices. While this route involves credit insurance the finance providers often share a level of risk by underwriting better credit terms since they also want to make their own profits.
It is understandable that insurers will want to protect themselves but their service is a market and they may take a level of risk to get your business.
However risk is managed, there is a need for a strong balance sheet and credit management to avoid the fallout when a customer fails to pay your bills.
Tags: business risks, credit insurance
Post-Christmas apocalypse for the retail sector?
As we head for its most crucial shopping period in the wake of Mothercare and Mamas & Papas collapsing into administration, I make no apologies for revisiting the UK's retail sector.
Following last month's Brexit Halloween deadline and with Black Friday, Cyber Monday and Christmas ahead of us retailers have reportedly stockpiled seasonal products earlier than usual but the consumer uncertainty remaining no one knows how much stock will remain unsold in the new year.
The Confederation of British Industry, the country's leading business lobby group, said retailers' stock levels compared with the volume of expected sales had risen to the highest point in October since it began compiling retail sales estimates in 1983.
This is against a backdrop of dramatically narrowing profit margins, falling consumer confidence and repeated demands for comprehensive reform of business rates falling on seemingly deaf Government ears.
A new report by the global professional services firm Alvarez & Marsal (A&M), in partnership with Retail Economics, has found that store-based profit margins for the top 150 UK.retailers have more than halved in less than a decade – dropping from 8.8 percent as seen in 2009/10 to 4.1 percent in 2017/18.
This, it says, is the result of increasing operating costs, inflexible lease structures and changing shopping habits. Yet, it concludes that there is still demand for the High Street physical retail experience "presenting opportunities for forward-thinking incumbents, entrepreneurs and investors. Those that collaborate with landlords and local authorities will be the big winners going into the next business cycle".
But with a December 25th Quarter Day deadline for the payment of quarterly rents, cash flow is likely to be tight for many retailers who won't get much support from landlords.
Indeed, headwinds are building up for retail landlords in the retail sector such as Intu, the shopping centre owner, which has warned that it will have to raise more money from shareholders. It has said that its rental income has been battered by a wave of controversial retailer restructures, by such retailers as Monsoon and Arcadia, using CVAs (Company Voluntary Arrangements) to negotiate rent reductions.
In addition to rent, rates are also an ongoing problem for retailers. On October 30th the Treasury Committee, a cross-party group of MPs, called for an urgent review of the whole business rates system, saying that it was broken, having outpaced inflation for many years and grown as a share of business taxes, placing an unfair burden on bricks and mortar shops. Not only that, but, it also criticised a backlog of 16,000 appeals against business rate decisions and called for the government's valuation office to be properly staffed.
This was only the latest in a seemingly endless series of calls for reform, that had come from such bodies as the FSB (Federation of Small Businesses), the British Retail Consortium and others throughout the year, with FSB chairman Mike Cherry warning of a very bleak winter ahead.
With consumer confidence currently at a six-year low according to research by YouGov and the Centre for Economics and Business Research Mr Cherry's prediction isn't a surprise.
With an estimated 85,000 jobs having already gone from the retail sector over the last year, and approaching 3,000 more coming after the latest retail closures how likely is it that consumers will rush out and spend during the festive season?
The likelihood of any Government action has, of course, receded into the distance given that politicians are now not sitting, but out on the campaign trail ahead of a General Election on December 12th.
Whether a new government can shift its focus away from the ongoing and ever more tedious Brexit saga and onto more pressing domestic concerns remains a very big question but the party manifestos focus on sectors other than the retail sector which doesn't bode well for them in the short term.
Tags: Business rates reform, CVAs, High Street Retail
Diversity of thought is about more than challenging stereotypes and ticking a box
Posted November 7, 2019 by Tony Groom
Too often the word diversity as applied to directors of companies is seen as demonstrating representation by gender, ethnicity, religion, and possibly of age. But it should actually be about more than that, it should also be about diversity of thought and ideas.
The challenges facing businesses in the 21st Century are becoming more complex and happening at a faster pace so it makes sense to have people at board level who think differently and can communicate their ideas.
In a recent survey carried out by Social Mobility Pledge as reported by The Times newspaper, the researchers found that by and large "who you know" was still the most important factor when promoting staff.
Sadly, the inference from this is that recruitment tends to favour like-minded people, which is hardly helpful to businesses wanting to avoid being stuck in a rut.
The ability to challenge the status quo at all levels and in particular a board level was a topic discussed in a recent vimeo by Kenneth McKellar, a partner at AGM Transitions, which advises senior executives on their career transitions and roles.
He argues that every business needs people who can challenge the organisation and this means choosing directors from a wide variety of backgrounds, education and disciplines as being more important than simply having more women on the board which seems to be the focus of most FTSE 100 companies seeking to observe the UK Corporate Governance Code.
Being open to people from different educational backgrounds and with different experiences can bring different ways of thinking, different knowledge bases and different perspectives to problem-solving.
The challenge for boards is to avoid groupthink despite the natural desire among teams to seek harmony and conformity since groupthink can lead to irrational and dysfunctional decision-making.
This is also about people's preferred ways of thinking as shown in the Hermann Whole Brain ® Model which was the result of research originally conducted at GE's corporate university, Crotonville.
It describes four main modes of thinking, analytical, organized, interpersonal and strategic, each of which has a value in promoting diversity of thought in the workplace and at board level. Of course, this is likely to lead to differences of opinion which might imply conflict. However, such differences ought to be regarded as healthy if a business is to consider the challenges of the future and continuously change to meet them.
Ultimately businesses need people who represent a range of thinking and of ideas with the ability to think laterally, who can disagree in a way that leads to collective decisions.
'Yes' men and women may keep their job but they ultimately they contribute to the decline of their business due to their going along with others instead of contributing in a constructive way that improves the decisions made.
Tags: business growth, diversity, lateral thinking


As adults, fitness usually means aerobic workouts and being drenched in sweat after an hour at the gym. For kids, fitness can have a whole different meaning. Below, we've shared some tips for getting the whole family healthy, while having fun and spending quality time together.
A post-dinner family walk is a great way to fit in family exercise. Evening walks can start when your kids are just babies. Get out the stroller and take a walk down the street or through a park to enjoy some fresh air with your family.
Spending an hour on video games doesn't have to mean zoning out with a controller in hand. Several companies are making more interactive games that can help both kids and parents get more active. Find sports or dance games and create some healthy competition! Go head-to-head and find out who in the family has the best skills. Family game night just got even more fun.
Just like adults, having a goal in mind can motivate kids. Work towards a fitness goal together by signing up for a race. Many longer races will include a fun run after the big event. Find runs close to home, or check out events at other vacation destinations for a trip that your kids will always remember! Train together to keep each other motivated. Be sure to celebrate when the race is finished!
Sometimes, exercise can be more fun when more people are involved. Group exercise for kids can be a structured activity, like baseball or kickball, or even just a game of capture the flag. While the kids are running and playing, the parents can fit in some fitness of their own. Walk laps around the field or do some yoga moves with the other parents while you watch the game.
The key to encouraging physical fitness for kids is to make it fun. Visit Zero Gravity and get moving with a game of laser tag or dodgeball. Feeling Adventurous? Try our aerial challenge course with 17 different obstacles. The trampoline park attractions will get everyone moving. Go wild while you bounce on the indoor trampolines or test your dunking skills at the hoops. You'll all have so much fun, you won't even know its exercise! We welcome St. Paul and Minneapolis families, so buy your tickets today!
Celebrate Your Next Birthday with Zero Gravity!


Large international companies often do not send their profits directly from one country to another. Instead, they send it via other countries, so-called conduit countries, to reduce the tax they pay. Which countries are the most important conduit countries? To investigate this, the CPB (Netherlands Bureau for Economic Policy Analysis) has collected and has analyzed data about tax streams worldwide . In , algorithms were implemented (and discussed from a mathematical point of view) that help to analyze this data, leading to some extra conclusions. In this article we describe some methods that have been used, and the results that this led to. How important is The Netherlands as a conduit country?
The dataset of the CPB consists of countries/jurisdictions, and the tax rates that a company must pay when sending money from one country to another. The countries in the data set are colored green in the figure below.
As an example, suppose that a company wants to transfer one million dollars from the United States of America to The Netherlands, and that it has to pay 10% of taxes. This means that afterwards the company has dollars left.
Why are conduit countries so important? In order to understand this, we will look at a small example. Suppose a company wants to return its profits from the USA to India, and that there is a bilateral tax agreement, in which it has been agreed that the company has to pay 20% of taxes over its profits that it wants to send from the USA to India. This means that where the parameter represents the USA, and the parameter India. Now suppose that the Netherlands has bilateral tax agreements with both the USA and India, and that 10% of taxes has to be paid for sending money from the USA to the Netherlands, and for sending money from the Netherlands to India. This means that . See the figure below for an overview of the situation.
If the company send money directly from the USA to India, then a fraction of 0.8 of the profit is left in India. However, if the company would send the profit via the Netherlands, then a fraction of of the profit is left in India. The example shows that a direct route for sending profits between countries is not always the most profitable route. Companies can use indirect routes to reduce the amount of tax they pay. This is called tax treaty shopping.
To investigate which countries are the most important conduit countries, a notion for measuring the importance of a country in the network has to be used. One of the measures we have used for this, is the betweenness centrality of a country. Suppose that a company wants to send a profit from the USA to India. Of course, the company will choose to send their profit through a series of countries for which the total taxes it has to pay is as little as possible. In order to see how important the Netherlands is in this process, one can compute the fraction of "optimal tax paths" from the USA to India on which the Netherlands appears. This fraction says something about the importance of the Netherlands for sending profits from the USA to India. The fraction of optimal tax paths on which the Netherlands appears can also be computed for an arbitrary pair of countries in the dataset. The betweenness centrality of the Netherlands is then defined as the sum of these fractions, and therefore says something about its importance in the network for other countries to ship profits through.
Important conduit countries have a higher weighted betweenness centrality (called ).
This shows that the Netherlands plays an important role as conduit country (based on weighted betweenness centrality). Moreover, the research demonstrated that if the Netherlands wanted to improve its role as a conduit country, it must set its outgoing tax rates to India, China and Brazil to zero.
Sven Polak, Algorithms for the Network Analysis of Bilateral Tax Treaties, Master's thesis conducted at UvA/CWI/CPB, December 2014.
Maarten van 't Riet, Arjan M. Lejour, Optimal Tax Routing: Network Analysis of FDI diversion, CPB Discussion Paper, April 2017.


Bobby Hall, photo courtesy Frankfort State Journal, Feb. 21, 2018, "Bobby Hall Promises to be Fair if Elected".
Bobby Hall, photo courtesy Frankfort State Journal, News article, Feb. 21, 2018.
Democrat: Four candidates filed as Democrats seeking election as Franklin County's Property PVA. Kellie Lang obtained the most votes in the May 22 primary election and will face the Republican challenger in November 2018.
Republican: One candidate filed as Republican contender for the Franklin County PVA. Unchallenged in the primary election, Bobby Hall & Kellie Lang will be on the ballot for the General Election.
". . . Kellie Lang, a candidate for the Franklin County PVA, is hereby endorsed by The Kentucky River Lodge 87 Fraternal Order of Police. Mrs. Lang displayed intelligence, experience & professional to our Lodge, and it is our pleasure to endorse her in the upcoming election." Contact: Ashley Mulder – President, KY River Lodge 87 FOP, Email: amulder@franklincountyky.com for more information about endorsements.
Subject to the direction, instruction, and supervision of Kentucky's Department of Revenue, a property valuation administrator (PVA) must make the assessment of all property in the county, prepare property assessment records, and perform other duties relating to assessment as the law or the Department of Revenue may prescribe (KRS 132.420).
The property valuation administrator assesses property for the state, the county, and other districts. Any city may elect to use the annual county assessment for property situated in the city, except for levying and collecting ad valorem taxes on motor vehicles, in which case cities must use the assessment completed under the supervision of the Department of Revenue pursuant to KRS 132.487 (KRS 132.285).
More information about credentials, required training, limits on contributions to candidates campaigning for PVA, and other aspects of the job, can be found in the publication, Duties of Elected County Officials, Chapter 6, Property Valuation Administrators. Click on the link to review the publication or contact Kentucky Legislative Research Commission, 502-564-8100; ask for publication 114, Duties of Elected County Officials.
Kellie Lang, photo from Candidates's Facebook page, May 2018.
Jim Sewell, photo from Candidate Sewell's website.


Message of the President and outlines of organization of the government.
With: Practical estimates of household expenses. London : H. Colburn, 1823. Issued separately, but some copies possibly sold together. Bound together subsequent to publication.


The Nikki Bonsai Garden Visit and Interactive Demo for Kerala Bonsai Association members.
Explore the possibilities of styling.
The plants used for this demonstration were Casuarina and two species of the Ficus family. They were shown 3 kinds of styling and wiring.
Please go through the entire slideshow as D Ravindran's demonstrations clearly explain the "before, during and after" of wiring a Casuarina Bonsai, and the leaf and shoot pruning of a Ficus Bonsai.
We will keep you updated on the next Nikki Bonsai Garden Visit and Interactive demo through these columns.
Thank you all for making it to the Nursery.


Australia could be on the brink of an energy crisis as the government struggles with the transition between old and new technology. Despite the prime minister's strategy to introduce 'clean coal,' experts are predicting that prices are going to go up significantly.
According to the Energy Market Commission, wholesale prices are expected to increase by 20 to 40 percent in South Australia, Tasmania, and Victoria following the close of the Hazelwood power plant.
Consumers have been left in the lurch, wondering exactly what they are supposed to do about rising power prices. Fortunately, there is a reprieve in sight for Australians, and it doesn't mean going off the grid.
The first step is to compare energy suppliers to verify that you are getting good value for your electricity and gas usage. Visit ElectricityandGas.com.au to find out how you can maximise your savings and cut down on your energy bill.
Start by entering a few basic details about your location and energy usage. From there you'll receive an easy-to-read quote that shows you the various deals you can take advantage of in your area.
If you're paying more with your supplier, it's time to make the switch. Changing energy providers is easier than you think, and it could save you a considerable amount of money each quarter.
In fact, reports indicate that there is a gap of six cents per kilowatt hour (kWh) between the highest and lowest price on the market.* The Australian Energy Regulator (AER) found that the average household in Australia used about 5,800 kWh per year, which means that switching from the highest to the lowest market deal could save you almost $350 each year.
New tariff structures were introduced in 2017 that could help you save even more. A short phone call with a consultant from ElectricityandGas.com.au can help you identify which tariff might be best for you so you can get the most out of your energy supplier.
The future of Australia's energy industry may be in flux, but when you compare suppliers you're taking matters into your own hands. Compare today so you can make an informed decision about energy plans for your household or business.


I know Facebook is fun and all that but you could even make it hilarious by using Facebook pirate language mode which has been available for quite a long time. Unfortunately the language doesn't work on the Android app, it's available only on the web. You can activate it by going to your language settings.
. Here are some screen shots from Opera Browser (Android).
You don't expect me to drop all the images here. Change your language to English (Pirate) and go through your account to find more.
Co-founder of Android releases New Device – "The Essential Phone"


text:
#ifndef _LIBKERN_OSKEXTLIBPRIVATE_H
#define _LIBKERN_OSKEXTLIBPRIVATE_H

#include <sys/cdefs.h>
#include <uuid/uuid.h>

__BEGIN_DECLS
#include <libkern/OSTypes.h>
#include <mach/kmod.h>
#include <mach/vm_types.h>
__END_DECLS

#include <libkern/OSReturn.h>

__BEGIN_DECLS

#if PRAGMA_MARK
#pragma mark -
/********************************************************************/
#pragma mark Misc Constants
/********************************************************************/
#endif

typedef uint8_t OSKextExcludeLevel;
#define kOSKextExcludeNone  (0)
#define kOSKextExcludeKext  (1)
#define kOSKextExcludeAll   (2)

#if PRAGMA_MARK
#pragma mark -
/********************************************************************/
#pragma mark Kext/OSBundle Property List Keys
/********************************************************************/
#endif

/*!
 * @define   kOSBundleHelperKey
 * @abstract Used by loginwindow.
 */
#define kOSBundleHelperKey      "OSBundleHelper"

/*!
 * @define   kOSBundleDeveloperOnlyKey
 * @abstract A boolean value indicating whether the kext should only load on
 *           Developer devices.
 */
#define kOSBundleDeveloperOnlyKey		"OSBundleDeveloperOnly"

/*!
 * @define   kOSBundleRamDiskOnlyKey
 * @abstract A boolean value indicating whether the kext should only load when
 *           booted from a ram disk.
 */
#define kOSBundleRamDiskOnlyKey		"OSBundleRamDiskOnly"

/*!
 * @define   kAppleSecurityExtensionKey
 * @abstract A boolean value indicating whether the kext registers
 *           MACF hooks.
 */
#define kAppleSecurityExtensionKey	"AppleSecurityExtension"

/*!
 * @define   kAppleKernelExternalComponentKey
 * @abstract A boolean value indicating whether the kext is vending kernel
 *           KPI, and needs special loading behavior.
 */
#define kAppleKernelExternalComponentKey	"AppleKernelExternalComponent"

// properties found in the registry root
#define kOSKernelCPUTypeKey             "OSKernelCPUType"
#define kOSKernelCPUSubtypeKey          "OSKernelCPUSubtype"
#define kOSStartupMkextCRC              "OSStartupMkextCRC"             /* value is 32-bit OSData */
#define kOSPrelinkKextCountKey          "OSPrelinkKextCount"            /* value is 32-bit OSNumber */
#define kOSPrelinkPersonalityCountKey   "OSPrelinkPersonalityCount"     /* value is 32-bit OSNumber */

#if PRAGMA_MARK
#pragma mark -
/********************************************************************/
#pragma mark Load Info Keys
/********************************************************************/
#endif
/*********************************************************************
* In addition to the keys defined here, you will find:
*   kCFBundleIdentifierKey
*   kCFBundleVersionKey
*   kOSBundleCompatibleVersionKey
*   kOSBundleIsInterfaceKey
*   kOSKernelResourceKey
*********************************************************************/
#define kOSBundleMachOHeadersKey                "OSBundleMachOHeaders"
#define kOSBundleLogStringsKey                  "OSBundleLogStrings"
#define kOSBundleCPUTypeKey                     "OSBundleCPUType"
#define kOSBundleCPUSubtypeKey                  "OSBundleCPUSubtype"
#define kOSBundlePathKey                        "OSBundlePath"
#define kOSBundleExecutablePathKey              "OSBundleExecutablePath"
#define kOSBundleUUIDKey                        "OSBundleUUID"
#define kOSBundleStartedKey                     "OSBundleStarted"
#define kOSBundlePrelinkedKey                   "OSBundlePrelinked"
#define kOSBundleLoadTagKey                     "OSBundleLoadTag"
#define kOSBundleLoadAddressKey                 "OSBundleLoadAddress"
#define kOSBundleLoadSizeKey                    "OSBundleLoadSize"
#define kOSBundleExecLoadAddressKey             "OSBundleExecLoadAddress"
#define kOSBundleExecLoadSizeKey                "OSBundleExecLoadSize"
#define kOSBundleWiredSizeKey                   "OSBundleWiredSize"
#define kOSBundleDependenciesKey                "OSBundleDependencies"
#define kOSBundleRetainCountKey                 "OSBundleRetainCount"

/* Dictionary of metaclass info keyed by classname.
 */
#define kOSBundleClassesKey                     "OSBundleClasses"

/* These are contained in kOSBundleClassesKey. kOSMetaClassSuperclassNameKey
 * may be absent (for the root class).
 */
#define kOSMetaClassNameKey                     "OSMetaClassName"
#define kOSMetaClassSuperclassNameKey           "OSMetaClassSuperclassName"
#define kOSMetaClassTrackingCountKey            "OSMetaClassTrackingCount"

#if PRAGMA_MARK
#pragma mark -
/********************************************************************/
#pragma mark Kext Log Specification
/********************************************************************/
#endif
/*!
 * @group Kext Log Specification
 * Logging levels & flags for kernel extensions.
 * See @link //apple_ref/c/tdef/OSKextLogSpec OSKextLogSpec@/link
 * for an overview.
 */

/*!
 * @typedef  OSKextLogSpec
 * @abstract Describes what a log message applies to,
 *           or a filter that determines which log messages are displayed.
 *
 * @discussion
 * A kext log specification is a 32-bit value used as a desription of
 * what a given log message applies to, or as a filter
 * indicating which log messages are desired and which are not.
 * A log specification has three parts (described in detail shortly):
 *

 *
A level from 0-7 in the lowest-order nibble (0x7).

 *
A flag bit in the lowest-order nibble (0x8) indicating whether
 *       log messages tied to individual kexts are always printed (1)
 *       or printed only if the kext has an
 *       @link //apple_ref/c/macro/kOSBundleEnableKextLoggingKey
 *       OSBundleEnableKextLogging@/link set to true.
 *
A set of activity flags in the remaining nibbles (0xFFFFFFF0),
 *       which describe areas of activity related to kernel extensions.

 *

 *
 * You can specify a log spec to most of the kext tools with the -v option
 * and a hex number (rather than the escalating decimal levels 0-6).
 * You can also specify a log spec to the kernel with the "kextlog" boot arg
 * or "debug.kextlog" sysctl.
 *
 * Log Levels
 *
 * The log level spans a range from silent (no log messages)
 * to debuging information:
 *
 *

 *
Silent - Not applicable to messages; as a filter, do not print any log messages.

 *
Errors - Log message is an error.
 *
Warnings - Log message is a warning.
 *
Basic information - Log message is basic success/failure.

 *
Progress - Provides high-level information about stages in processing.

 *
Step - Provides low-level information about complex operations,
 *          typically about individual kexts.

 *
Detail - Provides very low-level information about parts of kexts,
 *          including individual Libkern classes and operations on bundle files.

 *
Debug - Very verbose logging about internal activities.

 *

 *
 * Log messages at
 * @link kOSKextLogErrorLevel kOSKextLogErrorLevel@/link or
 * @link kOSKextLogWarningLevel kOSKextLogWarningLevel@/link
 * ignore activity flags and the
 * @link //apple_ref/c/macro/kOSBundleEnableKextLoggingKey
 * OSBundleEnableKextLogging@/link property;
 * that is, only the filter level is checked for messages at these levels.
 * Log messages at levels above
 * @link kOSKextLogWarningLevel kOSKextLogWarningLevel@/link
 * are filtered according both to the activity flags in the current filter
 * and to whether the log message is associated with a kext or not.
 * Normally log messages associated with kexts are not printed
 * unless the kext has a
 * @link //apple_ref/c/macro/kOSBundleEnableKextLoggingKey
 * OSBundleEnableKextLogging@/link property set to true.
 * If you set the high-order bit of the log level (that is, add 8 to the level),
 * then all kext-specific log messages matching the activity flags are printed.
 * This can be very verbose.
 *
 * Activity Flags
 *
 * Each flag governs a category of activity,
 * such as loading, IPC, or archives; by combining them with bitwise OR,
 * you can choose which messages you wish to see (or when logging messages,
 * which bit flags select your message).
 *
 * Byte 1: 0xF0 - Basic activities
 * (@link kOSKextLogGeneralFlag kOSKextLogGeneralFlag@/link,
 * @link kOSKextLogLoadFlag kOSKextLogLoadFlag@/link, and
 * @link kOSKextLogArchiveFlag kOSKextLogArchiveFlag@/link).
 *
 * Byte 2: 0xF00 - Reserved.
 *
 * Byte 4: 0xF000 - Kext diagnostics
 * (@link kOSKextLogValidationFlag kOSKextLogValidationFlag@/link,
 * @link kOSKextLogAuthenticationFlag kOSKextLogAuthenticationFlag@/link, and
 * @link kOSKextLogDependenciesFlag kOSKextLogDependenciesFlag@/link).
 *
 * Byte 5: 0xF00000 - Kext access & bookkeeping
 * (@link kOSKextLogDirectoryScanFlag kOSKextLogDirectoryScanFlag@/link,
 * @link kOSKextLogFileAccessFlag kOSKextLogFileAccessFlag@/link,
 * @link kOSKextLogKextBookkeepingFlag kOSKextLogKextBookkeepingFlag@/link ).
 *
 * Byte 6: 0xF000000 - Linking & patching
 * (@link kOSKextLogLinkFlag kOSKextLogLinkFlag@/link and
 * @link kOSKextLogPatchFlag kOSKextLogPatchFlag@/link).
 *
 * Byte 7: 0xF0000000 - Reserved.
 */
typedef uint32_t OSKextLogSpec;

#if PRAGMA_MARK
/********************************************************************/
#pragma mark Masks
/********************************************************************/
#endif
/*!
 * @define   kOSKextLogLevelMask
 * @abstract Masks the bottom 3 bits of an
 *           @link OSKextLogSpec OSKextLogSpec@/link to extract
 *           the raw level.
 */
#define kOSKextLogLevelMask              ((OSKextLogSpec) 0x00000007)

/*!
 * @define   kOSKextLogKextOrGlobalMask
 * @abstract Determines whether per-kext log messages are output.
 *
 * @discussion
 * In filter specifications, if unset (the usual default),
 * then log messages associated with a kext are only output
 * if the kext has an
 * @link //apple_ref/c/macro/kOSBundleEnableKextLoggingKey
 * OSBundleEnableKextLogging@/link
 * property set to true.
 * If set, then all log messages associated with kexts
 * are output.
 *
 * In message specifications, if set it indicates that the message is either
 * not associated with a kext, or is associated with a kext that has an
 * @link //apple_ref/c/macro/kOSBundleEnableKextLoggingKey
 * OSBundleEnableKextLogging@/link
 * property set to true.
 */
#define kOSKextLogKextOrGlobalMask       ((OSKextLogSpec) 0x00000008)

/*!
 * @define   kOSKextLogFlagsMask
 * @abstract Masks the flag bits of an
 *           @link OSKextLogSpec OSKextLogSpec@/link.
 */
#define kOSKextLogFlagsMask              ((OSKextLogSpec) 0x0ffffff0)

/*!
 * @define   kOSKextLogFlagsMask
 * @abstract Masks the flag bits of an
 *           @link OSKextLogSpec OSKextLogSpec@/link
 *           to which command-line -v levels apply.
 */
#define kOSKextLogVerboseFlagsMask       ((OSKextLogSpec) 0x00000ff0)

/*!
 * @define   kOSKextLogConfigMask
 * @abstract Masks the config bits of an
 *           @link OSKextLogSpec OSKextLogSpec@/link.
 */
#define kOSKextLogConfigMask             ((OSKextLogSpec) 0xf0000000)

#if PRAGMA_MARK
/********************************************************************/
#pragma mark 0xF - Log Level
/********************************************************************/
#endif

/*!
 * @define   kOSKextLogExplicitLevel
 * @abstract Used when logging a message to overrides the current log filter,
 *           even if it's set to silent for log messages.
 *           This is essentially a pass-through for
 *           unconditional print messages to go
 *           through the logging engine.
 */
#define kOSKextLogExplicitLevel          ((OSKextLogSpec)        0x0)

/*!
 * @define   kOSKextLogErrorLevel
 * @abstract Log messages concerning error conditions in any category.
 */
#define kOSKextLogErrorLevel            ((OSKextLogSpec)        0x1)

/*!
 * @define   kOSKextLogWarningLevel
 * @abstract Log messages concerning warning conditions in any category,
 *           which indicate potential error conditions,
 *           and notices, which may explain unexpected but correct behavior.
 */
#define kOSKextLogWarningLevel          ((OSKextLogSpec)        0x2)

/*!
 * @define   kOSKextLogBasicLevel
 * @abstract Log messages concerning top-level outcome in any category
 *           (kext load/unload, kext cache creation/extration w/# kexts).
 */
#define kOSKextLogBasicLevel           ((OSKextLogSpec)        0x3)

/*!
 * @define   kOSKextLogProgressLevel
 * @abstract Log messages concerning high-level progress in any category,
 *           such as sending a load request to the kernel,
 *           allocation/link/map/start (load operation),
 *           stop/unmap (unload operation), kext added/extracted (archive).
 */
#define kOSKextLogProgressLevel          ((OSKextLogSpec)        0x4)

/*!
 * @define   kOSKextLogStepLevel
 * @abstract Log messages concerning major steps in any category,
 *           such as sending personalities to the IOCatalogue when loading,
 *           detailed IPC with the kernel, or filtering of kexts for an archive.
 */
#define kOSKextLogStepLevel             ((OSKextLogSpec)        0x5)

/*!
 * @define   kOSKextLogDetailLevel
 * @abstract Log messages concerning specific details in any category,
 *           such as classes being registered/unregistered or
 *           operations on indivdual files in a kext.
 */
#define kOSKextLogDetailLevel           ((OSKextLogSpec)        0x6)

/*!
 * @define   kOSKextLogDebugLevel
 * @abstract Log messages concerning very low-level actions that are
 *           useful mainly for debugging the kext system itself.
 */
#define kOSKextLogDebugLevel             ((OSKextLogSpec)        0x7)

#if PRAGMA_MARK
/********************************************************************/
#pragma mark 0xF0 - General Activity, Load, Kernel IPC, Personalities
/********************************************************************/
#endif

/*!
 * @define   kOSKextLogGeneralFlag
 * @abstract Log messages about general activity in the kext system.
 */
#define kOSKextLogGeneralFlag            ((OSKextLogSpec)       0x10)

/*!
 * @define   kOSKextLogLoadFlag
 * @abstract Log messages regarding kernel extension load, start/stop, or unload activity
 *           in the kernel.
 */
#define kOSKextLogLoadFlag               ((OSKextLogSpec)       0x20)

/*!
 * @define   kOSKextLogIPCFlag
 * @abstract Log messages about any interaction between kernel and user space
 *           regarding kernel extensions.
 */
#define kOSKextLogIPCFlag                ((OSKextLogSpec)       0x40)

/*!
 * @define   kOSKextLogArchiveFlag
 * @abstract Log messages about creating or processing a kext startup cache file
 *           (mkext or prelinked kernel).
 */
#define kOSKextLogArchiveFlag           ((OSKextLogSpec)       0x80)

#if PRAGMA_MARK
/********************************************************************/
#pragma mark 0xF00 - Reserved Verbose Area
/********************************************************************/
#endif
// reserved slot for group               ((OSKextLogSpec)      0x100)
// reserved slot for group               ((OSKextLogSpec)      0x200)
// reserved slot for group               ((OSKextLogSpec)      0x400)
// reserved slot for group               ((OSKextLogSpec)      0x800)

#if PRAGMA_MARK
/********************************************************************/
#pragma mark 0xF000 - Kext diagnostic activity
/********************************************************************/
#endif

/*!
 * @define   kOSKextLogValidationFlag
 * @abstract Log messages when validating kernel extensions.
 */
#define kOSKextLogValidationFlag         ((OSKextLogSpec)     0x1000)

/*!
 * @define   kOSKextLogAuthenticationFlag
 * @abstract Log messages when autnenticating kernel extension files.
 *           Irrelevant in the kernel.
 */
#define kOSKextLogAuthenticationFlag     ((OSKextLogSpec)     0x2000)

/*!
 * @define   kOSKextLogDependenciesFlag
 * @abstract Log messages when resolving dependencies for a kernel extension.
 */
#define kOSKextLogDependenciesFlag       ((OSKextLogSpec)     0x4000)

// reserved slot for group               ((OSKextLogSpec)     0x8000)

#if PRAGMA_MARK
/********************************************************************/
#pragma mark 0xF0000 - Archives, caches, directory scan, file access
/********************************************************************/
#endif

/*!
 * @define   kOSKextLogDirectoryScanFlag
 * @abstract Log messages when scanning directories for kernel extensions.
 *           In the kernel logs every booter kext entry processed.
 */
#define kOSKextLogDirectoryScanFlag      ((OSKextLogSpec)    0x10000)

/*!
 * @define   kOSKextLogFileAccessFlag
 * @abstract Log messages when performing any filesystem access (very verbose).
 *           Irrelevant in the kernel.
 */
#define kOSKextLogFileAccessFlag         ((OSKextLogSpec)    0x20000)

/*!
 * @define   kOSKextLogKextBookkeepingFlag
 * @abstract Log messages about internal tracking of kexts. Can be very verbose.
 */
#define kOSKextLogKextBookkeepingFlag    ((OSKextLogSpec)    0x40000)

// reserved slot for group               ((OSKextLogSpec)    0x80000)

#if PRAGMA_MARK
/********************************************************************/
#pragma mark 0xF00000 - Linking & Patching
/********************************************************************/
#endif

/*!
 * @define   kOSKextLogLinkFlag
 * @abstract Log messages about linking.
 */
#define kOSKextLogLinkFlag               ((OSKextLogSpec)   0x100000)

/*!
 * @define   kOSKextLogPatchFlag
 * @abstract Log messages about patching.
 */
#define kOSKextLogPatchFlag              ((OSKextLogSpec)   0x200000)

// reserved slot for group               ((OSKextLogSpec)   0x400000)
// reserved slot for group               ((OSKextLogSpec)   0x800000)

#if PRAGMA_MARK
/********************************************************************/
#pragma mark 0xF000000 - Reserved
/********************************************************************/
#endif

// reserved slot for grouping            ((OSKextLogSpec)  0x1000000)
// reserved slot for grouping            ((OSKextLogSpec)  0x2000000)
// reserved slot for grouping            ((OSKextLogSpec)  0x4000000)
// reserved slot for grouping            ((OSKextLogSpec)  0x8000000)

#if PRAGMA_MARK
/********************************************************************/
#pragma mark 0xF0000000 - Config Flags
/********************************************************************/
#endif

// reserved slot for grouping            ((OSKextLogSpec) 0x10000000)
// reserved slot for grouping            ((OSKextLogSpec) 0x20000000)
// reserved slot for grouping            ((OSKextLogSpec) 0x40000000)

#if PRAGMA_MARK
/********************************************************************/
#pragma mark Predefined Specifications
/********************************************************************/
#endif

/*!
 * @define   kOSKextLogSilentFilter
 * @abstract For use in filter specs:
 *           Ignore all log messages with a log level greater than
 *           @link kOSKextLogExplicitLevel kOSKextLogExplicitLevel@/link.
 */
#define kOSKextLogSilentFilter           ((OSKextLogSpec)        0x0)

/*!
 * @define   kOSKextLogShowAllFilter
 * @abstract For use in filter specs:
 *           Print all log messages not associated with a kext or
 *           associated with a kext that has
 *           @link //apple_ref/c/macro/kOSBundleEnableKextLoggingKey
 *           OSBundleEnableKextLogging@/link
 *           set to true.
 */
#define kOSKextLogShowAllFilter          ((OSKextLogSpec) 0x0ffffff7)

/*!
 * @define   kOSKextLogShowAllKextsFilter
 * @abstract For use in filter specs:
 *           Print all log messages has
 *           @link //apple_ref/c/macro/kOSBundleEnableKextLoggingKey
 *           OSBundleEnableKextLogging@/link
 *           set to true.
 */
#define kOSKextLogShowAllKextsFilter     ((OSKextLogSpec) \
                                           (kOSKextLogShowAllFilter | \
                                            kOSKextLogKextOrGlobalMask))

#if PRAGMA_MARK
#pragma mark -
/********************************************************************/
#pragma mark Kext Version String Processing
/********************************************************************/
#endif
/*!
 * @group Kext Version String Processing
 * Functions for working with kext versions and compatible versions.
 */

/*!
 * @typedef   OSKextVersion
 * @abstract  An encoded kext version that can be compared arithmetically.
 *
 * @discussion
 * A value of zero (@link kOSKextVersionUndefined kOSKextVersionUndefined@/link)
 * is not equivalent to a version string of "0.0",
 * and typically means there is no version specified
 * (for example, that there is no CFBundleVersion property at all).
 * Values below zero are invalid.
 *
 * The encoding used is subject to change,
 * and should never be saved to permanent storage.
 * Always use proper version strings in files and interprocess communication.
 */
typedef int64_t OSKextVersion;

/*!
 * @define    kOSKextVersionMaxLength
 * @abstract  The length of a string buffer
 *            guaranteed to be able to hold a kext version.
 *
 * @discussion
 * Kext versions use an extended Mac OS 'vers' format with double the number
 * of digits before the build stage: ####.##.##s{1-255} where 's'
 * is a build stage 'd', 'a', 'b', 'f' or 'fc'.
 */
#define kOSKextVersionMaxLength (20)
// with a few bytes to spare including a nul byte
// xx-review: Should we make this much bigger in case we ever need longer strings?

/*!
 * @define    kOSKextVersionUndefined
 * @abstract  The undefined version.
 *
 * @discussion
 * This value of @link OSKextVersion OSKextVersion@/link represents the
 * lack of a version
 * (for example, that there is no CFBundleVersion property at all).
 */
#define kOSKextVersionUndefined  (0)

/*!
 * @function OSKextParseVersionString
 *
 * @abstract
 * Parses a kext version string into an @link OSKextVersion OSKextVersion@/link.
 *
 * @param  versionString  The kext version string to parse.
 *
 * @result
 * An encoded kext version that can be compared numerically
 * against other encoded kext versions,
 * <0 if versionString is NULL, empty,
 * or cannot be parsed.
 *
 * @discussion
 * Kext versions use an extended Mac OS 'vers' format with double the number
 * of digits before the build stage: ####.##.##s{1-255} where 's'
 * is a build stage 'd', 'a', 'b', 'f' or 'fc'.
 */
OSKextVersion OSKextParseVersionString(const char * versionString);

/*!
 * @function OSKextVersionGetString
 *
 * @abstract
 * Formats an encoded @link OSKextVersion OSKextVersion@/link into a string
 * representation.
 *
 * @param  aVersion
 *         The encoded version to format.
 * @param  buffer
 *         A C string buffer of at least
 *         @link kOSKextVersionMaxLength kOSKextVersionMaxLength@/link bytes.
 * @param  bufferSize  The size in bytes of buffer.
 *
 * @result
 * TRUE if the encoded version is formatted successfully.
 * FALSE if buffer is NULL or
 * bufferSize is less than
 * @link kOSKextVersionMaxLength kOSKextVersionMaxLength@/link.
 *
 * @discussion
 * The return value strictly indicates whether buffer
 * is large enough to hold the result.
 * If aVersion is 0, the resulting string is "(missing)".
 * If aVersion is less than 0
 * or is not a valid kext version encoding,
 * the resulting string is "(invalid)".
 */
Boolean OSKextVersionGetString(
    OSKextVersion   aVersion,
    char          * buffer,
    uint32_t        bufferSize);

#if PRAGMA_MARK
/********************************************************************/
#pragma mark -
#pragma mark Weak linking
/********************************************************************/
#endif

#if PRAGMA_MARK
#pragma mark -
/********************************************************************/
#pragma mark Miscellaneous Kernel-Only Kext Functions
/********************************************************************/
#endif

/*!
 * @function kext_get_vm_map
 * @abstract Returns the vm_map from which the kext was allocated.
 *
 * @param info The kmod_info_t structure of the kext.
 * @result The vm_map from which the kext was allocated.  This function
 * cannot return NULL.
 */
vm_map_t kext_get_vm_map(kmod_info_t * info);

#if PRAGMA_MARK
#pragma mark -
/********************************************************************/
#pragma mark Loaded Kext Summary
/********************************************************************/
#endif

/*!
 * @define kOSKextLoadedKextSummaryVersion
 * @abstract The current version of the loaded kext summary headers.
 */
#define kOSKextLoadedKextSummaryVersion 2

/*!
 * @typedef OSKextLoadedKextSummary
 * @abstract A structure that describes a loaded kext.
 *
 * @field name The kext's bundle identifier.
 * @field uuid The kext's UUID;
 * @field address The kext's load address.
 * @field size The kext's load size.
 * @field version The binary format (OSKextVersion) version of the kext.
 * @field loadTag The kext's load tag.
 * @field flags Internal tracking flags.
 * @field reference_list who this refs (links on).
 *
 * @discussion
 * The OSKextLoadedKextSummary structure contains a basic set of information
 * about the kext to facilitate kext debugging and panic debug log output.
 */
typedef struct _loaded_kext_summary {
    char        name[KMOD_MAX_NAME];
    uuid_t      uuid;
    uint64_t    address;
    uint64_t    size;
    uint64_t    version;
    uint32_t    loadTag;
    uint32_t    flags;
    uint64_t    reference_list;
} OSKextLoadedKextSummary;

/*!
 * @typedef OSKextLoadedKextSummaryHeader
 * @abstract A structure that describes the set of loaded kext summaries.
 *
 * @field version The version of the loaded kext summary structures.
 * @field entry_size The size of each entry in summaries.
 * @field numSummaries The number of OSKextLoadedKextSummary structures
 *        following the header.
 * @field summaries A convenience pointer to the array of summaries following
 *        the header.
 *
 * @discussion
 * The OSKextLoadedKextSummaryHeader describes the set of loaded kext summaries
 * available for use by the debugger or panic log routine.
 * The array of summaries contains one OSKextLoadedKextSummary for every kext
 * that declares an executable and is not an interface to the kernel.
 */
typedef struct _loaded_kext_summary_header {
    uint32_t version;
    uint32_t entry_size;
    uint32_t numSummaries;
    uint32_t reserved; /* explicit alignment for gdb  */
    OSKextLoadedKextSummary summaries[0];
} OSKextLoadedKextSummaryHeader;

/*!
 * @var gLoadedKextSummaries
 * @abstract The global pointer to the current set of loaded kext summaries.
 */
extern OSKextLoadedKextSummaryHeader * gLoadedKextSummaries;

/*!
 * @var gLoadedKextSummariesTimestamp
 *
 * @abstract This will be set to mach_absolute_time() around updates to
 * gLoadedKextSummaries.  Ie. immediately before gLoadedKextSummaries is set to
 * zero, and immediately after it is set to a new value.
 */
extern uint64_t gLoadedKextSummariesTimestamp;

/*!
 * @function OSKextLoadedKextSummariesUpdated
 * @abstract Called when gLoadedKextSummaries has been updated.
 *
 * @discussion
 * gLoadedKextSummaries is updated when a kext is loaded or unloaded.
 * When the update is complete, OSKextLoadedKextSummariesUpdated is called.
 * gdb can set a breakpoint on this function to detect kext loads and unloads.
 */
void OSKextLoadedKextSummariesUpdated(void);

__END_DECLS

#endif /* ! _LIBKERN_OSKEXTLIBPRIVATE_H */

redpajama_set_name: RedPajamaGithub