text:
namespace Couchcoding.Logbert.Dialogs.Docking
{
  partial class FrmLogDocument
  {
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    #region Component Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
            this.components = new System.ComponentModel.Container();
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmLogDocument));
            this.LogDockPanel = new WeifenLuo.WinFormsUI.Docking.DockPanel();
            this.tsMessages = new Couchcoding.Logbert.Gui.Controls.ToolStripEx();
            this.tslLogLevel = new System.Windows.Forms.ToolStripLabel();
            this.tsbShowTrace = new System.Windows.Forms.ToolStripButton();
            this.tsbShowDebug = new System.Windows.Forms.ToolStripButton();
            this.tsbShowInfo = new System.Windows.Forms.ToolStripButton();
            this.tsbShowWarn = new System.Windows.Forms.ToolStripButton();
            this.tsbShowError = new System.Windows.Forms.ToolStripButton();
            this.tsbShowFatal = new System.Windows.Forms.ToolStripButton();
            this.tssLogLevel = new System.Windows.Forms.ToolStripSeparator();
            this.tsbStartPause = new System.Windows.Forms.ToolStripButton();
            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
            this.tsbGotoFirstMessage = new System.Windows.Forms.ToolStripButton();
            this.tsbGotoLastMessage = new System.Windows.Forms.ToolStripButton();
            this.tsbTraceLastMessage = new System.Windows.Forms.ToolStripButton();
            this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
            this.tsbToggleBookmark = new System.Windows.Forms.ToolStripButton();
            this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
            this.tsbZoomIn = new System.Windows.Forms.ToolStripButton();
            this.tsbZoomOut = new System.Windows.Forms.ToolStripButton();
            this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
            this.tsbReload = new System.Windows.Forms.ToolStripButton();
            this.tsbClearMessages = new System.Windows.Forms.ToolStripButton();
            this.tsbSaveMessages = new System.Windows.Forms.ToolStripDropDownButton();
            this.cmsSaveMessagesRaw = new System.Windows.Forms.ToolStripMenuItem();
            this.cmsSaveMessagesCsv = new System.Windows.Forms.ToolStripMenuItem();
            this.tsSeperatorWindows = new System.Windows.Forms.ToolStripSeparator();
            this.tsbShowMessageDetails = new System.Windows.Forms.ToolStripButton();
            this.tsbShowLoggerTree = new System.Windows.Forms.ToolStripButton();
            this.tsbShowBookmarks = new System.Windows.Forms.ToolStripButton();
            this.tsbShowFilter = new System.Windows.Forms.ToolStripButton();
            this.tsbShowStatistic = new System.Windows.Forms.ToolStripButton();
            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
            this.tsbTimeShift = new System.Windows.Forms.ToolStripButton();
            this.txtTimeShift = new System.Windows.Forms.ToolStripTextBox();
            this.tsbTimeShiftUnit = new System.Windows.Forms.ToolStripDropDownButton();
            this.tsbTimeShiftUnitMillisecond = new System.Windows.Forms.ToolStripMenuItem();
            this.tsbTimeShiftUnitSecond = new System.Windows.Forms.ToolStripMenuItem();
            this.tsbTimeShiftUnitMinute = new System.Windows.Forms.ToolStripMenuItem();
            this.tsbTimeShiftUnitHour = new System.Windows.Forms.ToolStripMenuItem();
            this.tsbTimeShiftUnitDay = new System.Windows.Forms.ToolStripMenuItem();
            this.tmrUpdate = new System.Windows.Forms.Timer(this.components);
            this.stBar = new System.Windows.Forms.StatusStrip();
            this.stbStatus = new System.Windows.Forms.ToolStripStatusLabel();
            this.stbMessageCount = new System.Windows.Forms.ToolStripStatusLabel();
            this.tblInnerLayout = new Couchcoding.Logbert.Gui.Controls.TableLayoutPanelEx();
            this.errorPanelBack = new Couchcoding.Logbert.Gui.Controls.InfoPanel();
            this.tblErrorPanel = new Couchcoding.Logbert.Gui.Controls.TableLayoutPanelEx();
            this.errorPanel = new Couchcoding.Logbert.Gui.Controls.InfoPanel();
            this.lnkClose = new Couchcoding.Logbert.Gui.Controls.LinkLabelEx();
            ((System.ComponentModel.ISupportInitialize)(this.LogDockPanel)).BeginInit();
            this.tsMessages.SuspendLayout();
            this.stBar.SuspendLayout();
            this.tblInnerLayout.SuspendLayout();
            this.errorPanelBack.SuspendLayout();
            this.tblErrorPanel.SuspendLayout();
            this.SuspendLayout();
            //
            // LogDockPanel
            //
            this.LogDockPanel.Dock = System.Windows.Forms.DockStyle.Fill;
            this.LogDockPanel.Theme = new WeifenLuo.WinFormsUI.Docking.VS2015LightTheme();
            this.LogDockPanel.DockBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(238)))), ((int)(((byte)(242)))));
            this.LogDockPanel.DocumentStyle = WeifenLuo.WinFormsUI.Docking.DocumentStyle.DockingWindow;
            this.LogDockPanel.Location = new System.Drawing.Point(0, 51);
            this.LogDockPanel.Margin = new System.Windows.Forms.Padding(0);
            this.LogDockPanel.Name = "LogDockPanel";
            this.LogDockPanel.Padding = new System.Windows.Forms.Padding(6);
            this.LogDockPanel.ShowAutoHideContentOnHover = false;
            this.LogDockPanel.Size = new System.Drawing.Size(784, 460);
            this.LogDockPanel.SupportDeeplyNestedContent = true;
            this.LogDockPanel.TabIndex = 1;
            //
            // tsMessages
            //
            this.tsMessages.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
            this.tsMessages.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.tslLogLevel,
            this.tsbShowTrace,
            this.tsbShowDebug,
            this.tsbShowInfo,
            this.tsbShowWarn,
            this.tsbShowError,
            this.tsbShowFatal,
            this.tssLogLevel,
            this.tsbStartPause,
            this.toolStripSeparator2,
            this.tsbGotoFirstMessage,
            this.tsbGotoLastMessage,
            this.tsbTraceLastMessage,
            this.toolStripSeparator3,
            this.tsbToggleBookmark,
            this.toolStripSeparator5,
            this.tsbZoomIn,
            this.tsbZoomOut,
            this.toolStripSeparator4,
            this.tsbReload,
            this.tsbClearMessages,
            this.tsbSaveMessages,
            this.tsSeperatorWindows,
            this.tsbShowMessageDetails,
            this.tsbShowLoggerTree,
            this.tsbShowBookmarks,
            this.tsbShowFilter,
            this.tsbShowStatistic,
            this.toolStripSeparator1,
            this.tsbTimeShift,
            this.txtTimeShift,
            this.tsbTimeShiftUnit});
            this.tsMessages.Location = new System.Drawing.Point(0, 0);
            this.tsMessages.Name = "tsMessages";
            this.tsMessages.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
            this.tsMessages.Size = new System.Drawing.Size(784, 26);
            this.tsMessages.TabIndex = 0;
            this.tsMessages.Text = "Messages";
            //
            // tslLogLevel
            //
            this.tslLogLevel.Margin = new System.Windows.Forms.Padding(2, 1, 0, 2);
            this.tslLogLevel.Name = "tslLogLevel";
            this.tslLogLevel.Size = new System.Drawing.Size(60, 23);
            this.tslLogLevel.Text = "Log Level:";
            //
            // tsbShowTrace
            //
            this.tsbShowTrace.Checked = true;
            this.tsbShowTrace.CheckOnClick = true;
            this.tsbShowTrace.CheckState = System.Windows.Forms.CheckState.Checked;
            this.tsbShowTrace.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbShowTrace.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbShowTrace.Name = "tsbShowTrace";
            this.tsbShowTrace.Size = new System.Drawing.Size(23, 23);
            this.tsbShowTrace.Text = "Trace";
            this.tsbShowTrace.ToolTipText = "Show Trace";
            this.tsbShowTrace.CheckedChanged += new System.EventHandler(this.LogLevelChanged);
            //
            // tsbShowDebug
            //
            this.tsbShowDebug.Checked = true;
            this.tsbShowDebug.CheckOnClick = true;
            this.tsbShowDebug.CheckState = System.Windows.Forms.CheckState.Checked;
            this.tsbShowDebug.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbShowDebug.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbShowDebug.Name = "tsbShowDebug";
            this.tsbShowDebug.Size = new System.Drawing.Size(23, 23);
            this.tsbShowDebug.Text = "Debug";
            this.tsbShowDebug.ToolTipText = "Show Debug";
            this.tsbShowDebug.CheckedChanged += new System.EventHandler(this.LogLevelChanged);
            //
            // tsbShowInfo
            //
            this.tsbShowInfo.Checked = true;
            this.tsbShowInfo.CheckOnClick = true;
            this.tsbShowInfo.CheckState = System.Windows.Forms.CheckState.Checked;
            this.tsbShowInfo.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbShowInfo.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbShowInfo.Name = "tsbShowInfo";
            this.tsbShowInfo.Size = new System.Drawing.Size(23, 23);
            this.tsbShowInfo.Text = "Info";
            this.tsbShowInfo.ToolTipText = "Show Info";
            this.tsbShowInfo.CheckedChanged += new System.EventHandler(this.LogLevelChanged);
            //
            // tsbShowWarn
            //
            this.tsbShowWarn.Checked = true;
            this.tsbShowWarn.CheckOnClick = true;
            this.tsbShowWarn.CheckState = System.Windows.Forms.CheckState.Checked;
            this.tsbShowWarn.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbShowWarn.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbShowWarn.Name = "tsbShowWarn";
            this.tsbShowWarn.Size = new System.Drawing.Size(23, 23);
            this.tsbShowWarn.Text = "Warning";
            this.tsbShowWarn.ToolTipText = "Show Warning";
            this.tsbShowWarn.CheckedChanged += new System.EventHandler(this.LogLevelChanged);
            //
            // tsbShowError
            //
            this.tsbShowError.Checked = true;
            this.tsbShowError.CheckOnClick = true;
            this.tsbShowError.CheckState = System.Windows.Forms.CheckState.Checked;
            this.tsbShowError.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbShowError.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbShowError.Name = "tsbShowError";
            this.tsbShowError.Size = new System.Drawing.Size(23, 23);
            this.tsbShowError.Text = "Error";
            this.tsbShowError.ToolTipText = "Show Error";
            this.tsbShowError.CheckedChanged += new System.EventHandler(this.LogLevelChanged);
            //
            // tsbShowFatal
            //
            this.tsbShowFatal.Checked = true;
            this.tsbShowFatal.CheckOnClick = true;
            this.tsbShowFatal.CheckState = System.Windows.Forms.CheckState.Checked;
            this.tsbShowFatal.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbShowFatal.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbShowFatal.Name = "tsbShowFatal";
            this.tsbShowFatal.Size = new System.Drawing.Size(23, 23);
            this.tsbShowFatal.Text = "Fatal";
            this.tsbShowFatal.ToolTipText = "Show Fatal";
            this.tsbShowFatal.CheckedChanged += new System.EventHandler(this.LogLevelChanged);
            //
            // tssLogLevel
            //
            this.tssLogLevel.Name = "tssLogLevel";
            this.tssLogLevel.Size = new System.Drawing.Size(6, 26);
            //
            // tsbStartPause
            //
            this.tsbStartPause.Checked = true;
            this.tsbStartPause.CheckOnClick = true;
            this.tsbStartPause.CheckState = System.Windows.Forms.CheckState.Checked;
            this.tsbStartPause.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbStartPause.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbStartPause.Name = "tsbStartPause";
            this.tsbStartPause.Size = new System.Drawing.Size(23, 23);
            this.tsbStartPause.Text = "Start / Stop";
            this.tsbStartPause.ToolTipText = "Start / Stop";
            this.tsbStartPause.CheckedChanged += new System.EventHandler(this.TsbStartPauseCheckedChanged);
            //
            // toolStripSeparator2
            //
            this.toolStripSeparator2.Name = "toolStripSeparator2";
            this.toolStripSeparator2.Size = new System.Drawing.Size(6, 26);
            //
            // tsbGotoFirstMessage
            //
            this.tsbGotoFirstMessage.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbGotoFirstMessage.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbGotoFirstMessage.Name = "tsbGotoFirstMessage";
            this.tsbGotoFirstMessage.Size = new System.Drawing.Size(23, 23);
            this.tsbGotoFirstMessage.Text = "Goto First Message";
            this.tsbGotoFirstMessage.Click += new System.EventHandler(this.TsbGotoFirstMessageClick);
            //
            // tsbGotoLastMessage
            //
            this.tsbGotoLastMessage.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbGotoLastMessage.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbGotoLastMessage.Name = "tsbGotoLastMessage";
            this.tsbGotoLastMessage.Size = new System.Drawing.Size(23, 23);
            this.tsbGotoLastMessage.Text = "Goto Last Message";
            this.tsbGotoLastMessage.Click += new System.EventHandler(this.TsbGotoLastMessageClick);
            //
            // tsbTraceLastMessage
            //
            this.tsbTraceLastMessage.Checked = true;
            this.tsbTraceLastMessage.CheckOnClick = true;
            this.tsbTraceLastMessage.CheckState = System.Windows.Forms.CheckState.Checked;
            this.tsbTraceLastMessage.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbTraceLastMessage.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbTraceLastMessage.Name = "tsbTraceLastMessage";
            this.tsbTraceLastMessage.Size = new System.Drawing.Size(23, 23);
            this.tsbTraceLastMessage.Text = "Always Select Last Message";
            //
            // toolStripSeparator3
            //
            this.toolStripSeparator3.Name = "toolStripSeparator3";
            this.toolStripSeparator3.Size = new System.Drawing.Size(6, 26);
            //
            // tsbToggleBookmark
            //
            this.tsbToggleBookmark.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbToggleBookmark.Enabled = false;
            this.tsbToggleBookmark.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbToggleBookmark.Name = "tsbToggleBookmark";
            this.tsbToggleBookmark.Size = new System.Drawing.Size(23, 23);
            this.tsbToggleBookmark.Text = "Toggle Bookmark";
            this.tsbToggleBookmark.Click += new System.EventHandler(this.TsbToggleBookmarkClick);
            //
            // toolStripSeparator5
            //
            this.toolStripSeparator5.Name = "toolStripSeparator5";
            this.toolStripSeparator5.Size = new System.Drawing.Size(6, 26);
            //
            // tsbZoomIn
            //
            this.tsbZoomIn.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbZoomIn.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbZoomIn.Name = "tsbZoomIn";
            this.tsbZoomIn.Size = new System.Drawing.Size(23, 23);
            this.tsbZoomIn.Text = "Zoom In";
            this.tsbZoomIn.Click += new System.EventHandler(this.TsbZoomInClick);
            //
            // tsbZoomOut
            //
            this.tsbZoomOut.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbZoomOut.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbZoomOut.Name = "tsbZoomOut";
            this.tsbZoomOut.Size = new System.Drawing.Size(23, 23);
            this.tsbZoomOut.Text = "Zoom Out";
            this.tsbZoomOut.Click += new System.EventHandler(this.TsbZoomOutClick);
            //
            // toolStripSeparator4
            //
            this.toolStripSeparator4.Name = "toolStripSeparator4";
            this.toolStripSeparator4.Size = new System.Drawing.Size(6, 26);
            //
            // tsbReload
            //
            this.tsbReload.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbReload.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbReload.Name = "tsbReload";
            this.tsbReload.Size = new System.Drawing.Size(23, 23);
            this.tsbReload.Text = "Reload";
            this.tsbReload.Click += new System.EventHandler(this.TsbReloadClick);
            //
            // tsbClearMessages
            //
            this.tsbClearMessages.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbClearMessages.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbClearMessages.Name = "tsbClearMessages";
            this.tsbClearMessages.Size = new System.Drawing.Size(23, 23);
            this.tsbClearMessages.Text = "Clear Messages";
            this.tsbClearMessages.Click += new System.EventHandler(this.TsbClearMessagesClick);
            //
            // tsbSaveMessages
            //
            this.tsbSaveMessages.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbSaveMessages.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.cmsSaveMessagesRaw,
            this.cmsSaveMessagesCsv});
            this.tsbSaveMessages.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbSaveMessages.Name = "tsbSaveMessages";
            this.tsbSaveMessages.Size = new System.Drawing.Size(13, 23);
            this.tsbSaveMessages.Text = "Save Messages";
            //
            // cmsSaveMessagesRaw
            //
            this.cmsSaveMessagesRaw.Name = "cmsSaveMessagesRaw";
            this.cmsSaveMessagesRaw.Size = new System.Drawing.Size(158, 22);
            this.cmsSaveMessagesRaw.Text = "Save &Raw data...";
            this.cmsSaveMessagesRaw.Click += new System.EventHandler(this.CmsSaveMessagesTextClick);
            //
            // cmsSaveMessagesCsv
            //
            this.cmsSaveMessagesCsv.Name = "cmsSaveMessagesCsv";
            this.cmsSaveMessagesCsv.Size = new System.Drawing.Size(158, 22);
            this.cmsSaveMessagesCsv.Text = "Save as &CSV...";
            this.cmsSaveMessagesCsv.Click += new System.EventHandler(this.CmsSaveMessagesCsvClick);
            //
            // tsSeperatorWindows
            //
            this.tsSeperatorWindows.Name = "tsSeperatorWindows";
            this.tsSeperatorWindows.Size = new System.Drawing.Size(6, 26);
            //
            // tsbShowMessageDetails
            //
            this.tsbShowMessageDetails.Checked = true;
            this.tsbShowMessageDetails.CheckOnClick = true;
            this.tsbShowMessageDetails.CheckState = System.Windows.Forms.CheckState.Checked;
            this.tsbShowMessageDetails.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbShowMessageDetails.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbShowMessageDetails.Name = "tsbShowMessageDetails";
            this.tsbShowMessageDetails.Size = new System.Drawing.Size(23, 23);
            this.tsbShowMessageDetails.Text = "Message Details";
            this.tsbShowMessageDetails.ToolTipText = "Show Message Details";
            this.tsbShowMessageDetails.Click += new System.EventHandler(this.TsbShowMessageDetailsClick);
            //
            // tsbShowLoggerTree
            //
            this.tsbShowLoggerTree.Checked = true;
            this.tsbShowLoggerTree.CheckOnClick = true;
            this.tsbShowLoggerTree.CheckState = System.Windows.Forms.CheckState.Checked;
            this.tsbShowLoggerTree.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbShowLoggerTree.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbShowLoggerTree.Name = "tsbShowLoggerTree";
            this.tsbShowLoggerTree.Size = new System.Drawing.Size(23, 23);
            this.tsbShowLoggerTree.Text = "Logger Tree";
            this.tsbShowLoggerTree.ToolTipText = "Show Logger Tree";
            this.tsbShowLoggerTree.Click += new System.EventHandler(this.TsbShowLoggerTreeClick);
            //
            // tsbShowBookmarks
            //
            this.tsbShowBookmarks.CheckOnClick = true;
            this.tsbShowBookmarks.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbShowBookmarks.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbShowBookmarks.Name = "tsbShowBookmarks";
            this.tsbShowBookmarks.Size = new System.Drawing.Size(23, 23);
            this.tsbShowBookmarks.Text = "Bookmarks";
            this.tsbShowBookmarks.Click += new System.EventHandler(this.TsbShowBookmarksClick);
            //
            // tsbShowFilter
            //
            this.tsbShowFilter.CheckOnClick = true;
            this.tsbShowFilter.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbShowFilter.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbShowFilter.Name = "tsbShowFilter";
            this.tsbShowFilter.Size = new System.Drawing.Size(23, 23);
            this.tsbShowFilter.Text = "Filter";
            this.tsbShowFilter.Click += new System.EventHandler(this.TsbShowFilterClick);
            //
            // tsbShowStatistic
            //
            this.tsbShowStatistic.CheckOnClick = true;
            this.tsbShowStatistic.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbShowStatistic.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbShowStatistic.Name = "tsbShowStatistic";
            this.tsbShowStatistic.Size = new System.Drawing.Size(23, 23);
            this.tsbShowStatistic.Text = "Statistic";
            this.tsbShowStatistic.Click += new System.EventHandler(this.TsbShowStatisticClick);
            //
            // toolStripSeparator1
            //
            this.toolStripSeparator1.Name = "toolStripSeparator1";
            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 26);
            //
            // tsbTimeShift
            //
            this.tsbTimeShift.CheckOnClick = true;
            this.tsbTimeShift.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.tsbTimeShift.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbTimeShift.Name = "tsbTimeShift";
            this.tsbTimeShift.Size = new System.Drawing.Size(23, 23);
            this.tsbTimeShift.Text = "Timeshift";
            this.tsbTimeShift.Click += new System.EventHandler(this.TsbTimeShiftClick);
            //
            // txtTimeShift
            //
            this.txtTimeShift.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.txtTimeShift.Enabled = false;
            this.txtTimeShift.Font = new System.Drawing.Font("Segoe UI", 9F);
            this.txtTimeShift.Margin = new System.Windows.Forms.Padding(1, 1, 1, 2);
            this.txtTimeShift.Name = "txtTimeShift";
            this.txtTimeShift.Size = new System.Drawing.Size(60, 23);
            this.txtTimeShift.Text = "0";
            this.txtTimeShift.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Right;
            this.txtTimeShift.Leave += new System.EventHandler(this.TxtTimeShiftValidated);
            this.txtTimeShift.Validated += new System.EventHandler(this.TxtTimeShiftValidated);
            //
            // tsbTimeShiftUnit
            //
            this.tsbTimeShiftUnit.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
            this.tsbTimeShiftUnit.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.tsbTimeShiftUnitMillisecond,
            this.tsbTimeShiftUnitSecond,
            this.tsbTimeShiftUnitMinute,
            this.tsbTimeShiftUnitHour,
            this.tsbTimeShiftUnitDay});
            this.tsbTimeShiftUnit.Enabled = false;
            this.tsbTimeShiftUnit.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbTimeShiftUnit.Name = "tsbTimeShiftUnit";
            this.tsbTimeShiftUnit.Size = new System.Drawing.Size(81, 23);
            this.tsbTimeShiftUnit.Text = "Millisecond";
            this.tsbTimeShiftUnit.DropDownOpening += new System.EventHandler(this.tsbTimeShiftUnit_DropDownOpening);
            //
            // tsbTimeShiftUnitMillisecond
            //
            this.tsbTimeShiftUnitMillisecond.Name = "tsbTimeShiftUnitMillisecond";
            this.tsbTimeShiftUnitMillisecond.Size = new System.Drawing.Size(135, 22);
            this.tsbTimeShiftUnitMillisecond.Text = "Millisecond";
            this.tsbTimeShiftUnitMillisecond.Click += new System.EventHandler(this.TsbTimeShiftUnitClicked);
            //
            // tsbTimeShiftUnitSecond
            //
            this.tsbTimeShiftUnitSecond.Name = "tsbTimeShiftUnitSecond";
            this.tsbTimeShiftUnitSecond.Size = new System.Drawing.Size(135, 22);
            this.tsbTimeShiftUnitSecond.Text = "Second";
            this.tsbTimeShiftUnitSecond.Click += new System.EventHandler(this.TsbTimeShiftUnitClicked);
            //
            // tsbTimeShiftUnitMinute
            //
            this.tsbTimeShiftUnitMinute.Name = "tsbTimeShiftUnitMinute";
            this.tsbTimeShiftUnitMinute.Size = new System.Drawing.Size(135, 22);
            this.tsbTimeShiftUnitMinute.Text = "Minute";
            this.tsbTimeShiftUnitMinute.Click += new System.EventHandler(this.TsbTimeShiftUnitClicked);
            //
            // tsbTimeShiftUnitHour
            //
            this.tsbTimeShiftUnitHour.Name = "tsbTimeShiftUnitHour";
            this.tsbTimeShiftUnitHour.Size = new System.Drawing.Size(135, 22);
            this.tsbTimeShiftUnitHour.Text = "Hour";
            this.tsbTimeShiftUnitHour.Click += new System.EventHandler(this.TsbTimeShiftUnitClicked);
            //
            // tsbTimeShiftUnitDay
            //
            this.tsbTimeShiftUnitDay.Name = "tsbTimeShiftUnitDay";
            this.tsbTimeShiftUnitDay.Size = new System.Drawing.Size(135, 22);
            this.tsbTimeShiftUnitDay.Text = "Day";
            this.tsbTimeShiftUnitDay.Click += new System.EventHandler(this.TsbTimeShiftUnitClicked);
            //
            // stBar
            //
            this.stBar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.stbStatus,
            this.stbMessageCount});
            this.stBar.Location = new System.Drawing.Point(0, 537);
            this.stBar.Name = "stBar";
            this.stBar.Size = new System.Drawing.Size(784, 24);
            this.stBar.SizingGrip = false;
            this.stBar.TabIndex = 3;
            this.stBar.Text = "statusStrip1";
            //
            // stbStatus
            //
            this.stbStatus.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right;
            this.stbStatus.ForeColor = System.Drawing.Color.White;
            this.stbStatus.Name = "stbStatus";
            this.stbStatus.Size = new System.Drawing.Size(94, 19);
            this.stbStatus.Text = "Status: Running";
            //
            // stbMessageCount
            //
            this.stbMessageCount.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right;
            this.stbMessageCount.ForeColor = System.Drawing.Color.White;
            this.stbMessageCount.Name = "stbMessageCount";
            this.stbMessageCount.Size = new System.Drawing.Size(71, 19);
            this.stbMessageCount.Text = "0 Messages";
            this.stbMessageCount.ToolTipText = "Count of received Messages";
            //
            // tblInnerLayout
            //
            this.tblInnerLayout.ColumnCount = 1;
            this.tblInnerLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
            this.tblInnerLayout.Controls.Add(this.errorPanelBack, 0, 0);
            this.tblInnerLayout.Controls.Add(this.LogDockPanel, 0, 1);
            this.tblInnerLayout.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tblInnerLayout.Location = new System.Drawing.Point(0, 26);
            this.tblInnerLayout.Margin = new System.Windows.Forms.Padding(0);
            this.tblInnerLayout.Name = "tblInnerLayout";
            this.tblInnerLayout.RowCount = 2;
            this.tblInnerLayout.RowStyles.Add(new System.Windows.Forms.RowStyle());
            this.tblInnerLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
            this.tblInnerLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
            this.tblInnerLayout.Size = new System.Drawing.Size(784, 511);
            this.tblInnerLayout.TabIndex = 4;
            //
            // errorPanelBack
            //
            this.errorPanelBack.BackColor = System.Drawing.Color.LightCoral;
            this.errorPanelBack.BorderColor = System.Drawing.SystemColors.ControlDark;
            this.errorPanelBack.Controls.Add(this.tblErrorPanel);
            this.errorPanelBack.Dock = System.Windows.Forms.DockStyle.Fill;
            this.errorPanelBack.Location = new System.Drawing.Point(3, 0);
            this.errorPanelBack.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
            this.errorPanelBack.Name = "errorPanelBack";
            this.errorPanelBack.Padding = new System.Windows.Forms.Padding(1);
            this.errorPanelBack.Size = new System.Drawing.Size(778, 48);
            this.errorPanelBack.TabIndex = 5;
            this.errorPanelBack.TextPadding = new System.Windows.Forms.Padding(0);
            this.errorPanelBack.Title = null;
            this.errorPanelBack.Visible = false;
            //
            // tblErrorPanel
            //
            this.tblErrorPanel.ColumnCount = 2;
            this.tblErrorPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
            this.tblErrorPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
            this.tblErrorPanel.Controls.Add(this.errorPanel, 0, 0);
            this.tblErrorPanel.Controls.Add(this.lnkClose, 1, 0);
            this.tblErrorPanel.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tblErrorPanel.Location = new System.Drawing.Point(1, 1);
            this.tblErrorPanel.Name = "tblErrorPanel";
            this.tblErrorPanel.RowCount = 1;
            this.tblErrorPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
            this.tblErrorPanel.Size = new System.Drawing.Size(776, 46);
            this.tblErrorPanel.TabIndex = 4;
            //
            // errorPanel
            //
            this.errorPanel.BackColor = System.Drawing.Color.LightCoral;
            this.errorPanel.BorderColor = System.Drawing.SystemColors.ControlDark;
            this.errorPanel.Dock = System.Windows.Forms.DockStyle.Fill;
            this.errorPanel.InfoIcon = global::Couchcoding.Logbert.Properties.Resources.log_error;
            this.errorPanel.Location = new System.Drawing.Point(1, 0);
            this.errorPanel.Margin = new System.Windows.Forms.Padding(1, 0, 1, 0);
            this.errorPanel.Name = "errorPanel";
            this.errorPanel.ShowBorder = false;
            this.errorPanel.ShowInfoIcon = true;
            this.errorPanel.Size = new System.Drawing.Size(735, 46);
            this.errorPanel.TabIndex = 2;
            this.errorPanel.Text = "Message";
            this.errorPanel.TextPadding = new System.Windows.Forms.Padding(0, 0, 0, 0);
            this.errorPanel.Title = "An error occured";
            //
            // lnkClose
            //
            this.lnkClose.ActiveLinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
            this.lnkClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.lnkClose.AutoSize = true;
            this.lnkClose.ForeColor = System.Drawing.Color.Maroon;
            this.lnkClose.LinkColor = System.Drawing.Color.Maroon;
            this.lnkClose.Location = new System.Drawing.Point(740, 3);
            this.lnkClose.Margin = new System.Windows.Forms.Padding(3, 3, 3, 0);
            this.lnkClose.Name = "lnkClose";
            this.lnkClose.Size = new System.Drawing.Size(33, 13);
            this.lnkClose.TabIndex = 3;
            this.lnkClose.TabStop = true;
            this.lnkClose.Text = "Close";
            this.lnkClose.VisitedLinkColor = System.Drawing.Color.Maroon;
            this.lnkClose.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkCloseLinkClicked);
            //
            // FrmLogDocument
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(784, 561);
            this.Controls.Add(this.tblInnerLayout);
            this.Controls.Add(this.stBar);
            this.Controls.Add(this.tsMessages);
            this.DockAreas = ((WeifenLuo.WinFormsUI.Docking.DockAreas)((WeifenLuo.WinFormsUI.Docking.DockAreas.Float | WeifenLuo.WinFormsUI.Docking.DockAreas.Document)));
            this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
            this.Name = "FrmLogDocument";
            this.ShowHint = WeifenLuo.WinFormsUI.Docking.DockState.Document;
            this.TabText = "Log Document";
            this.Text = "Log Document";
            ((System.ComponentModel.ISupportInitialize)(this.LogDockPanel)).EndInit();
            this.tsMessages.ResumeLayout(false);
            this.tsMessages.PerformLayout();
            this.stBar.ResumeLayout(false);
            this.stBar.PerformLayout();
            this.tblInnerLayout.ResumeLayout(false);
            this.errorPanelBack.ResumeLayout(false);
            this.tblErrorPanel.ResumeLayout(false);
            this.tblErrorPanel.PerformLayout();
            this.ResumeLayout(false);
            this.PerformLayout();

    }

    #endregion

    private WeifenLuo.WinFormsUI.Docking.DockPanel LogDockPanel;
    private Couchcoding.Logbert.Gui.Controls.ToolStripEx tsMessages;
    private System.Windows.Forms.ToolStripButton tsbShowDebug;
    private System.Windows.Forms.ToolStripButton tsbShowInfo;
    private System.Windows.Forms.ToolStripButton tsbShowWarn;
    private System.Windows.Forms.ToolStripButton tsbShowError;
    private System.Windows.Forms.ToolStripButton tsbShowFatal;
    private System.Windows.Forms.ToolStripSeparator tssLogLevel;
    private System.Windows.Forms.ToolStripButton tsbStartPause;
    private System.Windows.Forms.ToolStripButton tsbGotoFirstMessage;
    private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
    private System.Windows.Forms.ToolStripButton tsbGotoLastMessage;
    private System.Windows.Forms.ToolStripButton tsbTraceLastMessage;
    private System.Windows.Forms.ToolStripLabel tslLogLevel;
    private System.Windows.Forms.ToolStripButton tsbShowTrace;
    private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
    private System.Windows.Forms.ToolStripButton tsbZoomIn;
    private System.Windows.Forms.ToolStripButton tsbZoomOut;
    private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
    private System.Windows.Forms.ToolStripButton tsbClearMessages;
    private System.Windows.Forms.ToolStripSeparator tsSeperatorWindows;
    private System.Windows.Forms.ToolStripButton tsbShowMessageDetails;
    private System.Windows.Forms.ToolStripButton tsbShowLoggerTree;
    private System.Windows.Forms.ToolStripButton tsbShowBookmarks;
    private System.Windows.Forms.Timer tmrUpdate;
    private System.Windows.Forms.ToolStripButton tsbReload;
    private System.Windows.Forms.ToolStripButton tsbTimeShift;
    private System.Windows.Forms.ToolStripTextBox txtTimeShift;
    private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
    private System.Windows.Forms.ToolStripButton tsbToggleBookmark;
    private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
    private System.Windows.Forms.ToolStripButton tsbShowFilter;
    private System.Windows.Forms.ToolStripDropDownButton tsbSaveMessages;
    private System.Windows.Forms.ToolStripMenuItem cmsSaveMessagesRaw;
    private System.Windows.Forms.ToolStripMenuItem cmsSaveMessagesCsv;
    private System.Windows.Forms.StatusStrip stBar;
    private System.Windows.Forms.ToolStripStatusLabel stbStatus;
    private System.Windows.Forms.ToolStripStatusLabel stbMessageCount;
    private System.Windows.Forms.ToolStripButton tsbShowStatistic;
    private System.Windows.Forms.ToolStripDropDownButton tsbTimeShiftUnit;
    private System.Windows.Forms.ToolStripMenuItem tsbTimeShiftUnitMillisecond;
    private System.Windows.Forms.ToolStripMenuItem tsbTimeShiftUnitSecond;
    private System.Windows.Forms.ToolStripMenuItem tsbTimeShiftUnitMinute;
    private System.Windows.Forms.ToolStripMenuItem tsbTimeShiftUnitHour;
    private System.Windows.Forms.ToolStripMenuItem tsbTimeShiftUnitDay;
    private Gui.Controls.TableLayoutPanelEx tblInnerLayout;
    private Gui.Controls.InfoPanel errorPanel;
    private Gui.Controls.LinkLabelEx lnkClose;
    private Gui.Controls.TableLayoutPanelEx tblErrorPanel;
    private Gui.Controls.InfoPanel errorPanelBack;
  }
}


text:
using System;
using System.Collections.Generic;
using System.Text;
using OpenTK;
using OpenTK.Graphics.OpenGL;
using Komires.MataliPhysics;

namespace MataliPhysicsDemo
{
    /// <summary>
    /// This is the main type for your game
    /// </summary>
    public class Lamp1Animation1
    {
        Demo demo;
        PhysicsScene scene;
        string instanceIndexName;

        string sphereName;
        string yellowName;
        string particleName;
        string soundName;

        Shape sphere;
        PhysicsObject bodyMain;
        PhysicsObject bodyEmitter;
        PhysicsObject bodyLight;
        Constraint constraint1;

        int frameCount;

        PhysicsObject particle;
        StringBuilder particleNameBuilder;
        string particleInstanceIndexName;
        int particleNameLength;
        int particleCount;
        int maxParticleSimulationFrameCount;
        int maxParticleFrameCount;
        int maxParticleCount;

        Random random;

        Vector3 position;

        Vector3 vectorZero;
        Matrix4 matrixIdentity;

        public Lamp1Animation1(Demo demo, int instanceIndex)
        {
            this.demo = demo;
            instanceIndexName = " " + instanceIndex.ToString();

            sphereName = "Sphere";
            yellowName = "Yellow";
            particleName = "Lamp 1 Particle" + instanceIndexName + " ";
            soundName = "Roll";

            particleNameBuilder = new StringBuilder(particleName);
            particleNameLength = particleNameBuilder.Length;
            maxParticleSimulationFrameCount = 80;
            maxParticleFrameCount = 4;
            maxParticleCount = maxParticleSimulationFrameCount / maxParticleFrameCount;

            random = new Random(instanceIndex);

            vectorZero = Vector3.Zero;
            matrixIdentity = Matrix4.Identity;
        }

        public void Initialize(PhysicsScene scene)
        {
            this.scene = scene;
        }

        public void SetControllers()
        {
            sphere = scene.Factory.ShapeManager.Find("Sphere");
            bodyMain = scene.Factory.PhysicsObjectManager.Find("Lamp 1 Body Main" + instanceIndexName);
            bodyEmitter = scene.Factory.PhysicsObjectManager.Find("Lamp 1 Body Emitter" + instanceIndexName);
            bodyLight = scene.Factory.PhysicsObjectManager.Find("Lamp 1 Body Light" + instanceIndexName);
            constraint1 = scene.Factory.ConstraintManager.Find("Lamp 1 Constraint 1" + instanceIndexName);

            frameCount = 0;
            particleCount = -1;

            PhysicsObject objectBase = scene.Factory.PhysicsObjectManager.Find("Lamp 1 Body" + instanceIndexName);
            if (objectBase != null)
                objectBase.UserControllers.PostTransformMethods += new SimulateMethod(Flame);
        }

        public void Flame(SimulateMethodArgs args)
        {
            PhysicsScene scene = demo.Engine.Factory.PhysicsSceneManager.Get(args.OwnerSceneIndex);
            PhysicsObject objectBase = scene.Factory.PhysicsObjectManager.Get(args.OwnerIndex);

            float time = args.Time;

            if (objectBase.IsBrokenRigidGroup || (bodyEmitter == null) || (constraint1 == null) || constraint1.IsBroken)
            {
                if ((bodyLight != null) && (bodyLight.Light != null) && bodyLight.Light.Enabled)
                    bodyLight.Light.Enabled = false;

                return;
            }

            frameCount++;

            if (frameCount > maxParticleFrameCount)
            {
                frameCount = 0;

                bodyLight.Light.Intensity = (float)random.NextDouble() * 0.2f + 0.8f;

                particleCount = (particleCount + 1) % maxParticleCount;
                particleNameBuilder.Remove(particleNameLength, particleNameBuilder.Length - particleNameLength);
                particleNameBuilder.Append(particleCount);
                particleInstanceIndexName = particleNameBuilder.ToString();

                particle = scene.Factory.PhysicsObjectManager.FindOrCreate(particleInstanceIndexName);

                particle.Shape = sphere;
                particle.UserDataStr = sphereName;
                particle.Material.UserDataStr = yellowName;
                particle.Material.TransparencyFactor = 0.9f;
                particle.Material.TransparencyStepFactor = -0.01f;
                particle.CreateSound(true);
                particle.Sound.Range = 50.0f;
                particle.Sound.AmplitudeFactor = 1000.0f;
                particle.Sound.MinAmplitudeFactor = 0.0f;
                particle.Sound.UserDataStr = soundName;

                bodyEmitter.MainWorldTransform.GetPosition(ref position);

                particle.InitLocalTransform.SetRotation(ref matrixIdentity);
                particle.InitLocalTransform.SetPosition(ref position);

                Vector3 velocity = vectorZero;

                scene.GetGravityDirection(ref velocity);

                Vector3.Multiply(ref velocity, -10.0f, out velocity);

                particle.InitLocalTransform.SetLinearVelocity(ref velocity);
                particle.InitLocalTransform.SetAngularVelocity(ref vectorZero);
                particle.Integral.SetDensity(0.002f);
                particle.DisableCollision(bodyMain, true);
                particle.MaxSimulationFrameCount = maxParticleSimulationFrameCount;
                particle.MaxDisableCollisionFrameCount = 10;
                particle.EnableCursorInteraction = false;
                particle.EnableLocalGravity = true;
                particle.EnableRemovePhysicsObjectsFromManagerAfterMaxSimulationFrameCount = false;
                particle.Material.TransparencySecondPass = false;

                scene.UpdateFromInitLocalTransform(particle);
            }
        }
    }
}

redpajama_set_name: RedPajamaGithub


text:
#include "glimageloader.h"

// source : https://en.wikibooks.org/wiki/OpenGL_Programming/Intermediate/Textures

#include <png.h>

#include <stdio.h>

#define TEXTURE_LOAD_ERROR 0

using namespace std;
/** loadTexture
 * 	loads a png file into an opengl texture object, using cstdio , libpng, and opengl.
 *
 * 	\param filename : the png file to be loaded
 * 	\param width : width of png, to be updated as a side effect of this function
 * 	\param height : height of png, to be updated as a side effect of this function
 *
 * 	\return GLuint : an opengl texture id.  Will be 0 if there is a major error,
 * 					should be validated by the client of this function.
 *
 */
static GLuint loadTextureFromPng(const string &filename, int &width, int &height)
{
    //header for testing if it is a png
    png_byte header[8];

    //open file as binary
    FILE *fp = fopen(filename.c_str(), "rb");
    if (!fp) {
        return TEXTURE_LOAD_ERROR;
    }

    //read the header
    auto ret = fread(header, 1, 8, fp);
    (void)ret;

    //test if png
    int is_png = !png_sig_cmp(header, 0, 8);
    if (!is_png) {
        fclose(fp);
        return TEXTURE_LOAD_ERROR;
    }

    //create png struct
    png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL,
                                                 NULL, NULL);
    if (!png_ptr) {
        fclose(fp);
        return (TEXTURE_LOAD_ERROR);
    }

    //create png info struct
    png_infop info_ptr = png_create_info_struct(png_ptr);
    if (!info_ptr) {
        png_destroy_read_struct(&png_ptr, (png_infopp) NULL, (png_infopp) NULL);
        fclose(fp);
        return (TEXTURE_LOAD_ERROR);
    }

    //create png info struct
    png_infop end_info = png_create_info_struct(png_ptr);
    if (!end_info) {
        png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL);
        fclose(fp);
        return (TEXTURE_LOAD_ERROR);
    }

    //png error stuff, not sure libpng man suggests this.
    if (setjmp(png_jmpbuf(png_ptr))) {
        png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
        fclose(fp);
        return (TEXTURE_LOAD_ERROR);
    }

    //init png reading
    png_init_io(png_ptr, fp);

    //let libpng know you already read the first 8 bytes
    png_set_sig_bytes(png_ptr, 8);

    // read all the info up to the image data
    png_read_info(png_ptr, info_ptr);

    //variables to pass to get info
    int bit_depth, color_type;
    png_uint_32 twidth, theight;

    // get info about png
    png_get_IHDR(png_ptr, info_ptr, &twidth, &theight, &bit_depth, &color_type,
                 NULL, NULL, NULL);

    //update width and height based on png info
    width = twidth;
    height = theight;

    /* Change a paletted/grayscale image to RGB */
    if (color_type == PNG_COLOR_TYPE_PALETTE && bit_depth <= 8) {
        png_set_expand(png_ptr);
    }

    /* Change a grayscale image to RGB */
    if (color_type == PNG_COLOR_TYPE_GRAY
            || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
        png_set_gray_to_rgb(png_ptr);
    }

    /* If the PNG file has 16 bits per channel, strip them down to 8 */
    if (bit_depth == 16) {
        png_set_strip_16(png_ptr);
    }

    /* use 1 byte per pixel */
    png_set_packing(png_ptr);

    // PNG Transforms
    if (color_type == PNG_COLOR_TYPE_RGB) {
        png_set_add_alpha(png_ptr, 0xff, PNG_FILLER_AFTER);
    }

    // Update the png info struct.
    png_read_update_info(png_ptr, info_ptr);

    // Row size in bytes.
    int rowbytes = png_get_rowbytes(png_ptr, info_ptr);

    // Allocate the image_data as a big block, to be given to opengl
    png_byte *image_data = new (std::nothrow) png_byte[rowbytes * height];
    if (!image_data) {
        //clean up memory and close stuff
        png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
        fclose(fp);
        return TEXTURE_LOAD_ERROR;
    }

    //row_pointers is for pointing to image_data for reading the png with libpng
    png_bytep *row_pointers = new (std::nothrow) png_bytep[height];
    if (!row_pointers) {
        //clean up memory and close stuff
        png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
        delete[] image_data;
        fclose(fp);
        return TEXTURE_LOAD_ERROR;
    }

    // set the individual row_pointers to point at the correct offsets of image_data
    for (int i = 0; i < height; ++i)
        row_pointers[height - 1 - i] = image_data + i * rowbytes;
        //row_pointers[i] = image_data + i * rowbytes;

    // read the png into image_data through row_pointers
    png_read_image(png_ptr, row_pointers);

    // Now generate the OpenGL texture object
    GLuint texture;
    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE,
                 reinterpret_cast<GLvoid*>(image_data));

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

    // clean up memory and close stuff
    png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
    delete[] image_data;
    delete[] row_pointers;
    fclose(fp);

    return texture;
}

GLuint loadImage(const string &filename, int &width, int &height)
{
    auto tmp = filename.find_last_of('.');
    if (tmp == std::string::npos) {
        fprintf(stderr, "%s unable to detect image extension\n", __func__ );
        return 0;
    }

    std::string extension = filename.substr(tmp);
    if (extension != ".png") {
        fprintf(stderr, "%s format %s is not supported\n", __func__, extension.c_str());
        return 0;
    }

    return loadTextureFromPng(filename, width, height);
}


text:
docker-nginx
============

Basic dockerized version of nginx what will serve files from /var/www/html/ and upload it's ip for my nginx-proxy server to read

```
/services/web/<name>/<docker hostname>
  192.168.1.2
```

The etcd updater script will need the environment variable ETCD set so it can connect to etcd. ETCD=10.0.1.2:4001


text:
def extractHooplaTranslations(item):
	'''
	Parser for 'Hoopla Translations'
	'''

	vol, chp, frag, postfix = extractVolChapterFragmentPostfix(item['title'])
	if not (chp or vol) or "preview" in item['title'].lower():
		return False

	tagmap = {

		"Mushoku Tensei Redundancy Chapters"                     :  "Mushoku Tensei Redundancy",
		"Mushoku Tensei Redundancy Chapters TL"                  :  "Mushoku Tensei Redundancy",

	}

	for tag, sname in tagmap.items():
		if tag in item['tags']:
			return buildReleaseMessageWithType(item, sname, vol, chp, frag=frag)

	return False


text:
public class InterfaceConflict5{
  public interface A{
    int a = 0;
  }

  public class B implements A{
    public int a = 0;
  }

  public static class C extends B
  implements A{
    void foo(){
      System.out.println("" + <caret>a);
    }
  }
}


text:
using log4net;
using Soldier.Extension.IPSwitcher.Dao;
using Soldier.Extension.IPSwitcher.Entity;
using Soldier.Extension.IPSwitcher.Service;
using Soldier.Framework.Bean;
using Soldier.Framework.Dao;
using Soldier.Framework.Utils;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Security.Principal;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Soldier.Extension.IPSwitcher
{
    /// <summary>
    /// Interaction logic for MainPage.xaml
    /// </summary>
    public partial class MainPage : Page
    {
        private static ILog logger = LogUtils.GetLogger(typeof(MainPage));
        private NetworkService networkService = BeanHelper<NetworkService>.GetBean();
        private DatabaseService databaseService = BeanHelper<DatabaseService>.GetBean();

        public MainPage()
        {
            InitializeComponent();
            databaseService.CreateIsNotExists();
            databaseService.CreateTableIsNotExists();
            dataGrid.ItemsSource = networkService.GetAllData();
        }

        private void New_Click(object sender, RoutedEventArgs e)
        {
            EditWindow window = new EditWindow()
            {
                Network = new BD001Entity()
            };
            window.RefreshParent += new EditWindow.EventHandler(() => { dataGrid.ItemsSource = networkService.GetAllData(); });
            window.ShowDialog();
        }
        private void Edit_Click(object sender, RoutedEventArgs e)
        {
            BD001Entity network = (BD001Entity)dataGrid.SelectedItem;
            if (network == null)
            {
                return;
            }
            EditWindow window = new EditWindow()
            {
                Network = network
            };
            window.RefreshParent += () => { dataGrid.ItemsSource = networkService.GetAllData(); };
            window.ShowDialog();
        }
        private void Delete_Click(object sender, RoutedEventArgs e)
        {
            BD001Entity network = (BD001Entity)dataGrid.SelectedItem;
            using(DaoHelper dao = databaseService.GetDaoHelper())
            {
                BeanHelper<BD001Dao>.GetBean().Delete(dao, network);
            }
            dataGrid.ItemsSource = networkService.GetAllData();
            MessageBox.Show("操作成功");
        }

        private void Apply_Click(object sender, RoutedEventArgs e)
        {
            BD001Entity network = (BD001Entity)dataGrid.SelectedItem;
            if(network == null)
            {
                return;
            }
            if (SystemUtils.IsAdministrator())
            {
                Result<object> result = networkService.SetNetwork(network);
                MessageBox.Show(result.Message);
            }
            else if (SystemUtils.CallAdministrator())
            {
                Application.Current.Shutdown();
            }
        }

        private void Auto_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("0");
            BD001Entity network = (BD001Entity)dataGrid.SelectedItem;
            if (network == null)
            {
                return;
            }
            MessageBox.Show("1");
            if (SystemUtils.IsAdministrator())
            {
                MessageBox.Show("2");
                Result<object> result = networkService.EnableDHCP(network);
                MessageBox.Show(result.Message);
            }
            else if (SystemUtils.CallAdministrator())
            {
                MessageBox.Show("3");
                Application.Current.Shutdown();
            }
        }

        private void DataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            BD001Entity network = (BD001Entity)dataGrid.SelectedItem;
            if (network == null)
            {
                return;
            }
            EditWindow window = new EditWindow()
            {
                Network = network
            };
            window.RefreshParent += () => { dataGrid.ItemsSource = networkService.GetAllData(); };
            window.ShowDialog();
        }
    }
}


text:
"""Drop unique on cache.

Revision ID: 850a674e3ccf
Revises: dfd8b2480e1b
Create Date: 2016-05-20 19:05:42.367783

"""
from alembic import op

# revision identifiers, used by Alembic.
revision = '850a674e3ccf'
down_revision = 'dfd8b2480e1b'

def upgrade():
    op.drop_constraint(u'cache_key_key', 'cache', type_='unique')
    op.create_index(op.f('ix_cache_key'), 'cache', ['key'], unique=False)

def downgrade():
    op.drop_index(op.f('ix_cache_key'), table_name='cache')
    op.create_unique_constraint(u'cache_key_key', 'cache', ['key'])


text:
require 'concurrent'

function pong()
    while true do
        local msg = concurrent.receive()
        if msg.body == 'finished' then
            break
        elseif msg.body == 'ping' then
            print('pong received ping')
            concurrent.send(msg.from, { body = 'pong' })
        end
    end
    print('pong finished')
end

function ping(n, pid)
    for i = 1, n do
        concurrent.send(pid, {
            from = concurrent.self(),
            body = 'ping'
        })
        local msg = concurrent.receive()
        if msg.body == 'pong' then
            print('ping received pong')
        end
    end
    concurrent.send(pid, {
        from = concurrent.self(),
        body = 'finished'
    })
    print('ping finished')
end

pid = concurrent.spawn(pong)
concurrent.spawn(ping, 3, pid)

concurrent.loop()


text:
package es.trigit.gitftask.Pantallas;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.TextView;

import com.facebook.HttpMethod;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.facebook.model.GraphObject;
import com.facebook.widget.LoginButton;
import com.github.rahatarmanahmed.cpv.CircularProgressView;
import com.google.android.gms.analytics.HitBuilders;
import com.nineoldandroids.animation.AnimatorSet;
import com.nineoldandroids.animation.ObjectAnimator;
import com.nineoldandroids.animation.ValueAnimator;
import com.rengwuxian.materialedittext.MaterialEditText;
import com.squareup.picasso.Picasso;

import java.io.IOException;
import java.util.Arrays;

import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import es.trigit.gitftask.Conexion.Respuesta;
import es.trigit.gitftask.Conexion.IServicio;
import es.trigit.gitftask.Objetos.Usuario;
import es.trigit.gitftask.R;
import es.trigit.gitftask.Utiles.GAHelper;
import es.trigit.gitftask.Utiles.Globales;
import retrofit.Callback;
import retrofit.RestAdapter;
import retrofit.RetrofitError;

import com.google.gson.Gson;

public class ActivityLogin extends FragmentActivity {

    private enum TipoLogin {login, registro, facebook}

    private ProgressDialog mProgressDialog;
    private boolean mModoRegistrar;
    private Usuario mUsuario;
    private Activity mActivity;

    @InjectView(R.id.panelSuperior)
    View panelSuperior;
    @InjectView(R.id.drwRegalo)
    View drwRegalo;
    @InjectView(R.id.progress)
    CircularProgressView progress;
    @InjectView(R.id.tvGiftask)
    TextView tvGiftask;
    @InjectView(R.id.etActivityLogin_email)
    MaterialEditText etEmail;
    @InjectView(R.id.etActivityLogin_nickname)
    MaterialEditText etNickname;
    @InjectView(R.id.etActivityLogin_password)
    MaterialEditText etPassword;
    @InjectView(R.id.btActivityLogin_facebook)
    LoginButton btLoginFacebook;
    @InjectView(R.id.btActivityLogin_registrar)
    Button btRegistrar;
    @InjectView(R.id.btActivityLogin_conectar)
    Button btConectar;

    /**
     * Variables para el login de Facebook
     */
    private UiLifecycleHelper uiHelper;

    int originalHeight;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ButterKnife.inject(this);
        mActivity = this;

        uiHelper = new UiLifecycleHelper(this, new Session.StatusCallback() {
            @Override
            public void call(Session session, SessionState sessionState, Exception e) {
                onSessionStateChange(session, sessionState, e);
            }
        });
        uiHelper.onCreate(savedInstanceState);

        btLoginFacebook.setReadPermissions(Arrays.asList("public_profile", "email", "user_birthday"));

        mModoRegistrar = false;
        mUsuario = new Usuario();
        mProgressDialog = new ProgressDialog(this);
        etNickname.setVisibility(View.INVISIBLE);

        ((GAHelper)this.getApplication()).crearTracker();
    }

    @OnClick(R.id.btActivityLogin_registrar)
    public void pulsarRegistrar(Button button) {
        GAHelper.tracker.send(new HitBuilders.EventBuilder()
                .setCategory("BTN-LOGIN")
                .setAction("Pulsar Registrar")
                .build());

        etNickname.setVisibility(View.VISIBLE);
        btRegistrar.setVisibility(View.INVISIBLE);
        mModoRegistrar = !mModoRegistrar;
    }

    @OnClick(R.id.btActivityLogin_conectar)
    public void pulsarConectar(Button button) {
        if (mModoRegistrar) {
            GAHelper.tracker.send(new HitBuilders.EventBuilder()
                    .setCategory("ACTION-LOGIN")
                    .setAction("Registro")
                    .build());

            new ThreadRegistro().execute();
        } else {
            GAHelper.tracker.send(new HitBuilders.EventBuilder()
                    .setCategory("ACTION-LOGIN")
                    .setAction("Iniciar Sesión")
                    .build());

//            new ThreadLogin().execute();
            hacerLogin();
        }
    }

    @Override
    public void onBackPressed() {
        if (!mModoRegistrar) {
            super.onBackPressed();
        } else {
            GAHelper.tracker.send(new HitBuilders.EventBuilder()
                    .setCategory("BTN-LOGIN")
                    .setAction("Volver registrar")
                    .build());
            mModoRegistrar = false;
            etNickname.setVisibility(View.INVISIBLE);
            btRegistrar.setVisibility(View.VISIBLE);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        uiHelper.onResume();
    }

    private void finActivity(TipoLogin tipo) {
        Globales.setUsuarioLogueado(mUsuario);
        mActivity.startActivity(new Intent(mActivity, ActivityPrincipal.class));
        mProgressDialog.dismiss();
        finish();
    }

    private void onSessionStateChange(Session session, SessionState state, Exception exception) {
        if (session != null && session.isOpened()) {
            new ThreadFacebook().execute(session);
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        uiHelper.onActivityResult(requestCode, resultCode, data);
    }

    private void muestraCargando() {
        // Oculto el teclado
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(etPassword.getWindowToken(), 0);

        // Dimensiones de la pantalla
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        int width = metrics.widthPixels;
        int height = metrics.heightPixels;

        originalHeight = panelSuperior.getMeasuredHeight();

        // Animación del tamaño de la caja
        ValueAnimator anim = ValueAnimator.ofInt(panelSuperior.getMeasuredHeight(), height + 100);
        anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                int val = (Integer) valueAnimator.getAnimatedValue();
                ViewGroup.LayoutParams layoutParams = panelSuperior.getLayoutParams();
                layoutParams.height = val;
                panelSuperior.setLayoutParams(layoutParams);
            }
        });
        anim.setDuration(500);
        anim.start();

        // Mostramos el progreso y el titulo
        progress.setVisibility(View.VISIBLE);
        tvGiftask.setAlpha(0.0f);
        tvGiftask.setVisibility(View.VISIBLE);
        ObjectAnimator animTitle = ObjectAnimator.ofFloat(tvGiftask, "alpha", 0.0f, 1).setDuration(500);
        animTitle.setStartDelay(200);
        animTitle.start();

        // Movemos y escalamos el regalo y el progreso
        AnimatorSet set = new AnimatorSet();
        set.playTogether(
                ObjectAnimator.ofFloat(drwRegalo, "scaleX", 1, 2f),
                ObjectAnimator.ofFloat(drwRegalo, "scaleY", 1, 2f),
                ObjectAnimator.ofFloat(tvGiftask, "translationY", 0, height / 14),
                ObjectAnimator.ofFloat(drwRegalo, "translationY", 0, height / 4),
                ObjectAnimator.ofFloat(progress, "translationY", 0, height / 3)
        );
        set.setDuration(1 * 500).start();
    }

    private void ocultaCargando(){

        // Animación del tamaño de la caja
        ValueAnimator anim = ValueAnimator.ofInt(panelSuperior.getMeasuredHeight(), originalHeight);
        anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                int val = (Integer) valueAnimator.getAnimatedValue();
                ViewGroup.LayoutParams layoutParams = panelSuperior.getLayoutParams();
                layoutParams.height = val;
                panelSuperior.setLayoutParams(layoutParams);
            }
        });
        anim.setDuration(500);
        anim.start();

        // Mostramos el progreso y el titulo
//        progress.setVisibility(View.GONE);
//        tvGiftask.setAlpha(0.0f);
//        tvGiftask.setVisibility(View.GONE);
        ObjectAnimator animTitle = ObjectAnimator.ofFloat(tvGiftask, "alpha", 1f, 0.0f).setDuration(500);
        animTitle.setStartDelay(200);
        animTitle.start();

        // Movemos y escalamos el regalo y el progreso
        AnimatorSet set = new AnimatorSet();
        set.playTogether(
                ObjectAnimator.ofFloat(drwRegalo, "scaleX", drwRegalo.getScaleX(), 1f),
                ObjectAnimator.ofFloat(drwRegalo, "scaleY", drwRegalo.getScaleY(), 1f),
                ObjectAnimator.ofFloat(tvGiftask, "translationY", tvGiftask.getTranslationY(), 0), //originalHeight / 14
                ObjectAnimator.ofFloat(drwRegalo, "translationY", drwRegalo.getTranslationY(), 0), //originalHeight / 4,
                ObjectAnimator.ofFloat(progress, "translationY", progress.getTranslationY(), 0) //originalHeight / 3
        );
        set.setDuration(1 * 500).start();
    }

    private void hacerLogin() {
        RestAdapter ra = new RestAdapter.Builder().setEndpoint(IServicio.API_URL).build();
        IServicio iS = ra.create(IServicio.class);

        muestraCargando();

        iS.login(etNickname.getText().toString(), etPassword.getText().toString(), etEmail.getText().toString(), new Callback<Respuesta.Objeto<Usuario>>() {
            @Override
            public void success(Respuesta.Objeto<Usuario> resp, retrofit.client.Response response) {
                Log.e("LOGIN", "ACIEEEEEEERTO");
                if(resp.response != null) {
                    mUsuario = resp.response;
                    finActivity(TipoLogin.login);
                } else {
                    ocultaCargando();
                }
            }

            @Override
            public void failure(RetrofitError error) {
                Log.e("LOGIN", error.getMessage());
                Log.e("LOGIN","ERROOOOOOOOOOOOOOOOR");
                ocultaCargando();
            }
        });
    }

    //---------------------------------------------------
    //-------------------- Hebras -----------------------
    //---------------------------------------------------

    public class ThreadRegistro extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            muestraCargando();

            mUsuario.setEmail(etEmail.getText().toString());

            mUsuario.setUsername("NickLogin");
            mProgressDialog.setMessage("Registrando usuario...");

//            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            try {
                //TODO Realizar el registro con el servidor
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            finActivity(TipoLogin.registro);
        }
    }

    public class ThreadLogin extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            muestraCargando();
            mUsuario.setEmail(etEmail.getText().toString());
            mUsuario.setUsername(etNickname.getText().toString());

            mProgressDialog.setMessage("Iniciando sesión...");
//            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            try {
                //TODO Realizar el login con el servidor
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            finActivity(TipoLogin.login);
        }
    }

    public class ThreadFacebook extends AsyncTask<Session, Void, Void> {
        @Override
        protected void onPreExecute() {
            mProgressDialog.setMessage("Logueando con Facebook");
            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Session... session) {

            new Request(
                    session[0],
                    "/me",
                    null,
                    HttpMethod.GET,
                    new Request.Callback() {
                        public void onCompleted(Response response) {
                            try {
                                GraphObject user = response.getGraphObject();
                                mUsuario.setEmail(user.asMap().get("email").toString());
                                mUsuario.setFechaCumpleanos(user.asMap().get("birthday").toString());
                                mUsuario.setNombre(user.asMap().get("first_name").toString() + " " + user.asMap().get("last_name").toString());
                                mUsuario.setGender(user.asMap().get("gender").toString());
                                mUsuario.setLocalidad(user.asMap().get("locale").toString());
                                mUsuario.setImagen(Picasso.with(mActivity).load("https://graph.facebook.com/" + user.asMap().get("id").toString() + "/picture?type=large").get());

                            } catch (IOException e) {
                                //Se puede haber cancelado la sincronizacion con facebook, por lo que user es null
                                e.printStackTrace();
                            }

                            //TODO Registrarse con el correo e id

                        }
                    }
            ).executeAndWait();

            mProgressDialog.dismiss();
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            finActivity(TipoLogin.facebook);
        }
    }

}


text:
package org.springframework.security.scheduling;

import java.util.Date;
import java.util.concurrent.ScheduledFuture;

import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.Trigger;
import org.springframework.util.Assert;

/**
 * An implementation of {@link TaskScheduler} invoking it whenever the trigger indicates a
 * next execution time.
 *
 * @author Richard Valdivieso
 * @since 5.1
 */
public class DelegatingSecurityContextTaskScheduler implements TaskScheduler {

	private final TaskScheduler taskScheduler;

	/**
	 * Creates a new {@link DelegatingSecurityContextTaskScheduler}
	 * @param taskScheduler the {@link TaskScheduler}
	 */
	public DelegatingSecurityContextTaskScheduler(TaskScheduler taskScheduler) {
		Assert.notNull(taskScheduler, "Task scheduler must not be null");
		this.taskScheduler = taskScheduler;
	}

	@Override
	public ScheduledFuture<?> schedule(Runnable task, Trigger trigger) {
		return this.taskScheduler.schedule(task, trigger);
	}

	@Override
	public ScheduledFuture<?> schedule(Runnable task, Date startTime) {
		return this.taskScheduler.schedule(task, startTime);
	}

	@Override
	public ScheduledFuture<?> scheduleAtFixedRate(Runnable task, Date startTime, long period) {
		return this.taskScheduler.scheduleAtFixedRate(task, startTime, period);
	}

	@Override
	public ScheduledFuture<?> scheduleAtFixedRate(Runnable task, long period) {
		return this.taskScheduler.scheduleAtFixedRate(task, period);
	}

	@Override
	public ScheduledFuture<?> scheduleWithFixedDelay(Runnable task, Date startTime, long delay) {
		return this.taskScheduler.scheduleWithFixedDelay(task, startTime, delay);
	}

	@Override
	public ScheduledFuture<?> scheduleWithFixedDelay(Runnable task, long delay) {
		return this.taskScheduler.scheduleWithFixedDelay(task, delay);
	}

}


text:
cask "gobdokumente" do
  if MacOS.version <= :catalina
    version "1.6.8"
    sha256 :no_check
    url "https://download.moapp.software/GoBDokumente.zip",
        verified: "download.moapp.software/"

    livecheck do
      skip "Legacy version for catalina and earlier"
    end
  else
    version "2.0"
    sha256 :no_check
    url "https://download.moapp.software/GoBDokumente_BS.zip",
        verified: "download.moapp.software/"

    livecheck do
      url "https://sparkle.moapp.software/gobdokumente.xml"
      strategy :sparkle
    end
  end

  name "GoBDokumente"
  name "GoBDocuments"
  desc "Document management system"
  homepage "https://gobdokumente.de/"

  depends_on macos: ">= :el_capitan"

  app "GoBDokumente.app"
end


text:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

          <title>PersistenceEngine - Spark Project Core 1.6.1 API - org.apache.spark.deploy.master.PersistenceEngine</title>
          <meta name="description" content="PersistenceEngine - Spark Project Core 1.6.1 API - org.apache.spark.deploy.master.PersistenceEngine" />
          <meta name="keywords" content="PersistenceEngine Spark Project Core 1.6.1 API org.apache.spark.deploy.master.PersistenceEngine" />
          <meta http-equiv="content-type" content="text/html; charset=UTF-8" />

      <link href="../../../../../lib/template.css" media="screen" type="text/css" rel="stylesheet" />
      <link href="../../../../../lib/diagrams.css" media="screen" type="text/css" rel="stylesheet" id="diagrams-css" />

org.apache.spark.deploy.master

PersistenceEngine

        abstract
        class

        PersistenceEngine extends AnyRef

Allows Master to persist any state that is necessary in order to recover from a failure.
The following semantics are required:

addApplication and addWorker are called before completing registration of a new app/worker.

removeApplication and removeWorker are called at any time.
Given these two requirements, we will have all apps and workers persisted, but
we might not have yet deleted apps or workers that finished (so their liveness must be verified
during recovery).

The implementation of this trait defines how name-object pairs are stored or retrieved.

Annotations

                @DeveloperApi()

          Linear Supertypes

AnyRef, Any

<input id="mbrsel-input" type="text" accesskey="/" />

              Ordering

Alphabetic

By inheritance

                Inherited

PersistenceEngine

AnyRef

Any

Hide All

Show all

            Learn more about member selection

            Visibility

Public

All

Instance Constructors

        new

        PersistenceEngine()

Abstract Value Members

        abstract
        def

        persist(name: String, obj: AnyRef): Unit

Defines how the object is serialized and persisted.

Defines how the object is serialized and persisted. Implementation will
depend on the store used.

        abstract
        def

        read[T](prefix: String)(implicit arg0: ClassTag[T]): Seq[T]

Gives all objects, matching a prefix.

Gives all objects, matching a prefix. This defines how objects are
read/deserialized back.

        abstract
        def

        unpersist(name: String): Unit

Defines how the object referred by its name is removed from the store.

Concrete Value Members

        final
        def

        !=(arg0: AnyRef): Boolean

Definition Classes

AnyRef

        final
        def

        !=(arg0: Any): Boolean

Definition Classes

Any

        final
        def

        ##(): Int

Definition Classes

AnyRef → Any

        final
        def

        ==(arg0: AnyRef): Boolean

Definition Classes

AnyRef

        final
        def

        ==(arg0: Any): Boolean

Definition Classes

Any

        final
        def

        addApplication(app: ApplicationInfo): Unit

        final
        def

        addDriver(driver: DriverInfo): Unit

        final
        def

        addWorker(worker: WorkerInfo): Unit

        final
        def

        asInstanceOf[T0]: T0

Definition Classes

Any

        def

        clone(): AnyRef

Attributes

protected[java.lang]

Definition Classes

AnyRef

Annotations

                @throws(

      ...
    )

        def

        close(): Unit

        final
        def

        eq(arg0: AnyRef): Boolean

Definition Classes

AnyRef

        def

        equals(arg0: Any): Boolean

Definition Classes

AnyRef → Any

        def

        finalize(): Unit

Attributes

protected[java.lang]

Definition Classes

AnyRef

Annotations

                @throws(

      classOf[java.lang.Throwable]
    )

        final
        def

        getClass(): Class[_]

Definition Classes

AnyRef → Any

        def

        hashCode(): Int

Definition Classes

AnyRef → Any

        final
        def

        isInstanceOf[T0]: Boolean

Definition Classes

Any

        final
        def

        ne(arg0: AnyRef): Boolean

Definition Classes

AnyRef

        final
        def

        notify(): Unit

Definition Classes

AnyRef

        final
        def

        notifyAll(): Unit

Definition Classes

AnyRef

        final
        def

        readPersistedData(rpcEnv: RpcEnv): (Seq[ApplicationInfo], Seq[DriverInfo], Seq[WorkerInfo])

Returns the persisted data sorted by their respective ids (which implies that they're
sorted by time of creation).

        final
        def

        removeApplication(app: ApplicationInfo): Unit

        final
        def

        removeDriver(driver: DriverInfo): Unit

        final
        def

        removeWorker(worker: WorkerInfo): Unit

        final
        def

        synchronized[T0](arg0: ⇒ T0): T0

Definition Classes

AnyRef

        def

        toString(): String

Definition Classes

AnyRef → Any

        final
        def

        wait(): Unit

Definition Classes

AnyRef

Annotations

                @throws(

      ...
    )

        final
        def

        wait(arg0: Long, arg1: Int): Unit

Definition Classes

AnyRef

Annotations

                @throws(

      ...
    )

        final
        def

        wait(arg0: Long): Unit

Definition Classes

AnyRef

Annotations

                @throws(

      ...
    )

Inherited from AnyRef

Inherited from Any

Ungrouped


text:
layout: live
permalink: /live/
track-id: 100612538
book-isbn: 9780140385724
work-desc: Raspberry Pi based home automation system
---

What am I listening to?

What am I reading?

What am I working on?

{{page.work-desc}}


text:
![Try it now in CWS](https://raw.github.com/GoogleChrome/chrome-app-samples/master/tryitnowbutton.png "Click here to install this sample from the Chrome Web Store")

# Web Store API Sample App

Lets you upload and publish Chrome Apps and Extensions folders stored locally on your hard drive. The `chrome.identity` API is used to retrieve a valid token to authenticate against the [Chrome Web Store Publish API](http://developer.chrome.com/webstore/using_webstore_api). The zip process is handled by the external library [zip.js](http://gildas-lormeau.github.io/zip.js/) and the `chrome.fileSystem` API.

## APIs

* [runtime](http://developer.chrome.com/apps/app_runtime)
* [window](http://developer.chrome.com/apps/app_window)
* [identity](http://developer.chrome.com/apps/app_identity)
* [fileSystem](http://developer.chrome.com/apps/fileSystem)
* [storage](http://developer.chrome.com/apps/storage)

## Screenshot
![screenshot](/samples/web-store/assets/screenshot_1280_800.png)


text:
package encoding

import (
	"sync"
	"unicode/utf8"

	"golang.org/x/text/transform"
	"golang.org/x/text/encoding"
)

const (
	// RuneError is an alias for the UTF-8 replacement rune, '\uFFFD'.
	RuneError = '\uFFFD'

	// RuneSelf is the rune below which UTF-8 and the Unicode values are
	// identical.  Its also the limit for ASCII.
	RuneSelf = 0x80

	// ASCIISub is the ASCII substitution character.
	ASCIISub = '\x1a'
)

// Charmap is a structure for setting up encodings for 8-bit character sets,
// for transforming between UTF8 and that other character set.  It has some
// ideas borrowed from golang.org/x/text/encoding/charmap, but it uses a
// different implementation.  This implementation uses maps, and supports
// user-defined maps.
//
// We do assume that a character map has a reasonable substitution character,
// and that valid encodings are stable (exactly a 1:1 map) and stateless
// (that is there is no shift character or anything like that.)  Hence this
// approach will not work for many East Asian character sets.
//
// Measurement shows little or no measurable difference in the performance of
// the two approaches.  The difference was down to a couple of nsec/op, and
// no consistent pattern as to which ran faster.  With the conversion to
// UTF-8 the code takes about 25 nsec/op.  The conversion in the reverse
// direction takes about 100 nsec/op.  (The larger cost for conversion
// from UTF-8 is most likely due to the need to convert the UTF-8 byte stream
// to a rune before conversion.
//
type Charmap struct {
	transform.NopResetter
	bytes map[rune]byte
	runes [256][]byte
	once  sync.Once

	// The map between bytes and runes.  To indicate that a specific
	// byte value is invalid for a charcter set, use the rune
	// utf8.RuneError.  Values that are absent from this map will
	// be assumed to have the identity mapping -- that is the default
	// is to assume ISO8859-1, where all 8-bit characters have the same
	// numeric value as their Unicode runes.  (Not to be confused with
	// the UTF-8 values, which *will* be different for non-ASCII runes.)
	//
	// If no values less than RuneSelf are changed (or have non-identity
	// mappings), then the character set is assumed to be an ASCII
	// superset, and certain assumptions and optimizations become
	// available for ASCII bytes.
	Map map[byte]rune

	// The ReplacementChar is the byte value to use for substitution.
	// It should normally be ASCIISub for ASCII encodings.  This may be
	// unset (left to zero) for mappings that are strictly ASCII supersets.
	// In that case ASCIISub will be assumed instead.
	ReplacementChar byte
}

type cmapDecoder struct {
	transform.NopResetter
	runes [256][]byte
}

type cmapEncoder struct {
	transform.NopResetter
	bytes   map[rune]byte
	replace byte
}

// Init initializes internal values of a character map.  This should
// be done early, to minimize the cost of allocation of transforms
// later.  It is not strictly necessary however, as the allocation
// functions will arrange to call it if it has not already been done.
func (c *Charmap) Init() {
	c.once.Do(c.initialize)
}

func (c *Charmap) initialize() {
	c.bytes = make(map[rune]byte)
	ascii := true

	for i := 0; i < 256; i++ {
		r, ok := c.Map[byte(i)]
		if !ok {
			r = rune(i)
		}
		if r < 128 && r != rune(i) {
			ascii = false
		}
		if r != RuneError {
			c.bytes[r] = byte(i)
		}
		utf := make([]byte, utf8.RuneLen(r))
		utf8.EncodeRune(utf, r)
		c.runes[i] = utf
	}
	if ascii && c.ReplacementChar == '\x00' {
		c.ReplacementChar = ASCIISub
	}
}

// NewDecoder returns a Decoder the converts from the 8-bit
// character set to UTF-8.  Unknown mappings, if any, are mapped
// to '\uFFFD'.
func (c *Charmap) NewDecoder() *encoding.Decoder {
	c.Init()
	return &encoding.Decoder{Transformer: &cmapDecoder{runes: c.runes}}
}

// NewEncoder returns a Transformer that converts from UTF8 to the
// 8-bit character set.  Unknown mappings are mapped to 0x1A.
func (c *Charmap) NewEncoder() *encoding.Encoder {
	c.Init()
	return &encoding.Encoder{Transformer:
	    &cmapEncoder{bytes: c.bytes, replace: c.ReplacementChar}}
}

func (d *cmapDecoder) Transform(dst, src []byte, atEOF bool) (int, int, error) {
	var e error
	var ndst, nsrc int

	for _, c := range src {
		b := d.runes[c]
		l := len(b)

		if ndst+l > len(dst) {
			e = transform.ErrShortDst
			break
		}
		for i := 0; i < l; i++ {
			dst[ndst] = b[i]
			ndst++
		}
		nsrc++
	}
	return ndst, nsrc, e
}

func (d *cmapEncoder) Transform(dst, src []byte, atEOF bool) (int, int, error) {
	var e error
	var ndst, nsrc int
	for nsrc < len(src) {
		if ndst >= len(dst) {
			e = transform.ErrShortDst
			break
		}

		r, sz := utf8.DecodeRune(src[nsrc:])
		if r == utf8.RuneError && sz == 1 {
			// If its inconclusive due to insufficient data in
			// in the source, report it
			if !atEOF && !utf8.FullRune(src[nsrc:]) {
				e = transform.ErrShortSrc
				break
			}
		}

		if c, ok := d.bytes[r]; ok {
			dst[ndst] = c
		} else {
			dst[ndst] = d.replace
		}
		nsrc += sz
		ndst++
	}

	return ndst, nsrc, e
}


text:
package com.amazonaws.services.iot.model.transform;

import javax.annotation.Generated;

import com.amazonaws.SdkClientException;
import com.amazonaws.services.iot.model.*;

import com.amazonaws.protocol.*;
import com.amazonaws.annotation.SdkInternalApi;

/**
 * AuditMitigationActionExecutionMetadataMarshaller
 */
@Generated("com.amazonaws:aws-java-sdk-code-generator")
@SdkInternalApi
public class AuditMitigationActionExecutionMetadataMarshaller {

    private static final MarshallingInfo<String> TASKID_BINDING = MarshallingInfo.builder(MarshallingType.STRING).marshallLocation(MarshallLocation.PAYLOAD)
            .marshallLocationName("taskId").build();
    private static final MarshallingInfo<String> FINDINGID_BINDING = MarshallingInfo.builder(MarshallingType.STRING).marshallLocation(MarshallLocation.PAYLOAD)
            .marshallLocationName("findingId").build();
    private static final MarshallingInfo<String> ACTIONNAME_BINDING = MarshallingInfo.builder(MarshallingType.STRING)
            .marshallLocation(MarshallLocation.PAYLOAD).marshallLocationName("actionName").build();
    private static final MarshallingInfo<String> ACTIONID_BINDING = MarshallingInfo.builder(MarshallingType.STRING).marshallLocation(MarshallLocation.PAYLOAD)
            .marshallLocationName("actionId").build();
    private static final MarshallingInfo<String> STATUS_BINDING = MarshallingInfo.builder(MarshallingType.STRING).marshallLocation(MarshallLocation.PAYLOAD)
            .marshallLocationName("status").build();
    private static final MarshallingInfo<java.util.Date> STARTTIME_BINDING = MarshallingInfo.builder(MarshallingType.DATE)
            .marshallLocation(MarshallLocation.PAYLOAD).marshallLocationName("startTime").timestampFormat("unixTimestamp").build();
    private static final MarshallingInfo<java.util.Date> ENDTIME_BINDING = MarshallingInfo.builder(MarshallingType.DATE)
            .marshallLocation(MarshallLocation.PAYLOAD).marshallLocationName("endTime").timestampFormat("unixTimestamp").build();
    private static final MarshallingInfo<String> ERRORCODE_BINDING = MarshallingInfo.builder(MarshallingType.STRING).marshallLocation(MarshallLocation.PAYLOAD)
            .marshallLocationName("errorCode").build();
    private static final MarshallingInfo<String> MESSAGE_BINDING = MarshallingInfo.builder(MarshallingType.STRING).marshallLocation(MarshallLocation.PAYLOAD)
            .marshallLocationName("message").build();

    private static final AuditMitigationActionExecutionMetadataMarshaller instance = new AuditMitigationActionExecutionMetadataMarshaller();

    public static AuditMitigationActionExecutionMetadataMarshaller getInstance() {
        return instance;
    }

    /**
     * Marshall the given parameter object.
     */
    public void marshall(AuditMitigationActionExecutionMetadata auditMitigationActionExecutionMetadata, ProtocolMarshaller protocolMarshaller) {

        if (auditMitigationActionExecutionMetadata == null) {
            throw new SdkClientException("Invalid argument passed to marshall(...)");
        }

        try {
            protocolMarshaller.marshall(auditMitigationActionExecutionMetadata.getTaskId(), TASKID_BINDING);
            protocolMarshaller.marshall(auditMitigationActionExecutionMetadata.getFindingId(), FINDINGID_BINDING);
            protocolMarshaller.marshall(auditMitigationActionExecutionMetadata.getActionName(), ACTIONNAME_BINDING);
            protocolMarshaller.marshall(auditMitigationActionExecutionMetadata.getActionId(), ACTIONID_BINDING);
            protocolMarshaller.marshall(auditMitigationActionExecutionMetadata.getStatus(), STATUS_BINDING);
            protocolMarshaller.marshall(auditMitigationActionExecutionMetadata.getStartTime(), STARTTIME_BINDING);
            protocolMarshaller.marshall(auditMitigationActionExecutionMetadata.getEndTime(), ENDTIME_BINDING);
            protocolMarshaller.marshall(auditMitigationActionExecutionMetadata.getErrorCode(), ERRORCODE_BINDING);
            protocolMarshaller.marshall(auditMitigationActionExecutionMetadata.getMessage(), MESSAGE_BINDING);
        } catch (Exception e) {
            throw new SdkClientException("Unable to marshall request to JSON: " + e.getMessage(), e);
        }
    }

}


text:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<parent>
		<artifactId>japicmp-base</artifactId>
		<groupId>com.github.siom79.japicmp</groupId>
		<version>0.11.1-SNAPSHOT</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>

	<artifactId>japicmp-webapp</artifactId>
	<packaging>war</packaging>

	<dependencies>
		<dependency>
			<groupId>javax.ws.rs</groupId>
			<artifactId>javax.ws.rs-api</artifactId>
			<version>2.1</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.containers</groupId>
			<artifactId>jersey-container-servlet</artifactId>
			<version>2.26</version>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.inject</groupId>
			<artifactId>jersey-hk2</artifactId>
			<version>2.26</version>
		</dependency>
	</dependencies>

	<build>
		<finalName>${project.artifactId}</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-antrun-plugin</artifactId>
				<version>1.7</version>
				<executions>
					<execution>
						<id>deploy</id>
						<phase>install</phase>
						<goals>
							<goal>run</goal>
						</goals>
						<configuration>
							<target name="deploy">
								<copy file="${project.build.directory}/${project.artifactId}.war" todir="${env.CATALINA_HOME}/webapps" />
							</target>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>


text:
require("../pc.v0");

var vows = require("vows"),
	assert = require("assert");

var suite = vows.describe("default_property");

suite.addBatch({
	"default_property": {
		topic: function() {
			return pc.default_property;
		},
		"get and set behavior works": function(default_property) {
			function foo() {
				ret.bar = default_property(5);
				function ret() {
					var bar = ret.bar();
					return bar;
				}
				return ret;
			}
			var foobar = foo();
			var barfoo = foo().bar(20);

			assert.equal(foobar.bar(), 5);
			assert.equal(foobar(), 5);
			assert.equal(barfoo.bar(), 20);
			assert.equal(barfoo(), 20);
			foobar.bar(10);
			assert.equal(foobar.bar(), 10);
			assert.equal(foobar(), 10);
		},
		"test defaults": function(default_property) {
			function foo() {
				ret.bar = default_property("one", {
					"one": function() { return 1; },
					"two": function() { return 2; },
					"three": function() { return 3; }
				});
				function ret() {
					var bar = ret.bar();
					return bar();
				}
				return ret;
			}

			var f = foo();

			assert.strictEqual(typeof f.bar(), "function");
			assert.equal((f.bar())(), 1);
			assert.equal(f(), 1);
			f.bar(function() { return 4; });
			assert.equal((f.bar())(), 4);
			assert.equal(f(), 4);
			f.bar("two");
			assert.equal((f.bar())(), 2);
			assert.equal(f(), 2);
		},
		"test default only behavior": function(default_property) {
			function foo() {
				ret.bar = default_property("one", {
					"one": function() { return 1; },
					"two": function() { return 2; },
					"three": function() { return 3; }
				}, true);
				function ret() {
					var bar = ret.bar();
					return bar();
				}
				return ret;
			}

			var f = foo();

			assert.strictEqual(typeof f.bar(), "function");
			assert.equal((f.bar())(), 1);
			assert.equal(f(), 1);
			f.bar(function() { return 4; });
			assert.equal((f.bar())(), 1);
			assert.equal(f(), 1);
			f.bar("two");
			assert.equal((f.bar())(), 2);
			assert.equal(f(), 2);
		}
	}
});

suite.export(module);


text:
static Window *sWindow;
static TextLayer *sMessage;

static void windowLoad(struct Window *window)
{
	GRect windowFrame = layer_get_frame(window_get_root_layer(window));

	sMessage = text_layer_create(GRect(windowFrame.origin.x + 10, windowFrame.origin.y + 10, windowFrame.size.w - 20, windowFrame.size.h - 20));
	text_layer_set_font(sMessage, fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD));
	text_layer_set_text(sMessage, (char *) window_get_user_data(window));
	layer_add_child(window_get_root_layer(window), text_layer_get_layer(sMessage));
}

static void windowUnload(struct Window *window)
{
	text_layer_destroy(sMessage);
}

void pushErrorWindow(char *message)
{
	window_set_user_data(sWindow, message);
	window_stack_push(sWindow, true);
}

void initErrorWindow(void)
{
	sWindow = window_create();
	window_set_window_handlers(sWindow, (WindowHandlers) {
		.load = windowLoad,
		.unload = windowUnload
	});
}

void deinitErrorWindow(void)
{
	window_destroy(sWindow);
}


text:
ACCEPTED

#### According to
Index Fungorum

#### Published in
Mycologia 40: 219 (1948)

#### Original name
Boletus rugosellus W.F. Chiu

### Remarks
null


text:
ClientManager::ClientManager(asio::io_service &io_service, const tcp::endpoint &endpoint, world::Handler &worldHandler)
    : mAcceptor(io_service, endpoint)
      , mSocket(io_service)
      , mWorldHandler(worldHandler)
{
    DoAccept();
}

void ClientManager::DoAccept()
{
    mAcceptor.async_accept(mSocket, [this](std::error_code ec) {
        if (!ec) {
            auto logger = spdlog::get("default");
            logger->info("Accepted Client");

            std::make_shared<ClientHandler>(std::move(mSocket), mClients, mWorldHandler)->Start();
        }

        DoAccept();
    });
}