/*
 *  Soul dla malzenstw
 *  Zakodowany przez Morleya w '98
 *
 *  Projekty emotow:
 *  Xilia (w chwili obecnej wszystkie) :))
 *
 *  Soul bierze obiekt partnera z auto savujacej sie obraczki.
 */

#pragma no_clone
#pragma strict_types
#pragma save_binary

inherit "/cmd/std/command_driver";

#include <exec.h>
#include <adverbs.h>
#include <cmdparse.h>
#include <macros.h>
#include <stdproperties.h>
#include <malzonkowie.h>

#define SUBLOC_SOULEXTRA    "_soul_cmd_extra"
#define SOULDESC(x)         (this_player()->add_prop(LIVE_S_SOULEXTRA, (x)))
#define MAX_FREE_EMOTE      60  /* Maksymalna dlugosc wolnego emota. */

#define CHECK_MOUTH_BLOCKED; \
            if (Prop = this_player()->query_prop(LIVE_M_MOUTH_BLOCKED)) { \
            notify_fail(stringp(Prop) ? Prop : \
                "Nie jestes w stanie wydobyc z siebie zadnego dzwieku.\n"); \
            return 0; }

#define CHECK_MULTI_TARGETS(str) \
            if (sizeof(cele) > 1) { notify_fail("Naraz mozesz " + str + \
                ".\n"); return 0; }

#define IS_BALD(gracz) \
            (member_array("lysy", gracz->query_przymiotniki()[0]) != -1)

#define BUG_FAIL(str) \
            (log_file("bugi", ctime(time()) + ": [" + \
                file_name(this_object()) + "] " + str + "\n"), \
            "\nBLAD !!! Arkadia bedzie ci wdzieczna za zgloszenie go, " + \
                this_player()->query_wolacz() + ".\n\n")

#define CHECK_NO_ARG(str) \
		if (stringp(str)) { notify_fail ("Po prostu " + query_verb() + \
						 ".\n"); return 0; }

#define PARTNER_PRESENT(ob) \
              if (!objectp(ob) || !CAN_SEE(this_player(), ob)) { notify_fail (this_player()->koncowka("Twojej zony ", \
		     "Twojego meza ") + "nie ma przy tobie.\n"); return 0; }

#define CZY_CIEMNO; \
        if (!CAN_SEE_IN_ROOM (this_player())) { notify_fail("Niestety nie jestes w " + \
					     "stanie nic zobaczyc.\n"); return 0; }

#define TYLKO_KOB; \
            if (this_player()->query_gender() != G_FEMALE) { \
		notify_fail("To jest raczej domena kobiet.\n"); return 0; }

#define TYLKO_MEZ; \
            if (this_player()->query_gender() != G_MALE) { \
		notify_fail("To jest raczej domena mezczyn.\n"); return 0; }

private mixed Prop;             /* Uzywana przez CHECK_MOUTH_BLOCKED. */

/*
 *  Zwraca nazwe soula.
 */
public string
get_soul_id()
{
    return "malzonkowie";
}

/*
 *  Lista komend. Prosze dodawac nowe w kolejnosci alfabetycznej.
 */
public mapping
query_cmdlist()
{
    return ([
	     "mzbiodro" : "mzbiodro",
	     "mzdoniczka" : "mzdoniczka",   
	     "mzdran" : "mzdran",
	     "mzkopnij" : "mzkopnij",
	     "mzmrugnij" : "mzmrugnij",
	     "mzmusnij" : "mzmusnij",
	     "mznoc" : "mznoc",
	     "mzobiecaj" : "mzobiecaj",
	     "mzpocaluj" : "mzpocaluj",
	     "mzpogladz" : "mzpogladz",
	     "mzprzepros" : "mzprzepros",
	     "mzprzeszukaj" : "mzprzeszukaj",
	     "mzrozpromien" : "mzrozpromien",
	     "mzspojrz" : "mzspojrz",
	     "mzszepnij" : "mzszepnij",
	     "mzuszczypnij" : "mzuszczypnij",
	     "mzwalek" : "mzwalek",
	     "mzwspomnij" : "mzwspomnij",
	     "mzwyprowadz" : "mzwyprowadz",
	     "mzwyrwij" : "mzwyrwij",
	     "mzzachec" : "mzzachec",
	     "mzzastaw" : "mzzastaw",
             "ugryz":"ugryz"
           ]);
}

/*
 * Function name: query_cmd_soul
 * Description  : This is a command soul. This defines it as such.
 * Returns      : int 1 - always.
 */
public int
query_cmd_soul()
{
    return 1;
}

/*
 * Function name: query_partner
 * Description  : Funkcja sprawdza partnera odowlujac sie do obraczki
 * Returns      : object partner jesli obecny (w lokacji), inaczej 0
 *
 */
object
query_partner()
{
    object *oblist;
    mixed ob;
    int a, tmp;

    oblist = deep_inventory (this_player());
    tmp = sizeof(oblist);
    
    for ( a = 0 ; a < tmp ; a++ )
    {
	if ( MASTER_OB (oblist[a]) == OBR_S_MASTER )
	    if ( objectp (ob = oblist[a]->query_partner()) 
		 && member_array ( ob, INV ( ENV (TP) ) ) != -1 )
		return ob;
    }
    
    return 0;
}

/*
 *  Funkcje obslugujace emoty. Prosze dodawac nowe w kolejnosci alfabetycznej.
 */

int
mzbiodro(string str)
{
    object partner = query_partner();
    
    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Powoli i z wyrafinowaniem gladzisz", ({partner}), PL_BIE, " po " +
          "biodrach... " + partner->query_Imie(TP, PL_MIA) + " drzy pod twoim " +
          "dotykiem.");

    all2act("powoli i z wyrafinowaniem gladzi", ({partner}), PL_BIE, " po " +
            "biodrach... " + QCIMIE(partner, PL_MIA) + " drzy pod " + TP->koncowka
            ("jego", "jej") + " dotykiem.");

    target("powoli i z wyrafinowaniem gladzi cie po biodrach. Czujesz jak pod " +
	   TP->koncowka("jego", "jej") + " dotykiem zaczynasz drzec.", ({partner}));
    
    return 1;
}

int
mzdoniczka(string str)
{
    object partner = query_partner();

    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Rzucasz doniczka w kierunku", ({partner}), PL_DOP, ", wrzeszczac z " +
          "odraza o wstretnych podrywacz" + TP->koncowka("kach", "ach") + 
          TP->koncowka(", ktore", ", ktorzy") + " nie wiadomo po co biora slub!");
    
    all2act("rzuca doniczka w kierunku", ({partner}), PL_DOP, ", wrzeszczac z " +
            "odraza o wstretnych podrywacz" + TP->koncowka("kach", "ach") + 
            TP->koncowka(", ktore", ", ktorzy") + " nie wiadomo po co biora slub!");

    target("rzuca doniczka w twoim kierunku, wrzeszczac z odraza o wstretnych " + 
	   "podrywacz" + TP->koncowka("kach", "ach") + TP->koncowka(", ktore", ", ktorzy") +
	   " nie wiadomo po co biora slub!", ({partner}));

    return 1;
}

int
mzdran(string str)
{
    object partner = query_partner();
    
    CHECK_NO_ARG(str);
    TYLKO_MEZ;
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Spogladasz groznie na", ({partner}), PL_BIE, " i oznajamiasz solennie, " +
          "ze zalatwisz tego drania, ktory ostatnio sie do niej przystawial.");

    all2act("spoglada groznie na", ({partner}), PL_BIE, " i oznajmia solennie, ze " +
            "zalatwi tego drania, ktory ostatnio sie do niej przystawial.");

    target("spoglada na ciebie groznie i oznajmia solennie, ze zalatwi tego drania, " +
	   "ktory ostanio sie do ciebie przystawial.", ({partner}));

    return 1;
}

int
mzkopnij(string str)
{
    object partner = query_partner();

    CHECK_NO_ARG(str);
    TYLKO_KOB;
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Brutalnie kopiesz", ({partner}), PL_BIE, " w klejnoty rodzinne, " +
          "wrzeszczac z oburzeniem o niewiernych lajdakach z nadmiarem hormonow!");

    all2act("brutalnie kopie", ({partner}), PL_BIE, " w klejnoty rodzinne, " +
            "wrzeszczac z oburzeniem o niewiernych lajdakach z nadmiarem hormonow!");

    target("brutalnie kopie cie w klejnoty rodzinne, wrzeszczac z oburzeniem o " +
	   "niewiernych lajdakach z nadmiarem horomonow! Ohhh, co za bol...", 
	   ({partner}));

    return 1;
}

int
mzmrugnij(string str)
{
    object partner = query_partner();

    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Mrugasz porozumiewawczo do " + TP->koncowka("swej", "swego"),
	  ({partner}), PL_DOP, " po czym nagle przytulasz sie do " +
	  TP->koncowka("niej", "niego") + " i oboje milczac spogladacie przed " +
	  "siebie.");

    all2act("mruga porozumiewawczo do " + TP->koncowka("swej", "swego"),
	    ({partner}), PL_DOP, " po czym nagle przytula sie do " +
	    TP->koncowka("niej", "niego") + " i oboje milczac spogladaja przed " +
	    "siebie.");

    target("mruga porozumiewawczo do ciebie po czym nagle przytula sie i " +
	   "oboje milczac spogladacie przed siebie.", ({partner}));

    return 1;
}    

int
mzmusnij(string str)
{
    object partner = query_partner();
    
    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);
    
    actor("Miekko muskasz twarz", ({partner}), PL_DOP, " opuszkami palcow, " +
          "nastepnie kladziesz glowe na " + TP->koncowka("jej", "jego") + 
          " ramieniu i wzdychasz z rozmarzeniem.");
    
    all2act("miekko muska twarz", ({partner}), PL_DOP, " opuszkami palcow, " +
            "nastepnie kladzie glowe na " + TP->koncowka("jej", "jego") + 
            " ramieniu i wzdycha z rozmarzeniem.");
   
    target("miekko muska twoja twarz opuszkami palcow, natepnie kladzie ci " +
	   "glowe na ramieniu i wzdycha z rozmarzeniem.", ({partner}));

    return 1;
}

int
mznoc(string str)
{
    CHECK_NO_ARG(str);

    TP->catch_msg("Pograzasz sie we wspomnieniach i nagle przed oczami staje ci " +
		  "twoja noc poslubna. Ahhhh...\n");

    allbb("dostaje szklistego wyrazu oczu na samo wspomnienie swej nocy " +
	  "poslubnej.");
    
    return 1;
}

int
mzobiecaj(string str)
{
    object partner = query_partner();

    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Ze skrucha przepraszasz", ({partner}), PL_BIE, " i obiecujesz, ze to " +
          "sie wiecej nie powtorzy.");

    all2act("ze skrucha przeprasza", ({partner}), PL_BIE, " i obiecuje, ze to sie " +
            "wiecej nie powtorzy.");

    target("przeprasza cie ze skrucha i obiecuje, ze to sie wiecej nie powtorzy.",
	   ({partner}));

    return 1;
}

int
mzpocaluj(string str)
{
    object partner = query_partner();
    
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);
    if(!stringp(str))
	str = "w policzek";
    switch(str)
    {
    case "w policzek":
    case "w ucho":
    case "w uszko":
    case "w szyje":
    case "w czolko":
    case "w czolo":
    case "w reke":
    case "w dlon":
    case "w nos":
    case "w usta":
	break;
	
    default:
	notify_fail("Pocalowac w co?\n");
	return 0;
    }
    
    actor("Delikatnie calujesz " + TP->koncowka("swoja zone", "swego meza"), 
	  ({partner}), PL_BIE, " " + str + ", usmiechajac sie czule.");
	  
    all2act("delikatnie caluje " + TP->koncowka("swoja zone", "swego meza"),
	    ({partner}), PL_BIE, " " + str + ", usmiechajac sie czule.");
    if(CAN_SEE(partner, TP))
	partner->catch_msg(TP->koncowka("Twoj maz ", "Twoja zona ")
			   + QIMIE(TP, PL_MIA) + " delikatnie caluje cie " 
			   + str + ", usmiechajac sie czule.\n");
    else
	partner->catch_msg("Ktos delikatnie caluje cie " + str + ".\n");
    return 1;
}

int
mzpogladz(string str)
{
    object partner = query_partner();
    
    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Gladzisz", ({partner}), PL_BIE, " po wlosach, bujajac w oblokach.");

    all2act("gladzi", ({partner}), PL_BIE, " po wlosach, bujajac w oblokach.");

    target("gladzi cie po wlosach, bujajac w oblokach.", ({partner}));
    
    return 1;
}

int
mzprzepros(string str)
{
    object partner = query_partner();

    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Niepewnie przepraszasz", ({partner}), PL_BIE, " za to, ze posadzal" +
          TP->koncowka("es ja", "as go") + " o zdrade.");

    all2act("niepewnie przeprasza", ({partner}), PL_BIE, " za to, ze posadzal" +
            TP->koncowka(" ja", "a go") + " o zdrade.");

    target("niepewnie przeprasza cie za to, ze posadzal" + TP->koncowka("", "a") +
	   " cie o zdrade.", ({partner}));

    return 1;
}

int
mzprzeszukaj(string str)
{
    object partner = query_partner();

    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Wnikliwie przeszukujesz rzeczy", ({partner}), PL_DOP, " w poszukiwaniu " +
          "dowodow zdrady!");

    all2act("wnikliwie przeszukuje rzeczy", ({partner}), PL_DOP, " w poszukiwaniu " +
            "dowodow zdrady!");

    target("wnikliwie przeszukuje twoje rzeczy w poszukiwaniu dowodow zdrady!",
	   ({partner}));

    return 1;
}

int
mzrozpromien(string str)
{
    object partner = query_partner();

    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Rozpromieniasz sie na widok " + TP->koncowka("swej", "swego"),
	  ({partner}), PL_DOP);

    all2actbb("rozpromienia sie na widok " + TP->koncowka("swej", "swego"), 
	      ({partner}), PL_DOP);

    targetbb("rozpromienia sie na twoj widok.", ({partner}));

    return 1;
}

int
mzspojrz(string str)
{
    object partner = query_partner();

    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);
    
    actor("Rzucasz namietne spojrzenie", ({partner}), PL_CEL, ", po czym " +
          "wystudiowanym ruchem wyciagasz reke w " + partner->koncowka("jego", "jej") +
          " kierunku.");

    all2actbb("rzuca namietne spojrzenie", ({partner}), PL_CEL, ", po czym " +
              "wystudiowanym ruchem wyciaga reke w " + partner->koncowka("jego", "jej") +
              " kierunku.");

    targetbb("rzuca ci namietne spojrzenie, po czym wystudiowanym " +
	     "ruchem wyciaga reke w twoim kierunku.", ({partner}));

    return 1;
}

int
mzszepnij(string str)
{
    object partner = query_partner();

    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Szepczesz wyrazy milosci do ucha", ({partner}), PL_DOP, ", po czym " +
          "delikatnie przygryzasz " + TP->koncowka("jej", "mu") + " platek uszny. " +
          partner->query_Imie(TP, PL_MIA) + " z niewiadomych przyczyn zaczyna " +
          "sie rumienic.");

    all2act("szepcze cos do ucha", ({partner}), PL_DOP, ", po czym delikatnie " +
            "przygryza " + TP->koncowka("jej", "mu") + " platek uszny. " +
            QCIMIE(partner, PL_MIA) + " z niewiadomych przyczyn zaczyna sie " +
            "rumienic.");

    target("szepcze ci do ucha wyrazy milosci, po czym delikatnie przygryza ci " +
	   "platek uszny. Czujesz, ze wbrew sobie zaczynasz sie rumienic.", ({partner}));

    partner->add_prop(LIVE_S_SOULEXTRA, "Rumieni sie.");
    return 1;
}

int
mzuszczypnij(string str)
{
    object partner = query_partner();

    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Podszczypujesz swoj" + TP->koncowka("a", "ego"), ({partner}), PL_BIE, " w " +
          "posladek. " + partner->query_Imie(TP, PL_MIA) + " podskakuje z dzikim piskiem, " +
          "po czym odwraca sie, a wyraz swietego oburzenia na " + TP->koncowka
          ("jej", "jego") + " twarzy zmienia sie gwaltownie w wyraz ulgi.");

    all2act("podszczypuje swoj" + TP->koncowka("a", "ego"), ({partner}), PL_BIE, " w " +
            "posladek. " + QCIMIE(partner, PL_MIA) + " podskakuje z dzikim piskiem, " +
            "po czym odwraca sie, a wyraz swietego oburzenia na " + TP->koncowka
            ("jej", "jego") + " twarzy zmienia sie gwaltownie w wyraz ulgi.");

    partner->catch_msg
	("Ktos bezczelnie podszczypuje cie w posladek. Podskakujesz z dzikim " +
	 "piskiem, po czym szybko odwracasz sie. Zobaczywszy jednak, ze to tylko " +
	 TP->koncowka("twoj maz ", "twoja zona ") +
	 QIMIE(TP, PL_MIA) + " szybko uspokajasz sie, a wyraz swietego oburzenia " +
	 "na twojej twarzy zmienia sie w wyraz ulgi.\n");

    return 1;
}

int
mzwalek(string str)
{
    object partner = query_partner();

    CHECK_NO_ARG(str);
    TYLKO_KOB;
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Wyciagasz walek i z glosnym jazgotem zaczynasz ganiac", ({partner}),
	  PL_BIE, " po okolicy. " + partner->query_Imie(TP, PL_MIA) + " z wprawa " +
	  "sugerujaca niemala praktyke uskakuje przed twoimi ciosami.");

    all2act("wyciaga walek i z glosnym jazgotem zaczyna ganiac ", ({partner}),
	    PL_BIE, " po okolicy. " + QCIMIE(partner, PL_MIA) + " z wprawa " +
	    "sugerujaca niemala praktyke uskakuje przed jej ciosami.");

    target("wyciaga walek i z glosnym jazgotem zaczyna cie ganiac po okolicy. " +
	   "Tylko dzieki niemalej praktyce udaje ci sie uniknac ciosow.", ({partner}));
    
    return 1;
}

int
mzwspomnij(string str)
{
    object partner = query_partner();

    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Spogladasz z uczuciem na", ({partner}), PL_BIE, " i nagle oblewasz " +
          "sie glebokim rumiencem, przypominajac sobie noc poslubna.");

    all2actbb("spoglada z uczuciem na", ({partner}), PL_BIE, " i nagle oblewa " +
              "sie glebokim rumiencem, przypominajac sobie noc poslubna.");

    targetbb("spoglada na ciebie z uczuciem i nagle oblewa sie glebokim rumiencem, " +
	     "przypominajac sobie noc poslubna.", ({partner}));

    return 1;
}

int
mzwyprowadz(string str)
{
    CHECK_NO_ARG(str);

    TP->catch_msg("Ze zloscia oznajmiasz, ze wyprowadzasz sie do " +
		  TP->koncowka("swojego przyjaciela", "swojej przyjaciolki") + ".\n");

    all("ze zloscia oznamia, ze wyprowadza sie do " +
	TP->koncowka("swojego przyjaciela.", "swojej przyjaciolki."));

    return 1;
}

int
mzwyrwij(string str)
{
    object partner = query_partner();

    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("W napadzie zazdrosci wyrywasz", ({partner}), PL_CEL, " peczki wlosow " +
          "z glowy!");

    all2act("w napadzie zazdrosci wyrywa", ({partner}), PL_CEL, " peczki wlosow " +
            "z glowy!");

    target("w napadzie zazdrosci wyrywa ci peczki wlosow z glowy!", ({partner}));

    return 1;
}

int
mzzachec(string str)
{
    object partner = query_partner();
    
    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);

    actor("Przymykasz oczy i uchylasz usta zachecajac", ({partner}), PL_BIE,
          " by cie pocalowal" + TP->koncowka("a","") + ".");

    all2actbb("przymyka oczy i uchyla usta z wyrazna zacheta, by zostac pocalowa" +
	      TP->koncowka("nym", "na") + " przez", ({partner}), PL_BIE, ".");
    
    targetbb("przymyka oczy i uchyla usta z wyrazna zacheta, by zostac przez " +
	     "ciebie pocalowa" + TP->koncowka("nym", "na") + ".", ({partner}));

    return 1;
}

int
mzzastaw(string str)
{
    object partner = query_partner();
    
    CHECK_NO_ARG(str);
    CZY_CIEMNO;
    PARTNER_PRESENT(partner);
    
    TP->reveal_me(1);

    actor("Usilnie probojesz zaslonic", ({partner}), PL_CEL, " widok na wlasnie " +
          TP->koncowka("przechodzacych dwoch powabnych mlodziencow.",
		       "przechodzace dwie powabne niewiasty."));

    all2act("usilnie proboje zaslonic", ({partner}), PL_CEL, " widok na wlasnie " +
            TP->koncowka("przechodzacych dwoch powabnych mlodziencow.",
		         "przechodzace dwie powabne niewiasty."));

    target("usilnie proboje zaslonic ci widok na wlasnie " +
	   TP->koncowka("przechodzacych dwoch powabnych mlodziencow.",
			"przechodzace dwie powabne niewiasty."), ({partner}));

    return 1;
}

int
ugryz(string str)
{
    string *jak = allocate(2);
    string w_co;
    object *celet, *cele;
    
    if(!stringp(str))
    {
	notify_fail("Ugryz kogo [jak?] [w co?].\n");
	return 0;
    }
    cele = parse_this(str, "%l:" + PL_BIE + " %s");
    if(!sizeof(cele))
    {
	notify_fail("Ugryz kogo [jak?] [w co?].\n");
	return 0;
    }

    CHECK_MULTI_TARGETS("gryzc tylko jedna osobe");
    
    parse_command(str, ENV(TP), "%l:" + PL_BIE + " %s", celet, str);
    if(stringp(str) && str != "")
	jak = parse_adverb(str, "pieszczotliwie", 0);
    else 
	jak[1] = "pieszczotliwie";
    
    if(!stringp(jak[0]))
	jak[0] = "";

    switch(jak[0])
    {
    case "w nos":
	w_co = " w nos";
	break;
	
    case "w nosek":
	w_co = " w nosek";
	break;

    case "":
    case "w ucho":
	w_co = " w ucho";
	break;

    case "w uszko":
	w_co = " w uszko";
	break;
	
    case "w szyje":
	w_co = " w szyje";
	break;

    case "w kark":
	w_co = " w kark";
	break;

    case "w reke":
    case "w dlon":
	w_co = " w dlon";
	break;

    case "w ramie":
	w_co = " w ramie";
	break;

    default:
	notify_fail("Ugryz kogo [jak?] [w co?].\n");
	return 0;
    }
    actor("Gryziesz", cele, PL_BIE, ADD_SPACE_TO_ADVERB(jak[1]) + w_co + ".");
    all2act(jak[1] + " gryzie", cele, PL_BIE, w_co + ".");
    target("gryzie " + jak[1] + " cie" + w_co + ".", cele, PL_BIE);
    return 1;
}









