//Emerald
        private void Generate3rdGenEPIDJob(uint calibration, uint minRedraws, uint maxRedraws)
        {
            uint searchRange = lowerGenerator.MaxResults;

            for (uint redraws = minRedraws; redraws <= maxRedraws; ++redraws)
            {
                // note: this is inefficent and should be done in a much faster way
                // will require a restructure of FrameGenerator
                uint offset = calibration + 3*redraws;
                lowerGenerator.Calibration = offset;
                List<Frame> frames = lowerGenerator.Generate(frameCompare, id, sid);
                progressTotal = (ulong) frames.Count*searchRange*(maxRedraws - minRedraws);

                foreach (Frame frame in frames)
                {
                    waitHandle.WaitOne();
                    progressSearched += searchRange;
                    progressFound += 1;
                    var iframe = new IFrameEEggPID
                        {
                            Advances = frame.Advances,
                            FrameLowerPID = frame.Number - offset,
                            Pid = frame.Pid,
                            Shiny = frame.Shiny,
                            Redraws = redraws
                        };

                    lock (threadLock)
                    {
                        iframesEEgg.Add(iframe);
                    }
                    refreshQueue = true;
                }
            }
        }
        private void Generate3rdGenEIVJob()
        {
            uint searchRange = ivGenerator.MaxResults;

            //generate the iv frames
            List<Frame> ivFrames = ivGenerator.Generate(subFrameCompare, id, sid);
            progressTotal = (ulong) ivFrames.Count*searchRange;

            foreach (Frame frame in ivFrames)
            {
                waitHandle.WaitOne();
                //ivGenerator.StaticPID = frame.Pid;
                progressSearched += searchRange;
                progressFound += (uint) ivFrames.Count;

                var iframe = new IFrameEEggPID
                    {
                        FrameNumber = frame.Name,
                        FrameUpperPID = frame.Number,
                        Pid = frame.Pid,
                        Shiny = frame.Shiny,
                        DisplayHp = frame.DisplayHpAlt,
                        DisplayAtk = frame.DisplayAtkAlt,
                        DisplayDef = frame.DisplayDefAlt,
                        DisplaySpa = frame.DisplaySpaAlt,
                        DisplaySpd = frame.DisplaySpdAlt,
                        DisplaySpe = frame.DisplaySpeAlt,
                        DisplayHpInh = frame.DisplayHp,
                        DisplayAtkInh = frame.DisplayAtk,
                        DisplayDefInh = frame.DisplayDef,
                        DisplaySpaInh = frame.DisplaySpa,
                        DisplaySpdInh = frame.DisplaySpd,
                        DisplaySpeInh = frame.DisplaySpe,
                    };

                lock (threadLock)
                {
                    iframesEEggIV.Add(iframe);
                }
                refreshQueue = true;
            }
        }