text:
Year in Review: Adare Castle is a Once in a Lifetime Horse for Etsell and Co.
News and Results > Top Racing Headlines > 2022 General > Year in Review: Adare Castle is a Once in a Lifetime Horse for Etsell and Co.
By Austin Stanton
Year in Review continues with a look back at a mid-season profile of OSS superstar Adare Castle.
The daughter of Muscle Mass has made 22 career starts all in Ontario over two seasons to earn $1,154,691 for her ownership group.
The average price for a yearling at the 2020 Harrisburg Sale was $38,215. Adare Castle was a $10,000 purchase for trainer Mark Etsell and his fellow owners. That $10,000 yearling has turned into the best horse Etsell has ever trained.
"Everybody just feels fortunate that we have this filly," said Etsell. "You can't order them this way. They don't come along often, if ever. We feel very blessed with it, and we appreciate it. It's probably the only one we'll have like her, and we are enjoying the ride."
After a sensational two-year-old season where she won 7 times in 9 starts, the Muscle Mass daughter with over $750,000 in earnings for Etsell and co-owners Robert Newton, Graham Hopkins, and Peter Porter, has come back at three without missing a step. Her record is 4-1-0 through five starts in her sophomore campaign.
"The biggest reason for her strong comeback is we never over raced her at two," said Etsell. "We kept it pretty minimal."
That's about to change as stakes season kicks into full swing across Ontario, with two more Ontario Sires Stakes Gold legs, the OSS Super Final, Simcoe, Casual Breeze, and Elegantimage stakes on the horizon for Etsell's star pupil.
"When they're racing every week, their schedule gets changed. It's not as much work, and a little bit more paddock time," said Etsell. "The biggest thing when we hit the busy schedule will be to keep her happy and not overwork her."
Etsell has had success with trotting fillies before, his most prolific being Blossom Seelster, who made over $370,000 in 74 starts along with Fleur Collins, winner of a Champlain division in 1992, and Scent of a Woman who won a Peaceful Way division in 1994.
Of his three most successful female trotters, only Blossom Seelster went on to race in the Breeders Crown, something that might on Adare Castle's calendar if she continues her winning ways into October when harness racing's championships come north of the 49th parallel to Woodbine Mohawk Park.
She is not already staked to the race, and would have to be supplemented, but it has been discussed by Etsell and his partners.
"When that comes around, we can make that decision a week ahead if she's healthy and racing good," said Etsell. "She's got enough money made so if we need to throw some at that, we can."
But there is a lot more racing for the prodigious filly between now and the end of October when the Hambletonian Society's event rolls into town.
Her next start is planned for August 15 at Grand River Raceway in an OSS Gold leg where she will be hard done by to top her performance from 2021 when she set a track record of 1:57.1 for two-year-old trotting fillies in a Gold winning performance.
One thing you can be sure of is that her owners will be in the stands cheering her on and soaking in the ride of being part of such an amazing filly.
"They're having a ball. They don't miss many races," said Etsell. "They realize that these are once in a lifetime things. You don't plan on grabbing one of these horses every year."


text:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<type interface="true" language="gradle" name="org.gradle.language.base.DependentSourceSet" version="3.0">
    <description> A source set that can have dependencies on other Libraries.

</description>
    <method name="getDependencies" returnType="org.gradle.platform.base.DependencySpecContainer"/>
    <interface name="org.gradle.language.base.LanguageSourceSet"/>
    <property name="dependencies" type="org.gradle.platform.base.DependencySpecContainer"/>
</type>

redpajama_set_name: RedPajamaGithub


If under the age of 14 and looking for your closest support group please see here for a list of our children and teen groups.
Sally has her telephone number advertised and is happy to provide a listening ear via telephone after 6pm weekdays or after 10am at weekends.
She is also is happy to receive support questions from those in her local area and will answer to the best of her ability based on her own knowledge and experiences.
Sally first started losing her hair 22 years ago with a small patch that grew back. Gradually over the next 15 years, patches came and went, but hair reduced overall. Then in 2010, her hair stopped growing and the bald patches became greater than ever. In December 2010, a photo taken at a colleagues retirement "do" made her realise that she could no longer cover up the bare patch and she got her first wig. It took 6 months to get her first NHS wig, but in the meantime she struck lucky with a wig consultant in Cardiff who helped her initially and found the "right one" at the first meeting. Sally now has alopecia universalis.
"Welcome to the Bath, Bristol and Wiltshire support group. We were formed in 2012, and I took over as group coordinator in 2014. We cover a wide geographical area from North Somerset, across Bristol and Bath and into Wiltshire, so we alternate meetings between Bristol/Bath and Swindon. Meetings are informal and new members are always given the chance to tell us their story, if they want to, or to just listen if they prefer. The Swindon meetings are supported by a Trichologist who gives members free advice and cakes! Bristol/Bath meetings are held in a variety of locations including member's homes. Members say the best thing about the group is meeting people who know exactly how they feel and understand what they are going through. I hope to see you at a meeting soon."


text:
Q: Insert Layouts dynamically into an activity at runtime I need to dynamically add a 'template' layout to my activity at runtime based on the click of a button.
Shown in the code block below is a simplified version of my layout. The contents of HEADER C (i.e. BODY C1, BODY C2 ... BODY Cn) are the components that need to be added at runtime. They are all of the same format and are defined in a separate xml file with a relative layout. How do I accomplish this task? I have tried a LayoutInflater, but was unsuccessful. Does LayoutInflater require a LinearLayout to inflate?
<SCROLLVIEW>
   <RELATIVE_LAYOUT>
      ____________
      HEADER A
         ____________
         BODY A
   </RELATIVE_LAYOUT>
   <RELATIVE_LAYOUT>
      ____________
      HEADER B
       ____________
    BODY B
</RELATIVE_LAYOUT>
<RELATIVE_LAYOUT>
____________
HEADER C
    ____________
    BODY C1
    ____________
    BODY C2
    .
    .
    .
    ____________
    BODY Cn
<RELATIVE_LAYOUT>
</SCROLLVIEW>

Thanks, any guidance is appreciated!

A: use
View headerView = View.inflate(this, R.layout.class_name, null);

to inflate your layout.

A: /**rootView represent the RelativeLayout*/
View headerView = LayoutInflater.from(context).inflater(R.layout.header_view, rootView, false);
rootView.add(headerView);

A: You can do that like so:
general = (LinearLayout) findViewById(R.id.general_tab);  // get the id of the layout you wish to add your view to
TextView programs = new TextView(this); // create a new view/widget to add
programs.setText("Program(s): " + prgdisp);  // set the text
general.addView(programs);  // add the new view/widget to the existing layout

EDIT
I missed that you had an xml layout for it already.  Change the above to:
general = (LinearLayout) findViewById(R.id.general_tab);  // get the id of the layout you wish to add your view to
View header = View.inflate(this, R.layout.class_name, null); // inflate your layout
general.addView(header);  // add the new view/widget to the existing layout

A:     LinearLayout Parent = (LinearLayout) findViewById(R.id.linearLayout);

    View child = getLayoutInflater().inflate(R.layout.main_new,null);
    Parent.addView(child);

redpajama_set_name: RedPajamaStackExchange


BACKGROUND- Aspirin or dual antiplatelet therapy with aspirin and clopidogrel is a standard therapy for patients who are at increased risk for cardiovascular events. However, the genetic determinants of variable response to aspirin (alone and in combination with clopidogrel) are not known. METHODS AND RESULTS- We measured ex vivo platelet aggregation before and after dual antiplatelet therapy in individuals (n=565) from the Pharmacogenomics of Anti-Platelet Intervention (PAPI) Study and conducted a genome-wide association study of drug response. Significant findings were extended by examining genotype and cardiovascular outcomes in 2 independent aspirin-treated cohorts: 227 percutaneous coronary intervention patients and 1000 patients of the International Verapamil SR/Trandolapril Study (INVEST) Genetic Substudy (INVEST-GENES). Results from the genome-wide association study revealed a strong association between single-nucleotide polymorphisms on chromosome 1q23 and post-dual antiplatelet therapyplatelet aggregation. Further genotyping revealed rs12041331 in the platelet endothelial aggregation receptor-1 (PEAR1) gene to be most strongly associated with dual antiplatelet therapy response (P=7.66×10(-9)). In white and black patients undergoing percutaneous coronary intervention, A-allele carriers of rs12041331 were more likely to experience a cardiovascular event or death compared with GG homozygotes (hazard ratio, 2.62; 95% confidence interval, 0.96-7.10; P=0.059; and hazard ratio, 3.97; 95% confidence interval, 1.10-14.31; P=0.035, respectively). In aspirin-treated INVEST-GENES patients, rs12041331 A-allele carriers had significantly increased risk of myocardial infarction compared with GG homozygotes (odds ratio, 2.03; 95% confidence interval, 1.01-4.09; P=0.048). CONCLUSION- Common genetic variation in PEAR1 may be a determinant of platelet response and cardiovascular events in patients on aspirin alone or in combination with clopidogrel. Clinical Trial Registration- URL: http://www.clinicaltrials.gov. Unique identifiers: NCT00799396 and NCT00370045.


text:
Margaret (Hennecke) Flagg
A Memorial Service celebrating the life of Margaret (Hennecke) Flagg, of East Bernard will be held at 11:00 a.m. Saturday, January 15, 2022, at East Bernard First Baptist Church.
Margaret was born on March 22, 1933, and went home to be with her Lord and Savior on December 28, 2021, at the age of 88 years. She is preceded in death by her husband, William Harvey Flagg; parents, Raymond and Gladys (Rieger) Hennecke and brother, Roy Hennecke.
Margaret is survived by her daughter, Lorraine Ross, and husband J. D. Ross, of East Bernard, daughter Kay Walleck and husband Jim Walleck, of East Bernard; grandson Damian McDuffie and wife Trisha Meyer of East Bernard; granddaughter Mandy Boettcher and husband Luke Boettcher of East Bernard, grandson Tyler Walleck and wife Royce Walleck of Wallis; great-grandchildren, Tori Mensik and husband Jon Mensik, Cleo Boettche, Breanna Boettcher, Charles Boettcher, Abigail Boettcher, Wade Walleck and Paige Walleck. Great-great-grandchildren Ayla Mensik and Ginny Mensik, and brother Raymond Hennecke and wife Mary Hennecke of East Bernard.
Margaret lived her entire life within the Wharton, Rosenberg and East Bernard area. She attended school in both Wharton and Bernard Prairie. She married William Harvey Flagg on July 15, 1950. Shortly after their marriage Harvey was drafted into the Army and sent overseas to Germany. During this time Margaret continued to live with her parents in Wharton. She took a job as a switchboard operator and continued to work for Southwestern Bell and AT&T for thirty-plus years.
Sometime after Harvey returned home from Germany, they moved to Rosenberg, and in 1972 they moved to East Bernard. Soon after moving, they joined the local Baptist Church, where Margaret happily served on the Benevolence and Kitchen Committees. She sang in the choir, sewed quilts with the Material Girls, and was part of the first group of ladies that worked tirelessly at the CARE Center, distributing food and clothing to the residents in need within the East Bernard community.
Margaret was a devoted wife to Harvey for 63 years, until his death in 2014. She was not afraid of hard work and personal sacrifice, and always put the wants and needs of others ahead of her own. She wanted no recognition for her service. She loved her job, gardening, and push-mowing her yard. Her grandchildren adored her, as she adored them.
Perhaps the greatest legacy that Margaret leaves is one of quiet confidence and unwavering faith in her Savior, Jesus. She never worried; instead, she prayed. She placed her cares and concerns at the foot of the cross and left them there. A true Proverbs 31 woman, her quiet nature and gentle spirit will be greatly missed.
To plant a tree in memory of Margaret Flagg as a living tribute, please visit Tribute Store.
William Harvey Flagg
Luke Boettcher
Raymond Hennecke

redpajama_set_name: RedPajamaCommonCrawl


Apply for 2018-2019 Fulbright Grants now!
Fulbright Program was an international education exchange program that initiated by US senator, J. William Fulbright of Arkansas, and agreed by US congress.
The Foundation for scholarly exchange is a bilateral scholar exchange unit that signed by R.O.C. and US government, which named as Education and cultural exchange program. The purpose for Fulbright program is to assist Taiwan and US scholars, researchers, teacher, and students to do the academic research, teaching, and cultural exchange in the cooperated nation.
Organized by the Foundation for Scholarly Exchange, the Fulbright grants applications started. About the related information, please go read the website mentioned below.


text:
Q: Google Map V3 context menu I am looking for a Google Map V3 context menu library. I have found some code examples here

*

*Gizzmo's blog

*Google API tips

*GMap3

*How I got ..
Stack overflow question Google maps v3 - Contextual menu available? of April also just came up with the above examples. So did Gmap3 adding a simple context menu .
But maybe somebody has encapsulated the examples in a reusable library or found something in the meantime. Obviously there was something for V2.
-- Updated 2012-05-31 --
I have found another one http://googlemapsmania.blogspot.de/2012/04/create-google-maps-context-menu.html , but did not have the time to test it yet.

A: I have created a working JS Fiddle for showing context menu as well as the ability to have clickable items on this context menu.
It shows a clickable Context Menu when a marker is right clicked on Google map.
Basically it makes use of an OverlayView on map. BTW its just a demo.
var loc, map, marker, contextMenu;

ContextMenu.prototype = new google.maps.OverlayView();

/**
  * onAdd is called when the map's panes are ready and the overlay has been
  * added to the map.
  */
ContextMenu.prototype.onAdd = function() {

    $("

").appendTo(document.body);
    var divOuter = $("#cMenu").get(0);

    for(var i=0;i < this.menuItems.length;i++) {
        var mItem = this.menuItems[i];
        $('
' +
          mItem.label + '
').appendTo(divOuter);
    }

    this.div_ = divOuter;

    // Add the element to the "overlayLayer" pane.
    var panes = this.getPanes();
    //panes.overlayLayer.appendChild();
    panes.overlayMouseTarget.appendChild(this.div_);

    var me = this;

    for(var i=0;i < this.menuItems.length;i++) {
        var mItem = this.menuItems[i];

        var func = function() {
           me.clickedItem = this.id;
           google.maps.event.trigger(me, 'click');
        };

        google.maps.event.addDomListener($("#" + mItem.id).get(0), 'click', $.proxy(func, mItem));
    }

    google.maps.event.addListener(me, 'click', function() {
       alert(me.clickedItem);
    });

};

ContextMenu.prototype.draw = function() {
    var div = this.div_;
    div.style.left = '0px';
    div.style.top = '0px';
    div.style.width = '100px';
    div.style.height = '50px';
};

// The onRemove() method will be called automatically from the API if
// we ever set the overlay's map property to 'null'.
ContextMenu.prototype.onRemove = function() {
    this.div_.parentNode.removeChild(this.div_);
    this.div_ = null;
};

// Set the visibility to 'hidden' or 'visible'.
ContextMenu.prototype.hide = function() {
  if (this.div_) {
    // The visibility property must be a string enclosed in quotes.
    this.div_.style.visibility = 'hidden';
  }
};

ContextMenu.prototype.show = function(cpx) {
  if (this.div_) {
    var div = this.div_;
    div.style.left = cpx.x + 'px';
    div.style.top = cpx.y + 'px';

    this.div_.style.visibility = 'visible';
  }
};

function ContextMenu(map,options) {
    options = options || {}; //in case no options are passed to the constructor
    this.setMap(map); //tells the overlay which map it needs to draw on
    this.mapDiv = map.getDiv(); //Div container that the map exists in
    this.menuItems = options.menuItems || {}; //specific to context menus
    this.isVisible = false; //used to hide or show the context menu
}

function initialize() {

    loc = new google.maps.LatLng(62.323907, -150.109291);

    var options = {};
    var menuItems=[];

    menuItems.push({id:"zoomIn", className:'context_menu_item', eventName:'zoom_in_click', label:'Zoom in'});
    menuItems.push({id:"zoomOut", className:'context_menu_item', eventName:'zoom_out_click', label:'Zoom out'});

    options.menuItems = menuItems;
    //=========================================

    map = new google.maps.Map(document.getElementById("map"), {
        zoom: 12,
        center: loc,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    marker = new google.maps.Marker({
        map: map,
        position: loc,
        visible: true
    });

    contextMenu = new ContextMenu(map, options);

    google.maps.event.addListener(marker, 'rightclick', function(mouseEvent){
        contextMenu.hide();
        this.clickedMarker_ = this;
        var overlayProjection = contextMenu.getProjection();
        var cpx = overlayProjection.fromLatLngToContainerPixel(mouseEvent.latLng);
        contextMenu.show(cpx);

        map.setOptions({ draggableCursor: 'pointer' });
    });

    // Hide context menu on several events
    google.maps.event.addListener(map,'click', function(){
        map.setOptions({ draggableCursor: 'grab' });
        contextMenu.hide();
    });

}

google.maps.event.addDomListener(window, 'load', initialize);

Fiddle link:
http://jsfiddle.net/jEhJ3/3409/

A: You can add context menu very easily in google map by following these steps:

*

*Add a custom control of google maps, hide that control on page load.

*Add a right click event handler on map.

*Show that custom control on right click at correct position using pixel property of right click event parameter.

Moreover, Following is working snippet, open it in full page (use you own key to avoid that google billing error):

var map;
var karachi = {
  lat: 24.8567575,
  lng: 66.9701725
};

$(document).ready(function() {
  initMap();
});

function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    zoom: 13.5,
    center: karachi
  });

  let contextMenu = document.getElementById('contextMenu');
  map.controls[google.maps.ControlPosition.TOP_CENTER].push(contextMenu);
  hideContextMenu();

  google.maps.event.addListener(map, "rightclick", function(event) {
    showContextMenu(event);
  });
  google.maps.event.addListener(map, "click", function(event) {
    hideContextMenu();
  });
}

function showContextMenu(event) {
  $('#contextMenu').css("display", "block");
  $('#contextMenu').css({
    left: event.pixel.x,
    top: event.pixel.y
  })
}

function hideContextMenu() {
  $('#contextMenu').css("display", "none");
}
#map {
  height: 100%;
}
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

.contextMenu {
  background-color: rgb(255, 255, 255);
  border: 2px solid rgb(255, 255, 255);
  border-radius: 3px;
  box-shadow: rgba(0, 0, 0, 0.3) 0px 2px 6px;
  cursor: pointer;
  font-size: 1rem;
  text-align: center;
  color: #0d1f49;
  width: 20vw;
  margin: 1px;/*Please note that this margin is necessary otherwise browser will open its own context menu*/
}

    Item 1

A: I don't think you need a library for this. I'd start by trying:
var contextMenu = google.maps.event.addListener(
        map,
        "rightclick",
        function( event ) {
            // use JS Dom methods to create the menu
            // use event.pixel.x and event.pixel.y
            // to position menu at mouse position
            console.log( event );
        }
    );

This assumes your map was created with:
var map = new google.maps.map( { [map options] } );

The event object inside the callback has 4 properties

*

*latLng

*ma

*pixel
where pixel.x and pixel.y are the offset where your click event triggered - counted from the upper left corner of the canvas holding the map object.

A: Go to this demo-purpose website: http://easysublease.org/mapcoverjs/
For context menu, I do not suggest implementing one subclass of the overlayView Class provided by Google Maps API. First, one instance of subclass of overlayView should be added to the five panes provided by Google. More possibly one should add this instance to pane overlayMouseTarget .
But, this instance is "shadowed" by other dom over it. So normal original browser event such mouseover, mouseout cannot reach this instance.
One must use Google Maps API method: addDomListener to handle it(why?). It requires lots of JavaScript code to implement different event handlers, do lots of css class adding and deleting just to realize some visual effects, which could be done using several lines of CSS code if this instance is outside the map container.
So actually converting one external dom outside google map container into one context menu has merit that it can receive original DOM events from browser. Also using some external library can make the target behave better. As context menu, it should not only be able to handle original events, but also those events from Map.
-----------see implementations below------------------------
At the map part HTML, this is the code:

I am map UI control button's container, I think one can use jQuery UI to make me look better

zoomIn

zoomOut

    I am map context menu container, you can sytle me and add logic to me, just as normal DOM nodes.
    since I am not in Map Container at all!

        <button id="place-marker1" type="button" class="btn btn-default">Marker1</button>
        <button id="place-marker2" type="button" class="btn btn-default">Marker2</button>

      Content of next Marker1
      <input id="content-marker1" type="text" placeholder="New of Marker1!" class="form-control">

It shows how one developer can convert one external DOM (id=demoContextPanel) into one map context menu by just adding one css class ".mc-ascontextmenu"!
That pages uses mapcover.js, which helps developer to manage some key components of Map such as Map control UIs, context menu, and customized markers. Then Developers have full freedom to style its map UIs.
If you need more, you can go to its Github see readme.md: https://github.com/bovetliu/mapcover


text:
package org.jetbrains.plugins.gradle.service.project;

import com.intellij.execution.configurations.ParametersList;
import com.intellij.externalSystem.JavaProjectData;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.externalSystem.model.DataNode;
import com.intellij.openapi.externalSystem.model.ExternalSystemException;
import com.intellij.openapi.externalSystem.model.ProjectKeys;
import com.intellij.openapi.externalSystem.model.project.*;
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId;
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListener;
import com.intellij.openapi.externalSystem.service.project.ExternalSystemProjectResolver;
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
import com.intellij.openapi.externalSystem.util.ExternalSystemDebugEnvironment;
import com.intellij.openapi.module.StdModuleTypes;
import com.intellij.openapi.util.Factory;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.KeyValue;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.BooleanFunction;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.ContainerUtilRt;
import com.intellij.util.containers.MultiMap;
import org.gradle.tooling.*;
import org.gradle.tooling.model.DomainObjectSet;
import org.gradle.tooling.model.build.BuildEnvironment;
import org.gradle.tooling.model.gradle.GradleBuild;
import org.gradle.tooling.model.idea.BasicIdeaProject;
import org.gradle.tooling.model.idea.IdeaModule;
import org.gradle.tooling.model.idea.IdeaProject;
import org.gradle.util.GradleVersion;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.gradle.model.*;
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData;
import org.jetbrains.plugins.gradle.remote.impl.GradleLibraryNamesMixer;
import org.jetbrains.plugins.gradle.service.execution.GradleExecutionHelper;
import org.jetbrains.plugins.gradle.service.execution.UnsupportedCancellationToken;
import org.jetbrains.plugins.gradle.settings.ClassHolder;
import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings;
import org.jetbrains.plugins.gradle.util.GradleConstants;

import java.io.File;
import java.util.*;

import static org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil.attachGradleSdkSources;
import static org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil.getModuleId;

/**
 * @author Denis Zhdanov, Vladislav Soroka
 * @since 8/8/11 11:09 AM
 */
public class GradleProjectResolver implements ExternalSystemProjectResolver<GradleExecutionSettings> {

  private static final Logger LOG = Logger.getInstance("#" + GradleProjectResolver.class.getName());

  @NotNull private final GradleExecutionHelper myHelper;
  private final GradleLibraryNamesMixer myLibraryNamesMixer = new GradleLibraryNamesMixer();

  private final MultiMap<ExternalSystemTaskId, CancellationTokenSource> myCancellationMap = MultiMap.create();
  public static final Key<Map<String/* module id */, Pair<DataNode<GradleSourceSetData>, ExternalSourceSet>>> RESOLVED_SOURCE_SETS =
    Key.create("resolvedSourceSets");
  public static final Key<Map<String/* output path */, Pair<String /* module id*/, ExternalSystemSourceType>>> MODULES_OUTPUTS =
    Key.create("moduleOutputsMap");
  public static final Key<Map<String/* artifact path */, String /* module id*/>> CONFIGURATION_ARTIFACTS =
    Key.create("gradleArtifactsMap");

  // This constructor is called by external system API, see AbstractExternalSystemFacadeImpl class constructor.
  @SuppressWarnings("UnusedDeclaration")
  public GradleProjectResolver() {
    this(new GradleExecutionHelper());
  }

  public GradleProjectResolver(@NotNull GradleExecutionHelper helper) {
    myHelper = helper;
  }

  @Nullable
  @Override
  public DataNode<ProjectData> resolveProjectInfo(@NotNull final ExternalSystemTaskId id,
                                                  @NotNull final String projectPath,
                                                  final boolean isPreviewMode,
                                                  @Nullable final GradleExecutionSettings settings,
                                                  @NotNull final ExternalSystemTaskNotificationListener listener)
    throws ExternalSystemException, IllegalArgumentException, IllegalStateException {
    if (settings != null) {
      myHelper.ensureInstalledWrapper(id, projectPath, settings, listener);
    }

    final GradleProjectResolverExtension projectResolverChain = createProjectResolverChain(settings);
    DefaultProjectResolverContext resolverContext = new DefaultProjectResolverContext(id, projectPath, settings, listener, isPreviewMode);
    final DataNode<ProjectData> resultProjectDataNode = myHelper.execute(
      projectPath, settings, new ProjectConnectionDataNodeFunction(resolverContext, projectResolverChain, false)
    );

    // auto-discover buildSrc project if needed
    final String buildSrcProjectPath = projectPath + "/buildSrc";
    DefaultProjectResolverContext buildSrcResolverCtx =
      new DefaultProjectResolverContext(id, buildSrcProjectPath, settings, listener, isPreviewMode);
    resolverContext.copyUserDataTo(buildSrcResolverCtx);
    handleBuildSrcProject(resultProjectDataNode, new ProjectConnectionDataNodeFunction(buildSrcResolverCtx, projectResolverChain, true));
    return resultProjectDataNode;
  }

  @Override
  public boolean cancelTask(@NotNull ExternalSystemTaskId id, @NotNull ExternalSystemTaskNotificationListener listener) {
    synchronized (myCancellationMap) {
      for (CancellationTokenSource cancellationTokenSource : myCancellationMap.get(id)) {
        cancellationTokenSource.cancel();
      }
    }
    return true;
  }

  @NotNull
  private DataNode<ProjectData> doResolveProjectInfo(@NotNull final DefaultProjectResolverContext resolverCtx,
                                                     @NotNull final GradleProjectResolverExtension projectResolverChain,
                                                     boolean isBuildSrcProject)
    throws IllegalArgumentException, IllegalStateException {

    final ProjectImportAction projectImportAction = new ProjectImportAction(resolverCtx.isPreviewMode());

    final List<KeyValue<String, String>> extraJvmArgs = new ArrayList<KeyValue<String, String>>();
    final List<String> commandLineArgs = ContainerUtil.newArrayList();
    final Set<Class> toolingExtensionClasses = ContainerUtil.newHashSet();

    if(resolverCtx.isPreviewMode()){
      commandLineArgs.add("-Didea.isPreviewMode=true");
      final Set<Class> previewLightWeightToolingModels = ContainerUtil.<Class>set(ExternalProjectPreview.class, GradleBuild.class);
      projectImportAction.addExtraProjectModelClasses(previewLightWeightToolingModels);
    }

    final GradleImportCustomizer importCustomizer = GradleImportCustomizer.get();
    for (GradleProjectResolverExtension resolverExtension = projectResolverChain;
         resolverExtension != null;
         resolverExtension = resolverExtension.getNext()) {
      // inject ProjectResolverContext into gradle project resolver extensions
      resolverExtension.setProjectResolverContext(resolverCtx);
      // pre-import checks
      resolverExtension.preImportCheck();

      if(!resolverCtx.isPreviewMode()){
        // register classes of extra gradle project models required for extensions (e.g. com.android.builder.model.AndroidProject)
        projectImportAction.addExtraProjectModelClasses(resolverExtension.getExtraProjectModelClasses());
      }

      if (importCustomizer == null || importCustomizer.useExtraJvmArgs()) {
        // collect extra JVM arguments provided by gradle project resolver extensions
        extraJvmArgs.addAll(resolverExtension.getExtraJvmArgs());
      }
      // collect extra command-line arguments
      commandLineArgs.addAll(resolverExtension.getExtraCommandLineArgs());
      // collect tooling extensions classes
      toolingExtensionClasses.addAll(resolverExtension.getToolingExtensionsClasses());
    }

    final ParametersList parametersList = new ParametersList();
    for (KeyValue<String, String> jvmArg : extraJvmArgs) {
      parametersList.addProperty(jvmArg.getKey(), jvmArg.getValue());
    }

    final BuildEnvironment buildEnvironment = GradleExecutionHelper.getBuildEnvironment(resolverCtx.getConnection());
    GradleVersion gradleVersion = null;
    if (buildEnvironment != null) {
      gradleVersion = GradleVersion.version(buildEnvironment.getGradle().getGradleVersion());
    }

    BuildActionExecuter<ProjectImportAction.AllModels> buildActionExecutor = resolverCtx.getConnection().action(projectImportAction);

    File initScript = GradleExecutionHelper.generateInitScript(isBuildSrcProject, toolingExtensionClasses);
    if (initScript != null) {
      ContainerUtil.addAll(commandLineArgs, GradleConstants.INIT_SCRIPT_CMD_OPTION, initScript.getAbsolutePath());
    }

    GradleExecutionHelper.prepare(
      buildActionExecutor, resolverCtx.getExternalSystemTaskId(),
      resolverCtx.getSettings(), resolverCtx.getListener(),
      parametersList.getParameters(), commandLineArgs, resolverCtx.getConnection());

    resolverCtx.checkCancelled();

    ProjectImportAction.AllModels allModels;
    final CancellationTokenSource cancellationTokenSource = GradleConnector.newCancellationTokenSource();
    try {
      resolverCtx.setCancellationTokenSource(cancellationTokenSource);
      buildActionExecutor.withCancellationToken(cancellationTokenSource.token());
      synchronized (myCancellationMap) {
        myCancellationMap.putValue(resolverCtx.getExternalSystemTaskId(), cancellationTokenSource);
        if (gradleVersion != null && gradleVersion.compareTo(GradleVersion.version("2.1")) < 0) {
          myCancellationMap.putValue(resolverCtx.getExternalSystemTaskId(), new UnsupportedCancellationToken());
        }
      }
      allModels = buildActionExecutor.run();
      if (allModels == null) {
        throw new IllegalStateException("Unable to get project model for the project: " + resolverCtx.getProjectPath());
      }
    }
    catch (UnsupportedVersionException unsupportedVersionException) {
      resolverCtx.checkCancelled();

      // Old gradle distribution version used (before ver. 1.8)
      // fallback to use ModelBuilder gradle tooling API
      Class<? extends IdeaProject> aClass = resolverCtx.isPreviewMode() ? BasicIdeaProject.class : IdeaProject.class;
      ModelBuilder<? extends IdeaProject> modelBuilder = myHelper.getModelBuilder(
        aClass,
        resolverCtx.getExternalSystemTaskId(),
        resolverCtx.getSettings(),
        resolverCtx.getConnection(),
        resolverCtx.getListener(),
        parametersList.getParameters());

      final IdeaProject ideaProject = modelBuilder.get();
      allModels = new ProjectImportAction.AllModels(ideaProject);
    }
    finally {
      synchronized (myCancellationMap) {
        myCancellationMap.remove(resolverCtx.getExternalSystemTaskId(), cancellationTokenSource);
      }
    }

    resolverCtx.checkCancelled();

    allModels.setBuildEnvironment(buildEnvironment);
    extractExternalProjectModels(allModels, resolverCtx.isPreviewMode());
    resolverCtx.setModels(allModels);

    // import project data
    ProjectData projectData = projectResolverChain.createProject();
    DataNode<ProjectData> projectDataNode = new DataNode<ProjectData>(ProjectKeys.PROJECT, projectData, null);

    // import java project data
    JavaProjectData javaProjectData = projectResolverChain.createJavaProjectData();
    projectDataNode.createChild(JavaProjectData.KEY, javaProjectData);

    IdeaProject ideaProject = resolverCtx.getModels().getIdeaProject();

    projectResolverChain.populateProjectExtraModels(ideaProject, projectDataNode);

    DomainObjectSet<? extends IdeaModule> gradleModules = ideaProject.getModules();
    if (gradleModules == null || gradleModules.isEmpty()) {
      throw new IllegalStateException("No modules found for the target project: " + ideaProject);
    }

    final Map<String /* module id */, Pair<DataNode<ModuleData>, IdeaModule>> moduleMap = ContainerUtilRt.newHashMap();
    final Map<String /* module id */, Pair<DataNode<GradleSourceSetData>, ExternalSourceSet>> sourceSetsMap = ContainerUtil.newHashMap();
    projectDataNode.putUserData(RESOLVED_SOURCE_SETS, sourceSetsMap);

    final Map<String/* output path */, Pair<String /* module id*/, ExternalSystemSourceType>> moduleOutputsMap =
      ContainerUtil.newTroveMap(FileUtil.PATH_HASHING_STRATEGY);
    projectDataNode.putUserData(MODULES_OUTPUTS, moduleOutputsMap);
    final Map<String/* artifact path */, String /* module id*/> artifactsMap =
      ContainerUtil.newTroveMap(FileUtil.PATH_HASHING_STRATEGY);
    projectDataNode.putUserData(CONFIGURATION_ARTIFACTS, artifactsMap);

    // import modules data
    for (IdeaModule gradleModule : gradleModules) {
      if (gradleModule == null) {
        continue;
      }

      resolverCtx.checkCancelled();

      if (ExternalSystemDebugEnvironment.DEBUG_ORPHAN_MODULES_PROCESSING) {
        LOG.info(String.format("Importing module data: %s", gradleModule));
      }
      final String moduleName = gradleModule.getName();
      if (moduleName == null) {
        throw new IllegalStateException("Module with undefined name detected: " + gradleModule);
      }

      DataNode<ModuleData> moduleDataNode = projectResolverChain.createModule(gradleModule, projectDataNode);
      String mainModuleId = getModuleId(gradleModule);
      moduleMap.put(mainModuleId, Pair.create(moduleDataNode, gradleModule));
    }

    File gradleHomeDir = null;
    // populate modules nodes
    for (final Pair<DataNode<ModuleData>, IdeaModule> pair : moduleMap.values()) {
      final DataNode<ModuleData> moduleDataNode = pair.first;
      final IdeaModule ideaModule = pair.second;

      if (gradleHomeDir == null) {
        final BuildScriptClasspathModel buildScriptClasspathModel =
          resolverCtx.getExtraProject(ideaModule, BuildScriptClasspathModel.class);
        if (buildScriptClasspathModel != null) {
          gradleHomeDir = buildScriptClasspathModel.getGradleHomeDir();
        }
      }

      projectResolverChain.populateModuleContentRoots(ideaModule, moduleDataNode);
      projectResolverChain.populateModuleCompileOutputSettings(ideaModule, moduleDataNode);
      if (!isBuildSrcProject) {
        projectResolverChain.populateModuleTasks(ideaModule, moduleDataNode, projectDataNode);
      }

      final List<DataNode<? extends ModuleData>> modules = ContainerUtil.newSmartList();
      modules.add(moduleDataNode);
      modules.addAll(ExternalSystemApiUtil.findAll(moduleDataNode, GradleSourceSetData.KEY));

      final ExternalSystemSourceType[] sourceTypes = new ExternalSystemSourceType[]{
        ExternalSystemSourceType.SOURCE,
        ExternalSystemSourceType.RESOURCE,
        ExternalSystemSourceType.TEST,
        ExternalSystemSourceType.TEST_RESOURCE
      };
      for (DataNode<? extends ModuleData> module : modules) {
        final ModuleData moduleData = module.getData();
        for (ExternalSystemSourceType sourceType : sourceTypes) {
          final String path = moduleData.getCompileOutputPath(sourceType);
          if (path != null) {
            moduleOutputsMap.put(path, Pair.create(moduleData.getId(), sourceType));
          }
        }

        if (moduleData instanceof GradleSourceSetData) {
          for (File artifactFile : moduleData.getArtifacts()) {
            artifactsMap.put(ExternalSystemApiUtil.toCanonicalPath(artifactFile.getAbsolutePath()), moduleData.getId());
          }
        }
      }
    }

    for (final Pair<DataNode<ModuleData>, IdeaModule> pair : moduleMap.values()) {
      final DataNode<ModuleData> moduleDataNode = pair.first;
      final IdeaModule ideaModule = pair.second;
      projectResolverChain.populateModuleDependencies(ideaModule, moduleDataNode, projectDataNode);
      projectResolverChain.populateModuleExtraModels(ideaModule, moduleDataNode);
    }
    mergeSourceSetContentRoots(moduleMap, resolverCtx);
    mergeLibraryAndModuleDependencyData(projectDataNode, gradleHomeDir, gradleVersion);

    // ensure unique library names
    Collection<DataNode<LibraryData>> libraries = ExternalSystemApiUtil.getChildren(projectDataNode, ProjectKeys.LIBRARY);
    myLibraryNamesMixer.mixNames(libraries);

    return projectDataNode;
  }

  private static void mergeLibraryAndModuleDependencyData(DataNode<ProjectData> projectDataNode,
                                                          @Nullable File gradleHomeDir,
                                                          @Nullable GradleVersion gradleVersion) {
    final Map<String, Pair<DataNode<GradleSourceSetData>, ExternalSourceSet>> sourceSetMap =
      projectDataNode.getUserData(RESOLVED_SOURCE_SETS);
    assert sourceSetMap != null;

    final Map<String, Pair<String, ExternalSystemSourceType>> moduleOutputsMap =
      projectDataNode.getUserData(MODULES_OUTPUTS);
    assert moduleOutputsMap != null;

    final Map<String, String> artifactsMap = projectDataNode.getUserData(CONFIGURATION_ARTIFACTS);
    assert artifactsMap != null;

    final Collection<DataNode<LibraryDependencyData>> libraryDependencies =
      ExternalSystemApiUtil.findAllRecursively(projectDataNode, ProjectKeys.LIBRARY_DEPENDENCY);

    for (DataNode<LibraryDependencyData> libraryDependencyDataNode : libraryDependencies) {
      if (!libraryDependencyDataNode.getChildren().isEmpty()) continue;

      final DataNode<?> libraryNodeParent = libraryDependencyDataNode.getParent();
      if (libraryNodeParent == null) continue;

      final LibraryDependencyData libraryDependencyData = libraryDependencyDataNode.getData();
      final LibraryData libraryData = libraryDependencyData.getTarget();
      final Set<String> libraryPaths = libraryData.getPaths(LibraryPathType.BINARY);
      if (libraryPaths.isEmpty()) continue;
      if(StringUtil.isNotEmpty(libraryData.getExternalName())) continue;

      final LinkedList<String> unprocessedPaths = ContainerUtil.newLinkedList(libraryPaths);
      while (!unprocessedPaths.isEmpty()) {
        final String path = unprocessedPaths.remove();

        Set<String> targetModuleOutputPaths = null;

        final String moduleId;
        final Pair<String, ExternalSystemSourceType> sourceTypePair = moduleOutputsMap.get(path);
        if (sourceTypePair == null) {
          moduleId = artifactsMap.get(path);
          if (moduleId != null) {
            targetModuleOutputPaths = ContainerUtil.set(path);
          }
        }
        else {
          moduleId = sourceTypePair.first;
        }
        if (moduleId == null) continue;

        final Pair<DataNode<GradleSourceSetData>, ExternalSourceSet> pair = sourceSetMap.get(moduleId);
        if (pair == null) {
          continue;
        }

        final ModuleData moduleData = pair.first.getData();
        if (targetModuleOutputPaths == null) {
          final Set<String> compileSet = ContainerUtil.newHashSet();
          ContainerUtil.addAllNotNull(compileSet,
                                      moduleData.getCompileOutputPath(ExternalSystemSourceType.SOURCE),
                                      moduleData.getCompileOutputPath(ExternalSystemSourceType.RESOURCE));
          if (!compileSet.isEmpty() && ContainerUtil.intersects(libraryPaths, compileSet)) {
            targetModuleOutputPaths = compileSet;
          }
          else {
            final Set<String> testSet = ContainerUtil.newHashSet();
            ContainerUtil.addAllNotNull(testSet,
                                        moduleData.getCompileOutputPath(ExternalSystemSourceType.TEST),
                                        moduleData.getCompileOutputPath(ExternalSystemSourceType.TEST_RESOURCE));
            if (compileSet.isEmpty() && ContainerUtil.intersects(libraryPaths, testSet)) {
              targetModuleOutputPaths = testSet;
            }
          }
        }

        final ModuleData ownerModule = libraryDependencyData.getOwnerModule();
        final ModuleDependencyData moduleDependencyData = new ModuleDependencyData(ownerModule, moduleData);
        moduleDependencyData.setScope(libraryDependencyData.getScope());
        if ("test".equals(pair.second.getName())) {
          moduleDependencyData.setProductionOnTestDependency(true);
        }
        final DataNode<ModuleDependencyData> found = ExternalSystemApiUtil.find(
          libraryNodeParent, ProjectKeys.MODULE_DEPENDENCY, new BooleanFunction<DataNode<ModuleDependencyData>>() {
            @Override
            public boolean fun(DataNode<ModuleDependencyData> node) {
              return moduleDependencyData.equals(node.getData());
            }
          });

        if (targetModuleOutputPaths != null) {
          if (found == null) {
            libraryNodeParent.createChild(ProjectKeys.MODULE_DEPENDENCY, moduleDependencyData);
          }
          libraryPaths.removeAll(targetModuleOutputPaths);
          unprocessedPaths.removeAll(targetModuleOutputPaths);
          if (libraryPaths.isEmpty()) {
            libraryDependencyDataNode.clear(true);
            break;
          }
          continue;
        }
        else {
          // do not add the path as library dependency if another module dependency is already contain the path as one of its output paths
          if (found != null) {
            libraryPaths.remove(path);
            if (libraryPaths.isEmpty()) {
              libraryDependencyDataNode.clear(true);
              break;
            }
            continue;
          }
        }

        final ExternalSourceDirectorySet directorySet = pair.second.getSources().get(sourceTypePair.second);
        if (directorySet != null) {
          for (File file : directorySet.getSrcDirs()) {
            libraryData.addPath(LibraryPathType.SOURCE, file.getAbsolutePath());
          }
        }
      }

      if (libraryDependencyDataNode.getParent() != null) {
        if (libraryPaths.size() > 1) {
          List<String> toRemove = ContainerUtil.newSmartList();
          for (String path : libraryPaths) {
            final File binaryPath = new File(path);
            if (binaryPath.isFile()) {
              final LibraryData extractedLibrary = new LibraryData(libraryDependencyData.getOwner(), "");
              extractedLibrary.addPath(LibraryPathType.BINARY, path);
              if (gradleHomeDir != null && gradleVersion != null) {
                attachGradleSdkSources(binaryPath, extractedLibrary, gradleHomeDir, gradleVersion);
              }
              LibraryDependencyData extractedDependencyData = new LibraryDependencyData(
                libraryDependencyData.getOwnerModule(), extractedLibrary, LibraryLevel.MODULE);
              libraryDependencyDataNode.getParent().createChild(ProjectKeys.LIBRARY_DEPENDENCY, extractedDependencyData);

              toRemove.add(path);
            }
          }
          libraryPaths.removeAll(toRemove);
          if (libraryPaths.isEmpty()) {
            libraryDependencyDataNode.clear(true);
          }
        }
      }
    }
  }

  private static Map<String, ExternalProject> extractExternalProjectModels(ProjectImportAction.AllModels models, boolean isPreview) {
    final ExternalProject externalRootProject =
      isPreview ? models.getExtraProject(null, ExternalProjectPreview.class) : models.getExtraProject(null, ExternalProject.class);
    if (externalRootProject == null) return Collections.emptyMap();

    final DefaultExternalProject wrappedExternalRootProject = new DefaultExternalProject(externalRootProject);
    models.addExtraProject(wrappedExternalRootProject, ExternalProject.class);
    final Map<String, ExternalProject> externalProjectsMap = createExternalProjectsMap(wrappedExternalRootProject);

    DomainObjectSet<? extends IdeaModule> gradleModules = models.getIdeaProject().getModules();
    if (gradleModules != null && !gradleModules.isEmpty()) {
      for (IdeaModule ideaModule : gradleModules) {
        final ExternalProject externalProject = externalProjectsMap.get(getModuleId(ideaModule));
        if (externalProject != null) {
          models.addExtraProject(externalProject, ExternalProject.class, ideaModule);
        }
      }
    }

    return externalProjectsMap;
  }

  private static Map<String, ExternalProject> createExternalProjectsMap(@Nullable final ExternalProject rootExternalProject) {
    final Map<String, ExternalProject> externalProjectMap = ContainerUtilRt.newHashMap();

    if (rootExternalProject == null) return externalProjectMap;

    Queue<ExternalProject> queue = new LinkedList<ExternalProject>();
    queue.add(rootExternalProject);

    while (!queue.isEmpty()) {
      ExternalProject externalProject = queue.remove();
      queue.addAll(externalProject.getChildProjects().values());
      final String moduleName = externalProject.getName();
      final String qName = externalProject.getQName();
      String moduleId = StringUtil.isEmpty(qName) || ":".equals(qName) ? moduleName : qName;
      externalProjectMap.put(moduleId, externalProject);
    }

    return externalProjectMap;
  }

  private static void mergeSourceSetContentRoots(@NotNull Map<String, Pair<DataNode<ModuleData>, IdeaModule>> moduleMap,
                                                 @NotNull ProjectResolverContext resolverCtx) {
    class Counter {
      int count;

      void increment() {
        count++;
      }
    }
    final Factory<Counter> counterFactory = new Factory<Counter>() {
      @Override
      public Counter create() {
        return new Counter();
      }
    };

    final Map<String, Counter> weightMap = ContainerUtil.newHashMap();
    for (final Pair<DataNode<ModuleData>, IdeaModule> pair : moduleMap.values()) {
      final DataNode<ModuleData> moduleNode = pair.first;
      for (DataNode<ContentRootData> contentRootNode : ExternalSystemApiUtil.findAll(moduleNode, ProjectKeys.CONTENT_ROOT)) {
        File file = new File(contentRootNode.getData().getRootPath());
        while (file != null) {
          ContainerUtil.getOrCreate(weightMap, file.getPath(), counterFactory).increment();
          file = file.getParentFile();
        }
      }

      for (DataNode<GradleSourceSetData> sourceSetNode : ExternalSystemApiUtil.findAll(moduleNode, GradleSourceSetData.KEY)) {
        final Set<String> set = ContainerUtil.newHashSet();
        for (DataNode<ContentRootData> contentRootNode : ExternalSystemApiUtil.findAll(sourceSetNode, ProjectKeys.CONTENT_ROOT)) {
          File file = new File(contentRootNode.getData().getRootPath());
          while (file != null) {
            set.add(file.getPath());
            file = file.getParentFile();
          }
        }
        for (String path : set) {
          ContainerUtil.getOrCreate(weightMap, path, counterFactory).increment();
        }
      }
    }
    for (final Pair<DataNode<ModuleData>, IdeaModule> pair : moduleMap.values()) {
      final DataNode<ModuleData> moduleNode = pair.first;
      final ExternalProject externalProject = resolverCtx.getExtraProject(pair.second, ExternalProject.class);
      if (externalProject == null) continue;
      final File buildDir = externalProject.getBuildDir();

      for (DataNode<GradleSourceSetData> sourceSetNode : ExternalSystemApiUtil.findAll(moduleNode, GradleSourceSetData.KEY)) {
        final Map<String, DataNode<ContentRootData>> sourceSetRoots = ContainerUtil.newLinkedHashMap();
        for (DataNode<ContentRootData> contentRootNode : ExternalSystemApiUtil.findAll(sourceSetNode, ProjectKeys.CONTENT_ROOT)) {
          File root = new File(contentRootNode.getData().getRootPath());
          if (FileUtil.isAncestor(buildDir, root, true)) continue;

          while (weightMap.containsKey(root.getParent()) && weightMap.get(root.getParent()).count <= 1) {
            root = root.getParentFile();
          }
          DataNode<ContentRootData> mergedContentRootNode = sourceSetRoots.get(root.getPath());
          if (mergedContentRootNode == null) {
            ContentRootData mergedContentRoot = new ContentRootData(GradleConstants.SYSTEM_ID, root.getAbsolutePath());
            mergedContentRootNode = sourceSetNode.createChild(ProjectKeys.CONTENT_ROOT, mergedContentRoot);
            sourceSetRoots.put(root.getPath(), mergedContentRootNode);
          }

          for (ExternalSystemSourceType sourceType : ExternalSystemSourceType.values()) {
            for (ContentRootData.SourceRoot sourceRoot : contentRootNode.getData().getPaths(sourceType)) {
              mergedContentRootNode.getData().storePath(sourceType, sourceRoot.getPath(), sourceRoot.getPackagePrefix());
            }
          }
          contentRootNode.clear(true);
        }
      }
    }
  }

  private void handleBuildSrcProject(@NotNull final DataNode<ProjectData> resultProjectDataNode,
                                     @NotNull final ProjectConnectionDataNodeFunction projectConnectionDataNodeFunction) {

    final String projectPath = projectConnectionDataNodeFunction.myResolverContext.getProjectPath();
    if (!new File(projectPath).isDirectory()) {
      return;
    }

    if (projectConnectionDataNodeFunction.myResolverContext.isPreviewMode()) {
      ModuleData buildSrcModuleData =
        new ModuleData(":buildSrc", GradleConstants.SYSTEM_ID, StdModuleTypes.JAVA.getId(), "buildSrc", projectPath, projectPath);
      resultProjectDataNode.createChild(ProjectKeys.MODULE, buildSrcModuleData);
      return;
    }

    final DataNode<ModuleData> buildSrcModuleDataNode =
      GradleProjectResolverUtil.findModule(resultProjectDataNode, projectPath);

    // check if buildSrc project was already exposed in settings.gradle file
    if (buildSrcModuleDataNode != null) return;

    final DataNode<ProjectData> buildSrcProjectDataDataNode = myHelper.execute(
      projectPath, projectConnectionDataNodeFunction.myResolverContext.getSettings(), projectConnectionDataNodeFunction);

    if (buildSrcProjectDataDataNode != null) {
      for (DataNode<ModuleData> moduleNode : ExternalSystemApiUtil.getChildren(buildSrcProjectDataDataNode, ProjectKeys.MODULE)) {
        resultProjectDataNode.addChild(moduleNode);

        // adjust ide module group
        final ModuleData moduleData = moduleNode.getData();
        if (moduleData.getIdeModuleGroup() != null) {
          String[] moduleGroup = ArrayUtil.prepend(resultProjectDataNode.getData().getInternalName(), moduleData.getIdeModuleGroup());
          moduleData.setIdeModuleGroup(moduleGroup);

          for (DataNode<GradleSourceSetData> sourceSetNode : ExternalSystemApiUtil.getChildren(moduleNode, GradleSourceSetData.KEY)) {
            sourceSetNode.getData().setIdeModuleGroup(moduleGroup);
          }
        }
      }
    }
  }

  private class ProjectConnectionDataNodeFunction implements Function<ProjectConnection, DataNode<ProjectData>> {
    @NotNull private final GradleProjectResolverExtension myProjectResolverChain;
    private final boolean myIsBuildSrcProject;
    private DefaultProjectResolverContext myResolverContext;

    private ProjectConnectionDataNodeFunction(@NotNull DefaultProjectResolverContext resolverContext,
                                              @NotNull GradleProjectResolverExtension projectResolverChain, boolean isBuildSrcProject) {
      myResolverContext = resolverContext;
      myProjectResolverChain = projectResolverChain;
      myIsBuildSrcProject = isBuildSrcProject;
    }

    @Override
    public DataNode<ProjectData> fun(ProjectConnection connection) {
      try {
        myResolverContext.setConnection(connection);
        return doResolveProjectInfo(myResolverContext, myProjectResolverChain, myIsBuildSrcProject);
      }
      catch (RuntimeException e) {
        LOG.info("Gradle project resolve error", e);
        throw myProjectResolverChain.getUserFriendlyError(e, myResolverContext.getProjectPath(), null);
      }
    }
  }

  @NotNull
  public static GradleProjectResolverExtension createProjectResolverChain(@Nullable final GradleExecutionSettings settings) {
    GradleProjectResolverExtension projectResolverChain;
    if (settings != null) {
      List<ClassHolder<? extends GradleProjectResolverExtension>> extensionClasses = settings.getResolverExtensions();

      Deque<GradleProjectResolverExtension> extensions = new ArrayDeque<GradleProjectResolverExtension>();
      for (ClassHolder<? extends GradleProjectResolverExtension> holder : extensionClasses) {
        final GradleProjectResolverExtension extension;
        try {
          extension = holder.getTargetClass().newInstance();
        }
        catch (Throwable e) {
          throw new IllegalArgumentException(
            String.format("Can't instantiate project resolve extension for class '%s'", holder.getTargetClassName()), e);
        }
        final GradleProjectResolverExtension previous = extensions.peekLast();
        if (previous != null) {
          previous.setNext(extension);
          if (previous.getNext() != extension) {
            throw new AssertionError("Illegal next resolver got, current resolver class is " + previous.getClass().getName());
          }
        }
        extensions.add(extension);
      }
      projectResolverChain = extensions.peekFirst();

      GradleProjectResolverExtension resolverExtension = projectResolverChain;
      assert resolverExtension != null;
      while (resolverExtension.getNext() != null) {
        resolverExtension = resolverExtension.getNext();
      }
      if (!(resolverExtension instanceof BaseGradleProjectResolverExtension)) {
        throw new AssertionError("Illegal last resolver got of class " + resolverExtension.getClass().getName());
      }
    }
    else {
      projectResolverChain = new BaseGradleProjectResolverExtension();
    }

    return projectResolverChain;
  }
}


This adjustable oblong viola case offers the same benefits of the Bobelock fixed size B2005 but with the option of using the patented adjustable slide to fit any size from 15" to 17" with the same assurance that you have come to expect from Bobelock Cases: durability, protection and style with plenty of choices to satisfy everyone. Built using a combination layered plywood and styrofoam core case construction in the traditional oblong shape, the B2005 adjustable viola case is covered with a durable black nyloncanvas zippered cover and outside music pocket. Includes shoulder strap, hygrometer, humistat and instrument blanket. Four bowholders.


Google & Facebook ad traffic is 90% useless.
I work on You Exec, a service that providers professional insights to our users. Recently, I have been using Fullstory to view how our visitors behave on our landing page - and boy does it make a huge difference when that visitor comes from Google or Facebook ads versus any other source. I've concluded 90% of Google's and Facebook's traffic is garbage.
Regular visitors from an email that I send out, or from a mailing list, reddit, forums, among others - actually read the content on the landing page. You can see the mouse move across the text as they read in some instances. You can see how they scroll, the breaks they take to digest. Though the clip is 3X faster than usual, below you can see how the scrolling and mouse movements make sense.
This visitor is very different - it feels like its a paid slave somewhere, or a bot that has clumsy intelligence, or a person that does not read. The mouse rarely moves, it does scroll - though mostly in one direction, and the pace is as if the visitor is not reading the content. Mobile users just scroll and scroll until the bottom and then they leave.
As a result I have stopped all my Google and Facebook campaigns and have focused on growing the service more organically via social sharing and friends. Has anyone else experienced this as well? I'd be happy to share videos or more details, but the difference is clearly noticeable. I'd be interested to see if Fullstory has any high-level analysis of this or if they can verify this behavior.
The videos above have been speed-up 3X so you can get the picture quickly. After watching 100s of sessions, I have to admit, about one out of 10 visitors from Google & Facebook seem legit.
Due to the nature of You Exec's service - we have a very specific click-through and conversion rates. For example, when I use a professional mailing list to advertise You Exec, I get about X% CTR from all open emails, and Y% conversion. When I use either Google or Facebook I get much lower numbers - about 80% to 90% worst - almost an entire order of magnitude worst. Even when I request impressions for a super targeted audience or keyword set. I'm not a conspiracist, but overall I feel they present my ads to "active" and "non-active" users in such a way that the combined outcome of clicks is still the industry standard. Meaning they track and separate their most active users and make it such that using CPC is always slightly better than cost per impression - even if you're giving away free diamonds away CPC will always be better than paying for impressions.
I am not sure if this is true, but does anyone else experience very, very, very, different click-through and conversion rates on Google and Facebook relative to other organic means?
I have no affiliation with Fullstory, Google, or Facebook.
Insights to improve your career.


text:
Home World Donald Trump will be able to return to Facebook and Instagram, announces...
Donald Trump will be able to return to Facebook and Instagram, announces Meta
He will be able to make a comeback. Meta announced on Wednesday that it will end the suspension of Donald Trump from Facebook and Instagram, two years after banning him following the Jan. 6, 2021, Capitol assault.
🔴Meta will reinstate Donald Trump on Facebook and Instagram in the coming weeks after a two-year suspension.https://t.co/Jt7gNeR81k
— Philippe Berry (@ptiberry) January 25, 2023
Access to this content has been blocked to respect your choice of consent
Clicking on " I ACCEPT », you accept the deposit of cookies by external services and will thus have access to the content of our partners
And to better remunerate 20 Minutes, do not hesitate to accept all cookies, even for one day only, via our "I accept for today" button in the banner below.
More information on the Cookie Management Policy page.
"The public needs to be able to hear what politicians are saying so they can make informed choices," Nick Clegg, Meta's head of international affairs, said in a statement.
Meta claims to have put in place "safeguards" with "increased sanctions" which will apply to "any public figure reinstated after a suspension linked to civil unrest". If he violates Facebook's charge, his posts will be deleted and he could be suspended for a period ranging from one month to two years, "depending on the seriousness of the violation".
Temporary exclusive with Truth Social
Donald Trump reacted on the Truth Social network, insisting that he should never have been deplatformed: "Such a thing should never again happen to a sitting president, or to anyone else who does not deserve punishment! He also assures that the future of his Truth Social network is "limitless".
It remains to be seen when he will return to Facebook or Twitter. According to documents submitted to stock market authorities, Donald Trump signed an agreement giving Truth Social a six-hour exclusivity for all social media posts. This agreement runs until June 21, 2023, but it can, in theory, be terminated by Donald Trump "in a case of force majeure". Whatever happens, he should be able to return for the launch of the Republican primary this summer.
Previous articleSpain: a sacristan killed and a priest injured in a stabbing attack, announce the Spanish authorities
Next articleSpain-Norway: all or nothing
Prakash Raj once again came out in support of 'Pathan', he said this by tweeting about Shahrukh Khan January 26, 2023
Bitcoin exchange Coinbase is fined millions by DNB January 26, 2023
Binance's stablecoin loses $2 billion in market cap January 26, 2023
USA and Germany decide to send tanks to Ukraine January 26, 2023
"Free agency could be very difficult" January 26, 2023
Bagnaia and Bautista, numbers of champions
Honey Singh was seen lost in the eyes of his girlfriend Tina
Total superiority of Real Madrid in the junior tournament at the Audi Dome


Come see us for Nerf Bars, Running Boards, and the all new Nerf Board.
Select a Make/Model and click on Check Availability to see what is available.
If you are looking for Nerf Bars, Running Boards or the all new Nerf Board, come to Rhino Linings of the Nebraska Panhandle, your distributor for Willmore Manufacturing. Made from 3 inch 304 stainless steel tubing and polished to a mirror finish, Willmore Nerf bars have step pads attached to the top of the tube but not indented into the tube for maximum strength.
If you would like more of a step, take a look at the TC series. 1 1/2 inch 304 stainless steel tube with an extruded aluminum deck in bright, anodised, or black.
Or dare to make a statement with the all new Nerf Board. Made from 3 inch stainless steel tube with an attached aluminum deck. It installs in minutes just like the Nerf Bar.
Never worry about slipping through again when you step up to the Original Nerf Board by Willmore Manufacturing.
Click here for more pictures courtesy of Willmore Manufacturing.
Stop by and visit with us about Willmore Running boards.


text:
our previous work
Having worked in the production industry for many years we have a wealth of experience and a diverse range of projects between us. Below you will see examples of our previous work both as individual freelancers and as a partnership.
digital & online
HSBC have always had great success on their university visits and maintain a huge pride in their graduate brand. For their attraction materials they commissioned this animation, which was used in their campus presentations and featured on their graduate career website. Rachel worked closely with the creative team to ensure the graduate brand stayed strong throughout and this short animation is a great example of how simple motion graphics can be very effective – both in terms of creativity and costs.
A 'McJob' has long been deemed a bad career choice. Rather than ignore this, McDonald's tackled it through an online petition to remove the word McJob from the dictionary. This video spear-headed the petition campaign and Rachel managed production from the development of initial scamps, through to a complex post-production process, and overseeing the launch. As well as appearing as part of a huge internet advertising campaign, the video also held a prime spot on Piccadilly's famous billboard for over three months.
EYU is a key element in Ernst & Young's learning and development strategy and is designed to advance, nurture and encourage the careers of their employees. This scribe animation explains the reason behind EYU and demonstrates many opportunities to explore and progress within the firm. Proving that when people's aspirations align with EY's global strategic outlook, the outcome is both powerful and successful for the firm, teams and individuals.
Greggs
We believe there is no better way to welcome new people to your company and its culture than through video communication. For Greggs, the whole company was brought to life by filming behind the scenes in key business areas and meeting a lot of interesting characters up and down the country – all giving an insight into what new joiners can expect. Using talking heads and narrative from the Chief Executive we stitched together this multi-chaptered DVD designed as a key part of their induction programme.
Her Majesty's Prison Service
HMPS wanted show potential employees what life "on the inside" is really like – which is often very different to what is perceived. We filmed prison officers from many backgrounds who shared their experiences and offered good advice to candidates. Rachel worked closely with the Prison Service staff to ensure all safety and security procedures were adhered to, respect was shown to prisoners and that the film crew were kept safe. The resulting DVD was part of the induction pack and also available online.
Lewin Hall works closely with Scotiabank on their video communications. Scotiabank are strong believers in the power of film and video to convey their intended message which gives us a great working relationship. Examples of our video projects for Scotiabank range from induction materials to employee surveys and from training videos through to company vodcasts. Our latest film projects include a training video for all offices across Europe and Asia plus a relocation video for the London office.
While heading up the video department at Barkers, Rachel produced talking head profiles for the Balfour Beatty graduate recruitment website. All of the graduates featured were based in remote locations all over the UK so to keep within budget everyone was brought to London to film in a studio. They were filmed and edited in a style to match the rest of the attraction materials and Rachel was responsible for overseeing this process. She also managed the studio set-up, all logistics, client liaison and editing of the content.
British Sugar
Shot on location in East Anglia, we had great access to a state-of-the-art sugar processing plant and its many by-product facilities. The challenge came in having to capture a great deal of footage for numerous online video profiles and film in many areas across a vast site. Despite being a physically exhausting the weather was on our side, and in this example we see how the huge climb to the top of the vat of pure sugar syrup was worth it in the end!
Buro Happold
As Video Producer at Barkers, Rachel was asked to produce these studio-based, online video profiles. To add interest and in line with the other attraction materials, we projected images of various assignments illustrating Buro Happold's global work onto the studio wall. We created a montage of the interviews in a shoot-the-shoot style film to sell the company as a forward-thinking, dynamic engineering company. A great example proving that talking head interviews on your website don't have to be dull!
Dresdner Kleinwort
Rachel produced video productions for DRKW over three years - from global advertising to recruitment campaigns. This video is from the last global project she undertook for them, which saw her travelling across three continents in just over a week. Filming in London, Tokyo, New York and Frankfurt, she coordinated the entire project from initial briefings, logistics and booking international crews working in PAL resolution - through to managing editorial content, quality control and delivering output.
First Great Western
Rachel worked closely with First Great Western to show a better understanding of careers available at the company by producing this online video solution, including talking head interviews. The idea of the film was to show a passenger journey from London to Plymouth, meeting key personnel on the way. Pre-production was a huge logistical operation, with detailed recces, risk assessments, casting of staff and producing a complex schedule bringing everything together.
Siemens' Commercial Academy was set up in 2005 to develop fresh talent for the future. Rachel produced, filmed and created a DVD which demonstrated through employee testimonials, how the Academy provides the same professional qualifications that higher education offers, but with a full-time salary. It was then circulated to schools and Careers Services showing how the Academy has all the benefits of university - without the debt! The scheme is very popular and this DVD proved a great way to demonstrate its success.
World Duty Free
This short video featuring Jack Black was produced to promote the run-up to World Duty Free's Christmas promotion. We had a very tight client deadline to work to, but managed to turn this project around in under five hours from start to finish.
Continental Drifters – an Open Mike Production for BBC4
Exploring the history of the road movie, Rich Hall's documentary aired to 5 star reviews. Karen worked as Associate Producer, working out of the office in Montana. She was responsible for script content, all location booking including highways, Mount Rushmore, Montana railways and Sturgis. Also moving vehicle set-ups and securing interviews.
Rich Hall's The Dirty South – an Open Mike production
Broadcast in July 2010, receiving rave reviews and an RTS nomination. An Open Mike production for BBC Four, Karen was Associate Producer on this documentary. Karen worked hard to secure two vital interviews - George Klein, (Elvis' best friend), and Reverend Samuel Kyles - famous civil rights leader. Karen was responsible for finding all locations and getting clearance, including Sun Studios, a cotton field (in November!), The National Civil Rights Museum, Shiloh National Forest as well as hiring special vehicles.
Rich Hall's How the West Was Lost
An Open Mike Production for BBC Four in 2008. Rich Hall looks at how the most quintessentially American film genre, the Western, came to be killed off. Filmed on location in Tombstone, Arizona, Wyoming and Montana, Karen was responsible for the set-up of the entire shoot. Responsibilities included sourcing locations, researching script, booking and hiring crew, plus booking hotels, cars and set vehicles. Karen worked closely with the Tombstone Chamber of Commerce.
Election Special – an Open Mike Production for BBC2
A 90-minute special, written and performed by Rich Hall and Mike Wilmot for BBC2. Working closely with National Forestry and Federal Land Karen coordinated all stunt and ammunition sequences. Karen has a strong, ongoing relationship with the Montanan film commission.
Lee Evans Live at Wembley
Karen was Production Coordinator for this - one of the first comedy arena gigs recorded live for DVD and later for TV. Karen was responsible for coordinating rehearsals and choreographing a 100-strong Welsh voice choir as well as booking cars, accommodation and acting as PA to the Producers and Lee.
Rich Hall's Cattle Drive
A six-part series for BBC Four produced by Open Mike Productions. Karen researched this project which included securing the Longhorn farm location in Wales liaising with artists, booking locations.
Cookie Policy | Terms | Copyright Lewin Hall 2012. All rights reserved.
web design by JC
USA: 1 (406) 223 9396
Unfortunately we can't let you play these videos here as they hold commercial licences - but we can assure you they are excellent – so please contact us if you would like to see them!


text:
Top Eight Active players who scored magnificent 5 goals in a single game
It's rare for a player to score hat-tricks, and of course even rarer for them to score a quadruple (4 goals in a game) or even a quintuple (5 goals ) in a competitive game. Soccer games in modern times. However, an elite group of players have scored 5 goals in a game in recent years.
21 hours ago ago
Dead Bodies That Refused to Decay
1. Holy person Betina Zita Holy person Zita was loved during her life basically for being an exceptionally pleasant woman whom everybody truly enjoyed. A kind of religion grew up around a large number of her demise in the year 1272. Over 300 years after the fact, her body was uncovered and viewed as not to have rotted.
MaMkhize's R25m La Lucia chateau has a display area for her 60 vehicles
Source:Google The size and opulance of the La Lucia chateau of Shauwn Mkhize, prominently known as MaMkhize, has been compared to a mall. Investigate… Money manager and Royal AM proprietor Shauwn "MaMkhize" Mkhize showed her La Lucia manor interestingly on her unscripted television show Kwa Mam'Mkhize on Mzansi Magic last year.
Zungu on his way to Soweto
The Bafana Bafana Central middlefield is on his way out of the french league 2 outfit. Bongani Zungu was once linked with a move to la liga, however the move didn't pull through. After the la liga deal failed to materialize Zungu was then asked by his idol Steven Gerald to join the Scottish giants, Rangers on loan.
R&B Mansions: Chris Brown, Usher, The Weeknd, Alicia Keys & More - PICS
These are the mansions that some of your favourite singers call home. THE WEEKND - $70million The mansion is located in Bel-Air, in the Los Angeles area. Standing at 3300 square metres, this massive home boasts a home gym, a movie theatre and a waterfall infinity pool looking out to the gorgeous Bel-Air Country Club.
Zimbabwean socialite's wedding graced by Davido became the talk of the town
NIGERIAN-American producer and singer David Adedeji Adeleke popularly known just as Davido, landed in Harare to attend the lavish wedding of Zimbabwean fashionista lady Danielle Simba Allen, who wed Davido's friend Ego. The wedding was a follow-up to an engagement that was held at a party last year that was held in Las Vegas USA.
[Opinion] This is La Liga's second best team so far this season.
Source: https://twitter.com/atletienglish/status/1483423021679456260?s=20 La Liga houses the most "deadliest" teams to ever exist. Not every team can be an Alpha since there can only be one. This team is not the best of the best compared to Real Madrid. In my opinion, the runner-up(number 2) team is Atletico Madrid.
Messi scores his 100th goal on this day in 2010
MESSI DOING MESSY THINGS Lionel Messi is regarded as one of the best players to have played the beautiful game. On 16th January 2010, Lionel Messi scored 100 goals for his club. It's fair to say, the rest is history. Link: https://twitter.com/brfootball/status/1482701015300382722?s=21
Spanish La Liga Table Before Weekend Games | Fixtures Included
The Spanish La Liga continues today until Monday as normal, but many Spanish football clubs will be missing their key players who went to represent their respective African nations at the AFCON 2022 that is currently being held in Cameroon. Real Madrid and FC Barcelona will be in action today, as they stand far apart from each other in the log standings.
[Opinion] This is La Liga's best team so far this season.
Source: https://twitter.com/realmadriden/status/1483473003639820288?s=20 La Liga houses the most "deadliest" teams to ever exist. Among these best teams, there is always going to be an alpha. In my opinion that Alpha is Real Madrid. In La Liga, Real Madrid is currently in first place.
Dead Corpses That Do Not Rot |See Pictures
1. Blessed individual Betina Zita Blessed individual Zita was cherished during her life fundamentally for being an incredibly lovely lady whom everyone genuinely delighted in. A sort of religion grew up around an enormous number of her downfall in the year 1272. More than 300 years sometime later, her body was uncovered and considered to be not to have spoiled. Do whatever it takes not to trust it? Go witness firsthand: Her body (which dried out and ended up being essentially preserved since being uncovered)
Mzansi's celebrities who are suffering from mental illness.
Let us start with La sizwe. In April 2021 La sizwe well known for his crazy YouTube skits took to Twitter to let people know that he was not coping with the national lockdown saying that he was officially losing his mind. He said in a Twitt, I can't take it anymore, I am officially losing my mind, this lockdown is really causing my anxiety to peak, I feel so disconnected from the world and I feel so isolated, I am really praying for this pandemic to come to an end as it is messing up with my mental health, I genuinely feel like crying.
Messi La Liga insane stats.
Lionel Andrés Messi, also known as Leo Messi, is an Argentine professional footballer who plays as a forward for Ligue 1 club Paris Saint-Germain and captains the Argentina national team. He's is born In 24 June 1987 which made to be 34 years. He started his career in 2004 when he was 13 years old and that's when he started what he does best.
RnB star lashes out at fan who mistakes his identity for Usher
Police were called to a Las Vegas inn within the early hours of Jan. 4 after Jason Derulo purportedly got into a battle with two individuals exterior of a club. Jason Derulo got into a battle exterior of a club at the ARIA Lodging and Casino in Las Vegas, police tell E!
Vacation and Travel: 2022 list of must-dos
La dolce vita: Why Sicily ought to be on your 2022 list of must-dos picture the ideal extravagance occasion, and what do you see? Chances are, on the off chance that you are a solace looking for the explorer, it is quiet days spent lounging in brilliant daylight by a flickering endless pool, and refreshing nights spent unwinding in your own private jacuzzi with a glass of wine, as the sun sets over the Mediterranean.
She Murdered Her Father For The Sake Of Love
US: The New York Post released a story about Sierra Halseth, 16 and boyfriend Aaron Guerrero, 18 that have been charged with the gruesome murder of Halseth's father, Daniel Halseth, 45 at his home in Las Vegas in April. Both have pleaded not guilty, Metro reported.
Xavi Tells Dembele To Stick With Barcelona
MADRID - Xavi Hernandez is as yet confident Ousmane Dembele will choose to remain at Barcelona, demanding the Frenchman would not be more joyful elsewhere. Dembele's agreement lapses in the late spring and another arrangement is yet to be concurred, with Barca's arranging power hampered by obligations of more than 1 billion euros ($1.13 billion).
Alvaro morata priority still Barca?
According to Sports Álvaro Morata's priority is still Barcelona. Reports from spain state that Barca boss Xavi is calling Morata constantly as he did with Ferrán. Juventus are not triggering a buy option clause in June from Atlético €40m but they are are not going to allow Morata to leave the club until they find a new top striker.
FC Barcelona Are Failing To Register The Newest Signing Ferran Torres
Credits: Transfer Futbol Fabrizio Romano FC Barcelona's new signing Ferran Torres is reportedly not yet registered in La Liga by his new club. FC Barcelona is currently in a massive debt which is stopping them from registering Torres. The Spanish giants were able to honour Manchester City's €65 million transfer fee for the 21-year-old Spanish striker.
Meet Top Mzansi Celebrities Couples That Will Make You Give Love a Second Chance
Celebrity Relationships are frequently portrayed as the punch line. For many A-listers, romances jump from fresh love to engagement or marriage in a matter of months, and they don't survive very long. But in reality, the movie La La Land has a lot more long-lasting love than you may expect..


text:
IMK-IFU Institute of Meteorology and Climate Research - Atmospheric Environmental Research
Land Use Change &
Climate Research Group
HILDA+
© Joanna Raymond
Joanna Raymond
Joanna Raymond joined the Land Use Change and Climate Research Group as a Postdoctoral Researcher in November 2022. She has an interdisciplinary background, having received an MSci in Natural Sciences (Physics and Maths) from the University of Nottingham and has recently completed a PhD in agrometeorology at the University of East Anglia. Working with plant breeders and meteorologists, Joanna used statistical modelling to quantify how changes in climate and genetics have affected UK cereal crops. Joanna's research interests encompass a range of human-environment interactions, in particular how we can feed the growing global population in the context of a rapidly changing climate whilst encouraging biodiversity and minimising our environmental and climate impact.
Email: joanna.raymond@kit.edu
Privacy policy Legals Datenschutzerklärung Impressum RSS News Feed


I find your style, intellect and reasoning a wonderful triumph for the One True Church. There are too many eloquent Chuck Misslers et al out there with their charismatic charm and evil intent and like the serpent himself, they are ready to lead souls astray. It is only with your forthright reasoning and explanations that I find confidence in my Catholic Faith once again.
When Jesus cast out evil spirits there were those who said He was in league with bielzebub. I expect some of the followers actually believed those liars. So too today with the weirdos and worse who attack us and claim all sorts of personal revelation of scripture.
I want to be able to defend my faith and by following your lead, and with utmost confidence with your demonstration of the Truth, which when studied is without fault, I am gaining more and more from it every time I switch on.
I thank the anti-catholics for coming here and ranting their rhetoric because only then can you answer the ignorant and bigoted arguements with clarity that educates me to attempt much of the same.
Thank you Father, thank you Father Joe, you are without doubt worthy to be called Father and I will happily do so because you and I both know what that title means. Let the blind and deaf continue in their darkness and be deceived if that's what they arrogantly and ignornatly choose to do.
Father, I do not find your replies are rude.. You speak the truth and it MUST be spoken and lived at ALL TIMES. Not just when it might make someone "feel good"… We dont' always like the truth but , the truth is the truth and it usually hurts.
I kind of feel sad looking at how you, our priests and our faith are being attacked by some and you having to get involved in it but it is up to you and us lay people to defend our faith. If we do not no one will..
As for calling priests "father" it is right and I regard all priests as my spiritual fathers.
Do not you realize that it is impossible for fundamentalists (Bible Alone people) to solve honest disagreements between Christians? Jesus never meant for the bible to be the only guide for the implementation of the mystery of redemption. The church began without Scriptures, and god gave us The Scriptures through the church. This is why you cannot separate Scripture from the Church. Does not the Apostle Paul tell you that "the church is the bulwark of truth?
Without the apostolic Authority of the Catholic Church you would not even have the New Testament Bible, and it is by this authority that honest disagreements among Christians are resolved. The "bible alone" by the design of the Holy Spirit is not enough to bring about Christian unity.


text:
WLYN is a brokered time ethnic radio station in the Boston market. The station is licensed to Lynn, Massachusetts, and is owned by Multicultural Broadcasting. Its programming is broadcast on 1360 kHz on the AM band.  WLYN had broadcast in AM Stereo until the end of 2006.

WLYN first signed on the air on December 11, 1947 as a daytime-only station.  It operated at 500 watts, and the transmitter was located near the Fox Hill Bridge ("Lynn's New Radio" 15). The opening was covered by the city's two local newspapers, the Lynn Daily Evening Item and the Lynn Telegram-News.  The new station's president was A. (Avigdor) M. "Vic" Morgan, a veteran broadcaster who had been involved with mechanical television in TV's formative years; he had been the general manager of the Shortwave & Television Company in Boston in the early 1930s.. Among the air-staff were greater Boston radio veterans like Ned French and Raymond Knight.  In charge of women's programming as well as public affairs and educational programs was Dorothy Rich; Mrs. Rich was also the radio director at Endicott Junior College in Beverly, Massachusetts ("Station WLYN," 21).

The station was sold on March 3, 1950 to Brookline, Massachusetts businessman Theodore "Ted" Feinstein. (Feinstein also would own other smaller market stations, including WNBP in Newburyport and WTSA in Brattleboro, Vermont.)  For many years, WLYN served the North Shore with local programming, local news, local high school sports, and talk shows that focused on local issues.  WLYN played mainly popular music, and in the 1950s and 1960s, it continued to employ well-known announcers who had worked at other greater Boston area stations.  They included John "Jack" Chadderton, Hank Forbes, Chris Clausen, talk host Morgan Baker (formerly of WEEI in Boston) and Johnny Towne.  Later, WLYN switched to nostalgia and big-band music, hiring well-known veteran broadcasters like Bill Marlowe (Buchanan, 1974, 8). For a brief period of time in the mid-1970s, the station also experimented with country music, but this was unsuccessful (McLaughlin, A6).

In 1948, WLYN's president A.M. Morgan also put an FM station on the air; WLYN-FM used the 101.7 frequency (Broadcasting Yearbook, 161). For many years, it simulcast WLYN during the day and had its own programming after the AM signed off at sunset.  In the early 1970s, responding to an influx of Spanish-speaking immigrants, both WLYN and WLYN-FM began offering an hour of programming in Spanish each Sunday.

By the mid-1970s, WLYN-FM had begun broadcasting Greek and Italian ethnic programming in the midday and late evening hours, with drive times still simulcast with the AM. In 1981, WLYN-FM began broadcasting a nighttime block of "new wave" rock music which eventually became a 24/7 modern rock format in 1982 when the midday ethnic programs were moved to the AM side. In February 1983, WLYN-FM was sold to Stephen Mindich, owner of the Boston Phoenix, and in early April it was on the air under new call letters—WFNX; the new station retained for the most part the modern-rock format that had been launched by the previous owners, and subsequently expanded upon it. (101.7 is now WBWL.)

Since the early 1980s, WLYN has continued to broadcast ethnic programming, and now broadcasts 24 hours a day, with reduced nighttime power.

References

Broadcasting Yearbook, 1952 edition, p. 161.
Buchanan, William.  "Music Spells Food of Love and Life When WLYN's Bill Marlowe is on the Air."  Boston Globe, February 3, 1974, p. 8.
Buchanan, William.  "Remember When Disc Jockeys Were Celebrities?"  Boston Globe, June 2, 1972, p. 35.
"Lynn's New Radio Outlet Welcomed to Air Today."  Lynn (MA) Daily Evening Item, December 11, 1947, p. 15.
McLaughlin, Jeff.  "Welcome Back Country."  Boston Globe, September 13, 1979, p. A6.
McLean, Robert.  "Takeover in the Night."  Boston Globe, January 24, 1979, p. 31.
"Station WLYN Goes On the Air for First Time."  Lynn (MA) Telegram-News, December 11, 1947, p. 21.

External links

LYN
Radio stations established in 1947
Lynn, Massachusetts
Mass media in Essex County, Massachusetts
1947 establishments in Massachusetts
Multicultural Broadcasting stations

redpajama_set_name: RedPajamaWikipedia