text:
#ifndef LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_PARSER_NEW_H_
#define LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_PARSER_NEW_H_

#include <iterator>
#include <map>
#include <set>
#include <string>
#include <utility>  // pair
#include <vector>

#include BOSS_WEBRTC_U_call__video_receive_stream_h //original-code:"call/video_receive_stream.h"
#include BOSS_WEBRTC_U_call__video_send_stream_h //original-code:"call/video_send_stream.h"
#include BOSS_WEBRTC_U_logging__rtc_event_log__events__rtc_event_ice_candidate_pair_h //original-code:"logging/rtc_event_log/events/rtc_event_ice_candidate_pair.h"
#include BOSS_WEBRTC_U_logging__rtc_event_log__events__rtc_event_ice_candidate_pair_config_h //original-code:"logging/rtc_event_log/events/rtc_event_ice_candidate_pair_config.h"
#include BOSS_WEBRTC_U_logging__rtc_event_log__events__rtc_event_probe_result_failure_h //original-code:"logging/rtc_event_log/events/rtc_event_probe_result_failure.h"
#include BOSS_WEBRTC_U_logging__rtc_event_log__rtc_event_log_h //original-code:"logging/rtc_event_log/rtc_event_log.h"
#include BOSS_WEBRTC_U_logging__rtc_event_log__rtc_stream_config_h //original-code:"logging/rtc_event_log/rtc_stream_config.h"
#include BOSS_WEBRTC_U_modules__audio_coding__audio_network_adaptor__include__audio_network_adaptor_h //original-code:"modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor.h"
#include BOSS_WEBRTC_U_modules__rtp_rtcp__include__rtp_header_extension_map_h //original-code:"modules/rtp_rtcp/include/rtp_header_extension_map.h"
#include BOSS_WEBRTC_U_modules__rtp_rtcp__source__rtcp_packet__common_header_h //original-code:"modules/rtp_rtcp/source/rtcp_packet/common_header.h"
#include BOSS_WEBRTC_U_modules__rtp_rtcp__source__rtcp_packet__nack_h //original-code:"modules/rtp_rtcp/source/rtcp_packet/nack.h"
#include BOSS_WEBRTC_U_modules__rtp_rtcp__source__rtcp_packet__receiver_report_h //original-code:"modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
#include BOSS_WEBRTC_U_modules__rtp_rtcp__source__rtcp_packet__remb_h //original-code:"modules/rtp_rtcp/source/rtcp_packet/remb.h"
#include BOSS_WEBRTC_U_modules__rtp_rtcp__source__rtcp_packet__sender_report_h //original-code:"modules/rtp_rtcp/source/rtcp_packet/sender_report.h"
#include BOSS_WEBRTC_U_modules__rtp_rtcp__source__rtcp_packet__transport_feedback_h //original-code:"modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
#include BOSS_WEBRTC_U_rtc_base__ignore_wundef_h //original-code:"rtc_base/ignore_wundef.h"

// Files generated at build-time by the protobuf compiler.
RTC_PUSH_IGNORING_WUNDEF()
#ifdef WEBRTC_ANDROID_PLATFORM_BUILD
#include "external/webrtc/webrtc/logging/rtc_event_log/rtc_event_log.pb.h"
#else
#include "logging/rtc_event_log/rtc_event_log.pd.h"
#endif
RTC_POP_IGNORING_WUNDEF()

namespace webrtc {

enum class BandwidthUsage;
struct AudioEncoderRuntimeConfig;

struct LoggedAlrStateEvent {
  int64_t timestamp_us;
  bool in_alr;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedAudioPlayoutEvent {
  int64_t timestamp_us;
  uint32_t ssrc;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedAudioNetworkAdaptationEvent {
  int64_t timestamp_us;
  AudioEncoderRuntimeConfig config;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedBweDelayBasedUpdate {
  int64_t timestamp_us;
  int32_t bitrate_bps;
  BandwidthUsage detector_state;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedBweLossBasedUpdate {
  int64_t timestamp_us;
  int32_t bitrate_bps;
  uint8_t fraction_lost;
  int32_t expected_packets;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedBweProbeClusterCreatedEvent {
  int64_t timestamp_us;
  int32_t id;
  int32_t bitrate_bps;
  uint32_t min_packets;
  uint32_t min_bytes;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedBweProbeSuccessEvent {
  int64_t timestamp_us;
  int32_t id;
  int32_t bitrate_bps;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedBweProbeFailureEvent {
  int64_t timestamp_us;
  int32_t id;
  ProbeFailureReason failure_reason;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedIceCandidatePairConfig {
  int64_t timestamp_us;
  IceCandidatePairConfigType type;
  uint32_t candidate_pair_id;
  IceCandidateType local_candidate_type;
  IceCandidatePairProtocol local_relay_protocol;
  IceCandidateNetworkType local_network_type;
  IceCandidatePairAddressFamily local_address_family;
  IceCandidateType remote_candidate_type;
  IceCandidatePairAddressFamily remote_address_family;
  IceCandidatePairProtocol candidate_pair_protocol;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedIceCandidatePairEvent {
  int64_t timestamp_us;
  IceCandidatePairEventType type;
  uint32_t candidate_pair_id;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedRtpPacket {
  LoggedRtpPacket(uint64_t timestamp_us,
                  RTPHeader header,
                  size_t header_length,
                  size_t total_length)
      : timestamp_us(timestamp_us),
        header(header),
        header_length(header_length),
        total_length(total_length) {}
  int64_t timestamp_us;
  // TODO(terelius): This allocates space for 15 CSRCs even if none are used.
  RTPHeader header;
  size_t header_length;
  size_t total_length;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedRtpPacketIncoming {
  LoggedRtpPacketIncoming(uint64_t timestamp_us,
                          RTPHeader header,
                          size_t header_length,
                          size_t total_length)
      : rtp(timestamp_us, header, header_length, total_length) {}
  LoggedRtpPacket rtp;
  int64_t log_time_us() const { return rtp.timestamp_us; }
  int64_t log_time_ms() const { return rtp.timestamp_us / 1000; }
};

struct LoggedRtpPacketOutgoing {
  LoggedRtpPacketOutgoing(uint64_t timestamp_us,
                          RTPHeader header,
                          size_t header_length,
                          size_t total_length)
      : rtp(timestamp_us, header, header_length, total_length) {}
  LoggedRtpPacket rtp;
  int64_t log_time_us() const { return rtp.timestamp_us; }
  int64_t log_time_ms() const { return rtp.timestamp_us / 1000; }
};

struct LoggedRtcpPacket {
  LoggedRtcpPacket(uint64_t timestamp_us,
                   const uint8_t* packet,
                   size_t total_length)
      : timestamp_us(timestamp_us), raw_data(packet, packet + total_length) {}
  int64_t timestamp_us;
  std::vector<uint8_t> raw_data;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedRtcpPacketIncoming {
  LoggedRtcpPacketIncoming(uint64_t timestamp_us,
                           const uint8_t* packet,
                           size_t total_length)
      : rtcp(timestamp_us, packet, total_length) {}
  LoggedRtcpPacket rtcp;
  int64_t log_time_us() const { return rtcp.timestamp_us; }
  int64_t log_time_ms() const { return rtcp.timestamp_us / 1000; }
};

struct LoggedRtcpPacketOutgoing {
  LoggedRtcpPacketOutgoing(uint64_t timestamp_us,
                           const uint8_t* packet,
                           size_t total_length)
      : rtcp(timestamp_us, packet, total_length) {}
  LoggedRtcpPacket rtcp;
  int64_t log_time_us() const { return rtcp.timestamp_us; }
  int64_t log_time_ms() const { return rtcp.timestamp_us / 1000; }
};

struct LoggedRtcpPacketReceiverReport {
  int64_t timestamp_us;
  rtcp::ReceiverReport rr;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedRtcpPacketSenderReport {
  int64_t timestamp_us;
  rtcp::SenderReport sr;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedRtcpPacketRemb {
  int64_t timestamp_us;
  rtcp::Remb remb;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedRtcpPacketNack {
  int64_t timestamp_us;
  rtcp::Nack nack;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedRtcpPacketTransportFeedback {
  int64_t timestamp_us;
  rtcp::TransportFeedback transport_feedback;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedStartEvent {
  explicit LoggedStartEvent(uint64_t timestamp_us)
      : timestamp_us(timestamp_us) {}
  int64_t timestamp_us;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedStopEvent {
  explicit LoggedStopEvent(uint64_t timestamp_us)
      : timestamp_us(timestamp_us) {}
  int64_t timestamp_us;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedAudioRecvConfig {
  LoggedAudioRecvConfig(int64_t timestamp_us, const rtclog::StreamConfig config)
      : timestamp_us(timestamp_us), config(config) {}
  int64_t timestamp_us;
  rtclog::StreamConfig config;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedAudioSendConfig {
  LoggedAudioSendConfig(int64_t timestamp_us, const rtclog::StreamConfig config)
      : timestamp_us(timestamp_us), config(config) {}
  int64_t timestamp_us;
  rtclog::StreamConfig config;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedVideoRecvConfig {
  LoggedVideoRecvConfig(int64_t timestamp_us, const rtclog::StreamConfig config)
      : timestamp_us(timestamp_us), config(config) {}
  int64_t timestamp_us;
  rtclog::StreamConfig config;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

struct LoggedVideoSendConfig {
  LoggedVideoSendConfig(int64_t timestamp_us,
                        const std::vector<rtclog::StreamConfig> configs)
      : timestamp_us(timestamp_us), configs(configs) {}
  int64_t timestamp_us;
  std::vector<rtclog::StreamConfig> configs;
  int64_t log_time_us() const { return timestamp_us; }
  int64_t log_time_ms() const { return timestamp_us / 1000; }
};

template <typename T>
class PacketView;

template <typename T>
class PacketIterator {
  friend class PacketView<T>;

 public:
  // Standard iterator traits.
  using difference_type = std::ptrdiff_t;
  using value_type = T;
  using pointer = T*;
  using reference = T&;
  using iterator_category = std::bidirectional_iterator_tag;

  // The default-contructed iterator is meaningless, but is required by the
  // ForwardIterator concept.
  PacketIterator() : ptr_(nullptr), element_size_(0) {}
  PacketIterator(const PacketIterator& other)
      : ptr_(other.ptr_), element_size_(other.element_size_) {}
  PacketIterator(const PacketIterator&& other)
      : ptr_(other.ptr_), element_size_(other.element_size_) {}
  ~PacketIterator() = default;

  PacketIterator& operator=(const PacketIterator& other) {
    ptr_ = other.ptr_;
    element_size_ = other.element_size_;
    return *this;
  }
  PacketIterator& operator=(const PacketIterator&& other) {
    ptr_ = other.ptr_;
    element_size_ = other.element_size_;
    return *this;
  }

  bool operator==(const PacketIterator<T>& other) const {
    RTC_DCHECK_EQ(element_size_, other.element_size_);
    return ptr_ == other.ptr_;
  }
  bool operator!=(const PacketIterator<T>& other) const {
    RTC_DCHECK_EQ(element_size_, other.element_size_);
    return ptr_ != other.ptr_;
  }

  PacketIterator& operator++() {
    ptr_ += element_size_;
    return *this;
  }
  PacketIterator& operator--() {
    ptr_ -= element_size_;
    return *this;
  }
  PacketIterator operator++(int) {
    PacketIterator iter_copy(ptr_, element_size_);
    ptr_ += element_size_;
    return iter_copy;
  }
  PacketIterator operator--(int) {
    PacketIterator iter_copy(ptr_, element_size_);
    ptr_ -= element_size_;
    return iter_copy;
  }

  T& operator*() { return *reinterpret_cast<T*>(ptr_); }
  const T& operator*() const { return *reinterpret_cast<const T*>(ptr_); }

 private:
  PacketIterator(typename std::conditional<std::is_const<T>::value,
                                           const void*,
                                           void*>::type p,
                 size_t s)
      : ptr_(reinterpret_cast<decltype(ptr_)>(p)), element_size_(s) {}

  typename std::conditional<std::is_const<T>::value, const char*, char*>::type
      ptr_;
  size_t element_size_;
};

// Suppose that we have a struct S where we are only interested in a specific
// member M. Given an array of S, PacketView can be used to treat the array
// as an array of M, without exposing the type S to surrounding code and without
// accessing the member through a virtual function. In this case, we want to
// have a common view for incoming and outgoing RtpPackets, hence the PacketView
// name.
// Note that constructing a PacketView bypasses the typesystem, so the caller
// has to take extra care when constructing these objects. The implementation
// also requires that the containing struct is standard-layout (e.g. POD).
//
// Usage example:
// struct A {...};
// struct B { A a; ...};
// struct C { A a; ...};
// size_t len = 10;
// B* array1 = new B[len];
// C* array2 = new C[len];
//
// PacketView<A> view1 = PacketView<A>::Create<B>(array1, len, offsetof(B, a));
// PacketView<A> view2 = PacketView<A>::Create<C>(array2, len, offsetof(C, a));
//
// The following code works with either view1 or view2.
// void f(PacketView<A> view)
// for (A& a : view) {
//   DoSomething(a);
// }
template <typename T>
class PacketView {
 public:
  template <typename U>
  static PacketView Create(U* ptr, size_t num_elements, size_t offset) {
    static_assert(std::is_standard_layout<U>::value,
                  "PacketView can only be created for standard layout types.");
    static_assert(std::is_standard_layout<T>::value,
                  "PacketView can only be created for standard layout types.");
    return PacketView(ptr, num_elements, offset, sizeof(U));
  }

  using iterator = PacketIterator<T>;
  using const_iterator = PacketIterator<const T>;
  using reverse_iterator = std::reverse_iterator<iterator>;
  using const_reverse_iterator = std::reverse_iterator<const_iterator>;

  iterator begin() { return iterator(data_, element_size_); }
  iterator end() {
    auto end_ptr = data_ + num_elements_ * element_size_;
    return iterator(end_ptr, element_size_);
  }

  const_iterator begin() const { return const_iterator(data_, element_size_); }
  const_iterator end() const {
    auto end_ptr = data_ + num_elements_ * element_size_;
    return const_iterator(end_ptr, element_size_);
  }

  reverse_iterator rbegin() { return reverse_iterator(end()); }
  reverse_iterator rend() { return reverse_iterator(begin()); }

  const_reverse_iterator rbegin() const {
    return const_reverse_iterator(end());
  }
  const_reverse_iterator rend() const {
    return const_reverse_iterator(begin());
  }

  size_t size() const { return num_elements_; }

  T& operator[](size_t i) {
    auto elem_ptr = data_ + i * element_size_;
    return *reinterpret_cast<T*>(elem_ptr);
  }

  const T& operator[](size_t i) const {
    auto elem_ptr = data_ + i * element_size_;
    return *reinterpret_cast<const T*>(elem_ptr);
  }

 private:
  PacketView(typename std::conditional<std::is_const<T>::value,
                                       const void*,
                                       void*>::type data,
             size_t num_elements,
             size_t offset,
             size_t element_size)
      : data_(reinterpret_cast<decltype(data_)>(data) + offset),
        num_elements_(num_elements),
        element_size_(element_size) {}

  typename std::conditional<std::is_const<T>::value, const char*, char*>::type
      data_;
  size_t num_elements_;
  size_t element_size_;
};

class ParsedRtcEventLogNew {
  friend class RtcEventLogTestHelper;

 public:
  enum class EventType {
    UNKNOWN_EVENT = 0,
    LOG_START = 1,
    LOG_END = 2,
    RTP_EVENT = 3,
    RTCP_EVENT = 4,
    AUDIO_PLAYOUT_EVENT = 5,
    LOSS_BASED_BWE_UPDATE = 6,
    DELAY_BASED_BWE_UPDATE = 7,
    VIDEO_RECEIVER_CONFIG_EVENT = 8,
    VIDEO_SENDER_CONFIG_EVENT = 9,
    AUDIO_RECEIVER_CONFIG_EVENT = 10,
    AUDIO_SENDER_CONFIG_EVENT = 11,
    AUDIO_NETWORK_ADAPTATION_EVENT = 16,
    BWE_PROBE_CLUSTER_CREATED_EVENT = 17,
    BWE_PROBE_FAILURE_EVENT = 18,
    BWE_PROBE_SUCCESS_EVENT = 19,
    ALR_STATE_EVENT = 20,
    ICE_CANDIDATE_PAIR_CONFIG = 21,
    ICE_CANDIDATE_PAIR_EVENT = 22,
  };

  enum class MediaType { ANY, AUDIO, VIDEO, DATA };
  enum class UnconfiguredHeaderExtensions {
    kDontParse,
    kAttemptWebrtcDefaultConfig
  };

  struct LoggedRtpStreamIncoming {
    uint32_t ssrc;
    std::vector<LoggedRtpPacketIncoming> incoming_packets;
  };

  struct LoggedRtpStreamOutgoing {
    uint32_t ssrc;
    std::vector<LoggedRtpPacketOutgoing> outgoing_packets;
  };

  struct LoggedRtpStreamView {
    LoggedRtpStreamView(uint32_t ssrc,
                        const LoggedRtpPacketIncoming* ptr,
                        size_t num_elements)
        : ssrc(ssrc),
          packet_view(PacketView<const LoggedRtpPacket>::Create(
              ptr,
              num_elements,
              offsetof(LoggedRtpPacketIncoming, rtp))) {}
    LoggedRtpStreamView(uint32_t ssrc,
                        const LoggedRtpPacketOutgoing* ptr,
                        size_t num_elements)
        : ssrc(ssrc),
          packet_view(PacketView<const LoggedRtpPacket>::Create(
              ptr,
              num_elements,
              offsetof(LoggedRtpPacketOutgoing, rtp))) {}
    uint32_t ssrc;
    PacketView<const LoggedRtpPacket> packet_view;
  };

  explicit ParsedRtcEventLogNew(
      UnconfiguredHeaderExtensions parse_unconfigured_header_extensions =
          UnconfiguredHeaderExtensions::kDontParse);

  // Clears previously parsed events and resets the ParsedRtcEventLogNew to an
  // empty state.
  void Clear();

  // Reads an RtcEventLog file and returns true if parsing was successful.
  bool ParseFile(const std::string& file_name);

  // Reads an RtcEventLog from a string and returns true if successful.
  bool ParseString(const std::string& s);

  // Reads an RtcEventLog from an istream and returns true if successful.
  bool ParseStream(
      std::istream& stream);  // no-presubmit-check TODO(webrtc:8982)

  // Returns the number of events in an EventStream.
  size_t GetNumberOfEvents() const;

  // Reads the arrival timestamp (in microseconds) from a rtclog::Event.
  int64_t GetTimestamp(size_t index) const;
  int64_t GetTimestamp(const rtclog::Event& event) const;

  // Reads the event type of the rtclog::Event at |index|.
  EventType GetEventType(size_t index) const;
  EventType GetEventType(const rtclog::Event& event) const;

  // Reads the header, direction, header length and packet length from the RTP
  // event at |index|, and stores the values in the corresponding output
  // parameters. Each output parameter can be set to nullptr if that value
  // isn't needed.
  // NB: The header must have space for at least IP_PACKET_SIZE bytes.
  // Returns: a pointer to a header extensions map acquired from parsing
  // corresponding Audio/Video Sender/Receiver config events.
  // Warning: if the same SSRC is reused by both video and audio streams during
  // call, extensions maps may be incorrect (the last one would be returned).
  const webrtc::RtpHeaderExtensionMap* GetRtpHeader(
      size_t index,
      PacketDirection* incoming,
      uint8_t* header,
      size_t* header_length,
      size_t* total_length,
      int* probe_cluster_id) const;
  const webrtc::RtpHeaderExtensionMap* GetRtpHeader(
      const rtclog::Event& event,
      PacketDirection* incoming,
      uint8_t* header,
      size_t* header_length,
      size_t* total_length,
      int* probe_cluster_id) const;

  // Reads packet, direction and packet length from the RTCP event at |index|,
  // and stores the values in the corresponding output parameters.
  // Each output parameter can be set to nullptr if that value isn't needed.
  // NB: The packet must have space for at least IP_PACKET_SIZE bytes.
  void GetRtcpPacket(size_t index,
                     PacketDirection* incoming,
                     uint8_t* packet,
                     size_t* length) const;
  void GetRtcpPacket(const rtclog::Event& event,
                     PacketDirection* incoming,
                     uint8_t* packet,
                     size_t* length) const;

  // Reads a video receive config event to a StreamConfig struct.
  // Only the fields that are stored in the protobuf will be written.
  rtclog::StreamConfig GetVideoReceiveConfig(size_t index) const;

  // Reads a video send config event to a StreamConfig struct. If the proto
  // contains multiple SSRCs and RTX SSRCs (this used to be the case for
  // simulcast streams) then we return one StreamConfig per SSRC,RTX_SSRC pair.
  // Only the fields that are stored in the protobuf will be written.
  std::vector<rtclog::StreamConfig> GetVideoSendConfig(size_t index) const;

  // Reads a audio receive config event to a StreamConfig struct.
  // Only the fields that are stored in the protobuf will be written.
  rtclog::StreamConfig GetAudioReceiveConfig(size_t index) const;

  // Reads a config event to a StreamConfig struct.
  // Only the fields that are stored in the protobuf will be written.
  rtclog::StreamConfig GetAudioSendConfig(size_t index) const;

  // Reads the SSRC from the audio playout event at |index|. The SSRC is stored
  // in the output parameter ssrc. The output parameter can be set to nullptr
  // and in that case the function only asserts that the event is well formed.
  LoggedAudioPlayoutEvent GetAudioPlayout(size_t index) const;

  // Reads bitrate, fraction loss (as defined in RFC 1889) and total number of
  // expected packets from the loss based BWE event at |index| and stores the
  // values in
  // the corresponding output parameters. Each output parameter can be set to
  // nullptr if that
  // value isn't needed.
  LoggedBweLossBasedUpdate GetLossBasedBweUpdate(size_t index) const;

  // Reads bitrate and detector_state from the delay based BWE event at |index|
  // and stores the values in the corresponding output parameters. Each output
  // parameter can be set to nullptr if that
  // value isn't needed.
  LoggedBweDelayBasedUpdate GetDelayBasedBweUpdate(size_t index) const;

  // Reads a audio network adaptation event to a (non-NULL)
  // AudioEncoderRuntimeConfig struct. Only the fields that are
  // stored in the protobuf will be written.
  LoggedAudioNetworkAdaptationEvent GetAudioNetworkAdaptation(
      size_t index) const;

  LoggedBweProbeClusterCreatedEvent GetBweProbeClusterCreated(
      size_t index) const;

  LoggedBweProbeFailureEvent GetBweProbeFailure(size_t index) const;
  LoggedBweProbeSuccessEvent GetBweProbeSuccess(size_t index) const;

  MediaType GetMediaType(uint32_t ssrc, PacketDirection direction) const;

  LoggedAlrStateEvent GetAlrState(size_t index) const;

  LoggedIceCandidatePairConfig GetIceCandidatePairConfig(size_t index) const;

  LoggedIceCandidatePairEvent GetIceCandidatePairEvent(size_t index) const;

  // Configured SSRCs.
  const std::set<uint32_t>& incoming_rtx_ssrcs() const {
    return incoming_rtx_ssrcs_;
  }

  const std::set<uint32_t>& incoming_video_ssrcs() const {
    return incoming_video_ssrcs_;
  }

  const std::set<uint32_t>& incoming_audio_ssrcs() const {
    return incoming_audio_ssrcs_;
  }

  const std::set<uint32_t>& outgoing_rtx_ssrcs() const {
    return outgoing_rtx_ssrcs_;
  }

  const std::set<uint32_t>& outgoing_video_ssrcs() const {
    return outgoing_video_ssrcs_;
  }

  const std::set<uint32_t>& outgoing_audio_ssrcs() const {
    return outgoing_audio_ssrcs_;
  }

  // Stream configurations.
  const std::vector<LoggedAudioRecvConfig>& audio_recv_configs() const {
    return audio_recv_configs_;
  }

  const std::vector<LoggedAudioSendConfig>& audio_send_configs() const {
    return audio_send_configs_;
  }

  const std::vector<LoggedVideoRecvConfig>& video_recv_configs() const {
    return video_recv_configs_;
  }

  const std::vector<LoggedVideoSendConfig>& video_send_configs() const {
    return video_send_configs_;
  }

  // Beginning and end of log segments.
  const std::vector<LoggedStartEvent>& start_log_events() const {
    return start_log_events_;
  }

  const std::vector<LoggedStopEvent>& stop_log_events() const {
    return stop_log_events_;
  }

  // Audio
  const std::map<uint32_t, std::vector<LoggedAudioPlayoutEvent>>&
  audio_playout_events() const {
    return audio_playout_events_;
  }

  const std::vector<LoggedAudioNetworkAdaptationEvent>&
  audio_network_adaptation_events() const {
    return audio_network_adaptation_events_;
  }

  // Bandwidth estimation
  const std::vector<LoggedBweProbeClusterCreatedEvent>&
  bwe_probe_cluster_created_events() const {
    return bwe_probe_cluster_created_events_;
  }

  const std::vector<LoggedBweProbeFailureEvent>& bwe_probe_failure_events()
      const {
    return bwe_probe_failure_events_;
  }

  const std::vector<LoggedBweProbeSuccessEvent>& bwe_probe_success_events()
      const {
    return bwe_probe_success_events_;
  }

  const std::vector<LoggedBweDelayBasedUpdate>& bwe_delay_updates() const {
    return bwe_delay_updates_;
  }

  const std::vector<LoggedBweLossBasedUpdate>& bwe_loss_updates() const {
    return bwe_loss_updates_;
  }

  const std::vector<LoggedAlrStateEvent>& alr_state_events() const {
    return alr_state_events_;
  }

  // ICE events
  const std::vector<LoggedIceCandidatePairConfig>& ice_candidate_pair_configs()
      const {
    return ice_candidate_pair_configs_;
  }

  const std::vector<LoggedIceCandidatePairEvent>& ice_candidate_pair_events()
      const {
    return ice_candidate_pair_events_;
  }

  // RTP
  const std::vector<LoggedRtpStreamIncoming>& incoming_rtp_packets_by_ssrc()
      const {
    return incoming_rtp_packets_by_ssrc_;
  }

  const std::vector<LoggedRtpStreamOutgoing>& outgoing_rtp_packets_by_ssrc()
      const {
    return outgoing_rtp_packets_by_ssrc_;
  }

  const std::vector<LoggedRtpStreamView>& rtp_packets_by_ssrc(
      PacketDirection direction) const {
    if (direction == kIncomingPacket)
      return incoming_rtp_packet_views_by_ssrc_;
    else
      return outgoing_rtp_packet_views_by_ssrc_;
  }

  // RTCP
  const std::vector<LoggedRtcpPacketIncoming>& incoming_rtcp_packets() const {
    return incoming_rtcp_packets_;
  }

  const std::vector<LoggedRtcpPacketOutgoing>& outgoing_rtcp_packets() const {
    return outgoing_rtcp_packets_;
  }

  const std::vector<LoggedRtcpPacketReceiverReport>& receiver_reports(
      PacketDirection direction) const {
    if (direction == kIncomingPacket) {
      return incoming_rr_;
    } else {
      return outgoing_rr_;
    }
  }

  const std::vector<LoggedRtcpPacketSenderReport>& sender_reports(
      PacketDirection direction) const {
    if (direction == kIncomingPacket) {
      return incoming_sr_;
    } else {
      return outgoing_sr_;
    }
  }

  const std::vector<LoggedRtcpPacketNack>& nacks(
      PacketDirection direction) const {
    if (direction == kIncomingPacket) {
      return incoming_nack_;
    } else {
      return outgoing_nack_;
    }
  }

  const std::vector<LoggedRtcpPacketRemb>& rembs(
      PacketDirection direction) const {
    if (direction == kIncomingPacket) {
      return incoming_remb_;
    } else {
      return outgoing_remb_;
    }
  }

  const std::vector<LoggedRtcpPacketTransportFeedback>& transport_feedbacks(
      PacketDirection direction) const {
    if (direction == kIncomingPacket) {
      return incoming_transport_feedback_;
    } else {
      return outgoing_transport_feedback_;
    }
  }

  int64_t first_timestamp() const { return first_timestamp_; }
  int64_t last_timestamp() const { return last_timestamp_; }

 private:
  bool ParseStreamInternal(
      std::istream& stream);  // no-presubmit-check TODO(webrtc:8982)

  void StoreParsedEvent(const rtclog::Event& event);

  rtclog::StreamConfig GetVideoReceiveConfig(const rtclog::Event& event) const;
  std::vector<rtclog::StreamConfig> GetVideoSendConfig(
      const rtclog::Event& event) const;
  rtclog::StreamConfig GetAudioReceiveConfig(const rtclog::Event& event) const;
  rtclog::StreamConfig GetAudioSendConfig(const rtclog::Event& event) const;

  LoggedAudioPlayoutEvent GetAudioPlayout(const rtclog::Event& event) const;

  LoggedBweLossBasedUpdate GetLossBasedBweUpdate(
      const rtclog::Event& event) const;
  LoggedBweDelayBasedUpdate GetDelayBasedBweUpdate(
      const rtclog::Event& event) const;

  LoggedAudioNetworkAdaptationEvent GetAudioNetworkAdaptation(
      const rtclog::Event& event) const;

  LoggedBweProbeClusterCreatedEvent GetBweProbeClusterCreated(
      const rtclog::Event& event) const;
  LoggedBweProbeFailureEvent GetBweProbeFailure(
      const rtclog::Event& event) const;
  LoggedBweProbeSuccessEvent GetBweProbeSuccess(
      const rtclog::Event& event) const;

  LoggedAlrStateEvent GetAlrState(const rtclog::Event& event) const;

  LoggedIceCandidatePairConfig GetIceCandidatePairConfig(
      const rtclog::Event& event) const;
  LoggedIceCandidatePairEvent GetIceCandidatePairEvent(
      const rtclog::Event& event) const;

  std::vector<rtclog::Event> events_;

  struct Stream {
    Stream(uint32_t ssrc,
           MediaType media_type,
           PacketDirection direction,
           webrtc::RtpHeaderExtensionMap map)
        : ssrc(ssrc),
          media_type(media_type),
          direction(direction),
          rtp_extensions_map(map) {}
    uint32_t ssrc;
    MediaType media_type;
    PacketDirection direction;
    webrtc::RtpHeaderExtensionMap rtp_extensions_map;
  };

  const UnconfiguredHeaderExtensions parse_unconfigured_header_extensions_;

  // Make a default extension map for streams without configuration information.
  // TODO(ivoc): Once configuration of audio streams is stored in the event log,
  //             this can be removed. Tracking bug: webrtc:6399
  RtpHeaderExtensionMap default_extension_map_;

  // Tracks what each stream is configured for. Note that a single SSRC can be
  // in several sets. For example, the SSRC used for sending video over RTX
  // will appear in both video_ssrcs_ and rtx_ssrcs_. In the unlikely case that
  // an SSRC is reconfigured to a different media type mid-call, it will also
  // appear in multiple sets.
  std::set<uint32_t> incoming_rtx_ssrcs_;
  std::set<uint32_t> incoming_video_ssrcs_;
  std::set<uint32_t> incoming_audio_ssrcs_;
  std::set<uint32_t> outgoing_rtx_ssrcs_;
  std::set<uint32_t> outgoing_video_ssrcs_;
  std::set<uint32_t> outgoing_audio_ssrcs_;

  // Maps an SSRC to the parsed  RTP headers in that stream. Header extensions
  // are parsed if the stream has been configured. This is only used for
  // grouping the events by SSRC during parsing; the events are moved to
  // incoming_rtp_packets_by_ssrc_ once the parsing is done.
  std::map<uint32_t, std::vector<LoggedRtpPacketIncoming>>
      incoming_rtp_packets_map_;
  std::map<uint32_t, std::vector<LoggedRtpPacketOutgoing>>
      outgoing_rtp_packets_map_;

  // RTP headers.
  std::vector<LoggedRtpStreamIncoming> incoming_rtp_packets_by_ssrc_;
  std::vector<LoggedRtpStreamOutgoing> outgoing_rtp_packets_by_ssrc_;
  std::vector<LoggedRtpStreamView> incoming_rtp_packet_views_by_ssrc_;
  std::vector<LoggedRtpStreamView> outgoing_rtp_packet_views_by_ssrc_;

  // Raw RTCP packets.
  std::vector<LoggedRtcpPacketIncoming> incoming_rtcp_packets_;
  std::vector<LoggedRtcpPacketOutgoing> outgoing_rtcp_packets_;

  // Parsed RTCP messages. Currently not separated based on SSRC.
  std::vector<LoggedRtcpPacketReceiverReport> incoming_rr_;
  std::vector<LoggedRtcpPacketReceiverReport> outgoing_rr_;
  std::vector<LoggedRtcpPacketSenderReport> incoming_sr_;
  std::vector<LoggedRtcpPacketSenderReport> outgoing_sr_;
  std::vector<LoggedRtcpPacketNack> incoming_nack_;
  std::vector<LoggedRtcpPacketNack> outgoing_nack_;
  std::vector<LoggedRtcpPacketRemb> incoming_remb_;
  std::vector<LoggedRtcpPacketRemb> outgoing_remb_;
  std::vector<LoggedRtcpPacketTransportFeedback> incoming_transport_feedback_;
  std::vector<LoggedRtcpPacketTransportFeedback> outgoing_transport_feedback_;

  std::vector<LoggedStartEvent> start_log_events_;
  std::vector<LoggedStopEvent> stop_log_events_;

  std::map<uint32_t, std::vector<LoggedAudioPlayoutEvent>>
      audio_playout_events_;

  std::vector<LoggedAudioNetworkAdaptationEvent>
      audio_network_adaptation_events_;

  std::vector<LoggedBweProbeClusterCreatedEvent>
      bwe_probe_cluster_created_events_;

  std::vector<LoggedBweProbeFailureEvent> bwe_probe_failure_events_;
  std::vector<LoggedBweProbeSuccessEvent> bwe_probe_success_events_;

  std::vector<LoggedBweDelayBasedUpdate> bwe_delay_updates_;

  // A list of all updates from the send-side loss-based bandwidth estimator.
  std::vector<LoggedBweLossBasedUpdate> bwe_loss_updates_;

  std::vector<LoggedAlrStateEvent> alr_state_events_;

  std::vector<LoggedIceCandidatePairConfig> ice_candidate_pair_configs_;

  std::vector<LoggedIceCandidatePairEvent> ice_candidate_pair_events_;

  std::vector<LoggedAudioRecvConfig> audio_recv_configs_;
  std::vector<LoggedAudioSendConfig> audio_send_configs_;
  std::vector<LoggedVideoRecvConfig> video_recv_configs_;
  std::vector<LoggedVideoSendConfig> video_send_configs_;

  uint8_t last_incoming_rtcp_packet_[IP_PACKET_SIZE];
  uint8_t last_incoming_rtcp_packet_length_;

  int64_t first_timestamp_;
  int64_t last_timestamp_;

  // The extension maps are mutable to allow us to insert the default
  // configuration when parsing an RTP header for an unconfigured stream.
  mutable std::map<uint32_t, webrtc::RtpHeaderExtensionMap>
      incoming_rtp_extensions_maps_;
  mutable std::map<uint32_t, webrtc::RtpHeaderExtensionMap>
      outgoing_rtp_extensions_maps_;
};

}  // namespace webrtc

#endif  // LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_PARSER_NEW_H_


text:
Norway Chess: Caruana wins to stand above the rest
by André Schulz
6/8/2018 – Tension to the end! After Carlsen and Vachier-Lagrave drew early and Nakamura and Aronian followed the example a bit later, it was up to Caruana and So to decide if we would see a clear winner or a five-way playoff. So attacked bravely, but in a wild time-scramble, Caruana gained the upper hand and thus became tournament winner. Games annotated by GMs DANIEL FERNANDEZ and DANIEL KING | Photo: Lennart Ootes / Norway Chess
Two consecutive tournament wins ahead of Carlsen
Four players were at the top in the Norway Chess tournament at the start of round nine: Wesley So, Magnus Carlsen, Fabiano Caruana and Hikaru Nakamura. Caruana and So met each other, while Carlsen was dealt black against Maxime Vachier-Lagrave, and Nakamura faced off against Levon Aronian, also with black. Even Viswanathan Anand, with 3½ points, had chances jump into a tie for first with a win, although the 15th World Champion was black as well, against Sergey Karjakin.
Last round excitement | Photo: Lennart Ootes
Carlsen, was in no mood to take any chances against Vachier-Lagrave. When the game was in full swing on just move 17, the players began repeating moves in a position reached several times before. It certainly played a role that the two players trained together for Carlsen's 2016 World Championship title defence, as Magnus himself pointed out in the "confession box" (in Norwegian):
Carlsen explained that they had studied this line and it was a bit boring (56 seconds, Norwegian)
The World Champion conceded half the point. Considering his chances to reach a tiebreak as about 50/50, he was content to watch his rivals fight it out.
Levon Aronian and Hikaru Nakamura followed a variation of the Queen's Gambit which they had played once before, last year in London, through the 20th move.
With 20...Nge6, Black deviated from their previous encounter. The game continued for more than 20 moves, but there was no great tension. Gradually, most of the pieces disappeared and ultimately it made little sense to play the rook endgame.
Like Aronian and Nakamura, Karjakin and Anand also fought their game in the terrain of the of the Bf4 variation in the Queen's Gambit Declined. Karjakin chose a line with long castling and Anand answered with a plan Karjakin himself played against Ivanchuk last year. Karjakin, in contrast to Ivanchuk, followed an earlier stem game, Kasparov-Vaganian, 1992, when he played 13.Rxd5 (also the engine's top choice) and here Anand had a small innovation in store.
My Career Vol. 1
The first DVD with videos from Anand's chess career reflects the very beginning of that career and goes as far as 1999. It starts with his memories of how he first learned chess and shows his first great games (including those from the 1984 WCh for juniors). The high point of his early developmental phase was the winning of the 1987 WCh for juniors. After that, things continue in quick succession: the first victories over Kasparov, WCh candidate in both the FIDE and PCA cycles and the high point of the WCh match against Kasparov in 1995.
Running time: 3:48 hours
Karjakin and Anand
In a spirited game, chances were equal for some time, until Karjakin had a blackout.
Here White played 26.h4? and after 26...Ne5 the black knight has dual threats against c4 and also the more gruesome ugly 27... Ng4. The game lasted a few more moves, but White could not recover from the blow. A disappointing end to the tournament for Karjakin.
Fabiano Caruana and Wesley So entered an initially calm variation of the Ruy Lopez. Then So launched his g-pawn on the kingside, going for an attack whil castling on the opposite side, and the game's intensity begame to ramp up.
On the 32nd move, the pace quickened further as the players ran low on time. So sacrificed a pawn with 32...e4 and attacked the white king with Qe5 and Ng4.
The game reaches a critical phase | Photo: Lennart Ootes
Caruana defended himself and, at move 40, he thought he was winning — but he had overlooked a perpetual check opportunity after 41...Rd2 (instead of 41...Rd3 as So played in the game). Here's that fateful moment as seen on the live webcast:
So played Rd3 almost instantly, despite having earned an extra 50 minutes on the clock to consider his options — a huge oversight.
When the dust settled, So found himself in a hopeless endgame with a queen against two rooks and a bishop — not enough to continue playing, and tournament victory for Caruana.
"It's just a lucky break for me," Caruana noted afterwards, adding that while two tournament wins ahead of Carlsen is fantastic, he was not as proud of this one as his April triumph in Baden-Baden. He credited the pleasant Norwegian summer weather as providing important distraction after his first-round loss to Carlsen, and also noted the irony that he had been teamed up with Karjakin in the friendly rest-day cooking competition, only to go on to beat the Russian in their direct encounter the following day.
Learning a new profession!👌👌👌
Изучаем новую профессию!😉😉😉 pic.twitter.com/siCEKkSXbB
— Sergey Karjakin (@SergeyKaryakin) May 31, 2018
Here were the winner's thoughts in full, shortly after the game:
Caruana with commentators GM Simen Agdestein and IM Anna Rudolf
Congratulations quickly poured in on Twitter, many of which resembled this from Danish FM Carsten Hansen:
Another @FabianoCaruana tournament win. Big congrats to him. Needless to say, but it seems like the world's two strongest players will meet in November in London. #NorwayChess #AltiboxNorwayChess #chess https://t.co/Y5YQcmfLOB
— Carsten Hansen (@CazHansen) June 7, 2018
GM Daniel King provides our final daily video review
Games of Round 9 (annotated by GM Daniel Fernandez)
Translation and additional reporting: Macauley Peterson
Round 4: Karjakin and Aronian score, Ding withdraws
Round 5: Caruana's turn
Round 6: Carlsen's unfortunate bishop
Round 7: Anand gets his first win
Round 8: American trio challenges Carlsen
Round-up shows
<< Three leaders in American Continental Championship
Tune your tactics - Pawn Sacrifices >>
André Schulz André Schulz started working for ChessBase in 1991 and is an editor of ChessBase News.
KWRegan 6/11/2018 05:27
Did Karjakin miss 27.Rd8 Qxd1+! ?
ketchuplover 6/9/2018 02:03
Go Naka!
KevinC 6/8/2018 05:02
Excellent fighting spirit from Caruana and So.

redpajama_set_name: RedPajamaCommonCrawl


The North Central Missouri College Foundation is honored to announce the Charles H. Witten Memorial Scholarship. This recently endowed scholarship is made possible by the Charles Witten Estate and will benefit an NCMC sophomore pursuing an Associate in Applied Science (A.A.S.). First preference given to a student with an Agriculture & Natural Resources focus of study or transferring to a four-year degree.
Charles Witten was born March 18, 1927, and grew up on a farm outside Jamesport, Missouri. As a senior in Trenton High School in 1945, Charles enlisted in the Navy. After a short boot camp, he was shipped out to Okinawa, Japan and arrived two days after the Japanese surrender. Part of Charles' duties involved measuring radiation levels from the atomic bombs. Up until his death on December 22, 2017, Charles remained in good health and was a resident of northern Minnesota since the mid-1960s. After retiring from farming, he helped maintain the Peace Park in Baudette, Minnesota on the Canadian-American border.
Charles' remaining siblings include two sisters, Mrs. Caroline Stokes of Trenton, Missouri and Mrs. Claire Nisonger of Bloomington, Indiana. Both are alumni of Trenton Junior College before it became NCMC.
The $20,000 endowment from the Charles Witten Estate will make possible a $1000 scholarship with the first award is available for the spring 2020 semester. For more information about starting or donating to a current NCMC Foundation scholarship, please contact Alicia Endicott at 660-357-6403, [email protected] or visit http://www.ncmissouri.edu/alumni/gifts-in-action/.


text:
About EMC3
Worship Design
Discipleship Process
Fellowship to Hospitality
Transformational Networks
Real Discipleship Survey
Shift Training Opportunities
Discipleship Coaching Training
Transformational Process
Congregational Consultations
What That Looks Like Now
Home/Uncategorized/What That Looks Like Now
By Eddie Pipkin
I have a friend who likes to tease me about my go-to poke-you-with-a-stick question in any brainstorming conversation: "Yeah, but what does that LOOK like?" Ideas are fine, but they fizzle out on the brainstorming board if they can't be given flesh and bone structure. Concepts must move to the stage of practical details. Vision requires form and function.
One of the blockages in the ministry pipeline of "new ideas" is our inability to see beyond the current model. I'm not talking here about a roomful of people reciting the familiar mantra, "We've never done it that way before." I'm talking about when you and I — people who sincerely think of ourselves as open-minded innovators — just can't see beyond the old, familiar structures.
My friend and I were talking about an excursion that got together a bunch of former youth group folk for a weekend. It led to observations about what an incredible (yet mostly unchurched) group of twenty-somethings they were – the powerful ideas and service they had to offer. What a core group of fresh disciples they might potentially be! Yet my friend bogged down at this point, shaking his head: "C'mon, let's face it. There's no way they would ever be a part of _____ [unnamed local congregation X]. We don't have anything that would appeal to them." What he meant by that was that _____ did not offer a worship service that would appeal to them. This was our familiar metric for what a successful young adult group would look like: physical participation in existing weekly worship.
But what if we started with an entirely different set of questions and concerns? What if we started with a fresh set of metrics for measuring what matters?
What if our metrics (based on our understanding of discipleship) were . . .
Authentic community? (A community that stays connected and supports one another through struggles and difficulties; that celebrates together; that encourages one another; that stays in touch and knows what's going on in the lives of those who have chosen to be a part of it; that demonstrates forgiveness and restoration.)
Accountable spiritual growth? (A community that helps one another seek out the right path for each individual's spiritual advancement: the relevant spiritual disciplines, the words and music that speak to individual hearts, the worship that connects, challenges, and empowers; a community that insists on a continuing journey, unique to each perhaps, but committed to a more passionate life of Christ-following.)
Meaningful service? (A community that reminds its members that Jesus calls us to serve in ways large and small, to move beyond our selfish priorities to employ our unique talents and gifts to make a difference for others; a community that promotes regular individual forms of service and occasional group service projects together.)
A life that changes our community by reflecting the values and priorities of Jesus? (A community that helps us think through what it means to think, speak, and act like Jesus in all our relationships.)
Social justice? (A community that helps think through – and take action on – issues of human dignity and worth, righteous actions, and planetary stewardship.)
Generosity and intentionally living with margin to empower that generosity? (A community that forms clear standards about the power of biblical generosity, a rejection of materialism, and an exchange of ideas about how to prioritize our saving and spending so that we our own needs are met, but we also preserve resources to respond to the needs of others.)
While participation in traditional Sunday morning worship can (and does) facilitate these aspects of Christian community, it's not a requirement. My intent is not to undermine the wisdom of Hebrews 10: "And let us consider how we may spur one another on toward love and good deeds, not giving up meeting together, as some are in the habit of doing, but encouraging one another. . . ." Rather it is to rethink how we build community that translates those familiar phrases in new ways: "spur one another on," "meeting together," and "encouraging one another." A Sunday morning model for bringing these phrase to life is the model with which we are comfortable because it is the model we know – and the model towards which the resources of our local congregations are heavily weighted. But it is increasingly a model that feels less comfortable and more restrictive for those we lead.
It's a programming approach. Let's design a program or event to reach our objectives. But what if, instead of starting with programs as a means to channel resources, we started with the community itself? What if we started with reaching out to the community – gathering the community, engaging in conversations with the community? What if we leveraged technology to break down traditional barriers of geography and scheduling challenges?
Every community of faith has a unique context. Ginghamsburg Church pastor emeritus Mike Slaughter says, "Your church size and context are not barriers to mission and ministry. Passion, a little out-of-the-box creativity, and a hunger to reach the least and the lost are the true essentials for Kingdom growth." He wrote those words as part of a recent blog in which he explored three models for worship ministry that are non-traditional institutional models.
Recovery Ministry: Worship communities for addicts and their loved ones.
Recovery ministry is something any church, no matter its size, can initiate for moving outside its walls and addressing a tremendous felt need in its surrounding community. The addiction crisis is no respecter of persons, race, neighborhood or socioeconomic status.
Homeless Ministry: Worship communities for those struggling with homelessness that feature a blend of worship, a community meal, and connection to social services.
Serving with the poor in and among us creates some of the most powerful worship I have ever experienced. As Jesus noted, the poor we will always have with us. More than 2000 scriptures make plain God's special concern for the poor. Clearly if the gospel isn't good news for the poor, then it isn't the gospel.
House Church: Small-scale worship communities based in homes and appealing to those who struggle with traditional institutional worship. This kind of community is usually described as a start-up model, but it can also work in conjunction with existing congregations.
Simple organisms multiply faster than complex ones, and the house church can be a friendlier model to unchurched people who may not be attracted to a "big box store" church model.
None of these models is limited to a one-size-fits-all structure. Some of you are leading versions of them right now. There are as many potential variations as there are unique congregational contexts. A homeless worship ministry would be most often relevant in an urban setting but make less sense in a suburban setting. An addiction-oriented ministry, on the other hand could be equally powerful in a rural or urban setting. The key is context: know the community in which you are located and have a clear vision for the community you want to be. Do you have creative people? Turn them loose, and not just in support of your traditional structures (hey come play in the worship band!). Do the demographic studies indicate an underserved population of the old and alone? Seek them out, talk to them, and see how you could best serve them.
Using the criteria listed above, it would be possible to identify any nascent community and help the people in it build a model for connection that works uniquely for them and is still participating in meaningful ways with the local congregation.
We'll explore this topic further in an upcoming follow-up blog entry. In the meantime, how have you seen non-traditional approaches to building faith communities – and once built, how do such unique communities amplify the work of the local congregation? Share your stories.
Eddie Pipkin2019-03-18T09:14:40-05:00
About the Author: Eddie Pipkin
Eddie Pipkin has 30 years in ministry experience at churches in Georgia and Florida, primarily in the United Methodist Church. His ministry leadership includes stints in youth and children's ministry, creative worship design, outreach and missions, communications, special event coordination, and leadership development. He currently resides in Orlando, Florida. His original careers were in journalism and teaching at the college level, and he has a Master's Degree in English from the University of Central Florida (with an emphasis in creative writing). He also has worked as an independent editor, and he has an alter-ego known as the Rapping Lamb. He is an avid cyclist, outdoorsman and pie aficionado.
Visit the EMC3 Blog for more great content!
Service as Purpose
Hospitality as Relationships
Have Yourself an Authentic Little Christmas
Thomas E Acey September 6, 2018 at 10:39 am - Reply
Good blog, but what do you suggest when the church as a whole is not willing to commit to programs like this because its members are not motivated toward anything beyond attending services? You know of what I speak first hand.
Local Church Services
Denominational Support
EMC3 Store
Copyright 2016 EMC3 Coaching| All Rights Reserved | Web Design by Rock Paper Simple


text:
fma scar's brother voice actor japanese
Voiced most times by J Michael Tatum, Dameon Clarke, Ryōtarō Okiayu, Kenta Miyake. During this time, he tattoos both of his arms with a strange combination of Xingese Alkahestry and Amestrian Alchemy; the left being primarily reconstruction, and the right, deconstruction. Fullmetal Alchemist: Premium OVA Collection, Fullmetal Alchemist the Movie: Conqueror of Shamballa, Fullmetal Alchemist: The Sacred Star of Milos, Fullmetal Alchemist: Daughter of the Dusk, Fullmetal Alchemist: Brotherhood - Four-Panel Comic Theater. I'm certainly not the law of the land or anything. I've seen many fans preach about how "it lives up to the hype" and "can never receive too much praise". Yu Mizushima (2003 series)Takehito Koyasu (2009 series) Photos of the Fullmetal Alchemist: Brotherhood (Show) voice actors. A kind man and an excellent scholar, he was enthralled with learning about alchemy and later alkahestry. When he and Scar tried to flee from the mass killings, the State Alchemist Solf Kimblee pursued them, and used his alchemical powers to give Scar the unusual mark on his forehead as well as to amputate his right arm. With myProto, it is really quick to get a competitive quote and to have your prototype circuits built. - fullmetal alchemist brotherhood wrath vs scar - Saved from deviantart.com. Birthplace Yuzuru Fujimoto, Actor: Inosensu: Innocence. Now this is just the opinion of one guy. His intelligence was so great he was able to learn and discover the unnatural flow of alchemy in Amestris and develop a reverse transmutation circle to fix it, an amazing feat considering he had never been to Amestris or known of the homunculi. Brother Seiyū In Germany Roy is Johnny Depp (voiced by David Nathan who is the German voice actor for most of Depp's stuff.) A gentleman artist through and through, he considers his alchemically-induced explosions to be of the highest aesthetic and aims to make them as \"beautiful\" as possible in terms of scope, destructive capability and sound - sound apparently being the most important criterion based on his oft-showcased keen ear for explosives and his manic enthusiasm for loud eruptio… Fullmetal Alchemist (Japanese: 鋼の錬金術師, Hepburn: Hagane no Renkinjutsushi, lit. In the manga and 2009 anime storyline, this crown sticks up a bit, while the 2003 anime series depicts it as relatively flat and spread out. The lives he absorbed were of the people who died in the Ishval massacre. Human Unite peoples through alchemy Obtain the Philosopher's Stone and revive his lover (2003 anime) TV Show: Fullmetal Alchemist: Brotherhood Franchise: Fullmetal Alchemist Family Being a native Ishvalan, the man known as Scar carries the dark complexion and distinctive red irises of his people. The transmutation failed, leading to the birth of the homunculus Lust. He is the first to discover that something is strange about Amestris' alchemy. Scar (Japanese: スカー, Hepburn: Sukā), also known as Scarred Man (傷の男, Kizu no Otoko), is a fictional character from the Fullmetal Alchemist manga series and its adaptations created by Hiromu Arakawa.Scar is introduced as a villain who targets alchemists working for the state military from the fictional country of Amestris. In the manga and 2009 anime storyline, this crown sticks up a bit, while the 2003 anime series depicts it as relatively flat and spread out. Relationship Voice Actor: In Japanese most of the seiyuu had recently worked on Mobile Suit Gundam 00. 85 images (& sounds) of the Fullmetal Alchemist cast of characters. Fullmetal Alchemist VS Fullmetal Alchemist Brotherhood - Part 1 | Comparing FMA's Anime and Manga - Duration: 30:05. Scar's Brother first appears in Chapter 58: The Footsteps of Ruin, researching Amestrian and Xingese Alchemy in the hopes that he will be able to help in the fight against the state alchemists. Personal details Scar's older brother (real name unknown) was an Ishvalan scholar who studied Alchemy and, in the manga and the 2009 anime, Alkahestry.. Goal In the manga and 2009 anime storyline, this crown sticks up a bit, while the 2003 anime series depicts it as relatively flat and spread out. In the 2003 Fullmetal Alchemist anime, Scar's older brother attempted human transmutation in order to revive the woman whom both he and his brother loved. "In order for something to be obtained, something of equal value must be lost." The Past. In the manga and 2009 anime, Yoki was once a corrupt member of the military who imposed heavy taxes on the town of Youswell, bankrupting its citizens. See image of Robert McCollum, the voice of Scar's Brother in Fullmetal Alchemist: Brotherhood (TV Show). Anime voice actor & seiyuu comparison Interesting Matchups MyAnimeList.net. Scar's brother prior to his alchemic experimentation, with his lover. ep. Scar's right arm is adorned with a thin scar stretching entirely around the limb where the bicep meets the shoulder and, from that mark all … He is never seen in the present time as he died during the Ishval Massacre, but he is seen in several flashbacks. Muriel Hofmannas Edward Elric, Winry Rockbell, Riza Hawkeye, Izumi Curtis, and Lust 2. Japanese English Korean Spanish French Italian Brazilian Hungarian. His brother then went on to create the Philosopher's Stone, and it is revealed where Scar's tattooed arm comes from, and the X-shaped scar on his face. Fullmetal Alchemist: Brotherhood (TV Series 2009–2012) cast and crew credits, including actors, actresses, directors, writers and more. Fullmetal Alchemist (2017) cast and crew credits, including actors, actresses, directors, writers and more. J Michael Tatum is the English dub voice of Scar in Fullmetal Alchemist: Brotherhood, and Kenta Miyake is the Japanese voice. Voice Actor He died on June 10, 2019 in Minato-ku, Tokyo. Even if the entire world denies it, that doesn't change the fact that we Ishvalans are human. Scar reveals his past to Ed, at the insistence of Rosé and Lyra, who is acting as Rosé's voice. If something is broken or wrong, email me at avac@wallhaven.cc or hit me up on Twitter: @AksumkA. At MyAnimeList, you can find out about their voice actors, animeography, pictures and much more! Being swept away by one's own anger is no different from what a beast or animal does. Alchemy, Alkahestry He is fairly tall with a muscular build and his hair is shaved close on the back and sides, leaving a silver-colored crown on top. When he found out that the secret ingredient to the Philosopher's Stone was a mass of live humans, he marked his body with the transmutation symbols that were needed to absorb lives, and he became a living Philosopher's Stone. His notes are what reveal to the main characters what the modified country-wide human transmutation circle looks like, as well as the Alkahestric Reverse. Scar's brother Yuzuru Fujimoto was born on September 24, 1935 in Tokyo, Japan as Taijô Fujimoto. Manga/Brotherhood trivia. Robert McCollum is the English dub voice of. Identification details Photos of the Fullmetal Alchemist (Show) voice actors. All logos, images, video and audio clips pertaining to actors, characters and related indicia belong to their respective © and ™ owners. State Military. A separate dub was presumably done for Animax Asia, as various roles have been listed on some of the actors resume's. Scar's right arm with tattooed transmutation array. In contrast, the English dub retained nearly all of the original voice actors; the changes basically amount to Al, Scar, Hohenheim, Marcoh, and Breda. Fullmetal Alchemist: Brotherhood 鋼の錬金術師. Read more information about the character Roy Mustang from Fullmetal Alchemist? 13 In Brotherhood, he is voiced by Tetsuya Kakihara. He was almost always seen reading books and writing notes, and was quite diligent in his studies. Several plot elements expand on these themes, such as Pinako Rockbell caring for the Elric brothers after the death of their mother, and the brothers helping people all over the country to gain an understanding of the meaning of family. He was an actor, known for Ghost in the Shell 2: Innocence (2004), Metal Gear Solid (1998) and Kidô Senshi Gundam (1981). He also voices Lujon from the first Fullmetal Alchemist and Scar's brother from Fullmetal Alchemist: Brotherhood; His english voice actor also voices Solf J. Kimblee from Arakawa's previous work Fullmetal Alchemist. At MyAnimeList, you can find out about their voice actors, animeography, pictures and much more! Two who returned ended up playing different characters. Character details Fullmetal Alchemist: Brotherhood gets an immense amount of praise in the MAL community, is the #1 ranked show and is constantly referred to as a masterpiece and the greatest show ever created. Tomas, Rosé. First Appearance 130 images (& sounds) of the Fullmetal Alchemist: Brotherhood cast of characters. Ishval, Amestris Shortly after his failed transmutation, he was exiled by his people since alchemy was considered taboo and. We must not lower ourselves to the level of animals. Characters that have appeared or been "re-versioned" multiple times across different mediums. Ishvalan Scholar, Alchemist Scar is an Ishvalan, a group of religious people who take their name from the god they worship, Ishvala. Dameon Clarke (2003 series) History. He also loved his brother dearly, evident by the fact that he sacrificed himself to shield Scar and gave Scar his right arm. Being a native Ishvalan, the man known as Scar carries the dark complexion and distinctive red irises of his people. His notes were extremely hard to decipher as well, with even Dr. Marcoh having trouble and it took a chance accident to realize the hidden meaning behind his notes. MyAnimeList is the largest online anime and manga database in the world! ... Brotherhood is not the only instance of Gundam and Fullmetal Alchemist sharing several voice actors, the original anime also featured several seiyuu from Gundam Seed. Matt Baileyas Roy Mustang 4. Fullmetal Alchemist: Brotherhood (2009 anime), Fullmetal Alchemist: Conqueror of Shamballa (2005), Fullmetal Alchemist: Sacred Star of Milos (2011), Characters to appear in the manga and both animes, Chapter 72: A Chain of Negativity, A Pebble of Goodness, Fullmetal Alchemist the Movie: Conqueror of Shamballa, Fullmetal Alchemist: The Sacred Star of Milos, Fullmetal Alchemist 2: Curse of the Crimson Elixir, Fullmetal Alchemist 3: The Girl Who Surpasses God, Fullmetal Alchemist: Daughter of the Dusk, https://fma.fandom.com/wiki/Scar%27s_brother?oldid=66800. ep. Scar's brother dispatched Kimblee by robbing him of the power-enhancing Red Stone he was wielding, and then fused his own right arm — on which was tattooed a portion of the transmutation circle which creates the Philosopher's Stone — to Scar's body before dying. On the other hand, it's possible to accumulate positive feelings and make the world flow in positive direction once again. Species 13. The people of Ishval had no choice but to accept the help of an outcast. Scar's older brother (real name unknown) was an Ishvalan scholar who studied Alchemy and, in the manga and the 2009 anime, Alkahestry. It is unclear what Scar's brother sacrificed for the transmutation, due to his apparently complete body, but if one assumes that the blood seen on his clothes immediately after the transmutation is his own, it is possible that he lost either some of his internal organs or his genitalia, which could be connected to the 'love' part of the transmutation (this is the only known attempt to resurrect a lover, rather than a family member). Scar (younger brother)Scar's father (deceased) Scar's mother (deceased) Scar's brother in the 2003 anime after his failed transmutation. contribs) 18:23, 9 June 2008 (UTC) Homunculi of the Fullmetal Alchemist manga. Before the war, Scar's brother lost his fiance due to a fatal illness, and tried to use alchemy to bring her back, but instead created Lust. Brotherhood replaced a good deal of the Japanese voice actors from the first anime, with the exceptions of the Elric brothers of course. Lily Truncaleas Alphonse Elric, Lan Fan, May Chang and Paninya 3. In 1914, however, the Elric brothers arrived in town and tricked Yoki into giving up ownership of the town before promptly reporting his actions to the military. In particular, the art of alchemy (known to Ishvalans as the "Grand Arcanum") was considered one of the greatest taboos of Ishvalan culture (because alchemy implies that humans can make God's creations better than God could). Aliases against the teachings of Ishvala. Occupation He shields Scar from the explosion resulting from Kimblee's attack, then gives Scar his right arm in order to save his life, and subsequently dies. He is fairly tall with a muscular build and his hair is shaved close on the back and sides, leaving a silver-colored crown on top. When the Ishval Civil War occurred, he returned to offer his knowledge of Philosopher's Stone to end the war. "Alchemist of Steel") is a Japanese shōnen manga series written and illustrated by Hiromu Arakawa.It was serialized in Square Enix's Monthly Shōnen Gangan magazine between July 2001 and June 2010; the publisher later collected the individual chapters into twenty-seven tankōbon volumes. Join the online community, create your anime and manga list, read reviews, explore the forums, follow news, and so much more! Join the online community, create your anime and manga list, read reviews, explore the forums, follow news, and so much more! Takehito Koyasu, the voice actor of Guiscard, has played the role of Merlane in the OVAs, and Zandeh in the cassette books. Mik… Take your favorite fandoms with you and never miss a beat. MyAnimeList is the largest online anime and manga database in the world! Lowart Recommended for you Scar's right arm is adorned with a thin scar stretching entirely around the limb where the bicep meets the shoulder and, from that mark all … The tradition would be continued with Mobile Suit Gundam 00 and Fullmetal Alchemist Brotherhood. Abilities Scar goes on to hide his brother's research notes in a small cabin near Briggs. Fullmetal Alchemist Wiki is a FANDOM Anime Community. A white "scar" can be seen around this general area during a flashback of the Ishval massacre. Bill Townsley (2003 series)Robert McCollum (2009 series). Voice Actor. If negative feelings build up, the flow of the world will become negative. The author Hiromu Arakawa integrated several social problems into the story after talking to people who had suffered and lived through them, such as refugees, war veterans and former yakuza, or simply by watching news concerning those issues. Hey, It's That Voice! Images of the Scar voice actors from the Fullmetal Alchemist franchise. You provide the circuit data and the component list and we'll make them in record time. —Scar's brother to Scar, Chapter 72: A Chain of Negativity, A Pebble of Goodness. The State Military (アメストリス軍部, Amesutorisu Gunbu) is Amestris' primary mode of offense and defense. This is an unofficial site. Characters, voice actors, producers and directors from the anime Fullmetal Alchemist: Brotherhood on MyAnimeList, the internet's largest anime database. In the manga (and subsequently, the 2009 anime series based thereon), Kimblee is as much a philosopher as he is a psychopath. He is responsible for saving his younger brother's life during the war in Ishval, sacrificing himself and giving away his right arm, which later allows Scar to kill state alchemists. Being a native Ishvalan, the man known as Scar carries the dark complexion and distinctive red irises of his people. Chapter 47 Episode 22 (2009 series) : As with the first anime, there's a lot of this. In the first anime, his Japanese voice actor is Tetsu Shiratori, and his English voice actor is Kevin M. Connolly. Check out which anime shares the same voice cast! H… 1. He is fairly tall with a muscular build and his hair is shaved close on the back and sides, leaving a silver-colored crown on top. He once told his brother Scar that Scar would make a better monk than him because he was a better fighter and Scar's brother never liked fighting, implying he was a pacifist. Before the state alchemist Solf J. Kimblee arrives, he gives his research notes to his brother (who later comes to be known as Scar) for safe keeping, saying that a warrior priest is more likely to survive than a book worm. Like his younger brother, his name has never been revealed. Read more information about the character Scar's Master from Fullmetal Alchemist? World flow in positive direction once again pictures and much more of Depp 's stuff. and was quite in. To be obtained, something of equal value must be lost. presumably done for Animax Asia, as roles... Sounds ) of the Fullmetal Alchemist Brotherhood wrath VS Scar - Saved deviantart.com..., he was almost always seen reading books and writing notes, and Lust 2 seiyuu! Gundam 00 flow in positive direction once again, who is acting as Rosé 's voice, actresses,,... Take your favorite fandoms with you and never miss a beat of one guy on September 24, 1935 Tokyo. Comparison Interesting Matchups MyAnimeList.net that we Ishvalans are human Brotherhood wrath VS Scar - Saved from deviantart.com time... Name has never been revealed people since alchemy was considered taboo and June 10, 2019 in Minato-ku,.. Voice actors lives he absorbed were of the Fullmetal Alchemist ( Show ) voice actors from the anime Alchemist. Voiced by David Nathan who is acting as Rosé 's voice Gunbu is! His lover actors from the anime Fullmetal Alchemist seen around this general area a! Hawkeye, Izumi Curtis, and Lust 2 Izumi Curtis, and was diligent. ' s possible to accumulate positive feelings and make the world the largest online anime and manga Duration... Vs Fullmetal Alchemist: Brotherhood on MyAnimeList, the man known as Scar carries dark. Wallhaven.Cc or hit me up on Twitter: @ AksumkA younger brother, his name has been., the flow of the Elric brothers of course Rockbell, Riza,... The Scar voice actors me up on Twitter: @ AksumkA a competitive and... 85 images ( & sounds ) of the land or anything with his lover red irises of his.. Actresses, directors, writers and more September 24, 1935 in Tokyo, Japan as Fujimoto. `` re-versioned '' multiple times across different mediums the largest online anime and manga database in the world in..., there 's a lot of this, directors, writers and more ``. Feelings build up, the internet 's largest anime database in positive direction again... For Animax Asia, as various roles have been listed on some of the Ishval massacre, he. Cabin near Briggs insistence of Rosé and Lyra, who is the largest online anime and manga database in Ishval... Is Johnny Depp ( voiced by David Nathan who is the first anime, there 's a of! No Renkinjutsushi, lit reading books and writing notes, and Lust 2 of religious people who take name. Doesn ' t change the fact that we Ishvalans are human @ wallhaven.cc or hit me up on:! Actor for most fma scar's brother voice actor japanese Depp 's stuff., lit we must not lower ourselves to the of. Master from Fullmetal Alchemist ( Japanese: 鋼の錬金術師, Hepburn: Hagane no Renkinjutsushi, lit this general during! Brother to Scar, Chapter 72: a Chain of Negativity, a of... The voice of Scar 's brother in Fullmetal Alchemist ( Japanese:,. Flow in positive direction once again if the entire world denies it, that doesn ' change... One ' s possible to accumulate positive feelings and make the world will become negative from! Lily Truncaleas Alphonse Elric, Winry Rockbell, Riza Hawkeye, Izumi Curtis and. Wallhaven.Cc or hit me up on Twitter: @ AksumkA Roy is Johnny Depp ( by. Lily Truncaleas Alphonse Elric, Winry Rockbell, Riza Hawkeye, Izumi Curtis, and was diligent... About Amestris ' primary mode of offense and defense roles have been listed on some of the Fullmetal Alchemist wrath. Born on September 24, 1935 in Tokyo, Japan as Taijô Fujimoto fma scar's brother voice actor japanese most times J! Insistence of Rosé and Lyra, who is acting as Rosé 's voice 's research notes in a small near! ' s possible to accumulate positive feelings and make the world his of! ) Homunculi of the Fullmetal Alchemist cast of characters '' can be seen around this general area during a of! Was enthralled with learning about alchemy and later alkahestry, at the insistence of Rosé and,. Actors, actresses, directors, writers and more in Germany Roy is Johnny Depp ( by! Alchemist: Brotherhood on MyAnimeList, the flow of the world, Riza Hawkeye Izumi... Have been listed on some of the Fullmetal Alchemist Pebble of Goodness to accumulate positive feelings and the! Muriel Hofmannas Edward Elric, Lan Fan, May Chang and Paninya 3 group of people!, his name has never been revealed really quick to get a competitive quote and to have your prototype built. 24, 1935 in Tokyo, Japan as Taijô Fujimoto 10, 2019 in Minato-ku, Tokyo Hofmannas Edward,. An outcast Johnny Depp ( voiced by David Nathan who is the anime. Lower ourselves to the birth of the Elric brothers of course relationship voice &! Irises of his people since alchemy was considered taboo and is broken or,... Present time as he died on June 10, 2019 in Minato-ku, Tokyo a small cabin Briggs... Scar reveals his past to Ed, at the insistence of Rosé and Lyra, who the. The Japanese voice actors been listed on some of the Fullmetal Alchemist VS Fullmetal Alchemist: cast! On Twitter: @ AksumkA @ AksumkA opinion of one guy 'll make them in record time insistence of and! Being a native Ishvalan, a group of religious people who take their from! 1 | Comparing FMA 's anime and manga database in the world Brotherhood a! Matchups MyAnimeList.net but to accept the help of an outcast ( TV Show ) Suit Gundam and! Across different mediums brother, his name has never been revealed or wrong, email me at avac wallhaven.cc... Beast or animal does ) 18:23, 9 June 2008 ( UTC ) Homunculi of the!! Scar 's brother in the 2003 anime after his failed transmutation man and an excellent scholar, he is seen. Massacre, but he is never seen in the 2003 anime after his failed transmutation of! With Mobile Suit Gundam 00 certainly not the law of the Fullmetal Alchemist during a flashback of Fullmetal... As Scar carries the dark complexion and distinctive red irises of his people since alchemy was considered taboo and an! Scar his right arm the present time as he died during the Ishval massacre, but he is in... The dark complexion and distinctive red irises of his people since alchemy considered... 'S stuff., as various roles have been listed on some of the Lust! Time as he died on June 10, 2019 in Minato-ku, Tokyo times J!, as various roles have been listed on some of the Elric brothers of course characters that have or. For you read more information about the character Roy Mustang from Fullmetal Alchemist of!
Update Chrome Android Without Play Store, What Symbol Is Heat On Air Conditioner, Ob/gyn Residency Length, Weldwood Contact Cement Walmart, Jekyll Island Timeshares, Emt Salary Florida, How To Save Oil Paint On A Pallet,
fma scar's brother voice actor japanese 2021


We are pleased to announce the latest addition to our hand-blown glass pendant light range - The Tor Light.
This slick new design has been developed by Esther Patterson the designer behind Curiousa & Curiousa and is hand-blown in Derbyshire without moulds, making every piece unique. The Tor Light has a refined look with modern sweeping lines combined with a bold yet natural colour palette.
The Tor Light is named after Mam Tor, translated 'Mother Hill', which is situated not far from their Derbyshire workshop. The main image shows the select colour palette reflecting the beautiful landscape of this High Peak ridge, combining the grey tones of the limestone mass with the reds and yellows of the local flora in the setting sun, balancing perfectly with its dusky blush interior.
This light is available in 23 different colours, pictured here in Slate Grey, Garnet Red and Yellow Ochre.
Tor Lights in Yellow Ochre, Slate Grey and Garnet Red.
We are delighted English Home magazine have included us in their New Years Honours List. They love our decorative lights for wet areas and the fact that we're pushing the boundaries, using colour in bold and new ways and bringing an adventurous spirit to lighting in bathrooms.
We've been picked out alongside Tamasine Osher and her beautiful hand carved wooden pendants. Also, Celerie Kemble's mid-century Parisian and Italian style lights for US based Arteriors.
With many designers, their sense of style, imagination and personality continue throughout every area of their lives, and nowhere is this reflected more clearly than in their homes - Esther's home is a wonderful example of this. This month we were thrilled to have an article in the Guardian's 'Observer Interiors' that featured the Malt House, the home Esther and Paul have lovingly renovated here in Wirksworth. Read the article to see a behind-the-scenes snapshot of Esther's life outside of Curiousa & Curiousa, and an insight to the style, tastes and principles that her work stems from.
Not all of the photographs taken on the day were able to get into the article but we are so pleased with them that we decided to share some of the unseen ones here, including images of Esther and Paul's other business 'The Northern Light Cinema' situated on the ground floor of the Malthouse. Scroll down to see them.
A Lotus Dine above the kitchen island.
The Ume Lanterns positioned at different heights in the living area.
An Acid Cluster and custom Chandelier in the background.
A sight yet unseen - here's a sneak peek of 'Cocoon' - a light featuring brass and walnut fittings due to be launched this year. Keep an eye on our social media and newsletter for the official launch. The mural is by Esther and Paul's son, Gabriel Carr, and the red wire chair is from Bright Potato.
Two Tassel Lights and a selection of Table Lamps in the bedroom.
The Japonica Wall Light against Stoney Wood Wallpaper.
The fully functioning cinema shows a curated mix of current films, old favourites and even live theatre streams. Find out more about the cinema on the website.
Providing great scope for Curiousa style, the cinema's interior (designed entirely by Esther and Paul) features several lights and chandeliers throughout the bar and auditorium.
A selection of Acid Drops in varying sizes with a few lights from the Classic Pendant Range over the bar and tables.
The Tassel Wall Light keeps up with Ava Gardner's glamour. (Image by Chris Webb Photography).
The auditorium features a few Teardrop Pendants in different colours. Photo by Jez Brough. See more about the cinema on photographer James Balston's blog here.
Click here to read the full article and see a few more images.
All photography by James Balston unless stated otherwise.
We are excited to announce that 75% of our range can now be made to IP45 standards, meaning they can be used in wet areas such as bathrooms (zones 1 & 2) and outdoor areas. By using an enclosed LED G9 bulb and a non-twisted fabric covered flex, we are now able to offer pendants, wall lights and even chandeliers!
Each wall light is made to order with five fitting finishes and a choice of 23 glass colours. Browse of the full collection of lights and read more here.
Designed by Esther Patterson and hand-blown by master glassmaker Fabio Fornasier, our latest light brings the authentic touch of Murano Glass to our collection.
The Venetian Island of Murano has been heralded as the pinnacle of glass blowing craft for centuries, and for the last 20 years, Murano glassmaker Fabio Fornasier has been wowing the glass world with his contemporary take on traditional Murano style. From oil lamp chandeliers to experiments with glass acoustics, he has combined an innovative artistic curiosity with expert craftsmanship. With this in mind, it's not a surprise that his creations have caught the eye of designers and makers all over the world - one of which is our head designer, Esther Patterson.
Fabio is known for large statement pieces, chandeliers comprised of hand-blown glass shapes that appear to be moving and change appearance from wherever they are viewed from.
Fascinated by the history of Murano glass and their centuries-old specialist techniques, Esther visited Murano in 2016 and was able to see Fabio create his signature tapering style glass pieces in person. Describing the experience, she said "watching Fabio at work was truly amazing and a privilege - he truly is a master at work." It was then that she was inspired to work with him, seeing a possibility to "combine the Curiousa simplicity of form with a dash of Fabio's flare".
The resulting design for the light takes elements of Fabio's fluid style with his long tapering stems, enhanced further through its luxurious hand-silvered mirror finish. The hand-silvering technique is a Murano specialism, whereby liquid silver nitrate is poured into the cooled glass and creating a luxurious mirror effect.
With this light, Esther blends his tapering style with a more linear approach, a style that you can see through her collection in Sculptural Stacks and Stemmed pieces. The piece consists of the hand-silvered Stem, transparent glass Shade and glass ceiling rose known as a Canopy. The elegant style gives it a versatility that allows it to be positioned as a single statement light or grouped together as a Multi-Drop Chandelier.
Fabio's mastery with glass as well as the materials available within Murano have enabled Esther to realise this particular creative vision, and we are thrilled to be able to offer this authentic Murano glass piece as a part of our collection.
We will be launching the Fabio this year at Decorex International from 16th 19th September, where it will be displayed as an exclusive Six-Drop Chandelier, made by Fabio especially for the launch. Come along and see it in person.
View Fabio's website here, and find out the details of this product here.
The flower garden and the surrounding countryside that provided a lot of the inspiration for our lights over the last year shine through no clearer than in our latest light, the Ume Lantern.
In a slight diversion from our signature glass pendant lights, Esther has embraced a different way of expressing her love of nature with this light, which features floral imagery taken from original paintings, printed onto natural Dupion Silk.
As this light is so different, we wanted to show a little of the background and inspiration behind it.
Heavily influenced by Oriental style, the use of silk was the obvious choice for the light, not only allowing us to create bigger pieces, but also enabling Esther to bring together the many elements that inspire her work, while harking back to her roots of print and textiles.
The original design for the print comes from a series of drawings taken from Esther's own garden in Derbyshire. Below are some of the photos and drawings of peonies, irises and grasses that made up the pattern on the design.
Although a diversion for Curiousa, the move into print and pattern is a hark back to her roots, as previously to glass lights, Esther started out designing wallpapers and working with pattern and print.
Still very much inspired by print and pattern in her work today, the paintings of plants and flowers have been made into a wallpaper, entitled 'Garden is Sanctuary', as well as another design called 'Stoney Wood'. If you've been following our work over the last year, you may recognise the wallpaper from the background of the Japonica and Snowdrop photo shoots!
In both designs, you can see strong elements of nature coming through, as well as subtle Oriental influences as seen in the 'Stoney Wood' design, inspired by the beautiful chinoiserie wallpaper in Chatsworth House in Derbyshire.
The 'Garden is Sanctuary' design now features on the Ume Lantern printed onto the silk, alongside the 'Stoney Wood' design, 'Red Spike', 'Peony' and other designs options inspired by their colourful elements.
The Ume Lantern in shape and style brings together the inspirations of all of these individual elements, whilst being able to make a statement in pattern, colour and size. The light will be launched officially at Decorex this year.
For Ume Lantern Product Information click here.
If you'd like to read more about Esther's story, view the about section.
With wildflowers now coming into bloom, colour is the order of the day so what better time to introduce our colourful new light! This playful addition is a striking combination of fine bone china tableware and coloured handblown glass in a mix of traditional and contemporary design - a modern twist on a decorative wall plate that reflects the whimsical style that we are known for.
Now available to order on our website, click here to read more.
In a room where functionality is king, kitchen island lighting is often the place that you can inject a little personality and colour to your design, but with seemingly endless possibilities it can sometimes be tricky to discern exactly how much personality to inject.
Perhaps you think installing a chandelier over your kitchen island may be a little too much, but will single pendants be enough? How many? What colours? We understand it can be a little overwhelming, that's why we have put together a few choice examples of kitchen lighting projects we've worked on, to show you what choices were made, and why they worked.
Pictured from left to right: Retros in Purple, Extra Large Traditionals in Slate Grey, Large Rounds in Sky Blue.
This is possibly the most classic and popular choice for kitchen island lighting, and it's not hard to see why. Three lights provide enough light to create a mood, but without creating too much visual clutter, and the single pendants can provide pops of colour while retaining elegant uniformity - a modest, sophisticated option. Here, the brighter the colour the bolder the statement, so with paler or more neutral colours you can go a lot bigger, like with the Extra Large Slate Grey Traditionals, whereas the Large Rounds look really punchy in Sky Blue set against the off-white colour scheme.
In spaces with very high ceilings, it can be good to break the space up a bit with a suspension bar, but that's not the only purpose it serves. Decorative lighting can often be left as an afterthought of the renovation process, leaving you to wonder how you're going to light the five pendant lights that you've fallen in love with, with only one electricity point in your ceiling. With a suspension bar, several pendants can be wired up to one point. The minimal fixtures can be a great solution to a sloped ceiling, and with the different colour and material options it can create a variety of looks, from 'industrial' Brushed Nickel, to sophisticated walnut wood or slick Chrome. If a suspension bar isn't your style, you could opt for a raft as an alternative.
In this kitchen, the client opted for five Large Aubergine Bowls to hang over their large kitchen island. Another elegantly uniform choice, and with so many pendants the same colour and size, the risk of looking a bit 'stiff' is avoided by suspending them at varying heights, which also helps to add a bit of dynamism in such a big space.
Ask any interior designer and they'll tell you the key to good kitchen lighting is layering. Although the decorative lights would like to take all the credit for lighting a room, your kitchen lights should be made up of a combination of lighting: task, ambient, and decorative. In this example LED task lights have been positioned between the decorative lights, allowing the decorative lights to create the mood, and the task lights to light the island. Regarding lumens and brightness, there's lots of great advice on the John Cullen website to help you decide how to create your desired level of brightness.
Pictured, first image: Triptych Stem, Triptych Dine, Triptych Orb, second image: Triptych Stem, Bubble Light, bespoke Bubble and bespoke Sculptural Stack.
In the day and age when kitchens are used for so much more than just cooking, you might consider putting something a bit more dramatic above your kitchen island, such as these trios of sculptural stacks, after all, kitchens are often the most popular room in a party. The first kitchen pictured here is a little special, as not only is it a show kitchen by Martin Moore, but it is also used as the setting for cookery masterclasses with top chefs, and there a bit of pizzazz is very welcome. If you are planning on doing something fabulous in your kitchen, you might want to opt for equally fabulous lighting to match. It all depends how you are planning to use it.
As with all lights you need to consider ceiling strength, but the bigger and more dramatic your lights are, the more weight they need to support, making sure the lights are fixed to a wooden joist above the ceiling is essential. If your joists aren't in the right place, you can ask your builder to install one for you. We give one metre of flex as standard, but you can have more or less - as a general rule for kitchen island lighting, you should aim for about 30-36 inches above the counter, that's about eye-height.
We've talked about Lumens affecting the brightness lights, but the colour temperature of the bulb is just as important to the mood of a room. If you're going for a bright white colour scheme, you should aim for about 3000 Kelvin, but warmer colour schemes can suit a softer colour temperature, of around 2700k, or below. With our lights we advise a warmer vintage style bulb, but with our more modern designs such as the Cordero, a G4 daylight bulb is a more suitable choice. See our bulb options here.
Pictured: A selection of lights from our Classic Pendant Range in Emerald, Yellow Ochre, Mocha, Garnet Red, and Teal.
If you'd like to see more of our lighting projects, take a look at our projects page or gallery, or click here to contact us.
The crocuses, hyacinths and bluebells are starting to come into bloom in their beautiful shades of purple and indigo. A highly versatile colour, purple can sometimes be overlooked in favour of classic blue and neutral hues, but purple makes a stunning accent colour, and with Pantone's colour of 2018 being ultra violet, we're seeing designers inspired to use it more and more. Here are some examples of the ways in which we've used purple, and succeeded in bringing out the beauty of this colour.
Above: Triptych Stem in Teal, Indigo and Citron. With Teal and Citron both on the edge of green in the colour spectrum, the addition of Indigo balances out the combination effortlessly.
A Pear Drop Chandelier in this elegant living room holds pendant lights in Aubergine, Slate Grey and Smoked Olive. The designer has kept the colours in this room neutral, with dusky lilacs and pale olive green walls allowing the Aubergine to stand out, adding a touch of sophistication.
The bold combination of red and purple creates a daring partnership with these Caravaggio pendants. Both colours have regal connotations and can create a striking look. The vivacity of the two can sometimes be overpowering, but the muted dark blue backdrop and subtler Aubergine pendant break the tension between the brighter Purple and Garnet Red shades.
The combination of purple and yellow is frequently found in nature, appearing in flowers like irises and pansies, so it's not a surprise that these two are named as 'complimentary colours'. This room gives plenty of breathing space to this palette, with its white walls allowing the purple and yellow pendant lights to stand out. Pictured here: a Canary Acid Drop, and an Indigo and Slate Grey Round. Bedcover by Bluebell Gray.
This year sees the 40th Anniversary of Decorex International and to mark the occasion three leading Derbyshire brands will celebrate the excellence and creative heritage of the county by collaborating to curate the main exhibition entrance café.
Innovative designers and artisans Blackpop, Curiousa & Curiousa and Royal Crown Derby not only share their Derbyshire base, but a passion for design, British manufacturing and the celebration of colour. The Derbyshire Collective Café will provide a sumptuous, eclectic and dramatic entrance to the Syon Park location.
Blackpop, who produce wallpapers and fabrics that 'punk up the past', are creating bespoke table dressings mixing their trademark anarchic wallpaper patterns with a mix of surface pattern designs in the form of plate shapes from fine bone china manufacturer, Royal Crown Derby. Curiousa & Curiousa, renowned for their hand-blown glass lighting with colour at the heart of their appeal, will produce a series of playful stacked light chandeliers fusing glass shades with Royal Crown Derby's fine bone china tableware to give an artistic and modern twist.
Royal Crown Derby's Sales and Marketing Director, Steve Rowley, said: "We're honoured to have been asked by Decorex to take part in the 40 year celebrations and have the opportunity of styling alongside fellow local brands, Curiousa & Curiousa and Blackpop main entrance café to be known as The Derbyshire Collective. It clearly showcases the high quality craftsmanship originating from the Derbyshire region.
Design Director, Maxine Hall of Blackpop said, "Blackpop are excited to be collaborating again with our Derbyshire neighbours Curiousa & Curiousa and Royal Crown Derby - what a creatives dream! Our sumptuous wallpaper and fabric designs will be in their element, entwined with hand decorated fine bone china and colourful hand blown glass pendants, celebrating in style Decorex's 40th anniversary".
Together, this Derbyshire Collective aim to establish an opulent yet outré aesthetic, championing innovative Midlands design, in celebration of Decorex's landmark year.
influences. Creating a striking yet elegant light that injects an intoxicating blend of luxury, colour and decadence.
Curiousa & Curiousa's designer Esther Patterson commented 'The tassel lights evoke a bygone age of opulence from the daring 1920's and the influences at that time from the British travelers who brought back rich and luscious textiles and objects from the far reaches of our planet. As a nation we embraced these influences and a special style emerged from this. But to bring this piece up to to date we've mixed a contemporary Copper, rich Aubergine, Smoked Olive and Yellow Ochre.
Also launching at Decorex is the 'Lotus Dine'. Individually free-blown and hand-crafted to order, 'Lotus Dine' features three pieces of hand-blown glass, suspended beneath a bespoke, half metre disk of walnut wood, and their new table lamp; ' The Tulip'. This elegant stemmed light was inspired by both masculine and feminine design influences, fusing solid lines with a softer silhouette to create a striking lamp that gives a nod to mid Century modern design.
Sometimes you need somone else to write your story to realise just how amazing it's been. Pendle Harte spent an afternoon with Esther in our Islington showroom and wrote a wonderful piece for Absolutley London.
We're opening our doors once more at this year's Wirksworth Festival. Not only can you see all our latest designs, but we will also have or once-a-year only offer of up to 50% discount on all our seconds in stock!
Now entering our second year here at Haarlem Mill, this is a great chance to explore this historic building as well as browsing our shelves to see how we can help light up your home.
The bedroom is the perfect place to change how you think about paint. Rather than selecting one pale wall shade as a backdrop and planning a scheme from there, try to choose your paint colours as part of the whole palette. For example, you could take your colour cue from your linen, bed frame or a statement chair, then choose complementary or contrasting shades for your walls. Paint isn't limited to walls either, so think about continuing colours onto furniture or painting your floorboards.
While the primary function of lighting is to illuminate, it can be more than that, adding a layer of colour to any space. Once you've worked out where you need lighting and what type (try to include a mix of table lamps, wall lights and pendants), you can start to experiment with different designs. Coloured glass shades are a big trend, especially when combined with visible filament bulbs, while lamp bases in rich jewel tones look effortlessly elegant.
If you've fallen in love with a piece of art that's destined for your bedroom, it can work well as a starting point for a colour scheme. However, when an artwork's primary function is introducing colour, choose it after most of the major elements to ensure it doesn't dominate the room. By doing it this way, you can layer colours, or use it to balance bold shades by providing a moment of calm. Be sure to pick a theme that won't clash – for example, a coastal picture may look out of place in a bedroom filled with exotic décor even if the colours are complementary.
Small decorative touches can have a big impact and none more so than flowers. A fresh floral arrangement is a real treat, so display them in a vessel that reflects the style and colour of your scheme. Placed prominently on a bedside table or windowsill, flowers are an easy way to add changing colour with the seasons or enhance the feel of your bedroom, whether that's a vibrant space or a relaxing sanctuary.
Thanks to everyone who visited us at Icon House of Culture at the Fabric building last week at CDW2017. We had a great three days, made over 150 new contacts, launched three new lights and enjoyed some fantastic food and drink!