ISLAMABAD " President Asif Ali Zardari on Sunday advised the NWFP government to immediately undertake the payment of compensation money to the heirs of the victims of militancy and asked keep his office informed of the progress on a daily basis. The President said this soon after the government released Rs 283 million for FATA and another Rs 340 million for the NWFP province in pursuance of his announcement made during his recent visit to the province. He had announced that the families of the victims of suicide bombings and acts of terror would be compensated. The President had during the visit also advised the federal government to provide funds for the purpose and to make immediate disbursements to the victims' families. Now that the funds had already been transferred to the NWFP government, it was important that the same should be properly disbursed without delay, he said. Compensation would be paid at the rate of Rs 3 lakhs for each killed and Rs one lakh for each injured person. The President said although this was a meager amount that could not compensate for the loss and sufferings yet it demonstrated the will of the government not to abandon its people and to keep fighting the militants till their subjugation. The President said that rehabilitation of victims' families was not only the government's moral responsibility to its citizens but also an essential component of the fight against militancy. He said that he had been raising this issue with world leaders and international bodies as well and expressed the hope that the world community will also step in to play its role in compensating and rehabilitating the victims of militancy. "Those who refused to bow and died or suffered while standing up in the fight against militancy are our national heroes and heroines who must be honoured and they will be", the President said. The President also said that the rehabilitation of families of the victims was the moral responsibility of the government.


Waste generation has increased rapidly due to population growth and industrialization. Because of this, the management of municipal solid waste has become an acute problem to the society. Solid waste management is an important obligatory function and also one of the primary responsibilities of the municipal authorities. There are many operations performed in the process of collection, segregation, processing and disposal of the municipal solid waste. This paper deals with the general view of municipal solid waste management, practices and its implications on environment in Annamalainagar region of Cuddalore district. The solid wastes accumulated in Annamalainagar town panchayat is perfectly managed by the municipal authorities. Resource Recovery Park is a place where the collected and segregated solid wastes are further processed. Under the scheme of URBAN INFRASTRUCTURE DEVELOPEMENT SCHEME IN SATELLITE TOWN, the resource recovery park in Annamalai nagar was set up at an area of 4650 m2. This park had an objective to recover some beneficial materials from the municipal solid waste generated by the people through compost making. This is an ideal solution for urban environmental problems caused by solid waste generation.
S. Rameshkumar, A. A. S. S. "Solid Waste Management in Urban Landscapes Areas". Journal of Floriculture and Landscaping, Vol. 4, Jan. 2019, pp. 20-22, https://updatepublishing.com/journal/index.php/jfcls/article/view/3860.


text:
from lib import action

class FindBoardByNameAction(action.BaseAction):
    def run(self, name, api_key=None, token=None):
        if api_key:
            self._set_creds(api_key=api_key, token=token)

        boards = []
        for board in self._client.list_boards():
            if board.name == name and not board.closed:
                boards.append(board.id)

        if len(boards) == 0:
            return False
        else:
            return boards

redpajama_set_name: RedPajamaGithub


When it's cold outside, try these fun winter science experiments to learn a little bit more about the season! Science experiment ideas for all ages!
Winter science experiments are a lot of fun, but have you ever noticed how many require snow? In Texas, we don't have access to snow except every two to three years, but we don't want to miss out on the winter science fun!
I've put together this list of winter science experiments that you can do no matter what state you live in. Just because it doesn't snow where you live doesn't mean you have to skip science in the winter!
Related: Simple STEM Activities for Every Age!
We aren't lucky enough to get much snow in Texas, so we have to try winter science experiments that aren't dependent on snow. These clever winter science projects fit the bill perfectly!
This preschool winter science activities are perfect for preschoolers and kindergarteners!
Try these fun winter activities without snow with your older kids!


Inventures 2019 is the must-attend 'unconference' for creative minds. This year will be more exciting than ever! You'll be part of a network that connects entrepreneurs and start-ups with venture capitalists, angel investors, service providers, and thought leaders to discover and share the latest in innovation -- all with the Canadian Rockies at your doorstep.


text:
Trelleborg To Supply Smart Rope Free Mooring System To Port Of Langnas
Top 3 Robotic Solutions to Complete Ship & Hull Inspections
Incident Video: Malaysian Vessel, Greek Bulk Carrier Collide in Singapore Waters
Posted on Feb 12, 2019 in blog | 0 comments
February 11, 2019 by Bloomberg
A screen grab of video published by the Maritime and Port Authority of Singapore. Photo: MPA
By Saket Sundria (Bloomberg) — A Malaysian vessel and a Greek-registered bulk carrier collided in Singapore territorial waters off Tuas on Saturday, according to a statement from the Maritime and Port Authority of Singapore, which said it was "deeply concerned" by the intrusion.
Malaysia's Ministry of Foreign Affairs said late Saturday that the Greek vessel and its crew have been detained, the Straits Times reported. The Malaysian vessel, Polaris, was anchored while the Greek bulk carrier, Piraeus, was sailing at the time of the incident, and there were no injuries, according to the report.
Polaris, a Malaysian Marine Department vessel, is one of the ships that allegedly trespassed into Singapore's waters last year, according to the Straits Times report. The two nations, once part of the same country, have differences over issues ranging from maritime territorial claims to airspace, as well as the price of water supplied by Malaysia to the city-state.
Incident Video
"Singapore reiterates its call for Malaysia to withdraw its vessels from the area, as the persistent presence of its vessels clearly poses a threat to safety of navigation in the area," a spokesperson from Singapore's Ministry of Foreign Affairs said in an emailed statement Sunday. "As we have said previously, Malaysia will be responsible for any untoward situations on the ground that arise from continued deployment of its vessels into this area."
Piraeus was on its way from Singapore to its next port of call, Tanjung Pelepas, when the collision took place at about 2:28 p.m. on Saturday, the Maritime and Port Authority of Singapore said in a statement on its website. The authority is investigating the incident, it said.
"MPA is deeply concerned that the presence of the unauthorized vessels in our port limits can cause confusion for the international shipping community and threaten navigational safety in our waters," it said.
Tension between the two nations escalated after the government of Prime Minister Mahathir Mohamad, who returned to power in Malaysia last year, said it wants to retake airspace in Johor in stages from the end of 2019. Singapore's transport ministry responded by saying the countries had an agreement dating back to 1974 that gave the city-state the right to provide air traffic services in the airspace above southern Johor.
Singapore also lodged a protest over Malaysia's decision to extend the limits of a port in Johor, which borders the city state.
On Jan. 8, both countries reiterated efforts to improve bilateral ties. Days later, they postponed a ministerial meeting scheduled for Jan. 14, after what Singapore called an " intrusion" into its waters by Osman Sapian, chief minister of Johor. Osman said in a Facebook post that the area he visited isn't in Singapore waters.
A second posted online shows the collision from another angle:
© 2019 Bloomberg L.P

redpajama_set_name: RedPajamaCommonCrawl


A solid local SEO strategy will drive more customers to your business.
Local SEO should be core to all client SEO strategies. For retailers and shop-fronted businesses, it is essential for driving customers through the door. For businesses with an online presence, it is an essential trust signal that Google looks for and rewards. At Distinctly, we always ensure that local SEO is well-managed from the very start.


text:
Details on Dalai Lama's visit
Spiritual leader to be at UAlbany in addition to Times Union Center
Albany Times-Union/March 18, 2009
By Brian Ettkin
More details about the Dalai Lama's April Albany visit were announced Tuesday at the Times Union Center by sisters Sara and Clare Bronfman, the Seagram's heiresses organizing the spiritual leader's area appearances.
At a news event attended by Albany Mayor Jerry Jennings, Sara Bronfman said that in addition to a 2 p.m. event April 19 at the Times Union Center, the Dalai Lama will be at the University at Albany April 20 to 22; details on campus events were not yet available.
The Bronfmans, who live in the region, said world leaders, royalty, scientists, academics and dignitaries are expected in Albany for the Dalai Lama's appearances, including billionaire businessman Richard Branson, CEO of the Virgin Group, and 1976 Nobel Peace Prize winner Betty Williams, co-founder of Community of Peace People, which is dedicated to promoting peace in Northern Ireland.
The Dalai Lama's visit is sponsored by the World Ethical Foundations Consortium, which was founded by the Bronfmans and its "conceptual founder," Keith Raniere. Raniere is also the founder of NXIVM (pronounced Nexium), a Capital Region-based enterprise whose detractors, including former members and cult experts, have characterized as a cult. NXIVM offers executive success programs, in which the Bronfmans have participated. The Bronfmans are involved with several businesses and foundations with Raniere.
Asked if this was an opportunity to improve public perception of NXIVM, Clare Bronfman replied: "There are many people who have a great amount of resources to look into NXIVM who want to come and have put a lot of time and resources into doing a lot of factual checking. They're still coming. ... I think that speaks to itself.
Sara Bronfman said the event will "change the face of Albany if the population of Albany embraces it and gets excited about and really understands the fortitude of something like this coming to this city and what it will do for us, what a power to put Albany on the map, how it will change the reputation of Albany, how this will become a place for the noble pursuit of humanity."


On April 23, Carrie O'Malley moderated a panel discussion titled "Coffee and Conversation with Local Developers" featuring Combined Properties, Inc.'s Kathy Bonnafe, Urban Atlantic's Caroline Kenney, Cityline Partners' Donna Shafer, The Rockefeller Group's Hilary Goldfarb, and Aimco Apartment Homes' Kelly Nagel. Panelists shared insights on projects in the DC market and updates on capital raising, pricing, upcoming projects, and outlook on trends and key risk facing developers in 2018 and beyond. Carrie and Hirschler Tysons partner Kristen Burgers also hosted a round table discussion on PACE.
Thanks for including us! Carrie was a masterful moderator, and I think it helped that all of us (unplanned, I imagine) knew at least a couple of other people on the panel, which helped with chemistry. I thoroughly enjoyed participating – thanks!
just wanted to thank you again for doing such a fantastic job moderating our panel yesterday. I've been on a lot of panels over the years and, I must say, you were one of the most organized and best moderators I've worked with! What a fabulous group of women too!
Founded in 2013, the Kayo Conference Series unites a community of women investors, REITs, investment bankers, asset managers, developers, credit investors & lenders, attorneys, accountants and industry advisors to network and communicate about deal flow, capital, industry knowledge and career issues. Kayo connects women through its flagship annual conferences, email newsletters, online community and digital content. Learn more about Kayo here.


text:
ubi.pt
The University of Beira Interior is a public university located in the city of Covilhã, Portugal. It was created in 1979, and has about 6,879 students distributed across a multiplicity of graduation courses, awarding all academic degrees in fields ranging from medicine and biomedical sciences to aeronautical engineering to mathematics. The university is named after the historical Beira region, meaning Beira Interior the most interior area of Beira, mainly composed by the district of Guarda and the district of Castelo Branco, in today's Centro region. More information...
In June 2020 the website ubi.pt was on the 14,998th place in the ranking of the most reliable and popular sources in multilingual Wikipedia from readers' point of view (PR-score). If we consider only frequency of appearance of this source in references of Wikipedia articles (F-score), this website was on the 12,280th place in June 2020. From Wikipedians' point of view, "ubi.pt" is the 13,979th most reliable source in different language versions of Wikipedia (AR-score).
The website is placed before voetbalprimeur.nl and after vineyardtheatre.org in multilingual PR ranking of the most reliable sources in Wikipedia.
Ukrainian Wikipedia (uk)
Hebrew Wikipedia (he)
Dutch Wikipedia (nl)
Bengali Wikipedia (bn)
Persian Wikipedia (fa)
Malayalam Wikipedia (ml)
Mirandese Wikipedia (mwl)
Armenian Wikipedia (hy)
Romanian Wikipedia (ro)


text:
Admin {{ oUser.name }} Logout Looking to lose weight? Try our FREE Calorie Counter » | Log In
Fitness Nutrition Forums
9 Celebs Who Are Vegan—and What They Have to Say About It
Cailyn Cox
There are many different arguments for adopting a vegan lifestyle, including animal welfare, the effect that the meat industry has on the environment, and even improved health and weight (according to PETA, vegans, on average, are 20 pounds lighter than meat-eaters). There are also many famous faces who have shared their decisions to go vegan, and below are nine of them.
Miley Cyrus is a big animal lover and is often vocal about animal rights. She made the decision to go vegan (and has been celebrated by PETA) in 2014, and has never looked back. According to Hello! magazine, she even has a tattoo of The Vegan Society's symbol.
Jenna Dewan has been a vegan since childhood, after watching an eye-opening documentary. "The next day I said 'I'm never eating meat again,'" she told Women's Health. "It just stuck. I feel good about it morally and physically."
Michelle Pfeiffer only became a vegan in her fifties, and her decision was health-driven. According to CNN, in 2012, she explained that she felt veganism was a healthier option, and after doing her research, she claimed the science behind it was "irrefutable."
Ellen DeGeneres is reported to have adopted a vegan diet in 2008. According to Delish, DeGeneres made the decision after reading books on animal rights and has stated she is vegan because she loves animals.
Madelaine Petsch, one of Riverdale's finest, has told People magazine she's been eating a "plant-based" diet her whole life. "Being vegan keeps my body fueled and running smoothly," she added.
Beauty guru Kat Von D is very passionate about her plant-based diet, and she has been vocal about her decision on numerous occasions. She's also worked hard to dispel myths surrounding veganism, telling fans that their hair won't fall out, their skin won't be affected (and hers is extremely healthy), and that if you eat right you won't feel weak or get too skinny.
Zac Efron credits veganism for helping him stay in shape and told Teen Vogue that it "completely changed" the way he metabolizes food and the way he sleeps. Efron claims a vegan lifestyle has done wonders for his exercise and his routine.
Gisele Bündchen has thought about how her diet affects the environment and decided it was best to become a vegan, not just for herself, but for her whole family. "We all love it," she told People. "It's not only good for our health and makes us feel good, but it is also good for the planet."
Ellie Goulding has not been a vegan her whole life but spoke about her decision to change her diet in 2018. "Once I fully understood where meat came from...I found that concept quite hard to live with," she told The Cut. "If you don't need meat to survive, I don't see why you have to have it."
[Image via Andrea Raffin / Shutterstock.com]
{{ oPromoboxArticle.title }}
{{ oArticle.title }}
{{ oArticle.subtitle }}
{{oArticle.author.name}} Fitday Editor
{{ oItem.title }}
Follow FitDay
{{oArticle.title}}
Scroll For More ▼
Terms of Service | Privacy Policy | Contact FitDay | Do Not Sell My Personal Information
FITDAY is a registered service mark of MH Sub I, LLC dba Internet Brands.
Advertise on FitDay


It is sad that in the world's democracy, that army has once again overruled the CBI and the Supreme Court. The army has closed the court martial of its officers who were found guilty of fake encounter of Pathribal, J&K by CBI after which the Supreme Court of India had asked the Army to either provide sanction of prosecution against them or to do court martial for these officers.
The army has closed the court martial on the grounds that there was no evidence against their officers, whereas the CBI had already investigated the matter and found that it was a conspiracy where these officers had picked on innocent civilians to create an impression that the militants responsible for the Chhatisinghpora killing have been neutralized.
It was one of the few cases that had managed to go up till the Supreme Court and in which the Supreme Court accepting the CBI version had directed the army to take action in 2012. But dramatically, after two years, the army closed the court martial file on 24 Jan 2014 and therefore to an extent has overruled the CBI and even Supreme Court. It is also to be noted that how Army opposed the case and argued that no case can be registered against its officers under the veil of AFSPA as it provides impunity and that it requires prior sanction of central government to prosecute as per Section 7 of AFSPA.
Anyone who believes in justice with equality should not accept such rules and must demand to scrap AFSPA. Even in many other cases, AFSPA has proved to be a draconian law and has abetted human rights violations through fake killings, torture and rapes. With time, because of the impunity and no sanction granted by central government to prosecute an armed personal, this has became a habit and mindset of deployed security personals and consequently a danger for all those living in AFSPA-imposed areas.
We believe in truth, justice and peace for all without any discrimination. We do not support any form of violence and we believe that it is a duty of the armed personnel that they must respect every human being and follow the path of justice and truth rather. They must know that just by donning the uniform, they do not get any authoritative command of violence or killing, rather they get a responsibility to protect people and not to harm them. We also believe that being a part of the Indian department of governance, army must respect the investigation and instructions of central agencies as well as of the judiciary.
With these sentiments, we hereby demand and hope that our demands will be heard.
If you are agree with these demands, endorse the statement so that it can be send to concerned authorities.
All others who favor humanity and justice.


text:
China CCP to Nationalize Jack Ma's Alibaba and Ant Group
Recent reports from China seemingly indicate that the Chinese government is planning to nationalize Alibaba and the Ant Group, founded by mogul Jack Ma. The Chinese Communist Party (CCP) has forged ahead with the antitrust investigation into the e-commerce giant. The administration is investigating the company for suspected monopolistic activities,
WHO team investigating virus origins denied entry to China
According to the World Health Organization (WHO), one of their teams was denied entry into China to investigate the origins of the Covid-19 virus. Two members were already on their way to the country, and the WHO reported that the problem was a lack of visa clearances on behalf of
Lawmakers Propose $1M to Examine How Mis- And Disinformation Impacted COVID-19 Response
On Thursday, Democratic Congressmen introduced legislation that would give $1 million to the National Science Foundation to aid in their probe, which is investigating how online disinformation disrupted the US public response to COVID-19. The study would be mandated if the legislation were to pass, authorized by the COVID-19 Disinformation
FBI Raided Discord Chats Of 'Unite The Right' Organizer
Forbes recently uncovered a search warrant pertaining to the Discord account of the chief organizer of the Unite the Right protests in Charlottesville. The protests, which turned violent and caused the death of a young woman, were led by Jason Kessler. The FBI obtained a search warrant to raid Kessler's
The FBI has reached out to tech giant Apple for assistance in unlocking iPhones belonging to Pensacola shooter Mohammed Saeed Alshamrani, a Saudi air force trainee who shot and killed three people at the Naval Air Station in December. Apple's general counsel received a letter from the FBI that stated
Web Hosting Firm Slapped With $10 Million GDPR Fine
The German Federal Commissioner for Data Protection and Freedom of Information has imposed a $10.64 million fine on a German telecoms provider, claiming it had not taken sufficient technical and organizations measure to prevent malicious actors and unauthorized persons from achieving access to customer information. The company, 1&1 GmbH, was
New NYPD intelligence unit to tackle far-right extremist threats
The New York Police Department (NYPD) announced Wednesday that it has launched a new unit that will focus entirely on combating far-right extremists and neo-nazis named the Racially and Ethnically Motivated Extremism (R.E.M.E.). R.E.M.E. opened earlier this month and has since begun dozens of investigations into white supremacist groups and


text:
How to sustain your transformation
11 Mar 2016 • by Changeboard Team
How big will the transformation be?
This question quickly stumps many executives. However, it is perhaps the most important question that organisations need to grapple with, particularly those that pursue the sustainability journey.
First, ask yourself: what is the capacity of your organisation? Now, imagine every machine your company owns suddenly stops. Imagine that every product your company makes disappears. Imagine your supply chain instantly dissolves.
Imagine everything that occupies your buildings vanishes, except for your co-workers. They are all standing idly by, anxious. This is the capacity of your organisation. It is independent from all the machines, goods, services, materials, and even bottlenecks that often distract us during our daily business processes. Organisations often forego or delay their long-term vision because they do not correctly assess their capacity for change and innovation. As a result, organisations often shy away from challenges and consider them distractions as opposed to opportunities.
To tackle the sustainability challenges of the coming age and to remain relevant in the future, leaders must be able to accurately assess the capacity of their organisations and develop a long-term vision around them.
Consider the future
Perhaps the most effective case that demonstrates the importance of long-term vision is the electric vehicle. Although electric vehicles were invented in the mid-19th century, they suffered from three problems: high cost (primarily attributed to batteries), low top-speed, and short range. GM became the first automobile manufacturer to mass-produce an electric vehicle, the EV1 during the 1990s. It was primed to become the leader in the electric vehicle market, having without a doubt the latest and most advanced technology at the time. However, GM cited that the actual cost for producing electric vehicles was too high to market. It, therefore, decided to terminate the EV1, in one of the most controversial moves in history. In addition, GM and other automakers were notoriously blamed for spending millions of dollars to lobby against regulation that would require the auto industry to produce a certain percentage of electric vehicles in each fleet.
Whereas other companies were unwilling to make the upfront investment for developing electric vehicles, a handful of visionaries were willing. Tesla raised $187 million through five rounds of financing, largely led by Elon Musk who became the chairman of the board. Tesla's vision was for a high-performance fleet of electric vehicles, vehicles that could outperform their gasoline and hybrid peers in every category. Their primary innovation was investing in lithium-battery technology, the same batteries that power many modern consumer electronics such as laptops and cell phones. Despite being the most optimal battery technology for electric cars, lithium-ion batteries were not previously used due to their high cost. Tesla worked tirelessly to innovate on lithium-ion cells, re-designing them to make them lighter and cheaper to manufacture.
On August 2, 2006, Elon Musk wrote a memo entitled, "The Secret Tesla Motors Master Plan (just between you and me)." In it, Musk described how the first goal of Tesla was to build a high-end sports car, the 'Tesla Roadster', which could go head to head with a Porsche or Ferrari and still have twice the energy efficiency of a Prius. With a price-point of approximately $110,000, Musk admits that there will only be a small supply of Roadsters, but they will serve as a proof of concept and be able to draw enough revenue and backing to begin building a more affordable car. With retail sales beginning in 2012, the Model S falls into this category, starting at just under $70,000. After selling enough of these units, Musk states that Tesla's plan will be to launch an even more affordable car. It is estimated that this car, codenamed BlueStar and now referred to as the Model 3, will sell for between $35,000 with an expected launch date in 2017. Tesla's ability to follow Elon Musk's roadmap and 11-year vision is impressive to say the least.
The Model S scored a perfect 5.0 National Highway Traffic Safety Administration (NHTSA) safety rating, with consumer reports giving it a score of 99/100, the highest rating the publication has ever awarded to a car. It is hard to disagree with this rating because on a single charge, a Model S can travel 300 miles, with the ability to go from 0 to 60 mph in 5.9 seconds with a 302 horsepower (hp) motor and 4.2 seconds with a 416 hp motor. A drag coefficient of 0.24 makes the Model S one of the most aerodynamic cars on the market, with a fuel economy of 89 miles per gallon (mpg) of gasoline equivalent. For customers traveling far distances, the Model S can be recharged for no cost at a supercharger station in approximately 30 minutes. Otherwise, the batteries can be charged overnight in a regular socket.
Ahead of the competition
Tesla's success can be attributed to the long-term vision of Elon Musk, just as its market penetration can be attributed to the short time frames in which long-standing auto manufacturers are entrenched. In a 2009 interview, the vice-chairman of GM, Bob Lutz, remarked: "All the geniuses here at General Motors kept saying lithium-ion technology is 10 years away, and Toyota agreed with us, and boom, along comes Tesla. So I said, 'How come some tiny little California startup, run by guys who know nothing about the car business, can do this, and we can't?'" Even if the technology was 10 years away, why not use GM or Toyota's capacity to achieve it?
As Tesla begins paving the way for economically-priced, self-driving vehicles, Elon Musk's vision for a fully electric car fleet seems to become closer to a reality than a dream. The question posed to leaders is this: If a game-changing technology is another 10 years away from being realized, why are you not already working on it?
Alternatively, if you imagine your company being very different 25 years from now, why wait to start transform it?
By IMD Professor Francisco Szekely, with Zahir Dossa, Ph.D


text:
/* $Id$ */

package org.apache.fop.layoutmgr;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

import org.apache.fop.area.Block;
import org.apache.fop.area.BodyRegion;
import org.apache.fop.area.Footnote;
import org.apache.fop.area.PageViewport;
import org.apache.fop.fo.Constants;
import org.apache.fop.fo.FObj;
import org.apache.fop.fo.pagination.Region;
import org.apache.fop.fo.pagination.RegionBody;
import org.apache.fop.fo.pagination.StaticContent;
import org.apache.fop.layoutmgr.BreakingAlgorithm.KnuthNode;
import org.apache.fop.layoutmgr.PageBreakingAlgorithm.PageBreakingLayoutListener;
import org.apache.fop.layoutmgr.list.ListItemLayoutManager;
import org.apache.fop.traits.MinOptMax;

/**
 * Handles the breaking of pages in an fo:flow
 */
public class PageBreaker extends AbstractBreaker {

    private PageSequenceLayoutManager pslm;
    private boolean firstPart = true;
    private boolean pageBreakHandled;
    private boolean needColumnBalancing;
    private PageProvider pageProvider;
    private Block separatorArea;
    private boolean spanAllActive;
    private boolean handlingStartOfFloat;
    private boolean handlingEndOfFloat;
    private int floatHeight;
    private int floatYOffset;

    private List relayedFootnotesList;
    private List relayedLengthList;
    private int relayedTotalFootnotesLength;
    private int relayedInsertedFootnotesLength;
    private boolean relayedFootnotesPending;
    private boolean relayedNewFootnotes;
    private int relayedFirstNewFootnoteIndex;
    private int relayedFootnoteListIndex;
    private int relayedFootnoteElementIndex = -1;
    private MinOptMax relayedFootnoteSeparatorLength;
    private int previousFootnoteListIndex = -2;
    private int previousFootnoteElementIndex = -2;

    /**
     * The FlowLayoutManager object, which processes
     * the single fo:flow of the fo:page-sequence
     */
    private FlowLayoutManager childFLM;

    private StaticContentLayoutManager footnoteSeparatorLM;

    /**
     * Construct page breaker.
     * @param pslm the page sequence layout manager
     */
    public PageBreaker(PageSequenceLayoutManager pslm) {
        this.pslm = pslm;
        this.pageProvider = pslm.getPageProvider();
        this.childFLM = pslm.getLayoutManagerMaker().makeFlowLayoutManager(
                pslm, pslm.getPageSequence().getMainFlow());
    }

    /** {@inheritDoc} */
    protected void updateLayoutContext(LayoutContext context) {
        int flowIPD = pslm.getCurrentColumnWidth();
        context.setRefIPD(flowIPD);
    }

    /** {@inheritDoc} */
    protected LayoutManager getTopLevelLM() {
        return pslm;
    }

    /** {@inheritDoc} */
    protected PageProvider getPageProvider() {
        return pslm.getPageProvider();
    }

    /**
     * Starts the page breaking process.
     * @param flowBPD the constant available block-progression-dimension (used for every part)
     */
    void doLayout(int flowBPD) {
        doLayout(flowBPD, false);
    }

    /** {@inheritDoc} */
    protected PageBreakingLayoutListener createLayoutListener() {
        return new PageBreakingLayoutListener() {

            public void notifyOverflow(int part, int amount, FObj obj) {
                Page p = pageProvider.getPageFromColumnIndex(part);
                RegionBody body = (RegionBody)p.getSimplePageMaster().getRegion(
                        Region.FO_REGION_BODY);
                BlockLevelEventProducer eventProducer = BlockLevelEventProducer.Provider.get(
                        body.getUserAgent().getEventBroadcaster());

                boolean canRecover = (body.getOverflow() != Constants.EN_ERROR_IF_OVERFLOW);
                boolean needClip = (body.getOverflow() == Constants.EN_HIDDEN
                        || body.getOverflow() == Constants.EN_ERROR_IF_OVERFLOW);
                eventProducer.regionOverflow(this, body.getName(),
                        p.getPageViewport().getPageNumberString(),
                        amount, needClip, canRecover,
                        body.getLocator());
            }

        };
    }

    /** {@inheritDoc} */
    protected int handleSpanChange(LayoutContext childLC, int nextSequenceStartsOn) {
        needColumnBalancing = false;
        if (childLC.getNextSpan() != Constants.NOT_SET) {
            //Next block list will have a different span.
            nextSequenceStartsOn = childLC.getNextSpan();
            needColumnBalancing = childLC.getNextSpan() == Constants.EN_ALL
                    && childLC.getDisableColumnBalancing() == Constants.EN_FALSE;

        }
        if (needColumnBalancing) {
            AbstractBreaker.log.debug(
                    "Column balancing necessary for the next element list!!!");
        }
        return nextSequenceStartsOn;
    }

    /** {@inheritDoc} */
    protected int getNextBlockList(LayoutContext childLC,
            int nextSequenceStartsOn) {
        return getNextBlockList(childLC, nextSequenceStartsOn, null, null, null);
    }

    /** {@inheritDoc} */
    protected int getNextBlockList(LayoutContext childLC, int nextSequenceStartsOn,
            Position positionAtIPDChange, LayoutManager restartLM, List firstElements) {
        if (!handlingFloat()) {
            if (!firstPart) {
                // if this is the first page that will be created by
                // the current BlockSequence, it could have a break
                // condition that must be satisfied;
                // otherwise, we may simply need a new page
                handleBreakTrait(nextSequenceStartsOn);
            }
            firstPart = false;
            pageBreakHandled = true;

            pageProvider.setStartOfNextElementList(pslm.getCurrentPageNum(), pslm.getCurrentPV()
                    .getCurrentSpan().getCurrentFlowIndex(), this.spanAllActive);
        }
        return super.getNextBlockList(childLC, nextSequenceStartsOn, positionAtIPDChange,
                restartLM, firstElements);
    }

    private boolean containsFootnotes(List contentList, LayoutContext context) {
        boolean containsFootnotes = false;
        if (contentList != null) {
            ListIterator contentListIterator = contentList.listIterator();
            while (contentListIterator.hasNext()) {
                ListElement element = (ListElement) contentListIterator.next();
                if (element instanceof KnuthBlockBox
                    && ((KnuthBlockBox) element).hasAnchors()) {
                    // element represents a line with footnote citations
                    containsFootnotes = true;
                    KnuthBlockBox box = (KnuthBlockBox) element;
                    List<List<KnuthElement>> footnotes = getFootnoteKnuthElements(childFLM, context,
                            box.getFootnoteBodyLMs());
                    for (List<KnuthElement> footnote : footnotes) {
                        box.addElementList(footnote);
                    }
                }
            }
        }
        return containsFootnotes;
    }

    public static  List<List<KnuthElement>> getFootnoteKnuthElements(FlowLayoutManager flowLM, LayoutContext context,
            List<FootnoteBodyLayoutManager> footnoteBodyLMs) {
        List<List<KnuthElement>> footnotes = new ArrayList<List<KnuthElement>>();
        LayoutContext footnoteContext = LayoutContext.copyOf(context);
        footnoteContext.setStackLimitBP(context.getStackLimitBP());
        footnoteContext.setRefIPD(flowLM.getPSLM()
                .getCurrentPV().getRegionReference(Constants.FO_REGION_BODY).getIPD());
        for (FootnoteBodyLayoutManager fblm : footnoteBodyLMs) {
            fblm.setParent(flowLM);
            fblm.initialize();
            List<KnuthElement> footnote = fblm.getNextKnuthElements(footnoteContext, Constants.EN_START);
            // TODO this does not respect possible stacking constraints between footnotes
            SpaceResolver.resolveElementList(footnote);
            footnotes.add(footnote);
        }
        return footnotes;
    }

    private void handleFootnoteSeparator() {
        StaticContent footnoteSeparator;
        footnoteSeparator = pslm.getPageSequence().getStaticContent("xsl-footnote-separator");
        if (footnoteSeparator != null) {
            // the footnote separator can contain page-dependent content such as
            // page numbers or retrieve markers, so its areas cannot simply be
            // obtained now and repeated in each page;
            // we need to know in advance the separator bpd: the actual separator
            // could be different from page to page, but its bpd would likely be
            // always the same

            // create a Block area that will contain the separator areas
            separatorArea = new Block();
            separatorArea.setIPD(pslm.getCurrentPV()
                        .getRegionReference(Constants.FO_REGION_BODY).getIPD());
            // create a StaticContentLM for the footnote separator
            footnoteSeparatorLM
                    = pslm.getLayoutManagerMaker().makeStaticContentLayoutManager(
                        pslm, footnoteSeparator, separatorArea);
            footnoteSeparatorLM.doLayout();

            footnoteSeparatorLength = MinOptMax.getInstance(separatorArea.getBPD());
        }
    }

    /** {@inheritDoc} */
    protected List getNextKnuthElements(LayoutContext context, int alignment) {
        List contentList = null;

        while (!childFLM.isFinished() && contentList == null) {
            contentList = childFLM.getNextKnuthElements(context, alignment);
        }

        // scan contentList, searching for footnotes
        if (containsFootnotes(contentList, context)) {
            // handle the footnote separator
            handleFootnoteSeparator();
        }

        return contentList;
    }

    /** {@inheritDoc} */
    protected List getNextKnuthElements(LayoutContext context, int alignment,
            Position positionAtIPDChange, LayoutManager restartAtLM) {
        List contentList = null;

        do {
            contentList = childFLM.getNextKnuthElements(context, alignment, positionAtIPDChange,
                    restartAtLM);
        } while (!childFLM.isFinished() && contentList == null);

        // scan contentList, searching for footnotes
        if (containsFootnotes(contentList, context)) {
            // handle the footnote separator
            handleFootnoteSeparator();
        }
        return contentList;
    }

    /**
     * @return current display alignment
     */
    protected int getCurrentDisplayAlign() {
        return pslm.getCurrentPage().getSimplePageMaster().getRegion(
                Constants.FO_REGION_BODY).getDisplayAlign();
    }

    /**
     * @return whether or not this flow has more page break opportunities
     */
    protected boolean hasMoreContent() {
        return !childFLM.isFinished();
    }

    /**
     * Adds an area to the flow layout manager
     * @param posIter the position iterator
     * @param context the layout context
     */
    protected void addAreas(PositionIterator posIter, LayoutContext context) {
        if (footnoteSeparatorLM != null) {
            StaticContent footnoteSeparator = pslm.getPageSequence().getStaticContent(
                    "xsl-footnote-separator");
            // create a Block area that will contain the separator areas
            separatorArea = new Block();
            separatorArea.setIPD(
                    pslm.getCurrentPV().getRegionReference(Constants.FO_REGION_BODY).getIPD());
            // create a StaticContentLM for the footnote separator
            footnoteSeparatorLM = pslm.getLayoutManagerMaker().makeStaticContentLayoutManager(
            pslm, footnoteSeparator, separatorArea);
            footnoteSeparatorLM.doLayout();
        }

        childFLM.addAreas(posIter, context);
    }

    /**
     * {@inheritDoc}
     * This implementation checks whether to trigger column-balancing,
     * or whether to take into account a 'last-page' condition.
     */
    protected void doPhase3(PageBreakingAlgorithm alg, int partCount,
            BlockSequence originalList, BlockSequence effectiveList) {

        if (needColumnBalancing) {
            //column balancing for the last part
            redoLayout(alg, partCount, originalList, effectiveList);
            return;
        }

        boolean lastPageMasterDefined = pslm.getPageSequence().hasPagePositionLast()
                || pslm.getPageSequence().hasPagePositionOnly() && pslm.isOnFirstPage(partCount - 1);
        if (!hasMoreContent()) {
            //last part is reached
            if (lastPageMasterDefined) {
                //last-page condition
                redoLayout(alg, partCount, originalList, effectiveList);
                return;
            }
        }

        //nothing special: just add the areas now
        addAreas(alg, partCount, originalList, effectiveList);
    }

    /**
     * Restart the algorithm at the break corresponding to the given partCount. Used to
     * re-do the part after the last break in case of either column-balancing or a last
     * page-master.
     */
    private void redoLayout(PageBreakingAlgorithm alg, int partCount,
            BlockSequence originalList, BlockSequence effectiveList) {

        int newStartPos = 0;
        int restartPoint = pageProvider.getStartingPartIndexForLastPage(partCount);
        if (restartPoint > 0) {
            //Add definitive areas for the parts before the
            //restarting point
            addAreas(alg, restartPoint, originalList, effectiveList);
            //Get page break from which we restart
            PageBreakPosition pbp = alg.getPageBreaks().get(restartPoint - 1);
            newStartPos = alg.par.getFirstBoxIndex(pbp.getLeafPos() + 1);
            //Handle page break right here to avoid any side-effects
            if (newStartPos > 0) {
                handleBreakTrait(Constants.EN_PAGE);
            }
        }

        AbstractBreaker.log.debug("Restarting at " + restartPoint
                + ", new start position: " + newStartPos);

        pageBreakHandled = true;
        //Update so the available BPD is reported correctly
        int currentPageNum = pslm.getCurrentPageNum();

        pageProvider.setStartOfNextElementList(currentPageNum,
                pslm.getCurrentPV().getCurrentSpan().getCurrentFlowIndex(), this.spanAllActive);

        //Make sure we only add the areas we haven't added already
        effectiveList.ignoreAtStart = newStartPos;

        PageBreakingAlgorithm algRestart;
        if (needColumnBalancing) {
            AbstractBreaker.log.debug("Column balancing now!!!");
            AbstractBreaker.log.debug("===================================================");

            //Restart last page
            algRestart = new BalancingColumnBreakingAlgorithm(
                    getTopLevelLM(), getPageProvider(), createLayoutListener(),
                    alignment, Constants.EN_START, footnoteSeparatorLength,
                    isPartOverflowRecoveryActivated(),
                    pslm.getCurrentPV().getBodyRegion().getColumnCount());
            AbstractBreaker.log.debug("===================================================");
        } else  {
            // Handle special page-master for last page
            BodyRegion currentBody = pageProvider.getPage(false, currentPageNum)
                    .getPageViewport().getBodyRegion();

            setLastPageIndex(currentPageNum);

            BodyRegion lastBody = pageProvider.getPage(false, currentPageNum)
                    .getPageViewport().getBodyRegion();
            lastBody.getMainReference().setSpans(currentBody.getMainReference().getSpans());
            AbstractBreaker.log.debug("Last page handling now!!!");
            AbstractBreaker.log.debug("===================================================");
            //Restart last page
            algRestart = new PageBreakingAlgorithm(
                    getTopLevelLM(), getPageProvider(), createLayoutListener(),
                    alg.getAlignment(), alg.getAlignmentLast(),
                    footnoteSeparatorLength,
                    isPartOverflowRecoveryActivated(), false, false);
            AbstractBreaker.log.debug("===================================================");
        }

        int optimalPageCount = algRestart.findBreakingPoints(effectiveList,
                    newStartPos,
                    1, true, BreakingAlgorithm.ALL_BREAKS);
        AbstractBreaker.log.debug("restart: optimalPageCount= " + optimalPageCount
                + " pageBreaks.size()= " + algRestart.getPageBreaks().size());

        boolean fitsOnePage
            = optimalPageCount <= pslm.getCurrentPV()
                .getBodyRegion().getMainReference().getCurrentSpan().getColumnCount();

        if (needColumnBalancing) {
            if (!fitsOnePage) {
                AbstractBreaker.log.warn(
                        "Breaking algorithm produced more columns than are available.");
                /* reenable when everything works
                throw new IllegalStateException(
                        "Breaking algorithm must not produce more columns than available.");
                */
            }
        } else {
            if (fitsOnePage) {
                //Replace last page
                pslm.setCurrentPage(pageProvider.getPage(false, currentPageNum));
            } else {
                //Last page-master cannot hold the content.
                //Add areas now...
                addAreas(alg, restartPoint, partCount - restartPoint, originalList, effectiveList);
                //...and add a blank last page
                setLastPageIndex(currentPageNum + 1);
                pslm.setCurrentPage(pslm.makeNewPage(true));
                return;
            }
        }

        addAreas(algRestart, optimalPageCount, originalList, effectiveList);
    }

    private void setLastPageIndex(int currentPageNum) {
        int lastPageIndex = pslm.getForcedLastPageNum(currentPageNum);
        pageProvider.setLastPageIndex(lastPageIndex);
    }

    /** {@inheritDoc} */
    protected void startPart(BlockSequence list, int breakClass) {
        AbstractBreaker.log.debug("startPart() breakClass=" + getBreakClassName(breakClass));
        if (pslm.getCurrentPage() == null) {
            throw new IllegalStateException("curPage must not be null");
        }
        if (!pageBreakHandled) {

            //firstPart is necessary because we need the first page before we start the
            //algorithm so we have a BPD and IPD. This may subject to change later when we
            //start handling more complex cases.
            if (!firstPart) {
                // if this is the first page that will be created by
                // the current BlockSequence, it could have a break
                // condition that must be satisfied;
                // otherwise, we may simply need a new page
                handleBreakTrait(breakClass);
            }
            pageProvider.setStartOfNextElementList(pslm.getCurrentPageNum(),
                    pslm.getCurrentPV().getCurrentSpan().getCurrentFlowIndex(),
                    this.spanAllActive);
        }
        pageBreakHandled = false;
        // add static areas and resolve any new id areas
        // finish page and add to area tree
        firstPart = false;
    }

    /** {@inheritDoc} */
    protected void handleEmptyContent() {
        pslm.getCurrentPV().getPage().fakeNonEmpty();
    }

    /** {@inheritDoc} */
    protected void finishPart(PageBreakingAlgorithm alg, PageBreakPosition pbp) {
        // add footnote areas
        if (!pslm.getTableHeaderFootnotes().isEmpty()
                || pbp.footnoteFirstListIndex < pbp.footnoteLastListIndex
                || pbp.footnoteFirstElementIndex <= pbp.footnoteLastElementIndex
                || !pslm.getTableFooterFootnotes().isEmpty()) {
            for (List<KnuthElement> footnote : pslm.getTableHeaderFootnotes()) {
                addFootnoteAreas(footnote);
            }
            // call addAreas() for each FootnoteBodyLM
            for (int i = pbp.footnoteFirstListIndex; i <= pbp.footnoteLastListIndex; i++) {
                List elementList = alg.getFootnoteList(i);
                int firstIndex = (i == pbp.footnoteFirstListIndex
                        ? pbp.footnoteFirstElementIndex : 0);
                int lastIndex = (i == pbp.footnoteLastListIndex
                        ? pbp.footnoteLastElementIndex : elementList.size() - 1);
                addFootnoteAreas(elementList, firstIndex, lastIndex + 1);
            }
            for (List<KnuthElement> footnote : pslm.getTableFooterFootnotes()) {
                addFootnoteAreas(footnote);
            }
            // set the offset from the top margin
            Footnote parentArea = pslm.getCurrentPV().getBodyRegion().getFootnote();
            int topOffset = pslm.getCurrentPV().getBodyRegion().getBPD() - parentArea.getBPD();
            if (separatorArea != null) {
                topOffset -= separatorArea.getBPD();
            }
            parentArea.setTop(topOffset);
            parentArea.setSeparator(separatorArea);
        }
        pslm.getCurrentPV().getCurrentSpan().notifyFlowsFinished();
        pslm.clearTableHeadingFootnotes();
    }

    private void addFootnoteAreas(List<KnuthElement> footnote) {
        addFootnoteAreas(footnote, 0, footnote.size());
    }

    private void addFootnoteAreas(List<KnuthElement> footnote, int startIndex, int endIndex) {
        SpaceResolver.performConditionalsNotification(footnote, startIndex, endIndex - 1, -1);
        LayoutContext childLC = LayoutContext.newInstance();
        AreaAdditionUtil.addAreas(null, new KnuthPossPosIter(footnote, startIndex, endIndex), childLC);
    }

    /** {@inheritDoc} */
    protected FlowLayoutManager getCurrentChildLM() {
        return childFLM;
    }

    /** {@inheritDoc} */
    protected void observeElementList(List elementList) {
        ElementListObserver.observe(elementList, "breaker",
                pslm.getFObj().getId());
    }

    /**
     * Depending on the kind of break condition, move to next column
     * or page. May need to make an empty page if next page would
     * not have the desired "handedness".
     * @param breakVal - value of break-before or break-after trait.
     */
    private void handleBreakTrait(int breakVal) {
        Page curPage = pslm.getCurrentPage();
        switch (breakVal) {
        case Constants.EN_ALL:
            //break due to span change in multi-column layout
            curPage.getPageViewport().createSpan(true);
            this.spanAllActive = true;
            return;
        case Constants.EN_NONE:
            curPage.getPageViewport().createSpan(false);
            this.spanAllActive = false;
            return;
        case Constants.EN_COLUMN:
        case Constants.EN_AUTO:
        case -1:
            PageViewport pv = curPage.getPageViewport();

            //Check if previous page was spanned
            boolean forceNewPageWithSpan = false;
            RegionBody rb = (RegionBody)curPage.getSimplePageMaster().getRegion(
                    Constants.FO_REGION_BODY);
            forceNewPageWithSpan
                    = (rb.getColumnCount() > 1
                        && pv.getCurrentSpan().getColumnCount() == 1);

            if (forceNewPageWithSpan) {
                log.trace("Forcing new page with span");
                curPage = pslm.makeNewPage(false);
                curPage.getPageViewport().createSpan(true);
            } else if (pv.getCurrentSpan().hasMoreFlows()) {
                log.trace("Moving to next flow");
                pv.getCurrentSpan().moveToNextFlow();
            } else {
                log.trace("Making new page");
                /*curPage = */pslm.makeNewPage(false);
            }
            return;
        case Constants.EN_PAGE:
        default:
            log.debug("handling break-before after page " + pslm.getCurrentPageNum()
                + " breakVal=" + getBreakClassName(breakVal));
            if (needBlankPageBeforeNew(breakVal)) {
                log.trace("Inserting blank page");
                /*curPage = */pslm.makeNewPage(true);
            }
            if (needNewPage(breakVal)) {
                log.trace("Making new page");
                /*curPage = */pslm.makeNewPage(false);
            }
        }
    }

    /**
     * Check if a blank page is needed to accommodate
     * desired even or odd page number.
     * @param breakVal - value of break-before or break-after trait.
     */
    private boolean needBlankPageBeforeNew(int breakVal) {
        if (breakVal == Constants.EN_PAGE
                || (pslm.getCurrentPage().getPageViewport().getPage().isEmpty())) {
            // any page is OK or we already have an empty page
            return false;
        } else {
            /* IF we are on the kind of page we need, we'll need a new page. */
            if (pslm.getCurrentPageNum() % 2 == 0) { // even page
                return (breakVal == Constants.EN_EVEN_PAGE);
            } else { // odd page
                return (breakVal == Constants.EN_ODD_PAGE);
            }
        }
    }

    /**
     * See if need to generate a new page
     * @param breakVal - value of break-before or break-after trait.
     */
    private boolean needNewPage(int breakVal) {
        if (pslm.getCurrentPage().getPageViewport().getPage().isEmpty()) {
            if (breakVal == Constants.EN_PAGE) {
                return false;
            } else if (pslm.getCurrentPageNum() % 2 == 0) { // even page
                return (breakVal == Constants.EN_ODD_PAGE);
            } else { // odd page
                return (breakVal == Constants.EN_EVEN_PAGE);
            }
        } else {
            return true;
        }
    }

    protected boolean handlingStartOfFloat() {
        return handlingStartOfFloat;
    }

    protected void handleStartOfFloat(int fHeight, int fYOffset) {
        handlingStartOfFloat = true;
        handlingEndOfFloat = false;
        floatHeight = fHeight;
        floatYOffset = fYOffset;
        childFLM.handleFloatOn();
    }

    protected int getFloatHeight() {
        return floatHeight;
    }

    protected int getFloatYOffset() {
        return floatYOffset;
    }

    protected boolean handlingEndOfFloat() {
        return handlingEndOfFloat;
    }

    protected void handleEndOfFloat(int fHeight) {
        handlingEndOfFloat = true;
        handlingStartOfFloat = false;
        floatHeight = fHeight;
        childFLM.handleFloatOff();
    }

    protected boolean handlingFloat() {
        return (handlingStartOfFloat || handlingEndOfFloat);
    }

    public int getOffsetDueToFloat() {
        handlingEndOfFloat = false;
        return floatHeight + floatYOffset;
    }

    protected int handleFloatLayout(PageBreakingAlgorithm alg, int optimalPageCount, BlockSequence blockList,
            LayoutContext childLC) {
        pageBreakHandled = true;
        List firstElements = Collections.EMPTY_LIST;
        KnuthNode floatNode = alg.getBestFloatEdgeNode();
        int floatPosition = floatNode.position;
        KnuthElement floatElem = alg.getElement(floatPosition);
        Position positionAtBreak = floatElem.getPosition();
        if (!(positionAtBreak instanceof SpaceResolver.SpaceHandlingBreakPosition)) {
            throw new UnsupportedOperationException("Don't know how to restart at position" + positionAtBreak);
        }
        /* Retrieve the original position wrapped into this space position */
        positionAtBreak = positionAtBreak.getPosition();
        addAreas(alg, optimalPageCount, blockList, blockList);
        blockLists.clear();
        blockListIndex = -1;
        LayoutManager restartAtLM = null;
        if (positionAtBreak != null && positionAtBreak.getIndex() == -1) {
            if (positionAtBreak instanceof ListItemLayoutManager.ListItemPosition) {
                restartAtLM = positionAtBreak.getLM();
            } else {
                Position position;
                Iterator iter = blockList.listIterator(floatPosition + 1);
                do {
                    KnuthElement nextElement = (KnuthElement) iter.next();
                    position = nextElement.getPosition();
                } while (position == null || position instanceof SpaceResolver.SpaceHandlingPosition
                        || position instanceof SpaceResolver.SpaceHandlingBreakPosition
                        && position.getPosition().getIndex() == -1);
                LayoutManager surroundingLM = positionAtBreak.getLM();
                while (position.getLM() != surroundingLM) {
                    position = position.getPosition();
                }
                restartAtLM = position.getPosition().getLM();
            }
        }
        int nextSequenceStartsOn = getNextBlockList(childLC, Constants.EN_COLUMN, positionAtBreak,
                restartAtLM, firstElements);
        return nextSequenceStartsOn;
    }

    protected void addAreasForFloats(PageBreakingAlgorithm alg, int startPart, int partCount,
            BlockSequence originalList, BlockSequence effectiveList, final LayoutContext childLC,
            int lastBreak, int startElementIndex, int endElementIndex) {
        FloatPosition pbp = alg.getFloatPosition();

        // Check the last break position for forced breaks
        int lastBreakClass;
        if (startElementIndex == 0) {
            lastBreakClass = effectiveList.getStartOn();
        } else {
            ListElement lastBreakElement = effectiveList.getElement(endElementIndex);
            if (lastBreakElement.isPenalty()) {
                KnuthPenalty pen = (KnuthPenalty) lastBreakElement;
                if (pen.getPenalty() == KnuthPenalty.INFINITE) {
                    /**
                     * That means that there was a keep.within-page="always", but that
                     * it's OK to break at a column. TODO The break class is being
                     * abused to implement keep.within-column and keep.within-page.
                     * This is very misleading and must be revised.
                     */
                    lastBreakClass = Constants.EN_COLUMN;
                } else {
                    lastBreakClass = pen.getBreakClass();
                }
            } else {
                lastBreakClass = Constants.EN_COLUMN;
            }
        }

        // the end of the new part
        endElementIndex = pbp.getLeafPos();

        // ignore the first elements added by the
        // PageSequenceLayoutManager
        startElementIndex += (startElementIndex == 0) ? effectiveList.ignoreAtStart : 0;

        log.debug("PLM> part: " + (startPart + partCount + 1) + ", start at pos " + startElementIndex
                + ", break at pos " + endElementIndex + ", break class = "
                + getBreakClassName(lastBreakClass));

        startPart(effectiveList, lastBreakClass);

        int displayAlign = getCurrentDisplayAlign();

        // The following is needed by SpaceResolver.performConditionalsNotification()
        // further down as there may be important Position elements in the element list trailer
        int notificationEndElementIndex = endElementIndex;

        // ignore the last elements added by the
        // PageSequenceLayoutManager
        endElementIndex -= (endElementIndex == (originalList.size() - 1)) ? effectiveList.ignoreAtEnd : 0;

        // ignore the last element in the page if it is a KnuthGlue
        // object
        if (((KnuthElement) effectiveList.get(endElementIndex)).isGlue()) {
            endElementIndex--;
        }

        // ignore KnuthGlue and KnuthPenalty objects
        // at the beginning of the line
        startElementIndex = alg.par.getFirstBoxIndex(startElementIndex);

        if (startElementIndex <= endElementIndex) {
            if (log.isDebugEnabled()) {
                log.debug("     addAreas from " + startElementIndex + " to " + endElementIndex);
            }
            // set the space adjustment ratio
            childLC.setSpaceAdjust(pbp.bpdAdjust);
            // add space before if display-align is center or bottom
            // add space after if display-align is distribute and
            // this is not the last page
            if (pbp.difference != 0 && displayAlign == Constants.EN_CENTER) {
                childLC.setSpaceBefore(pbp.difference / 2);
            } else if (pbp.difference != 0 && displayAlign == Constants.EN_AFTER) {
                childLC.setSpaceBefore(pbp.difference);
            }

            // Handle SpaceHandling(Break)Positions, see SpaceResolver!
            SpaceResolver.performConditionalsNotification(effectiveList, startElementIndex,
                    notificationEndElementIndex, lastBreak);
            // Add areas of lines, in the current page, before the float or during float
            addAreas(new KnuthPossPosIter(effectiveList, startElementIndex, endElementIndex + 1), childLC);
            // add areas for the float, if applicable
            if (alg.handlingStartOfFloat()) {
                for (int k = startElementIndex; k < endElementIndex + 1; k++) {
                    ListElement le = effectiveList.getElement(k);
                    if (le instanceof KnuthBlockBox) {
                        KnuthBlockBox kbb = (KnuthBlockBox) le;
                        for (FloatContentLayoutManager fclm : kbb.getFloatContentLMs()) {
                            fclm.processAreas(childLC);
                            int floatHeight = fclm.getFloatHeight();
                            int floatYOffset = fclm.getFloatYOffset();
                            PageSequenceLayoutManager pslm = (PageSequenceLayoutManager) getTopLevelLM();
                            pslm.recordStartOfFloat(floatHeight, floatYOffset);
                        }
                    }
                }
            }
            if (alg.handlingEndOfFloat()) {
                PageSequenceLayoutManager pslm = (PageSequenceLayoutManager) getTopLevelLM();
                pslm.setEndIntrusionAdjustment(0);
                pslm.setStartIntrusionAdjustment(0);
                int effectiveFloatHeight = alg.getFloatHeight();
                pslm.recordEndOfFloat(effectiveFloatHeight);
            }
            if (alg.handlingFloat()) {
                PageSequenceLayoutManager pslm = (PageSequenceLayoutManager) getTopLevelLM();
                alg.relayFootnotes(pslm);
            }
        } else {
            // no content for this part
            handleEmptyContent();
        }

        pageBreakHandled = true;
    }

    public void holdFootnotes(List fl, List ll, int tfl, int ifl, boolean fp, boolean nf, int fnfi, int fli,
            int fei, MinOptMax fsl, int pfli, int pfei) {
        relayedFootnotesList = fl;
        relayedLengthList = ll;
        relayedTotalFootnotesLength = tfl;
        relayedInsertedFootnotesLength = ifl;
        relayedFootnotesPending = fp;
        relayedNewFootnotes = nf;
        relayedFirstNewFootnoteIndex = fnfi;
        relayedFootnoteListIndex = fli;
        relayedFootnoteElementIndex = fei;
        relayedFootnoteSeparatorLength = fsl;
        previousFootnoteListIndex = pfli;
        previousFootnoteElementIndex = pfei;
    }

    public void retrieveFootones(PageBreakingAlgorithm alg) {
        if (relayedFootnotesList != null && relayedFootnotesList.size() > 0) {
            alg.loadFootnotes(relayedFootnotesList, relayedLengthList, relayedTotalFootnotesLength,
                    relayedInsertedFootnotesLength, relayedFootnotesPending, relayedNewFootnotes,
                    relayedFirstNewFootnoteIndex, relayedFootnoteListIndex, relayedFootnoteElementIndex,
                    relayedFootnoteSeparatorLength, previousFootnoteListIndex,
                    previousFootnoteElementIndex);
            relayedFootnotesList = null;
            relayedLengthList = null;
            relayedTotalFootnotesLength = 0;
            relayedInsertedFootnotesLength = 0;
            relayedFootnotesPending = false;
            relayedNewFootnotes = false;
            relayedFirstNewFootnoteIndex = 0;
            relayedFootnoteListIndex = 0;
            relayedFootnoteElementIndex = -1;
            relayedFootnoteSeparatorLength = null;
        }
    }
}


Going to this film was a gamble for us. Unfortunately, it was a gamble that didn't pay off. We're generally fans of Japanese cinema and television, everything from Kawasaki masterpieces to taiga dramas and TV serials. Cast Me If You Can was accurately billed as a romantic comedy. It's just not a good one.
Director Atsushi Ogata was there for Q&A and explained the genesis of this film. He's obviously a talented guy, and he pulled together an impressive cast including some of Japan's most popular actors. But Ogata gets very poor performances from the cast. It's just a very weak script, painfully awkward pacing and aimless direction that make for a rather boring 97 minutes. Ogata's previous films are all shorts, and this one feels like it should have been a short as well.
If you're not a fan of Japanese TV, stay away. Even if you like JTV, I'd still say skip it, but keep your eye out for better films from Ogata in the future.


text:
Q: how do i print to a printer 2 strings in java ill try make this as simple as possible
im trying to print a bill that contains this:
String text="Home\n";
       text+="Sweet\n"+"Home";
String cut_page="((char)12)m"; //this string is just a reference

i want to print to a printer the string "text" and immediately after print "cut_page".
i want to do it in this order because concatenating havent worked for me, because for some reason it cuts in the middle of the phrase.

bellow if the real method im using, if whats above is enough for you then ignore this part
String param = request.getParameter("empresa");
    System.out.println("empresa");
    System.out.println(param);
    Gson gson = new Gson();
    String corte="m";
    DetalleImpresion detalle = gson.fromJson(param, DetalleImpresion.class);
    System.out.println(detalle);
    ArrayList<HashMap<String, Object>> detalles_factura = detalle.getDetalle_factura();

    String total = detalle.total;
    String direccion = detalle.direccion;
    String fecha = detalle.fecha;
    String facturacli = detalle.factura;
    String cliente = detalle.cliente;
    String empresa = detalle.empresa;
    String clienteNombre = detalle.cliente_nombre;
    String guia = detalle.guia_remision;

    String factura = empresa+"\t"+facturacli+"\n"+"\t"+fecha+"\n";
            factura+="\t"+clienteNombre+"\tRUC\n"+"\t"+direccion+"\n"+guia+"\n";//+"=======================================\n";

    for(int i=0; i< detalles_factura.size();i++){
        HashMap<String, Object> row = detalles_factura.get(i);
        factura+=row.get("cantidad").toString() +"\t" + row.get("producto_nombre").toString()+
                "\t"+row.get("precio_unitario").toString()+"\t"+row.get("a_pagar").toString()+"\n";
    }

    StringBuilder facfinal = new StringBuilder();
    facfinal.append(factura);
    facfinal.append(corte);
    String ff=facfinal.toString();
    //factura+=corte;

    String printerName = request.getParameter("dispositivo");
    System.out.println(printerName);
    AttributeSet attributeSet = new HashAttributeSet();
    attributeSet.add(new PrinterName(printerName, null));
    attributeSet = new HashAttributeSet();
    attributeSet.add(ColorSupported.NOT_SUPPORTED);
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, attributeSet);
    int indexOfEmpsonPrinter = -1;

    for( int i = 0 , count = services.length ;  i < count ; ++i ){
        System.out.println(services[i].getName());
        if( services[i].getName().equals(printerName) ){
            indexOfEmpsonPrinter = i;

        }

    }

    if(indexOfEmpsonPrinter!=-1){

        InputStream is = new ByteArrayInputStream(ff.getBytes("UTF8"));
        InputStream is2 = new ByteArrayInputStream(factura.getBytes("UTF8"));
        PrintRequestAttributeSet  pras = new HashPrintRequestAttributeSet();
        pras.add(new Copies(2));

        Doc doc = new SimpleDoc(is, flavor, null);
        Doc doc2 = new SimpleDoc(is2, flavor, null);
        DocPrintJob job = services[indexOfEmpsonPrinter].createPrintJob();

        try {
            job.print(doc, pras);
        } catch (PrintException e) {
            e.printStackTrace();
        }

        is.close();
        is2.close();
    }
    else{
        System.out.println("Impresora no encontrada");
    }

A: From the DocFlavor API:

A Java Print Service instance is not required to support the following
  print data formats and print data representation classes. In fact, a
  developer using this class should never assume that a particular print
  service supports the document types corresponding to these pre-defined
  doc flavors.

Java is probably autosensing the "text/plain" doc flavor from your print job. Most printers that I have encountered have only rudimentary support for this.
In your case, I suspect the problem is that the printer wants a "\r\n" endline rather than Java's "\n". But more generally, you will have much better control over the results if you actually implement your own Printable object.

redpajama_set_name: RedPajamaStackExchange


My name is Nathan Rex and I am licensed to sell Property/Casualty and Life/Health products in the State of Ohio.
I have been with Eastside Insurance since January 2004.
Call or email me to see how Eastside Insurance can meet your insurance needs.
Eastside did a great job of comparing policies and saving us money.


Dan coordinates the team responsible for the delivery and development of our Skills Check programme, a market leading Employability initiative exclusive to Loughborough University London.
As part of the Stakeholder Management and Employability team, Dan also coordinates delivery of key Employer Engagement opportunities, events and experiences for the development of our students' career goals. Dan also works with the SME team to coordinate external student employment during term time.
Dan joined the University in 2014 supporting the London Senior Management team with a background in finance, logistics and human resources, and joined the Stakeholder Management and Employability team in the summer of 2016.


Escape the chill of winter and join us as Urban Poling heads south to the sunny beaches of Cancun, Mexico.
We have partnered with LA Travel Group to bring you the ultimate health and wellness experience with our very own, Barb Gormley, Urban Poling Instructor and Master Trainer.
Learn about the benefits of Nordic Walking from the very best while staying at the Barcelo Maya Grand. Don't miss out on this unique vacation combo from March 17 to 24th, 2018 and book now to reserve your spot. Contact LA Travel Group at 204-988-8441 or 1-888-868-7715 to secure your place in the sun.
Happy poling and see you there!


text:
Jenny Ryan – Net Worth 2022, Age, Height, Bio, Salary
See learn details about Jenny Ryan Net Worth, Age, Height, Bio, Salary. Also discover famous Game Show Host Jenny Ryan's Birthday, Measurements, Physical Stats, Dating, Wiki and more.
Jenny Ryan was born in United Kingdom on April 2, 1982. Quizzer known by her nicknames The Bolton Brainiac and The Vixen, she is primarily known as one of five faces of the ITV game show The Chase. She has also made appearances on shows like Fifteen to One and The Weakest Link. She began her quizzing career writing questions for the Chase pilot in 2009. However, she didn't make her debut on the show until 2015.
She was born Jenny Alexis Ryan in Bolton in greater Manchester. she has not shared about she's parent's name. Our team currently working, we will update Family, Sibling, Spouse and Children's information. Right now, we don't have much information about Education Life.
she is one of the successful Game Show Host. she has ranked on the list of those famous people who were born on April 2. she is one of the Richest Game Show Host who was born in Scotland. she also has a position among the list of Most popular Game Show Host. Jenny Ryan is 1 of the famous people in our database with the age of 37 years old.
First Name Jenny
Last Name Slate
Profession Game Show Host
Source of Income Game Show Host
House Jenny Ryan has been known to live her own house.
Favorite Color Lemon
Favorite Place Lahore (Pakistan)
Favorite Sports Hockey
Favorite Books The Old Man and the Sea
Instagram Jenny Ryan on Instagram
Twitter Jenny Ryan on Twitter
Facebook Jenny Ryan on Facebook
TikTok Jenny Ryan on TikTok
YouTube Jenny Ryan on YouTube
IMDB Jenny Ryan on IMDb
Wikipedia Jenny Ryan on Wikipedia
Jenny Ryan Net Worth
Jenny Ryan's Net Worth, Salary, Income, Lifestyles, Family & many more details. Let's check, How Rich is Jenny Ryan in 2021-2022?
Jenny Ryan Net Worth: $1 Million – $3 Million
Famous Game Show Host Jenny Ryan's net worth is $1 Million – $5 Million at the age of 37 years old. she earned the money being a professional Game Show Host. she is from Scotland. She is joined on the Chase by fellow quizzers Mark Labbett, Shaun Wallace, Anne Hegerty, and Paul Sinha.
Source of Net Worth Game Show Host (profession).
Jenny Ryan current age 37 years old. Jenny Ryan's height 5 Feet 4 Inches (163 cm / 1.63 m) & weight 246 lbs (111.5 kg). Full body measurements, dress & shoe size will be updated soon.
Jenny Ryan FAQs
Jenny Ryan is one of the most successful Game Show Host.
she is ranked in the list of 159 most popular Game Show Host.
Jenny Ryan was born on 1982, April 2 in United Kingdom.
Famous Game Show Host has a net worth of $1 – $5 Million (Approx.)
Jenny Ryan is well-known Game Show Host.
Another 159 Game Show Host biography founds in All Famous Trend!
she was born on . In the same day another famous people born around the world!
famous celebrity was born on the same year!
Andrew Considine – Net Worth 2022, Age, Height, Bio, Salary


Includes over 100 theme-based activities, appropriate for ages 3 to 9, that were designed by therapists with over 15 years of experience working with young children. Organized by months of the year, it's easy to find appropriate therapeutic activities that reinforce the lesson topic of the day. Features lesson plans with goals, approximate time to complete, materials needed, objectives, detailed procedures, adaptations for those with special needs, and suggestions for multilevel instruction. Letters home explain the rationale for each activity and how parents or caregivers can reinforce the lessons. Indispensable for school-based therapists and teachers!
• Contents: Theories of Motor Development, Activity Goals, Activity Goal Descriptions, Monthly Activities and Parent Letters, Appendix: Activity Subjects for Letters of the Alphabet, Adaptations, Recipe Section.
• Written by Patricia Andermeier, OTR, BCP, Joan Kryzanowski, MS, OTR, BCP and Kristina Keller Moir, OTR, BCP. Paperback, 392 pages, 1998.


text:
package be.howest.twentytwo.parametergame.factory;

import java.util.Collection;

import be.howest.twentytwo.parametergame.dataTypes.DroneDataI;
import be.howest.twentytwo.parametergame.dataTypes.PlayerShipDataI;
import be.howest.twentytwo.parametergame.model.component.PlayerComponent;
import be.howest.twentytwo.parametergame.model.gamedata.PlayerData;
import be.howest.twentytwo.parametergame.model.physics.collision.Collision;

import com.badlogic.ashley.core.Entity;
import com.badlogic.ashley.core.PooledEngine;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.utils.Disposable;

public class PlayerShipFactory implements Disposable {

	private ShipFactory shipFactory;

	private PooledEngine engine;
	private World world;
	private AssetManager assets;

	private final float geomRadius;
	private Collection<DroneDataI> drones;

	public PlayerShipFactory(PooledEngine engine, World world, AssetManager assets, PlayerShipDataI playerShipData) {
		this.shipFactory = new ShipFactory(engine, world, assets, playerShipData.getShipData());
		this.engine = engine;
		this.world = world;
		this.assets = assets;
		this.drones = playerShipData.getDrones();
		this.geomRadius = playerShipData.getGeomRadius();
	}

	public Entity createPlayerShip(Vector2 pos) {
		Entity player = shipFactory.createShip(pos, 0f, Collision.BULLET_PLAYER_CATEGORY,
				Collision.BULLET_PLAYER_MASK);

		PlayerComponent pc = engine.createComponent(PlayerComponent.class);
		pc.setPlayerData(new PlayerData(geomRadius));
		player.add(pc);

		// TODO: DRONE FACTORY HERE
			return player;
	}

	public Entity createPlayerShip(float xPos, float yPos) {
		return createPlayerShip(new Vector2(xPos, yPos));
	}

	@Override
	public void dispose() {
		shipFactory.dispose();
	}

}


VERY EXCITED to tell you all about a new project I am working on with my dear friend&stylist @sarahaandekook !
From now on we are available for any kind of styled shoot: magazines, houses,horeca etc.
Upcoming days/weeks I'll post everyday 1 of our foodphoto's we already have been working on.
Teaser of our upcoming single "Into The Well" due for release this week! Recorded this demo on an iPhone - can't wait to show you the studio version!
Nel regno binario oggi è il giorno perfetto.
Ahh Il codice binario, detto anche "il codice dei macchinisti".
"non fate come i collegamenti però collegatevi"
Si se cree y se trabaja 🔥🍀 .
Here comes the sun dooo n dooo dooo 🌞 It's finally warm and sunny in Nashville! We spoke to James' parents this morning who are living on the Isle of Harris in Scotland enjoying the most gorgeous weather and scenery.
We had to share this epic pic of us on the Island from back in January with you guys. One of our favorite places.
Gonna tear it up tomorrow night // Join us at @douglascornercafe for @ascap's What's Next show. Excited to play with @danorourkemusic & @raquelcolemusic. 6pm.
Have you checked out the newly released trailer for #kabirsingh yet?! The movie stars @shahidkapoor and @kiaraadvani!
Shoutout to @sweetlilbebgaming for playing!


Obesity is recognized as a chronic disease by leading medical organizations, including the Canadian Medical Association. Despite this, many people with obesity still lack the support they need to manage their weight. Health care professionals can play a critical role in this effort by partnering with their patients to develop comprehensive and individualized approaches to weight loss and weight management. Clear and effective health care professional-initiated conversations can help increase patient comfort levels and encourage patients to use the full range of resources available.
Obesity Canada is the country's leading obesity charity association, with a mission to improve the lives of Canadians affected by obesity through the advancement of anti-discrimination, prevention and treatment efforts. Obesity Canada believes that obesity is a chronic and often progressive disease, and that managing it is a lifelong process. With local chapters across Canada, they aim to educate more Canadians about reducing weight bias and how to best manage obesity. They are also heavily involved in the development of the clinical guidelines and recommendations.
For more information, visit obesitycanada.ca.


Want to find out what does the word easement mean? We gathered all the possible definitions of the word easement on our website. Our definition dictionary is updated all the time with new definitions and is ready to help you.
That which gives ease; convenience; assistance.
These contacts with the hairy coat gave him instant easement and enabled him to play out the evening.	- "The Best Psychic Stories", Various.


text:
package lineintersector

import (
	geom "github.com/twpayne/go-geom"
	"github.com/twpayne/go-geom/xy/internal"
	"github.com/twpayne/go-geom/xy/lineintersection"
)

// NonRobustLineIntersector is a performant but non robust line intersection implementation.
type NonRobustLineIntersector struct{}

func (li NonRobustLineIntersector) computePointOnLineIntersection(data *lineIntersectorData, p, lineStart, lineEnd geom.Coord) {
	/*
	 *  Coefficients of line eqns.
	 */
	var r float64
	/*
	 *  'Sign' values
	 */
	data.isProper = false

	/*
	 *  Compute a1, b1, c1, where line joining points 1 and 2
	 *  is "a1 x  +  b1 y  +  c1  =  0".
	 */
	a1 := lineEnd[1] - lineStart[1]
	b1 := lineStart[0] - lineEnd[0]
	c1 := lineEnd[0]*lineStart[1] - lineStart[0]*lineEnd[1]

	/*
	 *  Compute r3 and r4.
	 */
	r = a1*p[0] + b1*p[1] + c1

	// if r != 0 the point does not lie on the line
	if r != 0 {
		data.intersectionType = lineintersection.NoIntersection
		return
	}

	// Point lies on line - check to see whether it lies in line segment.

	dist := rParameter(lineStart, lineEnd, p)
	if dist < 0.0 || dist > 1.0 {
		data.intersectionType = lineintersection.NoIntersection
		return
	}

	data.isProper = true
	if p.Equal(geom.XY, lineStart) || p.Equal(geom.XY, lineEnd) {
		data.isProper = false
	}
	data.intersectionType = lineintersection.PointIntersection
}

func (li NonRobustLineIntersector) computeLineOnLineIntersection(data *lineIntersectorData, line1Start, line1End, line2Start, line2End geom.Coord) {
	/*
	 *  Coefficients of line eqns.
	 */
	var a2 float64
	/*
	 *  Coefficients of line eqns.
	 */
	var b2 float64
	/*
	 *  Coefficients of line eqns.
	 */
	var c2, r1, r2, r3, r4 float64
	/*
	 *  'Sign' values
	 */
	// double denom, offset, num;     /* Intermediate values */

	data.isProper = false

	/*
	 *  Compute a1, b1, c1, where line joining points 1 and 2
	 *  is "a1 x  +  b1 y  +  c1  =  0".
	 */
	a1 := line1End[1] - line1Start[1]
	b1 := line1Start[0] - line1End[0]
	c1 := line1End[0]*line1Start[1] - line1Start[0]*line1End[1]

	/*
	 *  Compute r3 and r4.
	 */
	r3 = a1*line2Start[0] + b1*line2Start[1] + c1
	r4 = a1*line2End[0] + b1*line2End[1] + c1

	/*
	 *  Check signs of r3 and r4.  If both point 3 and point 4 lie on
	 *  same side of line 1, the line segments do not intersect.
	 */
	if r3 != 0 && r4 != 0 && internal.IsSameSignAndNonZero(r3, r4) {
		data.intersectionType = lineintersection.NoIntersection
		return
	}

	/*
	 *  Compute a2, b2, c2
	 */
	a2 = line2End[1] - line2Start[1]
	b2 = line2Start[0] - line2End[0]
	c2 = line2End[0]*line2Start[1] - line2Start[0]*line2End[1]

	/*
	 *  Compute r1 and r2
	 */
	r1 = a2*line1Start[0] + b2*line1Start[1] + c2
	r2 = a2*line1End[0] + b2*line1End[1] + c2

	/*
	 *  Check signs of r1 and r2.  If both point 1 and point 2 lie
	 *  on same side of second line segment, the line segments do
	 *  not intersect.
	 */
	if r1 != 0 && r2 != 0 && internal.IsSameSignAndNonZero(r1, r2) {
		data.intersectionType = lineintersection.NoIntersection
		return
	}

	/**
	 *  Line segments intersect: compute intersection point.
	 */
	denom := a1*b2 - a2*b1
	if denom == 0 {
		li.computeCollinearIntersection(data, line1Start, line1End, line2Start, line2End)
		return
	}
	numX := b1*c2 - b2*c1
	data.pa[0] = numX / denom

	numY := a2*c1 - a1*c2
	data.pa[1] = numY / denom

	// check if this is a proper intersection BEFORE truncating values,
	// to avoid spurious equality comparisons with endpoints
	data.isProper = true
	if data.pa.Equal(geom.XY, line1Start) || data.pa.Equal(geom.XY, line1End) || data.pa.Equal(geom.XY, line2Start) || data.pa.Equal(geom.XY, line2End) {
		data.isProper = false
	}

	data.intersectionType = lineintersection.PointIntersection
}

func (li NonRobustLineIntersector) computeCollinearIntersection(data *lineIntersectorData, line1Start, line1End, line2Start, line2End geom.Coord) {
	var q3, q4 geom.Coord
	var t3, t4 float64
	r1 := float64(0)
	r2 := float64(1)
	r3 := rParameter(line1Start, line1End, line2Start)
	r4 := rParameter(line1Start, line1End, line2End)
	// make sure p3-p4 is in same direction as p1-p2
	if r3 < r4 {
		q3 = line2Start
		t3 = r3
		q4 = line2End
		t4 = r4
	} else {
		q3 = line2End
		t3 = r4
		q4 = line2Start
		t4 = r3
	}
	switch {
	case t3 > r2 || t4 < r1:
		data.intersectionType = lineintersection.NoIntersection
	case &q4 == &line1Start:
		copy(data.pa, line1Start)
		data.intersectionType = lineintersection.PointIntersection
	case &q3 == &line1End:
		copy(data.pa, line1End)
		data.intersectionType = lineintersection.PointIntersection
	default:
		// intersection MUST be a segment - compute endpoints
		copy(data.pa, line1Start)
		if t3 > r1 {
			copy(data.pa, q3)
		}
		copy(data.pb, line1End)
		if t4 < r2 {
			copy(data.pb, q4)
		}
		data.intersectionType = lineintersection.CollinearIntersection
	}
}


ARIES: It is a possibility that you are planning a trip that is important to you. Through this trip or through family a goal you've held comes closer to completion. It may take a tremendous amount of work to see this through but you will do it so that the Art of Living becomes established in a new environment. Ask for assistance.
TAURUS: Your daily life seems to have taken on sheen, a sort of happy illumination, and you seem to be functioning with high performance. Something within you is shifting. It has to do with a new identity and a new path. Remember to love, to have patience, and to speak from the heart.
GEMINI: All types of close relationships, things (money, values) held in common, intimacy are on your mind (not in that order but jumbled about somehow). All these make for a deep inner pressure and feelings that are quite a mess. If you stumble about, know this is an interlude where you have complete freedom.
CANCER: You turn your back to the world for a bit and deeply assess your relationships and all the interactions you have with those close to you. If you sense something's awry in any of these connections you begin to address what's not working and relentlessly pursue this until agreement (and/or change) is reached.
LEO: You simply must take a trip, whether large or small, out of the country or nearby because you need change. This will expand your horizons, shift your beliefs, challenge your mind, and create chaos that erupts later in harmony. A spiritual or religious endeavour that's mixed with philosophy is also a must.
VIRGO: You will want to be out and about in the world today serving others. An idea for nurturing has occurred to you. You wonder how to accomplish it without upsetting other plans. Careful with overspending. Your enthusiasm could push you into financial overdrive. A talent of yours can make money and would tap into your deep (yet hidden) creativity.
LIBRA: Gains due to your mother's love care and affection is on the cards!! However, you may have a slightly difficult time with your spouse. So, while tackling such matters, it would be best for you to keep past matters aside. It makes no sense fighting over things that have already happened. Develop the art of forgetting and forgiving.
SCORPIO: It is a possibility that you are planning a trip that is important to you. Through this trip or through family a goal you've held comes closer to completion. It may take a tremendous amount of work to see this through but you will do it so that the Art of Living becomes established in a new environment. Ask for assistance.
SAGITARIUS: Your domestic life will be happy and contended you shall feel a lot of love growing. You will concentrate your energy on family and shall be happy with it.
CAPRICORN: In family celebration, rituals, pooja and auspicious work will take place. There will be new associates and friends, bringing fresh ideas and insight to your life path. You may become more gregarious, taking a renewed interest in friendship and find yourself forming many associations.
AQUARIUS: Good period for personal life you shall get more deeply involved with your family and shall be able to spend quality time with them. Happiness from children and from the spouse shall give you the peace and tranquillity in life.
PISCES: You will be in a great position to look after all your loved ones. You will commit yourself strongly to the welfare of your entire family. But you worry too much. By worrying too much you actually cause great tension. This tension could result in bad health. Rest. Relax.


Need Glassware and Beverage Ware for your next party or event? We've got the Glassware and Beverage Ware rentals you've been looking for. Browse our selection below.
Whatever refreshments you plan to serve at your upcoming event, CT Rental Center has the glassware you need to serve your guests in style. Whether your occasion calls for extraordinary elegance or if you prefer something more casual, we have the options you need to complement your table setting.
"Thank you for such a such a wonderful "rental experience"! You have been so great to work with. Thank you for your patience & countless revisions to our rentals. The rentals were all beautiful and the gold-rimmed glasses were Perfect! Thanks so much again. Best, Meg & Jon Stewart"


I need a formula to calculate hours worked and then rounding up or down to the nearest quarter hour. I have start time (A1) and end time (B1) in time format then total hours worked are calculated in(C1) then I physcally round up or down actual hrs worked in (D1) as I pay in quarter hour increments.
Hi Mike, thanks for the quick response. Unfortunately that formula isn't working. Below is what it's coming out as,. Is it possible I should have the cell fomats as something different?
you seemed to have everything else working.
› calculated time AM to AM?
Something is still wrong. When I use the formula given in column D it should come out to 6.00 but it's coming up with 7.20 if formatted as a number with 2 decimal places or 4:48 if custom h:mm.
Column C is formatted as Number, 2 Decimal places.
I must of typed something wrong before because it's working. Thank you soooo much!!!


Here at Toolbarn, we strive to deliver the highest quality of products to our customers, and our collection of Makita table and miter blades follows along in that fashion. This selection of planer blades and rotary saw blades offers everything you need to cut through even the toughest materials. Carbide tips on some of the saw blades gives them added strength and durability to handle your most difficult jobs. Toolbarn is proud to offer everyday low prices, and frequent manufacturer's discounts contribute to making our available products even more affordable.


Bang Na Station (Exit 1).
? You can take the Bangna-Trade express way, go straight and make a U turn to enter BITEC. Or you can choose to exit "Samutprakarn" and use the entrance on Sukhumvit road.
? Links the Outer Ring Road to extended every other part of Bangkok to avoid traffic jam in rush hours, which away from BITEC 7 km.
Entrance 3 can be reached by bus: number 2, 23, 45, 102, 116, 142, 507, 508, 511, 513, 536, 544, 552A which arrived along Sukumvit Road.
For your convenience and comfort, Taxi service will be available for your pre-bookings at Business Centre. The Taxi stand is also available by drop off area in front of EH 103.


You have been searching for a while, but you could not find the perfect location?
You still lack the right catering company?
Or you just need a good idea for a suitable supporting program?
Alternatively, Hochzeitswerkstatt offers the Complete Organization of your wedding.


Your Company Name recognizes the problems which drug abuse have created in the construction industry and the need to develop drug abuse prevention programs. Accordingly, in order to enhance the safety of the workplace and to maintain a drug-free environment, Your Company Name has amended its Drug and Alcohol Prevention Program to comply with Federal Regulations Part IV, Department of Transportation, Research and Special Programs administration, 49 CFR Part 199, "Control of Drug Use in Natural Gas, Liquefied Natural Gas, and Hazardous Liquid Pipeline Operations". Your Company Name intends to abide by all future Federal Regulation and amendments, and specific requirements as determined by our customers.
This revised Drug and Alcohol Prevention Program is effective on January 1, 1993. The provisions of this Drug and Alcohol Prevention Program are applicable to all employees of Your Company Name.
Implementation and continued enforcement of the Drug and Alcohol Prevention Program is subject to appropriate local, state, and federal laws as well as any collective bargaining agreements, and customer requirements.
Any special customer requirements not included in this policy will be adopted and enforced as required by that customer.


View cart "2 inch square vase" has been added to your cart.
It is 4in x 4in x 4in and made of high quality clear glass. It can make a great votive candleholder, floral vase, or even a wedding cake stand (see image below). Use 12 or more of them to create a platform. Place floralytes in the middle and then place your cake on a glass sheet atop the vases.