This piece was originally designed to be blue to depict the skys, since the images are of constellations. However, it was changed to orange to blend in with the colors of Joe Louis Arena. The artist painted a mural and sent the painting off to Crovatto Mosiacs, which is located in a little town in Italy. The town's chief industry is making venetian glass mosaics (too expensive to have done in the States). To make venetian glass workers pounded out very small pieces of colored glass and glued each piece with the flat side directly down onto sheets of paper. A wooden panel was then placed on top of the jagged sections, and shipped to Detroit. The panels were then installed on the station's walls. Then the sheets of paper were removed from the glass pieces to give us this finished art piece. The design is based on astrological signs from the 17th century.
Two Venetian glass mosaics capture the energy of this busy station with bright, flittery colors. Mr. Kamrowski, a master of the surrealist movement, has based these murals loosely on mythological and astrological figures of the seventeenth century.
Funded By: A. Alfred Taubman, Michigan Council for the Arts, Detroit People Mover Art Commission.


text:
Bearing "Fruits" From Hell Itself
As noted in three articles published earlier this month (Another Year of the Same Conciliar Apostasy, part one, Another Year of the Same Conciliar Apostasy, part two and Another Year of the Same Conciliar Apostasy, part three), Joseph Ratzinger/Benedict XVI is quite intent on ending his days as a fervent apostle of the falsehoods of conciliarism, especially as it relates to false ecumenism and religious liberty and the "new ecclesiology." While part two of this new two-part series will focus on the well-meaning efforts of some believing Catholics yet attached to the conciliar structures to convince Ratzinger/Benedict to abandon his plan for Assisi III and to find a "correct" interpretation of the teachings of the "Second" Vatican Council, suffice it to say for the moment that it is very telling that even some of Ratzinger/Benedict's most fervent supporters are finding it increasingly difficult to ignore the truth that no one can be a "restorer of Catholic Tradition" as he propagates concepts and engages in practices, such as "inter-religious dialogue" and "inter-religious prayer services," that have been condemned repeatedly by the authority of the Catholic Church.
This article focuses on the veritable cascade of "papal" words in behalf of false ecumenism in the past week, starting with Ratzinger/Benedict's incredibly ludicrous, delusional assertion, made in an address to an 'ecumenical delegation" of Finland on Thursday, January 20, 2011, that false ecumenism has borne much good fruit despite the matters of Faith that divide Catholics and those who have "many elements of agreement and closeness" who are as of yet in "full communion" with the Catholic Church:
I welcome you with great joy on the occasion of your annual ecumenical pilgrimage to Rome to celebrate the Feast of St Henry, Patron of your beloved land. Every year, during this period, your traditional pilgrimage testifies to the sincere, friendly and helpful relations which have been established between Lutherans and Catholics, as well as in general between all the Christians in your Country.
Even though we have not yet achieved the objective of the ecumenical movement, namely full unity of faith, through dialogue many elements of agreement and closeness have matured which strengthen our general desire to do the will of our Lord Jesus Christ: "that they may all be one" (Jn 17:21). One result recently obtained that deserves attention was the conclusive report on the theme of justification in the life of the Church. This report was prepared by a group centred on Nordic Catholic-Lutheran dialogue in Finland and Sweden, that met last year.
In theology and in faith everything is linked together, and thus a common deeper understanding of the justification will help us to understand together the nature of the Church better and, as you mentioned, the episcopal ministry. Thus it will also help us to find the unity of the Church in a concrete form and thereby to be more capable, as you observed, to explain the faith to all people of today who ask each other about it and to make it more comprehensible to them so that they see that he is the answer, that Christ is the Redeemer for us all. Thus our hope remains alive that, under the guidance of the Holy Spirit, many people involved in the ecumenical field, competent and aware, will contribute to the realization of this important ecumenical task and, always guided by the Holy Spirit, will be able to forge ahead.
Having said this, it is implied that the efficacy of our efforts cannot come solely from study and discussion, but above all depend on our constant prayer, on our life in conformity with the will of God, because ecumenicism is not our work but rather a fruit of God's action.
At the same time, we are all conscience of the fact that in recent years the ecumenical path, from certain points of view, has become more difficult and certainly more demanding. Questions will be asked concerning the ecumenical method and the breakthroughs of past years will be mentioned, as well as the uncertainty of the future, and the problems of our time with faith in general. In this light, your annual pilgrimage to Rome for the Feast of St Henry is an important event, a sign and an encouragement for our ecumenical efforts, for our certainty that we must walk together and that Christ is the way for humanity.
Your pilgrimage helps us to look back with joy at what has been achieved so far and to look to the future with the desire to take on a task full of faith and responsibility. On the occasion of your visit, we all wish to reinforce our certainty of the fact that the Holy Spirit, who reawakens us, accompanies us and to this day has made the ecumenical movement fruitful, may continue in this way also in the future.
I firmly hope that your visit to Rome will strengthen the future collaboration of Lutherans and Catholics, yes, between all the Christians in Finland. Looking forward to the upcoming Week of Prayer for Christian Unity let us pray that the spirit of truth will lead us to even greater love and brotherhood. May God grant you his rich Blessing in newly begun year. (To an Ecumenical Delegation from Finland on the occasion of the feast of Saint Henry, Patron of Finland, January 15, 2011.)
It is an act of utter blasphemy to contend that the Third Person of the Most Blessed Trinity, God the Holy Ghost, has "made the ecumenical movement fruitful." Fruitful?
The Joint Declaration on the Doctrine of Justification that more or less does away with the Council of Trent's Decree on Justification?
Joint "blessings" given with the non-ordained clergy of false religions?
Calling places of false worship, each of which is hideous in the sight of the Most Blessed Trinity, as "sacred"?
Claiming that the beliefs of false religions can "contribute" to the building of a "better" world?
Holding "inter-religious prayer" jamborees that have been condemned repeatedly by true pope after true pope?
Esteeming the symbols of false religions with one's own priestly hands?
Claiming that those who defect from matters contained in the Sacred Deposit of Faith are "believers" and that they give a "witness" to Christianity alongside Catholics?
God the Holy Ghost "has made the ecumenical movement fruitful"?
Ratzinger/Benedict also scorned the admonition of Pope Pius XI, contained in Mortalium Animos, January 6, 1928, when he asserted the following in his address to the Lutherans of Finland:
Even though we have not yet achieved the objective of the ecumenical movement, namely full unity of faith, through dialogue many elements of agreement and closeness have matured which strengthen our general desire to do the will of our Lord Jesus Christ: "that they may all be one" (Jn 17:21) (To an Ecumenical Delegation from Finland on the occasion of the feast of Saint Henry, Patron of Finland, January 15, 2011.)
Pope Pius XI had this to say about the misuse of the prayer of Our Blessed Lord and Saviour Jesus Christ at the Last Supper, "that they may all be one:"
And here it seems opportune to expound and to refute a certain false opinion, on which this whole question, as well as that complex movement by which non-Catholics seek to bring about the union of the Christian churches depends. For authors who favor this view are accustomed, times almost without number, to bring forward these words of Christ: "That they all may be one.... And there shall be one fold and one shepherd,"[14] with this signification however: that Christ Jesus merely expressed a desire and prayer, which still lacks its fulfillment. For they are of the opinion that the unity of faith and government, which is a note of the one true Church of Christ, has hardly up to the present time existed, and does not to-day exist. They consider that this unity may indeed be desired and that it may even be one day attained through the instrumentality of wills directed to a common end, but that meanwhile it can only be regarded as mere ideal. They add that the Church in itself, or of its nature, is divided into sections; that is to say, that it is made up of several churches or distinct communities, which still remain separate, and although having certain articles of doctrine in common, nevertheless disagree concerning the remainder; that these all enjoy the same rights; and that the Church was one and unique from, at the most, the apostolic age until the first Ecumenical Councils. Controversies therefore, they say, and longstanding differences of opinion which keep asunder till the present day the members of the Christian family, must be entirely put aside, and from the remaining doctrines a common form of faith drawn up and proposed for belief, and in the profession of which all may not only know but feel that they are brothers. The manifold churches or communities, if united in some kind of universal federation, would then be in a position to oppose strongly and with success the progress of irreligion. This, Venerable Brethren, is what is commonly said. There are some, indeed, who recognize and affirm that Protestantism, as they call it, has rejected, with a great lack of consideration, certain articles of faith and some external ceremonies, which are, in fact, pleasing and useful, and which the Roman Church still retains. They soon, however, go on to say that that Church also has erred, and corrupted the original religion by adding and proposing for belief certain doctrines which are not only alien to the Gospel, but even repugnant to it. Among the chief of these they number that which concerns the primacy of jurisdiction, which was granted to Peter and to his successors in the See of Rome. Among them there indeed are some, though few, who grant to the Roman Pontiff a primacy of honor or even a certain jurisdiction or power, but this, however, they consider not to arise from the divine law but from the consent of the faithful. Others again, even go so far as to wish the Pontiff Himself to preside over their motley, so to say, assemblies. But, all the same, although many non-Catholics may be found who loudly preach fraternal communion in Christ Jesus, yet you will find none at all to whom it ever occurs to submit to and obey the Vicar of Jesus Christ either in His capacity as a teacher or as a governor. Meanwhile they affirm that they would willingly treat with the Church of Rome, but on equal terms, that is as equals with an equal: but even if they could so act. it does not seem open to doubt that any pact into which they might enter would not compel them to turn from those opinions which are still the reason why they err and stray from the one fold of Christ. (Pope Pius XI, Mortalium Animos, January 6, 1928.)
There is only one path for those outside of the Catholic Church to convert unconditionally to the her maternal bosom. Period. There is no need for "dialogue" and to offer up blasphemous prayers to God the Holy Ghost for a "unity" that exists entirely in the Catholic Church. Those who do not belong to the Catholic Church do not have a "share" in some kind of mythical "ecclesial communion" with her. Pope Pius XII made this very clear in Mystici Corporis Christi, June 29, 1943:
Actually only those are to be included as members of the Church who have been baptized and profess the true faith, and who have not been so unfortunate as to separate themselves from the unity of the Body, or been excluded by legitimate authority for grave faults committed. "For in one spirit" says the Apostle, "were we all baptized into one Body, whether Jews or Gentiles, whether bond or free." As therefore in the true Christian community there is only one Body, one Spirit, one Lord, and one Baptism, so there can be only one faith. And therefore, if a man refuse to hear the Church, let him be considered - so the Lord commands - as a heathen and a publican. It follows that those who are divided in faith or government cannot be living in the unity of such a Body, nor can they be living the life of its one Divine Spirit. (Pope Pius XII, Mystici Corporis, June 29, 1943.)
What does this matter to the lords of the counterfeit of church of conciliarism? Nothing at all.
Consider yet another ecumaniacal outrage that will take place that took place yesterday, Sunday, January 20, 2011, the Third Sunday after the Epiphany, at the Basilica of Saint Paul's Outside the Walls in Rome as the President of the "Pontifical" Council for Promoting Christian Unity, Kurt "Cardinal" Koch, demonstrated that the commitment of his counterfeit church of conciliarism is "irrevocable and irreversible:"
VATICAN CITY, JAN. 20, 2011 (Zenit.org).- The president of the Vatican's Christian unity council will join with a Lutheran delegation Sunday in a ceremony at St. Paul's Outside the Walls, which will show "that the dialogue between the two communities has become a reality of life and that the ecumenical commitment of the Catholic Church [...] is irrevocable and irreversible."
This was affirmed in a statement from the Pontifical Council for Promoting Christian Unity, which noted that the dicastery president, Cardinal Kurt Koch will participate in the Sunday event. The ceremony will include the planting and blessing of a tree, in twinship with an ecumenical project in Germany.
The cardinal will participate in the ceremony along with a delegation of leaders from the United Evangelical-Lutheran Church of Germany, led by Bishop Dr. Johannes Friedrich. The group will "plant and bless an olive tree as a sign of the ecumenical communion that has grown up to now between Catholics and Lutherans," the statement from the pontifical council reported.
The event takes place in the context of the Week of Prayer for Christian Unity, under way until Tuesday, feast of the Conversion of St. Paul.
The tree planting ceremony is twinned with the project "Luther's Garden" in Wittenberg, Germany. The garden was opened in 2008, and according to the Lutheran World Federation, is designed to symbolize the "global magnitude of the Reformation," as well as the "interconnectedness, interaction, and reconciliation between Christian churches." Different ecclesial groups around the world are being invited to sponsor the 500 trees projected to be planted in the garden.
The Lutheran delegation is visiting the Vatican in the context of the 500th anniversary of Martin Luther's visit to Rome. On Monday, the Evangelical-Lutheran delegation will be received in private audience by Benedict XVI. (Vatican Official to Join in Ceremony With Lutherans.)
There's truth in advertising for you, huh? A tree planting ceremony that blasphemes Saint Paul the Apostle, who condemned association with those who are not of the same fellowship of Faith, and celebrates the "global magnitude of the Reformation" held under the auspices of the conciliar officials who believe in the falsehood of the "interconnectedness, interaction, and reconciliation between Christian churches."
Here is what Bishop George Hay wrote over two centuries ago now about such blasphemous apostasy:
(2) St. Peter, considering the great mercy bestowed upon us by the grace of our vocation to the true faith of Christ, says, that it is our duty to "declare the praises and virtues of Him who hath called us out of darkness into His admirable light". (1 Pet. 2:9) St. Paul also exhorts us to "give thanks to God the Father, who hath made us worthy to be partakers of the lot of the saints in light, who hath delivered us from the power of darkness, and hath translated us into the kingdom of His beloved Son." (Col. 1:12) Where it is manifest that as the true Faith of Jesus Christ is the only light that conducts to salvation, and that it is only in His Kingdom — that is, in His Church — where that heavenly light is to be found, so all false religions are darkness; and that to be separated from the Kingdom of Christ is to be in darkness as to the great affair of eternity. And indeed what greater or more miserable darkness can a soul be in than to be led away by seducing spirits, and "departing from the faith of Christ, give heed to the doctrine of devils". (1 Tim. 4:1) St. Paul, deploring the state of such souls, says that they "have their understandings darkened, being alienated from the life of God, through the ignorance: that is in them, because of the blindness of their hearts". (Eph. 4:18)
On this account the same holy apostle exhorts us in the most pressing manner to take care not to be seduced from the light of our holy Faith by the vain words and seducing speeches of false teachers, by which we would certainly incur the anger of God; and, to prevent so great a misery, He not only exhorts us to walk as children of the light in the practice of all holy virtues, but expressly commands us to avoid all communication in religion with those who walk in the darkness of error. "Let no man deceive you with vain words, for because of these things cometh the anger of God upon the children of unbelief; be ye not, therefore, partakers with them. For ye were theretofore darkness; but now light in the Lord; walk ye as the children of the light,
. . . and have no fellowship with the unfruitful works of darkness". (Eph. 5:6)
Here, then, we have an express command, not only not to partake with the unfruitful works of darkness — that is, not to join in any false religion, or partake of its rites or sacraments — but also, not to have any fellowship with its professors, not to be present at their meetings or sermons, or any other of their religious offices, lest we be deceived by them, and incur the anger of the Almighty, provoke Him to withdraw His assistance from us, and leave us to ourselves, in punishment of our disobedience.
(3) St. Paul, full of zeal for the good of souls, and solicitous to preserve us from all danger of losing our holy Faith, the groundwork of our salvation, renews the same command in his Epistle to the Romans, by way of entreaty, beseeching us to avoid all such communication with those of a false religion. He also shows us by what sign we should discover them, and points out the source of our danger from them: "Now I beseech you, brethren, to mark them who cause dissensions and offenses contrary to the doctrine which you have learned, and to avoid them; for they that are such serve not Our Lord Christ, but their own belly, and by pleasing speeches and good words seduce the hearts of the innocent". (Rom. 16:17)
See here whom we are to avoid — "those that cause dissensions contrary to the ancient doctrine"; all those who, hating, left the true Faith and doctrine which they had learned, and which has been handed down to us from the beginning by the Church of Christ, follow strange doctrines, and make divisions and dissensions in the Christian world. And why are we to avoid them? Because they are not servants of Christ, but slaves to their own belly, whose hearts are placed upon the enjoyments of this world, and who, by "pleasing speeches and good words, seduce the hearts of the innocent" — that is, do not bring good reasons or solid arguments to seduce people to their evil ways, so as to convince the understanding, for that is impossible; but practice upon their hearts and passions, relaxing the laws of the gospel, granting liberties to the inclinations of flesh and blood, laying aside the sacred rules of mortification of the passions and of self-denial, promising worldly wealth, and ease, and honors, and, by pleasing speeches of this kind, seducing the heart, and engaging people to their ways.
(4) The same argument and command the apostle repeats in his epistle to his beloved disciple Timothy, where he gives a sad picture, indeed, of all false teachers, telling us that they put on an outward show of piety the better to deceive, "having an appearance, indeed, of godliness, but denying the power thereof;" then he immediately gives this command: "Now these avoid: for of this sort are they that creep into houses, and lead captive silly women laden with sins, who are led away with divers desires"; and adds this sign by which they may be known, that, not having the true Faith of Christ, and being out of His holy Church — the only sure rule for knowing the truth — they are never settled, but are always altering and changing their opinions, "ever learning, and never attaining to the knowledge of the truth"; because, as he adds, "they resist the truth, being corrupted in their mind, and reprobate concerning the Faith". (2 Tim. 3:5)
Here it is to be observed that, though the apostle says that silly weak people, and especially women, are most apt to be deceived by such false teachers, yet he gives the command of avoiding all communication with them in their evil ways, to all without exception, even to Timothy himself; for the epistle is directed particularly to him, and to him he says, as well as to all others, "Now these avoid", though he was a pastor of the church, and fully instructed by the apostle himself in all the truths of religion; because, besides the danger of seduction, which none can escape who voluntarily expose themselves to it, all such communication is evil in itself, and therefore to be avoided by all, and especially by pastors, whose example would be more prejudicial to others.
(5) Lastly, the beloved disciple St. John renews the same command in the strongest terms, and adds another reason, which regards all without exception, and especially those who are best instructed in their duty: "Look to yourselves", says he, "that ye lose not the things that ye have wrought, but that you may receive a full reward. Whosoever revolteth, and continueth not in the doctrine of Christ, hath not God. He that continueth in the doctrine the same hath both the Father and the Son. If any man come to you and bring not this doctrine, receive him not into your house, nor say to him, God speed you: for he that saith to him, God speed you, communicateth with his wicked works". (2 John, ver. 8)
Here, then, it is manifest, that all fellowship with those who have not the doctrine of Jesus Christ, which is "a communication in their evil works" — that is, in their false tenets, or worship, or in any act of religion — is strictly forbidden, under pain of losing the "things we have wrought, the reward of our labors, the salvation of our souls". And if this holy apostle declares that the very saying God speed to such people is a communication with their wicked works, what would he have said of going to their places of worship, of hearing their sermons, joining in their prayers, or the like?
From this passage the learned translators of the Rheims New Testament, in their note, justly observe, "That, in matters of religion, in praying, hearing their sermons, presence at their service, partaking of their sacraments, and all other communicating with them in spiritual things, it is a great and damnable sin to deal with them." And if this be the case with all in general, how much more with those who are well instructed and better versed in their religion than others? For their doing any of these things must be a much greater crime than in ignorant people, because they know their duty better. (The Laws of God Forbidding All Communication in Religion With Those of a False Religion.)
This is Catholicism, which is the antithesis of concilairism. The first is of Our Blessed Lord and Saviour Jesus Christ. The second is of Antichrist.
Ratzinger/Benedict made the exaltation of the "work" of false ecumenism the theme of his "general audience" address on Wednesday, January 19, 2011, just one week after using his general audience address to bring the Catholic Church's teaching on Purgatory from sharp focus to fuzziness and just eighteen days after he had the audacity to state that "religious freedom is the foundation of peace:"
Dear brothers and sisters, as disciples of the Lord we have a common responsibility to the world, we must carry out a common service: as the first Christian community of Jerusalem, beginning from what we already share, we must give a strong witness, founded spiritually and supported by reason, of the only God who has revealed Himself and who speaks to us in Christ, to be bearers of a message that directs and illumines the path of the man of our time, often deprived of clear and valid points of reference. Hence, it is important to grow each day in mutual love, committing ourselves to overcome those barriers that still exist among Christians; to feel that a true interior unity exists among all those who follow the Lord; to collaborate as much as possible, working together on the questions that are still open; and above all, to be conscious that in this itinerary the Lord must assist us, he still has to help us much because, without Him, alone, without "abiding in Him," we can do nothing (cf. John 15:5).
Dear friends, once again it is in prayer where we find ourselves gathered -- particularly during this week -- together with all those who confess their faith in Jesus Christ, Son of God: let us persevere in it, let us be people of prayer, imploring from God the gift of unity, so that his plan of salvation and reconciliation will be fulfilled in the whole world. Thank you! (On Praying for Christian Unity.)
"Common responsibility to the world?" "Common service?" Those who are not members of the Catholic Church have only one responsibility: to convert to her maternal bosom as there is no "common service" they can perform while defecting from numerous articles contained in the Deposit of Faith, and, of course, what applies to Protestants and the Orthodox applies also to the conciliarists who also defect from numerous articles contained in the same Deposit of Faith. Perhaps they can give a "common witness" after all in the preparation for the coming of Antichrist.
Enough. The hour is late. Sleep beckons, at least for a few hours.
We are not going to change the state of the Church Militant on earth right now. It will take a direct intervention from God at the behest of the prayers His Most Blessed Mother for this to happen as her Fatima Message is fulfilled. Even those in the conciliar structures who recognize that this "world day of peace message" is, at the very least, problematic and emblematic of concilairism are looking for the same miracle as they cannot point to a single "cardinal" in their conciliar church who is one of mind and one heart with the true popes whose encyclical letters and allocutions have been quoted in this article. No, not even from the Eastern rite churches, which are under attack now from the conciliar revolutionaries, something that was explored in Another Year of the Same Conciliar Apostasy, part two. We are thus at the mercy of the good God as we suffer during this time that God has has appointed for all eternity for us to live. We must remain faithful, therefore, as best we can to the true Faith as we cling closely to Our Lady, praying as many Rosaries each day as our state-in-life permits.
We must pray for the unconditional conversion of all of those who are steeped in the world's false religions, including the false religion of conciliarism that has offended Our Blessed Lord and Saviour Jesus Christ so much and has done so much damage to the souls He redeemed by the shedding of every single drop of His Most Precious Blood on the wood of the Holy Cross. We must pray daily for our own conversion away from our sins as we seek to live more penitentially as the consecrated slaves of Our Lord through His Most Blessed Mother's Sorrowful and Immaculate Heart, consoling the good God and making reparation for our sins as best as we can by praying our Rosaries.
This time of chastisement, and it is a time of chastisement, will pass. There will be the Triumph of the Immaculate Heart of Mary, and it will be a glorious triumph beyond all telling in perfect fulfillment of her Fatima Message as people of different ethnicities and races live and work united as Catholics for the greater honor and glory of the Most Holy Trinity as the clients of the Immaculate Heart of Mary to the shouts of:
Immaculate Heart of Mary, triumph soon.
Viva Cristo Rey! Vivat Christus Rex!
Our Lady of Fatima, pray for us.
Saint Joseph, pray for us.
Saints Caspar, Melchior and Balthasar, pray for us.
Saint Timothy, pray for us.

redpajama_set_name: RedPajamaCommonCrawl


Smog Test Only Santa Paula – Rigo, The People You Can Count On.
The very first fact you need to work on is to make certain the analysis is dead on. At that time, search for a legitimate dealership or repair shop to deal with the repair work, ideally someone which possesses a lot of experience in vehicle head gasket restoration. After that, utilizing the following tips, be sure to ask a few key questions to ensure the repair is done successfully. Dealing with increased temperature levels can rapidly wreak havoc on a motor by causing warping of the heads or the block, or even breaking. The sooner the motor is stopped after noticing the head gasket is blown, the better the odds of fixing the top end without large complications.
Taking advantage of the existing pegs can produce a condition where the head is not appropriately torqued because the studs will stretch when they are torqued. Old studs have already been stretched, so the torque value will be different than a new stud. You can see the difference in the treads if you hold the two studs up closely. All these are a few things to look out for when having a head gasket restored. You can aim to spend any where from $1,200 and $2,000 depending on just how much work ought to be done. Really don't make the mistake in paying out a discounted price any repair with less qualified workmanship. Make sure that the auto mechanics is experienced and the garage is dependable. Otherwise, the outcomes will generally cost you a lot more.
The very initial point you really need to do is to make certain the diagnosis is accurate. At that time, seek out a reliable dealer or repair shop to take on the servicing, ultimately someone that has a great deal of experience in vehicle head gasket servicing. Then, having the following tips, be sure to ask a few key questions to guarantee the repair service is done the right way.


text:
afda738d
The Pfizer vaccine could affect women's reproductive health.
Feb 9, 2021 3:11:00 PM
Claims that the Pfizer vaccine could impact women's reproductive health are based on misunderstandings of how the vaccine functions.
Several viral posts are circulating on social media claiming that coronavirus vaccines can harm a woman's fertility. However, there is no evidence to indicate that the vaccine impairs women's fertility. The graphics being circulated shows an image of a spiked protein named syncytin-1, which the claim says is a constituent of the vaccine. "If the vaccine works so that we form an immune response AGAINST the spike protein, we are also training the female body to attack syncytin-1, which could lead to infertility for an unspecified duration," it says. It falsely claims that the body cannot tell the difference between these proteins and therefore will attack the protein used in the placenta.
According to USA Today, the claims circulating on Facebook have been attributed to Drs. Wolfgang Wodarg and Mike Yeadon. Both have previously been called out for spreading disinformation. Wodarg, a German physician, and Yeadon, a former Pfizer chief science officer, and research head, jointly filed a petition with the European Medicines Agency on December 1 calling for the suspension of Pfizer-BioNTech and other biotech/pharmaceutical companies' COVID-19 vaccine efforts, USA Today reported. The report also highlighted that Yeadon had made various misleading and false claims about the coronavirus and the 2009-2010 H1N1 swine flu pandemic as well. He has not been working at Pfizer since 2011.
Part of this rumor spreads from misunderstanding the makeup of the vaccine. According to Full Fact, the Pfizer vaccine works by giving the body instructions on making spike protein so that an immune response is generated and the virus is attacked. A small part of this spike protein resembles syncytin-1, which is vital for forming the placenta, but given that the resemblance is confined to two very small parts, the body's immune system is not likely to confuse between the two, Full Fact explained.
"While the coronavirus spike protein and syncytin-1 do share a minute string of amino acids – the building blocks of proteins – the similarity is too small to warrant an immunologic offensive," virologist Dr. Ian Jones of the University of Reading, United Kingdom told Full Fact.
USA Today also reported that if it were the case that the body's immune system was getting confused, then there would be instances of pregnant women who have received the vaccine suffering miscarriages, which has not occurred at any point.
While the NHS has advised not to give the vaccine to pregnant women in the U.K, this is under review. Pregnant women who are at high risk may still be able to receive it. The NHS states that "there is no evidence [the vaccine is] unsafe if you're pregnant or breastfeeding. But more evidence is needed before [pregnant and breastfeeding women] can be offered the vaccine." The MHRA initially said that breastfeeding women should not receive the vaccine, though they have since revised this decision.
The Pfizer vaccine is 95 percent effective. Most trial participants experienced no adverse side effects, and those who did experience mild side effects such as fatigue. When the vaccine was rolled out in the U.K., two people with a history of severe allergies were found to be allergic to the Pfizer vaccine. They recovered quickly.
Government of the United Kingdom.
Research Safety
The Italians have discovered a vaccine for COVID-19.
The BCG vaccine works against the novel coronavirus.
Russian spies are targeting COVID-19 vaccine research.
Two potential coronavirus vaccines have triggered immune responses.
The Pfizer vaccine will change our DNA.
The Pfizer COVID-19 vaccine negatively affects fertility.
Pfizer's COVID-19 vaccine contains polyethylene glycol which causes fatal allergic reactions.
Chinese citizens have to scan a tracking app to re-enter their own homes.
unverifiable
23 elderly people have died in Norway just days after receiving the COVID-19 vaccine.
Oxford reversed its decision to open-license the Covid-19 vaccine.
Administering pseudo vaccines are a method of controlling the world.


This charming contemporary villa is situated the highly prestigious Super Cannes region of the French Riviera. The property features stunning sea views extending down to the Lerins Islands and Cap d'Antibes. The property comprises of 7 tastefully decorated bedrooms and bathrooms, spacious interiors and a home cinema. The interiors are bright with colourful decor and large windows. The villa also features a lovely swimming pool, an open air spa, Jacuzzi and large outdoor seating and dining areas.


I want to say a heartfelt thank you to all of you who have joined me for a personal journey to your goals, a course or mastermind, or any of the presentations I have made this last year.
Three foundational components that must be operating on your goal for manifestations to occur. Do you have these as part of your daily process?
The #1 and #2 cause of sabotage and failure to reach your goals and what you can do to overcome them.
The number one thing you may be feeling, that is really a sign you're almost there!
Friday, August 28th, 5 pm; drawing for one-hour virtual tea, anywhere in the world (by Skype, Google Hangout or Phone). Conversation of your choice.
If you are a client now, or have been this last year, take advantage of Client Appreciation Month to book personal, 1-on-1 coaching sessions BOGO; buy one and get another free. Purchase as many as you like. Sessions must be booked within the year.
Ever wish it was as easy as 1, 2, 3. Well it can be!
Enjoy this distilled, 10 minutes of presentation with 30 minutes of follow-up Q&A, anything you want to ask, a coaching play-time if you will. So see what you still want to create and come ask; everyone will benefit. It's a good day for an energetic shift!
Have you ever looked around and thought "am I the only person who has no idea what I am doing"?
Have you ever wished you knew what to do, like others seem to?
Are you ever afraid that if someone found out that you really have no idea what to do next they would know you for a fraud?
overcome…even use the phenomenon to get you more business!
Do you ever find it just feels impossible to drag yourself to the phone to do the cold calling, or even warm calling, that you know you should be doing?
What if I could show you a way that changed the game entirely so you felt good, felt like a contribution, actually didn't mind picking up that phone?
Agenda for this day dedicated to expanding your cold calling skills in a way that feels better to you and your potential clients.
11-11:40 am; Diagnose cold calling process, what works best/better?


Catherine Morgan is the Founder of The Money Panel. She has a huge passion for educating women around both the behavioural, emotional and practical aspects of money. She is a Mum of two boys and a self-confessed emotional spender! She supports women through a non jargon approach to money, encouraging women to talk about those matters that are still very taboo. She believes that everybody should have access to financial education. She has been in financial services for 18 years and holds a Diploma in Financial Advice alongside being a Pension Transfer Specialist. She is also a qualified money coach and regularly speaks at financial conferences to try and fly the flag for women in financial services. She sold her first business in her early 30's, is also a qualified personal stylist and has been featured in The Daily Mail. She was nominated as a finalist in the Women in Financial Advice Award 2018 and her podcast was also nominated as a finalist as one of the Top Money Podcasts in the UK in the UK Money Bloggers Shomo Awards 2018. She also works as a regulated financial planner when women need more than just financial guidance.
How do you feel about investing and how much risk do you need to take when investing?
How to avoid the fashion faux-pas - How our own behaviours can lead us to make bad decisions & how to stop them!
When is the best time to invest and what are the benefits of investing monthly?
What have you decided so far?
Once you are invested, what do you do next?
Next Steps - Grab a cuppa!
When you enroll on the 'In Her Financial Shoes' course, you also get FREE access to the From 'Spender to saver' course, worth £147. Take back control of your money and create a spending plan.
Do I have to have lots of money to invest to do this course?
No! What you learn on this course, you can start implementing with as little as £1. This course is for anyone on their journey to building wealth.
No - we believe in educating you to make your own financial decisions. Therefore the content of this course is for your information only and is not deemed to be financial advice. If you would like financial advice, please contact me to book in a free discovery call for financial advice.


text:
Torex RopeCon®
Torex RopeCon®Direct link between pit and valley at El-Limón-Guajes mine
Minera Media Luna, S.A. de C.V. (MML), 100% subsidiary of Torex Gold Resources Inc., was looking for a means of connecting its gold ore pit El Limón in Mexico with the processing plant in the valley, but the El Limón pit is located on a steep ridge approx. 400m up from the plant. Apart from investment and operating costs, safety and environmental aspects were key considerations.
In March 2013, MML decided to contract the RopeCon®, a system which covers the distance of 1.3km and the vertical rise of almost 400m in one stretch with just one tower structure, while transporting 1,000 metric tons of gold ore into the valley every hour. With its long span, the system leaves only a minimal footprint on the ground, and it is characterised by extremely low dust and noise emissions.
Downhill transport allows for green energy to be generated from braking actions, which helps reduce operating costs. This, and the fact that no fossil fuel (Diesel) is required to operate the system is one of the significant differences between RopeCon® and trucks, the other means of transport under consideration for the transport of the ore. The automatic transport system also helps to enhance operational safety and its controls can be integrated into the central control system of the mine.
Transported material gold ore
Horizontal length 1,308 m
Vertical fall 383 m
Conveying capacity 1,000 t/h
Motor rating, continuous -1,026 kW
RopeCon® Torex


text:
Q: Product Inventory program that takes products with an ID, quantity, and price and uses an Inventory class to keep track of the products The Product class seems to work fine but I'm trying to figure out how to get the Inventory class to separate each product into there specific categories. I feel like I'm close but whenever I try and print out the inventory it just shows where it's stored in memory and doesn't actually print anything out. The output i receive when running is at the bottom. I want it to print out the actual products and data, not the instance of it stored in memory.
class Product:

    def __init__(self, pid, price, quantity):
        self.pid = pid
        self.price = price
        self.quantity = quantity

    def __str__(self):
        #Return the strinf representing the product
        return "Product ID: {}\t Price: {}\t Quantity: {}\n".format(self.pid, self.price, self.quantity)

    def get_id(self):
        #returns id
        return self.pid

    def get_price(self):
        #returns price
        return self.price

    def get_quantity(self):
        #returns quantity
        return self.quantity

    def increase_quantity(self):
        self.quantity += 1

    def decrease_quantity(self):
        self.quantity -= 1

    def get_value(self):
        value = self.quantity * self.price
        return 'value is {}'.format(value)

product_1 = Product('fishing', 20, 10)
product_2 = Product('apparel', 35, 20)

class Inventory:

    def __init__(self, products):
        self.products = products
        self.fishing_list = []
        self.apparel_list = []
        self.value = 0

    def __repr__(self):
    return "Inventory(products: {}, fishing_list: {}, apparel_list: {}, value: {})".format(self.products, self.fishing_list, self.apparel_list, self.value)

    def add_fishing(self):
        for product in self.products:
            if product.get_id() == 'fishing':
                self.fishing_list.append(product)
        return '{} is in the fishing section'.format(self.fishing_list)

    def add_apparel(self):
        for product in self.products:
            if product.get_id() == 'apparel':
                self.apparel_list.append(product)
        return '{} is in the apparel section'.format(self.apparel_list)

inventory_1 = Inventory([product_1, product_2])
inventory_1.add_fishing()
print(inventory_1)

OUTPUT = Inventory(products: [<main.Product instance at 0x10dbc8248>, <main.Product instance at 0x10dbc8290>], fishing_list: [<main.Product instance at 0x10dbc8248>], apparel_list: [], value: 0)

A: You need to specify how an object of the class Inventory should be printed.
To do this you need to implement at least one of the following functions in your class.

*

*__repr__

*__str__
This answer helps, which of both you should use: https://stackoverflow.com/a/2626364/8411228
An implementation could look something like this:
class Inventory:
    # your code ...
    def __repr__(self):
        return str(self.products) + str(self.fishing_list) + str(self.apparel_list) + str(self.value)

    # or even better with formatting
    def __repr__(self):
        return f"Inventory(products: {self.products}, fishing_list: {self.fishing_list}, apparel_list: {self.apparel_list}, value: {self.value})

Note that I used in the second example f strings, to format the output string.

redpajama_set_name: RedPajamaStackExchange


text:
Sports Other News 03 Dec 2019 India clinches 27 me ...
Sports, In Other News
India clinches 27 medals on Day 2 with big hauls from shooting, athletics at SAG
Published Dec 3, 2019, 8:38 pm IST
Updated Dec 3, 2019, 8:38 pm IST
India completely dominated the first day of athletics events by clinching 10 medals, while the shooters also fetched nine.
Indian athletes dominated the track and field events and at the shooting range to clinch 27 medals, including 11 gold and remain in the second position at the medals tally in the South Asian Games. (Photo: South Asian Games website)
Kathmandu: Indian athletes dominated the track and field events and at the shooting range to clinch 27 medals, including 11 gold, on the second day of competitions and remain in the second position at the medals tally in the South Asian Games here on Tuesday.
India completely dominated the first day of athletics events by clinching 10 medals (4 gold, 4 silver, 2 bronze) while the shooters also fetched nine (4 gold, 4 silver, 1 bronze) to swell the country's tally.
Both the volleyball men's and women's teams won a gold each while the taekwondo players contributed 1 gold and 3 bronze medals. India also bagged gold medals in both men's and women's table tennis team events.
India's medal tally stood at 43 medals (18 gold, 16 silver and 9 bronze), behind hosts Nepal's 44 (23 gold, 9 silver, 12 bronze). Sri Lanka was third with 46 medals (5 gold, 14 silver, 27 bronze).
On the first day of athletics competition, Archana Suseendran (women's 100m), M Jashna (women's high jump), Sarvesh Anil Kushare (men's high jump) and Ajay Kumar Saroj (men's 1500m) won a gold each to begin India's athletics campaign on an impressive note.
Suseendran clocked 11.80 seconds in the 100m dash to emerge as the fastest woman of the Games, leaving behind Sri Lankans Thanuji Amasha (11.82) and Lakshika Sugand (11.84) for silver and bronze respectively.
In the women's high jump, Jashna cleared 1.73m to clinch the gold while Rubina Yadav bagged a bronze with an effort of 1.69m.
Kushare cleared 2.21m to win the men's high jump gold while compatriot Chetan Balasubramanya claimed the silver with an effort of 2.16m for a 1-2 finish for India.
Saroj won the gold in men's 1500m with a timing of 3.54.18 seconds while Ajeet Kumar clinched the silver by clocking 3.57.18s. The bronze went to Tanka Karki (3.50.20s) of Nepal.
Kavita Yadav then added a silver in the women's 10,000m race by clocking 35 minute 7.95 seconds.
Earlier in the day, India's Chanda (4.34.51s) clinched the silver medal in the women's 1500m event while compatriot Chitra Palakeez (4.35.46s) settled for the bronze. The gold in this event went to Sri Lanka's Uda Kuburalage (4.34.34s).
At the Satdobato Shooting Range, Indian shooters bagged nine medals, including four gold, with Mehuli Ghosh winning the yellow metal with a score better than the world record.
The 19-year-old Mehuli clinched the gold with a score of 253.3 in the final, which is 0.4 more than the current world record of 252.9 which is in the name of another Indian, Apurvu Chandela.
Mehuli's effort will, however, not be considered as a world record, as the South Asian Games' results are not recognised by the international body (ISSF) for the purpose of records.
Shriyanka Sadangi took the silver with a score of 250.8, while Shreya Agrawal (227.2) clinched the bronze in a 1-2-3 podium finish by the Indians.
India also won the team gold in the 10m air rifle event.
In the men's 50m 3P event, Chain Singh clinched the gold medal with compatriot Akhil Sheoran winning the silver.
Yogesh Singh and Gurpreet Singh won the gold and silver medal in the 25m center fire pistol event respectively. India also won a silver medal in the 25m center fire pistol team event.
India also swept the volleyball gold medals by winning both the men's and women's titles. The men's team defeated Pakistan 20-25, 25-15, 25-17 and 29-27 in a hard-fought summit clash to defend the gold they had won at home in the 2016 edition.
The bronze medal went to Sri Lanka.
In the women's final, the defending champions had to toil hard to beat hosts Nepal in a five-setter to clinch the gold. India won 25-17, 23-25, 21-25, 25-20 and 15-6.
The women's bronze medal also went to Sri Lanka.
In table tennis, Indian men's team beat Nepal 3-0 in the summit clash while their women's counterparts defeated Sri Lanka team 3-0 in the final to clinch gold medals.
In taekwondo, Kashish Malik won a gold in women's 57kg category while Radha Bhati (women's 46kg), Kanha Mainali (men's 54kg) and Prithviraj Chavan (men's 68kg) won a bronze each.
In women's football, India mauled Maldives 5-0 in their opening game with Bala Devi scoring a brace.
Indian men's and women's kho-kho teams registered dominating wins over their Sri Lankan counterparts in the semi-finals to enter the finals.
Tags: south asian games
Location: Nepal, Central, Kathmandu
Aus Open: Caroline Wozniacki rallies to tame Dayana Yastremska
Thailand Masters Badminton: India's Kidambi Srikanth and Sameer Verma knocked out
Kiwis will be a handful for India on home turf: Ross Taylor
Newcastle, Arsenal grab draws, Aston Villa win on crazy night
More From Other News
Sexual harassment at SAI: Sports minister Kiren Rijiju steps in
Shivangini Gohai's surgery successful
IWF will sue anyone spreading lies: Tamas Ajan
Archer Shivangini injured during practice
Khelo India Youth Games 2020: Hima Das will be torchbearer


text:
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

use base64;
use canvas_traits::canvas::{CanvasMsg, FromScriptMsg};
use dom::attr::Attr;
use dom::bindings::cell::DomRefCell;
use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasRenderingContext2DMethods;
use dom::bindings::codegen::Bindings::HTMLCanvasElementBinding;
use dom::bindings::codegen::Bindings::HTMLCanvasElementBinding::HTMLCanvasElementMethods;
use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLContextAttributes;
use dom::bindings::codegen::UnionTypes::CanvasRenderingContext2DOrWebGLRenderingContext;
use dom::bindings::conversions::ConversionResult;
use dom::bindings::error::{Error, Fallible};
use dom::bindings::inheritance::Castable;
use dom::bindings::num::Finite;
use dom::bindings::root::{Dom, DomRoot, LayoutDom};
use dom::bindings::str::DOMString;
use dom::canvasrenderingcontext2d::{CanvasRenderingContext2D, LayoutCanvasRenderingContext2DHelpers};
use dom::document::Document;
use dom::element::{AttributeMutation, Element, RawLayoutElementHelpers};
use dom::globalscope::GlobalScope;
use dom::htmlelement::HTMLElement;
use dom::node::{Node, window_from_node};
use dom::virtualmethods::VirtualMethods;
use dom::webglrenderingcontext::{LayoutCanvasWebGLRenderingContextHelpers, WebGLRenderingContext};
use dom_struct::dom_struct;
use euclid::Size2D;
use html5ever::{LocalName, Prefix};
use image::ColorType;
use image::png::PNGEncoder;
use ipc_channel::ipc;
use js::error::throw_type_error;
use js::jsapi::{HandleValue, JSContext};
use offscreen_gl_context::GLContextAttributes;
use script_layout_interface::{HTMLCanvasData, HTMLCanvasDataSource};
use std::iter::repeat;
use style::attr::{AttrValue, LengthOrPercentageOrAuto};

const DEFAULT_WIDTH: u32 = 300;
const DEFAULT_HEIGHT: u32 = 150;

#[must_root]
#[derive(Clone, HeapSizeOf, JSTraceable)]
pub enum CanvasContext {
    Context2d(Dom<CanvasRenderingContext2D>),
    WebGL(Dom<WebGLRenderingContext>),
}

#[dom_struct]
pub struct HTMLCanvasElement {
    htmlelement: HTMLElement,
    context: DomRefCell<Option<CanvasContext>>,
}

impl HTMLCanvasElement {
    fn new_inherited(local_name: LocalName,
                     prefix: Option<Prefix>,
                     document: &Document) -> HTMLCanvasElement {
        HTMLCanvasElement {
            htmlelement: HTMLElement::new_inherited(local_name, prefix, document),
            context: DomRefCell::new(None),
        }
    }

    #[allow(unrooted_must_root)]
    pub fn new(local_name: LocalName,
               prefix: Option<Prefix>,
               document: &Document) -> DomRoot<HTMLCanvasElement> {
        Node::reflect_node(box HTMLCanvasElement::new_inherited(local_name, prefix, document),
                           document,
                           HTMLCanvasElementBinding::Wrap)
    }

    fn recreate_contexts(&self) {
        let size = self.get_size();
        if let Some(ref context) = *self.context.borrow() {
            match *context {
                CanvasContext::Context2d(ref context) => context.set_bitmap_dimensions(size),
                CanvasContext::WebGL(ref context) => context.recreate(size),
            }
        }
    }

    pub fn get_size(&self) -> Size2D<i32> {
        Size2D::new(self.Width() as i32, self.Height() as i32)
    }

    pub fn origin_is_clean(&self) -> bool {
        match *self.context.borrow() {
            Some(CanvasContext::Context2d(ref context)) => context.origin_is_clean(),
            _ => true,
        }
    }
}

pub trait LayoutHTMLCanvasElementHelpers {
    fn data(&self) -> HTMLCanvasData;
    fn get_width(&self) -> LengthOrPercentageOrAuto;
    fn get_height(&self) -> LengthOrPercentageOrAuto;
}

impl LayoutHTMLCanvasElementHelpers for LayoutDom<HTMLCanvasElement> {
    #[allow(unsafe_code)]
    fn data(&self) -> HTMLCanvasData {
        unsafe {
            let canvas = &*self.unsafe_get();
            let source = match canvas.context.borrow_for_layout().as_ref() {
                Some(&CanvasContext::Context2d(ref context)) => {
                    HTMLCanvasDataSource::Image(Some(context.to_layout().get_ipc_renderer()))
                },
                Some(&CanvasContext::WebGL(ref context)) => {
                    context.to_layout().canvas_data_source()
                },
                None => {
                    HTMLCanvasDataSource::Image(None)
                }
            };

            let width_attr = canvas.upcast::<Element>().get_attr_for_layout(&ns!(), &local_name!("width"));
            let height_attr = canvas.upcast::<Element>().get_attr_for_layout(&ns!(), &local_name!("height"));
            HTMLCanvasData {
                source: source,
                width: width_attr.map_or(DEFAULT_WIDTH, |val| val.as_uint()),
                height: height_attr.map_or(DEFAULT_HEIGHT, |val| val.as_uint()),
            }
        }
    }

    #[allow(unsafe_code)]
    fn get_width(&self) -> LengthOrPercentageOrAuto {
        unsafe {
            (&*self.upcast::<Element>().unsafe_get())
                .get_attr_for_layout(&ns!(), &local_name!("width"))
                .map(AttrValue::as_uint_px_dimension)
                .unwrap_or(LengthOrPercentageOrAuto::Auto)
        }
    }

    #[allow(unsafe_code)]
    fn get_height(&self) -> LengthOrPercentageOrAuto {
        unsafe {
            (&*self.upcast::<Element>().unsafe_get())
                .get_attr_for_layout(&ns!(), &local_name!("height"))
                .map(AttrValue::as_uint_px_dimension)
                .unwrap_or(LengthOrPercentageOrAuto::Auto)
        }
    }
}

impl HTMLCanvasElement {
    pub fn get_or_init_2d_context(&self) -> Option<DomRoot<CanvasRenderingContext2D>> {
        if self.context.borrow().is_none() {
            let window = window_from_node(self);
            let size = self.get_size();
            let context = CanvasRenderingContext2D::new(window.upcast::<GlobalScope>(), self, size);
            *self.context.borrow_mut() = Some(CanvasContext::Context2d(Dom::from_ref(&*context)));
        }

        match *self.context.borrow().as_ref().unwrap() {
            CanvasContext::Context2d(ref context) => Some(DomRoot::from_ref(&*context)),
            _   => None,
        }
    }

    #[allow(unsafe_code)]
    pub fn get_or_init_webgl_context(&self,
                                 cx: *mut JSContext,
                                 attrs: Option<HandleValue>) -> Option<DomRoot<WebGLRenderingContext>> {
        if self.context.borrow().is_none() {
            let window = window_from_node(self);
            let size = self.get_size();

            let attrs = if let Some(webgl_attributes) = attrs {
                match unsafe {
                    WebGLContextAttributes::new(cx, webgl_attributes) } {
                    Ok(ConversionResult::Success(ref attrs)) => From::from(attrs),
                    Ok(ConversionResult::Failure(ref error)) => {
                        unsafe { throw_type_error(cx, &error); }
                        return None;
                    }
                    _ => {
                        debug!("Unexpected error on conversion of WebGLContextAttributes");
                        return None;
                    }
                }
            } else {
                GLContextAttributes::default()
            };

            let maybe_ctx = WebGLRenderingContext::new(&window, self, size, attrs);

            *self.context.borrow_mut() = maybe_ctx.map( |ctx| CanvasContext::WebGL(Dom::from_ref(&*ctx)));
        }

        if let Some(CanvasContext::WebGL(ref context)) = *self.context.borrow() {
            Some(DomRoot::from_ref(&*context))
        } else {
            None
        }
    }

    pub fn is_valid(&self) -> bool {
        self.Height() != 0 && self.Width() != 0
    }

    pub fn fetch_all_data(&self) -> Option<(Vec<u8>, Size2D<i32>)> {
        let size = self.get_size();

        if size.width == 0 || size.height == 0 {
            return None
        }

        let data = match self.context.borrow().as_ref() {
            Some(&CanvasContext::Context2d(ref context)) => {
                let (sender, receiver) = ipc::channel().unwrap();
                let msg = CanvasMsg::FromScript(FromScriptMsg::SendPixels(sender));
                context.get_ipc_renderer().send(msg).unwrap();

                match receiver.recv().unwrap() {
                    Some(pixels) => pixels,
                    None => {
                        return None;
                    }
                }
            },
            Some(&CanvasContext::WebGL(_)) => {
                // TODO: add a method in WebGLRenderingContext to get the pixels.
                return None;
            },
            None => {
                repeat(0xffu8).take((size.height as usize) * (size.width as usize) * 4).collect()
            }
        };

        Some((data, size))
    }
}

impl HTMLCanvasElementMethods for HTMLCanvasElement {
    // https://html.spec.whatwg.org/multipage/#dom-canvas-width
    make_uint_getter!(Width, "width", DEFAULT_WIDTH);

    // https://html.spec.whatwg.org/multipage/#dom-canvas-width
    make_uint_setter!(SetWidth, "width", DEFAULT_WIDTH);

    // https://html.spec.whatwg.org/multipage/#dom-canvas-height
    make_uint_getter!(Height, "height", DEFAULT_HEIGHT);

    // https://html.spec.whatwg.org/multipage/#dom-canvas-height
    make_uint_setter!(SetHeight, "height", DEFAULT_HEIGHT);

    #[allow(unsafe_code)]
    // https://html.spec.whatwg.org/multipage/#dom-canvas-getcontext
    unsafe fn GetContext(&self,
                  cx: *mut JSContext,
                  id: DOMString,
                  attributes: Vec<HandleValue>)
        -> Option<CanvasRenderingContext2DOrWebGLRenderingContext> {
        match &*id {
            "2d" => {
                self.get_or_init_2d_context()
                    .map(CanvasRenderingContext2DOrWebGLRenderingContext::CanvasRenderingContext2D)
            }
            "webgl" | "experimental-webgl" => {
                self.get_or_init_webgl_context(cx, attributes.get(0).cloned())
                    .map(CanvasRenderingContext2DOrWebGLRenderingContext::WebGLRenderingContext)
            }
            _ => None
        }
    }

    #[allow(unsafe_code)]
    // https://html.spec.whatwg.org/multipage/#dom-canvas-todataurl
    unsafe fn ToDataURL(&self,
                 _context: *mut JSContext,
                 _mime_type: Option<DOMString>,
                 _arguments: Vec<HandleValue>) -> Fallible<DOMString> {
        // Step 1.
        if let Some(CanvasContext::Context2d(ref context)) = *self.context.borrow() {
            if !context.origin_is_clean() {
                return Err(Error::Security);
            }
        }

        // Step 2.
        if self.Width() == 0 || self.Height() == 0 {
            return Ok(DOMString::from("data:,"));
        }

        // Step 3.
        let raw_data = match *self.context.borrow() {
            Some(CanvasContext::Context2d(ref context)) => {
                let image_data = context.GetImageData(Finite::wrap(0f64), Finite::wrap(0f64),
                                                           Finite::wrap(self.Width() as f64),
                                                           Finite::wrap(self.Height() as f64))?;
                image_data.get_data_array()
            }
            None => {
                // Each pixel is fully-transparent black.
                vec![0; (self.Width() * self.Height() * 4) as usize]
            }
            _ => return Err(Error::NotSupported) // WebGL
        };

        // Only handle image/png for now.
        let mime_type = "image/png";

        let mut encoded = Vec::new();
        {
            let encoder: PNGEncoder<&mut Vec<u8>> = PNGEncoder::new(&mut encoded);
            encoder.encode(&raw_data, self.Width(), self.Height(), ColorType::RGBA(8)).unwrap();
        }

        let encoded = base64::encode(&encoded);
        Ok(DOMString::from(format!("data:{};base64,{}", mime_type, encoded)))
    }
}

impl VirtualMethods for HTMLCanvasElement {
    fn super_type(&self) -> Option<&VirtualMethods> {
        Some(self.upcast::<HTMLElement>() as &VirtualMethods)
    }

    fn attribute_mutated(&self, attr: &Attr, mutation: AttributeMutation) {
        self.super_type().unwrap().attribute_mutated(attr, mutation);
        match attr.local_name() {
            &local_name!("width") | &local_name!("height") => self.recreate_contexts(),
            _ => (),
        };
    }

    fn parse_plain_attribute(&self, name: &LocalName, value: DOMString) -> AttrValue {
        match name {
            &local_name!("width") => AttrValue::from_u32(value.into(), DEFAULT_WIDTH),
            &local_name!("height") => AttrValue::from_u32(value.into(), DEFAULT_HEIGHT),
            _ => self.super_type().unwrap().parse_plain_attribute(name, value),
        }
    }
}

impl<'a> From<&'a WebGLContextAttributes> for GLContextAttributes {
    fn from(attrs: &'a WebGLContextAttributes) -> GLContextAttributes {
        GLContextAttributes {
            alpha: attrs.alpha,
            depth: attrs.depth,
            stencil: attrs.stencil,
            antialias: attrs.antialias,
            premultiplied_alpha: attrs.premultipliedAlpha,
            preserve_drawing_buffer: attrs.preserveDrawingBuffer,
        }
    }
}

pub mod utils {
    use dom::window::Window;
    use net_traits::image_cache::{ImageResponse, UsePlaceholder, ImageOrMetadataAvailable};
    use net_traits::image_cache::CanRequestImages;
    use servo_url::ServoUrl;

    pub fn request_image_from_cache(window: &Window, url: ServoUrl) -> ImageResponse {
        let image_cache = window.image_cache();
        let response =
            image_cache.find_image_or_metadata(url.into(),
                                               UsePlaceholder::No,
                                               CanRequestImages::No);
        match response {
            Ok(ImageOrMetadataAvailable::ImageAvailable(image, url)) =>
                ImageResponse::Loaded(image, url),
            _ => ImageResponse::None,
        }
    }
}

redpajama_set_name: RedPajamaGithub


Mr.Saju Thuruthil is a well-known mural artist and a native of Moothakunnam, Ernakulum district in Kerala. His basic interest in arts lead him to take up Mural paintings lessons from Sri. Mammyoor Krishnankutty Nair.