Guest User

AZK v1.93

a guest
May 2nd, 2012
2
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 126.50 KB | None | 0 0
  1. program ArmouredZombieKiller;            //By ~GGzz~
  2.   {$define SMART}
  3.   {$define CrashSmart}
  4.   {$i srl/srl.simba}
  5.   {$i srl/srl/skill/fighting.simba}
  6.   {$i SRL/SRL/misc/paintsmart.simba}
  7.   //{$I srl/srl/misc/debug.simba}
  8.  
  9. var
  10.   Food: TStringArray;
  11.   WhichFamiliar, WTP, WTE, WTD, WaitFight_Shield, WaitFight_Damage: Integer;
  12.   Potion, SStatus: String;
  13.   NoSS, Debugs, Paint, Closed, Permanent: boolean;
  14.   SaveMe: Boolean;
  15.   StartExperience: Int64;
  16.   ItemCheckList: TStringArray;
  17.  
  18. const
  19.  
  20.   PickItems = False;  //Set to true if you'd like to SEE/TRY picking up Items.. It is in BETA but will do you NO harm.
  21.  
  22.                                  //Fill in your username, etc..
  23.   Procedure DeclarePlayers;
  24.   begin
  25.     HowManyPlayers := 1;
  26.     NumberOfPlayers(HowManyPlayers);
  27.     CurrentPlayer := 0;
  28.     with Players[0] do
  29.     begin
  30.       Name        := '';
  31.       Pass        := '';
  32.       Pin         := '';
  33.       WorldInfo   := [27, 42, 45, 46, 48, 52, 59, 70, 72, 78, 79, 87, 104, 115, 117];
  34.       BoxRewards  := ['XP','xp','lamp'];
  35.       LampSkill   := Skill_Slayer;
  36.       Active      := True;
  37.       Strings     := ['ffigy', 'harm', 'eath rune', 'lood rune', 'oul rune', 'rune', 'essence', 'ak plank', 'eak plank'];   //Items to pickUp. DOES NOT WORK PERFECTLY.. Needs work badly!!!
  38.       ItemCheckList   := ['bones', 'gp'];  //Items to right click to check for the above.. DO NOT TOUCH!
  39.     end;
  40.   end;
  41.  
  42.  
  43.  
  44.  
  45. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  46. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  47. ///                                                                                                                ///
  48. ///                                             By: ~GGzz~                                                         ///
  49. ///                                                                                                                ///
  50. ///                            ALL CODE STARTS HERE!! DO NOT TOUCH IF IN-EXPERIENCED!                              ///
  51. ///                                                                                                                ///
  52. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  53. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  54.  
  55. const
  56.   Version = '1.93';
  57.   Colour = CLBlue;
  58.   Shaddow = False;
  59.   Font = 'StatChars';
  60.   VersionChars = 'UpChars';
  61.  
  62. type
  63.   Skill = record
  64.     ModAtk: Integer;
  65.     ModStr: Integer;
  66.     ModDef: Integer;
  67.  
  68.     Atk: Integer;
  69.     Str: Integer;
  70.     Def: Integer;
  71. end;
  72.  
  73. type
  74.   FoodStruct = record
  75.     Item: Integer;
  76.     Uptext: TStringArray;
  77. end;
  78.  
  79. type
  80.   ItemPickup = record
  81.     Color: Integer;
  82.     Tolerance: Integer;
  83.     Speed: TExtendedArray;
  84. end;
  85.  
  86. var
  87.   SK: Skill;
  88.   LProc, FFinder: String;
  89.   UpTextF: TStringArray;
  90.   PLevel, TimeToDrink, RCTS: Integer;
  91.  
  92. const
  93.   LadderColour = 536409;
  94.   LTol = 4;
  95.   FFS = True;         //FlagFailSafe.
  96.  
  97. var
  98.   QP: Boolean;          //QuickPrayer..
  99.  
  100.  
  101. Procedure DebugTPA(TPA: TPointArray; BitmapName: string);
  102. begin
  103.   Smart_DrawDotsEx(True, TPA, CLBlue);
  104. end;
  105.  
  106. Procedure LastRun;
  107. begin
  108.   writeln('~ Last Run Proc ~');
  109.   writeln('Last Proc: ' + LProc);
  110.   writeln('FFinder: ' + FFinder);
  111.   Writeln('Prayer Level: ' + ToStr(PLevel));
  112.   writeln('Uptext: ' + ToStr(UpTextF));
  113.   SStatus:= 'Not Running';
  114. end;
  115.  
  116. var
  117.   AZK : TForm;
  118.   ZombieKillerLabel : TLabel;
  119.   Panel : TPanel;
  120.   Bevel1 : TBevel;
  121.   Familiars : TLabel;
  122.   DPotions : TLabel;
  123.   UseSS : TLabel;
  124.   WTDPots : TLabel;
  125.   WTRP : TLabel;
  126.   WTEF : TLabel;
  127.   Bevel2 : TBevel;
  128.   Developer : TLabel;
  129.   PSmartLabel : TLabel;
  130.   Label1 : TLabel;
  131.   Label2 : TLabel;
  132.   Familiar : TComboBox;
  133.   Potions : TComboBox;
  134.   WhenToDrink : TEdit;
  135.   SoulSplit : TComboBox;
  136.   WhenToPray : TEdit;
  137.   WhenToEat : TEdit;
  138.   PaintOnSmartX : TComboBox;
  139.   Debug : TComboBox;
  140.   FoodBox : TListBox;
  141.   Save : TButton;
  142.   Start : TButton;
  143.   Timer1 : TTimer;
  144.   SaveDialog1 : TSaveDialog;
  145.  
  146. Procedure InitializeVariables;
  147. begin
  148.   if (Length(Food) = 0) then
  149.   begin
  150.     SetLength(Food, 1);
  151.     Food[0]:= 'none';
  152.   end;
  153.  
  154.   if (Potion = '') then
  155.     Potion:= 'none';
  156.  
  157.   if (Closed = False) then
  158.     TerminateScript;
  159. end;
  160.  
  161. Procedure SaveInfo;
  162. var
  163.   I: Integer;
  164. begin
  165.   WriteINI('Familiar', 'Key', ToStr(WhichFamiliar) , ScriptPath + 'AZKInfo.INI');
  166.   if (Length(Food) <> 0) then
  167.     For I:= 0 To High(Food) do
  168.       WriteINI('Food', 'Key[' + ToStr(I) + ']', Food[I], ScriptPath + 'AZKInfo.INI')
  169.   else
  170.     WriteINI('Food', 'Key[0]', 'None', ScriptPath + 'AZKInfo.INI');
  171.   WriteINI('WTP', 'Key', ToStr(WTP), ScriptPath + 'AZKInfo.INI');
  172.   WriteINI('WTE', 'Key', ToStr(WTE), ScriptPath + 'AZKInfo.INI');
  173.   WriteINI('WTD', 'Key', ToStr(WTD), ScriptPath + 'AZKInfo.INI');
  174.   WriteINI('Potion', 'Key', ToStr(Potion), ScriptPath + 'AZKInfo.INI');
  175.   WriteINI('NoSS', 'Key', ToStr(NoSS), ScriptPath + 'AZKInfo.INI');
  176.   WriteINI('QP', 'Key', ToStr(QP), ScriptPath + 'AZKInfo.INI');
  177.   if (Debugs = True) then
  178.     WriteINI('Debugs', 'Key', '1', ScriptPath + 'AZKInfo.INI')
  179.   else
  180.     WriteINI('Debugs', 'Key', '0', ScriptPath + 'AZKInfo.INI');
  181.   if (Paint = True) then
  182.     WriteINI('Paint', 'Key', '1', ScriptPath + 'AZKInfo.INI')
  183.   else
  184.     WriteINI('Paint', 'Key', '0', ScriptPath + 'AZKInfo.INI');
  185.   if Permanent then
  186.     WriteINI('Permanent', 'Key', 'True', ScriptPath + 'AZKInfo.INI');
  187. end;
  188.  
  189. Procedure LoadInfo;
  190. var
  191.   I, J: Integer;
  192.   Temp: String;
  193. begin
  194.   WhichFamiliar:= StrToIntDef(ReadINI('Familiar', 'Key', ScriptPath + 'AZKInfo.INI'), 0);
  195.   SetLength(Food, 12);
  196.   For I:= 0 To 11 do
  197.   begin
  198.     Food[I]:= ReadINI('Food', 'Key[' + ToStr(I) + ']', ScriptPath + 'AZKInfo.INI');
  199.   end;
  200.   For I:= 0 To High(Food) do
  201.   begin
  202.     if (Food[I] <> '') then
  203.       J:= J + 1;
  204.   end;
  205.   SetLength(Food, J);
  206.   WTP:= StrToIntDef(ReadINI('WTP', 'Key', ScriptPath + 'AZKInfo.INI'), 50);
  207.   WTE:= StrToIntDef(ReadINI('WTE', 'Key', ScriptPath + 'AZKInfo.INI'), 500);
  208.   WTD:= StrToIntDef(ReadINI('WTD', 'Key', ScriptPath + 'AZKInfo.INI'), 0);
  209.   Potion:= ReadINI('Potion', 'Key', ScriptPath + 'AZKInfo.INI');
  210.   NoSS:= StrToBoolDef(ReadINI('NoSS', 'Key', ScriptPath + 'AZKInfo.INI'), True);
  211.   QP:= StrToBoolDef(ReadINI('QP', 'Key', ScriptPath + 'AZKInfo.INI'), True);
  212.   Temp:= ReadINI('Debugs', 'Key', ScriptPath + 'AZKInfo.INI');
  213.   if (Temp = '1') then
  214.     Debugs:= True
  215.   else
  216.     Debugs:= False;
  217.   Temp:= ReadINI('Paint', 'Key', ScriptPath + 'AZKInfo.INI');
  218.   if (Temp = '1') then
  219.     Paint:= True
  220.   else
  221.     Paint:= False;
  222.   Permanent:= StrToBoolDef(ReadINI('Permanent', 'Key', ScriptPath + 'AZKInfo.INI'), False);
  223.   if Permanent then
  224.     Closed:= True;
  225. end;
  226.  
  227. Procedure GetInfo(Sender: TObject);
  228. var
  229.   I, J, K: Integer;
  230.   Error: Boolean;
  231. Begin
  232.   Error:= False;
  233.   Case Sender Of
  234.     Familiar:
  235.                 WhichFamiliar:= Familiar.ITEMS.IndexOf(Familiar.TEXT);
  236.  
  237.     Potions:
  238.               Case LowerCase(Potions.TEXT) of
  239.                 'none':
  240.                         Potion:= 'none';
  241.                 'superset':
  242.                         Potion:= 'ss';
  243.  
  244.                 'superattack':
  245.                         Potion:= 'attack';
  246.  
  247.                 'superstrength':
  248.                         Potion:= 'strength';
  249.  
  250.                 'superdefence':
  251.                         Potion:= 'defence';
  252.  
  253.                 'overload':
  254.                         Potion:= 'ovl';
  255.  
  256.                 'atkstr pure':
  257.                         Potion:= 'atkstr';
  258.  
  259.                 'atkdef pure':
  260.                         Potion:= 'atkdef';
  261.  
  262.                 'strdef pure':
  263.                         Potion:= 'strdef';
  264.  
  265.               end;
  266.  
  267.     PaintOnSmartX:
  268.                 Paint:= StrToBool(PaintOnSmartX.TEXT);
  269.  
  270.     Debug:
  271.                 Debugs:= StrToBool(Debug.TEXT);
  272.  
  273.     FoodBox:
  274.                 begin
  275.                   SetLength(Food, FoodBox.Items.Count);
  276.                   K:= 0;
  277.                   For I := FoodBox.Items.Count - 1 downto 0 do
  278.                   begin
  279.                     if FoodBox.Selected[I] then
  280.                       For J:= 0 To High(Food) do
  281.                        if (Food[J] = '') then
  282.                         begin
  283.                           if (InStrArrEx(FoodBox.ITEMS.Strings[I], Food, K) = False) then
  284.                             Food[J]:= FoodBox.ITEMS.Strings[I]
  285.                           else
  286.                             DeleteValueInStrArray(Food, K);
  287.                           break;
  288.                         end;
  289.                   end;
  290.  
  291.                   K:= 0;
  292.                   For I:= 0 To High(Food) do
  293.                     if (Food[I] <> '') then
  294.                       K:= K + 1;
  295.                   SetLength(Food, K);
  296.  
  297.                   K:= 0;
  298.                   For I:= 0 To High(Food) do
  299.                     if (Food[I] <> 'None') then
  300.                       if InStrArrEx('None', Food, K) then
  301.                         DeleteValueInStrArray(Food, K);
  302.                   writeln(Food);
  303.                 end;
  304.  
  305.     WhenToPray:
  306.                 begin
  307.                   if WhenToPray.TEXT = '' then
  308.                     exit;
  309.  
  310.                   if ExecRegExpr('^[0-9]*$', WhenToPray.TEXT) then
  311.                     WTP:= StrToIntDef(WhenToPray.TEXT, 50)
  312.                   else
  313.                     begin
  314.                       ShowMessage('You must only enter digits!');
  315.                       WhenToPray.TEXT:= '50';
  316.                       WTP:= 50;
  317.                     end;
  318.                 end;
  319.  
  320.     WhenToEat:
  321.                 begin
  322.                   if WhenToEat.TEXT = '' then
  323.                     exit;
  324.  
  325.                   if ExecRegExpr('^[0-9]*$', WhenToEat.TEXT) then
  326.                     WTE:= StrToIntDef(WhenToEat.TEXT, 500)
  327.                   else
  328.                     begin
  329.                       ShowMessage('You must only enter digits!');
  330.                       WhenToEat.TEXT:= '500';
  331.                       WTE:= 500;
  332.                     end;
  333.                 end;
  334.  
  335.     WhenToDrink:
  336.                 begin
  337.                   if WhenToDrink.TEXT = '' then
  338.                     exit;
  339.  
  340.                   if ExecRegExpr('^[0-9]*$', WhenToDrink.TEXT) then
  341.                     WTD:= StrToIntDef(WhenToDrink.TEXT, 0)
  342.                   else
  343.                     begin
  344.                       ShowMessage('You must only enter digits!');
  345.                       WhenToDrink.TEXT:= '0';
  346.                       WTD:= 0;
  347.                     end;
  348.  
  349.                   if (WTD > 10) then
  350.                     ShowMessage('WhenToDrink is 10+.. Pots will be drank when "[SkillLevel < (SkillLevel + WhenToDrink)]"');
  351.                 end;
  352.  
  353.     SoulSplit:
  354.                 begin
  355.                   QP:= StrToBool(SoulSplit.TEXT);
  356.                   NoSS:= Not StrToBool(SoulSplit.TEXT);
  357.                 end;
  358.  
  359.     Start:
  360.                 begin
  361.                   if WhenToPray.TEXT = '' then
  362.                   begin
  363.                     ShowMessage('When To Pray is Blank! Please Fix it. If you don''t want to pray, Set the value really high.');
  364.                     Error:= True;
  365.                   end
  366.                   else
  367.                     if (ExecRegExpr('^[0-9]*$', WhenToPray.TEXT) = False) then
  368.                     begin
  369.                       ShowMessage('You Must Enter A Value for When to Pray!');
  370.                       Error:= True;
  371.                     end;
  372.  
  373.                   if WhenToEat.TEXT = '' then
  374.                   begin
  375.                     ShowMessage('When To Eat is Blank! Please Fix it. If you don''t want to Eat, Set the value really high.');
  376.                     Error:= True;
  377.                   end
  378.                   else
  379.                     if (ExecRegExpr('^[0-9]*$', WhenToEat.TEXT) = False) then
  380.                     begin
  381.                       ShowMessage('You Must Enter A Value for When to Eat!');
  382.                       Error:= True;
  383.                     end;
  384.  
  385.                   if WhenToDrink.TEXT = '' then
  386.                   begin
  387.                     ShowMessage('When To Drink is Blank! Please Fix it. If you don''t want to Drink Potions, Set the value really high.');
  388.                     Error:= True;
  389.                   end
  390.                   else
  391.                     if ExecRegExpr('^[0-9]*$', WhenToDrink.TEXT) then
  392.                     begin
  393.                       WTD:= StrToInt(WhenToDrink.TEXT);
  394.                       if (WTD >= 10) then
  395.                       begin
  396.                         ShowMessage('WhenToDrink must be < 10.. Pots will be drank when "[SkillLevel < (SkillLevel + WhenToDrink)]"');
  397.                         Error:= True;
  398.                       end;
  399.                     end
  400.                     else
  401.                       if (ExecRegExpr('^[0-9]*$', WhenToDrink.TEXT) = False) then
  402.                       begin
  403.                         ShowMessage('You Must Enter A Value for When to Drink Potion!');
  404.                         Error:= True;
  405.                       end;
  406.  
  407.                   if (Error = False) then
  408.                   begin
  409.                     Closed:= True;
  410.                     AZK.CLOSE;
  411.                   end;
  412.                 end;
  413.  
  414.     ZombieKillerLabel:
  415.                 begin
  416.                   Permanent:= True;
  417.                   SaveInfo;
  418.                 end;
  419.  
  420.     Save:
  421.                 SaveInfo;
  422.   End;
  423. End;
  424.  
  425.  
  426. procedure InitForm;
  427. begin
  428.   AZK := TForm.Create(nil);
  429.   with AZK do
  430.   begin
  431.     AZK.Left := 371;
  432.     AZK.Top := 56;
  433.     AZK.BorderStyle := bsToolWindow;
  434.     AZK.Caption := '~AZK~ Armoured Zombies Killer';
  435.     AZK.ClientHeight := 436;
  436.     AZK.ClientWidth := 386;
  437.     AZK.Color := clGray;
  438.     AZK.Font.Color := clTeal;
  439.     AZK.Font.Height := -11;
  440.     AZK.Font.Name := 'Courier';
  441.     AZK.Font.Style := [];
  442.     AZK.Visible := False;
  443.     AZK.PixelsPerInch := 96;
  444.   end;
  445.  
  446.   ZombieKillerLabel := TLabel.Create(AZK);
  447.   with ZombieKillerLabel do
  448.   begin
  449.     ZombieKillerLabel := TLabel.Create(AZK);
  450.     ZombieKillerLabel.Parent := AZK;
  451.     ZombieKillerLabel.Left := 112;
  452.     ZombieKillerLabel.Top := 8;
  453.     ZombieKillerLabel.Width := 165;
  454.     ZombieKillerLabel.Height := 19;
  455.     ZombieKillerLabel.Alignment := taCenter;
  456.     ZombieKillerLabel.Caption := 'Armouzed Zombies Killer';
  457.     ZombieKillerLabel.Color := clBackground;
  458.     ZombieKillerLabel.Font.Color := clTeal;
  459.     ZombieKillerLabel.Font.Height := -16;
  460.     ZombieKillerLabel.Font.Name := 'Calibri';
  461.     ZombieKillerLabel.Font.Style := [fsBold, fsItalic];
  462.     ZombieKillerLabel.ParentColor := False;
  463.     ZombieKillerLabel.ParentFont := False;
  464.     ZombieKillerLabel.Transparent := True;
  465.     ZombieKillerLabel.Layout := tlCenter;
  466.     ZombieKillerLabel.ONDBLCLICK:= @GetInfo;
  467.   end;
  468.  
  469.   Panel := TPanel.Create(AZK);
  470.   with Panel do
  471.   begin
  472.     Panel.Parent := AZK;
  473.     Panel.Left := 8;
  474.     Panel.Top := 32;
  475.     Panel.Width := 369;
  476.     Panel.Height := 393;
  477.     Panel.BevelInner := bvRaised;
  478.     Panel.Font.Color := clTeal;
  479.     Panel.Font.Height := -11;
  480.     Panel.Font.Name := 'Courier';
  481.     Panel.Font.Style := [];
  482.     Panel.ParentFont := False;
  483.     Panel.TabOrder := 0;
  484.   end;
  485.  
  486.   Bevel1 := TBevel.Create(Panel);
  487.   with Bevel1 do
  488.   begin
  489.     Bevel1.Parent := Panel;
  490.     Bevel1.Left := 192;
  491.     Bevel1.Top := 8;
  492.     Bevel1.Width := 169;
  493.     Bevel1.Height := 233;
  494.     Bevel1.Style := bsRaised;
  495.   end;
  496.  
  497.   Familiars := TLabel.Create(Panel);
  498.   with Familiars do
  499.   begin
  500.     Familiars.Parent := Panel;
  501.     Familiars.Left := 24;
  502.     Familiars.Top := 16;
  503.     Familiars.Width := 88;
  504.     Familiars.Height := 19;
  505.     Familiars.Caption := 'Use Familiars';
  506.     Familiars.Font.Color := clBlue;
  507.     Familiars.Font.Height := -16;
  508.     Familiars.Font.Name := 'Calibri';
  509.     Familiars.Font.Style := [fsBold, fsItalic];
  510.     Familiars.ParentFont := False;
  511.   end;
  512.  
  513.   DPotions := TLabel.Create(Panel);
  514.   with DPotions do
  515.   begin
  516.     DPotions.Parent := Panel;
  517.     DPotions.Left := 24;
  518.     DPotions.Top := 48;
  519.     DPotions.Width := 88;
  520.     DPotions.Height := 19;
  521.     DPotions.Caption := 'Drink Potions';
  522.     DPotions.Font.Color := clBlue;
  523.     DPotions.Font.Height := -16;
  524.     DPotions.Font.Name := 'Calibri';
  525.     DPotions.Font.Style := [fsBold, fsItalic];
  526.     DPotions.ParentFont := False;
  527.   end;
  528.  
  529.   UseSS := TLabel.Create(Panel);
  530.   with UseSS do
  531.   begin
  532.     UseSS.Parent := Panel;
  533.     UseSS.Left := 24;
  534.     UseSS.Top := 80;
  535.     UseSS.Width := 84;
  536.     UseSS.Height := 19;
  537.     UseSS.Caption := 'Use Prayer';
  538.     UseSS.Font.Color := clBlue;
  539.     UseSS.Font.Height := -16;
  540.     UseSS.Font.Name := 'Calibri';
  541.     UseSS.Font.Style := [fsBold, fsItalic];
  542.     UseSS.ParentFont := False;
  543.   end;
  544.  
  545.   WTDPots := TLabel.Create(Panel);
  546.   with WTDPots do
  547.   begin
  548.     WTDPots.Parent := Panel;
  549.     WTDPots.Left := 24;
  550.     WTDPots.Top := 112;
  551.     WTDPots.Width := 131;
  552.     WTDPots.Height := 19;
  553.     WTDPots.Caption := 'When To Drink Pots';
  554.     WTDPots.Font.Color := clBlue;
  555.     WTDPots.Font.Height := -16;
  556.     WTDPots.Font.Name := 'Calibri';
  557.     WTDPots.Font.Style := [fsBold, fsItalic];
  558.     WTDPots.ParentFont := False;
  559.   end;
  560.  
  561.   WTRP := TLabel.Create(Panel);
  562.   with WTRP do
  563.   begin
  564.     WTRP.Parent := Panel;
  565.     WTRP.Left := 24;
  566.     WTRP.Top := 144;
  567.     WTRP.Width := 137;
  568.     WTRP.Height := 19;
  569.     WTRP.Caption := 'When To Renew Prayer';
  570.     WTRP.Font.Color := clBlue;
  571.     WTRP.Font.Height := -16;
  572.     WTRP.Font.Name := 'Calibri';
  573.     WTRP.Font.Style := [fsBold, fsItalic];
  574.     WTRP.ParentFont := False;
  575.   end;
  576.  
  577.   WTEF := TLabel.Create(Panel);
  578.   with WTEF do
  579.   begin
  580.     WTEF.Parent := Panel;
  581.     WTEF.Left := 24;
  582.     WTEF.Top := 176;
  583.     WTEF.Width := 119;
  584.     WTEF.Height := 19;
  585.     WTEF.Caption := 'When To Eat Food';
  586.     WTEF.Font.Color := clBlue;
  587.     WTEF.Font.Height := -16;
  588.     WTEF.Font.Name := 'Calibri';
  589.     WTEF.Font.Style := [fsBold, fsItalic];
  590.     WTEF.ParentFont := False;
  591.   end;
  592.  
  593.   Bevel2 := TBevel.Create(Panel);
  594.   with Bevel2 do
  595.   begin
  596.     Bevel2.Parent := Panel;
  597.     Bevel2.Left := 192;
  598.     Bevel2.Top := 288;
  599.     Bevel2.Width := 168;
  600.     Bevel2.Height := 68;
  601.     Bevel2.Style := bsRaised;
  602.   end;
  603.  
  604.   Developer := TLabel.Create(Panel);
  605.   with Developer do
  606.   begin
  607.     Developer.Parent := Panel;
  608.     Developer.Left := 112;
  609.     Developer.Top := 256;
  610.     Developer.Width := 122;
  611.     Developer.Height := 19;
  612.     Developer.Caption := 'Developer Options';
  613.     Developer.Font.Color := clRed;
  614.     Developer.Font.Height := -16;
  615.     Developer.Font.Name := 'Calibri';
  616.     Developer.Font.Style := [fsBold, fsItalic];
  617.     Developer.ParentFont := False;
  618.   end;
  619.  
  620.   PSmartLabel := TLabel.Create(Panel);
  621.   with PSmartLabel do
  622.   begin
  623.     PSmartLabel.Parent := Panel;
  624.     PSmartLabel.Left := 24;
  625.     PSmartLabel.Top := 296;
  626.     PSmartLabel.Width := 102;
  627.     PSmartLabel.Height := 19;
  628.     PSmartLabel.Caption := 'Paint On Smart';
  629.     PSmartLabel.Font.Color := clYellow;
  630.     PSmartLabel.Font.Height := -16;
  631.     PSmartLabel.Font.Name := 'Calibri';
  632.     PSmartLabel.Font.Style := [fsBold, fsItalic];
  633.     PSmartLabel.ParentFont := False;
  634.   end;
  635.  
  636.   Label1 := TLabel.Create(Panel);
  637.   with Label1 do
  638.   begin
  639.     Label1.Parent := Panel;
  640.     Label1.Left := 24;
  641.     Label1.Top := 328;
  642.     Label1.Width := 42;
  643.     Label1.Height := 19;
  644.     Label1.Caption := 'Debug';
  645.     Label1.Font.Color := clYellow;
  646.     Label1.Font.Height := -16;
  647.     Label1.Font.Name := 'Calibri';
  648.     Label1.Font.Style := [fsBold, fsItalic];
  649.     Label1.ParentFont := False;
  650.   end;
  651.  
  652.   Label2 := TLabel.Create(Panel);
  653.   with Label2 do
  654.   begin
  655.     Label2.Parent := Panel;
  656.     Label2.Left := 24;
  657.     Label2.Top := 208;
  658.     Label2.Width := 84;
  659.     Label2.Height := 19;
  660.     Label2.Caption := 'List Of Foods';
  661.     Label2.Font.Color := clBlue;
  662.     Label2.Font.Height := -16;
  663.     Label2.Font.Name := 'Calibri';
  664.     Label2.Font.Style := [fsBold, fsItalic];
  665.     Label2.ParentFont := False;
  666.   end;
  667.  
  668.   Familiar := TComboBox.Create(Panel);
  669.   with Familiar do
  670.   begin
  671.     Familiar.Parent := Panel;
  672.     Familiar.Left := 200;
  673.     Familiar.Top := 16;
  674.     Familiar.Width := 152;
  675.     Familiar.Height := 21;
  676.     Familiar.Style := csDropDownList;
  677.     Familiar.ItemHeight := 13;
  678.     Familiar.TabOrder := 0;
  679.     Familiar.ITEMS.Add('None');
  680.     Familiar.Items.Add('Bunyip');
  681.     Familiar.Items.Add('Unicorn');
  682.     Familiar.ITEMINDEX:= 0;
  683.     Familiar.ONCHANGE:= @GetInfo;
  684.   end;
  685.  
  686.   Potions := TComboBox.Create(Panel);
  687.   with Potions do
  688.   begin
  689.     Potions.Parent := Panel;
  690.     Potions.Left := 200;
  691.     Potions.Top := 48;
  692.     Potions.Width := 153;
  693.     Potions.Height := 21;
  694.     Potions.Style := csDropDownList;
  695.     Potions.ItemHeight := 13;
  696.     Potions.TabOrder := 1;
  697.     Potions.ITEMS.Add('None');
  698.     Potions.ITEMS.Add('SuperSet');
  699.     Potions.Items.Add('SuperAttack');
  700.     Potions.Items.Add('SuperStrength');
  701.     Potions.Items.Add('SuperDefence');
  702.     Potions.Items.Add('OverLoad');
  703.     Potions.Items.Add('AtkStr Pure');
  704.     Potions.Items.Add('AtkDef Pure');
  705.     Potions.Items.Add('StrDef Pure');
  706.     Potions.ITEMINDEX:= 0;
  707.     Potions.ONCHANGE:= @GetInfo;
  708.   end;
  709.  
  710.   WhenToDrink := TEdit.Create(Panel);
  711.   with WhenToDrink do
  712.   begin
  713.     WhenToDrink.Parent := Panel;
  714.     WhenToDrink.Left := 200;
  715.     WhenToDrink.Top := 112;
  716.     WhenToDrink.Width := 153;
  717.     WhenToDrink.Height := 21;
  718.     WhenToDrink.Font.Color := clTeal;
  719.     WhenToDrink.Font.Height := -13;
  720.     WhenToDrink.Font.Name := 'Courier New';
  721.     WhenToDrink.Font.Style := [];
  722.     WhenToDrink.MaxLength := 0;
  723.     WhenToDrink.ParentFont := False;
  724.     WhenToDrink.TabOrder := 2;
  725.     WhenToDrink.Text := ToStr(WTD);
  726.     WhenToDrink.ONCLICK:= @GetInfo;
  727.     WhenToDrink.ONCHANGE:= @GetInfo;
  728.   end;
  729.  
  730.   SoulSplit := TComboBox.Create(Panel);
  731.   with SoulSplit do
  732.   begin
  733.     SoulSplit.Parent := Panel;
  734.     SoulSplit.Left := 200;
  735.     SoulSplit.Top := 80;
  736.     SoulSplit.Width := 153;
  737.     SoulSplit.Height := 21;
  738.     SoulSplit.Style := csDropDownList;
  739.     SoulSplit.ItemHeight := 13;
  740.     SoulSplit.TabOrder := 3;
  741.     SoulSplit.Items.Add('True');
  742.     SoulSplit.Items.Add('False');
  743.     if QP then
  744.       SoulSplit.ITEMINDEX:= 0
  745.     else
  746.       SoulSplit.ITEMINDEX:= 1;
  747.     SoulSplit.ONCHANGE:= @GetInfo;
  748.   end;
  749.  
  750.   WhenToPray := TEdit.Create(Panel);
  751.   with WhenToPray do
  752.   begin
  753.     WhenToPray.Parent := Panel;
  754.     WhenToPray.Left := 200;
  755.     WhenToPray.Top := 144;
  756.     WhenToPray.Width := 153;
  757.     WhenToPray.Height := 21;
  758.     WhenToPray.Font.Color := clTeal;
  759.     WhenToPray.Font.Height := -13;
  760.     WhenToPray.Font.Name := 'Courier New';
  761.     WhenToPray.Font.Style := [];
  762.     WhenToPray.MaxLength := 0;
  763.     WhenToPray.ParentFont := False;
  764.     WhenToPray.TabOrder := 4;
  765.     WhenToPray.Text := ToStr(WTP);
  766.     WhenToPray.ONCHANGE:= @GetInfo;
  767.     WhenToPray.ONCLICK:= @GetInfo;
  768.   end;
  769.  
  770.   WhenToEat := TEdit.Create(Panel);
  771.   with WhenToEat do
  772.   begin
  773.     WhenToEat.Parent := Panel;
  774.     WhenToEat.Left := 200;
  775.     WhenToEat.Top := 176;
  776.     WhenToEat.Width := 153;
  777.     WhenToEat.Height := 21;
  778.     WhenToEat.Font.Color := clTeal;
  779.     WhenToEat.Font.Height := -13;
  780.     WhenToEat.Font.Name := 'Courier New';
  781.     WhenToEat.Font.Style := [];
  782.     WhenToEat.MaxLength := 0;
  783.     WhenToEat.ParentFont := False;
  784.     WhenToEat.TabOrder := 5;
  785.     WhenToEat.Text := ToStr(WTE);
  786.     WhenToEat.ONCHANGE:= @GetInfo;
  787.     WhenToEat.ONCLICK:= @GetInfo;
  788.   end;
  789.  
  790.   PaintOnSmartX := TComboBox.Create(Panel);
  791.   with PaintOnSmartX do
  792.   begin
  793.     PaintOnSmartX.Parent := Panel;
  794.     PaintOnSmartX.Left := 200;
  795.     PaintOnSmartX.Top := 296;
  796.     PaintOnSmartX.Width := 153;
  797.     PaintOnSmartX.Height := 21;
  798.     PaintOnSmartX.Style := csDropDownList;
  799.     PaintOnSmartX.ItemHeight := 13;
  800.     PaintOnSmartX.TabOrder := 6;
  801.     PaintOnSmartX.ITEMS.Add('True');
  802.     PaintOnSmartX.ITEMS.Add('False');
  803.     if (Paint = True) then
  804.       PaintOnSmartX.ITEMINDEX:= 0
  805.     else
  806.       PaintOnSmartX.ITEMINDEX:= 1;
  807.     PaintOnSmartX.ONCHANGE:= @GetInfo;
  808.   end;
  809.  
  810.   Debug := TComboBox.Create(Panel);
  811.   with Debug do
  812.   begin
  813.     Debug.Parent := Panel;
  814.     Debug.Left := 200;
  815.     Debug.Top := 328;
  816.     Debug.Width := 153;
  817.     Debug.Height := 21;
  818.     Debug.Style := csDropDownList;
  819.     Debug.ItemHeight := 13;
  820.     Debug.TabOrder := 7;
  821.     Debug.ITEMS.Add('True');
  822.     Debug.ITEMS.Add('False');
  823.     if (Debugs = True) then
  824.       Debug.ITEMINDEX:= 0
  825.     else
  826.       Debug.ITEMINDEX:= 1;
  827.     Debug.ONCHANGE:= @GetInfo;
  828.   end;
  829.  
  830.   FoodBox := TListBox.Create(Panel);
  831.   with FoodBox do
  832.   begin
  833.     FoodBox.Parent := Panel;
  834.     FoodBox.Left := 200;
  835.     FoodBox.Top := 208;
  836.     FoodBox.Width := 153;
  837.     FoodBox.Height := 25;
  838.     FoodBox.Font.Color := clTeal;
  839.     FoodBox.Font.Height := -16;
  840.     FoodBox.Font.Name := 'Calibri';
  841.     FoodBox.Font.Style := [];
  842.     FoodBox.ItemHeight := 19;
  843.     FoodBox.ITEMS.Add('None');
  844.     FoodBox.ITEMS.Add('Raw Lobster');
  845.     FoodBox.ITEMS.Add('Raw Shark');
  846.     FoodBox.Items.Add('Shark');
  847.     FoodBox.Items.Add('Lobster');
  848.     FoodBox.Items.Add('Tuna');
  849.     FoodBox.Items.Add('Sardine');
  850.     FoodBox.Items.Add('Rocktail');
  851.     FoodBox.Items.Add('Bass');
  852.     FoodBox.Items.Add('SwordFish');
  853.     FoodBox.Items.Add('MonkFish');
  854.     FoodBox.Items.Add('CaveFish');
  855.     FoodBox.Items.Add('Turtle');
  856.     FoodBox.Items.Add('MantaRay');
  857.     FoodBox.MultiSelect := True;
  858.     FoodBox.ParentFont := False;
  859.     FoodBox.TabOrder := 8;
  860.     FoodBox.ONCLICK := @GetInfo;
  861.   end;
  862.  
  863.   Save := TButton.Create(Panel);
  864.   with Save do
  865.   begin
  866.     Save.Parent := Panel;
  867.     Save.Left := 200;
  868.     Save.Top := 368;
  869.     Save.Width := 57;
  870.     Save.Height := 20;
  871.     Save.Caption := 'Save';
  872.     Save.Font.Color := clBlue;
  873.     Save.Font.Height := -11;
  874.     Save.Font.Name := 'Courier';
  875.     Save.Font.Style := [fsBold];
  876.     Save.ParentFont := False;
  877.     Save.TabOrder := 9;
  878.     Save.ONCLICK:= @GetInfo;
  879.   end;
  880.  
  881.   Start := TButton.Create(AZK);
  882.   with Start do
  883.   begin
  884.     Start.Parent := AZK;
  885.     Start.Left := 96;
  886.     Start.Top := 400;
  887.     Start.Width := 57;
  888.     Start.Height := 20;
  889.     Start.Caption := 'Start';
  890.     Start.Font.Color := clBlue;
  891.     Start.Font.Height := -11;
  892.     Start.Font.Name := 'Courier';
  893.     Start.Font.Style := [fsBold];
  894.     Start.ParentFont := False;
  895.     Start.MODALRESULT:= mrNone;
  896.     Start.TabOrder := 1;
  897.     Start.ONCLICK:= @GetInfo;
  898.   end;
  899.  
  900.   Timer1 := TTimer.Create(AZK);
  901.   with Timer1 do
  902.   begin
  903.     Timer1.INTERVAL:= 1000;
  904.     Timer1.ENABLED:= true;
  905.   end;
  906.  
  907.   SaveDialog1 := TSaveDialog.Create(AZK);
  908.   with SaveDialog1 do
  909.   begin
  910.   end;
  911. end;
  912.  
  913. procedure SafeInitForm;
  914. var
  915.   v: TVariantArray;
  916. begin
  917.   Closed:= False;
  918.   setarraylength(V, 0);
  919.   ThreadSafeCall('InitForm', v);
  920. end;
  921.  
  922. procedure ShowFormModal;
  923. begin
  924.   AZK.ShowModal;
  925. end;
  926.  
  927. procedure SafeShowFormModal;
  928. var
  929.   v: TVariantArray;
  930. begin
  931.   setarraylength(V, 0);
  932.   ThreadSafeCall('ShowFormModal', v);
  933. end;
  934.  
  935. Procedure LoadDTMs;
  936. begin
  937.   WaitFight_Shield := DTMFromString('mrAAAAHic42BgYOAFYgEg5gdiHiBmB2I+IGaBijECMRMQs0LlQOJcUBqkl9XUCS8mBBgJYBgAAK0nBH8=');
  938.   WaitFight_Damage := DTMFromString('mbQAAAHicY2VgYNBmhGAdINYDYn0glgZiBSBWBmI5IJYA4nQ2NoYEPj4wns3DA6a5gPrRMSMWDAYAIPEEVA==');
  939. end;
  940.  
  941. Procedure FreeLoadedDTMs;
  942. begin
  943.   FreeDTM(WaitFight_Shield);
  944.   FreeDTM(WaitFight_Damage);
  945. end;
  946.  
  947. Function FindObjectMM(Colors: TIntegerArray; var Dist: Integer; Width, Height, tol: integer; Click: Boolean; Speed: TExtendedArray): Boolean;
  948.   var
  949.       I, CTS, X, Y: integer;
  950.       TPA: TPointArray;
  951.       ATPA: T2DPointArray;
  952.  
  953.   begin
  954.     SetLength(TPA, Length(Colors));
  955.     CTS:= GetToleranceSpeed;
  956.     SetColorToleranceSpeed(2);
  957.     SetToleranceSpeed2Modifiers(Speed[0], Speed[1]);
  958.  
  959.     For I:= 0 To High(Colors) do
  960.       FindColorsSpiralTolerance(MSCX, MSCY, TPA, Colors[i], MMX1, MMY1, MMX2, MMY2, tol); //Find colours starting from the middle outwards..
  961.  
  962.     SetToleranceSpeed2Modifiers(0.2, 0.2);
  963.     SetColorToleranceSpeed(CTS);
  964.     FilterPointsPie(TPA, 0.0, 360.0, 0.0, 74.0, MMCX, MMCY);  //Filter them so they are on the MM itself..
  965.     ATPA:= TPAToATPAEx(TPA, Width, Height);                  //Group TPA into cirles by Distance..
  966.     SortATPAFromFirstPoint(ATPA, Point(MMCX, MMCY));            //Sort the colours from the closest to the center.. AKA Me..
  967.     if(Length(ATPA) < 1) then
  968.       Exit;
  969.  
  970.     MiddleTPAEx(ATPA[0], X, Y);                       //In that 2D Array, Pick out the closest to the middle a.k.a. the first one..
  971.     if Click then
  972.       MMouse(X, Y, 5, 5);                               //Move the mouse to the colours found..
  973.  
  974.     Wait(randomrange(200, 500));
  975.     begin
  976.       if Click then
  977.         ClickMouse2(True);
  978.       Dist:= Distance(X, Y, MMCX, MMCY);
  979.       Result:= ((X <> 0) AND (Y <> 0));
  980.     end;
  981.     if Debugs then
  982.       DebugTPA(ATPA[0], '');
  983.  
  984.     FFinder:= 'FindObjMM';
  985.   end;
  986.  
  987. Function FindObjectFX(Colors: TIntegerArray; Uptext: TStringArray; X1, Y1, X2, Y2, Width, Height, tol: integer; Click: Boolean): Boolean;
  988.   var
  989.       X, Y, I: integer;
  990.       TPA: TPointArray;
  991.       ATPA: T2DPointArray;
  992.  
  993.   begin
  994.     SetLength(TPA, Length(Colors));
  995.  
  996.     For I:= 0 To High(Colors) do
  997.       FindColorsSpiralTolerance(MSCX, MSCY, TPA, Colors[i], X1, Y1, X2, Y2, tol); //Find colours starting from the middle outwards..
  998.  
  999.     ATPA:= TPAToATPAEx(TPA, Width, Height);                  //Group TPA into cirles by Distance..
  1000.     SortATPAFromFirstPoint(ATPA, Point(MSCX, MSCY));            //Sort the colours from the closest to the center..
  1001.     if(Length(ATPA) = 0) then
  1002.       Exit;
  1003.  
  1004.     MiddleTPAEx(ATPA[0], X, Y);                       //In that 2D Array, Pick out the closest to the middle a.k.a. the first one..
  1005.     MMouse(x, y, 5, 5);                               //Move the mouse to the colours found..
  1006.  
  1007.     if Debugs then
  1008.       DebugTPA(ATPA[0], '');
  1009.  
  1010.     Wait(randomrange(200, 500));                      //Wait for the uptext to show..
  1011.       If(IsUpTextMultiCustom(UpText)) then
  1012.       begin
  1013.         if Click then
  1014.         begin
  1015.           ClickMouse2(False);                              //If it finds it, click the object/item..
  1016.           wait(500);
  1017.           if ChooseOptionMulti(UpText) then
  1018.           begin
  1019.             Result := True;                               //If it clicks the object, return true..
  1020.             Exit;
  1021.           end;
  1022.         end else
  1023.           Result := True
  1024.       end else
  1025.         Result:= (((X <> 0) and (Y <> 0)) and (Click = False)) ;
  1026.  
  1027.       FFinder:= 'FindObjectFX';
  1028.       UptextF:= Uptext;
  1029.   end;
  1030.  
  1031. function AutoColourLadder: Boolean;
  1032. var
  1033.   arP, arAP: TPointArray;
  1034.   arC, arUC: TIntegerArray;
  1035.   ararP: T2DPointArray;
  1036.   tmpCTS, i, j, arL, arL2: Integer;
  1037.   P: TPoint;
  1038.   R, G, B, fx, fy: Integer;
  1039.   X, Y, Z: Extended;
  1040. begin
  1041.   tmpCTS := GetColorToleranceSpeed;
  1042.   ColorToleranceSpeed(2);
  1043.   SetColorSpeed2Modifiers(0.09, 0.26);
  1044.  
  1045.   if not(FindColorsTolerance(arP, 2509141, MSX1, MSY1, MSX2, MSY2, 5)) then
  1046.   begin
  1047.     ColorToleranceSpeed(tmpCTS);
  1048.     SetColorSpeed2Modifiers(0.2, 0.2);
  1049.     Exit;
  1050.   end;
  1051.  
  1052.   arC := GetColors(arP);
  1053.   arUC := arC;
  1054.   ClearSameIntegers(arUC);
  1055.   arL := High(arUC);
  1056.   arL2 := High(arC);
  1057.  
  1058.   for i := 0 to arL do
  1059.   begin
  1060.     ColorToRGB(arC[i], R, G, B);
  1061.  
  1062.     if (R >= 68) and (R <= 103) and (G >= 57) and (G <= 88) and (B >= 29) and (B <= 46) then
  1063.     begin
  1064.       ColorToXYZ(arC[i], X, Y, Z);
  1065.  
  1066.       if (X >= 4.18) and (X <= 9.38) and (Y >= 4.37) and (Y <= 9.85) and (Z >= 1.83) and (Z <= 3.91) then
  1067.       begin
  1068.         for j := 0 to arL2 do
  1069.         begin
  1070.           if (arUC[i] = arC[j]) then
  1071.           begin
  1072.             SetLength(arAP, Length(arAP) + 1);
  1073.             arAP[High(arAP)] := arP[j];
  1074.           end;
  1075.         end;
  1076.       end;
  1077.     end;
  1078.   end;
  1079.  
  1080.   SortTPAFrom(arAP, Point(MSCX, MSCY));
  1081.   ararP := SplitTPAEx(arAP, 20, 20);
  1082.   arL := High(ararP);
  1083.  
  1084.   for i := 0 to arL do
  1085.   begin
  1086.     if (Length(ararP[i]) < 10) then Continue;
  1087.     P := MiddleTPA(ararP[i]);
  1088.     MMouse(P.x, P.y, 5, 5);
  1089.     Wait(100 + Random(100));
  1090.     if (IsUpTextMultiCustom(['adder', 'up Lad', 'limb-up'])) then
  1091.     begin;
  1092.       Result := True;
  1093.       Break;
  1094.     end;
  1095.   end;
  1096.  
  1097.   ColorToleranceSpeed(tmpCTS);
  1098.   SetColorSpeed2Modifiers(0.2, 0.2);
  1099.  
  1100.   if (i = arL + 1) then
  1101.   begin
  1102.     Writeln('Failed To Find Ladder.');
  1103.     Exit;
  1104.   end;
  1105.  
  1106.   GetMousePos(fx, fy);
  1107.   if Result then
  1108.   begin
  1109.     ClickMouse2(MOUSE_RIGHT);
  1110.     WaitOptionMulti(['adder', 'up Lad', 'limb-up'], 600);
  1111.   end;
  1112. end;
  1113.  
  1114. function AutoColourAltar: Boolean;
  1115. var
  1116.   arP, arAP: TPointArray;
  1117.   arC, arUC: TIntegerArray;
  1118.   ararP: T2DPointArray;
  1119.   tmpCTS, i, j, arL, arL2: Integer;
  1120.   P: TPoint;
  1121.   R, G, B, fx, fy: Integer;
  1122.   X, Y, Z: Extended;
  1123. begin
  1124.   tmpCTS := GetColorToleranceSpeed;
  1125.   ColorToleranceSpeed(2);
  1126.   SetColorSpeed2Modifiers(0.10, 0.45);
  1127.  
  1128.   if not(FindColorsTolerance(arP, 2895164, MSX1, MSY1, MSX2, MSY2, 11)) then
  1129.   begin
  1130.     ColorToleranceSpeed(tmpCTS);
  1131.     SetColorSpeed2Modifiers(0.2, 0.2);
  1132.     Exit;
  1133.   end;
  1134.  
  1135.   arC := GetColors(arP);
  1136.   arUC := arC;
  1137.   ClearSameIntegers(arUC);
  1138.   arL := High(arUC);
  1139.   arL2 := High(arC);
  1140.  
  1141.   for i := 0 to arL do
  1142.   begin
  1143.     ColorToRGB(arC[i], R, G, B);
  1144.  
  1145.     if (R >= 28) and (R <= 95) and (G >= 21) and (G <= 66) and (B >= 21) and (B <= 64) then
  1146.     begin
  1147.       ColorToXYZ(arC[i], X, Y, Z);
  1148.  
  1149.       if (X >= 0.92) and (X <= 7.42) and (Y >= 0.87) and (Y <= 6.54) and (Z >= 0.86) and (Z <= 5.59) then
  1150.       begin
  1151.         for j := 0 to arL2 do
  1152.         begin
  1153.           if (arUC[i] = arC[j]) then
  1154.           begin
  1155.             SetLength(arAP, Length(arAP) + 1);
  1156.             arAP[High(arAP)] := arP[j];
  1157.           end;
  1158.         end;
  1159.       end;
  1160.     end;
  1161.   end;
  1162.  
  1163.   SortTPAFrom(arAP, Point(MSCX, MSCY));
  1164.   ararP := SplitTPAEx(arAP, 20, 20);
  1165.   arL := High(ararP);
  1166.  
  1167.   for i := 0 to arL do
  1168.   begin
  1169.     if (Length(ararP[i]) < 10) then Continue;
  1170.     P := MiddleTPA(ararP[i]);
  1171.     MMouse(P.x, P.y, 5, 5);
  1172.     Wait(100 + Random(100));
  1173.     if (IsUpTextMultiCustom(['ray-at', 'haos altar',  'altar'])) then
  1174.     begin;
  1175.       Result := True;
  1176.       Break;
  1177.     end;
  1178.   end;
  1179.  
  1180.   ColorToleranceSpeed(tmpCTS);
  1181.   SetColorSpeed2Modifiers(0.2, 0.2);
  1182.  
  1183.   if (i = arL + 1) then
  1184.   begin
  1185.     Writeln('Failed To Find Altar.');
  1186.     Exit;
  1187.   end;
  1188.  
  1189.   GetMousePos(fx, fy);
  1190.   if Result then
  1191.   begin
  1192.     ClickMouse2(MOUSE_RIGHT);
  1193.     WaitOptionMulti(['ray-at', 'haos altar',  'altar'], 600);
  1194.   end;
  1195. end;
  1196.  
  1197.   //Written By Flight..
  1198.   Function FoundSymbol(Ident: Integer; var X, Y, Dist: Integer): Boolean;
  1199.   var
  1200.     B: TBox;
  1201.     TPA: TPointArray;
  1202.     L,i,CTS: Integer;
  1203.     ATPA,ATPA2: T2DPointArray;
  1204.   begin
  1205.     FFinder:= 'FoundSymbol';
  1206.     CTS := GetColorToleranceSpeed;
  1207.     ColorToleranceSpeed(2);
  1208.     FindColorsTolerance(TPA, 12632256, MMX1, MMY1, MMX2, MMY2, 5);
  1209.     ColorToleranceSpeed(CTS);
  1210.     if Length(TPA) < 1 then
  1211.       Exit;
  1212.     ATPA := TPAtoATPAEx(TPA, 8, 8);
  1213.     L := High(ATPA);
  1214.     SetArrayLength(ATPA2, L+1);
  1215.     for i := 0 to L do
  1216.     begin
  1217.       B := GetTPABounds(ATPA[i]);
  1218.       with B do
  1219.       begin
  1220.         if (Ident = 1) then
  1221.           FindColorsTolerance(ATPA2[i], 16514299, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 5) //Prayer Altar White Symbol..
  1222.         else if (Ident = 2) then
  1223.           FindColorsTolerance(ATPA2[I], 1244922, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 5); //Prayer Altar Yellow Symbol..
  1224.  
  1225.         Result := (Length(ATPA2[i]) > 0);
  1226.         if Result then
  1227.         begin
  1228.           MiddleTPAEx(ATPA2[i], X, Y);
  1229.           Dist := Distance(MMCX, MMCY, X, Y);
  1230.           LProc:= 'FoundSymbol';
  1231.           if Debugs then
  1232.             writeln('FoundSymbol: True');
  1233.           Exit;
  1234.         end;
  1235.       end;
  1236.     end;
  1237.   end;
  1238.  
  1239. function round2(Number: extended;Places: longint): extended;
  1240. begin
  1241.   result := round((Number*pow(10, places))/(pow(10, places)));
  1242. end;
  1243.  
  1244. Procedure ResetEverything;
  1245. begin
  1246.   ColorToleranceSpeed(RCTS);
  1247.   SetColorSpeed2Modifiers(0.2, 0.2);
  1248. end;
  1249.  
  1250. procedure PrintOnSmart(TP: TStringArray; Placement: TPoint; Colours: TIntegerArray);
  1251. var
  1252.  x, y, bmp, I, B, H: Integer;
  1253.  ATPA: T2DPointArray;
  1254.  Canvas: TCanvas;
  1255.  Colors: TIntegerArray;
  1256. begin
  1257.   GetClientDimensions(x, y);
  1258.  
  1259.   Bmp := BitmapFromString(507, 163, 'meJzsvXdwG9e352n7JwJoMCfJ' +
  1260.         'UbZly5KVmUlkgMhEJHIgco4Ec85BFDMUqJxlZVGS87NkW372++Xw0' +
  1261.         'syb92Z239TW1Gzt7rya2trZ3dq/9oLXbLfAIJKWTIU+9S0W2Gjcvt' +
  1262.         '1ofPrcc+8996WXcMMNN9xwww033HDDDTfccMMNN9xwww033HDDDTf' +
  1263.         'ccMMNN9xwww033HDDDbdkk1WJBxoDQ221dBqFQCCsd3Vwww033HB7' +
  1264.         'IiYS8j850v35sb7PjvXPHuySigTrXSPccMMNN9wes5HJZJFIdGio4' +
  1265.         '+qhwZP9sWN9dWcG67Zu3bre9cINN9xww+1xWn5+frShaWKg80h/01' +
  1266.         'h7NObQdbU1dTRE1rteuOGGG264PWZTabVtbS1TnbXDTcHBOldLrb+' +
  1267.         'hqy/S2JyamrreVcMNN9xww+2xGYNBb64Lt/hrDjQH++o8DS5dsLY2' +
  1268.         '1NAUa20rKSlZ79rhhtvzYAQCQSCys9hV610R3F5o27ZtW0+tpztk8' +
  1269.         '1Zz6s3SgE5ktxj0dpfN44s0tag0mvWuIG64PfOWnp7OYEdffbNx05' +
  1270.         'tRvsBBIpHWu0a4vaBW43XZYk6LTlbNKq5mFRlF9JDHZrE77P6Qv7b' +
  1271.         'eYrOvdwVxw+2ZN57Es+mN2MY3AvmvufNf81bQI6+//sZ6Vwq3F86A' +
  1272.         '42FvbpR5OpgyM3PfB+U73pUwyjqD1qhd57YaXT6/3eVe7zrihtuzb' +
  1273.         'Uxm5aY3InmvufJeteVsNOZuMm583VdG8eN+Pm6/sFVyuaGxYZV9gC' +
  1274.         'NsoDPLCyiFFXyWXMz26WVDMVcs5LW5XOtdR9xwe4btPWDb6/Nf9+W' +
  1275.         '+agGoz85XZedV526qyX89IBCa17t2uL1AtmHDBqPNHhjtH5g90XL+' +
  1276.         'sHe0U9XkpVRZK0RmpcNUF7IHfC6L3bHe1cQNt2fVCAQCnR3Z+GZd3' +
  1277.         'qvWnHxNVp4iM0eUmSPMztcAbz93k4tCZa53HXF7UayouJirqwkMdE' +
  1278.         'SO9LdcGI8dG4qdGlY6OinURrm7PdhXb7GYFdXV611N3HB7Vk0oNr+' +
  1279.         '6uT3/dVdOvhpwPj2LnZpRkZZBycwV52zU52607SoIvrV583pXE7cX' +
  1280.         'wjIzM8srKrqOT/lGO7vOHGo7MT14/dTgzVO1U5O18bG65pBCqSwuL' +
  1281.         'l7vauKG2zNpZeW0Vzd35L3mS8tWkdJ5xFQagVyaQtpDIO0mpVWkZw' +
  1282.         'tzNhmy86x8UQC0tde7sri9EAbutO4ThzrPHew4PR3c3+PqbnF0Nnj' +
  1283.         'H2tpPjjvt5hqTAU+ehhtuazOe0LfxzVjOphpypjSFzP4VqexXxL2/' +
  1284.         'Iu76FWFnCqkoNZOdmSvN2WjK22R5550t611Z3F4IS8/IqBucVNsaH' +
  1285.         'N3N/okOV3+zsSGsawrVDbZZddV6rWq9K4gbbs+kpaenf7gnmveqI2' +
  1286.         'eTPiuvKjWDQSAXphC3AxGRneT0koxsTkY2LytXlp1noNE4611f3F4' +
  1287.         'IA8DvO3nE4G6XaWP+4f7waK+nv8M90OHzWa169dt4dBE33NZkO3ft' +
  1288.         'zn/NnbNRn7NRnZUrychmp2VSyGn7EkovTMuomAM+EDczWyaW4kMjc' +
  1289.         'PslDPghHQcnAoOd7t62yOiQr6/T1dOqrwtwOLjLgRtuazcevzp3kz' +
  1290.         'V3kwF4+Nn51Vm5VRk5/LQsZloWIz2LlZFdCf5NKJubniWgMvHBz7j' +
  1291.         '9Epaamto4Mhgc6HV1Nde01OoaAqbmiNmN+xu44fazjMpwzA28NOcA' +
  1292.         '5m/UZOXJM3NFAO8J5fAycgRzEs4N3RFu2WrIz89f7yrj9vzbhg0b2' +
  1293.         'iZH5F6r3GMVeUwin9HZ01yt0653vXDD7Rkw8PMpKCjJzs5J2p6Tk/' +
  1294.         'PeB/a8V+25m0w5G7UJDz9PAvz59Cw2EAzmpAMnP5uXkQ38fEF6loT' +
  1295.         'OrFxYfnZ2Nj6AB7fV2iuvvLJwI7iRcnNzwR119ft79o46a0ddZKK/' +
  1296.         '4fBI95nDBz++FmyIbdq0qbyCQqPTyWTyL19n3HB7yo1AIFQp3Pln/' +
  1297.         '7z9/t9WDk2WMtkonDdu3PjuVl/eq3MhnY3q7DzFXEiHl57FmhN77i' +
  1298.         '8Tvs7I4qRlCmn0n4Ko77z3Hs/ro3w0+0HbZaFItk7nh9szaenp6bU' +
  1299.         'NDY2trXQGA70h+SJxQ3PLmS++aekZ2H905vT9T498NXvw8+vxz6+d' +
  1300.         '+e6LSz/cm756yR+ubdo/MXhwpmNgGMB/fc8CN9yeNktNTVVU6V7Vx' +
  1301.         '7P/+N/z/+H/zPvd/0YdOPXa66+/NPej27mvNjG7FgI/fyHwmT8qkw' +
  1302.         'GUncfbtv3Dl+YGUYgPzGz+0/+88T//P1n3/8sWTr1Ga1zvE8XtWTJ' +
  1303.         'fJNp28PjQxGTvyIHuwWGTuWbz5s37T5xt6+qZvDLbMDim19d4I7GO' +
  1304.         'qTHg2J/67rNjn8829w/UWF1Gg6VtLN47ebC9f7BjdKKgsHC9TwU33' +
  1305.         'J4uq+RyKcW8PFZn5kd/yvvyX3Mv/dfC+P3X30ikwSypaM19tSZnky' +
  1306.         '47X5mVJ8nMFSbCOFn0OTHSMmlzYiSUQU/PZr275T1Ae+7MJ3nf/o+' +
  1307.         'N//x/ZU7/8Fahg1JUXlBYtN5nidszY2aLhSFV+adPtQ4Odw4M9o+O' +
  1308.         'Hzl9ZjB+pP/Y2aa2jpaRiY4jZ4xmm85o0elrHP5QbV93jdtjMNgcL' +
  1309.         'r/F4mibmqnrGXD7gwMnzl9+8M3EyWNShRxP8Ycbbqjx+fzyAlbmZk' +
  1310.         't63d3c0/8u78L/Unb+j//pv/wfVdKB7HxNVsK3l2TmCOdG4zDTMql' +
  1311.         'zoqRmVMAcCz+Sn1xx/zf/zvPr/5rz5f+bP/tvafpjb77Bq2SxCwoK' +
  1312.         '1vv8cHtmTK3VllZQduzZKwk1BftHW7q6+8cm+kYOeBo6embO1DY0h' +
  1313.         'eqbes9ft7gDaq3JbHU5vcGewf2NbV0Gs91sAciP9Jy95gpHTVZb/e' +
  1314.         'BY28TBL/7+T1/++z+fun3dHQy8/fbb631+uOH2VBiVSi0vZma9pkt' +
  1315.         'v/Dz32F9yz/9r0ZX/tJfXnpVVlZUnm3PvRRk5APisObyjwC+fU0Vq' +
  1316.         'aln2u5IPL/9L7pf/d/6t/57KnXg9q1CpkL8+Fx3CDbdHWmZmpkano' +
  1317.         'zBZFQwmlcHYQ2Go6zqdwcjA2HhzZ5fRE+48dMIbCttcHm97n7u1V6' +
  1318.         '0xekO1zV3dFk+kb2x6cuaY2xfyd/QHBsYUKvCmKdJ/QO8MDhw++Nn' +
  1319.         'f//Gzf/jDV//0d5e/+iItLW29TxQ33J4K27VrF51SmbfFmt76V7ln' +
  1320.         '/ynvzH/KKohlZYiy8uRZedLMXHFiKGYWKz2TPg/8chT4yIY9mfL+j' +
  1321.         'ff/v7zr/y1TPPnOa4UarQZPaYLbCu2DbduUGg2bL2Tx+IxKrt3rp7' +
  1322.         'HYRSKlMRDpGd5fY3dXyTUN0yd0Fpu8WqUwWr2Dk50Dw8fOn2/o7Of' +
  1323.         'KLBprePrEqeljxzsPHjM1dnFEEqFI7OoarjY6lCrdyc/u3P3z7z7+' +
  1324.         '+9998re/LyzCo4u44fajlZSWFu0peX23O6P/h7yz/5K6t5WQQiOmc' +
  1325.         'UhplaQ0NjGNTkytIKaWE1NLCeSSFHJxClI497co5VfF2c1f5t79H3' +
  1326.         'nVh95/c49KheczwW2lBnx7pVYLUC9WKLmiKpXB6IvWGm32HYXFVRa' +
  1327.         'n3eMTVSmEIqm7Z0Tt8osMVkfPgfjZ89PHj48fnnGF63jyGrne0zE4' +
  1328.         '3NY3ODI9PXD4mKvngNBoMzX3CmWqigq6p6H+xu++v/Hbv57921/Xu' +
  1329.         'PD5Wbjh9pNVSSQle4s2l/myjv5ThvX6yy9JXiZUvkxgv0xgvJRCfZ' +
  1330.         'lA+xWJ+TKB+lJKxUspZS/9qvilDSUvv8wkF3fnXP1vr2snd7y3t6q' +
  1331.         'qCu8jw23l9sorr2j1+kqBqEpZbbI73aFwsK7eaHOwuLwCFq9SKGVX' +
  1332.         'CgSCKpXdZ+mbtLYPdB0YG5qYdoWbqjT2Gk9EqnVJ1Tart5Yj1lepz' +
  1333.         'P5Y44EjRwNDU8pwM4XKLC2llFPpM5/euvLbB+f/5stYd9t6ny5uuD' +
  1334.         '1FBtwttUZTVlD8Hr82s6SvrNzN4noqaCZWpZlCr3n7fX32RvW7W3V' +
  1335.         'lFCOVoS+jGsoojj173FmUyXetU8W7izhs1ltvvbXeJ4HbM2YEAqG5' +
  1336.         'rb3G6a5r6/BFY55I1BkI6i3WIhqjkMah0Vh0Bocnlgd6huvb2w02u' +
  1337.         '87qqzZ5RdXWSqlZVG1j8KoZXJXK5DW7w9HW7oHxyeGpaW+ssbikoq' +
  1338.         'CwZF9RSc/Jw+d++KuDX16z+laUAOSNHQW4cL0IemsXaEdHyopKK4r' +
  1339.         'LS4q4dofb5fY7XX6Hywf+2h1+jc5prnFZrE6jyeZw+tzeIFBZmbyi' +
  1340.         'mFq0dx9XZX+/mL7uZ4Hr2dKbOwvYVVKnPwjce0846gqGrR6fzevji' +
  1341.         'sTbCoqpdHYFlSlTajoGBpu7e0wOZ/fw/sHxyd6RUeDYcyVGKkdudg' +
  1342.         'bb+wfaBwf7xsb7Rsebe3pjLa1cgXgfwH0FpX5i/8zntyZmLxXyBCu' +
  1343.         'sUvzud7hwPd+a/vi3x7/5Xyc+/tcyk7+CxuRweFy+RCiSicQKoUhe' +
  1344.         'JVHJFVqFUieVqflCGZPFr+SKhEI5aIrz+UIqlb6XJTA3xYcv/2n85' +
  1345.         'm/jd9b/dHA9K4r1j4rkCrXBpDaZTHYn8OFVRpPOYmPxBXvKqHRmJU' +
  1346.         '9QVdfWHmtrByRv7Oxq6emrb+/sOzDmjdTtLWZ+uLvM7PT1jBxo7Op' +
  1347.         'u6x/oGtoPdgvXN4ImQ3FJeUFpWd3EyOjV8+M3L8fvPnhkZXDg43oR' +
  1348.         'NHn7+5l7/zb98X9uOXo/tzP+Tk0dO9GUrmQwuSw2H7yg0TkUKgv8p' +
  1349.         'dLYFRRGRQWjrJwG/mWyeCwaa4spnONrkzlaW2e+7jn725Grf8GZj2' +
  1350.         'slah4/ojKaq5TVLB6fzRPINVq10SRWKA1Wm1hjKKJzSsuowO3vGBq' +
  1351.         'ONLVEm1sCdfXR5tb2vsGO/qFgbb3W5tF5It5IrLGjs6W3DzwLEo+D' +
  1352.         'to5IYzN4oTXWFLPonScPDV45eeD65ZXUBwc+rude03ceTH3yH0Zv/' +
  1353.         'vPQxT9ZBi6Qm0fTQvECprissKS4pAKAvaSUWlJKAX/LyungB1hcAl' +
  1354.         '5TCovKCgpLSwuKdjEkqZHpDH8bU+WOjtxoOvhl1+nfjF77m3U/L1x' +
  1355.         'PuToOn1WJq6plMoVGJ1VpSsope4uKKwUisVwplsmFRpvGHWRy+L2j' +
  1356.         'Y+39g42d3UA2r98TCseaW1r6BgdOXdo/e6/n2ue952+0jk4BzoPt4' +
  1357.         'KEQa2mra21v7uq1ury6qLft1HTnxUMjV6+tpEo48HE99xq5en/89v' +
  1358.         '/Uc/Y3zVOfVHUeRdrjqaEj+b7ufTRWSVFJUVFxYWHx7j0Fu3cX7Nl' +
  1359.         'buGv33j17wYt9e/cVgDf2sbi5zl5yMJ4W7CyRmO0tRyIj1xumP+s6' +
  1360.         '+ddTt9f/1HA9zXK5/EoaTVBSwikrE/AELB6vuKxi245dAoXG29pnb' +
  1361.         'e6ZuHnP4g/VtrQ1dHQBeaMxfU2NN1rXeejE6N37nVc+U0dbKWKFsW' +
  1362.         '2w+eyt1mPnoz2D7mDYG44EYnUWj1cglVuiodrDg10XDh24cmclVcK' +
  1363.         'Bj+v51tTtb4eu/H7g0p/rpz7xtB5ltMVJzdPpvnhq1+FMjndjLuvN' +
  1364.         'dzhbt9F37irbtXvfjp27d+7a9+GOkg8+pL2zhfX6q+wsY2Nq08E07' +
  1365.         'yQ5NlBuCKk9PbaWI6GhK/WTnwxceHTIFNcLq97D56QUmqCsrLK4mL' +
  1366.         '5nT+n27bTS0nIao5RROXj+zsjlz4Yufdx38rLV6zM73TUuT43T5Q5' +
  1367.         'FLNHGzguz/bNfu4fjxczKLe9v3fLee+9sea+YIzC2D8WOX4lOnbCF' +
  1368.         'YyKJVFKtYvEFBp8nfLCv59zRydn7K6kVDnxcz7emb383cu0fWo7cA' +
  1369.         '6C21k3sbZkgRSfSPRNprePED0wpBNGGVFlKqpSUzs/IYWTnMzJy+E' +
  1370.         'iGhJAqSSFXbUiRINL6tKaJNOcBJDZc4e1QuTqUnu6axnhg8HLTwU+' +
  1371.         'm8Ug+rsU0evlTvVTB3LuPuW8fq6CAumcPZfeuirJyucUFUJ/Y507C' +
  1372.         'W+g7eUWh0ykNBqVeL1Fr6+IngVfvHJgsF0g3b3lv1569NDZbIJHRW' +
  1373.         'JwPtn+4ZesHJVyRur7TP3lSbKgpraAUl1P0YW/s6PDAxbMrrBgOfF' +
  1374.         'zPtwCTu09+7eo8pQ0N6cPDm1vGyJGp9OBkWmyYmK8gkoXEdAlQSqp' +
  1375.         'gA5mzAeESUsWENCkxTUxMExEJInJlJK19Ks09SWqY2BfuVTs7ZI42' +
  1376.         'pafLXD9VN34dBz6uhZq6dd+oUDN276YXFtD37gXM5xQUCJjMcN/Yw' +
  1377.         'p2toZhIruCLq2ztA4DkIrPjw92gmbmrjELliaukKjVfIhUrqhmV3H' +
  1378.         '3FxVvee//d97cyqw2mzhGeUlNUWqauc9Ud3b//2kcrrBsOfFzPvRq' +
  1379.         'nrukiIwpnu9TXk1M3kOranx4eS3V2EtPFxNQfgU9IExBS2YTUSgLg' +
  1380.         'fFoVAD4hTUgkipACZ1rbeJpjPym0f1uou9reKrE2yxytgPmB/hPrf' +
  1381.         'mq4nkL1zsy09Hb0Hp4cvnTSEw3w9u5R8gX1Y0cX3bl1+iSdzVZ4I8' +
  1382.         'aO/eVs7i7wmGBxBFXSBO2r1RpTjaRaJVYoeVUSjkBIYTD3FZe8v/W' +
  1383.         'DMn6V2FPLlMqMHcHYzNDQlQsrrBsOfFzPvXpOfqGLHKgyxRjuttTY' +
  1384.         'EKB3WmyUrKojEPkJqv8IfP488IUA+AD74BFAJIlIW4xpzaNprhFSY' +
  1385.         'OTdSI/c0iSuqa+qaVC4uhsnzq/7qeF62nTg8u1bf/ebG3/4m8u//v' +
  1386.         'boF3e6jsYlArHS2yyI9LcfX2QgzejVz8UWlyzcUsbh7dq9p7CkjC+' +
  1387.         'WCCWJgT0qg1FtNAHmqw2mar0BePtCmZzF5e3eV/De+1v3UDmVNod3' +
  1388.         'oq3x6IGh6xdXWD0c+Liec91+0Hfhj5bmw2J9pNDRRAr0ptX0p9XvR' +
  1389.         '6guAoGboPpPwGcRUjkA+IQ08a8QQeItsoiYX50W6U91DSGuwTdrB4' +
  1390.         'zR0Wp3t9zRbmk81Dh5ffr2t+t/grieGoH74cjd2U/+9veXvr138ou' +
  1391.         'PR69e6DgZZzhD+9Q+obt5arG7ZfrOA6EtUFBB27l7T0kFpYJGrxSI' +
  1392.         'RDKFQCKrFImYPH4plV5YWkZhsRlcHosnYHC4ZVTa9p07d+zbK7AbI' +
  1393.         'zMDbacmO88dm7h5byU1xIGP6/nW5OzvO0/92tJ0UGqKfehqIrq7Uk' +
  1394.         '3daXVDpG16AhED/NSfgP8KSfjeNsV7H4h+RUr4/6nOjlRXP2Lpzov' +
  1395.         '2WTuO60PDSne3veVoaOTmyOWv1v0Ecf1iGjh5ef/5W8tPaL3+629v' +
  1396.         '/eavz9z/LH7nWvfpI9HRfpbJvI1T3Xv21lIfqR2Om8ONEq2JymQXF' +
  1397.         'JfuKy4BhAd/d+7bt3X7h2+9/e7rb771/rbtH+7evXXHjq0ffvjhrt' +
  1398.         '1FZeUSncbRVecf7+g4N11TF3KE66bv4DNtcb3g+uuxm/+u5cj9moa' +
  1399.         '43Nq02dtKsnekmrpSve3E1xUEpBJwnphehQX+y0T+O++rzGbrB9u5' +
  1400.         'gPwEkpCsrkt195JNXemhLnXbYRNw8r099tZjkQM3e8+saCwcrudDH' +
  1401.         'dPHqvkUnUrs8nliXb09R86MXfkUfXfgwsfu3ritJx6ZONR+fKbz5K' +
  1402.         'HgQLcm7FWEnKa2xv4LV5cvPLb/4M69+wDYN7/9zrvvvQe0+e13Ae2' +
  1403.         '3bP3g9bfeAsx/c/Pbib9vv/3aG2/yJVJPKGL3+u2BoL02XNvS1jY4' +
  1404.         'Mn3n0e1NHPi4nmt9P3z5L3UTn5hiExJHa56niWRsTjW0kK0xQm7VH' +
  1405.         'PB5hETEXpJ4QaBtSKED8uuNIb1ev3Ub7xWSgEASIGI/2dmeqmsluZ' +
  1406.         'slLXFr/aTK3+9oPRYautp65POVuFW4nhvFuvuUlUVi+l4hdRefskv' +
  1407.         'MKdOqZd66Rmf7fk3rtKrzuCA4TDHUlcidNLWNUa2tchtrumtdQ83D' +
  1408.         'V+4uX3Lz5LF333sf4H3bnt1llSymTFxpUEh8ZkXYXuUxcvQKqkxQX' +
  1409.         'Mmg8sRsqcoRa27o6GrtHWjs6I42tfSPjieAf/ubR9Z/5cDXev+4UL' +
  1410.         'XDvwFvyWr+DPQzryQoKqnwlvivH9fXBIoqpv/DYywQ1zOh6Ts/9J7' +
  1411.         '7XXj/dV1gqNLSkO6sR3SNZEMT2RAhZAoJCCfBebKIQBCAF6Qdpld2' +
  1412.         'Wcvo9lAoxuWKcjdxNyB8ApGH8N1kZ1uqpoXgbOQ2Ttgapqu9vTX10' +
  1413.         '+7uM7GxW5OzeBj/xZIv6JHS94oZhSIg2m4BbTevfAd93zscPlfZfF' +
  1414.         'AYGqKbYsUyx9ulwt18vr7Vb+gMWbqaHlnsxM17nTOXOo6cN9aFPIM' +
  1415.         'd1p6Gmr4672RXZHKwdmrY3tVgaA55BrrhzsMX7vhidXXtHc3dPR2D' +
  1416.         'w937D7T0Dz1e4O8q/MeRy98DLOfk/DOAJ9hirfsDwHKikLf+CejnX' +
  1417.         '0lQLCgcPkRAyeD1z3+OQMHSYG1xvTgav/FtY/wLZ8cJpaO9Qhci22' +
  1418.         'rJqhhZX4co/XOoZxMITEKWFCn0pmp6U8OHN4bi3tp2vdawdxfrV69' +
  1419.         'QCQiXQOCS2HayvYlc3ZBijdFi+611EzJHuz48YmuZ8fdfHL2Kh/Ff' +
  1420.         'LPWfuuI7cMzQHRe66vm0AjFtF7diF714W8XuzQy+qNLTU6b2v10uf' +
  1421.         'JfGVTe5Na1eccBYN3VohYVP3rrfOjPVcnwqPD3QdjLec/5oy4mpup' +
  1422.         'mR6ORgeLS/6XAc7gbalXqjxWCxOoIhb22spW+ga2RsavZxAh9yGAt' +
  1423.         '8dGPvqR+Afv6VxAIfCLwGelxfE1osrhdHB67c8w98VNMwLTU3FGj9' +
  1424.         'JEuErIiSDTFE7CKQKlNIDKTEl+6cyogdTw8dIvoOMiNDAXewks17X' +
  1425.         'dtO4rcTs8SEDWwSrYZsayArYinmSHGk31I7XmVpVDg71f4BU93E8K' +
  1426.         'Uv1v00cf2S6jhxrf3TP0cv3lf0HKVW1wiou3kVOxkl2ygF71P3vUf' +
  1427.         'nV21myl8rE9CMWnWTS+jT8+yaA9c+X0nJXf1dvW2+sZsXBq6dHr56' +
  1428.         '9vAnt6Zmr3afnen76Pj+j851njnSOXN4+My18Ssfx+880OlM/LIyt' +
  1429.         'UTi9vk9Lrff438SnbZJwAcCbj+MwIDX3s7fgRfgL6/6LzCEAv4FL0' +
  1430.         'BbAN0fvAv8drrg7xY+I7DAB++C1+9t+/fxuYAMKAcUgj0W+hrsDz6' +
  1431.         'ItgXQjeAQQGA3tGJo22HhDuAvqDMoBPyFx4o/plAVrnXU+LX7LTPf' +
  1432.         'uLtOK6wtO8xRgjlMloXJxijCsaVsYBLyRRmR4xm1x9P9B8m+6U3Bu' +
  1433.         'DvUbKjWFsqtGV23Mgc/RXbaU16iksoMZFs9WV6bYojwuif8Pccg7c' +
  1434.         '11k7aWw7iH/0JpAnjg1x80XPk2eOpTVrh/u9JTyOIxi7cKGPsUQpp' +
  1435.         'SQFcJaRXianfvRPepS/7hIUNDbWzi4AoLHzh+fqhBe/jM+Omvvzj6' +
  1436.         '1Senvvrs8Me3Rj46d+Da+QM3L/Rcmum6eLRrf31nsHr8yieBhg4pl' +
  1437.         'VrNYOi4XCOXG3J5V3KInw/8+Dyo0XchRcELGAUCf9GAD9wBwByAFM' +
  1438.         'J8YTkQueBdbNQdPSh6rDjmAQFKAy/gzmj0BkAeDePA48LXi+4AKgk' +
  1439.         'Un4M8qC18NDyuUBWu9dLEjb/pOPG9s/24yt21xVpLMAQQSZBsDJMo' +
  1440.         'ppSXKKTd1ozGsxnhoxmhGVLoKNXb7ahxCCqFb4am09pvZrRfIVc2p' +
  1441.         'bxUQSpQk60xsixC0odonaP105dNteO68H5355nQ8LXRKzjwXyC1Hr' +
  1442.         'sSu/Kt8+B14/6zu1Xut9iqD2mV1IL3uJTdWnmlVgrEMWhkPTPn1lD' +
  1443.         '4gSuf2+3awYh8aqT+2N0rhz+/c+jjm+M3Lg1eOtV74WjnuUOxI6O9' +
  1444.         '4y09Ue3YtS+6Dp+rolCqWSwjn++Wyeqi9Ss5xJMAPkTooogGzwKIa' +
  1445.         'EB1FNFJ5YB3AXuTAvjLAD8+z3Bs8B+8xlZmIfCTdgBgh+Vji3pcoS' +
  1446.         'pc6yPQwv3kP7af+MHeekwX3P+GvY6gCyBVAbIpTCrUp7xMIQubM5r' +
  1447.         'OZ8ROpcbObIoetTjDKqlyr8ya3nAho+FcRvOFNFV/ystU4k4F2VpL' +
  1448.         'loYRbejDWFfdoavu9uOmuglPz7ng8I3h85+t/5ni+kU0dvPr+isPH' +
  1449.         'Aevq3uO0BxNbzHkmyuE4soKVsn2kt3vVFWWaWWV6iqWSsxUiZieSH' +
  1450.         'T82perKn9i9huZv7HWJhiIKkdaaw6cGO+/fKbtxMHIoUHvaHvT8Ym' +
  1451.         'OEwdHOuwuh3b/lS8mbt4T0RmiigoNh+OUShsbWlZyiF8Y+CjSoWA4' +
  1452.         'JakcsB1gFhAYvAZOOHzrSQPfWvcH0KYAhwPPmqSzw/Wsavab/nMPA' +
  1453.         'j2HTOEeTaA73xohav2I2I8Yg8QPq1MQVrpzMqPpQkbTJaThIqd2JO' +
  1454.         'AKcli8Tc6htLqzGdETGXWn093xlFQOYWsV2RIFwCdrQ6/5GmsPXw8' +
  1455.         'NXLY2H3Z3nQkOX+859dVKlpbD9Rxo/Ob9lpmPzANHqhpGtouN23ga' +
  1456.         'Np+nE5YI6HspBe+zy3dVi5kKIUMupMsENBmfqlHJmkemVz5wd/rOt' +
  1457.         '9WhZqtB4tOxWr3Sibaa8YNdDTMj/pne0OGB9ovHDpyeGG3U8lW64Q' +
  1458.         'uJ7PcanZlbUiKj0cx8fkNL10oO8QsDH8ZeIMYB7ZP8Z2wMHxAYvAb' +
  1459.         'Yhw+FJw180NYAdQNbsI0OPIb/TKvj4Gl3y4Ap1Ki0eMRmV1ZNgKQN' +
  1460.         'zgE/RNyqSCHQ06zjma0fpdefy4mdDDb124zWfQJNWvREevhoIrZff' +
  1461.         'ybNNpFCYhDe4pNrwmRpiKwOZTpqPWMnfe2T5mivMdxlCLb5emambu' +
  1462.         'HTr14gjV37svHIR7HJM2PXv6rrH5GyCqScIl7FLnrRB2J2qVzIqOJ' +
  1463.         'RJFyKXEiT8qkidnm4bUUoBmoZHDaYlGq7M2zmRWt49VZ+h4Pf3lJT' +
  1464.         'N9HUNFzb3hvobTRF7DKqRNU2PAz2D7cP0nfuEpWW6jic5u79KznEq' +
  1465.         'oAP+AxpCZxhdNALADL4F8Zn4Lt0wd+B13A38BH0XVgC+BdgHO17RQ' +
  1466.         'UKhHuC7fBBAOM/sEcAsB18CjwFYLQHlIY9LtwTFoi+RisTn4c8fL3' +
  1467.         'oDrB88BeIV/0XWFs8hv9MK9I3rvPGNO6oRGfjaq0Z1giij5AlIXJN' +
  1468.         'lPi+csNLZalV7ZnNF5C6swXR8fpos6JK/p6xMTV2JqP2ZMLDbziTK' +
  1469.         'mnf8Eo5YSOHXBMhK2vJmlqivdbYN24LN6pdQYXVI7d4K+W69umT63' +
  1470.         '6yuNZFkzfvSUUcCbNAyipkl3xAL9oq4VGE7HIuvURcWQGAX8WtkIn' +
  1471.         'YY1cfMUpn+va3HdPHau1VfmMlpybAtUVkRpPDbfA3+v2tUVedz1kf' +
  1472.         'UBjVTL6gRKzhiQVObeXU7NcD5657o0F9tdxUJeqcOLySCq/LTNskR' +
  1473.         '3rln0oKAT1GAU8eBnOAwHMEPgXwGP4zrdqhuDHYJDO7hSojS2NJty' +
  1474.         'aC8GRJkGwOE9+Vb3ipFCn1ZTSdT4sc14Q6/U4/U6jMCR1Jrz+bUT/' +
  1475.         'Xk1t3CqEGN7xSlpJJJ+v95OooWRUhWCPVnSO2cFO1PSA1uSRGZwVH' +
  1476.         '5GzoXPeTxbVeivYM88o/rPfa2qNBo4wr41GAV8+iFHJoxQJWmYhTz' +
  1477.         'meWhFoecYcMXbyrNGobnFVBA1upVRYYanfJXMKuMd3MeYq7udgUFn' +
  1478.         'aP8zpHtrBU23kag4LpUlL6jp+f/PTTCz/cP/Pd50c/v37m3l/F8Vw' +
  1479.         '6KxYcogMFHit4JOc5UFv8jM5bJ9JaRSoT0+BIddYhhhhZHiXbYsR3' +
  1480.         'APDLkDJHatP5beHpaLhJLa3eVe1JrT+fETudET2eHjmaETtBfE+dk' +
  1481.         'lKRkkpFtH6yvp6srkux11XUdjiirQD4Yr1dqKkRqM16f926nyyu9d' +
  1482.         'Lwhdusku3NIc/5mWPHxidaa6OqKj6bWkQp2c2sKKikFVXSiwSV9LE' +
  1483.         'ry3Xuj1yY5Wl1DqO4zi706ColiioKv4rhDCiHxpjOENMRkLZ2iSL1' +
  1484.         'hUwuX8xzqhkeLTMYtAxdPzfz5ez5b768+psHt/74Q/zOoweM4cCHg' +
  1485.         'gP1Ua17fXD9fA2cuWEINIh0VonWQje6EGuErI2S5WGyJUJ4vYrwmj' +
  1486.         'jjyDHy0XN7DxzxOfyVNPZr9r5U4NhHj2XUHktVdZE+0KWQmSkIPYV' +
  1487.         'UjsgcZH0tWRFNqYlWNPT5Wvq0nqjE6EgUbnJZ6zrW/WRxraMM1pqI' +
  1488.         'w3jm0OH+lpaA3e4wGrUyKY9BSTC/vJBVUVLF5dS29y1Twv6Tl+p7+' +
  1489.         'oRSQcwqDJp4bg3DIqvQS6k2Pc9hErhMAquGUyOnW+QUq4JiVzGcKk' +
  1490.         'bQId1/6dShz26c+uqTC3/1xY1ffzc1+1ePrCoOfFzPq0avfGaOtFb' +
  1491.         'p7SKVsUxnJ9miZG2MXF0LPHzCG5KUDA7Z3Jh+6mTqiePvt7TtVpgz' +
  1492.         '3JPp4cNp2j7SDkMKUpGSUp4APpmeQihFhFayGbQOagnm2rK24VDfu' +
  1493.         'CnYoLB4q4yOKqPT1zm87ieLax3Ve/wjt1F5aGQk5HS6zWabXq+Vyf' +
  1494.         'QKhaiSTS0t4VBpYItGpVkm9cHAoeOTR4/rrXaLqjJk5tlVTGs13a1' +
  1495.         'luTRMIIucWiOj2qsZZjnVIKkwySgOFT1iE/eenNp//ez47PmRy2f6' +
  1496.         'zp5LKn/08iftkzMHLt7BbsSBj+t51dSt++7WAYnRKVTqCzQ2IvDw1' +
  1497.         'dFEKN5aS3xTmpJC2/AyhVysz+roIh2cTps6hNC9xG3GlDR2yoayBP' +
  1498.         'DJjB+Bn1JKouvINYmRmSRDZHusJ3LgiCnQILd4xTqrSGdrGF189bq' +
  1499.         'VCPYT4Y3KZ12RhsaB1la/3Q7YbtFqNTKZWiJRCIWUkhIJn2/R6QRs' +
  1500.         'dsdSnft3HgwdnBmJH1KZLEqF0G/kONQMW3VCNQqaRlSq4BWpBSVaU' +
  1501.         'ZmSV6zkFRkk5WCHWps4tr/NM9Ju6W0TBVqqIsOd8ytqtU4csTltMj' +
  1502.         '7FoJGOX3so9QcOfFzPre48aBg5rLD5pVrLXp2DYAqQlaGEasLE16p' +
  1503.         'SiIwNL1Nff5OxjSXK17nTTp5Oax7e8FJ5CgIgT00hU34C/oYSYoGc' +
  1504.         'bAmTJUFEG3zV19R+4oo11Cw1uwRqM3ig9J54RKrzZQQHKhfT/wFg/' +
  1505.         '8mNScD1pDVy6W57W2etx+symWo0Gp1CoRSJZAJBJZ1uUquVYjGXwd' +
  1506.         'DojIuOyZ+48VVLb39rX3+VWiORSm1SroZPkVcWyTgFQvpudtmHtMK' +
  1507.         'tjOIP2GXbBbRdEvY+najMo2OHzbzGoRa+w1uhCVW6e6rbjtgnb/We' +
  1508.         'vOoJegWUXWL6Xhm7oH0iOWkbDnxcz7Faps5qvHWVEs07EgPRHCQrQ' +
  1509.         'uTqMNkcIm4SbyDSEUnonbr2XRx5ZiabsENHojvAUyCFzJoDPnUe+D' +
  1510.         'QAfMI2EVITQiQBRB1MtYa7z98JtQ/KzG4A/GpbYP+lj9dWPUB4OME' +
  1511.         'Q5htZ98v1dAom6cXqF8hzDg4KBA6Ezv18pECLsmP/ZMjlthsMOrlc' +
  1512.         'LhSKuVyL2eKz2YB7z6JQvHWti65RMnjmevvAoCccZQlF1UKRRSDUc' +
  1513.         'ipFFWWMwt3le7aJZRKRVEQr/kDM3FvNL9ZXlZnlVL+RGzJWNvRG6U' +
  1514.         'Yb29aubJo2D1001nZK+RQRbXcVY4+Uuc+klSwMIq0Q+LDVuVDQLaE' +
  1515.         'L/g6bHm0NWmH56EY0nRq2ELjxMebSRw/3pO8uXE9CEzfvq0I9PGNo' +
  1516.         'RxE9nysnGvyIxIco/IjeR8gVEDI56VOHs+5/mWdpIvyKSSCwCBtoK' +
  1517.         'WT2IsBPKSG8xUWMPqTKiyh8Gwye9nOz3pZ+4NuLdVZTuHns+qM7yx' +
  1518.         'YVnAkC9TN/Qc+EYE6VRRMnLhTMjog+EJP0pJPfwomfSTnV4dwfiKO' +
  1519.         'lmmMjF25HGtvdLq9BoxVxOP6G9lhLl0yhaps8vtSxug+f6T0wqrfa' +
  1520.         '2VyeVSw28flqNltcQaHt3SeRKMEOw+dnBYwE7U2yCquSmnDvawTRG' +
  1521.         'l6s1S322LjOJkXzYW39EK90O5+yU84plAvpSl5Zy8j4wmOtEPjwm4' +
  1522.         'o/nFgebIFPW3T60s+8Ex5ZPnZG7cIJv/HHnfceezhcz5xA87lx4ix' +
  1523.         'L5flgb/kmsY5oAMT2Ico54OcJCa9Qyepg+tEZItOdAH5qJSGBdxYG' +
  1524.         '+MwfgU8oJbzKRvQeROoFSjF4XRMn+RpXGV/FUpjlrobxNQEfzR8Ch' +
  1525.         'Y4EfhocjCdUBzi9cYW/KTgRfinBSZ1P7gqgz2Ls1EsYf1tRi+zOg/' +
  1526.         'FrXw6cvDp4+sbEja8mby43F7t1NN45OCxSqkSV3Bo+38jnyxkMfll' +
  1527.         'Z2c6dDYPT8bmUC+pqkZJXZJZTAPBdGlbUKqyzCZrbPIMXbg+cv8MP' +
  1528.         'DfJkKk7x1irGXmllqaxuwD99YeTyIgNBVwh8OLM1/jBRYZMH++6at' +
  1529.         'cLyceDjWpUGz3/q7DjJrfa+XxNNUTkQsQdReBGNh5AjIJCYhGwu8T' +
  1530.         'VRYuHyVG7i71LAJ5am5NIR8HGZCxG5U7RuWqSTKtTuY0qLKpUVEvP' +
  1531.         'aQjowfyAq9KZ9GoC/2p8z+I2spIUCaY/mS1leWLouqqTJMo+3BwQF' +
  1532.         'PtaVhblclj8F2DBZ1ZfYOjza0NHFEYqqORxAex2Xq2Aw2EVFPAZ7c' +
  1533.         'j5rR6S50aKg2lR0WzXNqWEC4De4qjrrTWNXEvde7MAMn1HEq9gpY+' +
  1534.         '4WqLSW6Wttd3/XOfvD2M2vk7+CVcbwFxIVG12BMRBv5+9gqnlw1mh' +
  1535.         'ifPRqoDnn11b+moGPzcOPLqcIQ0ZoqnyYUQfsk5SWJ44vkvhsqvf0' +
  1536.         '3fD+6/bmw+/URFKUNoBrROFB1C5CNp9AZhEQNoHEIpA5Cfc+lZPyI' +
  1537.         '/CZScDfQCpLyaAiChuicCNC1waVY0ew29YcLxfqdlF4xljPGpa1BT' +
  1538.         'cSpB9MD4LNE4iSBN6Z8F8YxnxksWBnuA5dEnNg3qqF0e9HBqgfWQf' +
  1539.         '4G0e9blDgUiSEHjs4a9iWX4lgHhWYKR3OlIFblvLwlzrN1V6u+HwC' +
  1540.         'liSYwBSLy8Tf0B3g82gl1Zia/bq+o9vmD/J4fAOPZ+DzlUymoLycU' +
  1541.         '1Tkr2//6TofPhkwcb0GjlVJ9+jYUZuoI1jdV6sZnjk+NfuNx+u0ao' +
  1542.         'RqEVVI27NbbODVjQRPfxo6+3nTR/cOXL+HPdzPB34cw96kVPPgm4W' +
  1543.         'J8dGnJMxUAzcuetFWUv4agL8wDz/8XuDNCe9A2IMGagUrjyYOwsIf' +
  1544.         'Hz73bKlz5npg4LKn6/TmBPCtiNCNKD2I0knInAN+wreHAsBnPwx82' +
  1545.         'kPAJ5eTRGak2oXwXRsU9i2+toFLf/T2nmUonE3TF9ZQMRSS6AtsQx' +
  1546.         'LCDdyiEGtoKBudDw53RtEKwALuWyxtIFrRBjI2GA5+AhBu4NAwqxV' +
  1547.         '6XLRNvZI6xOejUtiDLvqrhIKlraq3IqnhABdFWtS9X+Y0V3u5oOCT' +
  1548.         'ZSlPftGNsEmSdDUeGR8YvfKZrzYmrlbzGAw1k1nNZEkoNF5JmYhKH' +
  1549.         '8G0HEcvf+q3iADzAe29ek6jW9oZqh5q0Pf0toQbGywakV0v0VbRK8' +
  1550.         's/LKDS36LLK8N9+uHT1omLA1ceStH8JICflIgSfRdG42Fkfqmw/xM' +
  1551.         'C/sI8/LBTBj7Zsc0HNKka+gL9yvDYzjOnpqkL2uCwzNa2SechKO2I' +
  1552.         'wIUo3YjMTsjgYYDPhn/nCb8A+EjZBmIpiaMHTQOE7yQoHK/aYy3Hv' +
  1553.         '66buG1tPtI4fna1tULde3BbooEL7A7Y0TvgrkNfw3gyuGMBjmDX4T' +
  1554.         'LdmuhPbGFsBJaDBljQNizYH5QMObl8HaDA/oBvqNeNalEfHi6ElPM' +
  1555.         'zxiOhXveihSx1mqu9XFALt6CCPRFJkEG7GhfWYXk/f+TSHZ3VVkKh' +
  1556.         'CSoocjpVVUk3iZl6Ec1qUmN3Aw2BsEcTsfBDZn7AyG0LKPtqtb1Rj' +
  1557.         'cco0su5pmqBRS0UMvaxy7bL2QVVGq3Y26huGR38KDlp2y8JfLgRAn' +
  1558.         '+pZtdjBz6E+cI8/PB+BrcrujP6WbhPkoeP61nU0IVPIkPHdcGOfLW' +
  1559.         'DqHQkgK9yIxI7IX1uBfNk4MNhOYyHgU9NAD+lhFShTvTbCl1EhSur' +
  1560.         'JhieutsU/9zWdjy6f9WpMtH4MFydM2d+bTg0chLHhItRhkC0xjGe5' +
  1561.         'DLsQj8CQZQzH51A/U90FAooE97hsGGbM78gxfJ1iM8jDhYI/sLs4v' +
  1562.         'BfLOXQ1UVh7tmF69ytUNg+3EXd+6VOc1WXK+lYWDigz0G0ZGwF4LM' +
  1563.         'Pfd6h7uJSjz9UfScvl3O4DGqZll9hkFQ4VPSAqdKhprscmqQ9IzF/' +
  1564.         '0FTpN3Lr7KLuiKY7rLZqeFI+XSVm6WVcjYTFKv2QT90lou9pHJ5c6' +
  1565.         'nC/JPDRdQ/R72jN5cdXBnyYVzm+RB5+uBH94uANj95LaLZnPIb/zO' +
  1566.         'vOg23eOoJ8zsNXe0hiGyGNiwE+a475rDnUMxYAf87DTykm7pMhhgT' +
  1567.         'wSTI3oncrG6dsjYcllsbYgVUDH/IT3pmQElgm7C7+R5gGHAsoGFvA' +
  1568.         'Dl1At8POKRRZ4N7G+pnozuBwWKcd3Y6mOke3aOfXoV6mDvH5iBDKN' +
  1569.         '5hvFntc8GNJcv7hc2EN3yC25qCQhRGVpU4T/RWv8HIlXWFQGmwaoA' +
  1570.         'F59FmA9QNhrAkUDs4Xoh58ClvhZRo1jWMzJRS6VkJ1qGlmWYVdRbd' +
  1571.         'X02vkFLc9GfhNgyNhMzdo4voMnHqnOGIVizgVcgFdIWQA5iv4FE7p' +
  1572.         'diF1F5e6d/+F20sdblXARzPPw4z36Eb0W1iYah77LnolwXbtYkPlV' +
  1573.         '15+UrFJH0cvO7p81aJ5+OFGbAWgSwO+XNhRhU2zj8fwn11Nzn7zrj' +
  1574.         'NKhMDXeEhCa2JYzmqBv02MmH2IxIvIfASjl+tti/YdGrqw6vE5SS4' +
  1575.         'iRCLWXQS3Mby90ZAL2Af7Y1noOqLuOiwHG9zAhmXQQ8PbHmUaLATb' +
  1576.         'm/DIOqDhdLQVgBX08JOGISX5zKsSlsmLdjSjOyw8zVVdLojxhZEZ9' +
  1577.         'DmFloa9GuiZLno1ln/GTc1+0zZ90qxk1CgoRmmFrZpmllOMknKXQ5' +
  1578.         'e059DZGw4V061NZNeptQnNSraAXS7hUsWcCoWQyaPulbKLrSphdbV' +
  1579.         '0mcP98jNtYTf6uswiXxhHWlgNsMNSMRw8tvOM6sDNexutIUTpQkRe' +
  1580.         'xOAnCW0EcuV8JCcxGjPBfJhFYRHgz4V0CCWEzTzE6EGkHsB8osHrn' +
  1581.         'l516B4KEgN6y+hQfIhBNLsCbGwCxsK+xaSbFpYAo0DYLTnzkW2UV9' +
  1582.         'BBha/R7Wi8BR0mBAtBYYWN8CxVBxRxYHtSNyUsH3wE+wRJKnwNV2x' +
  1583.         '5eC5zmqu6XHCHhcEfsAXujH4WPTT67IMtnaQPrnBIUl1rg1FaDoBv' +
  1584.         'VdLAC62wxG5N9vCnb39jNynM0nLwUAgYK+V8Cp9ZxqOXcmnFMj7Fp' +
  1585.         'pFMDw72Nzd4YsutZo6nVsD13OvAja/yLAGS3JkYpWPwkXgWAgmG7u' +
  1586.         'ewD4BPRoEP9RDwU+aAn/IaBzH5kOoAIg2STUHlgbUkTEOXaYONUKw' +
  1587.         'PDLbAjfH55XiWGiICqYIlCVoO/Bc7UgUbncC6tfGHveL4AuAvUwd4' +
  1588.         'FmjHJWxZw2Y7ynN0DAx6RjkPr5S3QmEbGsssNr3Maa7qcsUxIQVYA' +
  1589.         'torgb1K2J5rWD7MhgT/Ba9BUeDjK++eHvvojtcstFbT7Gq6QVKuFh' +
  1590.         'TbrNqFuwViETW/yCAusyhoPHoxo2wvtWQPl17aGPQeHhk5Oj4x1N7' +
  1591.         'aET+xzIFw4ON67tV/5YvMmkBiBH6Vj1wTInGtc8DnLAA+bTHg0xLA' +
  1592.         'Jxan5LMSnbYqP1IVQAwBQd/0GmqCBhMWCo4fgFSB8/eXmr0OeYWNj' +
  1593.         'WAHTKJ9rzD6kTRfFesho3uCw4EyUUf9kXWAZwHHxi91pkmxbpSTK0' +
  1594.         '9NAwU7Q2GHLzydRR8Zy5zmqi5XHNMiwH48Zz6GA08E++iB1+3nL5n' +
  1595.         'U2OBLZEJWUnXiMrUAePiLAL95eFRE3y1j7zPIGBatupJeXlaw067X' +
  1596.         'djcmcnWOdHUNtXcMn72xzFFw4ON67tV18ZN0ox+RJ4CP1ARJrBoCE' +
  1597.         'Qt8xhzzGXOQp80Dnz4/Jn8e+DmMRDodXZgsi5DNEXrXIolKHqmkGC' +
  1598.         '/ap4md+INN2LJoIfBTWF8aLST+8DMFHVgCu64WonLRMDu6YPRSdUB' +
  1599.         '7ypYJzKIDIGEJ8EBwnsvKLxeWxgtjLEldgUud5movFxbpaHgfbSDA' +
  1600.         'd+HwJ7RZAQ7x84EfizqAh2+SVWjFZQpuodNlWbhP37HzAtpuMWuPu' +
  1601.         'oruMtdYtFqVpMqu1wcdjqZQqKOubqCnb/r2kln34zjwcb0A6rjwca' +
  1602.         'rJjyh8iWiMLTIHfPaywKctAH5JShYd0XkTq+JKQ4ghWNg0uNpqYDs' +
  1603.         'TAcogXrBuMBSMfi8z5ScHM54kPo9WdAgZCsllAiBYwdHp8C8a6Fi+' +
  1604.         'DhB6aDwHRS46nhPWCo2lgyqhT5YVghEcd9GH0aJapszVXi50fzglI' +
  1605.         'Wc+Mo8dm4TuAJ9fsAIwnRraOwl7Kld+b0xc+9yhqzRJE7RX8UtklQ' +
  1606.         'XB+sXXzfTVRhWVe+U8ik6h1EilqqoqrUzmMBoDdntDY/P45U+WPxA' +
  1607.         'OfFzPvRrPziLmAKIMkKVBBACfbp4HPkyhgwKfuiTwSSUp6dTEGH59' +
  1608.         'iCxJAH9HrHu11Vg0ASM2mAAFA+9LhT7QySxYFGN3RvsQV5t+E6IPH' +
  1609.         'bi4TB1QHxjsBrVoW2DRWU4r7MRcOJkLUhpq4btYJv+cy4WdnqBdLC' +
  1610.         'UO+Cx6UugcUhgTgy0O8AJotZPL+g4d04tLVYISeWWhgL6bR9nZPLx' +
  1611.         '4E3Lixld6tVghYilEIgD8Kh5PLhQC5vujjVOzyZlzFgoHPq7nXnWn' +
  1612.         'biSiMXIfIvGTLSESxTAH/MqHgU9/GPiMZOCnURC5E6CeXBVAtP6t4' +
  1613.         'bbVVgOdl4T1/RY+AmB2mmWiJdgECIu+C6i1hoFwcNIKnGm7fB2ws5' +
  1614.         'xg5+Yyx0JzYcEu4JW0O5JGzi9VPpoUC059XerxtPLLBQQrufyzEn0' +
  1615.         'gwn+xYzjBRVvbVJ1QLCRh7ali7xMzdwloOznlO/qPX1r8eh48LdTo' +
  1616.         'BGqNQCqVi8VsOl2rM7ZPHFvhgVYFfO18tnl4bdEk9it/nMHkBnCaB' +
  1617.         'ixnmesDnYc1XD00mreGz+J6/lR78jpiDiKKuQE2tjCpAgt8NkD9HP' +
  1618.         'OxwIfjM9lY4G9AKkhiK2IMIFV+RON/x980tcqcaXDEb5KLC+GWlDF' +
  1619.         'mvS5U0mzf5c8FjkJZOd+wWQqXF7anY4WdvKBwNEr2cwSqt9puZXho' +
  1620.         'ePQ1jzZ3euwC6g4xY5ehmivjlghZRRM3Fsu5feeByhOoVCglRlO11' +
  1621.         'abUGwRSma9rFUsqrwr46LBh7MiulX/jaB4b9Nqig50Wr9tc1/zaLi' +
  1622.         'C8Z9b8veN6nuQ+fDHh4ct8iQVQagKkEh2BwEkCfspC4KfCxVDmgI+' +
  1623.         'UbCCVkwQWxBRMjNJR+9/w1I+voAW9UIvOEl33S/SLaSVIhMEl8BN+' +
  1624.         'cWa+TN74ymxU1tWFpk+cauvtcXmd8cXcifEbX9HlCmcgFGlo8kZqb' +
  1625.         'f6A1mYXWxwrP9BqQzowxgV7cxZOx3jkB5PcG9iYWuojsGm5tguIAx' +
  1626.         '8XKuehC4gpgMiBh+9HrCFSMQA+e472vLkUOnTCj2EcLPCZKPATE6+' +
  1627.         'Q0hRCOYljSrQUgIdf7c93RA8su6oFrp+jp2FRgF9SI+dvjR45uj9+' +
  1628.         'aHBiqmv4QFN3X/f04lEaX88IAH6spc0ZDJldHoPDRZfKV36gNcTw0' +
  1629.         'Uwg2LYPGqmDIbWFTsvCKeQ/nun8Ex9+FhSOZrxBwzIw/xIMnWET2i' +
  1630.         'Slr4d7wpARPBzcuObQEK7nQ46p0ySDL7FeFfDwLQFSoWYO+Lw5cQg' +
  1631.         '/Eh4LfMZiwC8jMQxkS4gsCSDVgWxbePDql0+65k+Dpm4/aJz+WB8d' +
  1632.         'XfeaPK+avvNgYOrQ1NETjZ1dsbb2xs5uRyAYbGxedJ0ssHOwrRu49' +
  1633.         'zqLVWO2KI2mEgarZfTgCo+1BuCjuYmSgl058xOQF4Yl44sNP8MK7I' +
  1634.         'z9LHaOQ3y+qx2mRcqZz1m6MH093A0dRZyDmUm35tAQrudA6pFjiZC' +
  1635.         'OdE7WIKlAjQX+/GhMagpCne+uneuxTQJ+ShmxXINYgomlzJX+tJpA' +
  1636.         '56VHDIF71jV957ueU99UmSby87ix+Jl1r8/zqunb3/aOT/WPTbT29' +
  1637.         'ocbm2w+v83rdwbD/aeuLrr/1OzXRn9IbTQptVpKZSVfJtfV2AJtfS' +
  1638.         's51tpG6aDTKLAROezQ35wFqaSTgA+ddi1mUXLouqOJ6+MLgJ+UexP' +
  1639.         'NZoa+gJ+F5WNDOj8nNITrOZBmZIaoT+TASXj41iBxHwp8/sPAp2DS' +
  1640.         '6UDgMx8CflF1AvjSQKL/1+RvPDO77qf25NR2+q4pdv79D2wZZArbG' +
  1641.         'npCR8EO439hBYDfOrg/1NDY2NFlcjhVRpOmxmK0OzoPL5mvafLmPb' +
  1642.         'FGT2Gz95SVAz9fb7Vra6yx3v2PPNYagI/NJJm0ZAAW+Enjr7CZJ6F' +
  1643.         'g1AVtJsChO3Bq26qAj6avx0Iej+HjQqXbf5igcyNVgPmeBPD3qhOd' +
  1644.         'tmn8hBJUTwI+88elr5KBX07cq0Ascx0BMj9oMoSPL+6APROavP1gY' +
  1645.         'olO596LX0aHv6XSB3JzeZlZ1FffZXdfuvVzjrXoWoRo5BY7XevF1N' +
  1646.         'TsN9HWdovL4/AHtDUWoUzGEQqVNbblx9X3n7ryQUEhgycwO91yrd7' +
  1647.         'kcDkC4f6Tl5c/1mqBjw6kXBjYSZqtlhQ2h6v8YJ8C6KIk8fkpzDBu' +
  1648.         'v0LgL0xfDwuBNw8ew8eFit8zgeg8PwLfEiTuUS0A/hztEerSwC9LA' +
  1649.         'H+XDKnx/xgaMvpch9ayuOFTouZjv97Dnxi++gW6ZfrOg44Tf2Pv/J' +
  1650.         'NS+9WWLab0LGruRm5uDouq866hfPAzhKwAfxeOt4E/Upi9dl0S5z5' +
  1651.         'Vmrhxjy2qorEr5WoNXyIpLC0rY7CHL9555Afb4idlaq0x0SgwW71+' +
  1652.         's9Ojc3qnHlNqBUhjOCsc/otOnUZXJAGYRZfCXPjUhnEb2McKdoOr5' +
  1653.         '2AzlEInH2IcjcOjOSsWZtdPSl8PR43CvBboZ+N4DP+Fl6R3kqh1IW' +
  1654.         'IXUuUGxCburn4Y+FQM8BnzK9uy5sfhU4F7nwA+oZy4XZIAPhzeafA' +
  1655.         'Zxle99MnTI9fA3+dsnt3Bbdt/7d7gRw8a43821f4zlfvbVzcfJmW4' +
  1656.         'Aeo3vibO38TPyWGoYz1rKB+b+Xkh0uHPH06bfcHd+3iiW/wbpbKqq' +
  1657.         'Li4Uiguo9K2bv+w7eBKe0xiA6MiudLi8Vl9AalaS2Wxu48v5+Q/xp' +
  1658.         'm2aL/q8qNnYe/qwpmA6JZVTRJMSl+PprPA3kV4DP8Fl7R3gqABwHc' +
  1659.         'jEjdiCRB3KueAL0joR+BTUOATfqI9BD4lEc9BylMIFYT3RYk1UOaB' +
  1660.         'rxg+su6ntmbZOv9j7vt3SRmxLaW3txTef/ODKxvfmiBm1BIzY2m59' +
  1661.         'fmvSvNfFeRurMzOoQdHVjqLEys07VhSXx42SQ5MWS/S/gU6aUnBfJ' +
  1662.         'jPB/vrhr7fCpMzPFuKBmu49KLC0ortu3ZTmYyVf3Dy1tdmb8DuD8q' +
  1663.         '1unI6s5hW0TB2aJn9Hzvw1/3S4cKVJEbrMAkAXwQ8fCcgNnGHIpEt' +
  1664.         'Mxn4FXMvGHOpklHgMx4C/hZhIoav8Cf6bY1+Yf9aMiQ/JdI3/Wv2O' +
  1665.         '1eQ7EYks56YESFmRpGs+tScptTc1tTc5rxNiryNlTl5zM1bhSNX1j' +
  1666.         'L6FE22nJSQGbtaCnhdU/sHNDFOEskXZgSCLf2Vr4r7DLl5TQ0+vaR' +
  1667.         '8x66dm995R6NXreqz/acuq2ssuwuLdpcWCrUyf+tyWZ4eF/DRcA0e' +
  1668.         'kcP1tInTNkxQO+eA70qEdD6UJwMfgcCnzSXVYRN+pD0LA/yKBPA38' +
  1669.         'xMevsKXmHtl8HN7Jtb91NamsRs/7BH+W/qrE6m5HUDknBag1FygNn' +
  1670.         'JuZ9ZGZ/6rvNyN7Owcmj42sIbysWmN0S4/7EqCOfPZlbF57LEjOmB' +
  1671.         'in6SNSfNrFgqUhn1APEMs6uyqs6toFUXb9+7c4g+tutPEFgrTBRyu' +
  1672.         'TKS3WN2R2slbS04JxJOn4XruxW4dJGjciMiNSOaAv20h8CsWAJ/1I' +
  1673.         '/CReeATKYQ3eEhNkKyey5BsDNI6Dqz7qa1NNR3/kr/te3J2S2pe9x' +
  1674.         'zz2+bUTs5pz8gLzAVzODk59PeLZWM3762hfJTtcBkRNGscNskYujM' +
  1675.         'Ee1J2/UXHAcJJnTkPrycLBbO9oQ0H8MRZGDFGh5esNlvOk9botc97' +
  1676.         'B+t8OqaAtkteWVDfvbpErP2nrrqCYYPNJlWqnP6ALxrrO/HRUjvjw' +
  1677.         'Mf13KukrpukdiWAL52L4f8EfP4KgF/xE/A3chCDD1EFEul0dP7S5l' +
  1678.         'WnxH8a1Hvhhy20f0vbOELObk3N7ZwHfjs5tys9N5S3SQhon53LePW' +
  1679.         'tyraZK2s7BIp3dBgGVovmDlrojS9c1hDNorlwzA/YOemZgl2cHdQB' +
  1680.         '7AD+gj3RCNLTg/3Ww8eGxlsiZo5WVOpUMwdPPWJoZZL6jl3wRWpND' +
  1681.         'me0vS3c0BiIxhoGl1ydBwc+rudetJaBFI0HEfsQmTcxLPMD2cPApy' +
  1682.         '0NfPo88CkpJCohl4WYAmRdOJESXxfYU9+77qe2WnWcv79X8S/Zm2+' +
  1683.         'Ss5vnUN8197eTnNOWkefPf7UqEbrPZ+dtZLk7VjpbP0lJqw0mhXEW' +
  1684.         'nWYF8ygmDaWDAMd6+Giy+qRC4DKIC5Pkw3YE+piA+erR/uKnJGfd6' +
  1685.         'NUv2k/He3oD0Rqu31jpsyunlg7ILKr9F257Q9G6vq7Lf/7m0MdXBw' +
  1686.         '8fbOwfWWpnHPi4nnuV1XenqICH70FknoSHvxUAv3IunrMQ+CwCmTM' +
  1687.         'P/LllzZHyBPDJCeCnZNIRjRtRBxCRj6T2bgutOiX++qpu5q+3sv73' +
  1688.         'rDcukrNic1595xzwwd/uzPxA3iZB7kZ2TjZr8xZhcGgtI3OgsNnsU' +
  1689.         'S0PWHSJc+xGCHDsp9CuAexu6FBt+BcUhUaQ4Cgg9AGETVyPDi9fd/' +
  1690.         'UeOxvyKiM13Fq70Kdn1/esxYtoHYt/9P292b//zeXffnPj998PnVt' +
  1691.         'ySuBqx+FDwScsXH1g+eUPkgSHWqH58Je5B2AQb7Wr9vx4Dedy8iz6' +
  1692.         'WRjKQxM7wCzW2H+foY4eXCvUjkg7SedPLFyi9JNtIeL70nng8+bSI' +
  1693.         '9PmO23piwG/7EfgI9SUdBpS7STrgog4QFL53vU3Td7+dt3PbinJw5' +
  1694.         'fs/Vem57Lsjs9+q+78+vU9f87YNE3OrkvNaU049jnt5NxEDD8r35H' +
  1695.         '/mjA3n5OTxdzNMnSduflzjotdqBe7ONQyH1m4Mnj84YUUoVB0Y3eD' +
  1696.         'SzHmzK9FCMCS5OqjK3lhY0pPz8+8/cCYTUm1qxhuHcukZI1e+WwNh' +
  1697.         'QyeuXj3H39/8qu78Y8vX/jtV4c+/WKpPVfl4aNPWHS80/ILGWMFV5' +
  1698.         'NB50zF5z2BpfaHD+6kQbwr11JjRNHVx5LunIU3Eq7nQ4B4u8OtBJU' +
  1699.         'HuOWJdcxr/MQtkoeBT38I+KlY4NPmgQ9Tq1FIUiui9SMiL6L0bHRE' +
  1700.         'ntoMyd1nf531xlkkzV+oHnRN3N4j+nPma+eRrEZydsMc7TvJOV1pu' +
  1701.         'Y2Z+a6cfEleHiMnh/7m+3yhr3Hs1lp6abFCuRp/eInwZZw3SGPsjx' +
  1702.         '2dd4n1wyExYEcwFLpAYdLq8NiDwgA+yvynJJKDqn1s2iStMEor9OJ' +
  1703.         'Sf0PjGkqYvHXv7NdfXv/9X898fHP0xtnj3989du+T6TuLuyKrDenA' +
  1704.         'rnA0m83KH5Twg0lf+vLP/Z8z7Xop4KN3Cw78F0RTt7/ZFmwhaObGU' +
  1705.         'ir9iZDOuysBPjMFLmsO8ypA4JMqSGIL2QA8fFCUL8safDozJI/eeF' +
  1706.         'Ag/zYtb5ic3UzOaE7Pm0zN6USyahP/5gDHvjMtN5aVX5O7kZ+bS8v' +
  1707.         'OKfuwQqVr6h+88hiSf6Ij7VF6o6uBwwDLop9a2JmLpsZKWt496XeN' +
  1708.         'jswBJSd12qKHA0eHruYaVrN60ho8P2vy2BTsfVphiZS9zxqNrmRd2' +
  1709.         'iSNXJk9//1fAcU/uTo6e/7wvVszX82OXLm76M6rBT765E1avTEpZX' +
  1710.         '1SNzq6FnzSVAiU53A5FZjxEhaLJtiPzy+tCMoE72KH+sPDgS1osbB' +
  1711.         'Nt/DGgAIloNNAlgc+zKsPdl6YnB+7qiP6GtYc3pP4ZISnSuO3vn7T' +
  1712.         'FSOpPQm3HHj4Zh/x7SoCaSngs5cDPqGcxDMhhkCi/1fhTTN5uy99u' +
  1713.         'u4nmKT+C78plv4pLbeHnN04N8C+FUm8SAywT82pz8jzZW/U5Oaxc3' +
  1714.         'LKN73JpGk8ocljU48vMAV/oeiqFnFMkqscTFIUrNBATdI4fLgRuz+' +
  1715.         'adwXdBxSI9g7AXLuwZxblDywHrre+7l/NQtnq6iVmhVTKlHIKJQqu' +
  1716.         'Iegdv/HVaguZ/vje+Ozlw5/dGLp6YvDaibFPLvZfOT5w4dqiO6+h0' +
  1717.         'xZ+QTB9fdJGmFoBdo4sfHcZFxrQFfrecD1iuDFnQWJMGFOC3y8sEx' +
  1718.         'wFZs6Bu8HPwnDQQuBjp2+j9xiaYBmtHloybDAmZXLDpneDr+FDBx4' +
  1719.         'anjue8fXp0dj1rzZaw0S1d47SPsTsJ24WJ4CfKphf4pCxBPDnFj1M' +
  1720.         'DNFBgV9G4hjJprlFr0BRJl/T2acoQ/LU7e+svV+/seNsanbrHOoTc' +
  1721.         'ZvUnJb03NqMPEd2vjonn5ebR33tLVZhpVkV6e46e+Ox1wH+GJMisb' +
  1722.         'DnLgcz3wr7LgoHrJcIf1lwaXLYswandkJXE6ZlQ/26Zfx2sA8cwPN' +
  1723.         '0/iQb9sflOq3RY6/x2XT2msYVr2OSpMnb98ZuXR2ZPbP/9pnhW6eb' +
  1724.         'T0yM3Vi87bkG4KOtLSxRsQktsa+TvlP4L+rPo32+0DEGJWMXLkkCP' +
  1725.         'szAg5aMZs5Hl8rFZuNcFPjY6N8yHj42rz7aOF0G+EmT+57OW+uF1d' +
  1726.         'Clz9L1XpLKiwiBh+9FjF7imwD43LkhOtw5vDPngE+ZW8p8bnHzH5M' +
  1727.         'qYIFPSwA/pYzE0CMQ+DIfyehtOPX4mbkGTdz8Jjrx+d7KM+TMRiSr' +
  1728.         'AdA+LbcpPdeblWfMya/KzWfm5JVtfo/HkPvsnRN95x6dhnHNgg38h' +
  1729.         'eF6sAUNsyc9DlA4gH0gB5JG78OfLerzo12x8He6fDcizL2z8mwMv7' +
  1730.         'A6D51WG80coVBns6iNpnDnWuY1Q03f+XZ09sb+65eHPro+cWvJZsI' +
  1731.         'aQjowdA/JjFJ9eeDH5/tlUBgmNdlgSiV0Jh3cZ3ngoyE+NBVbzrIJ' +
  1732.         '+eFcPPTfZYC/aB2WAf6Ls9Tys6juk7OIxoVUexChJxHSAcB/YwHw5' +
  1733.         '7IrYIDP+hH4iQfBXCIdZC79QkoZkaJJLI9blUihRjT6QkdXN0dmVR' +
  1734.         'q7da/l4u2OU4u3zYF6zt6taTtEUbS+ttWaQpYT0wxpOf7M3JrsbFl' +
  1735.         'uDi83l7rxDdquMo3E0hzef2LkypIjNx6XYBgWG1HBCjtoBxtgQTte' +
  1736.         'Yf5MmHEXS3tsExttmCflXsAupIIm2AdbwE8ePkHW/T5cqOnb3wab2' +
  1737.         'mpcHpFMpjGZzU6Xr755+gmP+1ot8NGO2qTADhbF8PtKamfB9hf2ym' +
  1738.         'MZCztW4kvAdlHgQx8AjbHDOXTwUZ4Ef7Tm2CotA3zs8KGk50v8UcD' +
  1739.         'HY/hPm1qPXCWonEi1ew74bkTvIb4umgM+L8H2BPBZDwGfDLfMrXK7' +
  1740.         'EPhlasQ8B3ypl6T3eg8/qZT4g9c/7bx9v/7Mx76JGbhl+s6Dzos3R' +
  1741.         'q59GRs7L7b3f1DmTcvTEFK1xDQtOVORliPMyKHlbqS+vUe0T2qoCj' +
  1742.         'd5x450n70Fh2X+YkJzlS98Czp1KPOxrQDwy0UH0qChG9gWAJ+Cq6X' +
  1743.         'AHcAPHB0HjsYZ4IIXMLKa1NwGW57a7JoDZ24E6urtHp9Cp3dHo65g' +
  1744.         'xB2KDCyxrOHj0sqBD4gKrh66hjgafoE57SGKYXgN7rawBNiDDx0Ay' +
  1745.         'H+0cQfn2aHtPhijy5nv5UGz5aOJ8dEKwC4b7IMGvIvO48DeeGg8B9' +
  1746.         '4/aMMQjsNH/4U3GNgZFos2GNF+BBhBwoaVsE8xPIb/tKl+8iJB5UA' +
  1747.         'ULoTvQuQuROsivipcHvgpPwGf+hDwN5QSi5SJ/GlVXkTiJeg9nkPn' +
  1748.         'nkSdO6/cHPruD63Xvo6euBU7kXimtJ76yDYw6Z0+6z300evbjS9vE' +
  1749.         'BLTJEiGIC2TlZlVkZVdkpVdnJlVlJFdaO1cz9XG4bynpd7F5kaGuI' +
  1750.         'A/LvAbhJ4Syhb4A8QGBOCPMSlbMloU9kGAPRwME63jBVlGXYdOOX0' +
  1751.         'BezAwcev84dmr3nCtNxJtXTa58c/X45ppi/recIHaZfaEc98WDuOB' +
  1752.         'Wx6ZTn/hcbGHg4+e+GKZUVcL4YWVBCU8MuEqHsN/2hQeOZOisiNyJ' +
  1753.         'yKYA77GRdwkJCCPBD4tGfik8pSXion7FEhNILE8bpWXqPeaxk88iT' +
  1754.         'oPXL4bPnap+5Pf1F/8LHz8in182tAz7hw75Tt4semjz+ovfJGdTyM' +
  1755.         'Rd+S9XvpBcdXeSm2puIap8ghMEZmj0d584DGOulmtVnLzw6A6Gpz5' +
  1756.         'mYcDPF+GOU9zhuTugyc7xg8c//rOxd/du/bb73qmJl2B0NPj4S+vR' +
  1757.         'eP2uHCtuzz9xzcA4MscCN+JyJyI2kHIR4HPmQf+XPTmJ+Azk4GfUp' +
  1758.         'FCriBuFyHVTsTgheuhE/Q+3YGZJ1TtA9e+tHSPAea33fwGuPojX/9' +
  1759.         'l5P7vvAfPuyZOh45eNveMRadPDly8O7XE/JqnXOg61E8zkJ+0Bs9c' +
  1760.         'vfbbB3f//nfX//jd7T/9+thnt4ItHU/6oI8L+DAa83QOdsX1IsvUf' +
  1761.         'jABfOkc8IGHr3YS8gRzwOf+CPwf0+lggc/4CfgpxSnEMsI7ApK4Br' +
  1762.         'EGydYwYvQlFjGv8gPgi/qnHnuFu05fk7jCTJll89t76HJb85V7nbP' +
  1763.         'f11/4dPjeb9tvP5BG2qsCzZ0Xn6LhoGsT3s81eO7S7b/7zfXffzfz' +
  1764.         '+Y1T339y4Tdftc+sPYXRCoUnT8P1fEs2epKgcSBS5xzwnUi1nZDJJ' +
  1765.         'fyKnUiYibAfBj79J+AjtBQioH05YROTxNYhZj9iDZMddWRXQyJDst' +
  1766.         'xPlgQIej+3Z8k8tKtVz7mbjt5RsbOWLrIXl1YXlSjLqfo339jFVJg' +
  1767.         'tI/HIqVue6fPR07fDJ2/6x4+OXHsaZ/jiWpUmb9y49ae/ufDgy6kb' +
  1768.         'F48+uHXp9/eHP3pSYwBQ4cDH9XzLdOh8itqOSOY9fIOHLA+SikzEt' +
  1769.         '2SELC6ByCIQGAm2k9DkaewUEj1lQ3lKDotUrkaMXrI9QnbWp/paUq' +
  1770.         'M9pEhPYg0URRAAf4PGW9bU9zOrN3bzXuzIKVWoaVcBd9++KhrdyuA' +
  1771.         '4KhX+6kCLs3us69R1sE/n2WvG7glAe/fkWaCeK0/d9F5cq9X0nW+P' +
  1772.         'fn7n2h++O/fgi6nbH818fevsD19M372+VA6cxyUc+Lieb6kPXiTpX' +
  1773.         'ImlTwTuOeB7///2zvwriiuL47+MidAmc45zzpyZH7InZuISt8QYR8' +
  1774.         'clcV8hooCAoCAKcYsaiTskGgyNNIUxi4NxN7J1o2RTo0InOQKN4jm' +
  1775.         'T/2du1Ze+PqoXuqq7oWnuOZ/Tp3j16tVGfevWfe/e59h5xLHjMAl4' +
  1776.         '6oadKYs3j5609ql/Lhr1zOxRT80i8X9q1H9GPTP36alrUjK3pm75K' +
  1777.         'HXLPkfJAcf2o6k7Kv623zm/8uu/5pbog/CXFI/dsH371yGnFhqQw2' +
  1778.         'e/X7a5dPaynJlzsubMy589J2/Gooz00o/31Jz7orGfAV9QcTLv+Je' +
  1779.         '7L9zcWe8+2tr+WaOY98Mel+fXb+60nu/4SWu7Xtl0TrvVoP143dl8' +
  1780.         'yeWObzo+e4FXCIVD1LPWP70Mg/G0CIgwZcUx1eSoW5XIB1PxjmycP' +
  1781.         'jI8S+RUEpNx5lpKxiZ9+nIS/DVFKTklY3Z/6thV7thxxLH9IJFauj' +
  1782.         '+1cE9KZsno+XlPv7bm6VfXpKzZmlqwL3VjmWPjwdT8Iyn55f/Y9sW' +
  1783.         'SE+crrt+ubLw9JmfbX1ZseWtrefnVCCztVrLlnizTr8t9r/ioc2nm' +
  1784.         'thmz106bvmry1GWTpy2fu7xg01FnZcNPgS18esmTX1G1te7yweb2Q' +
  1785.         '56OI60dVRYnyBASEJfnTrX7ct3NhirPxcqW71w/X/u88VxVUxyDoI' +
  1786.         'GNbJksxYiN1UIEnPLAdS1YCJVak8ffcvQT8iBFeEjqjqwig4uSnoI' +
  1787.         'vL4/OLiabXE+PnF6ckluasv9k6r5Kx+7jY7ZXOEqOOQoPOwoOOXIP' +
  1788.         'OnIOpGaVpWbud2QdcKyn5SOpORXPl9Z84Lz6eWNf0uCTDb+ML91fq' +
  1789.         'l0Mtbsn8o4/PR01LV4UOt13yq42lXx1fm7G5hnvZ0ydtXr6zLR352' +
  1790.         'Tnf/S5sylkUuKyc9e2f3Ou7ELDgfMNhy80Hxd/zjChtrU9TNRbTcu' +
  1791.         'vR89/5XRfqv7hsrPt8vHv6082egbhqKwKviksmu32oBkGuCS84KvV' +
  1792.         'xioZzCI/Ktsmugh+0pPpPPv0+qKU5YUpS7aMTisau2nX1CNfPbfL9' +
  1793.         'WzRyZT8E6PzjqfkVBCpG445so86sg87sg6l5hxz5J8Yt+fLvNNNVS' +
  1794.         '331NZcrfdr3PdC7YuE3eXuqPP/WXezndSePopdHv3PssstO79t2vT' +
  1795.         'Ft0XVZzdW1qXvPbowr2RzhZ1uX9pRHd4sN/V3Sp31FoQ4UXtD1/na' +
  1796.         'gQRf0+cubztx9fuKa+dONFx0tgT5uIsHVgUfEROmDHUs43D44C2Ah' +
  1797.         'MmQ4vCCz5jSHWjB8g9jmV46HKbHO2J3Ey2bxogiQpZKTKl71K+DaF' +
  1798.         'xDQsJSfqVtxr6KZ9NKRy/ZOipty/jtn7g896vd9z67fuuTi22bzjQ' +
  1799.         'v/vzy9EP1r+498/cPa8cUOccUVU365GzJ2dYaj+WkBDXujlPN3tNt' +
  1800.         '7XU36c/2Mz+0a63eY/V/VDd5ae2Bazd2fNVcUte841v3ngutey/c/' +
  1801.         'PjKj3uuerae+25LzZm9py/QgeGVofnfHX1eIE8HXhkor9PtQ2/dDS' +
  1802.         '/vl3ZX16ZXrmkxf2II8UVR9Vr/L5kExCAntYgQq4KPpJSc1wjyqAo' +
  1803.         '+67BqPEcj+GP75x/GtJWakscyaEY1ZFfgw0OOHTpgJNagathWFfxo' +
  1804.         'XENCglN+5Ye8yvq3d5a/vTf4nKEk75VNd8su/1J2yWaSMVLa6mYvo' +
  1805.         'cuvwem2jjM/dhz79o/PzutPBIlA+ZVfPqz7eec3bfvqb+z9b9v+73' +
  1806.         '4+coW4dejCrYPnb5zy3Ktubq9u0puqcXvpNeFy66pONjwtE6davLr' +
  1807.         'Uk6S3eg09USVFf8sYVmVH/3Ih/hjazlY9vbiTRvA1f9pJyL4pX72a' +
  1808.         'dzqGgq924CI7E6ff14IJvmlHdKjIwoEcTUjBETSxp/TeCrHBL/jEl' +
  1809.         'z/ov9rNvlWnWvSvAA3ufXeflU7icMp9r1q3DO+7PO1BrXT6fKiFnS' +
  1810.         '82fAJjCP4AzpwhxKrgs/Yiw5iqrursh1pMBd+UMYmMc0uCz0lWmVC' +
  1811.         'CLwixBab+gNVchlnoMuzD2lZxywzsAI+khUHYS1CqGn45finu423s' +
  1812.         'YcOHzzHRpJY81dRYZS6SQC2NleDTxwWZ6OzSiVDw8WLCYWOeXLyeN' +
  1813.         'H+CTfHhC7bRhdp9TxsUi84Vur84Eqqb7lQ3Wp5Bb0hIWAs5Emrcd2' +
  1814.         '3MVDg42BB8TFiJGWYhj5wlGN4S0mSMb4ebPWiiY1OzppTF/E4x1Ud' +
  1815.         'TmCKB9kJtYpA/p85GnzK+AnhDVEbCVfQ18+SYqBbozxeEAXE23jrV' +
  1816.         '/Gtt6/1BU6cod+TSHcvDMtna8ML4cDBf5yhf1rHCRuCVFix18KDBq' +
  1817.         'VAHzMNsOmyeBwcgIgzZ77lQfPhChJCpPIRZiAXBHpJaQRCsUuu5Xx' +
  1818.         '06VMpCO8PZcSEMR0TwBcEqpPZi3gvDERF8QbBKddPtkWycj+Rzj+T' +
  1819.         'iJPL1EcEXBKs4G24NOws/aE+i7abif6iJq5nhMcKlE/d/QwRfEKxC' +
  1820.         'D3VVFFOQRDhEfIA6FiXRiPe/a+9gkEBAjx41XnPxHnNY0/Kr6X1a2' +
  1821.         'xeh0K6WRHmpscrUZvhmA9c+yauASArPfWfjrQQZkBMUG4K/8SPfqt' +
  1822.         'xHRCLPCC8IccXZeJse7ZqWuzaUp08c/NH3/Vrg5aDaouievqCroqJ' +
  1823.         'R/TfhvUA8Pz3fMuQXbfja7UmDjUhbhCxp/nlseZWaTi0QS6MoBUFI' +
  1824.         'PhLZ9I0fod7IQ4JVwSeFJ3jsemBu/KAgD4OMcheSHsmKMBIxPr6wj' +
  1825.         'EA8w72jf8EZX1j38Kbj9536cVc7uJ1BNiZAQdgsST3LPmfRgf4jzJ' +
  1826.         'ZfAZx1h0poFU+AxdmMNX++YniK0CZVQPDs0N9NQYgcfyYcTH0iic5' +
  1827.         'GCBB5TRfzu9BwPSFesz43GX6Nhb7Yjb50HEPRPW0j0hbqjRQKcOOo' +
  1828.         '2WzK639HegS10JQSh9PgqKlvOPcC6iDpgXiBhPjxxnOPLfD84/EvP' +
  1829.         'J7w0uPJ43qnT+ydOe3RnFkP31vQs3hJz/KVvtUf+NLWdaev787Y0J' +
  1830.         '2R270+j+hal9udmd+VXdC1fqMOrVqbpddJN2rqZHZ/kNmdkdO9ztg' +
  1831.         'kq6Arp7Arp6grZ0tX3jaiM7e4c+O2zvzSzo0l+u+mHX0UbDf4UF/e' +
  1832.         'TOwkHhTuerB5V2fhbvp9UFDambu1a0NhV0ZOFx3YytW+ZcuJHvpdv' +
  1833.         'sq3co1vzVofjqHvkNZ3p2V0r8nophNZleaj+kuX+xYv7Xn//Z558x' +
  1834.         '4umNszf97D+XPpfB8uXmycb3p32nr9jNbl6MdPC+nrqdC3bKV+Qd5' +
  1835.         '7r2fBgocLF/UsXUp77EnP8FGdrE1d2Zu7sgq6M7K7V6/1LVrSM3f2' +
  1836.         'w1nvPHpn2qOZ03vffVu/ngvm9yxa5KP2V6XpV+aDLP03jQ4vi7bqy' +
  1837.         'iygM9IvReGuzuK9ncX7Hmz9+EHx3gdFH+nnTheEVtFFo7OmHem3wL' +
  1838.         'jm1EiacV50UitW+ej4Fy7Wz4v2NY/OaL6+vHBhz7IV+mXR72OGfjr' +
  1839.         'rcqmFLrp9dFPol6ASQr+/G7rWZusHtpZuKB1VXlf2ps6cLQ/yS/8w' +
  1840.         'bsFv28r0o9q2/0HRng46yMLd+i9Bq+hO5RV3Umsr0zvpTOfM6pkx9' +
  1841.         'dGUcb0TX9b/u+h/zNr/ZDDC/8/b6LSFZY6sNaT5yFrA2g7RxqQkkQ' +
  1842.         's+2fP4cOA61I6ovRA/Bnw0BMEGLs+TfgpMjsZTpKmr+mz7OJj34f+' +
  1843.         'xbadH1vyeHFPCYc3ovSXNh4ZHKPhcJ0wuTUGIFaL2QpzoPxzL8M8r' +
  1844.         'A6sG5xjC/Hvb6LRVDW/S5/L631XBR9JLqy4duIYwnRY2ER++ED9E8' +
  1845.         'IUkJoaCTyKMzllMIwiDH2nqJ077k/7kZMWw8DGkB28BTFyiGTpP9a' +
  1846.         'kCugPQjYu1VIKcluLDF+KHCL6QxMRQ8HkaEcxgy+XqMHtagGjzgml' +
  1847.         'ZM/p51c2RplgtFB++ED9E8IcLkIVo3LxklwYqiSXXAR9DhFvB6aGi' +
  1848.         'ymDQczElbzepHxK5R37AMRR8QUgCbAg+nuIojRA87+qjHb48OXB5O' +
  1849.         'qque50NXjVIQZ+ovcUbZisM1X5rzv/o818dsG0VasGksXSdMVVf5C' +
  1850.         '1gkDltFckESRiXzqNWMAc33eKJ0/7E4HMMa0dlODqojhrfRPXVmNb' +
  1851.         'AUwiPCL4gqFgVfPgneTSyVdmHdtGG3Ag6rUKVJxnVTV7SdpdbV34u' +
  1852.         '1JfDBinARRz93q2qZZgW6H7RzYp8Q3XCVkzPh2XMzYf3OwY6mjYUw' +
  1853.         'ReEGGJV8GGtwW/JQw4iB31VZNrhGWdVD1WeZJDU99n2EYehoTsvaD' +
  1854.         'ldLpj9GA1I1dj4hzltKoR9jkJ13AhvguwBMN3ROEcDcQvYEFa61v9' +
  1855.         'lhBlXMYOe6Wh5L1TB9D+DzxbNeBEE3ncRfEGIIVYFn4eTQfDpUcU4' +
  1856.         'BKgEBiEgAoUWTJ4ZHrFgajNUOY9PBohkZDiTVXLDMfia4hLXDCXkL' +
  1857.         'yx15mvIL8dvopDvDhZoW/bk8OBA1ZHCeh5496kcdxk3F2MINf94Fc' +
  1858.         '14UwQ6ndTXiskXxJKOoYnUmqmLUwRfEGKFVcEnoaCnEo88JAI6TE8' +
  1859.         'xL2jG53mg4CNcBRqFYWzYKlQ5/PlYS7/oMSRpQuMjZCQDG8Ca3yUO' +
  1860.         '8VSVEBGgJJXsWld1lWpCk1W1ZAXGAl1e1bpGGgEqNN1BboFuE14Z8' +
  1861.         'O3gAMJ0LkQi+JoSysr7FcEXhBhiVfDhxsFTyZJOy1RIzzu7Yak8sO' +
  1862.         'NVjS7EJwD+DFWu+bsM2PjnfCYjRO21/tY43wKtvxLChldTclkVfOQ' +
  1863.         'EUPeC1kx+dbUFXkY3Lt2XMDeFd0d1TKcTmG2S/pHUgxfBF4RYYUnw' +
  1864.         '1RBCdRkxKRwqqBmCH7g5Ikp4FT348BuEKsc3Pi2bkhMm2dwTA6YVV' +
  1865.         'f3wWjDBpxKT9wYOeb7suGJhBB8J3tWh4LxrVcZVHz6/C6Dh7AIK78' +
  1866.         'PXFM+S5n+dsZHAB8xvH/XDgb8mIr+2IviCoGJJ8DlJCD2PsLTx+MP' +
  1867.         'PwA8jPaFBZRm+enTzYRl++KDl8AkjLSEGaqJZZJpN2KwjunpH0CHr' +
  1868.         'cj9ZrjF6cms9/YbuqPCwTPSiwlxXBR8GNpWzbQwPT2CnbSjB50agx' +
  1869.         'mgcX23qkbAPn1C/CNTRleF9+Hw61A6OmbshcLSBvcYYio+dWn3Xi+' +
  1870.         'ALgooNwYe2q4+82m+rGY8qVQiqybAkoeRqC4HlMOYZdTiojdFBgwP' +
  1871.         'p9qkWb/hB9UTlld9ONT+p42z0El987w1u6htZpuldEHTtk8LWfhUC' +
  1872.         'XeXxA9b+kF/8oIjgC4JK9JG2GC6iOl5GMk8GXg4pgyb46ENP2GG0I' +
  1873.         'viCoBKl4GNkzsgZMzNcGDSvV/Qx13FFBF8QVKK38DE+ZMhPRBACEc' +
  1874.         'EXBBVJniYkMTERfPqMhYuM4M8ZzGxl7zMqmoRIghAlovlCUhLDGa8' +
  1875.         '4171aaHvkAAYnDPn1EUYs0c8fmvSMf/Hx+JceT3r58ZuvPp76r97p' +
  1876.         'k3pnTHn07xkP587WZ4NdtKhnyVLfshW+5Sv0OXMXL/G9v1Cf/XbOz' +
  1877.         'Icz33r09qRH0yb0Tn69981X9BYmvGi09oKf53X6Zgp+QV878SWdSa' +
  1878.         '/0gsmv9U4Z5+f13qlv9NIBEFMM1OXJ43rffFXfhDandia84G/Z+O1' +
  1879.         'jqK/koBH+f96S4CMEQI0WQdYge49b0LBEQRAEIU5Y9eFjnLCano5X' +
  1880.         '0TKyPWM2Ezh/EG7AC+zGUQOiNePFgbWcNpbzSKtxEIhESOT+cUEQh' +
  1881.         'ITFquDzgDTTTDRIM6IZUckIJESqEI6G40R27BHiXCIIV4fBz2GMWI' +
  1882.         'tsqJxFhOcUGPLrJgiCMOywMUqHlVwVXgShIIs1PPOoxk4bxAyS5qt' +
  1883.         'piDiFkRryzCmPUGiaAD1ho8sFQRASHBuCj4hyNY+EZgg1BJ/NfjUZ' +
  1884.         'IOBE36YKak2OHw8l+IIgCII97I3DR5JYtQRJpTiPnBYg+HDOIwEFT' +
  1885.         '0ygSjqqqZNKBAq++PAFQRBsY0/wMV+DWoLkEpiNl5YxaaOawRuJ7O' +
  1886.         'DzKa//Xa2AdN/wESE5iboWDh/Ohic+fEEQBHvYE3xocmAhErqG2YQ' +
  1887.         'qhApIjzAPhvh2BEEQ7CGpFQRBEEYIIviCIAgjBBF8QRCEEQIEXxAE' +
  1888.         'QRgJ/B+oERdN');
  1889.  
  1890.   SetArrayLength(ATPA, Length(TP));
  1891.   for I := 0 to High(ATPA) do
  1892.   begin
  1893.     ATPA[i] := LoadTextTPA(TP[i], UpChars, H);
  1894.     for B := 0 to High(ATPA[i]) do
  1895.       ATPA[i][B].y := ATPA[i][B].y + i*(H);
  1896.   end;
  1897.   if Length(Colours) = 4 then
  1898.   begin
  1899.     SetArrayLength(Colors, Length(TP));
  1900.     for i := 0 to High(Colors) do
  1901.       Colors[i] := Colours[1];
  1902.   end else
  1903.     Colors := Colours;
  1904.   DrawATPABitmapEx(bmp, ATPA, Colors);
  1905.   Canvas := TCANVAS.Create;
  1906.   Canvas.Handle := SmartGetDebugDC;
  1907.   DrawBitmap(bmp, Canvas, Placement.x, Placement.y);
  1908.   FreeBitmap(bmp);
  1909. end;
  1910.  
  1911. procedure PrintOnSmart2(TP: TStringArray; Placement: TPoint; Colours: TIntegerArray);
  1912. var
  1913.  x, y, bmp, I, B, H: Integer;
  1914.  ATPA: T2DPointArray;
  1915.  Canvas: TCanvas;
  1916.  Colors: TIntegerArray;
  1917. begin
  1918.   GetClientDimensions(x, y);
  1919.   bmp := BitmapFromString(x, y, '');
  1920.   SetArrayLength(ATPA, Length(TP));
  1921.   for I := 0 to High(ATPA) do
  1922.   begin
  1923.     ATPA[i] := LoadTextTPA(TP[i], UpChars, H);
  1924.     for B := 0 to High(ATPA[i]) do
  1925.       ATPA[i][B].y := ATPA[i][B].y + i*(H);
  1926.   end;
  1927.   if Length(Colours) = 4 then
  1928.   begin
  1929.     SetArrayLength(Colors, Length(TP));
  1930.     for i := 0 to High(Colors) do
  1931.       Colors[i] := Colours[0];
  1932.   end else
  1933.     Colors := Colours;
  1934.   DrawATPABitmapEx(bmp, ATPA, Colors);
  1935.   SMART_ClearCanvas;
  1936.   Canvas := TCANVAS.Create;
  1937.   Canvas.Handle := SmartGetDebugDC;
  1938.   DrawBitmap(bmp, Canvas, Placement.x, Placement.y);
  1939.   FreeBitmap(bmp);
  1940. end;
  1941.  
  1942. procedure paintReport;
  1943. var Exp: int64;
  1944. begin
  1945.   Exp := GetXPBarTotal - StartExperience;
  1946.  
  1947.   //PrintOnSmart([''], Point(4, 265), [clRed, clBlack, 1107712, Colour]);     Sin's Paint Co-orindates..
  1948.   PrintOnSmart([''], Point(6, 310), [clRed, clBlack, 1107712, Colour]);
  1949.   Smart_DrawTextMulti(False, Shaddow, [MsToTime(GetTimeRunning, Time_Short)], Point(127, 357), Font, Colour);
  1950.   Smart_DrawTextMulti(False, Shaddow, ['N/A'], Point(127, 373), Font, Colour);
  1951.   Smart_DrawTextMulti(False, Shaddow, [ToStr(Exp)], Point(127, 387), Font, Colour);
  1952.   Smart_DrawTextMulti(False, Shaddow, [ToStr(Round2((Exp * 3600) / (GetTimeRunning / 1000),2))], Point(127, 404), Font, Colour);
  1953.   Smart_DrawTextMulti(False, Shaddow, ['N/A'], Point(127, 420), Font, Colour);
  1954.   Smart_DrawTextMulti(False, Shaddow, [SStatus], Point(127, 433), Font, Colour);
  1955.   Smart_DrawTextMulti(False, Shaddow, [Version], Point(127, 455), VersionChars, Colour);
  1956. end;
  1957.  
  1958. procedure printReport;
  1959. var Exp: integer;
  1960. begin
  1961.   Exp := GetXPBarTotal - StartExperience;
  1962.  
  1963.   ClearDebug;
  1964.   writeln('[--------------------------------------------]');
  1965.   writeln('['  +padr('',17) + '~AZK~ ' + Version + padr('',17) + ']');
  1966.   writeln('[' + padr('',16) + ' ~ By GGzz' + padr('',18) + ']');
  1967.   writeln('[--------------------------------------------]');
  1968.   writeln('[    Running for: ' + Padr(MsToTime(GetTimeRunning, Time_Short), 27) + ']');
  1969.   writeln('[    Experience: ' + Padr(ToStr(Exp),28) + ']');
  1970.   writeln('[    Exp/hour: ' + Padr(ToStr(Round2((Exp * 3600) / (GetTimeRunning / 1000),2)), 30) + ']');
  1971.   writeln('[--------------------------------------------]');
  1972. end;
  1973.  
  1974. Function AtHartwin: Boolean;
  1975. var
  1976.   TPA: TPointArray;
  1977.   ATPA, ATPA2: T2DPointArray;
  1978.   CTS, L, I: Integer;
  1979.   B: TBox;
  1980. begin
  1981.   CTS:= GetColorToleranceSpeed;
  1982.   ColorToleranceSpeed(2);
  1983.   SetColorSpeed2Modifiers(0.02, 1.48);
  1984.   if FindColorsTolerance(TPA, 1358059, MSX1, MSY1, MSX2, MSY2, 7) then
  1985.     if Length(TPA) < 1 then
  1986.     begin
  1987.       ColorToleranceSpeed(CTS);
  1988.       SetColorSpeed2Modifiers(0.02, 0.02);
  1989.       exit;
  1990.     end;
  1991.  
  1992.   ColorToleranceSpeed(CTS);
  1993.   SetColorSpeed2Modifiers(0.02, 0.02);
  1994.   ATPA:= TPAToATPAEx(TPA, 10, 10);
  1995.   if Length(ATPA) < 1 then
  1996.     exit;
  1997.  
  1998.   L := High(ATPA);
  1999.   SetArrayLength(ATPA2, L+1);
  2000.  
  2001.   For I:= 0 To High(ATPA) do
  2002.   begin
  2003.     B:= GetATPABounds(ATPA);
  2004.     With B do
  2005.     begin
  2006.       ColorToleranceSpeed(2);
  2007.       SetColorSpeed2Modifiers(0.00, 0.23);
  2008.       Result:= FindColorsTolerance(ATPA2[I], 5066065, B.X1 - 10, B.Y1 - 10, B.X2 + 10, B.Y2 + 10, 5);
  2009.       ColorToleranceSpeed(CTS);
  2010.       SetColorSpeed2Modifiers(0.02, 0.02);
  2011.     end;
  2012.   end;
  2013.   ColorToleranceSpeed(CTS);
  2014.   SetColorSpeed2Modifiers(0.02, 0.02);
  2015. end;
  2016.  
  2017. //By sir eska eau
  2018. Function UnderAttack: Boolean;
  2019. Var
  2020.   Time, x, y: integer;
  2021. begin
  2022.   if InFight then
  2023.   begin
  2024.     MarkTime(Time);
  2025.  
  2026.     repeat
  2027.       Wait(50+Random(50));
  2028.       if(FindDTM(WaitFight_Shield, x, y, MSCX - 60, MSCY - 70, MSCX + 60, MSCY + 70)) or (FindDTM(WaitFight_Damage, x, y, MSCX - 60, MSCY - 70, MSCX + 60, MSCY + 70)) then
  2029.       begin
  2030.         Result:= True;
  2031.         Break;
  2032.       end;
  2033.     until(TimeFromMark(Time) > 2500);
  2034.   end;
  2035. end;
  2036.  
  2037. function AttackZombies: Boolean;
  2038. var
  2039.   CTS, I, L: Integer;
  2040.   TPA: TPointArray;
  2041.   ATPA: T2DPointArray;
  2042.   P: TPoint;
  2043. begin
  2044.   Result := False;
  2045.   LProc:= 'AttackZombies';
  2046.   if AtHartwin then
  2047.     exit;
  2048.   if (not LoggedIn) or (FindDead) or (InFight) then exit;
  2049.  
  2050.   CTS:= GetColorToleranceSpeed;
  2051.   ColorToleranceSpeed(2);
  2052.   SetColorSpeed2Modifiers(0.10, 0.45);
  2053.   FindColorsTolerance(TPA, 7168593, MSX1, MSY1, MSX2, MSY2, 17);
  2054.   ColorToleranceSpeed(2);
  2055.   SetColorSpeed2Modifiers(0.2, 0.2);
  2056.  
  2057.   if (Length(TPA) < 1) then
  2058.     Exit;
  2059.  
  2060.   ATPA:= TPAToATPAEx(TPA, 50, 50);
  2061.   if (Length(ATPA) < 1) then
  2062.     Exit;
  2063.   SortATPAFromFirstPoint(ATPA, Point(MSCX, MSCY));
  2064.   L:= High(ATPA);
  2065.  
  2066.   For I:= 0 To L do
  2067.   begin
  2068.     P:= MiddleTPA(ATPA[I]);
  2069.     MMouse(P.X, P.Y, 0, 0);
  2070.     if (WaitUptextMulti(['ttack', 'zombie', 'rmoured'], 600)) then
  2071.       if ((Not IsFightAt(P.X, P.Y)) and (Not UnderAttack)) then
  2072.       begin
  2073.         ClickMouse2(MOUSE_LEFT);
  2074.         break;
  2075.       end;
  2076.   end;
  2077.   Result:= InFight;
  2078. end;
  2079.  
  2080.   Function SummonPoints: Integer;
  2081.   var
  2082.     ColourString: String;
  2083.   begin
  2084.     LProc:= 'SummonPoints';
  2085.     Result:= GetMMLevels('summon', ColourString);
  2086.  
  2087.     if Debugs then
  2088.       writeln('Summoning Points: ' + ToStr(Result));
  2089.   end;
  2090.  
  2091.   Function UsingFamiliar: Boolean;
  2092.   var
  2093.     CTS: Integer;
  2094.     TPA: TPointArray;
  2095.   begin
  2096.     LProc:= 'UsingFamiliar';
  2097.     CTS:= GetColorToleranceSpeed;
  2098.     ColorToleranceSpeed(2);
  2099.     SetColorSpeed2Modifiers(0.21, 0.80);
  2100.  
  2101.     Result:= FindColorsSpiralTolerance(707, 143, TPA, 7975758, 691, 133, 720, 157, 24);
  2102.     if Debugs then
  2103.       writeln('Using Familiar: ' + ToStr(Result));
  2104.  
  2105.     SetColorSpeed2Modifiers(0.2, 0.2);
  2106.     ColorToleranceSpeed(CTS);
  2107.   end;
  2108.  
  2109.   Function InteractFamiliar(Option: TStringArray): Boolean;       //By Flight..   Modified..
  2110.   begin
  2111.     if (not LoggedIn) then exit;
  2112.     if UsingFamiliar then
  2113.     begin
  2114.       if (Option[0] = '') then
  2115.       begin
  2116.         MouseBox(695,140,740,155,1);
  2117.         Result := True;
  2118.       end else
  2119.       begin
  2120.         MouseBox(695,140,740,155, MOUSE_RIGHT);
  2121.         wait(500);
  2122.         if ChooseOptionMulti(Option) then
  2123.           Result := True
  2124.         else
  2125.           srl_Warn('InteractFamiliar', 'Incorrect option', warn_AllVersions);
  2126.       end;
  2127.     end else
  2128.       srl_Warn('InteractFamiliar', 'No familiar present!', warn_AllVersions);
  2129.  
  2130.     Wait(100 + Random(50));
  2131.   end;
  2132.  
  2133.   Function SummoningRenew(PouchToSummon: integer): Boolean;
  2134.   var
  2135.     Pouch, X, Y, tries, Summoning: Integer;
  2136.   begin
  2137.     LProc:= 'SummoningRenew';
  2138.         Case PouchToSummon of
  2139.           0:
  2140.             exit;
  2141.           1:
  2142.             Pouch := DTMFromString('m1gAAAHic42JgYDjIxMBwjAlC70PCIP4RKD4JxJyMDAxcQMwLxSA+GxIGiXEAcWFJPENxeSKDv78tGOcXxzIUlMQxFJUlMGSkhYDFyqqSGbiAdhODGYnECAAAECwT5g=='); //Bunyip
  2143.  
  2144.           2:
  2145.             Pouch := DTMFromString('mbQAAAHicY2VgYDjEBMH7gPgAEJ8H4gpGBoYSIC4D4hogrgTilopUhqbyFIbiVF8wZmBgYuACkuiYEQsGAwBb6Qt+');  //Unicorn
  2146.         end;
  2147.  
  2148.         Summoning := DTMFromString('mWAAAAHicY2FgYHBigmBXIPYEYn1GBgYrILaE4vz8Ega5a3cZZC/dBKpmYkgBkuxImBENgwAAgewHaA=='); //Potion to drink.
  2149.         //UniScroll := DTMFromString('mwQAAAHic42RgYDjIxMCwjwlCHwbiY0B8FIh3Q8WPALEeIwODFhCrQ2kYWxuI9aG4vjiRoaM8iiEicj4YR0YtBGOQGEhuWm8TAxfQPkKYkQgMBwBcExUb');
  2150.  
  2151.  
  2152.             Gametab(Tab_Inv);
  2153.             if(FindDTM(Pouch, x, y, MIX1, MIY1, MIX2, MIY2) and FindDTM(Summoning, x, y, MIX1, MIY1, MIX2, MIY2)) then
  2154.               if(SummonPoints < 20) then
  2155.               begin
  2156.                 writeln('Need to Refill Summoning Points.');
  2157.                 if(FindDTM(Summoning, X, Y, MIX1, MIY1, MIX2, MIY2)) then
  2158.                 begin
  2159.                   MMouse(X, Y + 5, 0, 0);
  2160.                   if(WaitUptextMulti(['ummoning', 'potion'], 500)) then
  2161.                   begin
  2162.                     ClickMouse2(False);
  2163.                     ChooseOptionMulti(['rink', 'Drink', 'rink Summoning', 'Drink Summoning']);
  2164.                     wait(2000);
  2165.                   end;
  2166.                 end;
  2167.               end;
  2168.  
  2169.               if (SummonPoints < 20) then
  2170.               begin
  2171.                 FreeDTM(Pouch);
  2172.                 FreeDTM(Summoning);
  2173.                 exit;
  2174.               end;
  2175.  
  2176.             tries := 0;
  2177.             if(FindDtm(Pouch, x, y, MIX1, MIY1, MIX2, MIY2) and (SummonPoints >= 20)) then
  2178.             Repeat
  2179.               if(not Loggedin) then
  2180.                 LoginPlayer;
  2181.               if UsingFamiliar then
  2182.                 break;
  2183.               FindNormalRandoms;
  2184.               MMouse(x, y, 5, 5);
  2185.               wait(500);
  2186.               ClickMouse2(false);
  2187.               wait(500);
  2188.               ChooseOption('Summon');
  2189.               if(FindBlackChatMessage('follower')) then
  2190.                 break;
  2191.               tries:= tries + 1;
  2192.               if(tries > 10) then
  2193.               begin
  2194.                 FreeDTM(Pouch);
  2195.                 FreeDTM(Summoning);
  2196.                 exit;
  2197.               end;
  2198.             Until(UsingFamiliar = true);
  2199.  
  2200.             wait(1500);
  2201.  
  2202.         Result:= UsingFamiliar;
  2203.  
  2204.     FreeDTM(Pouch);
  2205.     FreeDTM(Summoning);
  2206.   end;
  2207.  
  2208. Function HPLevel: Integer;
  2209. var
  2210.   ColourString: String;
  2211. begin
  2212.   LProc:= 'HPLevel';
  2213.   Result:= GetMMLevels('HP', ColourString);
  2214.   if debugs then
  2215.     writeln('HP: ' + ToStr(Result));
  2216. end;
  2217.  
  2218. Function MousePotions(DTM: Integer; Uptext: TStringArray; Area: TBox; WithDraw, Drink: Boolean): Boolean;
  2219. var
  2220.   X, Y, T, Tries, Count, NOC: Integer;
  2221.   TPA: TPointArray;
  2222.   ATPA: T2DPointArray;
  2223. begin
  2224.   if (Not Withdraw) then
  2225.   begin
  2226.     If (FindDTMs(DTM, TPA, Area.X1, Area.Y1, Area.X2, Area.Y2)) then
  2227.     begin
  2228.       ATPA:= TPAToATPAEx(TPA, 24, 35);
  2229.       SortATPASize(ATPA, False);
  2230.       if (Length(ATPA) < 1) then
  2231.         exit;
  2232.       MiddleTPAEx(ATPA[0], X, Y);
  2233.       MMouse(X, Y, 0, 0);
  2234.       if (WaitUptextMulti(Uptext, 600)) then
  2235.       begin
  2236.         if (Drink) then
  2237.           ClickMouse2(MOUSE_LEFT);
  2238.         Result:= True;
  2239.         Wait(1000);
  2240.       end;
  2241.     end;
  2242.   end else
  2243.     begin
  2244.       Count:= ItemAmount('inv', 'dtm', DTM, []);
  2245.       If (NOC <> 0) then
  2246.         If FindDTM(DTM, X, Y, Area.X1, Area.Y1, Area.X2, Area.Y2) then
  2247.           While ((Not FindDTM(DTM, X, Y, MIX1, MIY1, MIX2, MIY2)) and (Tries < 5)) do
  2248.           begin
  2249.             FindDTM(DTM, X, Y, Area.X1, Area.Y1, Area.X2, Area.Y2);
  2250.             MMouse(X, Y, 0, 0);
  2251.             if Debugs then
  2252.               writeln(GetUptext);
  2253.             If (WaitUptextMulti(Uptext, 500)) then
  2254.             begin
  2255.               ClickMouse2(MOUSE_RIGHT);
  2256.               if WaitOptionMulti(['w-X', 'draw-X'], 600) then
  2257.               begin
  2258.                 Wait(1000);
  2259.                 if (Not BankScreen) then
  2260.                   exit;
  2261.                  T:= GetSystemTime + 10000;
  2262.                  while (T >= GetSystemTime) and (not (InRange(CountColor(0, 250, 396, 307, 410), 155, 165))) do
  2263.                    Wait(50);
  2264.                 TypeSend(ToStr(NOC - Count));
  2265.                 break;
  2266.               end;
  2267.             end;
  2268.             Inc(Tries);
  2269.             if Tries > 5 then
  2270.               Writeln('Cannot Withdraw Combat Potions');
  2271.           end;
  2272.           Tries:= 0; WaitFindDTM(X, Y, DTM, 2500);
  2273.         Result:= (ItemAmount('inv', 'dtm', DTM, []) = NOC);
  2274.     end;
  2275. end;
  2276.  
  2277. Function HasPotion(Potion: String; Drink: Boolean): Boolean;
  2278. var
  2279.   DTM: Integer;
  2280.   UpText: TStringArray;
  2281. begin
  2282.   LProc:= 'HasPotion';
  2283.   Uptext:= [Potion];
  2284.     if (GetCurrentTab <> Tab_Inv) then
  2285.       GameTab(Tab_Inv);
  2286.       Case LowerCase(Potion) of
  2287.         'none', '0', 'nothing':
  2288.                           exit;
  2289.  
  2290.         'ovl', 'overload':
  2291.                           begin
  2292.                             DTM := DTMFromString('mlwAAAHicY2dgYPBigmB3IHYG4kAgDgDiYCBmYmRg4AViHijmBmJGIGYHsbm4gLqZ4DQyngYk+XFgRjwYCgCMngOo');
  2293.                             UpText:= ['load', 'Over', 'Overload'];
  2294.                           end;
  2295.  
  2296.         'def', 'defence':
  2297.                           begin
  2298.                             DTM := DTMFromString('mbQAAAHicY2VgYBBkZGAQAGIeIBYHYgkgng0UXwrFSxgg/K1TzBn2z7UCspjgeBqQ5EfDjFgwGAAA/SEHfg==');
  2299.                             UpText:= ['uper defence', 'defence', 'uper def', 'Super defence'];
  2300.                           end;
  2301.  
  2302.         'atk', 'attack':
  2303.                           begin
  2304.                             DTM := DTMFromString('mbQAAAHicY2VgYMhkhOBcIE4C4gIgngUUX4qE5wCxhdU2BkubfUAWExxPA5L8aJgRCwYDAHP8CHk=');
  2305.                             UpText:= ['uper attack', 'attack', 'uper att', 'Super attack'];
  2306.                           end;
  2307.  
  2308.         'str', 'strength', 'es', 'extrstr':
  2309.                           begin
  2310.                             DTM := DTMFromString('mrAAAAHic42BgYGBlgAAQzQvEXEDMCRVjAWImqDgfELNBxbmQcERkDFQVAi+ct4Bh88YtDBvWbWSYBhQRwYMZCWAYAADUbgi9');
  2311.                             UpText:= ['uper strength', 'strength', 'uper str', 'Super strength', 'me str'];
  2312.                           end;
  2313.  
  2314.         'ed', 'extrdef':
  2315.                           begin
  2316.                             DTM := DTMFromString('mbQAAAHicY2VgYEgE4gQgTgXiGCh/DhAvA+KFQLwIiCcA8ZUjskCSieHIVmmGu2fkGKKi4hjygCJcaJgRCwYDABivC70=');
  2317.                             Uptext:= ['eme def', 'me def', 'Extreme defence'];
  2318.                           end;
  2319.  
  2320.         'ea', 'extratk':
  2321.                           begin
  2322.                             DTM := DTMFromString('mbQAAAHicY2VgYDABYmMgNgdiayDWA+K5QLwUiJcB8Swou3DFaoaSteuBLCY4ngYk+dEwIxYMBgBabgil');
  2323.                             Uptext:= ['me att', 'eme att', 'Extreme attack'];
  2324.                           end;
  2325.       end;
  2326.     Result:= MousePotions(DTM, Uptext, MIBox, False, Drink);
  2327.     FreeDTM(DTM);
  2328. end;
  2329.  
  2330.  
  2331. Procedure PotSkills;
  2332. begin
  2333.   LProc:= 'PotSkills';
  2334.   Sk.ModAtk:= GetSkillInfo(Skill_Attack, True);
  2335.   Sk.ModStr:= GetSkillInfo(Skill_Strength, True);
  2336.   Sk.ModDef:= GetSkillInfo(Skill_Defence, True);
  2337. end;
  2338.  
  2339. Procedure InitialSkills;
  2340. begin
  2341.   LProc:= 'InitialSkills';
  2342.   Sk.Atk:= GetSkillLevel(Skill_Attack);
  2343.   Sk.Str:= GetSkillLevel(Skill_Strength);
  2344.   Sk.Def:= GetSkillLevel(Skill_Defence);
  2345. end;
  2346.  
  2347. function RPDist(TPA: TPointArray; MaxDist: Integer): TPoint;      //By MormonMan
  2348. var
  2349.   MP, P: TPoint;
  2350. begin
  2351.   if not LoggedIn then Exit;
  2352.   P := Point(-1, -1);
  2353.   MP := MiddleTPA(TPA);
  2354.   while (Distance(MP.x, MP.y, P.x, P.y) > MaxDist) do
  2355.     P := TPA[Random(Length(TPA) - 1)];
  2356.   Result := P;
  2357. end;
  2358.  
  2359. Function FindHDTM: Boolean;
  2360. var
  2361.   DTM, X, Y, Dist: Integer;
  2362.   TPA, NPCs: TPointArray;
  2363. begin
  2364.   NPCs:= GetMiniMapDots('NPC');
  2365.   SortTPAByY(NPCs, True);
  2366.   Dist:= Distance(NPCs[0].X, NPCs[0].Y, MMCX, MMCY);
  2367.  
  2368.   if (Dist > 20) then
  2369.   begin
  2370.     MMouse(NPCs[0].X, NPCs[0].Y, 0, 0);
  2371.     wait(100);
  2372.     ClickMouse2(MOUSE_LEFT);
  2373.     if (Not IsMoving) then
  2374.           wait(1000);
  2375.     while isMoving do
  2376.       wait(500);
  2377.   end;
  2378.  
  2379.   DTM := DTMFromString('mQwAAAHicY2ZgYNBlZGDwAWIuIJ4F5E8E4klAnJuTwXBvozzDucWyDFxAPgwzImEgAAAOBwbl');
  2380.   Result:= FindDTMs(DTM, TPA, MSX1, MSY1, MSX2, MSY2);
  2381.   if Result then
  2382.   begin
  2383.     if Debugs then
  2384.       DebugTPA(TPA, '');
  2385.     MiddleTPAEx(TPA, X, Y);
  2386.     MMouse(X, Y, 0, 0);
  2387.   end;
  2388.   FreeDTM(DTM);
  2389. end;
  2390.  
  2391. Procedure TalkHartwin;
  2392. var
  2393.   NPCs, Cols: TPointArray;
  2394.   HP: TPoint;
  2395.   B: TBox;
  2396.   Found: Boolean;
  2397.   Color: TIntegerArray;
  2398.   I, X, Y, Dist, Tries: Integer;
  2399. begin
  2400.   LProc:= 'TalkHartwin';
  2401.   Tries:= 0;
  2402.   Found:= False;
  2403.   if (Not AtHartwin) then
  2404.     exit;
  2405.   FindHDTM;
  2406.   NPCs:= GetMMDotsOnMS('NPC');
  2407.   SortTPAByY(NPCs, True);
  2408.   HP:= RPDist(NPCs, 20);
  2409.   HP:= MMToMS(HP);
  2410.   B:= IntToBox(HP.X - 20, HP.Y - 20, HP.X + 20, HP.Y + 20);
  2411.   Color:= [5271929, 5931912, 4020572, 5927541, 6981257];
  2412.   For I:= 0 To High(Color) do
  2413.     FindColorsSpiralTolerance(HP.X, HP.Y, Cols, Color[I], B.X1, B.Y1, B.X2, B.Y2, 10);
  2414.  
  2415.   if (Length(Cols) > 0) then
  2416.   begin
  2417.     MiddleTPAEx(Cols, HP.X, HP.Y);
  2418.     MMouse(HP.X,HP.Y, 0, 0);
  2419.  
  2420.     DebugTPA(Cols, '');
  2421.     Found:= True;
  2422.   end else
  2423.     if FindHDTM then
  2424.       Found:= True;
  2425.  
  2426.   if Found then
  2427.     if (WaitUptextMulti(['alk-to Hart', 'Hartwin', 'artwin', 'o Hartwin', 'win', 'to Har'], 600)) then
  2428.     begin
  2429.       ClickMouse2(MOUSE_LEFT);
  2430.       MakeCompass('N');
  2431.       Repeat
  2432.         repeat
  2433.           ClickToContinue;
  2434.         until(ClickToContinue = False);
  2435.         wait(500);
  2436.         FindNPCChatText('es', ClickLeft);
  2437.         wait(2000);
  2438.         Inc(Tries);
  2439.       Until(FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or (Tries > 7));
  2440.     end;
  2441. end;
  2442.  
  2443. Function DrinkPotion(Potion: string): Boolean;
  2444. begin
  2445.   LProc:= 'DrinkPotion';
  2446.   UptextF:= [Potion];
  2447.   Case LowerCase(Potion) of
  2448.     'none', '0', 'nothing':
  2449.                           exit;
  2450.  
  2451.     'asd', 'ss', 'superset', 'super set':
  2452.                       begin
  2453.                         PotSkills;
  2454.                         begin
  2455.                           if (HasPotion('atk', False)) then
  2456.                             if (Sk.ModAtk < (Sk.Atk + WTD)) then
  2457.                             begin
  2458.                               HasPotion('atk', True);
  2459.                               wait(1000);
  2460.                             end;
  2461.  
  2462.                           if (HasPotion('str', False)) then
  2463.                             if (Sk.ModStr < (Sk.Str + WTD)) then
  2464.                             begin
  2465.                               HasPotion('str', True);
  2466.                               wait(1000);
  2467.                             end;
  2468.  
  2469.                           if (HasPotion('def', False)) then
  2470.                             if (Sk.ModDef < (Sk.Def + WTD)) then
  2471.                             begin
  2472.                               HasPotion('def', True);
  2473.                               wait(1000);
  2474.                             end;
  2475.                         end;
  2476.                         wait(1000);
  2477.                         PotSkills;
  2478.                         Result:= ((Sk.ModAtk > (Sk.Atk + WTD)) and (Sk.ModStr > (Sk.Str + WTD)) and (Sk.ModDef > (Sk.Def + WTD)));
  2479.                       end;
  2480.  
  2481.     'atk str', 'as', 'atkstr', 'aspure':
  2482.                       begin
  2483.                         PotSkills;
  2484.                         begin
  2485.                           if (HasPotion('atk', False)) then
  2486.                             if (Sk.ModAtk < (Sk.Atk + WTD)) then
  2487.                             begin
  2488.                               HasPotion('atk', True);
  2489.                               wait(1000);
  2490.                             end;
  2491.  
  2492.                           if (HasPotion('str', False)) then
  2493.                             if (Sk.ModStr < (Sk.Str + WTD)) then
  2494.                             begin
  2495.                               HasPotion('str', True);
  2496.                               wait(1000);
  2497.                             end;
  2498.                         end;
  2499.                         wait(1000);
  2500.                         PotSkills;
  2501.                         Result:= ((Sk.ModAtk > (Sk.Atk + WTD)) and (Sk.ModStr > (Sk.Str + WTD)));
  2502.                       end;
  2503.  
  2504.     'str def', 'sd', 'strdef', 'sdpure':
  2505.                       begin
  2506.                         PotSkills;
  2507.                         begin
  2508.                           if (HasPotion('str', False)) then
  2509.                             if (Sk.ModStr < (Sk.Str + WTD)) then
  2510.                             begin
  2511.                               HasPotion('str', True);
  2512.                               wait(1000);
  2513.                             end;
  2514.  
  2515.                           if (HasPotion('def', False)) then
  2516.                             if (Sk.ModDef < (Sk.Def + WTD)) then
  2517.                             begin
  2518.                               HasPotion('def', True);
  2519.                               wait(1000);
  2520.                             end;
  2521.                         end;
  2522.                         wait(1000);
  2523.                         PotSkills;
  2524.                         Result:= ((Sk.ModStr > (Sk.Str + WTD)) and (Sk.ModDef > (Sk.Def + WTD)));
  2525.                       end;
  2526.  
  2527.     'atk def', 'ad', 'atkdef', 'adpure':
  2528.                       begin
  2529.                         PotSkills;
  2530.                         begin
  2531.                           if (HasPotion('atk', False)) then
  2532.                             if (Sk.ModAtk < (Sk.Atk + WTD)) then
  2533.                             begin
  2534.                               HasPotion('atk', True);
  2535.                               wait(1000);
  2536.                             end;
  2537.  
  2538.                           if (HasPotion('def', False)) then
  2539.                             if (Sk.ModDef < (Sk.Def + WTD)) then
  2540.                             begin
  2541.                               HasPotion('def', True);
  2542.                               wait(1000);
  2543.                             end;
  2544.                         end;
  2545.                         wait(1000);
  2546.                         PotSkills;
  2547.                         Result:= ((Sk.ModAtk > (Sk.Atk + WTD)) and (Sk.ModDef > (Sk.Def + WTD)));
  2548.                       end;
  2549.  
  2550.     'atk', 'attack':
  2551.                       if (HasPotion(Potion, False)) then
  2552.                       begin
  2553.                         PotSkills;
  2554.                         if (Sk.ModAtk < (Sk.Atk + WTD)) then
  2555.                         begin
  2556.                           HasPotion(Potion, True);
  2557.                           wait(2000);
  2558.                           PotSkills;
  2559.                           Result:= (Sk.ModAtk > (Sk.Atk + WTD));
  2560.                         end;
  2561.                       end;
  2562.  
  2563.     'str', 'strength':
  2564.                       if (HasPotion(Potion, False)) then
  2565.                       begin
  2566.                         PotSkills;
  2567.                         if (Sk.ModStr < (Sk.Str + WTD)) then
  2568.                         begin
  2569.                           HasPotion(Potion, True);
  2570.                           wait(2000);
  2571.                           PotSkills;
  2572.                           Result:= (Sk.ModStr > (Sk.Str + WTD));
  2573.                         end;
  2574.                       end;
  2575.  
  2576.     'def', 'defence':
  2577.                       if (HasPotion(Potion, False)) then
  2578.                       begin
  2579.                         PotSkills;
  2580.                         if (Sk.ModDef < (Sk.Def + WTD)) then
  2581.                         begin
  2582.                           HasPotion(Potion, True);
  2583.                           wait(2000);
  2584.                           PotSkills;
  2585.                           Result:= (Sk.ModDef > (Sk.Def + WTD));
  2586.                         end;
  2587.                       end;
  2588.  
  2589.     'ovl', 'overload':
  2590.                       if (HPLevel > 600) then
  2591.                         if (HasPotion(Potion, False)) then
  2592.                         begin
  2593.                           PotSkills;
  2594.                           if ((Sk.ModAtk < (Sk.Atk + WTD)) or (Sk.ModStr < (Sk.Str + WTD)) or (Sk.ModDef < (Sk.Def + WTD))) then
  2595.                           begin
  2596.                             HasPotion(Potion, True);
  2597.                             wait(2000);
  2598.                             PotSkills;
  2599.                             Result:= ((Sk.ModAtk + Sk.ModDef + Sk.ModStr) > ((Sk.Atk + Sk.Def + Sk.Str) + WTD));
  2600.                           end;
  2601.                         end;
  2602.   end;
  2603. end;
  2604.  
  2605. Function FindLadder: Boolean;
  2606. var
  2607.   Dist: Integer;
  2608. begin
  2609.   LProc:= 'FindLadder';
  2610.   if AtHartwin then
  2611.     exit;
  2612.   Result:= FindObjectMM([LadderColour], Dist, 10, 10, LTol, False, [0.58, 4.00]);
  2613.  
  2614.   if debugs then
  2615.     writeln('FindLadder: ' + ToStr(Result));
  2616. end;
  2617.  
  2618. Function DownTheHall: Boolean; Forward;
  2619. Function PrayAltar: Boolean;
  2620. var
  2621.   CTS: Integer;
  2622. begin
  2623.   LProc:= 'PrayAltar';
  2624.   if AtHartwin then
  2625.     exit;
  2626.  
  2627.   CTS := GetColorToleranceSpeed;
  2628.   ColorToleranceSpeed(2);
  2629.   SetColorSpeed2Modifiers(0.11, 0.38);
  2630.  
  2631.   Result:= FindObjectFX([2960958], ['ray-at', 'haos altar',  'altar'], MSX1, MSY1, MSX2, MSY2, 20, 20, 11, True);
  2632.   if (Not Result) then
  2633.     if (Not AutoColourAltar) then
  2634.       if (Not FindLadder) then
  2635.         DownTheHall;
  2636.  
  2637.   if Debugs then
  2638.     writeln('PrayAltar: ' + ToStr(Result));
  2639.  
  2640.   ColorToleranceSpeed(CTS);
  2641.   SetColorSpeed2Modifiers(0.2, 0.2);
  2642. end;
  2643.  
  2644. Function PrayerLevel: Integer;
  2645. var
  2646.   ColourString: String;
  2647. begin
  2648.   LProc:= 'PrayerLevel';
  2649.   Result:= GetMMLevels('Prayer', ColourString);
  2650.  
  2651.   if debugs then
  2652.     writeln('Prayer: ' + ToStr(Result));
  2653. end;
  2654.  
  2655. Function IsPrayerOn: Boolean;
  2656. var
  2657.   TPA: TPointArray;
  2658.   CTS: Integer;
  2659. begin
  2660.   LProc:= 'IsPrayerOn';
  2661.   if (PrayerLevel < 2) then
  2662.     Result:= False
  2663.   else
  2664.   begin
  2665.     CTS:= GetColorToleranceSpeed;
  2666.     ColorToleranceSpeed(2);
  2667.     SetToleranceSpeed2Modifiers(0.11, 1.02);
  2668.     Result:= FindColorsSpiralTolerance(723, 70, TPA, 8767378, 708, 53, 737, 85, 27);
  2669.     SetToleranceSpeed2Modifiers(0.2, 0.2);
  2670.     ColorToleranceSpeed(CTS);
  2671.   end;
  2672.  
  2673.   if Debugs then
  2674.     writeln('Prayer On: ' + ToStr(Result));
  2675. end;
  2676.  
  2677. Function OutOfPrayer: Boolean;
  2678. var
  2679.   TPA: TPointArray;
  2680.   CTS: Integer;
  2681. begin
  2682.   LProc:= 'OutOfPrayer';
  2683.   CTS:= GetColorToleranceSpeed;
  2684.   ColorToleranceSpeed(2);
  2685.  
  2686.   if (PrayerLevel = 0) then
  2687.     Result:= True
  2688.   else
  2689.     Result:= Not(FindColorsSpiralTolerance(723, 70, TPA, 6236988, 706, 55, 739, 81, 26) or IsPrayerOn);
  2690.  
  2691.   if Debugs then
  2692.     writeln('Out of Prayer: ' + ToStr(Result));
  2693.   ColorToleranceSpeed(CTS);
  2694. end;
  2695.  
  2696. Procedure TurnPrayerOff;
  2697. begin
  2698.   LProc:= 'TurnPrayerOff';
  2699.   if (GetCurrentTab <> Tab_Inv) then
  2700.     GameTab(Tab_Inv);
  2701.    wait(1000);
  2702.    begin
  2703.     if (Not IsPrayerOn) then
  2704.       exit;
  2705.      repeat
  2706.       if OutOfPrayer Then
  2707.         break;
  2708.       if PrayerLevel < 3 then
  2709.         break;
  2710.       MouseBox(706, 55, 739, 87, MOUSE_LEFT);
  2711.       wait(1500);
  2712.      Until(Not IsPrayerOn);
  2713.    end;
  2714.    MouseBox(MSX1, MSY1, MSX2, MSY2, 3);
  2715. end;
  2716.  
  2717. Procedure TurnPrayerOn(QuickPrayer: Boolean);
  2718. begin
  2719.   LProc:= 'TurnPrayerOn';
  2720.   if (GetCurrentTab <> Tab_Inv) then
  2721.     GameTab(Tab_Inv);
  2722.    wait(1000);
  2723.  
  2724.     if IsPrayerOn then
  2725.       exit;
  2726.      if (QuickPrayer = True) then
  2727.      repeat
  2728.         if OutOfPrayer Then
  2729.           break;
  2730.         if PrayerLevel < 3 then
  2731.           break;
  2732.         MouseBox(706, 55, 739, 87, 1);
  2733.         wait(1500);
  2734.      Until(IsPrayerOn);
  2735.    if (QuickPrayer) then
  2736.     MouseBox(MSX1, MSY1, MSX2, MSY2, 3);
  2737. end;
  2738.  
  2739.  
  2740.  
  2741. Function WalkToLadder: Boolean;
  2742. var
  2743.   Dist: Integer;
  2744. begin
  2745.   LProc:= 'WalkToLadder';
  2746.   if AtHartwin then
  2747.     exit;
  2748.   FindObjectMM([LadderColour], Dist, 10, 10, LTol, True, [0.58, 4.00]);
  2749.  
  2750.   if ((Dist >= 25) or (PrayerLevel <= WTP)) then
  2751.   begin
  2752.     FindObjectMM([LadderColour], Dist, 10, 10, LTol, True, [0.58, 4.00]);
  2753.     MMouse(Random(MSCX), Random(MSCY), 5, 5);
  2754.     wait(500);
  2755.     while isMoving do
  2756.       wait(50);
  2757.     wait(1000);
  2758.     Result:= (Dist < 15);
  2759.   end;
  2760. end;
  2761.  
  2762. Function UpLadder: Boolean;
  2763. var
  2764.   Dist, X, Y, tries, CTS: Integer;
  2765.   Ladder: TPoint;
  2766. begin
  2767.   LProc:= 'UpLadder';
  2768.   if AtHartwin then
  2769.     exit;
  2770.   tries:= 0;
  2771.   CTS:= GetColorToleranceSpeed;
  2772.  
  2773.   Repeat
  2774.     FindObjectMM([LadderColour], Dist, 10, 10, LTol, False, [0.58, 4.00]);
  2775.  
  2776.     if ((FoundSymbol(1, X, Y, Dist) = False) or (FoundSymbol(2, X, Y, Dist) = False)) then
  2777.     begin
  2778.       if ((Dist <= 23) and (PrayerLevel <= WTP)) then
  2779.       begin
  2780.           Ladder:= MMToMS(Point(X, Y));
  2781.           SetColorSpeed2Modifiers(0.09, 0.26);                                                                //EDITED!! Ladder.X-50
  2782.           if (Not FindObjectFX([2509141], ['adder', 'up Lad', 'limb-up'], MSX1, MSY1, Ladder.X + 50, Ladder.Y + 50, 10, 10, 5, True)) then
  2783.           begin
  2784.             SetColorSpeed2Modifiers(0.2, 0.2);
  2785.             ColorToleranceSpeed(CTS);
  2786.             if (Not AutoColourLadder) then
  2787.               if (Not FindLadder) then
  2788.                 DownTheHall;
  2789.           end;
  2790.           SetColorSpeed2Modifiers(0.2, 0.2);
  2791.           if DidRedClick then
  2792.           begin
  2793.             wait(2000);
  2794.             if Debugs then
  2795.               writeln('UpLadder: True');
  2796.           end;
  2797.       end else
  2798.       if (Dist > 23) then
  2799.         WalkToLadder;
  2800.  
  2801.       Inc(Tries);
  2802.     end;
  2803.     if (tries > 5) then
  2804.       break;
  2805.   Until(FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or (Tries > 5));
  2806.  
  2807.   SetColorSpeed2Modifiers(0.2, 0.2);
  2808.   ColorToleranceSpeed(CTS);
  2809.  
  2810.   Result:= (FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or (FindLadder = False));
  2811.   if Debugs then
  2812.     writeln('UpLadder: ' + ToStr(Result));
  2813.   wait(1000);
  2814. end;
  2815.  
  2816. Function FindTrapDoor: Boolean;
  2817. var
  2818.   I, X, Y, TrapDoorDTM: Integer;
  2819.   Found: Extended;
  2820.   Colors: TIntegerArray;
  2821.   TPA: TPointArray;
  2822.   ATPA: T2DPointArray;
  2823. begin
  2824.   if AtHartwin then
  2825.     exit;
  2826.   Colors:= [6579305, 6382182, 6447719];
  2827.   For I:= 0 To High(Colors) do
  2828.     FindColorsSpiralTolerance(MSCX, MSCY, TPA, Colors[I], MSCX - 50, MSCY - 50, MSCX + 50, MSCY + 50, 10);
  2829.   if (Length(TPA) < 1) then
  2830.     exit;
  2831.  
  2832.   ATPA:= TPAToATPAEx(TPA, 30, 30);
  2833.   if (Length(ATPA) < 1) then
  2834.     exit;
  2835.  
  2836.   if debugs then
  2837.     DebugTPA(ATPA[0], '');
  2838.  
  2839.   MiddleTPAEx(ATPA[0], X, Y);
  2840.   MMouse(X, Y, 0, 0);
  2841.   Result := WaitUptextMulti(['rapdoor', 'uny', 'unyip'], 600);
  2842.   if Result then
  2843.   begin
  2844.     ClickMouse2(MOUSE_RIGHT);
  2845.     WaitOption('rapdoor', 600);
  2846.   end else
  2847.   begin
  2848.     TrapDoorDTM := DTMFromString('mQwAAAHicY2ZgYJBmZGCQA2IJIJ4D5B+F4gBfX4ZNy2cxrF8yg4ELyIdhRiQMBAAaZwdn');
  2849.     if FindDTMRotatedAlternating(TrapDoorDTM, X, Y, MSX1, MSY1, MSX2, MSY2, 0, 359, 1, Found) then
  2850.     begin
  2851.       MMouse(X, Y, 0, 0);
  2852.       Result := WaitUptextMulti(['rapdoor', 'uny', 'unyip'], 600);
  2853.       ClickMouse2(MOUSE_RIGHT);
  2854.       WaitOption('rapdoor', 600);
  2855.     end;
  2856.     FreeDTM(TrapDoorDTM);
  2857.   end;
  2858. end;
  2859.  
  2860. Function DownLadder: Boolean;
  2861. var
  2862.   X, Y, Dist, tries, CTS: Integer;
  2863. begin
  2864.   LProc:= 'DownLadder';
  2865.   if AtHartwin then
  2866.     exit;
  2867.  
  2868.   MakeCompass('S');
  2869.   CTS:= GetColorToleranceSpeed;
  2870.   wait(1000);
  2871.   tries:= 0;
  2872.  
  2873.   repeat
  2874.     ColorToleranceSpeed(2);
  2875.     if FindObjectFx([4473927, 6118754, 6382182, 6579304], ['rapdoor', 'door'], MSX1, MSY1, MSX2, MSY2, 10, 10, 5, True) then
  2876.     begin
  2877.       ColorToleranceSpeed(CTS);
  2878.       MMouse(X, Y, 0, 0);
  2879.       wait(500);
  2880.       ClickMouse2(True);
  2881.       if Debugs then
  2882.         writeln('DownLadder: True');
  2883.       if(DidRedClick) then
  2884.         break;
  2885.     end else
  2886.       begin
  2887.         ColorToleranceSpeed(CTS);
  2888.         if (FoundSymbol(1, X, Y, Dist) = False) or (FoundSymbol(2, X, Y, Dist) = False) or (FindLadder = False) then
  2889.           FindTrapDoor;
  2890.       end;
  2891.     ColorToleranceSpeed(CTS);
  2892.  
  2893.     Inc(Tries);
  2894.     if (Tries > 4) then
  2895.       break;
  2896.   until((FoundSymbol(1, X, Y, Dist) = False) or (FoundSymbol(2, X, Y, Dist) = False) or (FindLadder = True)  or (tries > 10));
  2897.  
  2898.   MakeCompass('W');
  2899.   Result:= ((FoundSymbol(1, X, Y, Dist) = False) or (FoundSymbol(2, X, Y, Dist) = False) or (FindLadder = True));
  2900.   if Debugs then
  2901.     writeln('DownLadder: ' + ToStr(Result));
  2902. end;
  2903.  
  2904. Procedure PickUpItems(ItemList: TStringArray);
  2905. var
  2906.   Items, TPA: TPointArray;
  2907.   ATPA: T2DPointArray;
  2908.   Item: TPoint;
  2909.   ItemArray: Array of ItemPickup;
  2910.   I, CTS: Integer;
  2911. begin
  2912.   LProc:= 'PickUpItems';
  2913.   SetLength(ItemArray, Length(ItemCheckList) + 1);
  2914.   For I:= 0 To High(ItemCheckList) do
  2915.     Case lowercase(ItemCheckList[I]) of
  2916.       'noted':
  2917.           begin
  2918.             ItemArray[I].Color := 8767731;     //Noted Items.
  2919.             ItemArray[I].Speed := [0.64, 1.34];
  2920.             ItemArray[I].Tolerance := 10;
  2921.           end;
  2922.       'bones', 'bone':
  2923.           begin
  2924.             ItemArray[I].Color := 13423589;     //Bones Items.
  2925.             ItemArray[I].Speed := [0.39, 2.16];
  2926.             ItemArray[I].Tolerance := 11;
  2927.           end;
  2928.       'bluecharm', 'blue charm', 'bluecharms':
  2929.           begin
  2930.             ItemArray[I].Color := 10725730;     //BlueCharm Items.
  2931.             ItemArray[I].Speed := [0.11, 0.44];
  2932.             ItemArray[I].Tolerance := 22;
  2933.           end;
  2934.       'coins', 'gold', 'gp':
  2935.           begin
  2936.             ItemArray[I].Color := 4641005;     //Coins Items.
  2937.             ItemArray[I].Speed := [0.29, 3.33];
  2938.             ItemArray[I].Tolerance := 5;
  2939.           end;
  2940.     end;
  2941.  
  2942.   CTS:= GetColorToleranceSpeed;
  2943.   Items:= GetMMDotsOnMS('item');
  2944.   if (Length(Items) > 0) then
  2945.   begin
  2946.     Item:= MMToMS(Items[0]);
  2947.  
  2948.     if ((Item.X <> 0) AND (Item.Y <> 0) AND (InvFull = False)) then
  2949.     begin
  2950.       For I:= 0 To High(ItemArray) - 1 do
  2951.       begin
  2952.         ColorToleranceSpeed(2);
  2953.         SetColorSpeed2Modifiers(ItemArray[I].Speed[0], ItemArray[I].Speed[1]);
  2954.         FindColorsTolerance(TPA, ItemArray[I].Color, MSX1, MSY1, MSX2, MSY2, ItemArray[I].Tolerance);
  2955.         ATPA:= TPAToATPAEx(TPA, 10, 10);
  2956.         ColorToleranceSpeed(CTS);
  2957.         SetColorSpeed2Modifiers(0.02, 0.02);
  2958.  
  2959.         if (Length(ATPA) < 1) then
  2960.           exit;
  2961.  
  2962.         Item.x:= MSCX; Item.y:= MSCY;
  2963.         SortATPAFromFirstPoint(ATPA, Item);
  2964.         MiddleTPAEx(ATPA[0], Item.X, Item.Y);
  2965.  
  2966.         MMouse(Item.X, Item.Y, 0, 0);
  2967.         wait(200);
  2968.         if (isUptextMultiCustom(ItemList) or IsUptextMultiCustom(['ake', 'nteract', 'ttack'])) then
  2969.         begin
  2970.           ClickMouse2(False);
  2971.           WaitOptionMulti(ItemList, 300);
  2972.           wait(200);
  2973.           while isMoving do
  2974.             wait(1);
  2975.         end;
  2976.       end;
  2977.     end;
  2978.     ColorToleranceSpeed(CTS);
  2979.     SetColorSpeed2Modifiers(0.02, 0.02);
  2980.   end;
  2981. end;
  2982.  
  2983. Procedure CheckList;
  2984. begin
  2985.   FindNormalRandoms;
  2986.   If (Not LoggedIn) then
  2987.     LoginPlayer;
  2988. end;
  2989.  
  2990. Procedure SaveUsNRun;
  2991. var
  2992.   X, Y, Dist, Tries: Integer;
  2993. begin
  2994.   Tries:= 0;
  2995.   LProc:= 'RunAway';
  2996.   if ((PrayerLevel <= WTP) or OutOfPrayer) then
  2997.   begin
  2998.     UpLadder;
  2999.     while((FoundSymbol(1, X, Y, Dist) = False) or (FoundSymbol(2, X, Y, Dist) = False) or (Tries < 10)) do
  3000.     begin
  3001.       UpLadder;
  3002.       Inc(Tries);
  3003.       wait(100);
  3004.       if (tries >= 10) then
  3005.         break;
  3006.       writeln('RunAway: SymbolFinding');
  3007.     end;
  3008.  
  3009.     Tries:= 0;
  3010.     if (FindObjectMM([LadderColour], Dist, 10, 10, LTol, False, [0.58, 4.00]) = False) then
  3011.     begin
  3012.       repeat
  3013.         PrayAltar;
  3014.         while IsMoving do
  3015.           wait(100);
  3016.         Inc(Tries);
  3017.         if (tries > 5) then
  3018.           break;
  3019.       Until((PrayerLevel > WTP)  or (Tries > 5));
  3020.     end;
  3021.   end;
  3022. end;
  3023.  
  3024. Procedure SOS;
  3025. var
  3026.   X, Y, Dist: Integer;
  3027. begin
  3028.   CheckList;
  3029.  
  3030.   if ((SaveMe = True) And (NoSS = True)) then
  3031.   begin
  3032.     LProc:= 'SOS';
  3033.     repeat
  3034.       if (HPLevel > WTE) then
  3035.         SaveMe:= False;
  3036.       SaveUsNRun;
  3037.       MakeCompass('W');
  3038.       writeln('~SOS~ Out of food AND not using SoulSplit.. Running Away..');
  3039.       SaveUsNRun;
  3040.     until(FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or (FindLadder = False) or (SaveMe = False));
  3041.  
  3042.     repeat
  3043.       Logout;
  3044.     until(Not LoggedIn);
  3045.     writeln('~SOS~ Successfully Ran Away..');
  3046.     TerminateScript;
  3047.   end;
  3048. end;
  3049.  
  3050. Procedure RefillPrayer;
  3051. var
  3052.   X, Y, Dist, Tries: Integer;
  3053. begin
  3054.   Tries:= 0;
  3055.   LProc:= 'RefillPrayer';
  3056.   if AtHartwin then
  3057.     exit;
  3058.  
  3059.   if ((PrayerLevel <= WTP) or OutOfPrayer) then
  3060.   begin
  3061.     UpLadder;
  3062.     while((FoundSymbol(1, X, Y, Dist) = False) or (FoundSymbol(2, X, Y, Dist) = False) or (Tries < 10)) do
  3063.     begin
  3064.       Inc(Tries);
  3065.       wait(100);
  3066.       if (tries >= 10) then
  3067.         break;
  3068.       if Debugs then
  3069.         writeln('RefillPrayer: SymbolFinding');
  3070.     end;
  3071.  
  3072.     Tries:= 0;
  3073.     if (FindObjectMM([LadderColour], Dist, 10, 10, LTol, True, [0.58, 4.00]) = False) then
  3074.     begin
  3075.       repeat
  3076.         PrayAltar;
  3077.         while IsMoving do
  3078.           wait(100);
  3079.         Inc(Tries);
  3080.         if (tries > 5) then
  3081.           break;
  3082.       Until((PrayerLevel > WTP)  or (Tries > 5));
  3083.     end;
  3084.  
  3085.     if(FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or (FindLadder = False) or (PrayerLevel > WTP)) then
  3086.       DownLadder;
  3087.     if (IsPrayerOn = False) then
  3088.       TurnPrayerOn(QP);
  3089.   end;
  3090. end;
  3091.  
  3092. Function ReturnFoodInfo(Food: String): FoodStruct;
  3093. begin
  3094.     ResetEverything;
  3095.        Case LowerCase(Food) of
  3096.         'shark':
  3097.                                                   begin
  3098.                                                       Result.Item:= DTMFromString('mlwAAAHicY2dgYChkYmAoB+IqIK4B4gYoOxOIZRkZGKSBWB6IlYBYG4h1gFgNiEMdDRimVacy9JcmMHQXxTG4m2kwxHmYMvDx8TFwAc3FhRnxYCgAAFFKC0Y=');
  3099.                                                       Result.Uptext:= ['Shark', 'hark', 'ark'];
  3100.                                                   end;
  3101.  
  3102.         'raw shark', 'summoning shark', 'bunyip shark':
  3103.                                                   begin
  3104.                                                       Result.Item:= DTMFromString('mWAAAAHicY2FgYDABYj0gtgZiOyCWYGRgkAFiKSBWAOLGmmqGxNhYhpL8fIa8zEwGLqAaZMyIhkEAAEz2BqM=');
  3105.                                                       Result.Uptext:= ['Raw shark', 'hark', 'ark', 'aw sha'];
  3106.                                                   end;
  3107.  
  3108.         'lob', 'lobs', 'lobster', 'lobby', 'lobbies':
  3109.                                                   begin
  3110.                                                       Result.Item:= DTMFromString('mlwAAAHicY2dgYJjPxMCwGIoXAvFMIF4AxEuAuJ8RgicB8XQg7oLiDiDm4+NjKLcRZJjtJ86wJVqaYV2EFMP8AHGGbTHSDFxAc3FhRjwYCgD3pg8b');
  3111.                                                       Result.Uptext:= ['Lob', 'obster', 'bster'];
  3112.                                                   end;
  3113.  
  3114.         'raw lobster', 'raw lob', 'summoning lob',
  3115.         'summoning lobster', 'bunyip lobster', 'bunyip lob':
  3116.                                                   begin
  3117.                                                       Result.Item:= DTMFromString('mQwAAAHicY2ZgYEgG4jQgjgfibCAuBOI8IE40lwXjYkdlBnYgH4YZkTAQAADQ1ATP');
  3118.                                                       Result.Uptext:= ['Raw lobster', 'aw lob', 'lobster', 'obste'];
  3119.                                                   end;
  3120.         'tuna':
  3121.                                                   begin
  3122.                                                       Result.Item:= DTMFromString('mggAAAHicY2NgYPBkYmDwA+JgKO0OxVsYGRg2QvFWIN4JZadGhjPEBAUwRPj5MOQmxDHw8fGB+VxAs7BhRhwYAgDSsAuu');
  3123.                                                       Result.Uptext:= ['Tuna', 'una'];
  3124.                                                   end;
  3125.         'sardine':
  3126.                                                   begin
  3127.                                                       Result.Item:= DTMFromString('mWAAAAHicY2FgYDjOxMBwBIhPAvEZIFZmZGBQBWJ5IJYD4urcLIYFfd0MqZHhDNnxsQxcQD3ImBENgwAADhkJKQ==');
  3128.                                                       Result.Uptext:= ['ardine', 'Sardine', 'dine'];
  3129.                                                   end;
  3130.         'rocktail', 'rock', 'tail':
  3131.                                                   begin
  3132.                                                       Result.Item:= DTMFromString('mWAAAAHicY2FgYHBkZGBwB2J7ILYF4mMMEHweiI8AcUdpGZBkAmMdITYGdiALGTOiYRAAAGyEBgc=');
  3133.                                                       Result.Uptext:= ['ocktail', 'tail', 'ockta', 'Rocktail'];
  3134.                                                   end;
  3135.         'cake':
  3136.                                                   begin
  3137.                                                       Result.Item:= DTMFromString('mrAAAAHic42BgYChhYmAoAOIqKC4G4gYmiHg1ELswQrAjELsCsR0QuwGxFxTv376d4czhwwwTu7sZ5s+YwbB+xQoGNTlWhsIoAYYYYV4GLqAd+DAjAQwDAJ8PEe0=');
  3138.                                                       Result.Uptext:= ['ake', 'Cake'];
  3139.                                                   end;
  3140.         'bass':
  3141.                                                   begin
  3142.                                                       Result.Item:= DTMFromString('mggAAAHicY2NgYJjFxMAwD4pnAvF8IF4MxD6MEOwBxO5A7ArFfHx8DGed5BjKvZ0ZNltJMcw3FgdjLqBZ2DAjDgwBALd+CvI=');
  3143.                                                       Result.Uptext:= ['ass', 'Bass'];
  3144.                                                   end;
  3145.         'sword', 'swordy', 'swordfish', 'swords',
  3146.                             'swordies', 'sword fish':
  3147.                                                   begin
  3148.                                                       Result.Item:= DTMFromString('mbQAAAHicY2VgYMhjYmDIAOIsIC4G4kIg9mZkYPAHYi8g9gViTyDuTJzIUBXWyFAUWAmmc32LGbiA+tExIxYMBgDAPgpw');
  3149.                                                       Result.Uptext:= ['Swordfis', 'wordfis', 'ordfis', 'Swordfish'];
  3150.                                                   end;
  3151.         'monk', 'monkfish', 'monk fish', 'monks':
  3152.                                                   begin
  3153.                                                       Result.Item:= DTMFromString('mlwAAAHicY2dgYDjIxMCwB4h3AfFOID4AxEeheBYjBE8H4nlAPA2IZwDxHCAWEuJgiApwZQjxcmDI9nRncDTVZtBWVWRwtDBi4AKaiwsz4sFQAAANlg6I');
  3154.                                                       Result.Uptext:= ['Monkfi', 'onkfish', 'onkfis', 'Monkfish'];
  3155.                                                   end;
  3156.         'cave', 'cavefish', 'cave fish':
  3157.                                                   begin
  3158.                                                       Result.Item:= DTMFromString('mlwAAAHicY2dgYJjCxMAwGYinAfEMKLsfiCcAMTcjAwMHELNCaRYozQvEpX4RDAuz8xhmpWcyrC4qZTDQ02NYlJPPcKChmYELaC4uzIgHQwEALJsOBw==');
  3159.                                                       Result.Uptext:= ['avefi', 'Cavefish', 'avefish', 'avefish'];
  3160.                                                   end;
  3161.         'pizza', 'meat pizza':
  3162.                                                   begin
  3163.                                                       Result.Item:= DTMFromString('m1gAAAHic42JgYChhYmCoA+JKIC4F4kImiFg+VLwJiKuBuIeRgaEPiDuAuBOK+4F4EhBPBeJeIG4F4uVLJRnKJQXBGMYG0f1xokDbmOCYC0gSgxmJxAgAAEAWEdw=');
  3164.                                                       Result.Uptext:= ['Pizza', 'eatpiz'];
  3165.                                                   end;
  3166.         'turtle', 'sea', 'sea turtle', 'squirtle':
  3167.                                                   begin
  3168.                                                       Result.Item:= DTMFromString('mlwAAAHicY2dgYJjCxMAwEYhnAPEsIJ4KxHOAuB+IpzMCxYB4BhBPhuKFQDwfiH09nBj8vVzA2NXRhsHD2Y4h15+fIdGNj4ELaC4uzIgHQwEAvecOTA==');
  3169.                                                       Result.Uptext:= ['turtle', 'Seaturtle', 'Sea-turtle', 'urtle', 'ea-tur', 'eaturle'];
  3170.                                                   end;
  3171.         'manta', 'ray', 'manta ray', 'mantaray':
  3172.                                                   begin
  3173.                                                       Result.Item:= DTMFromString('mggAAAHicY2NgYMhlYmAoBOIcIM4E4mIgzgDi3YwMDDuBeBsQ7wPivVB+hLMhg5eFJkOUixEYg9jJ3uYMXECzsGFGHBgCAAfwC+4=');
  3174.                                                       Result.Uptext:= ['manta', 'Manta', 'antaray', 'MantaRay', 'Manta-ray', 'ntara'];
  3175.                                                   end;
  3176.         end;
  3177. end;
  3178.  
  3179. Procedure HealPlayer(Food: TStringArray);
  3180. var
  3181.   I, X, Y, Scrolls: Integer;
  3182.   TPA: TPointArray;
  3183.   FS: FoodStruct;
  3184. begin
  3185.   LProc:= 'HealPlayer';
  3186.    if (HPLevel <= WTE) then
  3187.    begin
  3188.     if (GetCurrentTab <> Tab_Inv) then
  3189.       GameTab(Tab_Inv);
  3190.      wait(1000);
  3191.      For I:= 0 To High(Food) do
  3192.      begin
  3193.       FS:= ReturnFoodInfo(Food[I]);
  3194.  
  3195.     if (GetCurrentTab <> Tab_Inv) then
  3196.       GameTab(Tab_Inv);
  3197.      wait(500);
  3198.      SetLength(TPA, 200);
  3199.      Case LowerCase(Food[I]) of
  3200.         'raw shark', 'summoning shark', 'bunyip shark',
  3201.         'raw lobster', 'raw lob', 'summoning lob',
  3202.         'summoning lobster', 'bunyip lobster', 'bunyip lob':
  3203.             begin
  3204.               Scrolls := DTMFromString('mbQAAAHicY2VgYJjGxMAwC4jnAfFcKC5iZGAoBOIcIC4G4log9vE2ZggJiWKIiVvMkJCWzuDmMZeBC6gfHTNiwWAAABHPCxQ=');
  3205.               If (FindDTM(Scrolls, X, Y, MIX1, MIY1, MIX2, MIY2) and FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2)) then
  3206.               repeat
  3207.                 if SummoningRenew(WhichFamiliar) then
  3208.                 begin
  3209.                   if InteractFamiliar(['ast', 'Cast', 'allow Wh', 'Whole', 'hole', 'ole', 'allow', 'wall']) then
  3210.                   begin
  3211.                     SummoningRenew(WhichFamiliar);
  3212.                     FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2);
  3213.                     MMouse(X, Y, 0, 0);
  3214.                     if WaitUptextMulti(FS.Uptext, 500) then
  3215.                     begin
  3216.                       ClickMouse2(MOUSE_LEFT);
  3217.                       Wait(500);
  3218.                       FreeDTM(Scrolls);
  3219.                       FreeDTM(FS.Item);
  3220.                       Exit;
  3221.                     end;
  3222.                   end;
  3223.                 end else
  3224.                   break;
  3225.                 if ((Not FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2)) or (Not FindDTM(Scrolls, X, Y, MIX1, MIY1, MIX2, MIY2))) then
  3226.                 begin
  3227.                   MMouse(660, 188, 10, 10);
  3228.                   ClickMouse2(MOUSE_LEFT);
  3229.                   Break;
  3230.                 end;
  3231.               Until((HPLevel > WTE) or (FindDTMs(FS.Item, TPA, MIX1, MIY1, MIX2, MIY2) = False) or (FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2) = False));
  3232.               FreeDTM(Scrolls);
  3233.             end;
  3234.      else
  3235.       try
  3236.        if FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2) then
  3237.        repeat
  3238.           FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2);
  3239.           FindDTMs(FS.Item, TPA, MIX1, MIY1, MIX2, MIY2);
  3240.           MMouse(X, Y, 5, 5);
  3241.           WaitUptextMulti(['at', 'eat', 'Eat'], 500);
  3242.           ClickMouse2(true);
  3243.           wait(1000);
  3244.        Until((HPLevel > WTE) or (FindDTMs(FS.Item, TPA, MIX1, MIY1, MIX2, MIY2) = False) or (FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2) = False));
  3245.       except
  3246.         SaveMe:= True;
  3247.       end;
  3248.      end;
  3249.  
  3250.     if (GetCurrentTab <> Tab_Inv) then
  3251.       GameTab(Tab_Inv);
  3252.       try
  3253.        if((HPLevel <= WTE) and (Not FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2)) and (QP = False)) then
  3254.        begin
  3255.         writeln('~HealPlayer~ HPLevel: ' + ToStr(HPLevel));
  3256.        end else
  3257.         if (HPLevel < 400) then
  3258.         begin
  3259.           writeln('~EMERGENCY~ HPLevel: ' + ToStr(HPLevel) + ' Is Too Low');
  3260.           SaveMe:= True;
  3261.         end;
  3262.  
  3263.        FreeDTM(FS.Item);
  3264.      except
  3265.       SaveMe:= True;
  3266.      end;
  3267.     end;
  3268.   end;
  3269. end;
  3270.  
  3271. Procedure FightZombies;
  3272. begin
  3273.   LProc:= 'FightZombies';
  3274.   if AtHartwin then
  3275.     exit;
  3276.  
  3277.   GameTab(Tab_Inv);
  3278.   while (InFight) do
  3279.   begin
  3280.     wait(50);
  3281.     if PickItems then
  3282.       PickUpItems(Players[CurrentPlayer].Strings);
  3283.     RefillPrayer;
  3284.     HealPlayer(Food);
  3285.  
  3286.     if ((IsPrayerOn = False)  and (PrayerLevel > WTP)) then
  3287.       TurnPrayerOn(QP);
  3288.   end;
  3289.  
  3290.   if (not InFight) then
  3291.   begin
  3292.     if PickItems then
  3293.       PickUpItems(Players[CurrentPlayer].Strings);
  3294.     RefillPrayer;
  3295.     HealPlayer(Food);
  3296.  
  3297.     if ((IsPrayerOn = False) and (PrayerLevel > WTP)) then
  3298.       TurnPrayerOn(QP);
  3299.     AttackZombies;
  3300.   end;
  3301. end;
  3302.  
  3303. procedure RunAwayEx(dir: variant; RunFar: Boolean; Action, WaitTime: Integer);
  3304. var
  3305.   Rad, T: Integer;
  3306.   Deg: extended;
  3307. begin
  3308.   if (not LoggedIn) then exit;
  3309.  
  3310.   if RunFar then
  3311.     Rad := 63
  3312.   else
  3313.     Rad := 30;
  3314.   Deg := variantToDirection(dir);
  3315.  
  3316.   if (Action < 3) then
  3317.   begin
  3318.     //SetRun(True);
  3319.     MFNF(Trunc(Rad * Sin(Radians(FixD(Rs_GetCompassAngleDegrees + Deg))) + MMCX + Random(5)),
  3320.       Trunc(-Rad * Cos(Radians(FixD(Rs_GetCompassAngleDegrees + Deg))) + MMCY + Random(5)), 1, 1);
  3321.     FFlag(0);
  3322.     Wait(500 + Random(1500));
  3323.     t := GetSystemTime;
  3324.     while ((GetSystemTime - t) < WaitTime) and (LoggedIn) do
  3325.       if (Random(5) = 0) then
  3326.         IdleTime(2000, 500, 1.0)
  3327.       else
  3328.         Wait((WaitTime - (GetSystemTime - t)) div 5);
  3329.   end;
  3330.  
  3331.   if (Action = 1) or (Action = 3) then
  3332.   begin
  3333.     MFNF(Trunc(Rad * Sin(Radians(FixD(Rs_GetCompassAngleDegrees + (Deg + 180)))) + MMCX - Random(5)),
  3334.       Trunc(-Rad * Cos(Radians(FixD(Rs_GetCompassAngleDegrees + (Deg + 180)))) + MMCY - Random(5)), 1, 1);
  3335.     FFlag(0);
  3336.     Wait(500 + Random(1500));
  3337.   end;
  3338.  
  3339.   //SetRun(False);
  3340. end;
  3341.  
  3342. Function DownTheHall: Boolean;
  3343. var
  3344.   X, Y, Dist: Integer;
  3345. begin
  3346.   LProc:= 'DownTheHall';
  3347.   if (FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or AtHartwin or FindLadder) then
  3348.     exit
  3349.   else
  3350.     begin
  3351.       ClickNorth(SRL_ANGLE_HIGH);
  3352.       RunAwayEx('E', True, 2, 5000);
  3353.       RunAwayEx('S', True, 2, 5000);
  3354.       Wait(1000);
  3355.       MakeCompass('W');
  3356.     end;
  3357.  
  3358.   Result:= FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or AtHartwin or FindLadder;
  3359.   SOS;
  3360. end;
  3361.  
  3362. Procedure MainLoop;
  3363. var
  3364.   X, Y, Dist: Integer;
  3365. begin
  3366.   SOS;
  3367.   TalkHartwin;
  3368.   SOS;
  3369.   FightZombies;
  3370.   if (Not FindLadder) then
  3371.     DownTheHall;
  3372.   RefillPrayer;
  3373.   if Paint then
  3374.     paintReport;
  3375.   printReport;
  3376.   SOS;
  3377.   if((IsPrayerOn = False)  and (PrayerLevel > WTP)) then
  3378.     TurnPrayerOn(QP);
  3379.   FightZombies;
  3380.   SOS;
  3381.   HealPlayer(Food);
  3382.   if (Not FindLadder) then
  3383.     DownTheHall;
  3384.   FightZombies;
  3385.   if Paint then
  3386.     paintReport;
  3387.   printReport;
  3388.   SOS;
  3389.   if(FoundSymbol(1, X, Y, Dist) and (PrayerLevel > WTP)) then
  3390.     DownLadder;
  3391.   SOS;
  3392.   FightZombies;
  3393.   if (Not FindLadder) then
  3394.     DownTheHall;
  3395.   if ((TimeFromMark(TimeToDrink) > 60000) or (TimeFromMark(TimeToDrink) < 1)) then
  3396.   begin
  3397.     DrinkPotion(Potion);
  3398.     TimeToDrink:= 0;
  3399.     MarkTime(TimeToDrink);
  3400.   end;
  3401.   if Paint then
  3402.     paintReport;
  3403.   printReport;
  3404.   SummoningRenew(WhichFamiliar);
  3405. end;
  3406.  
  3407. begin
  3408.   LoadInfo;
  3409.   if (Permanent = False) then
  3410.   begin
  3411.     SafeInitForm;
  3412.     SafeShowFormModal;
  3413.   end;
  3414.   InitializeVariables;
  3415.   Smart_Server := 72;
  3416.   Smart_Members := True;
  3417.   Smart_Signed := True;
  3418.   Smart_SuperDetail := False;
  3419.  
  3420.   SetupSRL;
  3421.   DeclarePlayers;
  3422.   LoginPlayer;
  3423.   cleardebug;
  3424.   SetAngle(SRL_ANGLE_HIGH);
  3425.   AddOnTerminate('LastRun');
  3426.  
  3427.   SStatus:= 'Running';
  3428.   StartExperience:= 0;
  3429.   RCTS:= GetColorToleranceSpeed;
  3430.   ToggleXPBar(True);
  3431.   StartExperience:= GetXPBarTotal;
  3432.   SmartSetDebug(Paint);
  3433.   Smart_ClearCanvas;
  3434.  
  3435.   MouseBox(MSX1, MSY1, MSX2, MSY2, 3);
  3436.   InitialSkills;
  3437.   PotSkills;
  3438.   DrinkPotion(Potion);
  3439.   HealPlayer(Food);
  3440.   LoadDTMs;
  3441.   AddOnTerminate('FreeLoadedDTMs');
  3442.  
  3443.   repeat
  3444.     MainLoop;
  3445.     if ((Not LoggedIn) and (Not SaveMe)) then
  3446.       LoginPlayer;
  3447.   until(false);
  3448. end.
Advertisement
Add Comment
Please, Sign In to add comment