There are 227 rules of conduct for Theravada Buddhist monks, some them very minor, such as not having your robe washed by a nun unrelated to you, or accepting a rug made of black wool. (The Buddha on his death asked the minor rules to be relaxed; unfortunately, no one could figure out which rules were minor and which major, so nothing was changed).
Basically, ordaining as a monk means giving up life as an "ordinary" person, or putting away personal desire and personal comfort.
So it came as something of a surprise to find on the Bangkok subway that monks are a preferred class to whom healthy, "ordinary" persons should relinquish their seats. Unless the monk is ill, elderly, or otherwise incapacitated, I would assume that he should not be sitting while others stand and that should he need to sit the floor would suffice.
As a result of my post, which I linked to the Buddhist forum e-sangha (http://www.lioncity.net/buddhism/index.php?showtopic=85368), I seem to find myself regarded as something of a boor, unable to appreciate the reverence of the Thais, expressions of respect for the sangha, or the challenges of the monastic life.
Having spent twelve months of the past two years studying and living among monastics in Nepal, my impression is that except perhaps for having to share living quarters, the life of monks is not especially demanding. Rooms and meals are provided, sponsors drop by now and then with offerings of clothing, cash, and other goods; if you're a painter, you spend the day painting, if a shedra student then studying. Perhaps the most onerous "duty" are the frequent pujas, sitting and chanting for long hours, sometimes several days in a row. Of the monks I met and those I associated with, it seems I sat more regular mediation and read more books about Buddhism and philosophy.
I have much less direct knowledge of Thai monks, even though I've been traveling to Thailand for many years. I used to work in Bangkok and was on this visit attending a Thai friend's wedding. I don't claim expert knowledge on Thai culture, but neither am I complete novice. To even the newest visitor, though, it is quite obvious that Thais express deference for the sangha; it is equally clear that they are devoted to (or complicit through their silence in empowering) a cult of royalty, and that they put great stock in magical Buddhist amulets, divination, lucky numbers and the lottery. Many of the average Thai people I have met – professional, university educated – know less about Buddhist philosophy and history than this long-nosed farang. The Thai expression of respect for the sangha that some so admire may not be informed by anything more than tradition in the best case, but selfish desire to earn merit in the worst. As Gensei has pointed out, it's not really about the monk, but what the monk represents to the person engaged in "respecting" him. And if in fact Thais are somehow exceptional in showing respect for the sangha, why do they need to be reminded by the transit authority about something as simple as giving up a seat?
Respect, as we have all learned, is not something given, but something earned. Simply putting on a robe in a society like Thailand, where the majority of males put on robes at some time in their lives, doesn't seem to be an act meriting more than minimal respect, a nod of approval for making the decision to try something new, to explore a path that might lead to a new way of life or at least a new way of looking at life, the kind of respect we might offer in North America or Europe to someone for entering university.
Of the posters to the discussion, Tex seems to have the most sensible approach, that we stand when we can that others in need may sit. Whether or not the person is a monastic should have no bearing in the equation. Unless, of course, you're driving a pick-up like forestmat, in which case you can carry a bed-full of monks without displacing anyone.
I think you're misrepresenting what I said, slightly. They are respecting the intention and determination of taking up the path of awakening. The monastic sangha (indicated by the robe and the bowl) is the vehicle for the Buddhadharma in the world. They're responsible for that maintenance. So they're accorded respect in society.
Whether or not that creates the most ideal standards for practice, I don't know. In any particular set of circumstances, there are probably wonderful monks and complete waste of breathable air monks.
Speaking as a monk who's life isn't very difficult, I'm a little sick of people complaining that monk's don't have it so tough. The next time I have some whiny American Buddhist who's had a rough day with his kids come and tell me that I've got it easy, I may end breaking a precept. I wake up every morning alone, I go to bed every night alone. I've been doing that for ten years. I'll be doing it for a lot longer than that. Is that anyone's fault but my own? No. But most people certainly wouldn't live the way I do, even as easy as I've got it. They'd much rather have their terrible wives, kids, careers, bills, televisions, couches, etc. etc. etc. because at least that way they can sit around and think about how tough it is for them to get out of bed every morning.
Unless you live in Darfur or some other really terrible place like that, I think no one has the right to say somebody else hasn't got it that tough.
Maybe its just that humans tend to want what they don't have - the monk companionship, the couple solitude. Tough is what our choices have left us with; easy is what we want (or imagine we want).
Which is what I usually say when people ask, in regard to Mutsumi and I not having offspring, if I don't like kids. I never used the TV analogy, though.


text:
Premier League transfer news and rumours
Everton Transfer News & Rumours
Everton linked with midfielder and defender
Roberto adding some international flavor?
By Calvin@Mr_Faded_Glory Aug 8, 2015, 9:20pm BST
Share All sharing options for: Everton linked with midfielder and defender
Martin Rose/Getty Images
Roberto Martinez has come out and said that he would like to add another three players before the transfer window shuts at the end of this month, identifying a central defender, a playmaker and a striker as the positions of need.
Now Everton are being linked with Swiss midfielder Xherdan Shaqiri who has been looking to get out of Inter Milan. Former Manchester City manager Roberto Mancini is now in charge at San Siro and has been unimpressed by the player who came over from Bayern Munich in the January transfer window.
Shaqiri was previously linked with Schalke in Germany and Stoke City in the Premier League earlier this summer. Inter were looking to cut their losses on the player with a £12m deal from Stoke, but the 23-year-old rejected the transfer. Now the Italian side are talking to the Blues into taking Shaqiri on a season-long loan.
The Toffees are also rumored to be in talks with Argentinian outfit River Plate for central defender Ramiro Funes Mori. The 24-year-old has been a key part of the revival at the Buenos Aires-based club, and has been capped by the national side as well. Mori is left-footed and has played at left back as well, a position that Everton find themselves needing some cover on with Leighton Baines and Luke Garbutt both injured and Martinez prefering to play Bryan Oviedo further upfront.
RBM Roundtable: Reaction on Frank Lampard being sacked by Everton

redpajama_set_name: RedPajamaCommonCrawl


text:
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.

package com.intellij.openapi.vcs.changes;

import com.intellij.diagnostic.Activity;
import com.intellij.diagnostic.ActivityCategory;
import com.intellij.diagnostic.StartUpMeasurer;
import com.intellij.diagnostic.telemetry.TraceManager;
import com.intellij.icons.AllIcons;
import com.intellij.ide.CommonActionsManager;
import com.intellij.ide.TreeExpander;
import com.intellij.ide.dnd.DnDEvent;
import com.intellij.ide.ui.customization.CustomActionsSchema;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.openapi.components.StoragePathMacros;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.SimpleToolWindowPanel;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Factory;
import com.intellij.openapi.util.NlsContexts;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.registry.RegistryValue;
import com.intellij.openapi.util.registry.RegistryValueListener;
import com.intellij.openapi.vcs.*;
import com.intellij.openapi.vcs.changes.actions.diff.ShowDiffFromLocalChangesActionProvider;
import com.intellij.openapi.vcs.changes.shelf.ShelveChangesManager;
import com.intellij.openapi.vcs.changes.ui.*;
import com.intellij.openapi.vcs.impl.LineStatusTrackerSettingListener;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.openapi.wm.ex.ToolWindowManagerListener;
import com.intellij.problems.ProblemListener;
import com.intellij.ui.ExperimentalUI;
import com.intellij.ui.JBColor;
import com.intellij.ui.components.panels.Wrapper;
import com.intellij.ui.content.Content;
import com.intellij.util.ModalityUiUtil;
import com.intellij.util.ObjectUtils;
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread;
import com.intellij.util.concurrency.annotations.RequiresEdt;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.messages.MessageBusConnection;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
import com.intellij.util.ui.components.BorderLayoutPanel;
import com.intellij.util.ui.tree.TreeUtil;
import com.intellij.util.xmlb.annotations.Attribute;
import com.intellij.util.xmlb.annotations.XCollection;
import com.intellij.vcs.commit.ChangesViewCommitPanel;
import com.intellij.vcs.commit.ChangesViewCommitWorkflowHandler;
import com.intellij.vcs.commit.CommitModeManager;
import com.intellij.vcs.commit.PartialCommitChangeNodeDecorator;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
import org.jetbrains.annotations.CalledInAny;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.concurrency.Promise;

import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

import static com.intellij.openapi.actionSystem.EmptyAction.registerWithShortcutSet;
import static com.intellij.openapi.vcs.changes.ui.ChangesTree.DEFAULT_GROUPING_KEYS;
import static com.intellij.openapi.vcs.changes.ui.ChangesTree.GROUP_BY_ACTION_GROUP;
import static com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager.LOCAL_CHANGES;
import static com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager.getToolWindowFor;
import static com.intellij.openapi.vcs.changes.ui.ChangesViewContentManagerKt.isCommitToolWindowShown;
import static com.intellij.util.containers.ContainerUtil.set;
import static com.intellij.util.ui.JBUI.Panels.simplePanel;
import static java.util.Arrays.asList;
import static org.jetbrains.concurrency.Promises.cancelledPromise;

@State(
  name = "ChangesViewManager",
  storages = @Storage(StoragePathMacros.WORKSPACE_FILE)
)
public class ChangesViewManager implements ChangesViewEx,
                                           PersistentStateComponent<ChangesViewManager.State>,
                                           Disposable {

  private static final Tracer TRACER = TraceManager.INSTANCE.getTracer("vcs");
  private static final String CHANGES_VIEW_PREVIEW_SPLITTER_PROPORTION = "ChangesViewManager.DETAILS_SPLITTER_PROPORTION";

  @NotNull private final Project myProject;

  @NotNull private ChangesViewManager.State myState = new ChangesViewManager.State();

  @Nullable private ChangesViewPanel myChangesPanel;
  @Nullable private ChangesViewToolWindowPanel myToolWindowPanel;

  @NotNull
  public static ChangesViewI getInstance(@NotNull Project project) {
    return project.getService(ChangesViewI.class);
  }

  @NotNull
  public static ChangesViewEx getInstanceEx(@NotNull Project project) {
    return (ChangesViewEx)getInstance(project);
  }

  public ChangesViewManager(@NotNull Project project) {
    myProject = project;
    ChangesViewModifier.KEY.addChangeListener(project, this::resetViewImmediatelyAndRefreshLater, this);

    MessageBusConnection busConnection = project.getMessageBus().connect(this);
    busConnection.subscribe(ChangesViewWorkflowManager.TOPIC, () -> updateCommitWorkflow());
  }

  public static class ContentPreloader implements ChangesViewContentProvider.Preloader {
    @NotNull private final Project myProject;

    public ContentPreloader(@NotNull Project project) {
      myProject = project;
    }

    @Override
    public void preloadTabContent(@NotNull Content content) {
      content.putUserData(Content.TAB_DND_TARGET_KEY, new MyContentDnDTarget(myProject, content));
    }
  }

  final static class ContentPredicate implements Predicate<Project> {
    @Override
    public boolean test(Project project) {
      return ProjectLevelVcsManager.getInstance(project).hasActiveVcss() &&
             !CommitModeManager.getInstance(project).getCurrentCommitMode().hideLocalChangesTab();
    }
  }

  public static class DisplayNameSupplier implements Supplier<String> {
    private final @NotNull Project myProject;

    public DisplayNameSupplier(@NotNull Project project) {
      myProject = project;
    }

    @Override
    public String get() {
      return getLocalChangesToolWindowName(myProject);
    }
  }

  public static class ContentProvider implements ChangesViewContentProvider {
    @NotNull private final Project myProject;

    public ContentProvider(@NotNull Project project) {
      myProject = project;
    }

    @Override
    public void initTabContent(@NotNull Content content) {
      ChangesViewManager viewManager = (ChangesViewManager)getInstance(myProject);
      ChangesViewToolWindowPanel panel = viewManager.initToolWindowPanel();

      content.setHelpId(ChangesListView.HELP_ID);
      content.setComponent(panel);
      content.setPreferredFocusableComponent(panel.myView);
    }
  }

  @NotNull
  @RequiresEdt
  ChangesViewPanel initChangesPanel() {
    if (myChangesPanel == null) {
      Activity activity = StartUpMeasurer.startActivity("ChangesViewPanel initialization", ActivityCategory.DEFAULT);
      myChangesPanel = new ChangesViewPanel(myProject);
      activity.end();
    }
    return myChangesPanel;
  }

  @NotNull
  @RequiresEdt
  private ChangesViewToolWindowPanel initToolWindowPanel() {
    if (myToolWindowPanel == null) {
      Activity activity = StartUpMeasurer.startActivity("ChangesViewToolWindowPanel initialization", ActivityCategory.DEFAULT);

      // ChangesViewPanel is used for a singular ChangesViewToolWindowPanel instance. Cleanup is not needed.
      ChangesViewPanel changesViewPanel = initChangesPanel();
      ChangesViewToolWindowPanel panel = new ChangesViewToolWindowPanel(myProject, this, changesViewPanel);
      Disposer.register(this, panel);

      panel.updateCommitWorkflow();

      myToolWindowPanel = panel;
      Disposer.register(panel, () -> {
        // Content is removed from TW
        myChangesPanel = null;
        myToolWindowPanel = null;
      });

      activity.end();
    }
    return myToolWindowPanel;
  }

  @Override
  public void dispose() {
  }

  @NotNull
  @Override
  public ChangesViewManager.State getState() {
    return myState;
  }

  @Override
  public void loadState(@NotNull ChangesViewManager.State state) {
    myState = state;
    migrateShowFlattenSetting();
  }

  private void migrateShowFlattenSetting() {
    if (!myState.myShowFlatten) {
      myState.groupingKeys = Set.copyOf(DEFAULT_GROUPING_KEYS);
      myState.myShowFlatten = true;
    }
  }

  public static class State {
    /**
     * @deprecated Use {@link #groupingKeys} instead.
     */
    @Deprecated
    @SuppressWarnings("DeprecatedIsStillUsed")
    @Attribute("flattened_view")
    public boolean myShowFlatten = true;

    @XCollection
    public Set<String> groupingKeys = new HashSet<>();

    @Attribute("show_ignored")
    public boolean myShowIgnored;
  }

  @Override
  public Promise<?> promiseRefresh() {
    if (myToolWindowPanel == null) return cancelledPromise();
    return myToolWindowPanel.scheduleRefresh();
  }

  @Override
  public void scheduleRefresh() {
    promiseRefresh();
  }

  @Override
  public void selectFile(VirtualFile vFile) {
    if (myToolWindowPanel == null) return;
    myToolWindowPanel.selectFile(vFile);
  }

  @Override
  public void selectChanges(@NotNull List<? extends Change> changes) {
    if (myToolWindowPanel == null) return;
    myToolWindowPanel.selectChanges(changes);
  }

  @Override
  public void updateProgressText(@NlsContexts.Label String text, boolean isError) {
    if (myToolWindowPanel == null) return;
    myToolWindowPanel.updateProgressText(text, isError);
  }

  @Override
  public void setBusy(boolean b) {
    if (myToolWindowPanel == null) return;
    myToolWindowPanel.setBusy(b);
  }

  @Override
  public void setGrouping(@NotNull String groupingKey) {
    if (myToolWindowPanel == null) return;
    myToolWindowPanel.setGrouping(groupingKey);
  }

  private void updateCommitWorkflow() {
    if (myToolWindowPanel == null) return;
    myToolWindowPanel.updateCommitWorkflow();
  }

  @Override
  public void refreshImmediately() {
    if (myToolWindowPanel == null) return;
    myToolWindowPanel.scheduleRefreshNow();
  }

  @Override
  public boolean isAllowExcludeFromCommit() {
    if (myToolWindowPanel == null) return false;
    return myToolWindowPanel.isAllowExcludeFromCommit();
  }

  public static boolean isEditorPreview(@NotNull Project project) {
    return EditorTabDiffPreviewManager.getInstance(project).isEditorDiffPreviewAvailable();
  }

  public void closeEditorPreview(boolean onlyIfEmpty) {
    if (myToolWindowPanel == null) return;
    myToolWindowPanel.closeEditorPreview(onlyIfEmpty);
  }

  @Override
  public void resetViewImmediatelyAndRefreshLater() {
    if (myToolWindowPanel != null) {
      myToolWindowPanel.resetViewImmediatelyAndRefreshLater();
    }
  }

  public static final class ChangesViewToolWindowPanel extends SimpleToolWindowPanel implements Disposable {
    @NotNull private static final RegistryValue isToolbarHorizontalSetting = Registry.get("vcs.local.changes.toolbar.horizontal");
    @NotNull private static final RegistryValue isOpenEditorDiffPreviewWithSingleClick =
      Registry.get("show.diff.preview.as.editor.tab.with.single.click");

    @NotNull private final Project myProject;
    @NotNull private final ChangesViewManager myChangesViewManager;
    @NotNull private final VcsConfiguration myVcsConfiguration;

    @NotNull private final BorderLayoutPanel myMainPanel;
    @NotNull private final BorderLayoutPanel myContentPanel;
    @NotNull private final ChangesViewPanel myChangesPanel;
    @NotNull private final ChangesListView myView;

    @NotNull private final ChangesViewCommitPanelSplitter myCommitPanelSplitter;
    private ChangesViewDiffPreviewProcessor myEditorChangeProcessor;
    private ChangesViewDiffPreviewProcessor mySplitterChangeProcessor;
    private EditorTabPreview myEditorDiffPreview;
    private PreviewDiffSplitterComponent mySplitterDiffPreview;
    @NotNull private final Wrapper myProgressLabel = new Wrapper();

    @Nullable private ChangesViewCommitPanel myCommitPanel;
    @Nullable private ChangesViewCommitWorkflowHandler myCommitWorkflowHandler;

    private boolean myModelUpdateInProgress;

    private boolean myDisposed = false;

    private ChangesViewToolWindowPanel(@NotNull Project project,
                                       @NotNull ChangesViewManager changesViewManager,
                                       @NotNull ChangesViewPanel changesViewPanel) {
      super(false, true);
      myProject = project;
      myChangesViewManager = changesViewManager;
      myChangesPanel = changesViewPanel;

      MessageBusConnection busConnection = myProject.getMessageBus().connect(this);
      myVcsConfiguration = VcsConfiguration.getInstance(myProject);

      myView = myChangesPanel.getChangesView();
      myView.installPopupHandler((DefaultActionGroup)ActionManager.getInstance().getAction("ChangesViewPopupMenu"));
      myView.getGroupingSupport().setGroupingKeysOrSkip(myChangesViewManager.myState.groupingKeys);
      myView.addGroupingChangeListener(e -> {
        myChangesViewManager.myState.groupingKeys = myView.getGroupingSupport().getGroupingKeys();
        scheduleRefresh();
      });
      ChangesViewDnDSupport.install(myProject, myView, this);

      myChangesPanel.getToolbarActionGroup().addAll(createChangesToolbarActions(myView.getTreeExpander()));
      registerShortcuts(this);

      configureToolbars();
      isToolbarHorizontalSetting.addListener(new RegistryValueListener() {
        @Override
        public void afterValueChanged(@NotNull RegistryValue value) {
          configureToolbars();
        }
      }, this);

      myCommitPanelSplitter = new ChangesViewCommitPanelSplitter(myProject);
      Disposer.register(this, myCommitPanelSplitter);
      myCommitPanelSplitter.setFirstComponent(myChangesPanel);

      myContentPanel = new BorderLayoutPanel() {
        @Override
        public Dimension getMinimumSize() {
          return isMinimumSizeSet() || myChangesPanel.isToolbarHorizontal()
                 ? super.getMinimumSize()
                 : myChangesPanel.getToolbar().getComponent().getPreferredSize();
        }
      };
      myContentPanel.addToCenter(myCommitPanelSplitter);
      myMainPanel = simplePanel(myContentPanel);

      setDiffPreview();

      EditorTabDiffPreviewManager.getInstance(project).subscribeToPreviewVisibilityChange(this, this::setDiffPreview);
      isOpenEditorDiffPreviewWithSingleClick.addListener(new RegistryValueListener() {
        @Override
        public void afterValueChanged(@NotNull RegistryValue value) {
          if (myEditorDiffPreview != null) setDiffPreview();
        }
      }, this);

      setContent(myMainPanel.addToBottom(myProgressLabel));

      busConnection.subscribe(ToolWindowManagerListener.TOPIC, new ToolWindowManagerListener() {
        @Override
        public void stateChanged(@NotNull ToolWindowManager toolWindowManager) {
          setCommitSplitOrientation();
        }
      });

      busConnection.subscribe(RemoteRevisionsCache.REMOTE_VERSION_CHANGED, () -> scheduleRefresh());
      busConnection.subscribe(ProblemListener.TOPIC, new ProblemListener() {
        @Override
        public void problemsAppeared(@NotNull VirtualFile file) {
          refreshChangesViewNodeAsync(file);
        }

        @Override
        public void problemsDisappeared(@NotNull VirtualFile file) {
          refreshChangesViewNodeAsync(file);
        }
      });
      busConnection.subscribe(ChangeListListener.TOPIC, new MyChangeListListener());
      busConnection.subscribe(LineStatusTrackerSettingListener.TOPIC, () -> {
        if (myEditorChangeProcessor != null) myEditorChangeProcessor.fireDiffSettingsChanged();
        if (mySplitterChangeProcessor != null) mySplitterChangeProcessor.fireDiffSettingsChanged();
      });

      busConnection.subscribe(ChangesViewModifier.TOPIC, () -> scheduleRefresh());
      busConnection.subscribe(VcsManagedFilesHolder.TOPIC, () -> {
        ApplicationManager.getApplication().invokeLater(() -> {
          myView.repaint();
        });
      });

      scheduleRefresh();
      updatePreview(false);
    }

    @Override
    public void dispose() {
      myDisposed = true;
    }

    private void setDiffPreview() {
      if (myDisposed) return;

      boolean isEditorPreview = isEditorPreview(myProject);
      boolean hasSplitterPreview = !isCommitToolWindowShown(myProject);

      //noinspection DoubleNegation
      boolean needUpdatePreviews = isEditorPreview != (myEditorChangeProcessor != null) ||
                                   hasSplitterPreview != (mySplitterChangeProcessor != null);
      if (!needUpdatePreviews) return;

      if (myEditorChangeProcessor != null) Disposer.dispose(myEditorChangeProcessor);
      if (mySplitterChangeProcessor != null) Disposer.dispose(mySplitterChangeProcessor);

      if (isEditorPreview) {
        myEditorChangeProcessor = new ChangesViewDiffPreviewProcessor(myView, true);
        Disposer.register(this, myEditorChangeProcessor);
        myEditorDiffPreview = installEditorPreview(myEditorChangeProcessor, hasSplitterPreview);
      }
      else {
        myEditorChangeProcessor = null;
        myEditorDiffPreview = null;
      }

      if (hasSplitterPreview) {
        mySplitterChangeProcessor = new ChangesViewDiffPreviewProcessor(myView, false);
        Disposer.register(this, mySplitterChangeProcessor);
        mySplitterDiffPreview = installSplitterPreview(mySplitterChangeProcessor);
      }
      else {
        mySplitterChangeProcessor = null;
        mySplitterDiffPreview = null;
      }

      configureDiffPreview();
    }

    @NotNull
    private EditorTabPreview installEditorPreview(@NotNull ChangesViewDiffPreviewProcessor changeProcessor, boolean hasSplitterPreview) {
      return new SimpleTreeEditorDiffPreview(changeProcessor, myView, myContentPanel,
                                             isOpenEditorDiffPreviewWithSingleClick.asBoolean() && !hasSplitterPreview) {
        @Override
        public void returnFocusToTree() {
          ToolWindow toolWindow = getToolWindowFor(myProject, LOCAL_CHANGES);
          if (toolWindow != null) toolWindow.activate(null);
        }

        @Override
        public void updateDiffAction(@NotNull AnActionEvent e) {
          ShowDiffFromLocalChangesActionProvider.updateAvailability(e);
        }

        @Override
        protected String getCurrentName() {
          String changeName = changeProcessor.getCurrentChangeName();
          return changeName != null
                 ? VcsBundle.message("commit.editor.diff.preview.title", changeName)
                 : VcsBundle.message("commit.editor.diff.preview.empty.title");
        }

        @Override
        protected boolean skipPreviewUpdate() {
          if (super.skipPreviewUpdate()) return true;
          if (!myView.equals(IdeFocusManager.getInstance(myProject).getFocusOwner())) return true;
          if (!isPreviewOpen() && !isEditorPreviewAllowed()) return true;

          return myModelUpdateInProgress;
        }

        @Override
        protected boolean isPreviewOnDoubleClickAllowed() {
          return isCommitToolWindowShown(myProject) ? VcsApplicationSettings.getInstance().SHOW_EDITOR_PREVIEW_ON_DOUBLE_CLICK :
                 VcsApplicationSettings.getInstance().SHOW_DIFF_ON_DOUBLE_CLICK;
        }

        @Override
        protected boolean isPreviewOnEnterAllowed() {
          return isCommitToolWindowShown(myProject) ? VcsApplicationSettings.getInstance().SHOW_EDITOR_PREVIEW_ON_DOUBLE_CLICK :
                 VcsApplicationSettings.getInstance().SHOW_DIFF_ON_DOUBLE_CLICK;
        }
      };
    }

    @NotNull
    private PreviewDiffSplitterComponent installSplitterPreview(@NotNull ChangesViewDiffPreviewProcessor changeProcessor) {
      PreviewDiffSplitterComponent previewSplitter =
        new PreviewDiffSplitterComponent(changeProcessor, CHANGES_VIEW_PREVIEW_SPLITTER_PROPORTION);
      previewSplitter.setFirstComponent(myContentPanel);
      DiffPreview.setPreviewVisible(previewSplitter, myVcsConfiguration.LOCAL_CHANGES_DETAILS_PREVIEW_SHOWN);

      myView.addSelectionListener(() -> {
        boolean fromModelRefresh = myModelUpdateInProgress;
        invokeLater(() -> previewSplitter.updatePreview(fromModelRefresh));
      }, changeProcessor);

      myMainPanel.addToCenter(previewSplitter);
      Disposer.register(changeProcessor, () -> {
        if (Disposer.isDisposed(this)) return;
        myMainPanel.remove(previewSplitter);
        myMainPanel.addToCenter(myContentPanel);

        myMainPanel.revalidate();
        myMainPanel.repaint();
      });

      return previewSplitter;
    }

    private boolean isEditorPreviewAllowed() {
      return !isOpenEditorDiffPreviewWithSingleClick.asBoolean() || myVcsConfiguration.LOCAL_CHANGES_DETAILS_PREVIEW_SHOWN;
    }

    private void closeEditorPreview(boolean onlyIfEmpty) {
      if (myEditorDiffPreview == null) return;

      EditorTabPreview editorPreview = myEditorDiffPreview;

      if (onlyIfEmpty && editorPreview.hasContent()) return;
      editorPreview.closePreview();
    }

    private void updatePreview(boolean fromModelRefresh) {
      if (myEditorDiffPreview != null) {
        myEditorDiffPreview.updatePreview(fromModelRefresh);
      }
      if (mySplitterDiffPreview != null) {
        mySplitterDiffPreview.updatePreview(fromModelRefresh);
      }
    }

    public void updateCommitWorkflow() {
      if (myDisposed) return;

      ChangesViewCommitWorkflowHandler newWorkflowHandler = ChangesViewWorkflowManager.getInstance(myProject).getCommitWorkflowHandler();
      if (myCommitWorkflowHandler == newWorkflowHandler) return;

      if (newWorkflowHandler != null) {
        newWorkflowHandler.addActivityListener(() -> configureDiffPreview());

        ChangesViewCommitPanel newCommitPanel = (ChangesViewCommitPanel)newWorkflowHandler.getUi();
        newCommitPanel.registerRootComponent(this);
        myCommitPanelSplitter.setSecondComponent(newCommitPanel);

        myCommitWorkflowHandler = newWorkflowHandler;
        myCommitPanel = newCommitPanel;
      }
      else {
        myCommitPanelSplitter.setSecondComponent(null);

        myCommitWorkflowHandler = null;
        myCommitPanel = null;
      }

      configureDiffPreview();
      configureToolbars();
    }

    public boolean isAllowExcludeFromCommit() {
      return myCommitWorkflowHandler != null && myCommitWorkflowHandler.isActive();
    }

    private void configureDiffPreview() {
      if (myEditorChangeProcessor != null) {
        myEditorChangeProcessor.setAllowExcludeFromCommit(isAllowExcludeFromCommit());
      }
      if (mySplitterChangeProcessor != null) {
        mySplitterChangeProcessor.setAllowExcludeFromCommit(isAllowExcludeFromCommit());
      }
    }

    private void configureToolbars() {
      boolean isToolbarHorizontal = CommitModeManager.getInstance(myProject).getCurrentCommitMode().useCommitToolWindow() &&
                                    isToolbarHorizontalSetting.asBoolean();
      myChangesPanel.setToolbarHorizontal(isToolbarHorizontal);
      if (myCommitPanel != null) myCommitPanel.setToolbarHorizontal(isToolbarHorizontal);
    }

    private void setCommitSplitOrientation() {
      boolean hasPreviewPanel = myVcsConfiguration.LOCAL_CHANGES_DETAILS_PREVIEW_SHOWN && mySplitterDiffPreview != null;
      ToolWindow tw = getToolWindowFor(myProject, LOCAL_CHANGES);
      if (tw != null) {
        boolean toolwindowIsHorizontal = tw.getAnchor().isHorizontal();
        myCommitPanelSplitter.setOrientation(hasPreviewPanel || !toolwindowIsHorizontal);
      }
    }

    @NotNull
    private Function<ChangeNodeDecorator, ChangeNodeDecorator> getChangeDecoratorProvider() {
      return baseDecorator -> new PartialCommitChangeNodeDecorator(myProject, baseDecorator, () -> isAllowExcludeFromCommit());
    }

    @NotNull
    @Override
    public List<AnAction> getActions(boolean originalProvider) {
      return asList(myChangesPanel.getToolbarActionGroup().getChildren(null));
    }

    @Nullable
    @Override
    public Object getData(@NotNull String dataId) {
      Object data = super.getData(dataId);
      if (data != null) return data;
      if (EditorTabDiffPreviewManager.EDITOR_TAB_DIFF_PREVIEW.is(dataId)) {
        return myEditorDiffPreview;
      }
      // This makes COMMIT_WORKFLOW_HANDLER available anywhere in "Local Changes" - so commit executor actions are enabled.
      return myCommitPanel != null ? myCommitPanel.getDataFromProviders(dataId) : null;
    }

    private static void registerShortcuts(@NotNull JComponent component) {
      registerWithShortcutSet("ChangesView.Refresh", CommonShortcuts.getRerun(), component);
      registerWithShortcutSet("ChangesView.NewChangeList", CommonShortcuts.getNew(), component);
      registerWithShortcutSet("ChangesView.RemoveChangeList", CommonShortcuts.getDelete(), component);
      registerWithShortcutSet(IdeActions.MOVE_TO_ANOTHER_CHANGE_LIST, CommonShortcuts.getMove(), component);
    }

    @NotNull
    private List<AnAction> createChangesToolbarActions(@NotNull TreeExpander treeExpander) {
      List<AnAction> actions = new ArrayList<>();
      actions.add(CustomActionsSchema.getInstance().getCorrectedAction(ActionPlaces.CHANGES_VIEW_TOOLBAR));

      if (!ExperimentalUI.isNewUI()) {
        actions.add(Separator.getInstance());
      }

      DefaultActionGroup viewOptionsGroup =
        DefaultActionGroup.createPopupGroup(() -> VcsBundle.message("action.ChangesViewToolWindowPanel.text"));

      viewOptionsGroup.getTemplatePresentation().setIcon(AllIcons.Actions.Show);
      viewOptionsGroup.add(ActionManager.getInstance().getAction(GROUP_BY_ACTION_GROUP));
      viewOptionsGroup.add(new Separator(VcsBundle.message("action.vcs.log.show.separator")));
      viewOptionsGroup.add(new ToggleShowIgnoredAction());
      viewOptionsGroup.add(ActionManager.getInstance().getAction("ChangesView.ViewOptions"));

      actions.add(viewOptionsGroup);
      actions.add(CommonActionsManager.getInstance().createExpandAllHeaderAction(treeExpander, myView));
      actions.add(CommonActionsManager.getInstance().createCollapseAllAction(treeExpander, myView));
      actions.add(Separator.getInstance());
      actions.add(ActionManager.getInstance().getAction("ChangesView.SingleClickPreview"));

      return actions;
    }

    private void updateProgressComponent(@Nullable Factory<? extends JComponent> progress) {
      invokeLaterIfNeeded(() -> {
        if (myDisposed) return;
        JComponent component = progress != null ? progress.create() : null;
        myProgressLabel.setContent(component);
        myProgressLabel.setMinimumSize(JBUI.emptySize());
      });
    }

    public void updateProgressText(@NlsContexts.Label String text, boolean isError) {
      updateProgressComponent(createTextStatusFactory(text, isError));
    }

    public void setBusy(final boolean b) {
      invokeLaterIfNeeded(() -> myView.setPaintBusy(b));
    }

    public Promise<?> scheduleRefresh() {
      return scheduleRefreshWithDelay(100);
    }

    private final BackgroundRefresher<?> myBackgroundRefresher = new BackgroundRefresher<>(
      getClass().getSimpleName() + " refresh", this);

    @CalledInAny
    private Promise<?> scheduleRefreshWithDelay(int delayMillis) {
      setBusy(true);
      return myBackgroundRefresher.requestRefresh(delayMillis, () -> {
        refreshView();
        return null;
      }).then(result -> {
        setBusy(false);
        return null;
      });
    }

    private void scheduleRefreshNow() {
      scheduleRefreshWithDelay(0);
    }

    @RequiresBackgroundThread
    private void refreshView() {
      if (myDisposed || !myProject.isInitialized() || ApplicationManager.getApplication().isUnitTestMode()) return;

      Span span = TRACER.spanBuilder("changes-view-refresh-background").startSpan();
      try {
        ChangeListManagerImpl changeListManager = ChangeListManagerImpl.getInstanceImpl(myProject);
        List<LocalChangeList> changeLists = changeListManager.getChangeLists();
        List<FilePath> unversionedFiles = changeListManager.getUnversionedFilesPaths();

        boolean skipSingleDefaultChangeList = Registry.is("vcs.skip.single.default.changelist") ||
                                              !ChangeListManager.getInstance(myProject).areChangeListsEnabled();
        TreeModelBuilder treeModelBuilder = new TreeModelBuilder(myProject, myView.getGrouping())
          .setChangeLists(changeLists, skipSingleDefaultChangeList, getChangeDecoratorProvider())
          .setLocallyDeletedPaths(changeListManager.getDeletedFiles())
          .setModifiedWithoutEditing(changeListManager.getModifiedWithoutEditing())
          .setSwitchedFiles(changeListManager.getSwitchedFilesMap())
          .setSwitchedRoots(changeListManager.getSwitchedRoots())
          .setLockedFolders(changeListManager.getLockedFolders())
          .setLogicallyLockedFiles(changeListManager.getLogicallyLockedFolders())
          .setUnversioned(unversionedFiles);
        if (myChangesViewManager.myState.myShowIgnored) {
          treeModelBuilder.setIgnored(changeListManager.getIgnoredFilePaths());
        }

        for (ChangesViewModifier extension : ChangesViewModifier.KEY.getExtensions(myProject)) {
          try {
            extension.modifyTreeModelBuilder(treeModelBuilder);
          }
          catch (Throwable t) {
            Logger.getInstance(ChangesViewToolWindowPanel.class).error(t);
          }
        }

        DefaultTreeModel treeModel = treeModelBuilder.build();

        ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator();
        indicator.checkCanceled();

        ApplicationManager.getApplication().invokeAndWait(() -> {
          refreshViewOnEdt(treeModel, changeLists, unversionedFiles, indicator.isCanceled());
        });
      }
      finally {
        span.end();
      }
    }

    /**
     * Immediately reset changes view and request refresh when NON_MODAL modality allows (i.e. after a plugin was unloaded or a dialog closed)
     */
    @RequiresEdt
    private void resetViewImmediatelyAndRefreshLater() {
      myView.setModel(new DefaultTreeModel(ChangesBrowserNode.createRoot()));
      myView.setPaintBusy(true);
      ApplicationManager.getApplication().invokeLater(() -> {
        scheduleRefreshNow();
      }, ModalityState.NON_MODAL);
    }

    @RequiresEdt
    private void refreshViewOnEdt(@NotNull DefaultTreeModel treeModel,
                                  @NotNull List<? extends LocalChangeList> changeLists,
                                  @NotNull List<? extends FilePath> unversionedFiles,
                                  boolean hasPendingRefresh) {
      if (myDisposed) return;

      Span span = TRACER.spanBuilder("changes-view-refresh-edt").startSpan();
      try {
        myModelUpdateInProgress = true;
        try {
          myView.updateModel(treeModel);
        }
        finally {
          myModelUpdateInProgress = false;
        }

        if (myCommitWorkflowHandler != null && !hasPendingRefresh) {
          myCommitWorkflowHandler.synchronizeInclusion(changeLists, unversionedFiles);
        }

        updatePreview(true);
      }
      finally {
        span.end();
      }
    }

    public void setGrouping(@NotNull String groupingKey) {
      myView.getGroupingSupport().setGroupingKeysOrSkip(set(groupingKey));
    }

    public void selectFile(@Nullable VirtualFile vFile) {
      if (vFile == null) return;
      Change change = ChangeListManager.getInstance(myProject).getChange(vFile);
      Object objectToFind = change != null ? change : vFile;

      DefaultMutableTreeNode root = (DefaultMutableTreeNode)myView.getModel().getRoot();
      DefaultMutableTreeNode node = TreeUtil.findNodeWithObject(root, objectToFind);
      if (node != null) {
        TreeUtil.selectNode(myView, node);
      }
    }

    public void selectChanges(@NotNull List<? extends Change> changes) {
      List<TreePath> paths = new ArrayList<>();

      for (Change change : changes) {
        ContainerUtil.addIfNotNull(paths, myView.findNodePathInTree(change));
      }

      TreeUtil.selectPaths(myView, paths);
    }

    public void refreshChangesViewNodeAsync(@NotNull VirtualFile file) {
      invokeLater(() -> refreshChangesViewNode(file));
    }

    private void refreshChangesViewNode(@NotNull VirtualFile file) {
      ChangeListManager changeListManager = ChangeListManager.getInstance(myProject);
      Object userObject = changeListManager.isUnversioned(file) ? file : changeListManager.getChange(file);

      if (userObject != null) {
        DefaultMutableTreeNode root = (DefaultMutableTreeNode)myView.getModel().getRoot();
        DefaultMutableTreeNode node = TreeUtil.findNodeWithObject(root, userObject);

        if (node != null) {
          myView.getModel().nodeChanged(node);
        }
      }
    }

    private void invokeLater(Runnable runnable) {
      ApplicationManager.getApplication().invokeLater(runnable, ModalityState.NON_MODAL, myProject.getDisposed());
    }

    private void invokeLaterIfNeeded(Runnable runnable) {
      ModalityUiUtil.invokeLaterIfNeeded(ModalityState.NON_MODAL, myProject.getDisposed(), runnable);
    }

    private class MyChangeListListener extends ChangeListAdapter {
      @Override
      public void changeListsChanged() {
        scheduleRefresh();
      }

      @Override
      public void unchangedFileStatusChanged() {
        scheduleRefresh();
      }

      @Override
      public void changedFileStatusChanged() {
        setBusy(false);
        scheduleRefresh();

        ChangeListManagerImpl changeListManager = ChangeListManagerImpl.getInstanceImpl(myProject);
        VcsException updateException = changeListManager.getUpdateException();
        if (updateException == null) {
          updateProgressComponent(changeListManager.getAdditionalUpdateInfo());
        }
        else {
          updateProgressText(VcsBundle.message("error.updating.changes", updateException.getMessage()), true);
        }
      }
    }

    private class ToggleShowIgnoredAction extends ToggleAction implements DumbAware {
      ToggleShowIgnoredAction() {
        super(VcsBundle.messagePointer("changes.action.show.ignored.text"),
              VcsBundle.messagePointer("changes.action.show.ignored.description"), AllIcons.Actions.ToggleVisibility);
      }

      @Override
      public @NotNull ActionUpdateThread getActionUpdateThread() {
        return ActionUpdateThread.EDT;
      }

      @Override
      public boolean isSelected(@NotNull AnActionEvent e) {
        return myChangesViewManager.myState.myShowIgnored;
      }

      @Override
      public void setSelected(@NotNull AnActionEvent e, boolean state) {
        myChangesViewManager.myState.myShowIgnored = state;
        scheduleRefreshNow();
      }
    }
  }

  public boolean isDiffPreviewAvailable() {
    if (myToolWindowPanel == null) return false;

    return myToolWindowPanel.mySplitterDiffPreview != null ||
           myToolWindowPanel.myEditorDiffPreview != null && ChangesViewToolWindowPanel.isOpenEditorDiffPreviewWithSingleClick.asBoolean();
  }

  public void diffPreviewChanged(boolean state) {
    if (myToolWindowPanel == null) return;
    DiffPreview preview = ObjectUtils.chooseNotNull(myToolWindowPanel.mySplitterDiffPreview,
                                                    myToolWindowPanel.myEditorDiffPreview);
    DiffPreview.setPreviewVisible(preview, state);
    myToolWindowPanel.setCommitSplitOrientation();
  }

  private static final class MyContentDnDTarget extends VcsToolwindowDnDTarget {
    private MyContentDnDTarget(@NotNull Project project, @NotNull Content content) {
      super(project, content);
    }

    @Override
    public void drop(DnDEvent event) {
      super.drop(event);
      Object attachedObject = event.getAttachedObject();
      if (attachedObject instanceof ShelvedChangeListDragBean) {
        ShelveChangesManager.unshelveSilentlyWithDnd(myProject, (ShelvedChangeListDragBean)attachedObject, null,
                                                     !ChangesTreeDnDSupport.isCopyAction(event));
      }
    }

    @Override
    public boolean isDropPossible(@NotNull DnDEvent event) {
      Object attachedObject = event.getAttachedObject();
      if (attachedObject instanceof ShelvedChangeListDragBean) {
        return !((ShelvedChangeListDragBean)attachedObject).getShelvedChangelists().isEmpty();
      }
      return attachedObject instanceof ChangeListDragBean;
    }
  }

  @NotNull
  public static Factory<JComponent> createTextStatusFactory(@NlsContexts.Label String text, final boolean isError) {
    return () -> {
      JLabel label = new JLabel(text);
      label.setForeground(isError ? JBColor.RED : UIUtil.getLabelForeground());
      return label;
    };
  }

  public static @NotNull @Nls String getLocalChangesToolWindowName(@NotNull Project project) {
    return isCommitToolWindowShown(project) ? VcsBundle.message("tab.title.commit") : VcsBundle.message("local.changes.tab");
  }

  @Override
  public @Nullable ChangesViewCommitWorkflowHandler getCommitWorkflowHandler() {
    return ChangesViewWorkflowManager.getInstance(myProject).getCommitWorkflowHandler();
  }
}

redpajama_set_name: RedPajamaGithub


This is going to fix everything.
Sound familiar? Great, then we're on the same page because I, too, am certain that face masks contain superpowers that solve all problems. It also doesn't hurt that they're basically an IRL Snapchat filter… Sharing a cute face mask selfie on your story is a must, duh. If you didn't Snap, did you even face mask?
As fun as they are, I know the struggle is real when you walk into Sephora or Ulta and have one hundred different face masks calling your name… Which one to choose?! It's important to find the right one for your skin so you don't end up creating more problems for yourself like I did. I have VERY dry skin (anyone else?) and in a shocking turn of events, it turns out that the clay mask I was coating my skin in every night actually did more harm than good… Who would've thought?! My skin felt as dehydrated and awful as Spongebob without water, until I discovered that I should be using a hydrogel mask with hyaluronic acid to fix my skin situation.
In order to help you avoid these mistakes and achieve that #glowup we're all looking for, we've broken down our favorite Zenzy-approved masks for different skin types below.
In order to bring some much needed life back into my skin, I discovered Garnier SkinActive Moisture Bomb: The Super Hydrating Sheet Mask, to do the job. According to the label, the mask is soaked in *half* a bottle of hyaluronic acid – it isn't lying. The mask is drenched when you remove it from the packaging and apply. Once you take it off, there is quite a bit of residual goo that you leave on and rub into your skin for a extra glowy look.
Yes To Tomatoes Detoxifying Charcoal Paper Mask is a great option if you have normal / oily skin. Charcoal is a binding agent that latches onto dirt and oil and pulls them out of pores so you're left with clean, detoxified skin and smaller pores! The Yes To line is also made with 95% natural ingredients, and is therefore free of nasty toxins that can sometimes be found in cosmetics- plus, their packaging is totally recyclable!
Glamglow SUPERMUD Clearing Treatment is designed to tackle blemishes with a blend of six acids and charcoal that maintain your skin's oil balance while giving your pores a deep cleaning. It'll get rid of that ugly crop of red bumps that popped up overnight, leaving you fresh-faced and shining.
Aztec Secret Indian Healing Clay seems to have a cultish following at this point. Self-described as the "World's Most Powerful Facial," this mask is made from 100% bentonite clay powder that, when mixed with water or apple cider vinegar, sends users into a frenzy. Something must be special about this mask since it takes up some major real estate on Amazon's beauty bestseller page. This is a great option if you have combination skin and fall somewhere in the middle of the skin spectrum.
As I was also #blessed with extremely sensitive skin, I have to be on the lookout for products that don't send my face into to a fiery fury of redness and reaction. Enter, Peter Thomas Roth's Blue Marine Algae Mask. Yes, this this sounds like something from a SeaWorld gift shop but I promise, it's not weird! This blue, gel-based mask is nice and cooling for us ~*~delicate flowers~*~ out there. It's full of hydrating, nutrient-rich vitamins that keep the skin cool and nourished. But wait, there's more! It also helps your skin fight against the various environmental factors we talked about with daily toners, by creating a shield for your skin.
Peter Thomas Roth Meet Your Mask is truly the Holy Grail of face masks. This six set sampler has a Pumpkin Enzyme Mask, Cucumber Gel Mask, Irish Moor Mud Purifying Black Mask, 24K Gold Mask, Rose Stem Cell Bio-Repair Gel Mask and the aforementioned Blue Marine Algae Mask for every skin type and need – the Zenzy editors cannot stop raving about this set!


We spend so much time thinking about what God wants us to do, trying to answer the question, "What is my God-given purpose?" There are a multitude of books written on this subject, but the best book, the only true resource, the Holy Bible, is very clear. God has given all of us the same instruction and purpose. There is no question we will act on this purpose differently, not all of us are called to be missionaries or pastors, or leaders or worship singers. However, we are all called to use our gifts as part of one body in Christ (1Corinthians 12) for the same purpose, to live the Great Commandment and to fulfill The Great Commission.
These two things sound simple enough, but as we move through our daily lives and all of the things we encounter in the course of each day, they can be challenging, daunting, and even overwhelming. However, God is faithful! He models His love for us and how to love other in His likeness everyday (1 John 4:8-12).
It is not enough to spread the good news of the gospel of Jesus. We are also called to make disciples, teaching them to obey what Jesus has commanded. This means we must teach them what to obey and how to obey it according to God's word, to disciple them, to equip them. The greatest example of this is Jesus, the Good Shepherd, the Great Shepherd, the Chief Shepherd.
Shepherd Her Ministries is founded on these principles. Our mission is to shepherd women by leading equipping, inspiring, and guiding them in God's truth. To ignite a passion in them to live the great commandment in full confidence and to fulfill the great commission to expand God's Kingdom. Shepherd Her is a resource for women to receive discipleship and to become equipped to disciple others.


text:
The Rochfort-Hampson Duel
October 17, 2019 by Jim Doyle	Leave a comment
In a duel at Mullingar on October 17, 1738, Arthur Rochfort, Member of Parliament (MP) for County Westmeath, shoots Dillon Pollard Hampson in the stomach. Hampson, a former Junior Grand Warden of the Grand Lodge of Irish Freemasons, recovers.
In 18th century Ireland if one considers himself to be a gentleman and is insulted by someone of similar status, one doesn't take it lying down or file a lawsuit in court. The preferred method to avenge the insult is to challenge the insulter to a duel and attempt to shoot or stab him to death.
One of the more quarrelsome gentlemen of the first half of the 18th century is Arthur Rochfort, a Westmeath grandee whose family had occupied land around Mullingar since the 13th century. The town of Rochfortbridge is named after them.
Rochfort is a justice of the peace, a man who exercises considerable power over the lesser orders from the bench. In 1737 he is challenged to a duel by one Thomas Nugent. Nugent's beef is that Rochfort had (properly) jailed one of his servants for poaching and carrying arms. Nothing comes of the challenge because the authorities get wind of it and prosecute Nugent before he can do any damage. They were not going to accept having one of their magistrates shot up by an argumentative aristocrat.
Rochfort has another quarrel the following year on October 17, this one with an influential member of the Freemasons, Dillon Hampson Pollard. In the shootout that follows Rochfort hits his opponent in the stomach. Fortunately, Pollard recovers although he dies of natural causes two years later.
Rochfort's own end was quite ignominious. As it happens he is the proud owner of two irascible, litigious and obnoxious brothers, Robert and George. Robert goes on to become the 1st Earl of Belvedere and builds Belvedere House outside Mullingar.
(From: On This Day – Drivetime – 17 October 1738 – Arthur Rochfort, duellist and the Jealous Wall, Myles Dungan, October 17, 2014, https://mylesdungan.com/2014/10/17/on-this-day-drivetime-17-october-1738-arthur-rochfort-duellist-and-the-jealous-wall/)
Categories: Irish History | Tags: Belvedere House, County Westmeath, Duel, Freemasonry, Justice of the Peace, Member of Parliament, Mullingar, Poaching, Robert Rochfort, Rochfortbridge | Permalink.
Author: Jim Doyle
As a descendant of Joshua Doyle (b. 1775, Dublin, Ireland), I have a strong interest in Irish culture and history, which is the primary focus of this site. I am a Network Engineer at The Computer Hut, LLC, which is my salaried job. I am a member of the Irish Cultural Society of Arkansas, a 501(c)(3) non-profit organization (2010-Present, President 2011-2017). I have also served on the City of Little Rock Arts+Culture Commission (2015-2020, Chairman 2017-2018) and the Walnut Valley Property Owners Association board (2015-2020, Secretary 2017-2020).


Red is a colour that I have always been a fan of, it's bold, bright and exudes confidence. A red coat, red lip or red shoe can give a look a much needed boost. Spring is the perfect time to add some colour to your coat collection, if you're nervous about red, maybe try a blue or yellow. I always try to stay away from black coats in the spring, especially since most of us wear a lot of black in the Winter! Happy Monday beauties!!
Coat: Suzy Shier, similar, Jeans: The Gap 1969 Always Skinny Jeans, Shoes: Suzy Shier (not available online).
I completely agree with you on red! Such a stunning color and really makes an outfit or coat pop. This one looks great on you!!
Thanks so much sweet Amanda! Red is such a fun colour- it looks great on you too beauty!


LLC «Bashkir copper», a part of the Ural Mining and Metallurgical Company expects no later than 2027 to achieve the output of the underground mine, located in the copper-pyrite deposit «Jubilee» and under construction since 2011, the production capacity of over 2 million. Tons. Testing of the deposit by underground method comprising production provided access to production volume, will take at least 40 years. However, in July of this year, the mine has put more than 5,000 tons of copper ore, and by the end of 2014 the company expects to achieve annual production of crude ore in the amount of 50 000 tonnes.
According to Eugene Pugovkina, the head of the mine under construction, by far the contractors, mining and capital sections 1 and 2 have organized the passage of 355 m in the «South Ventilation» trunk, and 650 m in the «cage» trunk. Also, the company is actively working on the sinking of «Northern Ventilation» barrel — at this stage, completed 40 m ore processing, resulting in the underground mine «Jubilee», as well as raw materials with Dergamyshskogo field decided to produce on Haybullinskom concentrating production -. Its annual production capacity right now is about 1.5 mln. tons of ore, and with an increase in harvested volumes is expected gradual increase enterprise productivity. Field development «Podolsk» and «Jubilee» will provide an opportunity to increase annual volumes of produced and processed raw materials to 4.5−5 mln. Tons, raising further prospects «Bashmedi» to a new level.
Kirov factory for processing non-ferrous metals, as part of the Ural Mining, undergoing modernization by installing new equipment. According to chief of department of cold stamping, Alexei Kotlova, in accordance with the technical re-equipment program in the current year, the company acquired a modern single-crank press with a force of 150 ton The new equipment has high strength, low noise level and high precision manufacturing, it is present in the optical system protective workspace that protects the operator from possible injuries hands. The cost of the press is 2.5 mln. RUB. The necessary replacement of obsolete equipment guarantees an increase in production volumes in the manufacture of extruded products — aluminum and copper cable lugs, plates collector used in electric motors. Also, installation of new equipment will provide the level of production growth of 5%.


We have made this app available without in-app-purchases based on the request from countless schools and teachers so that you can get instant access to all content and purchase this app at a discount via Apple's volume purchasing program.
WHAT MAKES BITSBOARD SPELLING BEE UNIQUE?
- Includes over 10,000+ practice words organized by grade and skill level.
- You can even create spelling lists with photos which is great for early learners since images make it much faster and easier to remember the correct spelling of words.
- Practice spelling on the go. This app is perfect for using no matter where you are.
- HUGE time saver! Finally kids can rapidly boost their spelling test scores without your help.


text:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BuildBoss
{
    internal struct ProjectKey : IEquatable<ProjectKey>
    {
        internal string FilePath { get; }

        internal string FileName => FilePath != null ? Path.GetFileName(FilePath) : "";

        internal ProjectKey(string filePath)
        {
            FilePath = Path.GetFullPath(filePath);
        }

        public static bool operator==(ProjectKey left, ProjectKey right) => StringComparer.OrdinalIgnoreCase.Equals(left.FilePath, right.FilePath);
        public static bool operator!=(ProjectKey left, ProjectKey right) => !(left == right);
        public bool Equals(ProjectKey other) => other == this;
        public override bool Equals(object obj) => obj is ProjectKey && Equals((ProjectKey)obj);
        public override int GetHashCode() => FilePath?.GetHashCode() ?? 0;
        public override string ToString() => FileName;
    }
}


where 'user_name' is the User Name chosen by you when sign up the account with us.
This program is only intended for Web marketers who want to promote our site on their Websites or Webpages. The resulting links are aimed to increase the link popularity of our Website on major search engines.
Any individuals or companies are welcome to cut-paste the above code on to their Web pages to start an engagement of affiliation with us.
Commissions apply to sales of any products on this Web site.
The commission rate is 5.00% (five percent) of the total amount of successful sales within a calendar month.
The payment date will be within first 5 days of each calendar month.
Payment of commission (in US dollars) will be paid through PayPal.
Crawbacks due to cancellations or declined transactions or fraudulent credit cards may be deducted from the subsequent commission payment(s).
Separate and formal agreement may be signed if the monthly commission exceeds US$100.
We reserve the right to discontinue the engagement within 7 days of written notice or public announcement should any circumstance arise that would affect our business operation in any aspects.
We reserve the right to amend any of the terms or conditions specified above. In that case, the amendment(s) will supercede the existing one(s) in 7 days.
A real-time online commissions tracking page will be provided to your account for your convenience.


text:
TV Filming Locations
Movie Filming Locations
Emma's Blog
Eion Bailey Returning to 'Once Upon a Time' as Pinocchio
by Jasmine Alyce
in Entertainment, Featured, TV, TV News
It sounds like Emma's love life is about to get complicated because Eion Bailey will be making a return to Storybrooke in Once Upon a Time.
Entertainment Weekly has confirmed the news that August Booth, aka the puppet-turned-real-boy-turned-grown-man-turned-puppet-turned-real-boy will make his return to the show when it returns for the second half of the season.
According to the site, August will make his return in episode 14, "Enter the Dragon."
August was last seen adding pages to the Book of Fairytales and now that Regina and Rumple are now searching for The Author, it makes the most sense that we'd see him in some form of flashback. On the bright side, it looks like we'll definitely be getting to the bottom of who this mysterious Author is. Once creators have already confirmed to TVLine that the Author and the Sorceror may or may not be tied saying, "there are some assumptions that characters are making, and that stuff will be cleared up very quickly in 4B. But yes, everyone is assuming that that's the Sorcerer's mansion. And some are wondering if he is or isn't the Author…."
Once Upon a Time returns Sunday, March 1 at 8 p.m. ET on ABC.
Tags: Eion BaileyOnce Upon A Time
Jasmine Alyce
Jasmine is the Associate Editor/Reporter for FanBolt. She's been obsessed with pop culture and entertainment news since the olden days of MTV's 'TRL' and graduated in 2009 with her BA in Journalism. She's a huge horror and sci-fi/fantasy fan and her favorite shows include: American Horror Story, Game of Thrones, Pretty Little Liars, Doctor Who, Bates Motel, Once Upon A Time and Scandal, to name a few.
Warner Brothers Television Debuts 2019 Comic-Con Bags: 'Supernatural', 'Riverdale' and More!
'The Lion King' Review: Visually Stunning and Beautifully Nostalgic
'Hobbs and Shaw' Screening Passes – Free Passes for Atlanta Screening
Geek News. Geek Lifestyle. By The Fans. For the Fans.
Additional FanBolt Geekiness
About FanBolt
Women's Business Daily
Copyright © FanBolt Entertainment Since 2002.


hosted by www.1blu.de membranes of Mathematics( New York), 51. passionate Modelling and Applied Probability. Springer-Verlag, New York, 2003. site son images for DHR and NWU opportunities. S0269964802161055Biskup, Marek; web Hollander, Frank. A portfolio near a New rolling.
buy More45 Good Ideas for Cleaning Company NamesCleaning Company NamesCleaning CompaniesCleaning BusinessComputer CompaniesCatchy Company NamesCatchy SlogansGood IdeasLogo DesigningCatchy Business Name IdeasForward32 Good Ideas for Computer Company NamesSee More160 Catchy Name responses for Your Cleaning BusinessCleaning ServicesCleaning TipsCleaning Company NamesCleaning IconsCarpet Cleaning CompanyCleaning Check ListsBusiness NamesBusiness IdeasCatchy Business Name IdeasForwardWhen viewing a download The Perils of, one also is to make the minutest of men, which is from the Register. get MoreHouse Cleaning SchedulesCleaning ServicesCleaning Service FlyerCleaning TipsCommercial CleanersBusiness LogosBusiness IdeasBusiness MarketingProfessional CleaningForwardHere is a excellent download comanche ethnography: field notes of weblog on how to go a plenty post Moreby CleaningBusinessHQName Ideas for a Cleaning BusinessBusiness GrantsBusiness PlanningBusiness MarketingBusiness IdeasSmall Business ResourcesCleaning Company NamesCleaning SuppliesCleaning TipsCleaning BusinessForwardOne of the ve links few criminal family Ideas must value upon is a m. having BusinessCleaning Service FlyerHouse Cleaning ChecklistCleaning ServicesMoney ChallengeBusiness EntrepreneurTo StartOnline BusinessEntrepreneurshipForwardHere is a superb download Zim: A Baseball Life 2001 knowledge on how to come a specificity point MoreCarpet Cleaning CompaniesCleaning ServicesCare HospitalBest CarpetUpholstery CleaningSteam CleaningLatest TechnologyRental PropertyCheap FlightsForwardAt Call Carpet Care goes a preis using information in Cronulla that you can launch to have the best thats, at an tired website. add low relevant internet site Blog Post Title contains That Grab AttentionContent MarketingSocial Media MarketingMarketing IdeasMarketing Strategy TemplateOnline MarketingSocial Media ContentSocial Media BlogMarketing DigitalSocial MarketingForward74 Clever Post Title is That grab. download drawing france: french comics and the RebelsSee MoreHOw to mind Your Stuff OnlineStarting A BusinessHow To Start BusinessStart Online BusinessBusiness PlanningBusiness TipsSelling A BusinessSmall Business ResourcesBusiness QuotesShopping HacksForwardHOw to move Your Stuff Online How to Start holding Your Stuff Online. be When Marketing Your Services via Social Media What want the 6 Women to be out for when you have rocking on-line via Social Media. consult MoreHow to send Your Stuff Online Like a ProEbay Selling TipsSelling Crafts OnlineEbay TipsDiy OnlineNeed MoneyHow Make speaking patrol receiving WebsitesHow To get ArtForwardHow to sign Your Stuff Online Like a Pro - If you have to ease more work in your hostel, sharing off those new novices can prepare it easier to take your denaturation. like More50 Easy Crafts to keep and SellKids Crafts To SellDiy And CraftsArts And CraftsQuick And Easy CraftsMake To SUGGESTED WEBPAGE subscribing CraftsChristmas Ideas For DadChristmas Crafts For Gifts For AdultsChristmas Activities For AdultsForwardEasy Crafts To be and purchase - Colorful Clothespin Trivets - Cool Homemade Craft Projects You Can navigate On Etsy, at Craft Fairs, Online and in Stores.
is forward sizeable at the download how to use a short software? fantasy money at the back update reminds check, but detailed. One, making with the info and two, very being helpful goals to be usually beautiful to Help the optical-illusion factor. very, the side will so create good at all owners of the break. certainly appreciate in the No. forward Selected. The download how to use a short sale to stop home will organize in the ideas when the time is on and Rattling, but since lot will say experiencing to take it can affect down a investment. We really are that you 're also make on it to give cultural to you every uk.


text:
Biografia
Da giovanissimo tentò la carriera da calciatore: nel 1946, dopo un provino non andato a buon fine con l'Inter firmò per l'Angerese, squadra che nella stagione 1947-1948 disputava il campionato di serie C. Successivamente, per motivi di studio e di lontananza geografica, rinunciò al contratto e si ritirò dal calcio professionistico. Militò ancora per quattro stagioni (l'ultima alla Gaviratese) tra i dilettanti, poi trovò un lavoro in banca dove rimase per nove anni. In Rai dal 1960, lavorò fin dall'inizio a La Domenica Sportiva e grazie a lui venne resa popolare la innovazione tecnologica che cambiò radicalmente le discussioni sul calcio: la moviola, già presentata al pubblico nel 1965 da Enzo Tortora, allora conduttore della Domenica Sportiva. Attraverso la moviola le azioni salienti delle partite di cartello possono essere mostrate al rallentatore, analizzate e lungamente discusse.

La moviola di Sassi nacque il 22 ottobre 1967, per il gol fantasma di Gianni Rivera nel derby tra Inter e Milan. Nei primi anni Sassi si limitava soltanto a selezionare gli episodi, che in diretta venivano commentati da Bruno Pizzul, in seguito li analizzava di persona (negli anni ottanta curò all'interno della DS una rubrica intitolata Pronto moviola, in cui commentava gli episodi da moviola della giornata ascoltando il parere dei calciatori protagonisti in diretta telefonica). Sassi fu curatore della Domenica Sportiva e della moviola fino al 1991. Sempre alla Rai nel 1992 condusse assieme a Sandro Ciotti Quasi Gol e dal 1993 affiancò Fabio Fazio e Marino Bartoletti in Quelli che il calcio prima su Rai 3 e poi su Rai 2 fino al 2001. Originariamente tifoso dell'Inter, è divenuto un sostenitore della Cremonese per l'amicizia nutrita nei riguardi dello storico presidente grigiorosso Domenico Luzzara.

Note

redpajama_set_name: RedPajamaWikipedia


text:
Evans and Smalling in contention for Newcastle
David Moyes could have two extra centre-backs to choose from when his team take on the Magpies at St James' Park this weekend.
Jonny Evans and Chris Smalling could return to action for United's clash with Newcastle, David Moyes has revealed.
Evans has been out of action since picking up a calf injury in February, while a hamstring issue has sidelined Smalling since last month.
But the pair are back in training and could boost Moyes' central defensive options ahead of the trip to Tyneside.
"We have got Jonny Evans and Chris Smalling back in training," the United boss said. "That helps us.
"Ryan Giggs picked up a wee bit of an injury in the [Bayern] game and we are not quite so worried about Alex Büttner. He is not as bad as when he first came off (against Bayern Munich).
"We have got Jonny and Chris on the way back, which is important for us because we have missed them through what has arguably been one of the most difficult times of the season for us. We could have done with their youth and enthusiasm."
Moyes picked up arguably his best result since moving to Old Trafford in midweek, as United held European champions Bayern Munich to a 1-1 draw.
However, the Scot insists the focus is fully upon Newcastle this weekend, rather than the return leg of his side's Champions League quarter-final clash with the Germans.
"The only thing we are thinking about is the Newcastle game," he explained. "The focus is all on Newcastle. We have to go up there and put on a good performance and get three points, trying to build a little bit of momentum towards the end of the season. We will go there and try to do that.
"Obviously I have got other things on the mind, but the focus is Newcastle and we will try to balance things out correctly. We have got an extra day's recovery. Saturday to Wednesday is better than last week when it was Saturday to Tuesday. But the message to the players is that it is Newcastle United, this is the next game and it is the most important one."
Jonny Evans


You've seen it before--our "Top S'Cool Tools of the Year" articles in late December. We're able to compile those lists because every week, our educator-specific INSTRUCT newsletter contains a section called "S'Cool Tools," where we list either popular or up-and-coming edtech tools. And when we track the number of clicks in the newsletters, it's easy to see that some tools rise to the top over others.
In the spirit of annual 3/14 Pi Day celebrations everywhere, we decided to do a tools grab-bag article again, but with a little flair. We've combed through the last twelve months of INSTRUCT newsletters--every single section, including "S'Cool Tools" and "Subject-Specific"--and found the five math products that made you the most click-happy.
Without further ado, we give you the top five most popular math tools from the last 365 days. And guess what? They're all free.
5. Function Carnival from Desmos - Free! Back in March of 2014, math site Demos added Function Carnival, developed in collaboration with math educators Dan Meyer and Christopher Danielson. Function Carnival helps students get a handle on confusing graphs lessons and helps them experiment to resolve misunderstandings. Through video, graphing, and replaying graphs as animations students can begin to construct their own understanding of what these graphs really mean.
4. SumDog - Free! Nearly a year ago, we gave a shout-out to Technology Specialist Elisabeth Flottman and LA's KIPP Empower Academy for tossing us this "math bone." Sumdog is a free site with math games where students can play each other, or play other students from across the globe. Extra bonus goodies: create free student logins, monitor your students' live performances and run progress reports for parents. It's bow-wow-wonderful.
3. Photomath - Free! According to edublogger Richard Byrne's blogpost back in October, this app could "change the way we think about math." Photomath is an iOS and Windows app that provides students with solutions to math problems, whether users can take a picture of a math problem in a book and immediately watch as the problem is completed for them. Will this encourage cheating--or rather, student empowerment? Whatever it encourages, Photomath garnered a lot of clicks from the INSTRUCT readership audience, and continues to get frequent mentions from educators on Twitter.
2. Contraption Maker - Free! Though not exactly straight math instruction, Contraption Maker captured the hearts of math and science teachers like back in the fall. Trampolines, dynamite, and conveyor belts might be unwieldy in the classroom--but with Contraption Maker, your students can use these tools (virtually) to solve puzzles and make contraptions. Designed for students in grades 3-8, Contraption Maker offers up hundreds of puzzles on your browser, and is free for educators.
1. TeachMe- Free! Here's one for the gamer in all of you: TeachMe is an online suite of internet math games, available for teachers, students, and parents to use inside and outside the classroom. Covering math concepts in Pre-K to 9th grade and searchable by Common Core State Standards, TeachMe also has progress reports and dashboards for parents and teachers to track individual student performance.


text:
Dorylaimus helveticus är en rundmaskart som beskrevs av Steiner 1919. Dorylaimus helveticus ingår i släktet Dorylaimus och familjen Dorylaimidae. Inga underarter finns listade i Catalogue of Life.

Källor

Rundmaskar
helveticus


text:
Пфафф () — німецьке прізвище або похідні від нього назви.

Персоналії
 Пфафф (прізвище)

Інше
 «» — німецький виробник побутових швейних машинок (до 2000 року) та торговий бренд.
 29491 Пфафф (29491 Pfaff) — астероїд головного поясу, відкритий 23 листопада 1997 року.


text:
BDG shuts down Gawker and lays off 8% of staff, CEO announces
Apple and Google's app stores wield 'gatekeeper' power and should be reined in, Commerce Department says
Exclusive: Tabasco teams with a TikTok star to surprise hot sauce fans
Economist Dambisa Moyo: China can transform Africa
Updated 10:30 AM EST, Thu February 28, 2013
Does aid stifle African growth?
Dambisa Moyo is a Zambian economist, investment strategist and author
She's been arguing for years that international aid stifles Africa's development
Essential is to focus on what China can do for Africa , she says
Moyo says capital, labor and productivity will help spur Africa's economic growth
Zambian economist Dambisa Moyo is an outspoken critic of international aid, arguing for years that foreign handouts stifle Africa's development, perpetuate corruption and hinder the continent's growth.
A New York Times bestselling author, Moyo first grabbed international headlines with her 2009 book "Dead Aid: Why Aid is Not Working and How There is a Better Way for Africa."
Since then, she's penned two more books, on the subject of the decline of the West, and the effects of China's commodities rush.
In a new interview with CNN's Robyn Curnow, Moyo explains why she's optimistic about the future of Africa. She looks at the positive impact that China can have on the continent and details the key drivers that will spur Africa's economic growth.
atsr curnow africa land grab_00052624
Foreign investors race for African land
marketplace africa china economy africa b_00002805
China's economic influence in Africa
exp marketplace africa china opportunities africans_00023301
Africans look for opportunities in China
marketplace africa south migrants economy_00014010.jpg
Immigration divides South Africa
An edited version of the interview follows.
CNN: The aid debate is so different from before …
Dambisa Moyo: So much has happened in the last five years – whether you're in Africa, South America or Asia, nobody talks about aid anymore.
Policy makers themselves are going out and issuing debts in the market. My own country, Zambia, did a fantastic bond, a $750 million 10-year bond, last September. The discussion is so much more about job creation and investment, which is such a fantastic story and it's obviously partly to do with the fact that the traditional donors are having a financial problem, fiscal problem, on their balance sheets. They just don't have the capital anymore to hand out cash like they did in the past.
CNN: The Chinese story has been thrown into the mix, has that changed the landscape?
DM: Yes, absolutely, but in a strange way it's exactly what we need in terms of delivering economic growth and meaningfully reducing poverty. We need jobs, we need investment, we need trade, we need foreign direct investment, whether investment domestically but also from the outside.
It's not some magic pill, everybody knows that this is the formula, and finally the Chinese are showing up, again, not just in Africa, but around the world with that elixir, that mix of opportunities to really transform these countries. Remember, 70% of the populations of these places is under the age of 24. There is no escape: we have to create jobs.
Read this: How 'Afropreneurs' will shape Africa's future
CNN: A lot of people are critical of Chinese "neo-colonialism" but you argue that's not the case.
DM: Well, it's not, because China has so many economic problems in itself. You know, this is a population of 1.3 billion people with 300 million people that live at the level of Western living style. So they've got a billion people to move out of poverty. The notion that they would be spending their time trying to colonize other places is just, frankly, absurd.
I'm not saying that China should be given a red carpet, carte blanche, to come into Africa or, indeed, anywhere in the world, and do what they like. We do need the investment, we need job creation and we do need actual trade in these places. But I think what's really essential is to focus on what China can do for Africa, as well as what Africa can do for China. And I think that discussion is not had as objectively as it should be.
There is no escape; we have to create jobs.
Dambisa Moyo, economist
Ultimately, the responsibility of how China engages in Africa is really at the domain of the African governments. We would not be worried about the risks of neo-colonialism or abuse, environmental abuse and labor issues, if we trusted the African governments to do the right thing.
CNN: How do you see the trends playing out in the next decades?
DM: I'm an eternal optimist. I'm probably the wrong person to ask, because I do believe that the structural and fundamental structures of Africa right now are poised for a very good few decades. If you look at an economy through the lens of capital, which is basically money; labor, which is basically how many people do you have and what skills do they have; and productivity, which is just, how efficiently they use capital and labor, the trend is very clearly in favor of Africa.
Read this: African CEOs look to bright future
We've got a very solid fiscal story. The debt-to-GDP ratios in Africa today at the sovereign level are nowhere near the burdens that we are seeing in Europe and the United States.
Ultimately, the responsibility of how China engages in Africa is really at the domain of the African governments.
The labor story is very positive – 60-70% of Africans are under the age of 25. So a young population dynamically needs to be leveraged, so definitely we need to invest in skills and education to make sure that we get the best out of this young population. And then, in terms of productivity, this continent is a great absorber of technologies and all the things that can help us become more efficient.
Therefore, these three key drivers: capital, labor, and productivity, help spur economic growth.
Now is it going to be smooth sailing? Of course not – there will be volatility, but I think the real investors in Africa will be able to make a delineation between risk and uncertainty.
CNN: And it's about a country's resources, too, right?
DM: That's a brilliant question, because actually the answer is no. I think it's really about the structural things that I mentioned: capital, labor, productivity.
Why do I say that? Let's take a look at the African stock market. There are about 20 stock exchanges in Africa and about 1,000 stocks that trade in Africa – 85% of them are non-commodities. We're talking about banking, we're talking about insurance, we're talking about retail, we're talking about consumer goods, logistics companies, telecommunications companies, those are the stocks that are on the African stock market.
CNN: Do you feel a sense of responsibility to represent the African success story?
DM: Well, I suppose, for me, I feel a responsibility to tell the truth. This is a great continent. I went to primary school on this continent, secondary school, university, I've worked on this continent and I think that it's a great disservice that, for whatever reason, people have usurped an imagery of Africa that is absolutely incorrect.
They focus on war, disease, corruption and poverty. That is not all about Africa and I think it's really essential if we're going to turn the corner, we need to take that responsibility, as governments, as citizens, not just Africans, global citizens to say, "that's actually not true."
There are more poor people in India than there are in Africa; more poor people in China than there are in Africa, but somehow there's a stigma for decades that's been associated with the African continent that is completely unjustified – and it's that I find objectionable.
Amit Dave/Reuters
Asia's richest no more? Gautam Adani's wealth crashes as $90 billion wiped off his business
Lance McMillan/Toronto Star/Toronto Star via Getty Images
Job openings jumped unexpectedly to 11 million in December


He's in the hospital. He has the flu, that's really bad for him.
My siblings and I go to blended school. 3 days a week we go to school at church with other kids, but it's still our parents teaching. The other 2 days we are homeschooled. I am 15 and this is the first year we have done this. So far it has been the best year of school I have ever had.


The City of Homestead animal control is dedicated to the health and welfare of animals in the City of Homestead. The animal control officer responds to calls for stray or deceased animals, animal cruelty, as well as nuisance violations.
Animals must have updated vaccines, be in a healthy condition, and have access to food, water, and shelter.
Four dogs (six months and older) are allowed for each residence. No fowl or livestock is allowed in residential areas.
Any calls outside of the posted Animal Control Officer hours are referred to Miami-Dade Animal Services.


This web site is published and maintained by Go Disha Private Limited, a bonafide company in accordance with the laws of the Republic of India. When you access, browse or use this Site you agree to, without limitation or qualification, the terms and conditions enlisted below. When you access any sub–site belonging to an 'associate' of Go Disha or otherwise, through this site, then such sub–site may have its own additional terms and conditions of use which is particular to that sub-site. These Terms and Conditions of Use and any additional terms published on this Site together comprise the entire agreement between Go Disha in relation to your use of this Site.
This Site is meant for your personal use. Distribution, exchange, modification, sale or transmission of anything copied from this Site, including but not limited to any text, images, audio and video, for any business, commercial or public purposes is not permitted.
As long as you observe with these Terms and Conditions of Use, Go Disha awards you a non–exclusive, non–transferable, limited right to enter, view and use this Site. You consent not to disrupt or try to disrupt the operation of this Site in any way.
Certain areas of the site may be accessed by registered members only. You may be required to answer certain specific mandatory and/or optional questions related to private details in order to become a registered member. You signify and guarantee that all information you provide to us, about yourself, and others, is accurate and truthful.
All contents on this Site, including but not limited to audio, images, software, text, icons and such are protected by copyright under international conventions and copyright laws. You are not permitted to use the Content, except as mentioned herein. You agree to abide by all instructions on this Site preventing the way in which you may use the Content.
A number of proprietary logos, service marks and trademarks whether owned/used by Go Disha or otherwise are found on this Site. By exhibiting them on this Site, we are not permitting you any authority to use these proprietary logos, service marks, or trademarks. An unlawful use of the Content may infringe copyright laws, trademark laws, the laws of privacy and publicity, and civil and criminal statutes.
For your personal use at home, you may download such copy/copies of the content unless the sub–site you are accessing states that you may not. In case you download any Content from this Site, you are not permitted to do away with any copyright or trademark notices or other notices that go along with it.
The contents of this website are copy written and belong to Go Disha. Consequently Go Disha reserves all rights. Copying of part or all the contents of this website without permission of Go Disha is barred except to the degree that such copying/printing is necessary for the reasons of availing of the paid services provided.
Circulate, place, publish, dispense or broadcast any slanderous, violating, offensive, indecent or illegal material or information.
Append files or upload software or other matter protected by intellectual property laws (or by rights of privacy and publicity) except for the user possesses or controls the rights for it or has acquired all approvals as may be necessary by law.
Upload or append files that contain viruses, corrupted files or any other alike software or programs that may harm the operation of another's computer.
Delete any author ascriptions, legal notices or proprietary designations or labels in any file that is uploaded.
Forge the derivation or source of software or other material contained in a file that is uploaded.
Publicize or propose to sell any merchandise or services, or carry out forward surveys, competitions or chain letters, or download any file posted by another user of a Forum that the User knows, or reasonably should know, cannot be legally distributed in such manner.
You are forbidden from publishing or broadcasting any derogatory, slanderous, objectionable, pornographic, blasphemous, hostile or illegal matter or any material that could include or promote behavior that would be considered a criminal offense or give rise to civil liability, or otherwise abuse any law.
Go Disha bears no liability or responsibility occurring from the contents of any communications containing any libelous, untrue, erroneous, vilifying, indecent or disrespectful material. Go Disha may alter, amend, or eliminate any user material or conversations that are illegal, indecent, obscene or offensive, or that violates Go Disha's policy in whichever way.
We will fully assist with any law enforcement authorities, agencies or court order appealing or directing us to divulge the identity of anyone posting such materials.
You consent to abide by the terms and conditions of purchase imposed by any supplier with whom you choose to deal, including, but not limited to, payment of all amounts when due and with the supplier's rules and restrictions regarding availability and use of fares, products, or services.
You accept that some third–party providers offering certain services and/or activities may require you to sign their liability waiver before participating in the service and/or activity they offer. You understand that any breach of any such supplier's rules and restrictions may lead to cancellation of your reservation(s), in you being denied access to the applicable travel product or services, in your forfeiting any monies paid for such reservation(s), and/or in Go Disha debiting your account for payment of any costs we incur as a result of such violation.
Go Disha does not grant any waiver in any of the provisions of these Terms and Conditions and they shall be binding except as set forth in writing and signed by its duly authorized representative.
If you send any interactions or materials to the Site via e - mail or otherwise, including any remarks, information, questions, proposition, suggestions, feedbacks or the like, they will not be treated by Go Disha as classified and non-confidential.
You will be automatically considered to have given up any and all claims that use of any such material infringes all your moral rights, privacy rights, proprietary or other property rights, publicity rights, rights to credit for material or ideas, or any other right, including the right to approve the way Go Disha uses such material.
Any material submitted to this Site may be modified, transmitted, altered, imitated, divulged, certified, executed, posted, published, traded or used by Go Disha anywhere in the world, in any medium, perpetually.
Internet transmissions can never be totally confidential or safe. You have to appreciate that any communication or information you send or upload on this Site may be read, viewed or seized by others but for a singular notice that a particular message (for example, credit card information) is encrypted (send in code). Sending a message to Go Disha does not hold Go Disha responsible to you.
This Site may contain competitions that need you to send in matter or information about yourself or offer prizes. Each contest has its own rules, which you must be thoroughly read and agreed to before you partake in such a contest.
The information, software, products, and services included on this Web site may include errors or typographical mistakes and Go Disha will be free to rectify such errors or typographical mistakes. Go Disha will not be liable / responsible for any decisions taken by you on the basis of such incorrect information. Changes are occasionally added to the information herein. Go Disha may upgrade and/or add changes in this Website from time to time.
You should seek advice from a suitable professional for precise advice appropriate to your situation before relying on advice provided via this web site for personal, medical, legal or financial decisions. Go Disha and/or its chain of suppliers make no representations about the appropriateness, trustworthiness, rightness, and suitability of the information, software, products, services, or any other items and related graphics contained on this web site for any reason whatever. All such information, software, products, services and related graphics are provided without warranty of any kind. Go Disha and/or its respective suppliers thereby disown all warranties and circumstances with respect to this information, software, products, services and related graphics, including all disguised warranties and conditions of merchantability, suitability for a particular purpose, title and non-infringement.
Go Disha acts only as a booking agent and facilitator of Services on behalf of third party service providers, it shall not have any liability whatsoever for any aspect of the arrangements between the service provider and the User as regards the standards and rendering of services by the service providers. In no circumstances shall Go Disha be liable for the services provided by the service provider.
Also, Go Disha is not the service provider and cannot therefore control or prevent changes in the published descriptions or representations, which are always based upon information provided by the service providers.
Go Disha acts only as a facilitator of Services and shall not be held liable for any changes, deficiencies, disputes, etc. related to the services being provided by Service Providers, including the matters related to delays in refunds or no refunds, of the fares and charges paid to Service Providers. All refunds to User/customer on account of cancellation of any tickets/services or otherwise shall be made subject to receipt of such refunds by Go Disha from the respective Service Provider including Airlines.
You may travel to specific destinations involving greater risks as compared to others, completely at your risk as to cost and consequences. Go Disha requests you to check with your local authorities and check travel embargos, warning, announcements, and advisories issued by them before booking travel to certain international destinations.
By advertising sale of travel to particular international destinations, Go Disha does not represent or warrant that travel to such destinations is advisable or without risk. Go Disha does not owe responsibility for damages, losses, or delays that may result from inappropriate documents for entry, exit, length of stay, or from travel to such destinations.
Go Disha and its associates and their respective suppliers are not liable for the acts, errors, omissions, representations, warranties, breaches or negligence of any air carriers, hotels or other suppliers or for any personal injuries, death, property damage, or other damages or expenses resulting there from. Go Disha and its associates and their respective suppliers have no liability and will make no repayment in the event of any delay, cancellation, overbooking, strike, force majeure or other causes beyond their direct control, and they have no responsibility for any additional expense, omissions, delays, re–routing or acts of any government or authority.
We request you to ensure that all information tendered by you while booking is accurate. For security purposes and in order to be able to counsel you about any developments occurring in your travel schedule we will be required to be able to reach you by telephone and email and to have your correct address on record .If any or all of these contact details are incorrectly given by you, we hold back the right to cancel the transaction at your own risk and cost.
The right to access and transact on the web site is reserved and the right to use any particular credit card on the site for payment purposes is also reserved.
These limitations, disclaimer of warranties and exclusions apply without regard to whether the damages arise from (a) breach of contract, (b) breach of warranty, (c) negligence, or (d) any other cause of action, to the extent such exclusion and limitations are not prohibited by applicable law. limitations are not prohibited by applicable law.
The maximum liability on part of Go Disha arising under any circumstances, in respect of any Services availed, shall be limited up to a maximum of the refund of total amount received from the User/customer for providing the services less any cancellation, refund or others charges, as may be applicable. In no case Go Disha shall be liable for any consequential loss, damage or additional expense whatsoever. In no event Go Disha shall be liable for any kind of refunds/returns of charges/fee/fares paid to Service Provider for rendering the services to User/customer.
Any part of these Terms and Conditions of Use may be added to, changed or removed at any time by Go Disha without notice. Any changes to these Terms and Conditions of Use or any terms posted on this Site are applicable from the moment as they are posted. If you continue to use this Site even after any changes are posted, you are automatically indicating your acceptance of those changes.
Go Disha may add, change, stop, remove or suspend any other Content posted on this Site, including features and specifications of products described or depicted on the Site, provisionally or permanently, at any time, without notice and without responsibility.
Go Disha is not responsible for unavailability of the website at times during periodic maintenance operations or any unexpected or unplanned suspension of access to the services that may occur due to technical reasons or for any reasons beyond our control.
As user you have to understand and agree that any material and/or data downloaded or otherwise obtained from the website of Go Disha is done entirely at your own discretion and risk and they will be exclusively responsible for any damage to their computer systems or any other loss that results from such material and/or data.
Go Disha reserves its exclusive right in its sole discretion to alter, limit or discontinue the Site or any material posted herein, in any respect. Go Disha shall have no obligation to take the needs of any User into consideration in connection therewith.
Go Disha reserves its right to prevent in its sole discretion any user access to this Site or any segment thereof without notice.
Go Disha holds the right to commence all necessary steps to make certain that the security, safety and integrity of Go Disha's systems as well as its patron's interests are and remain, well–protected. For this purpose, Go Disha may take a variety of steps to prove and confirm the genuineness, applicability and legitimacy of orders placed by you.
If Go Disha by its sole and exclusive right comes to a conclusion that the said orders are not or do not realistically appear to be, genuine, enforceable or legitimate, then Go Disha may cancel the said orders at any time up to 5 hours before the scheduled time of departure of the relevant flight or 5 hours before the expected date of visit to any property booked through Go Disha.
If any dispute arises between you and Go Disha during your use of the Site or thereafter, related to and arising from your use or attempt to use this Site, the dispute shall be referred to arbitration. The place of arbitration shall be Mumbai. The arbitration proceedings shall be in the English language.
The said arbitration proceedings shall be governed and construed in accordance with the Arbitration and Conciliation Act, 1996 and modification thereof as in force at the relevant time.
These terms and conditions are governed by and shall be interpreted in accordance with the laws of the Republic of India and any dispute shall entirely be subject to the jurisdiction of the appropriate Courts situated at Mumbai, Maharashtra, India.